From 704b04672786f57bba5c88f87a0417a8a1d7c692 Mon Sep 17 00:00:00 2001 From: Alex Dunmow Date: Fri, 3 Jul 2026 12:47:00 +0800 Subject: [PATCH] feat(abi): wasm plugin ABI protobuf schema v1 (WO-WZ-001) Defines the host<->guest wire contract for the .so -> wazero migration as a repo-local buf module (abi/proto/v1, generated Go in abi/v1): - manifest.proto: PluginManifest mirroring every static field of plugin.PluginRegistration (abi_version, deps, block/template registrations, admin pages, settings schema, theme presets, fonts, master pages, AI actions, RBAC method roles, CSS manifest, icon packs, directory extensions, job types, RAG fetcher types, settings panel, hook flags, core service bindings) - invoke.proto: bn_invoke envelope, Hook catalog (RENDER_BLOCK, RENDER_TEMPLATE, HANDLE_HTTP, JOB, LOAD, UNLOAD, RAG_FETCH, MEDIA_HOOK, DESCRIBE), AbiError, and job/lifecycle/rag/media/describe payloads - render.proto: RenderBlock/RenderTemplate payloads + RenderContext enumerating every ctx value from blocks/context.go (incl. BlockContext 1:1) - http.proto: buffered HttpRequest/HttpResponse for HANDLE_HTTP - db.proto: guest sql-driver messages (DbValue oneof over pgx-mappable types, query/exec/tx with host-side tx handles, SQLSTATE-carrying DbError) - capability.proto: HostCall envelope + one request/response pair per CoreServices interface method (content, settings+update, gating, crypto, menus, datasources, users, subscriptions, media.deposit, email.send, ai.text_call, ai.tools.register, bridge, jobs.submit, embeddings, rag, reviews, badges.refresh) The abi/ buf module is deliberately separate from the repo-root config: proto/ is the shared block/proto submodule (service API contracts); the ABI is SDK-internal and versions in lockstep with the guest shim. New `make abi` target runs buf lint + generate. docs/wasm-abi.md documents the ptr+len calling convention (bn_alloc, bn_invoke, packed u64), hook catalog, error semantics, abi_version evolution rules, and the full registration/ CoreServices coverage tables. Verified: `cd abi && buf lint` exit 0; `go build ./...` exit 0. Co-Authored-By: Claude Fable 5 --- Makefile | 7 + abi/buf.gen.yaml | 12 + abi/buf.yaml | 21 + abi/proto/v1/capability.proto | 541 ++++ abi/proto/v1/db.proto | 108 + abi/proto/v1/http.proto | 37 + abi/proto/v1/invoke.proto | 189 ++ abi/proto/v1/manifest.proto | 215 ++ abi/proto/v1/render.proto | 200 ++ abi/v1/capability.pb.go | 5167 +++++++++++++++++++++++++++++++++ abi/v1/db.pb.go | 1056 +++++++ abi/v1/http.pb.go | 296 ++ abi/v1/invoke.pb.go | 1385 +++++++++ abi/v1/manifest.pb.go | 1450 +++++++++ abi/v1/render.pb.go | 1665 +++++++++++ docs/wasm-abi.md | 197 ++ 16 files changed, 12546 insertions(+) create mode 100644 abi/buf.gen.yaml create mode 100644 abi/buf.yaml create mode 100644 abi/proto/v1/capability.proto create mode 100644 abi/proto/v1/db.proto create mode 100644 abi/proto/v1/http.proto create mode 100644 abi/proto/v1/invoke.proto create mode 100644 abi/proto/v1/manifest.proto create mode 100644 abi/proto/v1/render.proto create mode 100644 abi/v1/capability.pb.go create mode 100644 abi/v1/db.pb.go create mode 100644 abi/v1/http.pb.go create mode 100644 abi/v1/invoke.pb.go create mode 100644 abi/v1/manifest.pb.go create mode 100644 abi/v1/render.pb.go create mode 100644 docs/wasm-abi.md diff --git a/Makefile b/Makefile index 28e3e1a..536d243 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,13 @@ install-ninja: proto: buf generate --path proto/orchestrator/v1/plugin_registry.proto +# Lint + regenerate Go bindings for the wasm plugin ABI (repo-local buf +# module under abi/ — deliberately not part of the proto/ submodule; see +# abi/buf.yaml and docs/wasm-abi.md). Emits Go into abi/v1/. +.PHONY: abi +abi: + cd abi && buf lint && buf generate + .PHONY: update-sdk update-sdk: @set -e; \ diff --git a/abi/buf.gen.yaml b/abi/buf.gen.yaml new file mode 100644 index 0000000..290c7c9 --- /dev/null +++ b/abi/buf.gen.yaml @@ -0,0 +1,12 @@ +# Codegen for the wasm plugin ABI (WO-WZ-001). +# +# go_package is set explicitly in each .proto (managed mode not needed — +# unlike the proto/ submodule, we own these files). With +# paths=source_relative and out: ., v1/*.proto emits to abi/v1/*.pb.go, +# i.e. Go package git.dev.alexdunmow.com/block/core/abi/v1 (abiv1). +version: v2 +plugins: + - local: protoc-gen-go + out: . + opt: + - paths=source_relative diff --git a/abi/buf.yaml b/abi/buf.yaml new file mode 100644 index 0000000..e714d15 --- /dev/null +++ b/abi/buf.yaml @@ -0,0 +1,21 @@ +# Buf module for the wasm plugin ABI (WO-WZ-001). +# +# Deliberately separate from the repo-root buf.yaml: that one wraps the +# proto/ git submodule (shared block/proto service contracts), while this +# ABI is SDK-internal and versions in lockstep with the guest shim, so it +# lives repo-local under abi/proto. Run buf from this directory (`make abi` +# at the repo root). +version: v2 +modules: + - path: proto +lint: + use: + - STANDARD + except: + # The WO/spec fix the schema path at abi/proto/v1/ (module-relative v1/) + # while the proto package is abi.v1, so the package↔directory rule + # cannot hold without an abi/proto/abi/v1 stutter. + - PACKAGE_DIRECTORY_MATCH +breaking: + use: + - FILE diff --git a/abi/proto/v1/capability.proto b/abi/proto/v1/capability.proto new file mode 100644 index 0000000..83e19f3 --- /dev/null +++ b/abi/proto/v1/capability.proto @@ -0,0 +1,541 @@ +// capability.proto — guest→host capability calls (WO-WZ-001). +// +// Each CoreServices interface (core/plugin/deps.go) becomes a host-function +// family; every interface method gets one request/response message pair +// here, mirroring the Go signature 1:1. UUIDs travel as canonical strings; +// map[string]any / []byte-JSON values travel as JSON bytes. +// +// Calls cross via the generic HostCallRequest/HostCallResponse envelope; the +// method string selects the pair (e.g. "content.get_author_profile" → +// ContentGetAuthorProfileRequest/Response). Full method table in +// core/docs/wasm-abi.md. +// +// Not represented here by design: +// - CoreServices.Pool → db.proto (the DB driver messages) +// - CoreServices.Interceptors → host-side only (never crosses) +// - CoreServices.AppURL/MediaPath → LoadRequest.host_config (invoke.proto) +// - CoreServices.CoreServiceBindings → manifest core_service_bindings +// - RAGService.RegisterContentFetcher → manifest rag_content_fetcher_types +// + the RAG_FETCH hook (callback inversion) +// - ai.ToolDefinition.Handler → host→guest tool execution is a runtime-WO +// concern (flagged in core/docs/wasm-abi.md) + +syntax = "proto3"; + +package abi.v1; + +import "google/protobuf/timestamp.proto"; +import "v1/invoke.proto"; + +option go_package = "git.dev.alexdunmow.com/block/core/abi/v1;abiv1"; + +// HostCallRequest is the generic guest→host capability envelope. +message HostCallRequest { + // Capability method, "." (e.g. "crypto.encrypt_secret"). + string method = 1; + // Serialized family request message. + bytes payload = 2; +} + +// HostCallResponse is the generic host→guest capability return envelope. +message HostCallResponse { + // Serialized family response message; empty when error is set. + bytes payload = 1; + // Set when the capability call failed; the guest SDK surfaces it as a + // normal Go error. + AbiError error = 2; +} + +// --- content.* (content.Content) --- + +message ContentGetAuthorProfileRequest { + string id = 1; // UUID +} + +message ContentGetAuthorProfileResponse { + AuthorProfile author = 1; +} + +// AuthorProfile mirrors content.AuthorProfile. +message AuthorProfile { + string id = 1; // UUID + string name = 2; + string slug = 3; + string bio = 4; + string avatar_url = 5; + string website = 6; + map social_links = 7; +} + +message ContentGetPageRequest { + string slug = 1; +} + +message ContentGetPageResponse { + PageInfo page = 1; +} + +// PageInfo mirrors content.PageInfo. +message PageInfo { + string id = 1; // UUID + string slug = 2; + string title = 3; +} + +message ContentGetPostRequest { + string slug = 1; +} + +message ContentGetPostResponse { + PostInfo post = 1; +} + +// PostInfo mirrors content.PostInfo. +message PostInfo { + string id = 1; // UUID + string slug = 2; + string title = 3; + string excerpt = 4; + string featured_image_url = 5; + string author_id = 6; // UUID +} + +message ContentSlugifyRequest { + string text = 1; +} + +message ContentSlugifyResponse { + string slug = 1; +} + +message ContentBlockNoteToHtmlRequest { + // JSON encoding of the BlockNote document map. + bytes doc_json = 1; +} + +message ContentBlockNoteToHtmlResponse { + string html = 1; +} + +message ContentGenerateExcerptRequest { + string html = 1; + int32 max_len = 2; +} + +message ContentGenerateExcerptResponse { + string excerpt = 1; +} + +message ContentStripHtmlRequest { + string html = 1; +} + +message ContentStripHtmlResponse { + string text = 1; +} + +// --- settings.* (settings.Settings) + settings.update (settings.Updater) --- + +message SettingsGetSiteSettingsRequest {} + +message SettingsGetSiteSettingsResponse { + // JSON encoding of the site settings map. + bytes settings_json = 1; +} + +message SettingsGetPluginSettingsRequest { + string plugin_name = 1; +} + +message SettingsGetPluginSettingsResponse { + // JSON encoding of the plugin settings map. + bytes settings_json = 1; +} + +message SettingsUpdateSiteSettingRequest { + string key = 1; + // JSON encoding of the value. + bytes value_json = 2; +} + +message SettingsUpdateSiteSettingResponse {} + +// --- gating.* (gating.Gating) --- + +message GatingGetSubscriberTierLevelRequest { + string user_id = 1; // UUID +} + +message GatingGetSubscriberTierLevelResponse { + int32 level = 1; +} + +message GatingEvaluateAccessRequest { + int32 user_tier_level = 1; + // Absent rule means "no rule" (access granted). + AccessRule rule = 2; +} + +message GatingEvaluateAccessResponse { + AccessResult result = 1; +} + +// AccessRule mirrors gating.AccessRule. +message AccessRule { + int32 min_tier_level = 1; + string override_tier_id = 2; + string teaser_mode = 3; // "hard", "soft", "none" + int32 teaser_percent = 4; +} + +// AccessResult mirrors gating.AccessResult. +message AccessResult { + bool has_access = 1; + string teaser_mode = 2; + int32 teaser_percent = 3; + int32 required_level = 4; +} + +// --- crypto.* (crypto.Crypto) --- + +message CryptoEncryptSecretRequest { + string plaintext = 1; +} + +message CryptoEncryptSecretResponse { + string ciphertext = 1; +} + +message CryptoDecryptSecretRequest { + string ciphertext = 1; +} + +message CryptoDecryptSecretResponse { + string plaintext = 1; +} + +// --- menus.* (menus.Menus) --- + +message MenusGetMenuByNameRequest { + string name = 1; +} + +message MenusGetMenuByNameResponse { + Menu menu = 1; +} + +// Menu mirrors menus.Menu. +message Menu { + string id = 1; // UUID + string name = 2; +} + +message MenusGetMenuItemsRequest { + string menu_id = 1; // UUID +} + +message MenusGetMenuItemsResponse { + repeated MenuItem items = 1; +} + +// MenuItem mirrors menus.MenuItem. +message MenuItem { + string id = 1; // UUID + string menu_id = 2; // UUID + string label = 3; + string url = 4; + string page_slug = 5; + optional string parent_id = 6; // UUID; unset mirrors nil *uuid.UUID + int32 sort_order = 7; + bool open_in_new_tab = 8; + string css_class = 9; + string item_type = 10; + string icon = 11; +} + +// --- datasources.* (datasources.Datasources) --- + +message DatasourcesResolveBucketRequest { + string bucket_id = 1; // UUID +} + +message DatasourcesResolveBucketResponse { + DatasourceResult result = 1; +} + +message DatasourcesResolveBucketByKeyRequest { + string bucket_key = 1; +} + +message DatasourcesResolveBucketByKeyResponse { + DatasourceResult result = 1; +} + +// DatasourceResult mirrors datasources.Result ([]any / map[string]any as +// JSON bytes). +message DatasourceResult { + // JSON array of items. + bytes items_json = 1; + int32 total = 2; + // JSON object; empty when absent. + bytes meta_json = 3; +} + +// --- users.* (auth.PublicUsers) --- + +message UsersGetByUsernameRequest { + string username = 1; +} + +message UsersGetByUsernameResponse { + PublicUserProfile user = 1; +} + +message UsersGetByIdRequest { + string id = 1; // UUID +} + +message UsersGetByIdResponse { + PublicUserProfile user = 1; +} + +// PublicUserProfile mirrors auth.PublicUserProfile. +message PublicUserProfile { + string id = 1; // UUID + string email = 2; + string username = 3; + string display_name = 4; + string avatar_url = 5; + string bio = 6; + bool email_verified = 7; + string role = 8; +} + +// --- subscriptions.* (subscriptions.Subscriptions) --- + +message SubscriptionsGetUserTierLevelRequest { + string user_id = 1; // UUID +} + +message SubscriptionsGetUserTierLevelResponse { + TierLevel tier_level = 1; +} + +// TierLevel mirrors subscriptions.TierLevel. +message TierLevel { + int32 level = 1; + // JSON feature payload. + bytes features = 2; +} + +message SubscriptionsGetTierBySlugRequest { + string slug = 1; +} + +message SubscriptionsGetTierBySlugResponse { + Tier tier = 1; +} + +// Tier mirrors subscriptions.Tier. +message Tier { + string id = 1; // UUID + string name = 2; + string slug = 3; + int32 level = 4; + string description = 5; + // JSON feature payload. + bytes features = 6; + bool is_default = 7; + int32 position = 8; +} + +message SubscriptionsListTiersRequest {} + +message SubscriptionsListTiersResponse { + repeated Tier tiers = 1; +} + +message SubscriptionsListActivePlansRequest { + string tier_id = 1; // UUID +} + +message SubscriptionsListActivePlansResponse { + repeated Plan plans = 1; +} + +// Plan mirrors subscriptions.Plan. +message Plan { + string id = 1; // UUID + string tier_id = 2; // UUID + string billing_interval = 3; + int32 amount = 4; + string currency = 5; + bool is_active = 6; + google.protobuf.Timestamp created_at = 7; +} + +// --- media.deposit (plugin.Media) --- + +// MediaDepositRequest mirrors plugin.MediaDeposit. +message MediaDepositRequest { + // Optional deterministic media row ID (UUID); empty = host generates one. + string id = 1; + string filename = 2; + bytes data = 3; + string alt_text = 4; + string folder = 5; + string source = 6; +} + +// MediaDepositResponse mirrors plugin.MediaResult. +message MediaDepositResponse { + string id = 1; // UUID + // Ready-to-use reference ("media:"). + string ref = 2; + bool created = 3; +} + +// --- email.send (plugin.EmailSender) --- + +message EmailSendRequest { + string to = 1; + string subject = 2; + string body = 3; +} + +message EmailSendResponse {} + +// --- ai.text_call (CoreServices.AITextCall) --- + +message AiTextCallRequest { + string task_key = 1; + string system_prompt = 2; + string user_message = 3; +} + +message AiTextCallResponse { + string text = 1; +} + +// --- ai.tools.* (ai.ToolRegistry) --- + +// AiToolRegisterRequest mirrors ai.ToolDefinition (minus Handler, which +// stays guest-side; execution direction is a runtime-WO concern). +message AiToolRegisterRequest { + string slug = 1; + string name = 2; + string description = 3; + // JSON encoding of the parameter schema map. + bytes parameter_schema_json = 4; +} + +message AiToolRegisterResponse {} + +// --- bridge.* (plugin.PluginBridge) --- +// +// The bridge shares in-process Go values today; across sandboxes only the +// registration/lookup surface serializes. Typed cross-plugin calls need a +// runtime design (see core/docs/wasm-abi.md, open items). + +message BridgeRegisterServiceRequest { + string plugin_name = 1; + string service_name = 2; +} + +message BridgeRegisterServiceResponse {} + +message BridgeGetServiceRequest { + string plugin_name = 1; + string service_name = 2; +} + +message BridgeGetServiceResponse { + bool available = 1; +} + +// --- jobs.submit (plugin.JobRunner) --- + +message JobsSubmitRequest { + string job_type = 1; + // JSON job configuration. + bytes config_json = 2; +} + +message JobsSubmitResponse {} + +// --- embeddings.* (plugin.EmbeddingService) --- + +message EmbeddingsGenerateEmbeddingRequest { + string text = 1; +} + +message EmbeddingsGenerateEmbeddingResponse { + repeated float embedding = 1; +} + +message EmbeddingsEmbedContentRequest { + string source_type = 1; + string source_id = 2; // UUID + string text = 3; +} + +message EmbeddingsEmbedContentResponse { + bool embedded = 1; +} + +message EmbeddingsIsAvailableRequest {} + +message EmbeddingsIsAvailableResponse { + bool available = 1; +} + +// --- rag.* (plugin.RAGService) --- + +message RagQueryRequest { + string query = 1; + int32 limit = 2; +} + +message RagQueryResponse { + repeated RagResult results = 1; +} + +// RagResult mirrors plugin.RAGResult. +message RagResult { + string content = 1; + double score = 2; + map metadata = 3; +} + +message RagOnContentChangedRequest { + string content_type = 1; + string content_id = 2; // UUID +} + +message RagOnContentChangedResponse {} + +// --- reviews.* (plugin.ReviewSubmitter) --- + +// ReviewsSubmitReviewRequest mirrors plugin.SubmitReviewParams. +message ReviewsSubmitReviewRequest { + string table_id = 1; // UUID + string row_id = 2; // UUID + int32 overall_rating = 3; + string review_text = 4; + // JSON encoding of the per-criterion ratings map. + bytes ratings_json = 5; + repeated string photos = 6; +} + +message ReviewsSubmitReviewResponse { + string review_id = 1; +} + +// --- badges.refresh (plugin.BadgeRefresher) --- + +message BadgesRefreshBadgesRequest { + string table_id = 1; // UUID + string row_id = 2; // UUID +} + +message BadgesRefreshBadgesResponse {} diff --git a/abi/proto/v1/db.proto b/abi/proto/v1/db.proto new file mode 100644 index 0000000..c764d94 --- /dev/null +++ b/abi/proto/v1/db.proto @@ -0,0 +1,108 @@ +// db.proto — DB driver messages (WO-WZ-001). +// +// The guest SDK ships a database/sql driver that marshals query text + args +// out through these messages and rows back, so sqlc-generated plugin code +// works unchanged. The host executes on a connection under the per-plugin +// Postgres role. Transactions map to a host-side handle held per guest call +// chain, with a hard deadline so a guest can never pin a connection. + +syntax = "proto3"; + +package abi.v1; + +import "google/protobuf/timestamp.proto"; + +option go_package = "git.dev.alexdunmow.com/block/core/abi/v1;abiv1"; + +// DbValue is one pgx-mappable parameter or column value. +message DbValue { + oneof kind { + // SQL NULL (the bool carries no information; true by convention). + bool null = 1; + bool bool_value = 2; + int64 int64_value = 3; + double float64_value = 4; + string string_value = 5; + bytes bytes_value = 6; + google.protobuf.Timestamp timestamp_value = 7; + // UUID in canonical string form. + string uuid_value = 8; + // JSON/JSONB payload bytes. + bytes jsonb_value = 9; + // NUMERIC in decimal string form (lossless). + string numeric_value = 10; + // text[] array. + TextArray text_array_value = 11; + } +} + +// TextArray is a Postgres text[] value. +message TextArray { + repeated string values = 1; +} + +// DbRow is one result row; values align with DbRowsResponse.columns. +message DbRow { + repeated DbValue values = 1; +} + +// DbError carries a database failure back to the guest driver. +message DbError { + // Postgres SQLSTATE when available (e.g. "23505"); empty otherwise. + string code = 1; + string message = 2; +} + +// DbQueryRequest executes a rows-returning statement. +message DbQueryRequest { + string sql = 1; + repeated DbValue args = 2; + // Transaction handle from DbTxBeginResponse; 0 = no transaction + // (autocommit). + uint64 tx_handle = 3; +} + +// DbRowsResponse returns the full buffered result set. +message DbRowsResponse { + repeated string columns = 1; + repeated DbRow rows = 2; + DbError error = 3; +} + +// DbExecRequest executes a statement without returning rows. +message DbExecRequest { + string sql = 1; + repeated DbValue args = 2; + // Transaction handle from DbTxBeginResponse; 0 = no transaction. + uint64 tx_handle = 3; +} + +message DbExecResponse { + int64 rows_affected = 1; + DbError error = 2; +} + +// DbTxBeginRequest opens a host-side transaction for this call chain. +message DbTxBeginRequest {} + +message DbTxBeginResponse { + // Opaque handle referencing the host-side transaction; never 0 on success. + uint64 tx_handle = 1; + DbError error = 2; +} + +message DbTxCommitRequest { + uint64 tx_handle = 1; +} + +message DbTxCommitResponse { + DbError error = 1; +} + +message DbTxRollbackRequest { + uint64 tx_handle = 1; +} + +message DbTxRollbackResponse { + DbError error = 1; +} diff --git a/abi/proto/v1/http.proto b/abi/proto/v1/http.proto new file mode 100644 index 0000000..ed639af --- /dev/null +++ b/abi/proto/v1/http.proto @@ -0,0 +1,37 @@ +// http.proto — buffered HTTP request/response payloads for the HANDLE_HTTP +// hook (WO-WZ-001). +// +// v1 buffers full bodies: no streaming, SSE, or WebSockets inside plugins +// (per the wasm migration design spec §5). The guest runs its real +// chi/connect mux internally and answers one HttpRequest with one +// HttpResponse. + +syntax = "proto3"; + +package abi.v1; + +option go_package = "git.dev.alexdunmow.com/block/core/abi/v1;abiv1"; + +// HttpRequest is a fully buffered HTTP request forwarded to the guest mux. +message HttpRequest { + string method = 1; + // Request path (no scheme/host/query). + string path = 2; + // Raw query string (without the leading '?'). + string raw_query = 3; + // Canonical header name → values. + map headers = 4; + bytes body = 5; +} + +// HeaderValues holds the values of one multi-valued HTTP header. +message HeaderValues { + repeated string values = 1; +} + +// HttpResponse is the guest's fully buffered response. +message HttpResponse { + int32 status = 1; + map headers = 2; + bytes body = 3; +} diff --git a/abi/proto/v1/invoke.proto b/abi/proto/v1/invoke.proto new file mode 100644 index 0000000..7accfbc --- /dev/null +++ b/abi/proto/v1/invoke.proto @@ -0,0 +1,189 @@ +// invoke.proto — the bn_invoke envelope, hook catalog, and the job/lifecycle +// hook payloads (WO-WZ-001). +// +// Every host→guest call crosses the wasm boundary as one guest export: +// +// bn_invoke(hook_id, ptr, len) → packed(ptr, len) +// +// where (ptr, len) frames a serialized InvokeRequest and the packed return +// frames a serialized InvokeResponse. Hook-specific payloads (render.proto, +// http.proto, and the messages below) travel inside InvokeRequest.payload / +// InvokeResponse.payload. See core/docs/wasm-abi.md. + +syntax = "proto3"; + +package abi.v1; + +import "v1/manifest.proto"; + +option go_package = "git.dev.alexdunmow.com/block/core/abi/v1;abiv1"; + +// Hook identifies the guest entry point being invoked. +enum Hook { + HOOK_UNSPECIFIED = 0; + // Render one block: payload = RenderBlockRequest / RenderBlockResponse. + HOOK_RENDER_BLOCK = 1; + // Render one template: payload = RenderTemplateRequest / RenderTemplateResponse. + HOOK_RENDER_TEMPLATE = 2; + // Forward a buffered HTTP request to the guest's mux: + // payload = HttpRequest / HttpResponse. + HOOK_HANDLE_HTTP = 3; + // Run a background job handler: payload = JobRequest / JobResponse. + HOOK_JOB = 4; + // Plugin load lifecycle: payload = LoadRequest / LoadResponse. + HOOK_LOAD = 5; + // Plugin unload lifecycle: payload = UnloadRequest / UnloadResponse. + HOOK_UNLOAD = 6; + // Re-fetch content for RAG re-indexing: + // payload = RagFetchRequest / RagFetchResponse. + HOOK_RAG_FETCH = 7; + // Media lifecycle event delivery: payload = MediaHookRequest / MediaHookResponse. + HOOK_MEDIA_HOOK = 8; + // Capture the static manifest at publish time: + // payload = DescribeRequest / DescribeResponse. + HOOK_DESCRIBE = 9; +} + +// InvokeRequest is the host→guest call envelope. +message InvokeRequest { + Hook hook = 1; + // Serialized hook-specific request message (see Hook value comments). + bytes payload = 2; + // Milliseconds the guest has to answer; the host also enforces this + // deadline on the wasm instance (WithCloseOnContextDone). + int64 deadline_ms = 3; +} + +// InvokeResponse is the guest→host return envelope. +message InvokeResponse { + // Serialized hook-specific response message; empty when error is set. + bytes payload = 1; + // Set when the hook failed; the host treats decode failures and traps as + // implicit ABI_ERROR_CODE_INTERNAL. + AbiError error = 2; +} + +// AbiErrorCode classifies boundary-crossing failures. +enum AbiErrorCode { + ABI_ERROR_CODE_UNSPECIFIED = 0; + // The handler ran and failed; message carries the Go error text. + ABI_ERROR_CODE_INTERNAL = 1; + // The payload could not be decoded. + ABI_ERROR_CODE_DECODE = 2; + // The hook/capability is not implemented by the callee. + ABI_ERROR_CODE_UNIMPLEMENTED = 3; + // The call exceeded its deadline; the instance is considered poisoned. + ABI_ERROR_CODE_DEADLINE_EXCEEDED = 4; + // The caller is not entitled to this capability. + ABI_ERROR_CODE_PERMISSION_DENIED = 5; +} + +// AbiError is the structured error carried by InvokeResponse and +// HostCallResponse. +message AbiError { + AbiErrorCode code = 1; + string message = 2; +} + +// --- DESCRIBE --- + +// DescribeRequest asks the guest for its static manifest (publish time only). +message DescribeRequest { + // ABI major version of the calling host/publish tool. + uint32 host_abi_version = 1; +} + +// DescribeResponse returns the static manifest. +message DescribeResponse { + PluginManifest manifest = 1; +} + +// --- LOAD / UNLOAD --- + +// LoadRequest carries the static host configuration the .so world exposed as +// CoreServices.AppURL / CoreServices.MediaPath. +message LoadRequest { + HostConfig host_config = 1; +} + +// HostConfig mirrors the plain-value CoreServices fields. +message HostConfig { + string app_url = 1; // CoreServices.AppURL + string media_path = 2; // CoreServices.MediaPath +} + +message LoadResponse {} + +message UnloadRequest {} + +message UnloadResponse {} + +// --- JOB --- + +// JobRequest dispatches one background job to the guest handler registered +// for job_type (manifest.job_types). +message JobRequest { + string job_type = 1; + // JSON job configuration (json.RawMessage in JobHandlerFunc). + bytes config_json = 2; +} + +// JobResponse returns the handler's JSON result. +message JobResponse { + bytes result_json = 1; +} + +// --- RAG_FETCH --- + +// RagFetchRequest asks the guest's registered content fetcher +// (manifest.rag_content_fetcher_types) for a content item's text. +message RagFetchRequest { + string content_type = 1; + string content_id = 2; // UUID +} + +// RagFetchResponse mirrors plugin.ContentFetcher's return values. +message RagFetchResponse { + string title = 1; + string text = 2; +} + +// --- MEDIA_HOOK --- + +// MediaHookRequest delivers one media lifecycle event +// (plugin.MediaHooksProvider). +message MediaHookRequest { + oneof event { + MediaAnalyzedEvent media_analyzed = 1; // OnMediaAnalyzed + ModerationDecisionEvent moderation_decision = 2; // OnModerationDecision + } +} + +message MediaHookResponse {} + +// MediaAnalyzedEvent mirrors plugin.MediaAnalyzedEvent (UUIDs as strings). +message MediaAnalyzedEvent { + string media_id = 1; + string analysis_id = 2; + string content_hash = 3; + string status = 4; + string source_plugin = 5; + string source_type = 6; + string source_ref_id = 7; + string safe_adult = 8; + string safe_violence = 9; + string safe_racy = 10; +} + +// ModerationDecisionEvent mirrors plugin.ModerationDecisionEvent. +message ModerationDecisionEvent { + string media_id = 1; + string analysis_id = 2; + string status = 3; + string previous_status = 4; + string source_plugin = 5; + string source_type = 6; + string source_ref_id = 7; + string moderated_by = 8; + string note = 9; +} diff --git a/abi/proto/v1/manifest.proto b/abi/proto/v1/manifest.proto new file mode 100644 index 0000000..0fe33df --- /dev/null +++ b/abi/proto/v1/manifest.proto @@ -0,0 +1,215 @@ +// manifest.proto — the static plugin manifest (WO-WZ-001). +// +// PluginManifest is the wire form of everything that is *static data* in +// core/plugin/registration.go (PluginRegistration). It is produced once at +// publish time by calling the guest's DESCRIBE hook and stored as manifest.pb +// inside the .bnp artifact; the CMS loader reads it without instantiating the +// wasm module. +// +// Function-valued registration fields cannot cross the wire; they map to +// either a hook (Load/Unload/JobHandlers/MediaHooks/HTTPHandler), a boolean +// presence flag here, or an artifact directory (Assets → assets/, +// Schemas → schemas/, Migrations → migrations/). See core/docs/wasm-abi.md +// for the full field-by-field mapping. + +syntax = "proto3"; + +package abi.v1; + +option go_package = "git.dev.alexdunmow.com/block/core/abi/v1;abiv1"; + +// PluginManifest mirrors the static surface of plugin.PluginRegistration. +message PluginManifest { + // ABI major version the plugin was built against. The host rejects + // manifests whose major version it does not support. + uint32 abi_version = 1; + + // PluginRegistration.Name / .Version. + string name = 2; + string version = 3; + + // PluginRegistration.Dependencies. + repeated Dependency dependencies = 4; + + // Blocks registered via BlockRegistry.Register (captured by DESCRIBE). + repeated BlockMeta blocks = 5; + // Blocks registered via BlockRegistry.RegisterTemplateOverride[WithSource]. + repeated BlockTemplateOverride block_template_overrides = 6; + + // Templates registered via TemplateRegistry (captured by DESCRIBE). + repeated string template_keys = 7; // TemplateRegistry.Register + repeated SystemTemplateMeta system_templates = 8; // RegisterSystemTemplate + repeated PageTemplateMeta page_templates = 9; // RegisterPageTemplate + repeated string email_wrapper_system_keys = 10; // RegisterEmailWrapper + + // PluginRegistration.AdminPages. + repeated AdminPage admin_pages = 11; + + // PluginRegistration.SettingsSchema / .ThemePresets / .BundledFonts (JSON). + bytes settings_schema = 12; + bytes theme_presets = 13; + bytes bundled_fonts = 14; + + // PluginRegistration.MasterPages. + repeated MasterPageDefinition master_pages = 15; + + // PluginRegistration.AIActions. + repeated AiAction ai_actions = 16; + + // RBAC roles for the plugin's own Connect services, merged from + // ServiceRegistration (full method name → role, e.g. + // "/symposium.v1.ForumService/CreateThread" → "admin"). + map rbac_method_roles = 17; + + // PluginRegistration.CSSManifest. + CssManifest css_manifest = 18; + + // PluginRegistration.RequiredIconPacks. + repeated string required_icon_packs = 19; + + // PluginRegistration.DirectoryExtensions (static fields only; the + // panel-section / pin-decorator callbacks are counted so the host knows + // how many guest callbacks exist). + DirectoryExtensions directory_extensions = 20; + + // Job types the plugin handles (keys of PluginRegistration.JobHandlers). + // The host dispatches these via the JOB hook. + repeated string job_types = 21; + + // Content types the plugin registered RAG content fetchers for + // (RAGService.RegisterContentFetcher inverts to a manifest declaration; + // the host calls back via the RAG_FETCH hook). + repeated string rag_content_fetcher_types = 22; + + // PluginRegistration.SettingsPanel — Module Federation path of the + // settings panel component ("" when the plugin has none). + string settings_panel = 23; + + // Presence flags for function-valued registration fields that invert to + // hooks at runtime. + bool has_http_handler = 24; // PluginRegistration.HTTPHandler → HANDLE_HTTP + bool has_load_hook = 25; // PluginRegistration.Load → LOAD + bool has_unload_hook = 26; // PluginRegistration.Unload → UNLOAD + bool has_media_hooks = 27; // PluginRegistration.MediaHooks → MEDIA_HOOK + bool has_provisioner = 28; // PluginRegistration.RegisterWithProvisioner + + // Core CMS services the plugin mounts with custom RBAC roles + // (CoreServiceBindings.Bind becomes a static declaration; the host + // constructs and mounts the handlers). + repeated CoreServiceBinding core_service_bindings = 29; +} + +// Dependency mirrors plugin.Dependency. +message Dependency { + string plugin = 1; + string min_version = 2; + bool required = 3; +} + +// BlockMeta mirrors blocks.BlockMeta. Source is omitted: the host assigns it +// from the manifest's plugin name at load time. +message BlockMeta { + string key = 1; + string title = 2; + string description = 3; + // blocks.BlockCategory string ("content", "layout", "navigation", "blog", + // "theme"). + string category = 4; + bool has_internal_slot = 5; + bool hidden = 6; + string editor_js = 7; +} + +// BlockTemplateOverride captures BlockRegistry.RegisterTemplateOverride and +// RegisterTemplateOverrideWithSource registrations. +message BlockTemplateOverride { + string template_key = 1; + string block_key = 2; + // Override source label; empty for plain RegisterTemplateOverride. + string source = 3; +} + +// SystemTemplateMeta mirrors templates.SystemTemplateMeta. +message SystemTemplateMeta { + string key = 1; + string title = 2; + string description = 3; +} + +// PageTemplateMeta mirrors templates.PageTemplateMeta plus the system +// template it was registered under. +message PageTemplateMeta { + string system_key = 1; + string key = 2; + string title = 3; + string description = 4; + repeated string slots = 5; +} + +// AdminPage mirrors plugin.AdminPage. +message AdminPage { + string key = 1; + string title = 2; + string icon = 3; + string route = 4; +} + +// AiAction mirrors plugin.AIAction. +message AiAction { + string key = 1; + string title = 2; + string description = 3; + string default_provider = 4; + string default_model = 5; +} + +// CssManifest mirrors plugin.CSSManifest. +message CssManifest { + map npm_packages = 1; + repeated string css_directives = 2; + string input_css_append = 3; +} + +// DirectoryExtensions mirrors the static fields of plugin.DirectoryExtensions. +message DirectoryExtensions { + repeated string boolean_filter_fields = 1; + repeated string select_filter_fields = 2; + map badge_labels = 3; + // Counts of the callback slices (PanelSections / PinDecorators) so the host + // knows how many guest callbacks the plugin registered. Their invocation + // hook is a runtime-WO concern. + uint32 panel_section_count = 4; + uint32 pin_decorator_count = 5; +} + +// BadgeLabel mirrors the [2]string value of DirectoryExtensions.BadgeLabels. +message BadgeLabel { + string positive = 1; + string negative = 2; +} + +// MasterPageDefinition mirrors plugin.MasterPageDefinition. +message MasterPageDefinition { + string key = 1; + string title = 2; + repeated string page_templates = 3; + repeated MasterPageBlock blocks = 4; +} + +// MasterPageBlock mirrors plugin.MasterPageBlock. +message MasterPageBlock { + string block_key = 1; + string title = 2; + // JSON encoding of the block's content map. + bytes content_json = 3; + optional string html_content = 4; + string slot = 5; + int32 sort_order = 6; +} + +// CoreServiceBinding mirrors a plugin.CoreServiceBindings.Bind call: mount +// the named core-provided Connect service with these RBAC roles. +message CoreServiceBinding { + string service_name = 1; + map method_roles = 2; +} diff --git a/abi/proto/v1/render.proto b/abi/proto/v1/render.proto new file mode 100644 index 0000000..d466c67 --- /dev/null +++ b/abi/proto/v1/render.proto @@ -0,0 +1,200 @@ +// render.proto — block/template render payloads and the explicit +// render-context envelope (WO-WZ-001). +// +// RenderContext serializes every value blocks currently read from ctx via +// core/blocks/context.go. Function-valued context entries (SlotRenderer, +// MediaResolver, EmbedResolver, the generic Queries value) cannot cross the +// wire; see core/docs/wasm-abi.md for how each one maps. + +syntax = "proto3"; + +package abi.v1; + +import "google/protobuf/timestamp.proto"; + +option go_package = "git.dev.alexdunmow.com/block/core/abi/v1;abiv1"; + +// RenderBlockRequest renders one block (blocks.BlockFunc). +message RenderBlockRequest { + string block_key = 1; + // JSON encoding of the block's content map. + bytes content_json = 2; + RenderContext render_context = 3; +} + +message RenderBlockResponse { + string html = 1; +} + +// RenderTemplateRequest renders one template (templates.TemplateFunc). +message RenderTemplateRequest { + string template_key = 1; + // JSON encoding of the template's doc map (the page document). + bytes doc_json = 2; + RenderContext render_context = 3; +} + +message RenderTemplateResponse { + bytes html = 1; +} + +// RenderContext is the explicit envelope of the context values enumerated +// from core/blocks/context.go. Absent sub-messages mean the corresponding +// ctx value was not set (the getters return nil / zero values). +message RenderContext { + // blocks.GetRequest — subset of *http.Request that render code reads. + RequestInfo request = 1; + // blocks.GetBlockContext — the pongo2 template data struct. + BlockContext block_context = 2; + // blocks.GetTemplateKey. + string template_key = 3; + // blocks.GetCurrentPage. + PageContext page = 4; + // blocks.GetCurrentBlogPost. + PostContext post = 5; + // blocks.GetCurrentAuthor. + AuthorContext author = 6; + // blocks.GetCurrentCategory. + CategoryContext category = 7; + // blocks.GetMasterPage; presence doubles as IsMasterPageContext. + MasterPageContext master_page = 8; + // blocks.GetRequestedPath (404 pages). + string requested_path = 9; + // blocks.GetInjectedSlots (master page rendering). + map injected_slots = 10; + // blocks.IsEditor. + bool is_editor = 11; + // blocks.GetExpectedSlots. + repeated string expected_slots = 12; + // blocks.GetBlockID (UUID; empty for uuid.Nil). + string block_id = 13; + // blocks.GetCurrentPageID (UUID; empty for uuid.Nil). + string current_page_id = 14; + // blocks.GetHumanProofBanner. + HumanProofBanner human_proof_banner = 15; + // blocks.GetDetailRow. + DetailRow detail_row = 16; + // Active theme variables, JSON-encoded. + bytes theme_json = 17; + // Site locale (BCP 47). + string locale = 18; +} + +// RequestInfo carries the request subset render code reads from +// blocks.GetRequest (single-valued header map, matching BlockContext). +message RequestInfo { + string method = 1; + string url = 2; + string path = 3; + string host = 4; + string raw_query = 5; + map headers = 6; + map cookies = 7; + string remote_ip = 8; + string referrer = 9; + string user_agent = 10; +} + +// PageContext mirrors blocks.PageContext. +message PageContext { + string id = 1; // UUID + string slug = 2; + string title = 3; + string post_type = 4; // "page", "post", "master", "system" + string status = 5; // "published", "draft", "scheduled" +} + +// PostContext mirrors blocks.PostContext. +message PostContext { + string id = 1; // UUID + string slug = 2; + string title = 3; + string excerpt = 4; + string featured_image_url = 5; + string author_id = 6; // UUID + google.protobuf.Timestamp published_at = 7; + int32 reading_time = 8; + bool is_featured = 9; +} + +// AuthorContext mirrors blocks.AuthorContext. +message AuthorContext { + string id = 1; // UUID + string name = 2; + string slug = 3; + string bio = 4; + string avatar_url = 5; +} + +// CategoryContext mirrors blocks.CategoryContext. +message CategoryContext { + string id = 1; // UUID + string name = 2; + string slug = 3; +} + +// MasterPageContext mirrors blocks.MasterPageContext. +message MasterPageContext { + string id = 1; // UUID + string slug = 2; + string title = 3; +} + +// HumanProofBanner mirrors blocks.HumanProofBannerData. +message HumanProofBanner { + int32 active_time_minutes = 1; + int32 keystroke_count = 2; + int32 session_count = 3; + string post_slug = 4; +} + +// DetailRow mirrors blocks.DetailRowInfo. +message DetailRow { + string table_id = 1; + string row_id = 2; + // JSON encoding of the row data map. + bytes data_json = 3; +} + +// BlockContext mirrors blocks.BlockContext (the pongo2 data struct) 1:1. +// map[string]any fields travel as JSON bytes. +message BlockContext { + string url = 1; + string path = 2; + string slug = 3; + string page_id = 4; + string page_title = 5; + string template_key = 6; + bool is_editor = 7; + int64 timestamp = 8; + google.protobuf.Timestamp now = 9; + bool is_logged_in = 10; + string user_id = 11; + string user_email = 12; + string user_role = 13; + string method = 14; + string host = 15; + map query = 16; + string referrer = 17; + string user_agent = 18; + string ip = 19; + map cookies = 20; + map headers = 21; + string country = 22; + string city = 23; + string timezone = 24; + bytes current_author_json = 25; + bytes current_post_json = 26; + bytes current_category_json = 27; + bytes site_json = 28; + bool is_public_logged_in = 29; + string public_user_id = 30; + string public_username = 31; + string public_display_name = 32; + bool public_email_verified = 33; + string detail_row_id = 34; + string detail_table_id = 35; + bytes detail_row_data_json = 36; + string blog_index_url = 37; + string category_page_url = 38; +} diff --git a/abi/v1/capability.pb.go b/abi/v1/capability.pb.go new file mode 100644 index 0000000..a5c2f6a --- /dev/null +++ b/abi/v1/capability.pb.go @@ -0,0 +1,5167 @@ +// capability.proto — guest→host capability calls (WO-WZ-001). +// +// Each CoreServices interface (core/plugin/deps.go) becomes a host-function +// family; every interface method gets one request/response message pair +// here, mirroring the Go signature 1:1. UUIDs travel as canonical strings; +// map[string]any / []byte-JSON values travel as JSON bytes. +// +// Calls cross via the generic HostCallRequest/HostCallResponse envelope; the +// method string selects the pair (e.g. "content.get_author_profile" → +// ContentGetAuthorProfileRequest/Response). Full method table in +// core/docs/wasm-abi.md. +// +// Not represented here by design: +// - CoreServices.Pool → db.proto (the DB driver messages) +// - CoreServices.Interceptors → host-side only (never crosses) +// - CoreServices.AppURL/MediaPath → LoadRequest.host_config (invoke.proto) +// - CoreServices.CoreServiceBindings → manifest core_service_bindings +// - RAGService.RegisterContentFetcher → manifest rag_content_fetcher_types +// + the RAG_FETCH hook (callback inversion) +// - ai.ToolDefinition.Handler → host→guest tool execution is a runtime-WO +// concern (flagged in core/docs/wasm-abi.md) + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc (unknown) +// source: v1/capability.proto + +package abiv1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// HostCallRequest is the generic guest→host capability envelope. +type HostCallRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Capability method, "." (e.g. "crypto.encrypt_secret"). + Method string `protobuf:"bytes,1,opt,name=method,proto3" json:"method,omitempty"` + // Serialized family request message. + Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HostCallRequest) Reset() { + *x = HostCallRequest{} + mi := &file_v1_capability_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HostCallRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HostCallRequest) ProtoMessage() {} + +func (x *HostCallRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HostCallRequest.ProtoReflect.Descriptor instead. +func (*HostCallRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{0} +} + +func (x *HostCallRequest) GetMethod() string { + if x != nil { + return x.Method + } + return "" +} + +func (x *HostCallRequest) GetPayload() []byte { + if x != nil { + return x.Payload + } + return nil +} + +// HostCallResponse is the generic host→guest capability return envelope. +type HostCallResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Serialized family response message; empty when error is set. + Payload []byte `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` + // Set when the capability call failed; the guest SDK surfaces it as a + // normal Go error. + Error *AbiError `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HostCallResponse) Reset() { + *x = HostCallResponse{} + mi := &file_v1_capability_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HostCallResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HostCallResponse) ProtoMessage() {} + +func (x *HostCallResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HostCallResponse.ProtoReflect.Descriptor instead. +func (*HostCallResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{1} +} + +func (x *HostCallResponse) GetPayload() []byte { + if x != nil { + return x.Payload + } + return nil +} + +func (x *HostCallResponse) GetError() *AbiError { + if x != nil { + return x.Error + } + return nil +} + +type ContentGetAuthorProfileRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentGetAuthorProfileRequest) Reset() { + *x = ContentGetAuthorProfileRequest{} + mi := &file_v1_capability_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentGetAuthorProfileRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentGetAuthorProfileRequest) ProtoMessage() {} + +func (x *ContentGetAuthorProfileRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentGetAuthorProfileRequest.ProtoReflect.Descriptor instead. +func (*ContentGetAuthorProfileRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{2} +} + +func (x *ContentGetAuthorProfileRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type ContentGetAuthorProfileResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Author *AuthorProfile `protobuf:"bytes,1,opt,name=author,proto3" json:"author,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentGetAuthorProfileResponse) Reset() { + *x = ContentGetAuthorProfileResponse{} + mi := &file_v1_capability_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentGetAuthorProfileResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentGetAuthorProfileResponse) ProtoMessage() {} + +func (x *ContentGetAuthorProfileResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentGetAuthorProfileResponse.ProtoReflect.Descriptor instead. +func (*ContentGetAuthorProfileResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{3} +} + +func (x *ContentGetAuthorProfileResponse) GetAuthor() *AuthorProfile { + if x != nil { + return x.Author + } + return nil +} + +// AuthorProfile mirrors content.AuthorProfile. +type AuthorProfile struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Slug string `protobuf:"bytes,3,opt,name=slug,proto3" json:"slug,omitempty"` + Bio string `protobuf:"bytes,4,opt,name=bio,proto3" json:"bio,omitempty"` + AvatarUrl string `protobuf:"bytes,5,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + Website string `protobuf:"bytes,6,opt,name=website,proto3" json:"website,omitempty"` + SocialLinks map[string]string `protobuf:"bytes,7,rep,name=social_links,json=socialLinks,proto3" json:"social_links,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AuthorProfile) Reset() { + *x = AuthorProfile{} + mi := &file_v1_capability_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AuthorProfile) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthorProfile) ProtoMessage() {} + +func (x *AuthorProfile) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthorProfile.ProtoReflect.Descriptor instead. +func (*AuthorProfile) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{4} +} + +func (x *AuthorProfile) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AuthorProfile) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *AuthorProfile) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +func (x *AuthorProfile) GetBio() string { + if x != nil { + return x.Bio + } + return "" +} + +func (x *AuthorProfile) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *AuthorProfile) GetWebsite() string { + if x != nil { + return x.Website + } + return "" +} + +func (x *AuthorProfile) GetSocialLinks() map[string]string { + if x != nil { + return x.SocialLinks + } + return nil +} + +type ContentGetPageRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Slug string `protobuf:"bytes,1,opt,name=slug,proto3" json:"slug,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentGetPageRequest) Reset() { + *x = ContentGetPageRequest{} + mi := &file_v1_capability_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentGetPageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentGetPageRequest) ProtoMessage() {} + +func (x *ContentGetPageRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentGetPageRequest.ProtoReflect.Descriptor instead. +func (*ContentGetPageRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{5} +} + +func (x *ContentGetPageRequest) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +type ContentGetPageResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Page *PageInfo `protobuf:"bytes,1,opt,name=page,proto3" json:"page,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentGetPageResponse) Reset() { + *x = ContentGetPageResponse{} + mi := &file_v1_capability_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentGetPageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentGetPageResponse) ProtoMessage() {} + +func (x *ContentGetPageResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentGetPageResponse.ProtoReflect.Descriptor instead. +func (*ContentGetPageResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{6} +} + +func (x *ContentGetPageResponse) GetPage() *PageInfo { + if x != nil { + return x.Page + } + return nil +} + +// PageInfo mirrors content.PageInfo. +type PageInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"` + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PageInfo) Reset() { + *x = PageInfo{} + mi := &file_v1_capability_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PageInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PageInfo) ProtoMessage() {} + +func (x *PageInfo) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PageInfo.ProtoReflect.Descriptor instead. +func (*PageInfo) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{7} +} + +func (x *PageInfo) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PageInfo) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +func (x *PageInfo) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +type ContentGetPostRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Slug string `protobuf:"bytes,1,opt,name=slug,proto3" json:"slug,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentGetPostRequest) Reset() { + *x = ContentGetPostRequest{} + mi := &file_v1_capability_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentGetPostRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentGetPostRequest) ProtoMessage() {} + +func (x *ContentGetPostRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentGetPostRequest.ProtoReflect.Descriptor instead. +func (*ContentGetPostRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{8} +} + +func (x *ContentGetPostRequest) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +type ContentGetPostResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Post *PostInfo `protobuf:"bytes,1,opt,name=post,proto3" json:"post,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentGetPostResponse) Reset() { + *x = ContentGetPostResponse{} + mi := &file_v1_capability_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentGetPostResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentGetPostResponse) ProtoMessage() {} + +func (x *ContentGetPostResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentGetPostResponse.ProtoReflect.Descriptor instead. +func (*ContentGetPostResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{9} +} + +func (x *ContentGetPostResponse) GetPost() *PostInfo { + if x != nil { + return x.Post + } + return nil +} + +// PostInfo mirrors content.PostInfo. +type PostInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"` + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + Excerpt string `protobuf:"bytes,4,opt,name=excerpt,proto3" json:"excerpt,omitempty"` + FeaturedImageUrl string `protobuf:"bytes,5,opt,name=featured_image_url,json=featuredImageUrl,proto3" json:"featured_image_url,omitempty"` + AuthorId string `protobuf:"bytes,6,opt,name=author_id,json=authorId,proto3" json:"author_id,omitempty"` // UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PostInfo) Reset() { + *x = PostInfo{} + mi := &file_v1_capability_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PostInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PostInfo) ProtoMessage() {} + +func (x *PostInfo) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PostInfo.ProtoReflect.Descriptor instead. +func (*PostInfo) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{10} +} + +func (x *PostInfo) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PostInfo) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +func (x *PostInfo) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *PostInfo) GetExcerpt() string { + if x != nil { + return x.Excerpt + } + return "" +} + +func (x *PostInfo) GetFeaturedImageUrl() string { + if x != nil { + return x.FeaturedImageUrl + } + return "" +} + +func (x *PostInfo) GetAuthorId() string { + if x != nil { + return x.AuthorId + } + return "" +} + +type ContentSlugifyRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentSlugifyRequest) Reset() { + *x = ContentSlugifyRequest{} + mi := &file_v1_capability_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentSlugifyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentSlugifyRequest) ProtoMessage() {} + +func (x *ContentSlugifyRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentSlugifyRequest.ProtoReflect.Descriptor instead. +func (*ContentSlugifyRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{11} +} + +func (x *ContentSlugifyRequest) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +type ContentSlugifyResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Slug string `protobuf:"bytes,1,opt,name=slug,proto3" json:"slug,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentSlugifyResponse) Reset() { + *x = ContentSlugifyResponse{} + mi := &file_v1_capability_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentSlugifyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentSlugifyResponse) ProtoMessage() {} + +func (x *ContentSlugifyResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentSlugifyResponse.ProtoReflect.Descriptor instead. +func (*ContentSlugifyResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{12} +} + +func (x *ContentSlugifyResponse) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +type ContentBlockNoteToHtmlRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // JSON encoding of the BlockNote document map. + DocJson []byte `protobuf:"bytes,1,opt,name=doc_json,json=docJson,proto3" json:"doc_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentBlockNoteToHtmlRequest) Reset() { + *x = ContentBlockNoteToHtmlRequest{} + mi := &file_v1_capability_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentBlockNoteToHtmlRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentBlockNoteToHtmlRequest) ProtoMessage() {} + +func (x *ContentBlockNoteToHtmlRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentBlockNoteToHtmlRequest.ProtoReflect.Descriptor instead. +func (*ContentBlockNoteToHtmlRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{13} +} + +func (x *ContentBlockNoteToHtmlRequest) GetDocJson() []byte { + if x != nil { + return x.DocJson + } + return nil +} + +type ContentBlockNoteToHtmlResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Html string `protobuf:"bytes,1,opt,name=html,proto3" json:"html,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentBlockNoteToHtmlResponse) Reset() { + *x = ContentBlockNoteToHtmlResponse{} + mi := &file_v1_capability_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentBlockNoteToHtmlResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentBlockNoteToHtmlResponse) ProtoMessage() {} + +func (x *ContentBlockNoteToHtmlResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentBlockNoteToHtmlResponse.ProtoReflect.Descriptor instead. +func (*ContentBlockNoteToHtmlResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{14} +} + +func (x *ContentBlockNoteToHtmlResponse) GetHtml() string { + if x != nil { + return x.Html + } + return "" +} + +type ContentGenerateExcerptRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Html string `protobuf:"bytes,1,opt,name=html,proto3" json:"html,omitempty"` + MaxLen int32 `protobuf:"varint,2,opt,name=max_len,json=maxLen,proto3" json:"max_len,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentGenerateExcerptRequest) Reset() { + *x = ContentGenerateExcerptRequest{} + mi := &file_v1_capability_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentGenerateExcerptRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentGenerateExcerptRequest) ProtoMessage() {} + +func (x *ContentGenerateExcerptRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentGenerateExcerptRequest.ProtoReflect.Descriptor instead. +func (*ContentGenerateExcerptRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{15} +} + +func (x *ContentGenerateExcerptRequest) GetHtml() string { + if x != nil { + return x.Html + } + return "" +} + +func (x *ContentGenerateExcerptRequest) GetMaxLen() int32 { + if x != nil { + return x.MaxLen + } + return 0 +} + +type ContentGenerateExcerptResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Excerpt string `protobuf:"bytes,1,opt,name=excerpt,proto3" json:"excerpt,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentGenerateExcerptResponse) Reset() { + *x = ContentGenerateExcerptResponse{} + mi := &file_v1_capability_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentGenerateExcerptResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentGenerateExcerptResponse) ProtoMessage() {} + +func (x *ContentGenerateExcerptResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentGenerateExcerptResponse.ProtoReflect.Descriptor instead. +func (*ContentGenerateExcerptResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{16} +} + +func (x *ContentGenerateExcerptResponse) GetExcerpt() string { + if x != nil { + return x.Excerpt + } + return "" +} + +type ContentStripHtmlRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Html string `protobuf:"bytes,1,opt,name=html,proto3" json:"html,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentStripHtmlRequest) Reset() { + *x = ContentStripHtmlRequest{} + mi := &file_v1_capability_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentStripHtmlRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentStripHtmlRequest) ProtoMessage() {} + +func (x *ContentStripHtmlRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentStripHtmlRequest.ProtoReflect.Descriptor instead. +func (*ContentStripHtmlRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{17} +} + +func (x *ContentStripHtmlRequest) GetHtml() string { + if x != nil { + return x.Html + } + return "" +} + +type ContentStripHtmlResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentStripHtmlResponse) Reset() { + *x = ContentStripHtmlResponse{} + mi := &file_v1_capability_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentStripHtmlResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentStripHtmlResponse) ProtoMessage() {} + +func (x *ContentStripHtmlResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentStripHtmlResponse.ProtoReflect.Descriptor instead. +func (*ContentStripHtmlResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{18} +} + +func (x *ContentStripHtmlResponse) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +type SettingsGetSiteSettingsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SettingsGetSiteSettingsRequest) Reset() { + *x = SettingsGetSiteSettingsRequest{} + mi := &file_v1_capability_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SettingsGetSiteSettingsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsGetSiteSettingsRequest) ProtoMessage() {} + +func (x *SettingsGetSiteSettingsRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsGetSiteSettingsRequest.ProtoReflect.Descriptor instead. +func (*SettingsGetSiteSettingsRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{19} +} + +type SettingsGetSiteSettingsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // JSON encoding of the site settings map. + SettingsJson []byte `protobuf:"bytes,1,opt,name=settings_json,json=settingsJson,proto3" json:"settings_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SettingsGetSiteSettingsResponse) Reset() { + *x = SettingsGetSiteSettingsResponse{} + mi := &file_v1_capability_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SettingsGetSiteSettingsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsGetSiteSettingsResponse) ProtoMessage() {} + +func (x *SettingsGetSiteSettingsResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsGetSiteSettingsResponse.ProtoReflect.Descriptor instead. +func (*SettingsGetSiteSettingsResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{20} +} + +func (x *SettingsGetSiteSettingsResponse) GetSettingsJson() []byte { + if x != nil { + return x.SettingsJson + } + return nil +} + +type SettingsGetPluginSettingsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + PluginName string `protobuf:"bytes,1,opt,name=plugin_name,json=pluginName,proto3" json:"plugin_name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SettingsGetPluginSettingsRequest) Reset() { + *x = SettingsGetPluginSettingsRequest{} + mi := &file_v1_capability_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SettingsGetPluginSettingsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsGetPluginSettingsRequest) ProtoMessage() {} + +func (x *SettingsGetPluginSettingsRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsGetPluginSettingsRequest.ProtoReflect.Descriptor instead. +func (*SettingsGetPluginSettingsRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{21} +} + +func (x *SettingsGetPluginSettingsRequest) GetPluginName() string { + if x != nil { + return x.PluginName + } + return "" +} + +type SettingsGetPluginSettingsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // JSON encoding of the plugin settings map. + SettingsJson []byte `protobuf:"bytes,1,opt,name=settings_json,json=settingsJson,proto3" json:"settings_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SettingsGetPluginSettingsResponse) Reset() { + *x = SettingsGetPluginSettingsResponse{} + mi := &file_v1_capability_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SettingsGetPluginSettingsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsGetPluginSettingsResponse) ProtoMessage() {} + +func (x *SettingsGetPluginSettingsResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsGetPluginSettingsResponse.ProtoReflect.Descriptor instead. +func (*SettingsGetPluginSettingsResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{22} +} + +func (x *SettingsGetPluginSettingsResponse) GetSettingsJson() []byte { + if x != nil { + return x.SettingsJson + } + return nil +} + +type SettingsUpdateSiteSettingRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // JSON encoding of the value. + ValueJson []byte `protobuf:"bytes,2,opt,name=value_json,json=valueJson,proto3" json:"value_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SettingsUpdateSiteSettingRequest) Reset() { + *x = SettingsUpdateSiteSettingRequest{} + mi := &file_v1_capability_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SettingsUpdateSiteSettingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsUpdateSiteSettingRequest) ProtoMessage() {} + +func (x *SettingsUpdateSiteSettingRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsUpdateSiteSettingRequest.ProtoReflect.Descriptor instead. +func (*SettingsUpdateSiteSettingRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{23} +} + +func (x *SettingsUpdateSiteSettingRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *SettingsUpdateSiteSettingRequest) GetValueJson() []byte { + if x != nil { + return x.ValueJson + } + return nil +} + +type SettingsUpdateSiteSettingResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SettingsUpdateSiteSettingResponse) Reset() { + *x = SettingsUpdateSiteSettingResponse{} + mi := &file_v1_capability_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SettingsUpdateSiteSettingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsUpdateSiteSettingResponse) ProtoMessage() {} + +func (x *SettingsUpdateSiteSettingResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsUpdateSiteSettingResponse.ProtoReflect.Descriptor instead. +func (*SettingsUpdateSiteSettingResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{24} +} + +type GatingGetSubscriberTierLevelRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GatingGetSubscriberTierLevelRequest) Reset() { + *x = GatingGetSubscriberTierLevelRequest{} + mi := &file_v1_capability_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GatingGetSubscriberTierLevelRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GatingGetSubscriberTierLevelRequest) ProtoMessage() {} + +func (x *GatingGetSubscriberTierLevelRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GatingGetSubscriberTierLevelRequest.ProtoReflect.Descriptor instead. +func (*GatingGetSubscriberTierLevelRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{25} +} + +func (x *GatingGetSubscriberTierLevelRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +type GatingGetSubscriberTierLevelResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Level int32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GatingGetSubscriberTierLevelResponse) Reset() { + *x = GatingGetSubscriberTierLevelResponse{} + mi := &file_v1_capability_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GatingGetSubscriberTierLevelResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GatingGetSubscriberTierLevelResponse) ProtoMessage() {} + +func (x *GatingGetSubscriberTierLevelResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GatingGetSubscriberTierLevelResponse.ProtoReflect.Descriptor instead. +func (*GatingGetSubscriberTierLevelResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{26} +} + +func (x *GatingGetSubscriberTierLevelResponse) GetLevel() int32 { + if x != nil { + return x.Level + } + return 0 +} + +type GatingEvaluateAccessRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + UserTierLevel int32 `protobuf:"varint,1,opt,name=user_tier_level,json=userTierLevel,proto3" json:"user_tier_level,omitempty"` + // Absent rule means "no rule" (access granted). + Rule *AccessRule `protobuf:"bytes,2,opt,name=rule,proto3" json:"rule,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GatingEvaluateAccessRequest) Reset() { + *x = GatingEvaluateAccessRequest{} + mi := &file_v1_capability_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GatingEvaluateAccessRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GatingEvaluateAccessRequest) ProtoMessage() {} + +func (x *GatingEvaluateAccessRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GatingEvaluateAccessRequest.ProtoReflect.Descriptor instead. +func (*GatingEvaluateAccessRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{27} +} + +func (x *GatingEvaluateAccessRequest) GetUserTierLevel() int32 { + if x != nil { + return x.UserTierLevel + } + return 0 +} + +func (x *GatingEvaluateAccessRequest) GetRule() *AccessRule { + if x != nil { + return x.Rule + } + return nil +} + +type GatingEvaluateAccessResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result *AccessResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GatingEvaluateAccessResponse) Reset() { + *x = GatingEvaluateAccessResponse{} + mi := &file_v1_capability_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GatingEvaluateAccessResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GatingEvaluateAccessResponse) ProtoMessage() {} + +func (x *GatingEvaluateAccessResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GatingEvaluateAccessResponse.ProtoReflect.Descriptor instead. +func (*GatingEvaluateAccessResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{28} +} + +func (x *GatingEvaluateAccessResponse) GetResult() *AccessResult { + if x != nil { + return x.Result + } + return nil +} + +// AccessRule mirrors gating.AccessRule. +type AccessRule struct { + state protoimpl.MessageState `protogen:"open.v1"` + MinTierLevel int32 `protobuf:"varint,1,opt,name=min_tier_level,json=minTierLevel,proto3" json:"min_tier_level,omitempty"` + OverrideTierId string `protobuf:"bytes,2,opt,name=override_tier_id,json=overrideTierId,proto3" json:"override_tier_id,omitempty"` + TeaserMode string `protobuf:"bytes,3,opt,name=teaser_mode,json=teaserMode,proto3" json:"teaser_mode,omitempty"` // "hard", "soft", "none" + TeaserPercent int32 `protobuf:"varint,4,opt,name=teaser_percent,json=teaserPercent,proto3" json:"teaser_percent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AccessRule) Reset() { + *x = AccessRule{} + mi := &file_v1_capability_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AccessRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccessRule) ProtoMessage() {} + +func (x *AccessRule) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccessRule.ProtoReflect.Descriptor instead. +func (*AccessRule) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{29} +} + +func (x *AccessRule) GetMinTierLevel() int32 { + if x != nil { + return x.MinTierLevel + } + return 0 +} + +func (x *AccessRule) GetOverrideTierId() string { + if x != nil { + return x.OverrideTierId + } + return "" +} + +func (x *AccessRule) GetTeaserMode() string { + if x != nil { + return x.TeaserMode + } + return "" +} + +func (x *AccessRule) GetTeaserPercent() int32 { + if x != nil { + return x.TeaserPercent + } + return 0 +} + +// AccessResult mirrors gating.AccessResult. +type AccessResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + HasAccess bool `protobuf:"varint,1,opt,name=has_access,json=hasAccess,proto3" json:"has_access,omitempty"` + TeaserMode string `protobuf:"bytes,2,opt,name=teaser_mode,json=teaserMode,proto3" json:"teaser_mode,omitempty"` + TeaserPercent int32 `protobuf:"varint,3,opt,name=teaser_percent,json=teaserPercent,proto3" json:"teaser_percent,omitempty"` + RequiredLevel int32 `protobuf:"varint,4,opt,name=required_level,json=requiredLevel,proto3" json:"required_level,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AccessResult) Reset() { + *x = AccessResult{} + mi := &file_v1_capability_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AccessResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccessResult) ProtoMessage() {} + +func (x *AccessResult) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccessResult.ProtoReflect.Descriptor instead. +func (*AccessResult) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{30} +} + +func (x *AccessResult) GetHasAccess() bool { + if x != nil { + return x.HasAccess + } + return false +} + +func (x *AccessResult) GetTeaserMode() string { + if x != nil { + return x.TeaserMode + } + return "" +} + +func (x *AccessResult) GetTeaserPercent() int32 { + if x != nil { + return x.TeaserPercent + } + return 0 +} + +func (x *AccessResult) GetRequiredLevel() int32 { + if x != nil { + return x.RequiredLevel + } + return 0 +} + +type CryptoEncryptSecretRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Plaintext string `protobuf:"bytes,1,opt,name=plaintext,proto3" json:"plaintext,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CryptoEncryptSecretRequest) Reset() { + *x = CryptoEncryptSecretRequest{} + mi := &file_v1_capability_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CryptoEncryptSecretRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CryptoEncryptSecretRequest) ProtoMessage() {} + +func (x *CryptoEncryptSecretRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[31] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CryptoEncryptSecretRequest.ProtoReflect.Descriptor instead. +func (*CryptoEncryptSecretRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{31} +} + +func (x *CryptoEncryptSecretRequest) GetPlaintext() string { + if x != nil { + return x.Plaintext + } + return "" +} + +type CryptoEncryptSecretResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Ciphertext string `protobuf:"bytes,1,opt,name=ciphertext,proto3" json:"ciphertext,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CryptoEncryptSecretResponse) Reset() { + *x = CryptoEncryptSecretResponse{} + mi := &file_v1_capability_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CryptoEncryptSecretResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CryptoEncryptSecretResponse) ProtoMessage() {} + +func (x *CryptoEncryptSecretResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[32] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CryptoEncryptSecretResponse.ProtoReflect.Descriptor instead. +func (*CryptoEncryptSecretResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{32} +} + +func (x *CryptoEncryptSecretResponse) GetCiphertext() string { + if x != nil { + return x.Ciphertext + } + return "" +} + +type CryptoDecryptSecretRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Ciphertext string `protobuf:"bytes,1,opt,name=ciphertext,proto3" json:"ciphertext,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CryptoDecryptSecretRequest) Reset() { + *x = CryptoDecryptSecretRequest{} + mi := &file_v1_capability_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CryptoDecryptSecretRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CryptoDecryptSecretRequest) ProtoMessage() {} + +func (x *CryptoDecryptSecretRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[33] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CryptoDecryptSecretRequest.ProtoReflect.Descriptor instead. +func (*CryptoDecryptSecretRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{33} +} + +func (x *CryptoDecryptSecretRequest) GetCiphertext() string { + if x != nil { + return x.Ciphertext + } + return "" +} + +type CryptoDecryptSecretResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Plaintext string `protobuf:"bytes,1,opt,name=plaintext,proto3" json:"plaintext,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CryptoDecryptSecretResponse) Reset() { + *x = CryptoDecryptSecretResponse{} + mi := &file_v1_capability_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CryptoDecryptSecretResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CryptoDecryptSecretResponse) ProtoMessage() {} + +func (x *CryptoDecryptSecretResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[34] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CryptoDecryptSecretResponse.ProtoReflect.Descriptor instead. +func (*CryptoDecryptSecretResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{34} +} + +func (x *CryptoDecryptSecretResponse) GetPlaintext() string { + if x != nil { + return x.Plaintext + } + return "" +} + +type MenusGetMenuByNameRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MenusGetMenuByNameRequest) Reset() { + *x = MenusGetMenuByNameRequest{} + mi := &file_v1_capability_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MenusGetMenuByNameRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MenusGetMenuByNameRequest) ProtoMessage() {} + +func (x *MenusGetMenuByNameRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MenusGetMenuByNameRequest.ProtoReflect.Descriptor instead. +func (*MenusGetMenuByNameRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{35} +} + +func (x *MenusGetMenuByNameRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type MenusGetMenuByNameResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Menu *Menu `protobuf:"bytes,1,opt,name=menu,proto3" json:"menu,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MenusGetMenuByNameResponse) Reset() { + *x = MenusGetMenuByNameResponse{} + mi := &file_v1_capability_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MenusGetMenuByNameResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MenusGetMenuByNameResponse) ProtoMessage() {} + +func (x *MenusGetMenuByNameResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[36] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MenusGetMenuByNameResponse.ProtoReflect.Descriptor instead. +func (*MenusGetMenuByNameResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{36} +} + +func (x *MenusGetMenuByNameResponse) GetMenu() *Menu { + if x != nil { + return x.Menu + } + return nil +} + +// Menu mirrors menus.Menu. +type Menu struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Menu) Reset() { + *x = Menu{} + mi := &file_v1_capability_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Menu) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Menu) ProtoMessage() {} + +func (x *Menu) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[37] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Menu.ProtoReflect.Descriptor instead. +func (*Menu) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{37} +} + +func (x *Menu) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Menu) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type MenusGetMenuItemsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + MenuId string `protobuf:"bytes,1,opt,name=menu_id,json=menuId,proto3" json:"menu_id,omitempty"` // UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MenusGetMenuItemsRequest) Reset() { + *x = MenusGetMenuItemsRequest{} + mi := &file_v1_capability_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MenusGetMenuItemsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MenusGetMenuItemsRequest) ProtoMessage() {} + +func (x *MenusGetMenuItemsRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[38] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MenusGetMenuItemsRequest.ProtoReflect.Descriptor instead. +func (*MenusGetMenuItemsRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{38} +} + +func (x *MenusGetMenuItemsRequest) GetMenuId() string { + if x != nil { + return x.MenuId + } + return "" +} + +type MenusGetMenuItemsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []*MenuItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MenusGetMenuItemsResponse) Reset() { + *x = MenusGetMenuItemsResponse{} + mi := &file_v1_capability_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MenusGetMenuItemsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MenusGetMenuItemsResponse) ProtoMessage() {} + +func (x *MenusGetMenuItemsResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[39] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MenusGetMenuItemsResponse.ProtoReflect.Descriptor instead. +func (*MenusGetMenuItemsResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{39} +} + +func (x *MenusGetMenuItemsResponse) GetItems() []*MenuItem { + if x != nil { + return x.Items + } + return nil +} + +// MenuItem mirrors menus.MenuItem. +type MenuItem struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + MenuId string `protobuf:"bytes,2,opt,name=menu_id,json=menuId,proto3" json:"menu_id,omitempty"` // UUID + Label string `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"` + Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"` + PageSlug string `protobuf:"bytes,5,opt,name=page_slug,json=pageSlug,proto3" json:"page_slug,omitempty"` + ParentId *string `protobuf:"bytes,6,opt,name=parent_id,json=parentId,proto3,oneof" json:"parent_id,omitempty"` // UUID; unset mirrors nil *uuid.UUID + SortOrder int32 `protobuf:"varint,7,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + OpenInNewTab bool `protobuf:"varint,8,opt,name=open_in_new_tab,json=openInNewTab,proto3" json:"open_in_new_tab,omitempty"` + CssClass string `protobuf:"bytes,9,opt,name=css_class,json=cssClass,proto3" json:"css_class,omitempty"` + ItemType string `protobuf:"bytes,10,opt,name=item_type,json=itemType,proto3" json:"item_type,omitempty"` + Icon string `protobuf:"bytes,11,opt,name=icon,proto3" json:"icon,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MenuItem) Reset() { + *x = MenuItem{} + mi := &file_v1_capability_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MenuItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MenuItem) ProtoMessage() {} + +func (x *MenuItem) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[40] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MenuItem.ProtoReflect.Descriptor instead. +func (*MenuItem) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{40} +} + +func (x *MenuItem) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *MenuItem) GetMenuId() string { + if x != nil { + return x.MenuId + } + return "" +} + +func (x *MenuItem) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +func (x *MenuItem) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *MenuItem) GetPageSlug() string { + if x != nil { + return x.PageSlug + } + return "" +} + +func (x *MenuItem) GetParentId() string { + if x != nil && x.ParentId != nil { + return *x.ParentId + } + return "" +} + +func (x *MenuItem) GetSortOrder() int32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +func (x *MenuItem) GetOpenInNewTab() bool { + if x != nil { + return x.OpenInNewTab + } + return false +} + +func (x *MenuItem) GetCssClass() string { + if x != nil { + return x.CssClass + } + return "" +} + +func (x *MenuItem) GetItemType() string { + if x != nil { + return x.ItemType + } + return "" +} + +func (x *MenuItem) GetIcon() string { + if x != nil { + return x.Icon + } + return "" +} + +type DatasourcesResolveBucketRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + BucketId string `protobuf:"bytes,1,opt,name=bucket_id,json=bucketId,proto3" json:"bucket_id,omitempty"` // UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DatasourcesResolveBucketRequest) Reset() { + *x = DatasourcesResolveBucketRequest{} + mi := &file_v1_capability_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DatasourcesResolveBucketRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DatasourcesResolveBucketRequest) ProtoMessage() {} + +func (x *DatasourcesResolveBucketRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[41] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DatasourcesResolveBucketRequest.ProtoReflect.Descriptor instead. +func (*DatasourcesResolveBucketRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{41} +} + +func (x *DatasourcesResolveBucketRequest) GetBucketId() string { + if x != nil { + return x.BucketId + } + return "" +} + +type DatasourcesResolveBucketResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result *DatasourceResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DatasourcesResolveBucketResponse) Reset() { + *x = DatasourcesResolveBucketResponse{} + mi := &file_v1_capability_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DatasourcesResolveBucketResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DatasourcesResolveBucketResponse) ProtoMessage() {} + +func (x *DatasourcesResolveBucketResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[42] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DatasourcesResolveBucketResponse.ProtoReflect.Descriptor instead. +func (*DatasourcesResolveBucketResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{42} +} + +func (x *DatasourcesResolveBucketResponse) GetResult() *DatasourceResult { + if x != nil { + return x.Result + } + return nil +} + +type DatasourcesResolveBucketByKeyRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + BucketKey string `protobuf:"bytes,1,opt,name=bucket_key,json=bucketKey,proto3" json:"bucket_key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DatasourcesResolveBucketByKeyRequest) Reset() { + *x = DatasourcesResolveBucketByKeyRequest{} + mi := &file_v1_capability_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DatasourcesResolveBucketByKeyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DatasourcesResolveBucketByKeyRequest) ProtoMessage() {} + +func (x *DatasourcesResolveBucketByKeyRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[43] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DatasourcesResolveBucketByKeyRequest.ProtoReflect.Descriptor instead. +func (*DatasourcesResolveBucketByKeyRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{43} +} + +func (x *DatasourcesResolveBucketByKeyRequest) GetBucketKey() string { + if x != nil { + return x.BucketKey + } + return "" +} + +type DatasourcesResolveBucketByKeyResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result *DatasourceResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DatasourcesResolveBucketByKeyResponse) Reset() { + *x = DatasourcesResolveBucketByKeyResponse{} + mi := &file_v1_capability_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DatasourcesResolveBucketByKeyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DatasourcesResolveBucketByKeyResponse) ProtoMessage() {} + +func (x *DatasourcesResolveBucketByKeyResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[44] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DatasourcesResolveBucketByKeyResponse.ProtoReflect.Descriptor instead. +func (*DatasourcesResolveBucketByKeyResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{44} +} + +func (x *DatasourcesResolveBucketByKeyResponse) GetResult() *DatasourceResult { + if x != nil { + return x.Result + } + return nil +} + +// DatasourceResult mirrors datasources.Result ([]any / map[string]any as +// JSON bytes). +type DatasourceResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + // JSON array of items. + ItemsJson []byte `protobuf:"bytes,1,opt,name=items_json,json=itemsJson,proto3" json:"items_json,omitempty"` + Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + // JSON object; empty when absent. + MetaJson []byte `protobuf:"bytes,3,opt,name=meta_json,json=metaJson,proto3" json:"meta_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DatasourceResult) Reset() { + *x = DatasourceResult{} + mi := &file_v1_capability_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DatasourceResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DatasourceResult) ProtoMessage() {} + +func (x *DatasourceResult) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[45] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DatasourceResult.ProtoReflect.Descriptor instead. +func (*DatasourceResult) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{45} +} + +func (x *DatasourceResult) GetItemsJson() []byte { + if x != nil { + return x.ItemsJson + } + return nil +} + +func (x *DatasourceResult) GetTotal() int32 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *DatasourceResult) GetMetaJson() []byte { + if x != nil { + return x.MetaJson + } + return nil +} + +type UsersGetByUsernameRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UsersGetByUsernameRequest) Reset() { + *x = UsersGetByUsernameRequest{} + mi := &file_v1_capability_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UsersGetByUsernameRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UsersGetByUsernameRequest) ProtoMessage() {} + +func (x *UsersGetByUsernameRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[46] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UsersGetByUsernameRequest.ProtoReflect.Descriptor instead. +func (*UsersGetByUsernameRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{46} +} + +func (x *UsersGetByUsernameRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +type UsersGetByUsernameResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + User *PublicUserProfile `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UsersGetByUsernameResponse) Reset() { + *x = UsersGetByUsernameResponse{} + mi := &file_v1_capability_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UsersGetByUsernameResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UsersGetByUsernameResponse) ProtoMessage() {} + +func (x *UsersGetByUsernameResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[47] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UsersGetByUsernameResponse.ProtoReflect.Descriptor instead. +func (*UsersGetByUsernameResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{47} +} + +func (x *UsersGetByUsernameResponse) GetUser() *PublicUserProfile { + if x != nil { + return x.User + } + return nil +} + +type UsersGetByIdRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UsersGetByIdRequest) Reset() { + *x = UsersGetByIdRequest{} + mi := &file_v1_capability_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UsersGetByIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UsersGetByIdRequest) ProtoMessage() {} + +func (x *UsersGetByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[48] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UsersGetByIdRequest.ProtoReflect.Descriptor instead. +func (*UsersGetByIdRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{48} +} + +func (x *UsersGetByIdRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type UsersGetByIdResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + User *PublicUserProfile `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UsersGetByIdResponse) Reset() { + *x = UsersGetByIdResponse{} + mi := &file_v1_capability_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UsersGetByIdResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UsersGetByIdResponse) ProtoMessage() {} + +func (x *UsersGetByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[49] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UsersGetByIdResponse.ProtoReflect.Descriptor instead. +func (*UsersGetByIdResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{49} +} + +func (x *UsersGetByIdResponse) GetUser() *PublicUserProfile { + if x != nil { + return x.User + } + return nil +} + +// PublicUserProfile mirrors auth.PublicUserProfile. +type PublicUserProfile struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + DisplayName string `protobuf:"bytes,4,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + AvatarUrl string `protobuf:"bytes,5,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + Bio string `protobuf:"bytes,6,opt,name=bio,proto3" json:"bio,omitempty"` + EmailVerified bool `protobuf:"varint,7,opt,name=email_verified,json=emailVerified,proto3" json:"email_verified,omitempty"` + Role string `protobuf:"bytes,8,opt,name=role,proto3" json:"role,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PublicUserProfile) Reset() { + *x = PublicUserProfile{} + mi := &file_v1_capability_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PublicUserProfile) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PublicUserProfile) ProtoMessage() {} + +func (x *PublicUserProfile) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[50] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PublicUserProfile.ProtoReflect.Descriptor instead. +func (*PublicUserProfile) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{50} +} + +func (x *PublicUserProfile) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PublicUserProfile) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *PublicUserProfile) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *PublicUserProfile) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *PublicUserProfile) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *PublicUserProfile) GetBio() string { + if x != nil { + return x.Bio + } + return "" +} + +func (x *PublicUserProfile) GetEmailVerified() bool { + if x != nil { + return x.EmailVerified + } + return false +} + +func (x *PublicUserProfile) GetRole() string { + if x != nil { + return x.Role + } + return "" +} + +type SubscriptionsGetUserTierLevelRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscriptionsGetUserTierLevelRequest) Reset() { + *x = SubscriptionsGetUserTierLevelRequest{} + mi := &file_v1_capability_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscriptionsGetUserTierLevelRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionsGetUserTierLevelRequest) ProtoMessage() {} + +func (x *SubscriptionsGetUserTierLevelRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[51] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionsGetUserTierLevelRequest.ProtoReflect.Descriptor instead. +func (*SubscriptionsGetUserTierLevelRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{51} +} + +func (x *SubscriptionsGetUserTierLevelRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +type SubscriptionsGetUserTierLevelResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + TierLevel *TierLevel `protobuf:"bytes,1,opt,name=tier_level,json=tierLevel,proto3" json:"tier_level,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscriptionsGetUserTierLevelResponse) Reset() { + *x = SubscriptionsGetUserTierLevelResponse{} + mi := &file_v1_capability_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscriptionsGetUserTierLevelResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionsGetUserTierLevelResponse) ProtoMessage() {} + +func (x *SubscriptionsGetUserTierLevelResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[52] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionsGetUserTierLevelResponse.ProtoReflect.Descriptor instead. +func (*SubscriptionsGetUserTierLevelResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{52} +} + +func (x *SubscriptionsGetUserTierLevelResponse) GetTierLevel() *TierLevel { + if x != nil { + return x.TierLevel + } + return nil +} + +// TierLevel mirrors subscriptions.TierLevel. +type TierLevel struct { + state protoimpl.MessageState `protogen:"open.v1"` + Level int32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"` + // JSON feature payload. + Features []byte `protobuf:"bytes,2,opt,name=features,proto3" json:"features,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TierLevel) Reset() { + *x = TierLevel{} + mi := &file_v1_capability_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TierLevel) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TierLevel) ProtoMessage() {} + +func (x *TierLevel) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[53] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TierLevel.ProtoReflect.Descriptor instead. +func (*TierLevel) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{53} +} + +func (x *TierLevel) GetLevel() int32 { + if x != nil { + return x.Level + } + return 0 +} + +func (x *TierLevel) GetFeatures() []byte { + if x != nil { + return x.Features + } + return nil +} + +type SubscriptionsGetTierBySlugRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Slug string `protobuf:"bytes,1,opt,name=slug,proto3" json:"slug,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscriptionsGetTierBySlugRequest) Reset() { + *x = SubscriptionsGetTierBySlugRequest{} + mi := &file_v1_capability_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscriptionsGetTierBySlugRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionsGetTierBySlugRequest) ProtoMessage() {} + +func (x *SubscriptionsGetTierBySlugRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[54] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionsGetTierBySlugRequest.ProtoReflect.Descriptor instead. +func (*SubscriptionsGetTierBySlugRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{54} +} + +func (x *SubscriptionsGetTierBySlugRequest) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +type SubscriptionsGetTierBySlugResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Tier *Tier `protobuf:"bytes,1,opt,name=tier,proto3" json:"tier,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscriptionsGetTierBySlugResponse) Reset() { + *x = SubscriptionsGetTierBySlugResponse{} + mi := &file_v1_capability_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscriptionsGetTierBySlugResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionsGetTierBySlugResponse) ProtoMessage() {} + +func (x *SubscriptionsGetTierBySlugResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[55] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionsGetTierBySlugResponse.ProtoReflect.Descriptor instead. +func (*SubscriptionsGetTierBySlugResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{55} +} + +func (x *SubscriptionsGetTierBySlugResponse) GetTier() *Tier { + if x != nil { + return x.Tier + } + return nil +} + +// Tier mirrors subscriptions.Tier. +type Tier struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Slug string `protobuf:"bytes,3,opt,name=slug,proto3" json:"slug,omitempty"` + Level int32 `protobuf:"varint,4,opt,name=level,proto3" json:"level,omitempty"` + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + // JSON feature payload. + Features []byte `protobuf:"bytes,6,opt,name=features,proto3" json:"features,omitempty"` + IsDefault bool `protobuf:"varint,7,opt,name=is_default,json=isDefault,proto3" json:"is_default,omitempty"` + Position int32 `protobuf:"varint,8,opt,name=position,proto3" json:"position,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Tier) Reset() { + *x = Tier{} + mi := &file_v1_capability_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Tier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Tier) ProtoMessage() {} + +func (x *Tier) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[56] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Tier.ProtoReflect.Descriptor instead. +func (*Tier) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{56} +} + +func (x *Tier) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Tier) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Tier) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +func (x *Tier) GetLevel() int32 { + if x != nil { + return x.Level + } + return 0 +} + +func (x *Tier) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Tier) GetFeatures() []byte { + if x != nil { + return x.Features + } + return nil +} + +func (x *Tier) GetIsDefault() bool { + if x != nil { + return x.IsDefault + } + return false +} + +func (x *Tier) GetPosition() int32 { + if x != nil { + return x.Position + } + return 0 +} + +type SubscriptionsListTiersRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscriptionsListTiersRequest) Reset() { + *x = SubscriptionsListTiersRequest{} + mi := &file_v1_capability_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscriptionsListTiersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionsListTiersRequest) ProtoMessage() {} + +func (x *SubscriptionsListTiersRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[57] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionsListTiersRequest.ProtoReflect.Descriptor instead. +func (*SubscriptionsListTiersRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{57} +} + +type SubscriptionsListTiersResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Tiers []*Tier `protobuf:"bytes,1,rep,name=tiers,proto3" json:"tiers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscriptionsListTiersResponse) Reset() { + *x = SubscriptionsListTiersResponse{} + mi := &file_v1_capability_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscriptionsListTiersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionsListTiersResponse) ProtoMessage() {} + +func (x *SubscriptionsListTiersResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[58] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionsListTiersResponse.ProtoReflect.Descriptor instead. +func (*SubscriptionsListTiersResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{58} +} + +func (x *SubscriptionsListTiersResponse) GetTiers() []*Tier { + if x != nil { + return x.Tiers + } + return nil +} + +type SubscriptionsListActivePlansRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TierId string `protobuf:"bytes,1,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` // UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscriptionsListActivePlansRequest) Reset() { + *x = SubscriptionsListActivePlansRequest{} + mi := &file_v1_capability_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscriptionsListActivePlansRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionsListActivePlansRequest) ProtoMessage() {} + +func (x *SubscriptionsListActivePlansRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[59] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionsListActivePlansRequest.ProtoReflect.Descriptor instead. +func (*SubscriptionsListActivePlansRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{59} +} + +func (x *SubscriptionsListActivePlansRequest) GetTierId() string { + if x != nil { + return x.TierId + } + return "" +} + +type SubscriptionsListActivePlansResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Plans []*Plan `protobuf:"bytes,1,rep,name=plans,proto3" json:"plans,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscriptionsListActivePlansResponse) Reset() { + *x = SubscriptionsListActivePlansResponse{} + mi := &file_v1_capability_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscriptionsListActivePlansResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionsListActivePlansResponse) ProtoMessage() {} + +func (x *SubscriptionsListActivePlansResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[60] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionsListActivePlansResponse.ProtoReflect.Descriptor instead. +func (*SubscriptionsListActivePlansResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{60} +} + +func (x *SubscriptionsListActivePlansResponse) GetPlans() []*Plan { + if x != nil { + return x.Plans + } + return nil +} + +// Plan mirrors subscriptions.Plan. +type Plan struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + TierId string `protobuf:"bytes,2,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"` // UUID + BillingInterval string `protobuf:"bytes,3,opt,name=billing_interval,json=billingInterval,proto3" json:"billing_interval,omitempty"` + Amount int32 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + Currency string `protobuf:"bytes,5,opt,name=currency,proto3" json:"currency,omitempty"` + IsActive bool `protobuf:"varint,6,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Plan) Reset() { + *x = Plan{} + mi := &file_v1_capability_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Plan) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Plan) ProtoMessage() {} + +func (x *Plan) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[61] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Plan.ProtoReflect.Descriptor instead. +func (*Plan) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{61} +} + +func (x *Plan) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Plan) GetTierId() string { + if x != nil { + return x.TierId + } + return "" +} + +func (x *Plan) GetBillingInterval() string { + if x != nil { + return x.BillingInterval + } + return "" +} + +func (x *Plan) GetAmount() int32 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *Plan) GetCurrency() string { + if x != nil { + return x.Currency + } + return "" +} + +func (x *Plan) GetIsActive() bool { + if x != nil { + return x.IsActive + } + return false +} + +func (x *Plan) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +// MediaDepositRequest mirrors plugin.MediaDeposit. +type MediaDepositRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Optional deterministic media row ID (UUID); empty = host generates one. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Filename string `protobuf:"bytes,2,opt,name=filename,proto3" json:"filename,omitempty"` + Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` + AltText string `protobuf:"bytes,4,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"` + Folder string `protobuf:"bytes,5,opt,name=folder,proto3" json:"folder,omitempty"` + Source string `protobuf:"bytes,6,opt,name=source,proto3" json:"source,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MediaDepositRequest) Reset() { + *x = MediaDepositRequest{} + mi := &file_v1_capability_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MediaDepositRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MediaDepositRequest) ProtoMessage() {} + +func (x *MediaDepositRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[62] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MediaDepositRequest.ProtoReflect.Descriptor instead. +func (*MediaDepositRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{62} +} + +func (x *MediaDepositRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *MediaDepositRequest) GetFilename() string { + if x != nil { + return x.Filename + } + return "" +} + +func (x *MediaDepositRequest) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +func (x *MediaDepositRequest) GetAltText() string { + if x != nil { + return x.AltText + } + return "" +} + +func (x *MediaDepositRequest) GetFolder() string { + if x != nil { + return x.Folder + } + return "" +} + +func (x *MediaDepositRequest) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +// MediaDepositResponse mirrors plugin.MediaResult. +type MediaDepositResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + // Ready-to-use reference ("media:"). + Ref string `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"` + Created bool `protobuf:"varint,3,opt,name=created,proto3" json:"created,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MediaDepositResponse) Reset() { + *x = MediaDepositResponse{} + mi := &file_v1_capability_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MediaDepositResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MediaDepositResponse) ProtoMessage() {} + +func (x *MediaDepositResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[63] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MediaDepositResponse.ProtoReflect.Descriptor instead. +func (*MediaDepositResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{63} +} + +func (x *MediaDepositResponse) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *MediaDepositResponse) GetRef() string { + if x != nil { + return x.Ref + } + return "" +} + +func (x *MediaDepositResponse) GetCreated() bool { + if x != nil { + return x.Created + } + return false +} + +type EmailSendRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + To string `protobuf:"bytes,1,opt,name=to,proto3" json:"to,omitempty"` + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + Body string `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EmailSendRequest) Reset() { + *x = EmailSendRequest{} + mi := &file_v1_capability_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EmailSendRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmailSendRequest) ProtoMessage() {} + +func (x *EmailSendRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[64] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmailSendRequest.ProtoReflect.Descriptor instead. +func (*EmailSendRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{64} +} + +func (x *EmailSendRequest) GetTo() string { + if x != nil { + return x.To + } + return "" +} + +func (x *EmailSendRequest) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *EmailSendRequest) GetBody() string { + if x != nil { + return x.Body + } + return "" +} + +type EmailSendResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EmailSendResponse) Reset() { + *x = EmailSendResponse{} + mi := &file_v1_capability_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EmailSendResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmailSendResponse) ProtoMessage() {} + +func (x *EmailSendResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[65] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmailSendResponse.ProtoReflect.Descriptor instead. +func (*EmailSendResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{65} +} + +type AiTextCallRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TaskKey string `protobuf:"bytes,1,opt,name=task_key,json=taskKey,proto3" json:"task_key,omitempty"` + SystemPrompt string `protobuf:"bytes,2,opt,name=system_prompt,json=systemPrompt,proto3" json:"system_prompt,omitempty"` + UserMessage string `protobuf:"bytes,3,opt,name=user_message,json=userMessage,proto3" json:"user_message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AiTextCallRequest) Reset() { + *x = AiTextCallRequest{} + mi := &file_v1_capability_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AiTextCallRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AiTextCallRequest) ProtoMessage() {} + +func (x *AiTextCallRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[66] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AiTextCallRequest.ProtoReflect.Descriptor instead. +func (*AiTextCallRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{66} +} + +func (x *AiTextCallRequest) GetTaskKey() string { + if x != nil { + return x.TaskKey + } + return "" +} + +func (x *AiTextCallRequest) GetSystemPrompt() string { + if x != nil { + return x.SystemPrompt + } + return "" +} + +func (x *AiTextCallRequest) GetUserMessage() string { + if x != nil { + return x.UserMessage + } + return "" +} + +type AiTextCallResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AiTextCallResponse) Reset() { + *x = AiTextCallResponse{} + mi := &file_v1_capability_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AiTextCallResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AiTextCallResponse) ProtoMessage() {} + +func (x *AiTextCallResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[67] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AiTextCallResponse.ProtoReflect.Descriptor instead. +func (*AiTextCallResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{67} +} + +func (x *AiTextCallResponse) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +// AiToolRegisterRequest mirrors ai.ToolDefinition (minus Handler, which +// stays guest-side; execution direction is a runtime-WO concern). +type AiToolRegisterRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Slug string `protobuf:"bytes,1,opt,name=slug,proto3" json:"slug,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // JSON encoding of the parameter schema map. + ParameterSchemaJson []byte `protobuf:"bytes,4,opt,name=parameter_schema_json,json=parameterSchemaJson,proto3" json:"parameter_schema_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AiToolRegisterRequest) Reset() { + *x = AiToolRegisterRequest{} + mi := &file_v1_capability_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AiToolRegisterRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AiToolRegisterRequest) ProtoMessage() {} + +func (x *AiToolRegisterRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[68] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AiToolRegisterRequest.ProtoReflect.Descriptor instead. +func (*AiToolRegisterRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{68} +} + +func (x *AiToolRegisterRequest) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +func (x *AiToolRegisterRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *AiToolRegisterRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *AiToolRegisterRequest) GetParameterSchemaJson() []byte { + if x != nil { + return x.ParameterSchemaJson + } + return nil +} + +type AiToolRegisterResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AiToolRegisterResponse) Reset() { + *x = AiToolRegisterResponse{} + mi := &file_v1_capability_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AiToolRegisterResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AiToolRegisterResponse) ProtoMessage() {} + +func (x *AiToolRegisterResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[69] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AiToolRegisterResponse.ProtoReflect.Descriptor instead. +func (*AiToolRegisterResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{69} +} + +type BridgeRegisterServiceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + PluginName string `protobuf:"bytes,1,opt,name=plugin_name,json=pluginName,proto3" json:"plugin_name,omitempty"` + ServiceName string `protobuf:"bytes,2,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BridgeRegisterServiceRequest) Reset() { + *x = BridgeRegisterServiceRequest{} + mi := &file_v1_capability_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BridgeRegisterServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BridgeRegisterServiceRequest) ProtoMessage() {} + +func (x *BridgeRegisterServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[70] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BridgeRegisterServiceRequest.ProtoReflect.Descriptor instead. +func (*BridgeRegisterServiceRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{70} +} + +func (x *BridgeRegisterServiceRequest) GetPluginName() string { + if x != nil { + return x.PluginName + } + return "" +} + +func (x *BridgeRegisterServiceRequest) GetServiceName() string { + if x != nil { + return x.ServiceName + } + return "" +} + +type BridgeRegisterServiceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BridgeRegisterServiceResponse) Reset() { + *x = BridgeRegisterServiceResponse{} + mi := &file_v1_capability_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BridgeRegisterServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BridgeRegisterServiceResponse) ProtoMessage() {} + +func (x *BridgeRegisterServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[71] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BridgeRegisterServiceResponse.ProtoReflect.Descriptor instead. +func (*BridgeRegisterServiceResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{71} +} + +type BridgeGetServiceRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + PluginName string `protobuf:"bytes,1,opt,name=plugin_name,json=pluginName,proto3" json:"plugin_name,omitempty"` + ServiceName string `protobuf:"bytes,2,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BridgeGetServiceRequest) Reset() { + *x = BridgeGetServiceRequest{} + mi := &file_v1_capability_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BridgeGetServiceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BridgeGetServiceRequest) ProtoMessage() {} + +func (x *BridgeGetServiceRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[72] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BridgeGetServiceRequest.ProtoReflect.Descriptor instead. +func (*BridgeGetServiceRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{72} +} + +func (x *BridgeGetServiceRequest) GetPluginName() string { + if x != nil { + return x.PluginName + } + return "" +} + +func (x *BridgeGetServiceRequest) GetServiceName() string { + if x != nil { + return x.ServiceName + } + return "" +} + +type BridgeGetServiceResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Available bool `protobuf:"varint,1,opt,name=available,proto3" json:"available,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BridgeGetServiceResponse) Reset() { + *x = BridgeGetServiceResponse{} + mi := &file_v1_capability_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BridgeGetServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BridgeGetServiceResponse) ProtoMessage() {} + +func (x *BridgeGetServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[73] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BridgeGetServiceResponse.ProtoReflect.Descriptor instead. +func (*BridgeGetServiceResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{73} +} + +func (x *BridgeGetServiceResponse) GetAvailable() bool { + if x != nil { + return x.Available + } + return false +} + +type JobsSubmitRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + JobType string `protobuf:"bytes,1,opt,name=job_type,json=jobType,proto3" json:"job_type,omitempty"` + // JSON job configuration. + ConfigJson []byte `protobuf:"bytes,2,opt,name=config_json,json=configJson,proto3" json:"config_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *JobsSubmitRequest) Reset() { + *x = JobsSubmitRequest{} + mi := &file_v1_capability_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *JobsSubmitRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobsSubmitRequest) ProtoMessage() {} + +func (x *JobsSubmitRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[74] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JobsSubmitRequest.ProtoReflect.Descriptor instead. +func (*JobsSubmitRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{74} +} + +func (x *JobsSubmitRequest) GetJobType() string { + if x != nil { + return x.JobType + } + return "" +} + +func (x *JobsSubmitRequest) GetConfigJson() []byte { + if x != nil { + return x.ConfigJson + } + return nil +} + +type JobsSubmitResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *JobsSubmitResponse) Reset() { + *x = JobsSubmitResponse{} + mi := &file_v1_capability_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *JobsSubmitResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobsSubmitResponse) ProtoMessage() {} + +func (x *JobsSubmitResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[75] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JobsSubmitResponse.ProtoReflect.Descriptor instead. +func (*JobsSubmitResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{75} +} + +type EmbeddingsGenerateEmbeddingRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EmbeddingsGenerateEmbeddingRequest) Reset() { + *x = EmbeddingsGenerateEmbeddingRequest{} + mi := &file_v1_capability_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EmbeddingsGenerateEmbeddingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmbeddingsGenerateEmbeddingRequest) ProtoMessage() {} + +func (x *EmbeddingsGenerateEmbeddingRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[76] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmbeddingsGenerateEmbeddingRequest.ProtoReflect.Descriptor instead. +func (*EmbeddingsGenerateEmbeddingRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{76} +} + +func (x *EmbeddingsGenerateEmbeddingRequest) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +type EmbeddingsGenerateEmbeddingResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Embedding []float32 `protobuf:"fixed32,1,rep,packed,name=embedding,proto3" json:"embedding,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EmbeddingsGenerateEmbeddingResponse) Reset() { + *x = EmbeddingsGenerateEmbeddingResponse{} + mi := &file_v1_capability_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EmbeddingsGenerateEmbeddingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmbeddingsGenerateEmbeddingResponse) ProtoMessage() {} + +func (x *EmbeddingsGenerateEmbeddingResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[77] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmbeddingsGenerateEmbeddingResponse.ProtoReflect.Descriptor instead. +func (*EmbeddingsGenerateEmbeddingResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{77} +} + +func (x *EmbeddingsGenerateEmbeddingResponse) GetEmbedding() []float32 { + if x != nil { + return x.Embedding + } + return nil +} + +type EmbeddingsEmbedContentRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + SourceType string `protobuf:"bytes,1,opt,name=source_type,json=sourceType,proto3" json:"source_type,omitempty"` + SourceId string `protobuf:"bytes,2,opt,name=source_id,json=sourceId,proto3" json:"source_id,omitempty"` // UUID + Text string `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EmbeddingsEmbedContentRequest) Reset() { + *x = EmbeddingsEmbedContentRequest{} + mi := &file_v1_capability_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EmbeddingsEmbedContentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmbeddingsEmbedContentRequest) ProtoMessage() {} + +func (x *EmbeddingsEmbedContentRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[78] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmbeddingsEmbedContentRequest.ProtoReflect.Descriptor instead. +func (*EmbeddingsEmbedContentRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{78} +} + +func (x *EmbeddingsEmbedContentRequest) GetSourceType() string { + if x != nil { + return x.SourceType + } + return "" +} + +func (x *EmbeddingsEmbedContentRequest) GetSourceId() string { + if x != nil { + return x.SourceId + } + return "" +} + +func (x *EmbeddingsEmbedContentRequest) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +type EmbeddingsEmbedContentResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Embedded bool `protobuf:"varint,1,opt,name=embedded,proto3" json:"embedded,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EmbeddingsEmbedContentResponse) Reset() { + *x = EmbeddingsEmbedContentResponse{} + mi := &file_v1_capability_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EmbeddingsEmbedContentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmbeddingsEmbedContentResponse) ProtoMessage() {} + +func (x *EmbeddingsEmbedContentResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[79] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmbeddingsEmbedContentResponse.ProtoReflect.Descriptor instead. +func (*EmbeddingsEmbedContentResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{79} +} + +func (x *EmbeddingsEmbedContentResponse) GetEmbedded() bool { + if x != nil { + return x.Embedded + } + return false +} + +type EmbeddingsIsAvailableRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EmbeddingsIsAvailableRequest) Reset() { + *x = EmbeddingsIsAvailableRequest{} + mi := &file_v1_capability_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EmbeddingsIsAvailableRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmbeddingsIsAvailableRequest) ProtoMessage() {} + +func (x *EmbeddingsIsAvailableRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[80] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmbeddingsIsAvailableRequest.ProtoReflect.Descriptor instead. +func (*EmbeddingsIsAvailableRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{80} +} + +type EmbeddingsIsAvailableResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Available bool `protobuf:"varint,1,opt,name=available,proto3" json:"available,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EmbeddingsIsAvailableResponse) Reset() { + *x = EmbeddingsIsAvailableResponse{} + mi := &file_v1_capability_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EmbeddingsIsAvailableResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmbeddingsIsAvailableResponse) ProtoMessage() {} + +func (x *EmbeddingsIsAvailableResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[81] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmbeddingsIsAvailableResponse.ProtoReflect.Descriptor instead. +func (*EmbeddingsIsAvailableResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{81} +} + +func (x *EmbeddingsIsAvailableResponse) GetAvailable() bool { + if x != nil { + return x.Available + } + return false +} + +type RagQueryRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + Limit int32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RagQueryRequest) Reset() { + *x = RagQueryRequest{} + mi := &file_v1_capability_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RagQueryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RagQueryRequest) ProtoMessage() {} + +func (x *RagQueryRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[82] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RagQueryRequest.ProtoReflect.Descriptor instead. +func (*RagQueryRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{82} +} + +func (x *RagQueryRequest) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +func (x *RagQueryRequest) GetLimit() int32 { + if x != nil { + return x.Limit + } + return 0 +} + +type RagQueryResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Results []*RagResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RagQueryResponse) Reset() { + *x = RagQueryResponse{} + mi := &file_v1_capability_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RagQueryResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RagQueryResponse) ProtoMessage() {} + +func (x *RagQueryResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[83] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RagQueryResponse.ProtoReflect.Descriptor instead. +func (*RagQueryResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{83} +} + +func (x *RagQueryResponse) GetResults() []*RagResult { + if x != nil { + return x.Results + } + return nil +} + +// RagResult mirrors plugin.RAGResult. +type RagResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + Content string `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` + Score float64 `protobuf:"fixed64,2,opt,name=score,proto3" json:"score,omitempty"` + Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RagResult) Reset() { + *x = RagResult{} + mi := &file_v1_capability_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RagResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RagResult) ProtoMessage() {} + +func (x *RagResult) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[84] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RagResult.ProtoReflect.Descriptor instead. +func (*RagResult) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{84} +} + +func (x *RagResult) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *RagResult) GetScore() float64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *RagResult) GetMetadata() map[string]string { + if x != nil { + return x.Metadata + } + return nil +} + +type RagOnContentChangedRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ContentType string `protobuf:"bytes,1,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + ContentId string `protobuf:"bytes,2,opt,name=content_id,json=contentId,proto3" json:"content_id,omitempty"` // UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RagOnContentChangedRequest) Reset() { + *x = RagOnContentChangedRequest{} + mi := &file_v1_capability_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RagOnContentChangedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RagOnContentChangedRequest) ProtoMessage() {} + +func (x *RagOnContentChangedRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[85] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RagOnContentChangedRequest.ProtoReflect.Descriptor instead. +func (*RagOnContentChangedRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{85} +} + +func (x *RagOnContentChangedRequest) GetContentType() string { + if x != nil { + return x.ContentType + } + return "" +} + +func (x *RagOnContentChangedRequest) GetContentId() string { + if x != nil { + return x.ContentId + } + return "" +} + +type RagOnContentChangedResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RagOnContentChangedResponse) Reset() { + *x = RagOnContentChangedResponse{} + mi := &file_v1_capability_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RagOnContentChangedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RagOnContentChangedResponse) ProtoMessage() {} + +func (x *RagOnContentChangedResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[86] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RagOnContentChangedResponse.ProtoReflect.Descriptor instead. +func (*RagOnContentChangedResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{86} +} + +// ReviewsSubmitReviewRequest mirrors plugin.SubmitReviewParams. +type ReviewsSubmitReviewRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TableId string `protobuf:"bytes,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"` // UUID + RowId string `protobuf:"bytes,2,opt,name=row_id,json=rowId,proto3" json:"row_id,omitempty"` // UUID + OverallRating int32 `protobuf:"varint,3,opt,name=overall_rating,json=overallRating,proto3" json:"overall_rating,omitempty"` + ReviewText string `protobuf:"bytes,4,opt,name=review_text,json=reviewText,proto3" json:"review_text,omitempty"` + // JSON encoding of the per-criterion ratings map. + RatingsJson []byte `protobuf:"bytes,5,opt,name=ratings_json,json=ratingsJson,proto3" json:"ratings_json,omitempty"` + Photos []string `protobuf:"bytes,6,rep,name=photos,proto3" json:"photos,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReviewsSubmitReviewRequest) Reset() { + *x = ReviewsSubmitReviewRequest{} + mi := &file_v1_capability_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReviewsSubmitReviewRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReviewsSubmitReviewRequest) ProtoMessage() {} + +func (x *ReviewsSubmitReviewRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[87] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReviewsSubmitReviewRequest.ProtoReflect.Descriptor instead. +func (*ReviewsSubmitReviewRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{87} +} + +func (x *ReviewsSubmitReviewRequest) GetTableId() string { + if x != nil { + return x.TableId + } + return "" +} + +func (x *ReviewsSubmitReviewRequest) GetRowId() string { + if x != nil { + return x.RowId + } + return "" +} + +func (x *ReviewsSubmitReviewRequest) GetOverallRating() int32 { + if x != nil { + return x.OverallRating + } + return 0 +} + +func (x *ReviewsSubmitReviewRequest) GetReviewText() string { + if x != nil { + return x.ReviewText + } + return "" +} + +func (x *ReviewsSubmitReviewRequest) GetRatingsJson() []byte { + if x != nil { + return x.RatingsJson + } + return nil +} + +func (x *ReviewsSubmitReviewRequest) GetPhotos() []string { + if x != nil { + return x.Photos + } + return nil +} + +type ReviewsSubmitReviewResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ReviewId string `protobuf:"bytes,1,opt,name=review_id,json=reviewId,proto3" json:"review_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReviewsSubmitReviewResponse) Reset() { + *x = ReviewsSubmitReviewResponse{} + mi := &file_v1_capability_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReviewsSubmitReviewResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReviewsSubmitReviewResponse) ProtoMessage() {} + +func (x *ReviewsSubmitReviewResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[88] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReviewsSubmitReviewResponse.ProtoReflect.Descriptor instead. +func (*ReviewsSubmitReviewResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{88} +} + +func (x *ReviewsSubmitReviewResponse) GetReviewId() string { + if x != nil { + return x.ReviewId + } + return "" +} + +type BadgesRefreshBadgesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TableId string `protobuf:"bytes,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"` // UUID + RowId string `protobuf:"bytes,2,opt,name=row_id,json=rowId,proto3" json:"row_id,omitempty"` // UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BadgesRefreshBadgesRequest) Reset() { + *x = BadgesRefreshBadgesRequest{} + mi := &file_v1_capability_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BadgesRefreshBadgesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BadgesRefreshBadgesRequest) ProtoMessage() {} + +func (x *BadgesRefreshBadgesRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[89] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BadgesRefreshBadgesRequest.ProtoReflect.Descriptor instead. +func (*BadgesRefreshBadgesRequest) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{89} +} + +func (x *BadgesRefreshBadgesRequest) GetTableId() string { + if x != nil { + return x.TableId + } + return "" +} + +func (x *BadgesRefreshBadgesRequest) GetRowId() string { + if x != nil { + return x.RowId + } + return "" +} + +type BadgesRefreshBadgesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BadgesRefreshBadgesResponse) Reset() { + *x = BadgesRefreshBadgesResponse{} + mi := &file_v1_capability_proto_msgTypes[90] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BadgesRefreshBadgesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BadgesRefreshBadgesResponse) ProtoMessage() {} + +func (x *BadgesRefreshBadgesResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_capability_proto_msgTypes[90] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BadgesRefreshBadgesResponse.ProtoReflect.Descriptor instead. +func (*BadgesRefreshBadgesResponse) Descriptor() ([]byte, []int) { + return file_v1_capability_proto_rawDescGZIP(), []int{90} +} + +var File_v1_capability_proto protoreflect.FileDescriptor + +const file_v1_capability_proto_rawDesc = "" + + "\n" + + "\x13v1/capability.proto\x12\x06abi.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x0fv1/invoke.proto\"C\n" + + "\x0fHostCallRequest\x12\x16\n" + + "\x06method\x18\x01 \x01(\tR\x06method\x12\x18\n" + + "\apayload\x18\x02 \x01(\fR\apayload\"T\n" + + "\x10HostCallResponse\x12\x18\n" + + "\apayload\x18\x01 \x01(\fR\apayload\x12&\n" + + "\x05error\x18\x02 \x01(\v2\x10.abi.v1.AbiErrorR\x05error\"0\n" + + "\x1eContentGetAuthorProfileRequest\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\"P\n" + + "\x1fContentGetAuthorProfileResponse\x12-\n" + + "\x06author\x18\x01 \x01(\v2\x15.abi.v1.AuthorProfileR\x06author\"\x9d\x02\n" + + "\rAuthorProfile\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x12\n" + + "\x04slug\x18\x03 \x01(\tR\x04slug\x12\x10\n" + + "\x03bio\x18\x04 \x01(\tR\x03bio\x12\x1d\n" + + "\n" + + "avatar_url\x18\x05 \x01(\tR\tavatarUrl\x12\x18\n" + + "\awebsite\x18\x06 \x01(\tR\awebsite\x12I\n" + + "\fsocial_links\x18\a \x03(\v2&.abi.v1.AuthorProfile.SocialLinksEntryR\vsocialLinks\x1a>\n" + + "\x10SocialLinksEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"+\n" + + "\x15ContentGetPageRequest\x12\x12\n" + + "\x04slug\x18\x01 \x01(\tR\x04slug\">\n" + + "\x16ContentGetPageResponse\x12$\n" + + "\x04page\x18\x01 \x01(\v2\x10.abi.v1.PageInfoR\x04page\"D\n" + + "\bPageInfo\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04slug\x18\x02 \x01(\tR\x04slug\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\"+\n" + + "\x15ContentGetPostRequest\x12\x12\n" + + "\x04slug\x18\x01 \x01(\tR\x04slug\">\n" + + "\x16ContentGetPostResponse\x12$\n" + + "\x04post\x18\x01 \x01(\v2\x10.abi.v1.PostInfoR\x04post\"\xa9\x01\n" + + "\bPostInfo\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04slug\x18\x02 \x01(\tR\x04slug\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\x12\x18\n" + + "\aexcerpt\x18\x04 \x01(\tR\aexcerpt\x12,\n" + + "\x12featured_image_url\x18\x05 \x01(\tR\x10featuredImageUrl\x12\x1b\n" + + "\tauthor_id\x18\x06 \x01(\tR\bauthorId\"+\n" + + "\x15ContentSlugifyRequest\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\",\n" + + "\x16ContentSlugifyResponse\x12\x12\n" + + "\x04slug\x18\x01 \x01(\tR\x04slug\":\n" + + "\x1dContentBlockNoteToHtmlRequest\x12\x19\n" + + "\bdoc_json\x18\x01 \x01(\fR\adocJson\"4\n" + + "\x1eContentBlockNoteToHtmlResponse\x12\x12\n" + + "\x04html\x18\x01 \x01(\tR\x04html\"L\n" + + "\x1dContentGenerateExcerptRequest\x12\x12\n" + + "\x04html\x18\x01 \x01(\tR\x04html\x12\x17\n" + + "\amax_len\x18\x02 \x01(\x05R\x06maxLen\":\n" + + "\x1eContentGenerateExcerptResponse\x12\x18\n" + + "\aexcerpt\x18\x01 \x01(\tR\aexcerpt\"-\n" + + "\x17ContentStripHtmlRequest\x12\x12\n" + + "\x04html\x18\x01 \x01(\tR\x04html\".\n" + + "\x18ContentStripHtmlResponse\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\" \n" + + "\x1eSettingsGetSiteSettingsRequest\"F\n" + + "\x1fSettingsGetSiteSettingsResponse\x12#\n" + + "\rsettings_json\x18\x01 \x01(\fR\fsettingsJson\"C\n" + + " SettingsGetPluginSettingsRequest\x12\x1f\n" + + "\vplugin_name\x18\x01 \x01(\tR\n" + + "pluginName\"H\n" + + "!SettingsGetPluginSettingsResponse\x12#\n" + + "\rsettings_json\x18\x01 \x01(\fR\fsettingsJson\"S\n" + + " SettingsUpdateSiteSettingRequest\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x1d\n" + + "\n" + + "value_json\x18\x02 \x01(\fR\tvalueJson\"#\n" + + "!SettingsUpdateSiteSettingResponse\">\n" + + "#GatingGetSubscriberTierLevelRequest\x12\x17\n" + + "\auser_id\x18\x01 \x01(\tR\x06userId\"<\n" + + "$GatingGetSubscriberTierLevelResponse\x12\x14\n" + + "\x05level\x18\x01 \x01(\x05R\x05level\"m\n" + + "\x1bGatingEvaluateAccessRequest\x12&\n" + + "\x0fuser_tier_level\x18\x01 \x01(\x05R\ruserTierLevel\x12&\n" + + "\x04rule\x18\x02 \x01(\v2\x12.abi.v1.AccessRuleR\x04rule\"L\n" + + "\x1cGatingEvaluateAccessResponse\x12,\n" + + "\x06result\x18\x01 \x01(\v2\x14.abi.v1.AccessResultR\x06result\"\xa4\x01\n" + + "\n" + + "AccessRule\x12$\n" + + "\x0emin_tier_level\x18\x01 \x01(\x05R\fminTierLevel\x12(\n" + + "\x10override_tier_id\x18\x02 \x01(\tR\x0eoverrideTierId\x12\x1f\n" + + "\vteaser_mode\x18\x03 \x01(\tR\n" + + "teaserMode\x12%\n" + + "\x0eteaser_percent\x18\x04 \x01(\x05R\rteaserPercent\"\x9c\x01\n" + + "\fAccessResult\x12\x1d\n" + + "\n" + + "has_access\x18\x01 \x01(\bR\thasAccess\x12\x1f\n" + + "\vteaser_mode\x18\x02 \x01(\tR\n" + + "teaserMode\x12%\n" + + "\x0eteaser_percent\x18\x03 \x01(\x05R\rteaserPercent\x12%\n" + + "\x0erequired_level\x18\x04 \x01(\x05R\rrequiredLevel\":\n" + + "\x1aCryptoEncryptSecretRequest\x12\x1c\n" + + "\tplaintext\x18\x01 \x01(\tR\tplaintext\"=\n" + + "\x1bCryptoEncryptSecretResponse\x12\x1e\n" + + "\n" + + "ciphertext\x18\x01 \x01(\tR\n" + + "ciphertext\"<\n" + + "\x1aCryptoDecryptSecretRequest\x12\x1e\n" + + "\n" + + "ciphertext\x18\x01 \x01(\tR\n" + + "ciphertext\";\n" + + "\x1bCryptoDecryptSecretResponse\x12\x1c\n" + + "\tplaintext\x18\x01 \x01(\tR\tplaintext\"/\n" + + "\x19MenusGetMenuByNameRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\">\n" + + "\x1aMenusGetMenuByNameResponse\x12 \n" + + "\x04menu\x18\x01 \x01(\v2\f.abi.v1.MenuR\x04menu\"*\n" + + "\x04Menu\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\"3\n" + + "\x18MenusGetMenuItemsRequest\x12\x17\n" + + "\amenu_id\x18\x01 \x01(\tR\x06menuId\"C\n" + + "\x19MenusGetMenuItemsResponse\x12&\n" + + "\x05items\x18\x01 \x03(\v2\x10.abi.v1.MenuItemR\x05items\"\xbc\x02\n" + + "\bMenuItem\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x17\n" + + "\amenu_id\x18\x02 \x01(\tR\x06menuId\x12\x14\n" + + "\x05label\x18\x03 \x01(\tR\x05label\x12\x10\n" + + "\x03url\x18\x04 \x01(\tR\x03url\x12\x1b\n" + + "\tpage_slug\x18\x05 \x01(\tR\bpageSlug\x12 \n" + + "\tparent_id\x18\x06 \x01(\tH\x00R\bparentId\x88\x01\x01\x12\x1d\n" + + "\n" + + "sort_order\x18\a \x01(\x05R\tsortOrder\x12%\n" + + "\x0fopen_in_new_tab\x18\b \x01(\bR\fopenInNewTab\x12\x1b\n" + + "\tcss_class\x18\t \x01(\tR\bcssClass\x12\x1b\n" + + "\titem_type\x18\n" + + " \x01(\tR\bitemType\x12\x12\n" + + "\x04icon\x18\v \x01(\tR\x04iconB\f\n" + + "\n" + + "_parent_id\">\n" + + "\x1fDatasourcesResolveBucketRequest\x12\x1b\n" + + "\tbucket_id\x18\x01 \x01(\tR\bbucketId\"T\n" + + " DatasourcesResolveBucketResponse\x120\n" + + "\x06result\x18\x01 \x01(\v2\x18.abi.v1.DatasourceResultR\x06result\"E\n" + + "$DatasourcesResolveBucketByKeyRequest\x12\x1d\n" + + "\n" + + "bucket_key\x18\x01 \x01(\tR\tbucketKey\"Y\n" + + "%DatasourcesResolveBucketByKeyResponse\x120\n" + + "\x06result\x18\x01 \x01(\v2\x18.abi.v1.DatasourceResultR\x06result\"d\n" + + "\x10DatasourceResult\x12\x1d\n" + + "\n" + + "items_json\x18\x01 \x01(\fR\titemsJson\x12\x14\n" + + "\x05total\x18\x02 \x01(\x05R\x05total\x12\x1b\n" + + "\tmeta_json\x18\x03 \x01(\fR\bmetaJson\"7\n" + + "\x19UsersGetByUsernameRequest\x12\x1a\n" + + "\busername\x18\x01 \x01(\tR\busername\"K\n" + + "\x1aUsersGetByUsernameResponse\x12-\n" + + "\x04user\x18\x01 \x01(\v2\x19.abi.v1.PublicUserProfileR\x04user\"%\n" + + "\x13UsersGetByIdRequest\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\"E\n" + + "\x14UsersGetByIdResponse\x12-\n" + + "\x04user\x18\x01 \x01(\v2\x19.abi.v1.PublicUserProfileR\x04user\"\xe4\x01\n" + + "\x11PublicUserProfile\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x14\n" + + "\x05email\x18\x02 \x01(\tR\x05email\x12\x1a\n" + + "\busername\x18\x03 \x01(\tR\busername\x12!\n" + + "\fdisplay_name\x18\x04 \x01(\tR\vdisplayName\x12\x1d\n" + + "\n" + + "avatar_url\x18\x05 \x01(\tR\tavatarUrl\x12\x10\n" + + "\x03bio\x18\x06 \x01(\tR\x03bio\x12%\n" + + "\x0eemail_verified\x18\a \x01(\bR\remailVerified\x12\x12\n" + + "\x04role\x18\b \x01(\tR\x04role\"?\n" + + "$SubscriptionsGetUserTierLevelRequest\x12\x17\n" + + "\auser_id\x18\x01 \x01(\tR\x06userId\"Y\n" + + "%SubscriptionsGetUserTierLevelResponse\x120\n" + + "\n" + + "tier_level\x18\x01 \x01(\v2\x11.abi.v1.TierLevelR\ttierLevel\"=\n" + + "\tTierLevel\x12\x14\n" + + "\x05level\x18\x01 \x01(\x05R\x05level\x12\x1a\n" + + "\bfeatures\x18\x02 \x01(\fR\bfeatures\"7\n" + + "!SubscriptionsGetTierBySlugRequest\x12\x12\n" + + "\x04slug\x18\x01 \x01(\tR\x04slug\"F\n" + + "\"SubscriptionsGetTierBySlugResponse\x12 \n" + + "\x04tier\x18\x01 \x01(\v2\f.abi.v1.TierR\x04tier\"\xcd\x01\n" + + "\x04Tier\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x12\n" + + "\x04slug\x18\x03 \x01(\tR\x04slug\x12\x14\n" + + "\x05level\x18\x04 \x01(\x05R\x05level\x12 \n" + + "\vdescription\x18\x05 \x01(\tR\vdescription\x12\x1a\n" + + "\bfeatures\x18\x06 \x01(\fR\bfeatures\x12\x1d\n" + + "\n" + + "is_default\x18\a \x01(\bR\tisDefault\x12\x1a\n" + + "\bposition\x18\b \x01(\x05R\bposition\"\x1f\n" + + "\x1dSubscriptionsListTiersRequest\"D\n" + + "\x1eSubscriptionsListTiersResponse\x12\"\n" + + "\x05tiers\x18\x01 \x03(\v2\f.abi.v1.TierR\x05tiers\">\n" + + "#SubscriptionsListActivePlansRequest\x12\x17\n" + + "\atier_id\x18\x01 \x01(\tR\x06tierId\"J\n" + + "$SubscriptionsListActivePlansResponse\x12\"\n" + + "\x05plans\x18\x01 \x03(\v2\f.abi.v1.PlanR\x05plans\"\xe6\x01\n" + + "\x04Plan\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x17\n" + + "\atier_id\x18\x02 \x01(\tR\x06tierId\x12)\n" + + "\x10billing_interval\x18\x03 \x01(\tR\x0fbillingInterval\x12\x16\n" + + "\x06amount\x18\x04 \x01(\x05R\x06amount\x12\x1a\n" + + "\bcurrency\x18\x05 \x01(\tR\bcurrency\x12\x1b\n" + + "\tis_active\x18\x06 \x01(\bR\bisActive\x129\n" + + "\n" + + "created_at\x18\a \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\"\xa0\x01\n" + + "\x13MediaDepositRequest\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x1a\n" + + "\bfilename\x18\x02 \x01(\tR\bfilename\x12\x12\n" + + "\x04data\x18\x03 \x01(\fR\x04data\x12\x19\n" + + "\balt_text\x18\x04 \x01(\tR\aaltText\x12\x16\n" + + "\x06folder\x18\x05 \x01(\tR\x06folder\x12\x16\n" + + "\x06source\x18\x06 \x01(\tR\x06source\"R\n" + + "\x14MediaDepositResponse\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x10\n" + + "\x03ref\x18\x02 \x01(\tR\x03ref\x12\x18\n" + + "\acreated\x18\x03 \x01(\bR\acreated\"P\n" + + "\x10EmailSendRequest\x12\x0e\n" + + "\x02to\x18\x01 \x01(\tR\x02to\x12\x18\n" + + "\asubject\x18\x02 \x01(\tR\asubject\x12\x12\n" + + "\x04body\x18\x03 \x01(\tR\x04body\"\x13\n" + + "\x11EmailSendResponse\"v\n" + + "\x11AiTextCallRequest\x12\x19\n" + + "\btask_key\x18\x01 \x01(\tR\ataskKey\x12#\n" + + "\rsystem_prompt\x18\x02 \x01(\tR\fsystemPrompt\x12!\n" + + "\fuser_message\x18\x03 \x01(\tR\vuserMessage\"(\n" + + "\x12AiTextCallResponse\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\"\x95\x01\n" + + "\x15AiToolRegisterRequest\x12\x12\n" + + "\x04slug\x18\x01 \x01(\tR\x04slug\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12 \n" + + "\vdescription\x18\x03 \x01(\tR\vdescription\x122\n" + + "\x15parameter_schema_json\x18\x04 \x01(\fR\x13parameterSchemaJson\"\x18\n" + + "\x16AiToolRegisterResponse\"b\n" + + "\x1cBridgeRegisterServiceRequest\x12\x1f\n" + + "\vplugin_name\x18\x01 \x01(\tR\n" + + "pluginName\x12!\n" + + "\fservice_name\x18\x02 \x01(\tR\vserviceName\"\x1f\n" + + "\x1dBridgeRegisterServiceResponse\"]\n" + + "\x17BridgeGetServiceRequest\x12\x1f\n" + + "\vplugin_name\x18\x01 \x01(\tR\n" + + "pluginName\x12!\n" + + "\fservice_name\x18\x02 \x01(\tR\vserviceName\"8\n" + + "\x18BridgeGetServiceResponse\x12\x1c\n" + + "\tavailable\x18\x01 \x01(\bR\tavailable\"O\n" + + "\x11JobsSubmitRequest\x12\x19\n" + + "\bjob_type\x18\x01 \x01(\tR\ajobType\x12\x1f\n" + + "\vconfig_json\x18\x02 \x01(\fR\n" + + "configJson\"\x14\n" + + "\x12JobsSubmitResponse\"8\n" + + "\"EmbeddingsGenerateEmbeddingRequest\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\"C\n" + + "#EmbeddingsGenerateEmbeddingResponse\x12\x1c\n" + + "\tembedding\x18\x01 \x03(\x02R\tembedding\"q\n" + + "\x1dEmbeddingsEmbedContentRequest\x12\x1f\n" + + "\vsource_type\x18\x01 \x01(\tR\n" + + "sourceType\x12\x1b\n" + + "\tsource_id\x18\x02 \x01(\tR\bsourceId\x12\x12\n" + + "\x04text\x18\x03 \x01(\tR\x04text\"<\n" + + "\x1eEmbeddingsEmbedContentResponse\x12\x1a\n" + + "\bembedded\x18\x01 \x01(\bR\bembedded\"\x1e\n" + + "\x1cEmbeddingsIsAvailableRequest\"=\n" + + "\x1dEmbeddingsIsAvailableResponse\x12\x1c\n" + + "\tavailable\x18\x01 \x01(\bR\tavailable\"=\n" + + "\x0fRagQueryRequest\x12\x14\n" + + "\x05query\x18\x01 \x01(\tR\x05query\x12\x14\n" + + "\x05limit\x18\x02 \x01(\x05R\x05limit\"?\n" + + "\x10RagQueryResponse\x12+\n" + + "\aresults\x18\x01 \x03(\v2\x11.abi.v1.RagResultR\aresults\"\xb5\x01\n" + + "\tRagResult\x12\x18\n" + + "\acontent\x18\x01 \x01(\tR\acontent\x12\x14\n" + + "\x05score\x18\x02 \x01(\x01R\x05score\x12;\n" + + "\bmetadata\x18\x03 \x03(\v2\x1f.abi.v1.RagResult.MetadataEntryR\bmetadata\x1a;\n" + + "\rMetadataEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"^\n" + + "\x1aRagOnContentChangedRequest\x12!\n" + + "\fcontent_type\x18\x01 \x01(\tR\vcontentType\x12\x1d\n" + + "\n" + + "content_id\x18\x02 \x01(\tR\tcontentId\"\x1d\n" + + "\x1bRagOnContentChangedResponse\"\xd1\x01\n" + + "\x1aReviewsSubmitReviewRequest\x12\x19\n" + + "\btable_id\x18\x01 \x01(\tR\atableId\x12\x15\n" + + "\x06row_id\x18\x02 \x01(\tR\x05rowId\x12%\n" + + "\x0eoverall_rating\x18\x03 \x01(\x05R\roverallRating\x12\x1f\n" + + "\vreview_text\x18\x04 \x01(\tR\n" + + "reviewText\x12!\n" + + "\fratings_json\x18\x05 \x01(\fR\vratingsJson\x12\x16\n" + + "\x06photos\x18\x06 \x03(\tR\x06photos\":\n" + + "\x1bReviewsSubmitReviewResponse\x12\x1b\n" + + "\treview_id\x18\x01 \x01(\tR\breviewId\"N\n" + + "\x1aBadgesRefreshBadgesRequest\x12\x19\n" + + "\btable_id\x18\x01 \x01(\tR\atableId\x12\x15\n" + + "\x06row_id\x18\x02 \x01(\tR\x05rowId\"\x1d\n" + + "\x1bBadgesRefreshBadgesResponseB0Z.git.dev.alexdunmow.com/block/core/abi/v1;abiv1b\x06proto3" + +var ( + file_v1_capability_proto_rawDescOnce sync.Once + file_v1_capability_proto_rawDescData []byte +) + +func file_v1_capability_proto_rawDescGZIP() []byte { + file_v1_capability_proto_rawDescOnce.Do(func() { + file_v1_capability_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_v1_capability_proto_rawDesc), len(file_v1_capability_proto_rawDesc))) + }) + return file_v1_capability_proto_rawDescData +} + +var file_v1_capability_proto_msgTypes = make([]protoimpl.MessageInfo, 93) +var file_v1_capability_proto_goTypes = []any{ + (*HostCallRequest)(nil), // 0: abi.v1.HostCallRequest + (*HostCallResponse)(nil), // 1: abi.v1.HostCallResponse + (*ContentGetAuthorProfileRequest)(nil), // 2: abi.v1.ContentGetAuthorProfileRequest + (*ContentGetAuthorProfileResponse)(nil), // 3: abi.v1.ContentGetAuthorProfileResponse + (*AuthorProfile)(nil), // 4: abi.v1.AuthorProfile + (*ContentGetPageRequest)(nil), // 5: abi.v1.ContentGetPageRequest + (*ContentGetPageResponse)(nil), // 6: abi.v1.ContentGetPageResponse + (*PageInfo)(nil), // 7: abi.v1.PageInfo + (*ContentGetPostRequest)(nil), // 8: abi.v1.ContentGetPostRequest + (*ContentGetPostResponse)(nil), // 9: abi.v1.ContentGetPostResponse + (*PostInfo)(nil), // 10: abi.v1.PostInfo + (*ContentSlugifyRequest)(nil), // 11: abi.v1.ContentSlugifyRequest + (*ContentSlugifyResponse)(nil), // 12: abi.v1.ContentSlugifyResponse + (*ContentBlockNoteToHtmlRequest)(nil), // 13: abi.v1.ContentBlockNoteToHtmlRequest + (*ContentBlockNoteToHtmlResponse)(nil), // 14: abi.v1.ContentBlockNoteToHtmlResponse + (*ContentGenerateExcerptRequest)(nil), // 15: abi.v1.ContentGenerateExcerptRequest + (*ContentGenerateExcerptResponse)(nil), // 16: abi.v1.ContentGenerateExcerptResponse + (*ContentStripHtmlRequest)(nil), // 17: abi.v1.ContentStripHtmlRequest + (*ContentStripHtmlResponse)(nil), // 18: abi.v1.ContentStripHtmlResponse + (*SettingsGetSiteSettingsRequest)(nil), // 19: abi.v1.SettingsGetSiteSettingsRequest + (*SettingsGetSiteSettingsResponse)(nil), // 20: abi.v1.SettingsGetSiteSettingsResponse + (*SettingsGetPluginSettingsRequest)(nil), // 21: abi.v1.SettingsGetPluginSettingsRequest + (*SettingsGetPluginSettingsResponse)(nil), // 22: abi.v1.SettingsGetPluginSettingsResponse + (*SettingsUpdateSiteSettingRequest)(nil), // 23: abi.v1.SettingsUpdateSiteSettingRequest + (*SettingsUpdateSiteSettingResponse)(nil), // 24: abi.v1.SettingsUpdateSiteSettingResponse + (*GatingGetSubscriberTierLevelRequest)(nil), // 25: abi.v1.GatingGetSubscriberTierLevelRequest + (*GatingGetSubscriberTierLevelResponse)(nil), // 26: abi.v1.GatingGetSubscriberTierLevelResponse + (*GatingEvaluateAccessRequest)(nil), // 27: abi.v1.GatingEvaluateAccessRequest + (*GatingEvaluateAccessResponse)(nil), // 28: abi.v1.GatingEvaluateAccessResponse + (*AccessRule)(nil), // 29: abi.v1.AccessRule + (*AccessResult)(nil), // 30: abi.v1.AccessResult + (*CryptoEncryptSecretRequest)(nil), // 31: abi.v1.CryptoEncryptSecretRequest + (*CryptoEncryptSecretResponse)(nil), // 32: abi.v1.CryptoEncryptSecretResponse + (*CryptoDecryptSecretRequest)(nil), // 33: abi.v1.CryptoDecryptSecretRequest + (*CryptoDecryptSecretResponse)(nil), // 34: abi.v1.CryptoDecryptSecretResponse + (*MenusGetMenuByNameRequest)(nil), // 35: abi.v1.MenusGetMenuByNameRequest + (*MenusGetMenuByNameResponse)(nil), // 36: abi.v1.MenusGetMenuByNameResponse + (*Menu)(nil), // 37: abi.v1.Menu + (*MenusGetMenuItemsRequest)(nil), // 38: abi.v1.MenusGetMenuItemsRequest + (*MenusGetMenuItemsResponse)(nil), // 39: abi.v1.MenusGetMenuItemsResponse + (*MenuItem)(nil), // 40: abi.v1.MenuItem + (*DatasourcesResolveBucketRequest)(nil), // 41: abi.v1.DatasourcesResolveBucketRequest + (*DatasourcesResolveBucketResponse)(nil), // 42: abi.v1.DatasourcesResolveBucketResponse + (*DatasourcesResolveBucketByKeyRequest)(nil), // 43: abi.v1.DatasourcesResolveBucketByKeyRequest + (*DatasourcesResolveBucketByKeyResponse)(nil), // 44: abi.v1.DatasourcesResolveBucketByKeyResponse + (*DatasourceResult)(nil), // 45: abi.v1.DatasourceResult + (*UsersGetByUsernameRequest)(nil), // 46: abi.v1.UsersGetByUsernameRequest + (*UsersGetByUsernameResponse)(nil), // 47: abi.v1.UsersGetByUsernameResponse + (*UsersGetByIdRequest)(nil), // 48: abi.v1.UsersGetByIdRequest + (*UsersGetByIdResponse)(nil), // 49: abi.v1.UsersGetByIdResponse + (*PublicUserProfile)(nil), // 50: abi.v1.PublicUserProfile + (*SubscriptionsGetUserTierLevelRequest)(nil), // 51: abi.v1.SubscriptionsGetUserTierLevelRequest + (*SubscriptionsGetUserTierLevelResponse)(nil), // 52: abi.v1.SubscriptionsGetUserTierLevelResponse + (*TierLevel)(nil), // 53: abi.v1.TierLevel + (*SubscriptionsGetTierBySlugRequest)(nil), // 54: abi.v1.SubscriptionsGetTierBySlugRequest + (*SubscriptionsGetTierBySlugResponse)(nil), // 55: abi.v1.SubscriptionsGetTierBySlugResponse + (*Tier)(nil), // 56: abi.v1.Tier + (*SubscriptionsListTiersRequest)(nil), // 57: abi.v1.SubscriptionsListTiersRequest + (*SubscriptionsListTiersResponse)(nil), // 58: abi.v1.SubscriptionsListTiersResponse + (*SubscriptionsListActivePlansRequest)(nil), // 59: abi.v1.SubscriptionsListActivePlansRequest + (*SubscriptionsListActivePlansResponse)(nil), // 60: abi.v1.SubscriptionsListActivePlansResponse + (*Plan)(nil), // 61: abi.v1.Plan + (*MediaDepositRequest)(nil), // 62: abi.v1.MediaDepositRequest + (*MediaDepositResponse)(nil), // 63: abi.v1.MediaDepositResponse + (*EmailSendRequest)(nil), // 64: abi.v1.EmailSendRequest + (*EmailSendResponse)(nil), // 65: abi.v1.EmailSendResponse + (*AiTextCallRequest)(nil), // 66: abi.v1.AiTextCallRequest + (*AiTextCallResponse)(nil), // 67: abi.v1.AiTextCallResponse + (*AiToolRegisterRequest)(nil), // 68: abi.v1.AiToolRegisterRequest + (*AiToolRegisterResponse)(nil), // 69: abi.v1.AiToolRegisterResponse + (*BridgeRegisterServiceRequest)(nil), // 70: abi.v1.BridgeRegisterServiceRequest + (*BridgeRegisterServiceResponse)(nil), // 71: abi.v1.BridgeRegisterServiceResponse + (*BridgeGetServiceRequest)(nil), // 72: abi.v1.BridgeGetServiceRequest + (*BridgeGetServiceResponse)(nil), // 73: abi.v1.BridgeGetServiceResponse + (*JobsSubmitRequest)(nil), // 74: abi.v1.JobsSubmitRequest + (*JobsSubmitResponse)(nil), // 75: abi.v1.JobsSubmitResponse + (*EmbeddingsGenerateEmbeddingRequest)(nil), // 76: abi.v1.EmbeddingsGenerateEmbeddingRequest + (*EmbeddingsGenerateEmbeddingResponse)(nil), // 77: abi.v1.EmbeddingsGenerateEmbeddingResponse + (*EmbeddingsEmbedContentRequest)(nil), // 78: abi.v1.EmbeddingsEmbedContentRequest + (*EmbeddingsEmbedContentResponse)(nil), // 79: abi.v1.EmbeddingsEmbedContentResponse + (*EmbeddingsIsAvailableRequest)(nil), // 80: abi.v1.EmbeddingsIsAvailableRequest + (*EmbeddingsIsAvailableResponse)(nil), // 81: abi.v1.EmbeddingsIsAvailableResponse + (*RagQueryRequest)(nil), // 82: abi.v1.RagQueryRequest + (*RagQueryResponse)(nil), // 83: abi.v1.RagQueryResponse + (*RagResult)(nil), // 84: abi.v1.RagResult + (*RagOnContentChangedRequest)(nil), // 85: abi.v1.RagOnContentChangedRequest + (*RagOnContentChangedResponse)(nil), // 86: abi.v1.RagOnContentChangedResponse + (*ReviewsSubmitReviewRequest)(nil), // 87: abi.v1.ReviewsSubmitReviewRequest + (*ReviewsSubmitReviewResponse)(nil), // 88: abi.v1.ReviewsSubmitReviewResponse + (*BadgesRefreshBadgesRequest)(nil), // 89: abi.v1.BadgesRefreshBadgesRequest + (*BadgesRefreshBadgesResponse)(nil), // 90: abi.v1.BadgesRefreshBadgesResponse + nil, // 91: abi.v1.AuthorProfile.SocialLinksEntry + nil, // 92: abi.v1.RagResult.MetadataEntry + (*AbiError)(nil), // 93: abi.v1.AbiError + (*timestamppb.Timestamp)(nil), // 94: google.protobuf.Timestamp +} +var file_v1_capability_proto_depIdxs = []int32{ + 93, // 0: abi.v1.HostCallResponse.error:type_name -> abi.v1.AbiError + 4, // 1: abi.v1.ContentGetAuthorProfileResponse.author:type_name -> abi.v1.AuthorProfile + 91, // 2: abi.v1.AuthorProfile.social_links:type_name -> abi.v1.AuthorProfile.SocialLinksEntry + 7, // 3: abi.v1.ContentGetPageResponse.page:type_name -> abi.v1.PageInfo + 10, // 4: abi.v1.ContentGetPostResponse.post:type_name -> abi.v1.PostInfo + 29, // 5: abi.v1.GatingEvaluateAccessRequest.rule:type_name -> abi.v1.AccessRule + 30, // 6: abi.v1.GatingEvaluateAccessResponse.result:type_name -> abi.v1.AccessResult + 37, // 7: abi.v1.MenusGetMenuByNameResponse.menu:type_name -> abi.v1.Menu + 40, // 8: abi.v1.MenusGetMenuItemsResponse.items:type_name -> abi.v1.MenuItem + 45, // 9: abi.v1.DatasourcesResolveBucketResponse.result:type_name -> abi.v1.DatasourceResult + 45, // 10: abi.v1.DatasourcesResolveBucketByKeyResponse.result:type_name -> abi.v1.DatasourceResult + 50, // 11: abi.v1.UsersGetByUsernameResponse.user:type_name -> abi.v1.PublicUserProfile + 50, // 12: abi.v1.UsersGetByIdResponse.user:type_name -> abi.v1.PublicUserProfile + 53, // 13: abi.v1.SubscriptionsGetUserTierLevelResponse.tier_level:type_name -> abi.v1.TierLevel + 56, // 14: abi.v1.SubscriptionsGetTierBySlugResponse.tier:type_name -> abi.v1.Tier + 56, // 15: abi.v1.SubscriptionsListTiersResponse.tiers:type_name -> abi.v1.Tier + 61, // 16: abi.v1.SubscriptionsListActivePlansResponse.plans:type_name -> abi.v1.Plan + 94, // 17: abi.v1.Plan.created_at:type_name -> google.protobuf.Timestamp + 84, // 18: abi.v1.RagQueryResponse.results:type_name -> abi.v1.RagResult + 92, // 19: abi.v1.RagResult.metadata:type_name -> abi.v1.RagResult.MetadataEntry + 20, // [20:20] is the sub-list for method output_type + 20, // [20:20] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name +} + +func init() { file_v1_capability_proto_init() } +func file_v1_capability_proto_init() { + if File_v1_capability_proto != nil { + return + } + file_v1_invoke_proto_init() + file_v1_capability_proto_msgTypes[40].OneofWrappers = []any{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_v1_capability_proto_rawDesc), len(file_v1_capability_proto_rawDesc)), + NumEnums: 0, + NumMessages: 93, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_v1_capability_proto_goTypes, + DependencyIndexes: file_v1_capability_proto_depIdxs, + MessageInfos: file_v1_capability_proto_msgTypes, + }.Build() + File_v1_capability_proto = out.File + file_v1_capability_proto_goTypes = nil + file_v1_capability_proto_depIdxs = nil +} diff --git a/abi/v1/db.pb.go b/abi/v1/db.pb.go new file mode 100644 index 0000000..273b53d --- /dev/null +++ b/abi/v1/db.pb.go @@ -0,0 +1,1056 @@ +// db.proto — DB driver messages (WO-WZ-001). +// +// The guest SDK ships a database/sql driver that marshals query text + args +// out through these messages and rows back, so sqlc-generated plugin code +// works unchanged. The host executes on a connection under the per-plugin +// Postgres role. Transactions map to a host-side handle held per guest call +// chain, with a hard deadline so a guest can never pin a connection. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc (unknown) +// source: v1/db.proto + +package abiv1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// DbValue is one pgx-mappable parameter or column value. +type DbValue struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Kind: + // + // *DbValue_Null + // *DbValue_BoolValue + // *DbValue_Int64Value + // *DbValue_Float64Value + // *DbValue_StringValue + // *DbValue_BytesValue + // *DbValue_TimestampValue + // *DbValue_UuidValue + // *DbValue_JsonbValue + // *DbValue_NumericValue + // *DbValue_TextArrayValue + Kind isDbValue_Kind `protobuf_oneof:"kind"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbValue) Reset() { + *x = DbValue{} + mi := &file_v1_db_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbValue) ProtoMessage() {} + +func (x *DbValue) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbValue.ProtoReflect.Descriptor instead. +func (*DbValue) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{0} +} + +func (x *DbValue) GetKind() isDbValue_Kind { + if x != nil { + return x.Kind + } + return nil +} + +func (x *DbValue) GetNull() bool { + if x != nil { + if x, ok := x.Kind.(*DbValue_Null); ok { + return x.Null + } + } + return false +} + +func (x *DbValue) GetBoolValue() bool { + if x != nil { + if x, ok := x.Kind.(*DbValue_BoolValue); ok { + return x.BoolValue + } + } + return false +} + +func (x *DbValue) GetInt64Value() int64 { + if x != nil { + if x, ok := x.Kind.(*DbValue_Int64Value); ok { + return x.Int64Value + } + } + return 0 +} + +func (x *DbValue) GetFloat64Value() float64 { + if x != nil { + if x, ok := x.Kind.(*DbValue_Float64Value); ok { + return x.Float64Value + } + } + return 0 +} + +func (x *DbValue) GetStringValue() string { + if x != nil { + if x, ok := x.Kind.(*DbValue_StringValue); ok { + return x.StringValue + } + } + return "" +} + +func (x *DbValue) GetBytesValue() []byte { + if x != nil { + if x, ok := x.Kind.(*DbValue_BytesValue); ok { + return x.BytesValue + } + } + return nil +} + +func (x *DbValue) GetTimestampValue() *timestamppb.Timestamp { + if x != nil { + if x, ok := x.Kind.(*DbValue_TimestampValue); ok { + return x.TimestampValue + } + } + return nil +} + +func (x *DbValue) GetUuidValue() string { + if x != nil { + if x, ok := x.Kind.(*DbValue_UuidValue); ok { + return x.UuidValue + } + } + return "" +} + +func (x *DbValue) GetJsonbValue() []byte { + if x != nil { + if x, ok := x.Kind.(*DbValue_JsonbValue); ok { + return x.JsonbValue + } + } + return nil +} + +func (x *DbValue) GetNumericValue() string { + if x != nil { + if x, ok := x.Kind.(*DbValue_NumericValue); ok { + return x.NumericValue + } + } + return "" +} + +func (x *DbValue) GetTextArrayValue() *TextArray { + if x != nil { + if x, ok := x.Kind.(*DbValue_TextArrayValue); ok { + return x.TextArrayValue + } + } + return nil +} + +type isDbValue_Kind interface { + isDbValue_Kind() +} + +type DbValue_Null struct { + // SQL NULL (the bool carries no information; true by convention). + Null bool `protobuf:"varint,1,opt,name=null,proto3,oneof"` +} + +type DbValue_BoolValue struct { + BoolValue bool `protobuf:"varint,2,opt,name=bool_value,json=boolValue,proto3,oneof"` +} + +type DbValue_Int64Value struct { + Int64Value int64 `protobuf:"varint,3,opt,name=int64_value,json=int64Value,proto3,oneof"` +} + +type DbValue_Float64Value struct { + Float64Value float64 `protobuf:"fixed64,4,opt,name=float64_value,json=float64Value,proto3,oneof"` +} + +type DbValue_StringValue struct { + StringValue string `protobuf:"bytes,5,opt,name=string_value,json=stringValue,proto3,oneof"` +} + +type DbValue_BytesValue struct { + BytesValue []byte `protobuf:"bytes,6,opt,name=bytes_value,json=bytesValue,proto3,oneof"` +} + +type DbValue_TimestampValue struct { + TimestampValue *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=timestamp_value,json=timestampValue,proto3,oneof"` +} + +type DbValue_UuidValue struct { + // UUID in canonical string form. + UuidValue string `protobuf:"bytes,8,opt,name=uuid_value,json=uuidValue,proto3,oneof"` +} + +type DbValue_JsonbValue struct { + // JSON/JSONB payload bytes. + JsonbValue []byte `protobuf:"bytes,9,opt,name=jsonb_value,json=jsonbValue,proto3,oneof"` +} + +type DbValue_NumericValue struct { + // NUMERIC in decimal string form (lossless). + NumericValue string `protobuf:"bytes,10,opt,name=numeric_value,json=numericValue,proto3,oneof"` +} + +type DbValue_TextArrayValue struct { + // text[] array. + TextArrayValue *TextArray `protobuf:"bytes,11,opt,name=text_array_value,json=textArrayValue,proto3,oneof"` +} + +func (*DbValue_Null) isDbValue_Kind() {} + +func (*DbValue_BoolValue) isDbValue_Kind() {} + +func (*DbValue_Int64Value) isDbValue_Kind() {} + +func (*DbValue_Float64Value) isDbValue_Kind() {} + +func (*DbValue_StringValue) isDbValue_Kind() {} + +func (*DbValue_BytesValue) isDbValue_Kind() {} + +func (*DbValue_TimestampValue) isDbValue_Kind() {} + +func (*DbValue_UuidValue) isDbValue_Kind() {} + +func (*DbValue_JsonbValue) isDbValue_Kind() {} + +func (*DbValue_NumericValue) isDbValue_Kind() {} + +func (*DbValue_TextArrayValue) isDbValue_Kind() {} + +// TextArray is a Postgres text[] value. +type TextArray struct { + state protoimpl.MessageState `protogen:"open.v1"` + Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TextArray) Reset() { + *x = TextArray{} + mi := &file_v1_db_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TextArray) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TextArray) ProtoMessage() {} + +func (x *TextArray) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TextArray.ProtoReflect.Descriptor instead. +func (*TextArray) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{1} +} + +func (x *TextArray) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +// DbRow is one result row; values align with DbRowsResponse.columns. +type DbRow struct { + state protoimpl.MessageState `protogen:"open.v1"` + Values []*DbValue `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbRow) Reset() { + *x = DbRow{} + mi := &file_v1_db_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbRow) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbRow) ProtoMessage() {} + +func (x *DbRow) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbRow.ProtoReflect.Descriptor instead. +func (*DbRow) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{2} +} + +func (x *DbRow) GetValues() []*DbValue { + if x != nil { + return x.Values + } + return nil +} + +// DbError carries a database failure back to the guest driver. +type DbError struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Postgres SQLSTATE when available (e.g. "23505"); empty otherwise. + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbError) Reset() { + *x = DbError{} + mi := &file_v1_db_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbError) ProtoMessage() {} + +func (x *DbError) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbError.ProtoReflect.Descriptor instead. +func (*DbError) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{3} +} + +func (x *DbError) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *DbError) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +// DbQueryRequest executes a rows-returning statement. +type DbQueryRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Sql string `protobuf:"bytes,1,opt,name=sql,proto3" json:"sql,omitempty"` + Args []*DbValue `protobuf:"bytes,2,rep,name=args,proto3" json:"args,omitempty"` + // Transaction handle from DbTxBeginResponse; 0 = no transaction + // (autocommit). + TxHandle uint64 `protobuf:"varint,3,opt,name=tx_handle,json=txHandle,proto3" json:"tx_handle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbQueryRequest) Reset() { + *x = DbQueryRequest{} + mi := &file_v1_db_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbQueryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbQueryRequest) ProtoMessage() {} + +func (x *DbQueryRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbQueryRequest.ProtoReflect.Descriptor instead. +func (*DbQueryRequest) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{4} +} + +func (x *DbQueryRequest) GetSql() string { + if x != nil { + return x.Sql + } + return "" +} + +func (x *DbQueryRequest) GetArgs() []*DbValue { + if x != nil { + return x.Args + } + return nil +} + +func (x *DbQueryRequest) GetTxHandle() uint64 { + if x != nil { + return x.TxHandle + } + return 0 +} + +// DbRowsResponse returns the full buffered result set. +type DbRowsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Columns []string `protobuf:"bytes,1,rep,name=columns,proto3" json:"columns,omitempty"` + Rows []*DbRow `protobuf:"bytes,2,rep,name=rows,proto3" json:"rows,omitempty"` + Error *DbError `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbRowsResponse) Reset() { + *x = DbRowsResponse{} + mi := &file_v1_db_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbRowsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbRowsResponse) ProtoMessage() {} + +func (x *DbRowsResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbRowsResponse.ProtoReflect.Descriptor instead. +func (*DbRowsResponse) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{5} +} + +func (x *DbRowsResponse) GetColumns() []string { + if x != nil { + return x.Columns + } + return nil +} + +func (x *DbRowsResponse) GetRows() []*DbRow { + if x != nil { + return x.Rows + } + return nil +} + +func (x *DbRowsResponse) GetError() *DbError { + if x != nil { + return x.Error + } + return nil +} + +// DbExecRequest executes a statement without returning rows. +type DbExecRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Sql string `protobuf:"bytes,1,opt,name=sql,proto3" json:"sql,omitempty"` + Args []*DbValue `protobuf:"bytes,2,rep,name=args,proto3" json:"args,omitempty"` + // Transaction handle from DbTxBeginResponse; 0 = no transaction. + TxHandle uint64 `protobuf:"varint,3,opt,name=tx_handle,json=txHandle,proto3" json:"tx_handle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbExecRequest) Reset() { + *x = DbExecRequest{} + mi := &file_v1_db_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbExecRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbExecRequest) ProtoMessage() {} + +func (x *DbExecRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbExecRequest.ProtoReflect.Descriptor instead. +func (*DbExecRequest) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{6} +} + +func (x *DbExecRequest) GetSql() string { + if x != nil { + return x.Sql + } + return "" +} + +func (x *DbExecRequest) GetArgs() []*DbValue { + if x != nil { + return x.Args + } + return nil +} + +func (x *DbExecRequest) GetTxHandle() uint64 { + if x != nil { + return x.TxHandle + } + return 0 +} + +type DbExecResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + RowsAffected int64 `protobuf:"varint,1,opt,name=rows_affected,json=rowsAffected,proto3" json:"rows_affected,omitempty"` + Error *DbError `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbExecResponse) Reset() { + *x = DbExecResponse{} + mi := &file_v1_db_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbExecResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbExecResponse) ProtoMessage() {} + +func (x *DbExecResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbExecResponse.ProtoReflect.Descriptor instead. +func (*DbExecResponse) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{7} +} + +func (x *DbExecResponse) GetRowsAffected() int64 { + if x != nil { + return x.RowsAffected + } + return 0 +} + +func (x *DbExecResponse) GetError() *DbError { + if x != nil { + return x.Error + } + return nil +} + +// DbTxBeginRequest opens a host-side transaction for this call chain. +type DbTxBeginRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbTxBeginRequest) Reset() { + *x = DbTxBeginRequest{} + mi := &file_v1_db_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbTxBeginRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbTxBeginRequest) ProtoMessage() {} + +func (x *DbTxBeginRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbTxBeginRequest.ProtoReflect.Descriptor instead. +func (*DbTxBeginRequest) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{8} +} + +type DbTxBeginResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Opaque handle referencing the host-side transaction; never 0 on success. + TxHandle uint64 `protobuf:"varint,1,opt,name=tx_handle,json=txHandle,proto3" json:"tx_handle,omitempty"` + Error *DbError `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbTxBeginResponse) Reset() { + *x = DbTxBeginResponse{} + mi := &file_v1_db_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbTxBeginResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbTxBeginResponse) ProtoMessage() {} + +func (x *DbTxBeginResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbTxBeginResponse.ProtoReflect.Descriptor instead. +func (*DbTxBeginResponse) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{9} +} + +func (x *DbTxBeginResponse) GetTxHandle() uint64 { + if x != nil { + return x.TxHandle + } + return 0 +} + +func (x *DbTxBeginResponse) GetError() *DbError { + if x != nil { + return x.Error + } + return nil +} + +type DbTxCommitRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TxHandle uint64 `protobuf:"varint,1,opt,name=tx_handle,json=txHandle,proto3" json:"tx_handle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbTxCommitRequest) Reset() { + *x = DbTxCommitRequest{} + mi := &file_v1_db_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbTxCommitRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbTxCommitRequest) ProtoMessage() {} + +func (x *DbTxCommitRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbTxCommitRequest.ProtoReflect.Descriptor instead. +func (*DbTxCommitRequest) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{10} +} + +func (x *DbTxCommitRequest) GetTxHandle() uint64 { + if x != nil { + return x.TxHandle + } + return 0 +} + +type DbTxCommitResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Error *DbError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbTxCommitResponse) Reset() { + *x = DbTxCommitResponse{} + mi := &file_v1_db_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbTxCommitResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbTxCommitResponse) ProtoMessage() {} + +func (x *DbTxCommitResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbTxCommitResponse.ProtoReflect.Descriptor instead. +func (*DbTxCommitResponse) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{11} +} + +func (x *DbTxCommitResponse) GetError() *DbError { + if x != nil { + return x.Error + } + return nil +} + +type DbTxRollbackRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TxHandle uint64 `protobuf:"varint,1,opt,name=tx_handle,json=txHandle,proto3" json:"tx_handle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbTxRollbackRequest) Reset() { + *x = DbTxRollbackRequest{} + mi := &file_v1_db_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbTxRollbackRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbTxRollbackRequest) ProtoMessage() {} + +func (x *DbTxRollbackRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbTxRollbackRequest.ProtoReflect.Descriptor instead. +func (*DbTxRollbackRequest) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{12} +} + +func (x *DbTxRollbackRequest) GetTxHandle() uint64 { + if x != nil { + return x.TxHandle + } + return 0 +} + +type DbTxRollbackResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Error *DbError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DbTxRollbackResponse) Reset() { + *x = DbTxRollbackResponse{} + mi := &file_v1_db_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DbTxRollbackResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DbTxRollbackResponse) ProtoMessage() {} + +func (x *DbTxRollbackResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_db_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DbTxRollbackResponse.ProtoReflect.Descriptor instead. +func (*DbTxRollbackResponse) Descriptor() ([]byte, []int) { + return file_v1_db_proto_rawDescGZIP(), []int{13} +} + +func (x *DbTxRollbackResponse) GetError() *DbError { + if x != nil { + return x.Error + } + return nil +} + +var File_v1_db_proto protoreflect.FileDescriptor + +const file_v1_db_proto_rawDesc = "" + + "\n" + + "\vv1/db.proto\x12\x06abi.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"\xcb\x03\n" + + "\aDbValue\x12\x14\n" + + "\x04null\x18\x01 \x01(\bH\x00R\x04null\x12\x1f\n" + + "\n" + + "bool_value\x18\x02 \x01(\bH\x00R\tboolValue\x12!\n" + + "\vint64_value\x18\x03 \x01(\x03H\x00R\n" + + "int64Value\x12%\n" + + "\rfloat64_value\x18\x04 \x01(\x01H\x00R\ffloat64Value\x12#\n" + + "\fstring_value\x18\x05 \x01(\tH\x00R\vstringValue\x12!\n" + + "\vbytes_value\x18\x06 \x01(\fH\x00R\n" + + "bytesValue\x12E\n" + + "\x0ftimestamp_value\x18\a \x01(\v2\x1a.google.protobuf.TimestampH\x00R\x0etimestampValue\x12\x1f\n" + + "\n" + + "uuid_value\x18\b \x01(\tH\x00R\tuuidValue\x12!\n" + + "\vjsonb_value\x18\t \x01(\fH\x00R\n" + + "jsonbValue\x12%\n" + + "\rnumeric_value\x18\n" + + " \x01(\tH\x00R\fnumericValue\x12=\n" + + "\x10text_array_value\x18\v \x01(\v2\x11.abi.v1.TextArrayH\x00R\x0etextArrayValueB\x06\n" + + "\x04kind\"#\n" + + "\tTextArray\x12\x16\n" + + "\x06values\x18\x01 \x03(\tR\x06values\"0\n" + + "\x05DbRow\x12'\n" + + "\x06values\x18\x01 \x03(\v2\x0f.abi.v1.DbValueR\x06values\"7\n" + + "\aDbError\x12\x12\n" + + "\x04code\x18\x01 \x01(\tR\x04code\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage\"d\n" + + "\x0eDbQueryRequest\x12\x10\n" + + "\x03sql\x18\x01 \x01(\tR\x03sql\x12#\n" + + "\x04args\x18\x02 \x03(\v2\x0f.abi.v1.DbValueR\x04args\x12\x1b\n" + + "\ttx_handle\x18\x03 \x01(\x04R\btxHandle\"t\n" + + "\x0eDbRowsResponse\x12\x18\n" + + "\acolumns\x18\x01 \x03(\tR\acolumns\x12!\n" + + "\x04rows\x18\x02 \x03(\v2\r.abi.v1.DbRowR\x04rows\x12%\n" + + "\x05error\x18\x03 \x01(\v2\x0f.abi.v1.DbErrorR\x05error\"c\n" + + "\rDbExecRequest\x12\x10\n" + + "\x03sql\x18\x01 \x01(\tR\x03sql\x12#\n" + + "\x04args\x18\x02 \x03(\v2\x0f.abi.v1.DbValueR\x04args\x12\x1b\n" + + "\ttx_handle\x18\x03 \x01(\x04R\btxHandle\"\\\n" + + "\x0eDbExecResponse\x12#\n" + + "\rrows_affected\x18\x01 \x01(\x03R\frowsAffected\x12%\n" + + "\x05error\x18\x02 \x01(\v2\x0f.abi.v1.DbErrorR\x05error\"\x12\n" + + "\x10DbTxBeginRequest\"W\n" + + "\x11DbTxBeginResponse\x12\x1b\n" + + "\ttx_handle\x18\x01 \x01(\x04R\btxHandle\x12%\n" + + "\x05error\x18\x02 \x01(\v2\x0f.abi.v1.DbErrorR\x05error\"0\n" + + "\x11DbTxCommitRequest\x12\x1b\n" + + "\ttx_handle\x18\x01 \x01(\x04R\btxHandle\";\n" + + "\x12DbTxCommitResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.abi.v1.DbErrorR\x05error\"2\n" + + "\x13DbTxRollbackRequest\x12\x1b\n" + + "\ttx_handle\x18\x01 \x01(\x04R\btxHandle\"=\n" + + "\x14DbTxRollbackResponse\x12%\n" + + "\x05error\x18\x01 \x01(\v2\x0f.abi.v1.DbErrorR\x05errorB0Z.git.dev.alexdunmow.com/block/core/abi/v1;abiv1b\x06proto3" + +var ( + file_v1_db_proto_rawDescOnce sync.Once + file_v1_db_proto_rawDescData []byte +) + +func file_v1_db_proto_rawDescGZIP() []byte { + file_v1_db_proto_rawDescOnce.Do(func() { + file_v1_db_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_v1_db_proto_rawDesc), len(file_v1_db_proto_rawDesc))) + }) + return file_v1_db_proto_rawDescData +} + +var file_v1_db_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_v1_db_proto_goTypes = []any{ + (*DbValue)(nil), // 0: abi.v1.DbValue + (*TextArray)(nil), // 1: abi.v1.TextArray + (*DbRow)(nil), // 2: abi.v1.DbRow + (*DbError)(nil), // 3: abi.v1.DbError + (*DbQueryRequest)(nil), // 4: abi.v1.DbQueryRequest + (*DbRowsResponse)(nil), // 5: abi.v1.DbRowsResponse + (*DbExecRequest)(nil), // 6: abi.v1.DbExecRequest + (*DbExecResponse)(nil), // 7: abi.v1.DbExecResponse + (*DbTxBeginRequest)(nil), // 8: abi.v1.DbTxBeginRequest + (*DbTxBeginResponse)(nil), // 9: abi.v1.DbTxBeginResponse + (*DbTxCommitRequest)(nil), // 10: abi.v1.DbTxCommitRequest + (*DbTxCommitResponse)(nil), // 11: abi.v1.DbTxCommitResponse + (*DbTxRollbackRequest)(nil), // 12: abi.v1.DbTxRollbackRequest + (*DbTxRollbackResponse)(nil), // 13: abi.v1.DbTxRollbackResponse + (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp +} +var file_v1_db_proto_depIdxs = []int32{ + 14, // 0: abi.v1.DbValue.timestamp_value:type_name -> google.protobuf.Timestamp + 1, // 1: abi.v1.DbValue.text_array_value:type_name -> abi.v1.TextArray + 0, // 2: abi.v1.DbRow.values:type_name -> abi.v1.DbValue + 0, // 3: abi.v1.DbQueryRequest.args:type_name -> abi.v1.DbValue + 2, // 4: abi.v1.DbRowsResponse.rows:type_name -> abi.v1.DbRow + 3, // 5: abi.v1.DbRowsResponse.error:type_name -> abi.v1.DbError + 0, // 6: abi.v1.DbExecRequest.args:type_name -> abi.v1.DbValue + 3, // 7: abi.v1.DbExecResponse.error:type_name -> abi.v1.DbError + 3, // 8: abi.v1.DbTxBeginResponse.error:type_name -> abi.v1.DbError + 3, // 9: abi.v1.DbTxCommitResponse.error:type_name -> abi.v1.DbError + 3, // 10: abi.v1.DbTxRollbackResponse.error:type_name -> abi.v1.DbError + 11, // [11:11] is the sub-list for method output_type + 11, // [11:11] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name +} + +func init() { file_v1_db_proto_init() } +func file_v1_db_proto_init() { + if File_v1_db_proto != nil { + return + } + file_v1_db_proto_msgTypes[0].OneofWrappers = []any{ + (*DbValue_Null)(nil), + (*DbValue_BoolValue)(nil), + (*DbValue_Int64Value)(nil), + (*DbValue_Float64Value)(nil), + (*DbValue_StringValue)(nil), + (*DbValue_BytesValue)(nil), + (*DbValue_TimestampValue)(nil), + (*DbValue_UuidValue)(nil), + (*DbValue_JsonbValue)(nil), + (*DbValue_NumericValue)(nil), + (*DbValue_TextArrayValue)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_v1_db_proto_rawDesc), len(file_v1_db_proto_rawDesc)), + NumEnums: 0, + NumMessages: 14, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_v1_db_proto_goTypes, + DependencyIndexes: file_v1_db_proto_depIdxs, + MessageInfos: file_v1_db_proto_msgTypes, + }.Build() + File_v1_db_proto = out.File + file_v1_db_proto_goTypes = nil + file_v1_db_proto_depIdxs = nil +} diff --git a/abi/v1/http.pb.go b/abi/v1/http.pb.go new file mode 100644 index 0000000..5acc923 --- /dev/null +++ b/abi/v1/http.pb.go @@ -0,0 +1,296 @@ +// http.proto — buffered HTTP request/response payloads for the HANDLE_HTTP +// hook (WO-WZ-001). +// +// v1 buffers full bodies: no streaming, SSE, or WebSockets inside plugins +// (per the wasm migration design spec §5). The guest runs its real +// chi/connect mux internally and answers one HttpRequest with one +// HttpResponse. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc (unknown) +// source: v1/http.proto + +package abiv1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// HttpRequest is a fully buffered HTTP request forwarded to the guest mux. +type HttpRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Method string `protobuf:"bytes,1,opt,name=method,proto3" json:"method,omitempty"` + // Request path (no scheme/host/query). + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + // Raw query string (without the leading '?'). + RawQuery string `protobuf:"bytes,3,opt,name=raw_query,json=rawQuery,proto3" json:"raw_query,omitempty"` + // Canonical header name → values. + Headers map[string]*HeaderValues `protobuf:"bytes,4,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Body []byte `protobuf:"bytes,5,opt,name=body,proto3" json:"body,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HttpRequest) Reset() { + *x = HttpRequest{} + mi := &file_v1_http_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HttpRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HttpRequest) ProtoMessage() {} + +func (x *HttpRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_http_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HttpRequest.ProtoReflect.Descriptor instead. +func (*HttpRequest) Descriptor() ([]byte, []int) { + return file_v1_http_proto_rawDescGZIP(), []int{0} +} + +func (x *HttpRequest) GetMethod() string { + if x != nil { + return x.Method + } + return "" +} + +func (x *HttpRequest) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *HttpRequest) GetRawQuery() string { + if x != nil { + return x.RawQuery + } + return "" +} + +func (x *HttpRequest) GetHeaders() map[string]*HeaderValues { + if x != nil { + return x.Headers + } + return nil +} + +func (x *HttpRequest) GetBody() []byte { + if x != nil { + return x.Body + } + return nil +} + +// HeaderValues holds the values of one multi-valued HTTP header. +type HeaderValues struct { + state protoimpl.MessageState `protogen:"open.v1"` + Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HeaderValues) Reset() { + *x = HeaderValues{} + mi := &file_v1_http_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HeaderValues) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HeaderValues) ProtoMessage() {} + +func (x *HeaderValues) ProtoReflect() protoreflect.Message { + mi := &file_v1_http_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HeaderValues.ProtoReflect.Descriptor instead. +func (*HeaderValues) Descriptor() ([]byte, []int) { + return file_v1_http_proto_rawDescGZIP(), []int{1} +} + +func (x *HeaderValues) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +// HttpResponse is the guest's fully buffered response. +type HttpResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Status int32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` + Headers map[string]*HeaderValues `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Body []byte `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HttpResponse) Reset() { + *x = HttpResponse{} + mi := &file_v1_http_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HttpResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HttpResponse) ProtoMessage() {} + +func (x *HttpResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_http_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HttpResponse.ProtoReflect.Descriptor instead. +func (*HttpResponse) Descriptor() ([]byte, []int) { + return file_v1_http_proto_rawDescGZIP(), []int{2} +} + +func (x *HttpResponse) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *HttpResponse) GetHeaders() map[string]*HeaderValues { + if x != nil { + return x.Headers + } + return nil +} + +func (x *HttpResponse) GetBody() []byte { + if x != nil { + return x.Body + } + return nil +} + +var File_v1_http_proto protoreflect.FileDescriptor + +const file_v1_http_proto_rawDesc = "" + + "\n" + + "\rv1/http.proto\x12\x06abi.v1\"\xf8\x01\n" + + "\vHttpRequest\x12\x16\n" + + "\x06method\x18\x01 \x01(\tR\x06method\x12\x12\n" + + "\x04path\x18\x02 \x01(\tR\x04path\x12\x1b\n" + + "\traw_query\x18\x03 \x01(\tR\brawQuery\x12:\n" + + "\aheaders\x18\x04 \x03(\v2 .abi.v1.HttpRequest.HeadersEntryR\aheaders\x12\x12\n" + + "\x04body\x18\x05 \x01(\fR\x04body\x1aP\n" + + "\fHeadersEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12*\n" + + "\x05value\x18\x02 \x01(\v2\x14.abi.v1.HeaderValuesR\x05value:\x028\x01\"&\n" + + "\fHeaderValues\x12\x16\n" + + "\x06values\x18\x01 \x03(\tR\x06values\"\xc9\x01\n" + + "\fHttpResponse\x12\x16\n" + + "\x06status\x18\x01 \x01(\x05R\x06status\x12;\n" + + "\aheaders\x18\x02 \x03(\v2!.abi.v1.HttpResponse.HeadersEntryR\aheaders\x12\x12\n" + + "\x04body\x18\x03 \x01(\fR\x04body\x1aP\n" + + "\fHeadersEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12*\n" + + "\x05value\x18\x02 \x01(\v2\x14.abi.v1.HeaderValuesR\x05value:\x028\x01B0Z.git.dev.alexdunmow.com/block/core/abi/v1;abiv1b\x06proto3" + +var ( + file_v1_http_proto_rawDescOnce sync.Once + file_v1_http_proto_rawDescData []byte +) + +func file_v1_http_proto_rawDescGZIP() []byte { + file_v1_http_proto_rawDescOnce.Do(func() { + file_v1_http_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_v1_http_proto_rawDesc), len(file_v1_http_proto_rawDesc))) + }) + return file_v1_http_proto_rawDescData +} + +var file_v1_http_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_v1_http_proto_goTypes = []any{ + (*HttpRequest)(nil), // 0: abi.v1.HttpRequest + (*HeaderValues)(nil), // 1: abi.v1.HeaderValues + (*HttpResponse)(nil), // 2: abi.v1.HttpResponse + nil, // 3: abi.v1.HttpRequest.HeadersEntry + nil, // 4: abi.v1.HttpResponse.HeadersEntry +} +var file_v1_http_proto_depIdxs = []int32{ + 3, // 0: abi.v1.HttpRequest.headers:type_name -> abi.v1.HttpRequest.HeadersEntry + 4, // 1: abi.v1.HttpResponse.headers:type_name -> abi.v1.HttpResponse.HeadersEntry + 1, // 2: abi.v1.HttpRequest.HeadersEntry.value:type_name -> abi.v1.HeaderValues + 1, // 3: abi.v1.HttpResponse.HeadersEntry.value:type_name -> abi.v1.HeaderValues + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_v1_http_proto_init() } +func file_v1_http_proto_init() { + if File_v1_http_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_v1_http_proto_rawDesc), len(file_v1_http_proto_rawDesc)), + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_v1_http_proto_goTypes, + DependencyIndexes: file_v1_http_proto_depIdxs, + MessageInfos: file_v1_http_proto_msgTypes, + }.Build() + File_v1_http_proto = out.File + file_v1_http_proto_goTypes = nil + file_v1_http_proto_depIdxs = nil +} diff --git a/abi/v1/invoke.pb.go b/abi/v1/invoke.pb.go new file mode 100644 index 0000000..2b2297f --- /dev/null +++ b/abi/v1/invoke.pb.go @@ -0,0 +1,1385 @@ +// invoke.proto — the bn_invoke envelope, hook catalog, and the job/lifecycle +// hook payloads (WO-WZ-001). +// +// Every host→guest call crosses the wasm boundary as one guest export: +// +// bn_invoke(hook_id, ptr, len) → packed(ptr, len) +// +// where (ptr, len) frames a serialized InvokeRequest and the packed return +// frames a serialized InvokeResponse. Hook-specific payloads (render.proto, +// http.proto, and the messages below) travel inside InvokeRequest.payload / +// InvokeResponse.payload. See core/docs/wasm-abi.md. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc (unknown) +// source: v1/invoke.proto + +package abiv1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Hook identifies the guest entry point being invoked. +type Hook int32 + +const ( + Hook_HOOK_UNSPECIFIED Hook = 0 + // Render one block: payload = RenderBlockRequest / RenderBlockResponse. + Hook_HOOK_RENDER_BLOCK Hook = 1 + // Render one template: payload = RenderTemplateRequest / RenderTemplateResponse. + Hook_HOOK_RENDER_TEMPLATE Hook = 2 + // Forward a buffered HTTP request to the guest's mux: + // payload = HttpRequest / HttpResponse. + Hook_HOOK_HANDLE_HTTP Hook = 3 + // Run a background job handler: payload = JobRequest / JobResponse. + Hook_HOOK_JOB Hook = 4 + // Plugin load lifecycle: payload = LoadRequest / LoadResponse. + Hook_HOOK_LOAD Hook = 5 + // Plugin unload lifecycle: payload = UnloadRequest / UnloadResponse. + Hook_HOOK_UNLOAD Hook = 6 + // Re-fetch content for RAG re-indexing: + // payload = RagFetchRequest / RagFetchResponse. + Hook_HOOK_RAG_FETCH Hook = 7 + // Media lifecycle event delivery: payload = MediaHookRequest / MediaHookResponse. + Hook_HOOK_MEDIA_HOOK Hook = 8 + // Capture the static manifest at publish time: + // payload = DescribeRequest / DescribeResponse. + Hook_HOOK_DESCRIBE Hook = 9 +) + +// Enum value maps for Hook. +var ( + Hook_name = map[int32]string{ + 0: "HOOK_UNSPECIFIED", + 1: "HOOK_RENDER_BLOCK", + 2: "HOOK_RENDER_TEMPLATE", + 3: "HOOK_HANDLE_HTTP", + 4: "HOOK_JOB", + 5: "HOOK_LOAD", + 6: "HOOK_UNLOAD", + 7: "HOOK_RAG_FETCH", + 8: "HOOK_MEDIA_HOOK", + 9: "HOOK_DESCRIBE", + } + Hook_value = map[string]int32{ + "HOOK_UNSPECIFIED": 0, + "HOOK_RENDER_BLOCK": 1, + "HOOK_RENDER_TEMPLATE": 2, + "HOOK_HANDLE_HTTP": 3, + "HOOK_JOB": 4, + "HOOK_LOAD": 5, + "HOOK_UNLOAD": 6, + "HOOK_RAG_FETCH": 7, + "HOOK_MEDIA_HOOK": 8, + "HOOK_DESCRIBE": 9, + } +) + +func (x Hook) Enum() *Hook { + p := new(Hook) + *p = x + return p +} + +func (x Hook) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Hook) Descriptor() protoreflect.EnumDescriptor { + return file_v1_invoke_proto_enumTypes[0].Descriptor() +} + +func (Hook) Type() protoreflect.EnumType { + return &file_v1_invoke_proto_enumTypes[0] +} + +func (x Hook) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Hook.Descriptor instead. +func (Hook) EnumDescriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{0} +} + +// AbiErrorCode classifies boundary-crossing failures. +type AbiErrorCode int32 + +const ( + AbiErrorCode_ABI_ERROR_CODE_UNSPECIFIED AbiErrorCode = 0 + // The handler ran and failed; message carries the Go error text. + AbiErrorCode_ABI_ERROR_CODE_INTERNAL AbiErrorCode = 1 + // The payload could not be decoded. + AbiErrorCode_ABI_ERROR_CODE_DECODE AbiErrorCode = 2 + // The hook/capability is not implemented by the callee. + AbiErrorCode_ABI_ERROR_CODE_UNIMPLEMENTED AbiErrorCode = 3 + // The call exceeded its deadline; the instance is considered poisoned. + AbiErrorCode_ABI_ERROR_CODE_DEADLINE_EXCEEDED AbiErrorCode = 4 + // The caller is not entitled to this capability. + AbiErrorCode_ABI_ERROR_CODE_PERMISSION_DENIED AbiErrorCode = 5 +) + +// Enum value maps for AbiErrorCode. +var ( + AbiErrorCode_name = map[int32]string{ + 0: "ABI_ERROR_CODE_UNSPECIFIED", + 1: "ABI_ERROR_CODE_INTERNAL", + 2: "ABI_ERROR_CODE_DECODE", + 3: "ABI_ERROR_CODE_UNIMPLEMENTED", + 4: "ABI_ERROR_CODE_DEADLINE_EXCEEDED", + 5: "ABI_ERROR_CODE_PERMISSION_DENIED", + } + AbiErrorCode_value = map[string]int32{ + "ABI_ERROR_CODE_UNSPECIFIED": 0, + "ABI_ERROR_CODE_INTERNAL": 1, + "ABI_ERROR_CODE_DECODE": 2, + "ABI_ERROR_CODE_UNIMPLEMENTED": 3, + "ABI_ERROR_CODE_DEADLINE_EXCEEDED": 4, + "ABI_ERROR_CODE_PERMISSION_DENIED": 5, + } +) + +func (x AbiErrorCode) Enum() *AbiErrorCode { + p := new(AbiErrorCode) + *p = x + return p +} + +func (x AbiErrorCode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AbiErrorCode) Descriptor() protoreflect.EnumDescriptor { + return file_v1_invoke_proto_enumTypes[1].Descriptor() +} + +func (AbiErrorCode) Type() protoreflect.EnumType { + return &file_v1_invoke_proto_enumTypes[1] +} + +func (x AbiErrorCode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AbiErrorCode.Descriptor instead. +func (AbiErrorCode) EnumDescriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{1} +} + +// InvokeRequest is the host→guest call envelope. +type InvokeRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Hook Hook `protobuf:"varint,1,opt,name=hook,proto3,enum=abi.v1.Hook" json:"hook,omitempty"` + // Serialized hook-specific request message (see Hook value comments). + Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` + // Milliseconds the guest has to answer; the host also enforces this + // deadline on the wasm instance (WithCloseOnContextDone). + DeadlineMs int64 `protobuf:"varint,3,opt,name=deadline_ms,json=deadlineMs,proto3" json:"deadline_ms,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InvokeRequest) Reset() { + *x = InvokeRequest{} + mi := &file_v1_invoke_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InvokeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InvokeRequest) ProtoMessage() {} + +func (x *InvokeRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InvokeRequest.ProtoReflect.Descriptor instead. +func (*InvokeRequest) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{0} +} + +func (x *InvokeRequest) GetHook() Hook { + if x != nil { + return x.Hook + } + return Hook_HOOK_UNSPECIFIED +} + +func (x *InvokeRequest) GetPayload() []byte { + if x != nil { + return x.Payload + } + return nil +} + +func (x *InvokeRequest) GetDeadlineMs() int64 { + if x != nil { + return x.DeadlineMs + } + return 0 +} + +// InvokeResponse is the guest→host return envelope. +type InvokeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Serialized hook-specific response message; empty when error is set. + Payload []byte `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` + // Set when the hook failed; the host treats decode failures and traps as + // implicit ABI_ERROR_CODE_INTERNAL. + Error *AbiError `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InvokeResponse) Reset() { + *x = InvokeResponse{} + mi := &file_v1_invoke_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InvokeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InvokeResponse) ProtoMessage() {} + +func (x *InvokeResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InvokeResponse.ProtoReflect.Descriptor instead. +func (*InvokeResponse) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{1} +} + +func (x *InvokeResponse) GetPayload() []byte { + if x != nil { + return x.Payload + } + return nil +} + +func (x *InvokeResponse) GetError() *AbiError { + if x != nil { + return x.Error + } + return nil +} + +// AbiError is the structured error carried by InvokeResponse and +// HostCallResponse. +type AbiError struct { + state protoimpl.MessageState `protogen:"open.v1"` + Code AbiErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=abi.v1.AbiErrorCode" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AbiError) Reset() { + *x = AbiError{} + mi := &file_v1_invoke_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AbiError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AbiError) ProtoMessage() {} + +func (x *AbiError) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AbiError.ProtoReflect.Descriptor instead. +func (*AbiError) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{2} +} + +func (x *AbiError) GetCode() AbiErrorCode { + if x != nil { + return x.Code + } + return AbiErrorCode_ABI_ERROR_CODE_UNSPECIFIED +} + +func (x *AbiError) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +// DescribeRequest asks the guest for its static manifest (publish time only). +type DescribeRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // ABI major version of the calling host/publish tool. + HostAbiVersion uint32 `protobuf:"varint,1,opt,name=host_abi_version,json=hostAbiVersion,proto3" json:"host_abi_version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DescribeRequest) Reset() { + *x = DescribeRequest{} + mi := &file_v1_invoke_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DescribeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DescribeRequest) ProtoMessage() {} + +func (x *DescribeRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DescribeRequest.ProtoReflect.Descriptor instead. +func (*DescribeRequest) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{3} +} + +func (x *DescribeRequest) GetHostAbiVersion() uint32 { + if x != nil { + return x.HostAbiVersion + } + return 0 +} + +// DescribeResponse returns the static manifest. +type DescribeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Manifest *PluginManifest `protobuf:"bytes,1,opt,name=manifest,proto3" json:"manifest,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DescribeResponse) Reset() { + *x = DescribeResponse{} + mi := &file_v1_invoke_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DescribeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DescribeResponse) ProtoMessage() {} + +func (x *DescribeResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DescribeResponse.ProtoReflect.Descriptor instead. +func (*DescribeResponse) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{4} +} + +func (x *DescribeResponse) GetManifest() *PluginManifest { + if x != nil { + return x.Manifest + } + return nil +} + +// LoadRequest carries the static host configuration the .so world exposed as +// CoreServices.AppURL / CoreServices.MediaPath. +type LoadRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + HostConfig *HostConfig `protobuf:"bytes,1,opt,name=host_config,json=hostConfig,proto3" json:"host_config,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LoadRequest) Reset() { + *x = LoadRequest{} + mi := &file_v1_invoke_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LoadRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LoadRequest) ProtoMessage() {} + +func (x *LoadRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LoadRequest.ProtoReflect.Descriptor instead. +func (*LoadRequest) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{5} +} + +func (x *LoadRequest) GetHostConfig() *HostConfig { + if x != nil { + return x.HostConfig + } + return nil +} + +// HostConfig mirrors the plain-value CoreServices fields. +type HostConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + AppUrl string `protobuf:"bytes,1,opt,name=app_url,json=appUrl,proto3" json:"app_url,omitempty"` // CoreServices.AppURL + MediaPath string `protobuf:"bytes,2,opt,name=media_path,json=mediaPath,proto3" json:"media_path,omitempty"` // CoreServices.MediaPath + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HostConfig) Reset() { + *x = HostConfig{} + mi := &file_v1_invoke_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HostConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HostConfig) ProtoMessage() {} + +func (x *HostConfig) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HostConfig.ProtoReflect.Descriptor instead. +func (*HostConfig) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{6} +} + +func (x *HostConfig) GetAppUrl() string { + if x != nil { + return x.AppUrl + } + return "" +} + +func (x *HostConfig) GetMediaPath() string { + if x != nil { + return x.MediaPath + } + return "" +} + +type LoadResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LoadResponse) Reset() { + *x = LoadResponse{} + mi := &file_v1_invoke_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LoadResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LoadResponse) ProtoMessage() {} + +func (x *LoadResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LoadResponse.ProtoReflect.Descriptor instead. +func (*LoadResponse) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{7} +} + +type UnloadRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UnloadRequest) Reset() { + *x = UnloadRequest{} + mi := &file_v1_invoke_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UnloadRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnloadRequest) ProtoMessage() {} + +func (x *UnloadRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnloadRequest.ProtoReflect.Descriptor instead. +func (*UnloadRequest) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{8} +} + +type UnloadResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UnloadResponse) Reset() { + *x = UnloadResponse{} + mi := &file_v1_invoke_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UnloadResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnloadResponse) ProtoMessage() {} + +func (x *UnloadResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnloadResponse.ProtoReflect.Descriptor instead. +func (*UnloadResponse) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{9} +} + +// JobRequest dispatches one background job to the guest handler registered +// for job_type (manifest.job_types). +type JobRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + JobType string `protobuf:"bytes,1,opt,name=job_type,json=jobType,proto3" json:"job_type,omitempty"` + // JSON job configuration (json.RawMessage in JobHandlerFunc). + ConfigJson []byte `protobuf:"bytes,2,opt,name=config_json,json=configJson,proto3" json:"config_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *JobRequest) Reset() { + *x = JobRequest{} + mi := &file_v1_invoke_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *JobRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobRequest) ProtoMessage() {} + +func (x *JobRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JobRequest.ProtoReflect.Descriptor instead. +func (*JobRequest) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{10} +} + +func (x *JobRequest) GetJobType() string { + if x != nil { + return x.JobType + } + return "" +} + +func (x *JobRequest) GetConfigJson() []byte { + if x != nil { + return x.ConfigJson + } + return nil +} + +// JobResponse returns the handler's JSON result. +type JobResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ResultJson []byte `protobuf:"bytes,1,opt,name=result_json,json=resultJson,proto3" json:"result_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *JobResponse) Reset() { + *x = JobResponse{} + mi := &file_v1_invoke_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *JobResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobResponse) ProtoMessage() {} + +func (x *JobResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JobResponse.ProtoReflect.Descriptor instead. +func (*JobResponse) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{11} +} + +func (x *JobResponse) GetResultJson() []byte { + if x != nil { + return x.ResultJson + } + return nil +} + +// RagFetchRequest asks the guest's registered content fetcher +// (manifest.rag_content_fetcher_types) for a content item's text. +type RagFetchRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ContentType string `protobuf:"bytes,1,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + ContentId string `protobuf:"bytes,2,opt,name=content_id,json=contentId,proto3" json:"content_id,omitempty"` // UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RagFetchRequest) Reset() { + *x = RagFetchRequest{} + mi := &file_v1_invoke_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RagFetchRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RagFetchRequest) ProtoMessage() {} + +func (x *RagFetchRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RagFetchRequest.ProtoReflect.Descriptor instead. +func (*RagFetchRequest) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{12} +} + +func (x *RagFetchRequest) GetContentType() string { + if x != nil { + return x.ContentType + } + return "" +} + +func (x *RagFetchRequest) GetContentId() string { + if x != nil { + return x.ContentId + } + return "" +} + +// RagFetchResponse mirrors plugin.ContentFetcher's return values. +type RagFetchResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RagFetchResponse) Reset() { + *x = RagFetchResponse{} + mi := &file_v1_invoke_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RagFetchResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RagFetchResponse) ProtoMessage() {} + +func (x *RagFetchResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RagFetchResponse.ProtoReflect.Descriptor instead. +func (*RagFetchResponse) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{13} +} + +func (x *RagFetchResponse) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *RagFetchResponse) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +// MediaHookRequest delivers one media lifecycle event +// (plugin.MediaHooksProvider). +type MediaHookRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Event: + // + // *MediaHookRequest_MediaAnalyzed + // *MediaHookRequest_ModerationDecision + Event isMediaHookRequest_Event `protobuf_oneof:"event"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MediaHookRequest) Reset() { + *x = MediaHookRequest{} + mi := &file_v1_invoke_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MediaHookRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MediaHookRequest) ProtoMessage() {} + +func (x *MediaHookRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MediaHookRequest.ProtoReflect.Descriptor instead. +func (*MediaHookRequest) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{14} +} + +func (x *MediaHookRequest) GetEvent() isMediaHookRequest_Event { + if x != nil { + return x.Event + } + return nil +} + +func (x *MediaHookRequest) GetMediaAnalyzed() *MediaAnalyzedEvent { + if x != nil { + if x, ok := x.Event.(*MediaHookRequest_MediaAnalyzed); ok { + return x.MediaAnalyzed + } + } + return nil +} + +func (x *MediaHookRequest) GetModerationDecision() *ModerationDecisionEvent { + if x != nil { + if x, ok := x.Event.(*MediaHookRequest_ModerationDecision); ok { + return x.ModerationDecision + } + } + return nil +} + +type isMediaHookRequest_Event interface { + isMediaHookRequest_Event() +} + +type MediaHookRequest_MediaAnalyzed struct { + MediaAnalyzed *MediaAnalyzedEvent `protobuf:"bytes,1,opt,name=media_analyzed,json=mediaAnalyzed,proto3,oneof"` // OnMediaAnalyzed +} + +type MediaHookRequest_ModerationDecision struct { + ModerationDecision *ModerationDecisionEvent `protobuf:"bytes,2,opt,name=moderation_decision,json=moderationDecision,proto3,oneof"` // OnModerationDecision +} + +func (*MediaHookRequest_MediaAnalyzed) isMediaHookRequest_Event() {} + +func (*MediaHookRequest_ModerationDecision) isMediaHookRequest_Event() {} + +type MediaHookResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MediaHookResponse) Reset() { + *x = MediaHookResponse{} + mi := &file_v1_invoke_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MediaHookResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MediaHookResponse) ProtoMessage() {} + +func (x *MediaHookResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MediaHookResponse.ProtoReflect.Descriptor instead. +func (*MediaHookResponse) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{15} +} + +// MediaAnalyzedEvent mirrors plugin.MediaAnalyzedEvent (UUIDs as strings). +type MediaAnalyzedEvent struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaId string `protobuf:"bytes,1,opt,name=media_id,json=mediaId,proto3" json:"media_id,omitempty"` + AnalysisId string `protobuf:"bytes,2,opt,name=analysis_id,json=analysisId,proto3" json:"analysis_id,omitempty"` + ContentHash string `protobuf:"bytes,3,opt,name=content_hash,json=contentHash,proto3" json:"content_hash,omitempty"` + Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + SourcePlugin string `protobuf:"bytes,5,opt,name=source_plugin,json=sourcePlugin,proto3" json:"source_plugin,omitempty"` + SourceType string `protobuf:"bytes,6,opt,name=source_type,json=sourceType,proto3" json:"source_type,omitempty"` + SourceRefId string `protobuf:"bytes,7,opt,name=source_ref_id,json=sourceRefId,proto3" json:"source_ref_id,omitempty"` + SafeAdult string `protobuf:"bytes,8,opt,name=safe_adult,json=safeAdult,proto3" json:"safe_adult,omitempty"` + SafeViolence string `protobuf:"bytes,9,opt,name=safe_violence,json=safeViolence,proto3" json:"safe_violence,omitempty"` + SafeRacy string `protobuf:"bytes,10,opt,name=safe_racy,json=safeRacy,proto3" json:"safe_racy,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MediaAnalyzedEvent) Reset() { + *x = MediaAnalyzedEvent{} + mi := &file_v1_invoke_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MediaAnalyzedEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MediaAnalyzedEvent) ProtoMessage() {} + +func (x *MediaAnalyzedEvent) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MediaAnalyzedEvent.ProtoReflect.Descriptor instead. +func (*MediaAnalyzedEvent) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{16} +} + +func (x *MediaAnalyzedEvent) GetMediaId() string { + if x != nil { + return x.MediaId + } + return "" +} + +func (x *MediaAnalyzedEvent) GetAnalysisId() string { + if x != nil { + return x.AnalysisId + } + return "" +} + +func (x *MediaAnalyzedEvent) GetContentHash() string { + if x != nil { + return x.ContentHash + } + return "" +} + +func (x *MediaAnalyzedEvent) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *MediaAnalyzedEvent) GetSourcePlugin() string { + if x != nil { + return x.SourcePlugin + } + return "" +} + +func (x *MediaAnalyzedEvent) GetSourceType() string { + if x != nil { + return x.SourceType + } + return "" +} + +func (x *MediaAnalyzedEvent) GetSourceRefId() string { + if x != nil { + return x.SourceRefId + } + return "" +} + +func (x *MediaAnalyzedEvent) GetSafeAdult() string { + if x != nil { + return x.SafeAdult + } + return "" +} + +func (x *MediaAnalyzedEvent) GetSafeViolence() string { + if x != nil { + return x.SafeViolence + } + return "" +} + +func (x *MediaAnalyzedEvent) GetSafeRacy() string { + if x != nil { + return x.SafeRacy + } + return "" +} + +// ModerationDecisionEvent mirrors plugin.ModerationDecisionEvent. +type ModerationDecisionEvent struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaId string `protobuf:"bytes,1,opt,name=media_id,json=mediaId,proto3" json:"media_id,omitempty"` + AnalysisId string `protobuf:"bytes,2,opt,name=analysis_id,json=analysisId,proto3" json:"analysis_id,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + PreviousStatus string `protobuf:"bytes,4,opt,name=previous_status,json=previousStatus,proto3" json:"previous_status,omitempty"` + SourcePlugin string `protobuf:"bytes,5,opt,name=source_plugin,json=sourcePlugin,proto3" json:"source_plugin,omitempty"` + SourceType string `protobuf:"bytes,6,opt,name=source_type,json=sourceType,proto3" json:"source_type,omitempty"` + SourceRefId string `protobuf:"bytes,7,opt,name=source_ref_id,json=sourceRefId,proto3" json:"source_ref_id,omitempty"` + ModeratedBy string `protobuf:"bytes,8,opt,name=moderated_by,json=moderatedBy,proto3" json:"moderated_by,omitempty"` + Note string `protobuf:"bytes,9,opt,name=note,proto3" json:"note,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ModerationDecisionEvent) Reset() { + *x = ModerationDecisionEvent{} + mi := &file_v1_invoke_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ModerationDecisionEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ModerationDecisionEvent) ProtoMessage() {} + +func (x *ModerationDecisionEvent) ProtoReflect() protoreflect.Message { + mi := &file_v1_invoke_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ModerationDecisionEvent.ProtoReflect.Descriptor instead. +func (*ModerationDecisionEvent) Descriptor() ([]byte, []int) { + return file_v1_invoke_proto_rawDescGZIP(), []int{17} +} + +func (x *ModerationDecisionEvent) GetMediaId() string { + if x != nil { + return x.MediaId + } + return "" +} + +func (x *ModerationDecisionEvent) GetAnalysisId() string { + if x != nil { + return x.AnalysisId + } + return "" +} + +func (x *ModerationDecisionEvent) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ModerationDecisionEvent) GetPreviousStatus() string { + if x != nil { + return x.PreviousStatus + } + return "" +} + +func (x *ModerationDecisionEvent) GetSourcePlugin() string { + if x != nil { + return x.SourcePlugin + } + return "" +} + +func (x *ModerationDecisionEvent) GetSourceType() string { + if x != nil { + return x.SourceType + } + return "" +} + +func (x *ModerationDecisionEvent) GetSourceRefId() string { + if x != nil { + return x.SourceRefId + } + return "" +} + +func (x *ModerationDecisionEvent) GetModeratedBy() string { + if x != nil { + return x.ModeratedBy + } + return "" +} + +func (x *ModerationDecisionEvent) GetNote() string { + if x != nil { + return x.Note + } + return "" +} + +var File_v1_invoke_proto protoreflect.FileDescriptor + +const file_v1_invoke_proto_rawDesc = "" + + "\n" + + "\x0fv1/invoke.proto\x12\x06abi.v1\x1a\x11v1/manifest.proto\"l\n" + + "\rInvokeRequest\x12 \n" + + "\x04hook\x18\x01 \x01(\x0e2\f.abi.v1.HookR\x04hook\x12\x18\n" + + "\apayload\x18\x02 \x01(\fR\apayload\x12\x1f\n" + + "\vdeadline_ms\x18\x03 \x01(\x03R\n" + + "deadlineMs\"R\n" + + "\x0eInvokeResponse\x12\x18\n" + + "\apayload\x18\x01 \x01(\fR\apayload\x12&\n" + + "\x05error\x18\x02 \x01(\v2\x10.abi.v1.AbiErrorR\x05error\"N\n" + + "\bAbiError\x12(\n" + + "\x04code\x18\x01 \x01(\x0e2\x14.abi.v1.AbiErrorCodeR\x04code\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage\";\n" + + "\x0fDescribeRequest\x12(\n" + + "\x10host_abi_version\x18\x01 \x01(\rR\x0ehostAbiVersion\"F\n" + + "\x10DescribeResponse\x122\n" + + "\bmanifest\x18\x01 \x01(\v2\x16.abi.v1.PluginManifestR\bmanifest\"B\n" + + "\vLoadRequest\x123\n" + + "\vhost_config\x18\x01 \x01(\v2\x12.abi.v1.HostConfigR\n" + + "hostConfig\"D\n" + + "\n" + + "HostConfig\x12\x17\n" + + "\aapp_url\x18\x01 \x01(\tR\x06appUrl\x12\x1d\n" + + "\n" + + "media_path\x18\x02 \x01(\tR\tmediaPath\"\x0e\n" + + "\fLoadResponse\"\x0f\n" + + "\rUnloadRequest\"\x10\n" + + "\x0eUnloadResponse\"H\n" + + "\n" + + "JobRequest\x12\x19\n" + + "\bjob_type\x18\x01 \x01(\tR\ajobType\x12\x1f\n" + + "\vconfig_json\x18\x02 \x01(\fR\n" + + "configJson\".\n" + + "\vJobResponse\x12\x1f\n" + + "\vresult_json\x18\x01 \x01(\fR\n" + + "resultJson\"S\n" + + "\x0fRagFetchRequest\x12!\n" + + "\fcontent_type\x18\x01 \x01(\tR\vcontentType\x12\x1d\n" + + "\n" + + "content_id\x18\x02 \x01(\tR\tcontentId\"<\n" + + "\x10RagFetchResponse\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\"\xb4\x01\n" + + "\x10MediaHookRequest\x12C\n" + + "\x0emedia_analyzed\x18\x01 \x01(\v2\x1a.abi.v1.MediaAnalyzedEventH\x00R\rmediaAnalyzed\x12R\n" + + "\x13moderation_decision\x18\x02 \x01(\v2\x1f.abi.v1.ModerationDecisionEventH\x00R\x12moderationDecisionB\a\n" + + "\x05event\"\x13\n" + + "\x11MediaHookResponse\"\xd6\x02\n" + + "\x12MediaAnalyzedEvent\x12\x19\n" + + "\bmedia_id\x18\x01 \x01(\tR\amediaId\x12\x1f\n" + + "\vanalysis_id\x18\x02 \x01(\tR\n" + + "analysisId\x12!\n" + + "\fcontent_hash\x18\x03 \x01(\tR\vcontentHash\x12\x16\n" + + "\x06status\x18\x04 \x01(\tR\x06status\x12#\n" + + "\rsource_plugin\x18\x05 \x01(\tR\fsourcePlugin\x12\x1f\n" + + "\vsource_type\x18\x06 \x01(\tR\n" + + "sourceType\x12\"\n" + + "\rsource_ref_id\x18\a \x01(\tR\vsourceRefId\x12\x1d\n" + + "\n" + + "safe_adult\x18\b \x01(\tR\tsafeAdult\x12#\n" + + "\rsafe_violence\x18\t \x01(\tR\fsafeViolence\x12\x1b\n" + + "\tsafe_racy\x18\n" + + " \x01(\tR\bsafeRacy\"\xb7\x02\n" + + "\x17ModerationDecisionEvent\x12\x19\n" + + "\bmedia_id\x18\x01 \x01(\tR\amediaId\x12\x1f\n" + + "\vanalysis_id\x18\x02 \x01(\tR\n" + + "analysisId\x12\x16\n" + + "\x06status\x18\x03 \x01(\tR\x06status\x12'\n" + + "\x0fprevious_status\x18\x04 \x01(\tR\x0epreviousStatus\x12#\n" + + "\rsource_plugin\x18\x05 \x01(\tR\fsourcePlugin\x12\x1f\n" + + "\vsource_type\x18\x06 \x01(\tR\n" + + "sourceType\x12\"\n" + + "\rsource_ref_id\x18\a \x01(\tR\vsourceRefId\x12!\n" + + "\fmoderated_by\x18\b \x01(\tR\vmoderatedBy\x12\x12\n" + + "\x04note\x18\t \x01(\tR\x04note*\xcd\x01\n" + + "\x04Hook\x12\x14\n" + + "\x10HOOK_UNSPECIFIED\x10\x00\x12\x15\n" + + "\x11HOOK_RENDER_BLOCK\x10\x01\x12\x18\n" + + "\x14HOOK_RENDER_TEMPLATE\x10\x02\x12\x14\n" + + "\x10HOOK_HANDLE_HTTP\x10\x03\x12\f\n" + + "\bHOOK_JOB\x10\x04\x12\r\n" + + "\tHOOK_LOAD\x10\x05\x12\x0f\n" + + "\vHOOK_UNLOAD\x10\x06\x12\x12\n" + + "\x0eHOOK_RAG_FETCH\x10\a\x12\x13\n" + + "\x0fHOOK_MEDIA_HOOK\x10\b\x12\x11\n" + + "\rHOOK_DESCRIBE\x10\t*\xd4\x01\n" + + "\fAbiErrorCode\x12\x1e\n" + + "\x1aABI_ERROR_CODE_UNSPECIFIED\x10\x00\x12\x1b\n" + + "\x17ABI_ERROR_CODE_INTERNAL\x10\x01\x12\x19\n" + + "\x15ABI_ERROR_CODE_DECODE\x10\x02\x12 \n" + + "\x1cABI_ERROR_CODE_UNIMPLEMENTED\x10\x03\x12$\n" + + " ABI_ERROR_CODE_DEADLINE_EXCEEDED\x10\x04\x12$\n" + + " ABI_ERROR_CODE_PERMISSION_DENIED\x10\x05B0Z.git.dev.alexdunmow.com/block/core/abi/v1;abiv1b\x06proto3" + +var ( + file_v1_invoke_proto_rawDescOnce sync.Once + file_v1_invoke_proto_rawDescData []byte +) + +func file_v1_invoke_proto_rawDescGZIP() []byte { + file_v1_invoke_proto_rawDescOnce.Do(func() { + file_v1_invoke_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_v1_invoke_proto_rawDesc), len(file_v1_invoke_proto_rawDesc))) + }) + return file_v1_invoke_proto_rawDescData +} + +var file_v1_invoke_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_v1_invoke_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_v1_invoke_proto_goTypes = []any{ + (Hook)(0), // 0: abi.v1.Hook + (AbiErrorCode)(0), // 1: abi.v1.AbiErrorCode + (*InvokeRequest)(nil), // 2: abi.v1.InvokeRequest + (*InvokeResponse)(nil), // 3: abi.v1.InvokeResponse + (*AbiError)(nil), // 4: abi.v1.AbiError + (*DescribeRequest)(nil), // 5: abi.v1.DescribeRequest + (*DescribeResponse)(nil), // 6: abi.v1.DescribeResponse + (*LoadRequest)(nil), // 7: abi.v1.LoadRequest + (*HostConfig)(nil), // 8: abi.v1.HostConfig + (*LoadResponse)(nil), // 9: abi.v1.LoadResponse + (*UnloadRequest)(nil), // 10: abi.v1.UnloadRequest + (*UnloadResponse)(nil), // 11: abi.v1.UnloadResponse + (*JobRequest)(nil), // 12: abi.v1.JobRequest + (*JobResponse)(nil), // 13: abi.v1.JobResponse + (*RagFetchRequest)(nil), // 14: abi.v1.RagFetchRequest + (*RagFetchResponse)(nil), // 15: abi.v1.RagFetchResponse + (*MediaHookRequest)(nil), // 16: abi.v1.MediaHookRequest + (*MediaHookResponse)(nil), // 17: abi.v1.MediaHookResponse + (*MediaAnalyzedEvent)(nil), // 18: abi.v1.MediaAnalyzedEvent + (*ModerationDecisionEvent)(nil), // 19: abi.v1.ModerationDecisionEvent + (*PluginManifest)(nil), // 20: abi.v1.PluginManifest +} +var file_v1_invoke_proto_depIdxs = []int32{ + 0, // 0: abi.v1.InvokeRequest.hook:type_name -> abi.v1.Hook + 4, // 1: abi.v1.InvokeResponse.error:type_name -> abi.v1.AbiError + 1, // 2: abi.v1.AbiError.code:type_name -> abi.v1.AbiErrorCode + 20, // 3: abi.v1.DescribeResponse.manifest:type_name -> abi.v1.PluginManifest + 8, // 4: abi.v1.LoadRequest.host_config:type_name -> abi.v1.HostConfig + 18, // 5: abi.v1.MediaHookRequest.media_analyzed:type_name -> abi.v1.MediaAnalyzedEvent + 19, // 6: abi.v1.MediaHookRequest.moderation_decision:type_name -> abi.v1.ModerationDecisionEvent + 7, // [7:7] is the sub-list for method output_type + 7, // [7:7] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name +} + +func init() { file_v1_invoke_proto_init() } +func file_v1_invoke_proto_init() { + if File_v1_invoke_proto != nil { + return + } + file_v1_manifest_proto_init() + file_v1_invoke_proto_msgTypes[14].OneofWrappers = []any{ + (*MediaHookRequest_MediaAnalyzed)(nil), + (*MediaHookRequest_ModerationDecision)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_v1_invoke_proto_rawDesc), len(file_v1_invoke_proto_rawDesc)), + NumEnums: 2, + NumMessages: 18, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_v1_invoke_proto_goTypes, + DependencyIndexes: file_v1_invoke_proto_depIdxs, + EnumInfos: file_v1_invoke_proto_enumTypes, + MessageInfos: file_v1_invoke_proto_msgTypes, + }.Build() + File_v1_invoke_proto = out.File + file_v1_invoke_proto_goTypes = nil + file_v1_invoke_proto_depIdxs = nil +} diff --git a/abi/v1/manifest.pb.go b/abi/v1/manifest.pb.go new file mode 100644 index 0000000..e00a8ea --- /dev/null +++ b/abi/v1/manifest.pb.go @@ -0,0 +1,1450 @@ +// manifest.proto — the static plugin manifest (WO-WZ-001). +// +// PluginManifest is the wire form of everything that is *static data* in +// core/plugin/registration.go (PluginRegistration). It is produced once at +// publish time by calling the guest's DESCRIBE hook and stored as manifest.pb +// inside the .bnp artifact; the CMS loader reads it without instantiating the +// wasm module. +// +// Function-valued registration fields cannot cross the wire; they map to +// either a hook (Load/Unload/JobHandlers/MediaHooks/HTTPHandler), a boolean +// presence flag here, or an artifact directory (Assets → assets/, +// Schemas → schemas/, Migrations → migrations/). See core/docs/wasm-abi.md +// for the full field-by-field mapping. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc (unknown) +// source: v1/manifest.proto + +package abiv1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// PluginManifest mirrors the static surface of plugin.PluginRegistration. +type PluginManifest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // ABI major version the plugin was built against. The host rejects + // manifests whose major version it does not support. + AbiVersion uint32 `protobuf:"varint,1,opt,name=abi_version,json=abiVersion,proto3" json:"abi_version,omitempty"` + // PluginRegistration.Name / .Version. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + // PluginRegistration.Dependencies. + Dependencies []*Dependency `protobuf:"bytes,4,rep,name=dependencies,proto3" json:"dependencies,omitempty"` + // Blocks registered via BlockRegistry.Register (captured by DESCRIBE). + Blocks []*BlockMeta `protobuf:"bytes,5,rep,name=blocks,proto3" json:"blocks,omitempty"` + // Blocks registered via BlockRegistry.RegisterTemplateOverride[WithSource]. + BlockTemplateOverrides []*BlockTemplateOverride `protobuf:"bytes,6,rep,name=block_template_overrides,json=blockTemplateOverrides,proto3" json:"block_template_overrides,omitempty"` + // Templates registered via TemplateRegistry (captured by DESCRIBE). + TemplateKeys []string `protobuf:"bytes,7,rep,name=template_keys,json=templateKeys,proto3" json:"template_keys,omitempty"` // TemplateRegistry.Register + SystemTemplates []*SystemTemplateMeta `protobuf:"bytes,8,rep,name=system_templates,json=systemTemplates,proto3" json:"system_templates,omitempty"` // RegisterSystemTemplate + PageTemplates []*PageTemplateMeta `protobuf:"bytes,9,rep,name=page_templates,json=pageTemplates,proto3" json:"page_templates,omitempty"` // RegisterPageTemplate + EmailWrapperSystemKeys []string `protobuf:"bytes,10,rep,name=email_wrapper_system_keys,json=emailWrapperSystemKeys,proto3" json:"email_wrapper_system_keys,omitempty"` // RegisterEmailWrapper + // PluginRegistration.AdminPages. + AdminPages []*AdminPage `protobuf:"bytes,11,rep,name=admin_pages,json=adminPages,proto3" json:"admin_pages,omitempty"` + // PluginRegistration.SettingsSchema / .ThemePresets / .BundledFonts (JSON). + SettingsSchema []byte `protobuf:"bytes,12,opt,name=settings_schema,json=settingsSchema,proto3" json:"settings_schema,omitempty"` + ThemePresets []byte `protobuf:"bytes,13,opt,name=theme_presets,json=themePresets,proto3" json:"theme_presets,omitempty"` + BundledFonts []byte `protobuf:"bytes,14,opt,name=bundled_fonts,json=bundledFonts,proto3" json:"bundled_fonts,omitempty"` + // PluginRegistration.MasterPages. + MasterPages []*MasterPageDefinition `protobuf:"bytes,15,rep,name=master_pages,json=masterPages,proto3" json:"master_pages,omitempty"` + // PluginRegistration.AIActions. + AiActions []*AiAction `protobuf:"bytes,16,rep,name=ai_actions,json=aiActions,proto3" json:"ai_actions,omitempty"` + // RBAC roles for the plugin's own Connect services, merged from + // ServiceRegistration (full method name → role, e.g. + // "/symposium.v1.ForumService/CreateThread" → "admin"). + RbacMethodRoles map[string]string `protobuf:"bytes,17,rep,name=rbac_method_roles,json=rbacMethodRoles,proto3" json:"rbac_method_roles,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // PluginRegistration.CSSManifest. + CssManifest *CssManifest `protobuf:"bytes,18,opt,name=css_manifest,json=cssManifest,proto3" json:"css_manifest,omitempty"` + // PluginRegistration.RequiredIconPacks. + RequiredIconPacks []string `protobuf:"bytes,19,rep,name=required_icon_packs,json=requiredIconPacks,proto3" json:"required_icon_packs,omitempty"` + // PluginRegistration.DirectoryExtensions (static fields only; the + // panel-section / pin-decorator callbacks are counted so the host knows + // how many guest callbacks exist). + DirectoryExtensions *DirectoryExtensions `protobuf:"bytes,20,opt,name=directory_extensions,json=directoryExtensions,proto3" json:"directory_extensions,omitempty"` + // Job types the plugin handles (keys of PluginRegistration.JobHandlers). + // The host dispatches these via the JOB hook. + JobTypes []string `protobuf:"bytes,21,rep,name=job_types,json=jobTypes,proto3" json:"job_types,omitempty"` + // Content types the plugin registered RAG content fetchers for + // (RAGService.RegisterContentFetcher inverts to a manifest declaration; + // the host calls back via the RAG_FETCH hook). + RagContentFetcherTypes []string `protobuf:"bytes,22,rep,name=rag_content_fetcher_types,json=ragContentFetcherTypes,proto3" json:"rag_content_fetcher_types,omitempty"` + // PluginRegistration.SettingsPanel — Module Federation path of the + // settings panel component ("" when the plugin has none). + SettingsPanel string `protobuf:"bytes,23,opt,name=settings_panel,json=settingsPanel,proto3" json:"settings_panel,omitempty"` + // Presence flags for function-valued registration fields that invert to + // hooks at runtime. + HasHttpHandler bool `protobuf:"varint,24,opt,name=has_http_handler,json=hasHttpHandler,proto3" json:"has_http_handler,omitempty"` // PluginRegistration.HTTPHandler → HANDLE_HTTP + HasLoadHook bool `protobuf:"varint,25,opt,name=has_load_hook,json=hasLoadHook,proto3" json:"has_load_hook,omitempty"` // PluginRegistration.Load → LOAD + HasUnloadHook bool `protobuf:"varint,26,opt,name=has_unload_hook,json=hasUnloadHook,proto3" json:"has_unload_hook,omitempty"` // PluginRegistration.Unload → UNLOAD + HasMediaHooks bool `protobuf:"varint,27,opt,name=has_media_hooks,json=hasMediaHooks,proto3" json:"has_media_hooks,omitempty"` // PluginRegistration.MediaHooks → MEDIA_HOOK + HasProvisioner bool `protobuf:"varint,28,opt,name=has_provisioner,json=hasProvisioner,proto3" json:"has_provisioner,omitempty"` // PluginRegistration.RegisterWithProvisioner + // Core CMS services the plugin mounts with custom RBAC roles + // (CoreServiceBindings.Bind becomes a static declaration; the host + // constructs and mounts the handlers). + CoreServiceBindings []*CoreServiceBinding `protobuf:"bytes,29,rep,name=core_service_bindings,json=coreServiceBindings,proto3" json:"core_service_bindings,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PluginManifest) Reset() { + *x = PluginManifest{} + mi := &file_v1_manifest_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PluginManifest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PluginManifest) ProtoMessage() {} + +func (x *PluginManifest) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PluginManifest.ProtoReflect.Descriptor instead. +func (*PluginManifest) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{0} +} + +func (x *PluginManifest) GetAbiVersion() uint32 { + if x != nil { + return x.AbiVersion + } + return 0 +} + +func (x *PluginManifest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PluginManifest) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *PluginManifest) GetDependencies() []*Dependency { + if x != nil { + return x.Dependencies + } + return nil +} + +func (x *PluginManifest) GetBlocks() []*BlockMeta { + if x != nil { + return x.Blocks + } + return nil +} + +func (x *PluginManifest) GetBlockTemplateOverrides() []*BlockTemplateOverride { + if x != nil { + return x.BlockTemplateOverrides + } + return nil +} + +func (x *PluginManifest) GetTemplateKeys() []string { + if x != nil { + return x.TemplateKeys + } + return nil +} + +func (x *PluginManifest) GetSystemTemplates() []*SystemTemplateMeta { + if x != nil { + return x.SystemTemplates + } + return nil +} + +func (x *PluginManifest) GetPageTemplates() []*PageTemplateMeta { + if x != nil { + return x.PageTemplates + } + return nil +} + +func (x *PluginManifest) GetEmailWrapperSystemKeys() []string { + if x != nil { + return x.EmailWrapperSystemKeys + } + return nil +} + +func (x *PluginManifest) GetAdminPages() []*AdminPage { + if x != nil { + return x.AdminPages + } + return nil +} + +func (x *PluginManifest) GetSettingsSchema() []byte { + if x != nil { + return x.SettingsSchema + } + return nil +} + +func (x *PluginManifest) GetThemePresets() []byte { + if x != nil { + return x.ThemePresets + } + return nil +} + +func (x *PluginManifest) GetBundledFonts() []byte { + if x != nil { + return x.BundledFonts + } + return nil +} + +func (x *PluginManifest) GetMasterPages() []*MasterPageDefinition { + if x != nil { + return x.MasterPages + } + return nil +} + +func (x *PluginManifest) GetAiActions() []*AiAction { + if x != nil { + return x.AiActions + } + return nil +} + +func (x *PluginManifest) GetRbacMethodRoles() map[string]string { + if x != nil { + return x.RbacMethodRoles + } + return nil +} + +func (x *PluginManifest) GetCssManifest() *CssManifest { + if x != nil { + return x.CssManifest + } + return nil +} + +func (x *PluginManifest) GetRequiredIconPacks() []string { + if x != nil { + return x.RequiredIconPacks + } + return nil +} + +func (x *PluginManifest) GetDirectoryExtensions() *DirectoryExtensions { + if x != nil { + return x.DirectoryExtensions + } + return nil +} + +func (x *PluginManifest) GetJobTypes() []string { + if x != nil { + return x.JobTypes + } + return nil +} + +func (x *PluginManifest) GetRagContentFetcherTypes() []string { + if x != nil { + return x.RagContentFetcherTypes + } + return nil +} + +func (x *PluginManifest) GetSettingsPanel() string { + if x != nil { + return x.SettingsPanel + } + return "" +} + +func (x *PluginManifest) GetHasHttpHandler() bool { + if x != nil { + return x.HasHttpHandler + } + return false +} + +func (x *PluginManifest) GetHasLoadHook() bool { + if x != nil { + return x.HasLoadHook + } + return false +} + +func (x *PluginManifest) GetHasUnloadHook() bool { + if x != nil { + return x.HasUnloadHook + } + return false +} + +func (x *PluginManifest) GetHasMediaHooks() bool { + if x != nil { + return x.HasMediaHooks + } + return false +} + +func (x *PluginManifest) GetHasProvisioner() bool { + if x != nil { + return x.HasProvisioner + } + return false +} + +func (x *PluginManifest) GetCoreServiceBindings() []*CoreServiceBinding { + if x != nil { + return x.CoreServiceBindings + } + return nil +} + +// Dependency mirrors plugin.Dependency. +type Dependency struct { + state protoimpl.MessageState `protogen:"open.v1"` + Plugin string `protobuf:"bytes,1,opt,name=plugin,proto3" json:"plugin,omitempty"` + MinVersion string `protobuf:"bytes,2,opt,name=min_version,json=minVersion,proto3" json:"min_version,omitempty"` + Required bool `protobuf:"varint,3,opt,name=required,proto3" json:"required,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Dependency) Reset() { + *x = Dependency{} + mi := &file_v1_manifest_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Dependency) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Dependency) ProtoMessage() {} + +func (x *Dependency) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Dependency.ProtoReflect.Descriptor instead. +func (*Dependency) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{1} +} + +func (x *Dependency) GetPlugin() string { + if x != nil { + return x.Plugin + } + return "" +} + +func (x *Dependency) GetMinVersion() string { + if x != nil { + return x.MinVersion + } + return "" +} + +func (x *Dependency) GetRequired() bool { + if x != nil { + return x.Required + } + return false +} + +// BlockMeta mirrors blocks.BlockMeta. Source is omitted: the host assigns it +// from the manifest's plugin name at load time. +type BlockMeta struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // blocks.BlockCategory string ("content", "layout", "navigation", "blog", + // "theme"). + Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"` + HasInternalSlot bool `protobuf:"varint,5,opt,name=has_internal_slot,json=hasInternalSlot,proto3" json:"has_internal_slot,omitempty"` + Hidden bool `protobuf:"varint,6,opt,name=hidden,proto3" json:"hidden,omitempty"` + EditorJs string `protobuf:"bytes,7,opt,name=editor_js,json=editorJs,proto3" json:"editor_js,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BlockMeta) Reset() { + *x = BlockMeta{} + mi := &file_v1_manifest_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BlockMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlockMeta) ProtoMessage() {} + +func (x *BlockMeta) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlockMeta.ProtoReflect.Descriptor instead. +func (*BlockMeta) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{2} +} + +func (x *BlockMeta) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *BlockMeta) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *BlockMeta) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *BlockMeta) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *BlockMeta) GetHasInternalSlot() bool { + if x != nil { + return x.HasInternalSlot + } + return false +} + +func (x *BlockMeta) GetHidden() bool { + if x != nil { + return x.Hidden + } + return false +} + +func (x *BlockMeta) GetEditorJs() string { + if x != nil { + return x.EditorJs + } + return "" +} + +// BlockTemplateOverride captures BlockRegistry.RegisterTemplateOverride and +// RegisterTemplateOverrideWithSource registrations. +type BlockTemplateOverride struct { + state protoimpl.MessageState `protogen:"open.v1"` + TemplateKey string `protobuf:"bytes,1,opt,name=template_key,json=templateKey,proto3" json:"template_key,omitempty"` + BlockKey string `protobuf:"bytes,2,opt,name=block_key,json=blockKey,proto3" json:"block_key,omitempty"` + // Override source label; empty for plain RegisterTemplateOverride. + Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BlockTemplateOverride) Reset() { + *x = BlockTemplateOverride{} + mi := &file_v1_manifest_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BlockTemplateOverride) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlockTemplateOverride) ProtoMessage() {} + +func (x *BlockTemplateOverride) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlockTemplateOverride.ProtoReflect.Descriptor instead. +func (*BlockTemplateOverride) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{3} +} + +func (x *BlockTemplateOverride) GetTemplateKey() string { + if x != nil { + return x.TemplateKey + } + return "" +} + +func (x *BlockTemplateOverride) GetBlockKey() string { + if x != nil { + return x.BlockKey + } + return "" +} + +func (x *BlockTemplateOverride) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +// SystemTemplateMeta mirrors templates.SystemTemplateMeta. +type SystemTemplateMeta struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SystemTemplateMeta) Reset() { + *x = SystemTemplateMeta{} + mi := &file_v1_manifest_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SystemTemplateMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SystemTemplateMeta) ProtoMessage() {} + +func (x *SystemTemplateMeta) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SystemTemplateMeta.ProtoReflect.Descriptor instead. +func (*SystemTemplateMeta) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{4} +} + +func (x *SystemTemplateMeta) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *SystemTemplateMeta) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *SystemTemplateMeta) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +// PageTemplateMeta mirrors templates.PageTemplateMeta plus the system +// template it was registered under. +type PageTemplateMeta struct { + state protoimpl.MessageState `protogen:"open.v1"` + SystemKey string `protobuf:"bytes,1,opt,name=system_key,json=systemKey,proto3" json:"system_key,omitempty"` + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + Slots []string `protobuf:"bytes,5,rep,name=slots,proto3" json:"slots,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PageTemplateMeta) Reset() { + *x = PageTemplateMeta{} + mi := &file_v1_manifest_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PageTemplateMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PageTemplateMeta) ProtoMessage() {} + +func (x *PageTemplateMeta) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PageTemplateMeta.ProtoReflect.Descriptor instead. +func (*PageTemplateMeta) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{5} +} + +func (x *PageTemplateMeta) GetSystemKey() string { + if x != nil { + return x.SystemKey + } + return "" +} + +func (x *PageTemplateMeta) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *PageTemplateMeta) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *PageTemplateMeta) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *PageTemplateMeta) GetSlots() []string { + if x != nil { + return x.Slots + } + return nil +} + +// AdminPage mirrors plugin.AdminPage. +type AdminPage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Icon string `protobuf:"bytes,3,opt,name=icon,proto3" json:"icon,omitempty"` + Route string `protobuf:"bytes,4,opt,name=route,proto3" json:"route,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdminPage) Reset() { + *x = AdminPage{} + mi := &file_v1_manifest_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdminPage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdminPage) ProtoMessage() {} + +func (x *AdminPage) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AdminPage.ProtoReflect.Descriptor instead. +func (*AdminPage) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{6} +} + +func (x *AdminPage) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *AdminPage) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *AdminPage) GetIcon() string { + if x != nil { + return x.Icon + } + return "" +} + +func (x *AdminPage) GetRoute() string { + if x != nil { + return x.Route + } + return "" +} + +// AiAction mirrors plugin.AIAction. +type AiAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + DefaultProvider string `protobuf:"bytes,4,opt,name=default_provider,json=defaultProvider,proto3" json:"default_provider,omitempty"` + DefaultModel string `protobuf:"bytes,5,opt,name=default_model,json=defaultModel,proto3" json:"default_model,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AiAction) Reset() { + *x = AiAction{} + mi := &file_v1_manifest_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AiAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AiAction) ProtoMessage() {} + +func (x *AiAction) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AiAction.ProtoReflect.Descriptor instead. +func (*AiAction) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{7} +} + +func (x *AiAction) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *AiAction) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *AiAction) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *AiAction) GetDefaultProvider() string { + if x != nil { + return x.DefaultProvider + } + return "" +} + +func (x *AiAction) GetDefaultModel() string { + if x != nil { + return x.DefaultModel + } + return "" +} + +// CssManifest mirrors plugin.CSSManifest. +type CssManifest struct { + state protoimpl.MessageState `protogen:"open.v1"` + NpmPackages map[string]string `protobuf:"bytes,1,rep,name=npm_packages,json=npmPackages,proto3" json:"npm_packages,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + CssDirectives []string `protobuf:"bytes,2,rep,name=css_directives,json=cssDirectives,proto3" json:"css_directives,omitempty"` + InputCssAppend string `protobuf:"bytes,3,opt,name=input_css_append,json=inputCssAppend,proto3" json:"input_css_append,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CssManifest) Reset() { + *x = CssManifest{} + mi := &file_v1_manifest_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CssManifest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CssManifest) ProtoMessage() {} + +func (x *CssManifest) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CssManifest.ProtoReflect.Descriptor instead. +func (*CssManifest) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{8} +} + +func (x *CssManifest) GetNpmPackages() map[string]string { + if x != nil { + return x.NpmPackages + } + return nil +} + +func (x *CssManifest) GetCssDirectives() []string { + if x != nil { + return x.CssDirectives + } + return nil +} + +func (x *CssManifest) GetInputCssAppend() string { + if x != nil { + return x.InputCssAppend + } + return "" +} + +// DirectoryExtensions mirrors the static fields of plugin.DirectoryExtensions. +type DirectoryExtensions struct { + state protoimpl.MessageState `protogen:"open.v1"` + BooleanFilterFields []string `protobuf:"bytes,1,rep,name=boolean_filter_fields,json=booleanFilterFields,proto3" json:"boolean_filter_fields,omitempty"` + SelectFilterFields []string `protobuf:"bytes,2,rep,name=select_filter_fields,json=selectFilterFields,proto3" json:"select_filter_fields,omitempty"` + BadgeLabels map[string]*BadgeLabel `protobuf:"bytes,3,rep,name=badge_labels,json=badgeLabels,proto3" json:"badge_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Counts of the callback slices (PanelSections / PinDecorators) so the host + // knows how many guest callbacks the plugin registered. Their invocation + // hook is a runtime-WO concern. + PanelSectionCount uint32 `protobuf:"varint,4,opt,name=panel_section_count,json=panelSectionCount,proto3" json:"panel_section_count,omitempty"` + PinDecoratorCount uint32 `protobuf:"varint,5,opt,name=pin_decorator_count,json=pinDecoratorCount,proto3" json:"pin_decorator_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DirectoryExtensions) Reset() { + *x = DirectoryExtensions{} + mi := &file_v1_manifest_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DirectoryExtensions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DirectoryExtensions) ProtoMessage() {} + +func (x *DirectoryExtensions) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DirectoryExtensions.ProtoReflect.Descriptor instead. +func (*DirectoryExtensions) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{9} +} + +func (x *DirectoryExtensions) GetBooleanFilterFields() []string { + if x != nil { + return x.BooleanFilterFields + } + return nil +} + +func (x *DirectoryExtensions) GetSelectFilterFields() []string { + if x != nil { + return x.SelectFilterFields + } + return nil +} + +func (x *DirectoryExtensions) GetBadgeLabels() map[string]*BadgeLabel { + if x != nil { + return x.BadgeLabels + } + return nil +} + +func (x *DirectoryExtensions) GetPanelSectionCount() uint32 { + if x != nil { + return x.PanelSectionCount + } + return 0 +} + +func (x *DirectoryExtensions) GetPinDecoratorCount() uint32 { + if x != nil { + return x.PinDecoratorCount + } + return 0 +} + +// BadgeLabel mirrors the [2]string value of DirectoryExtensions.BadgeLabels. +type BadgeLabel struct { + state protoimpl.MessageState `protogen:"open.v1"` + Positive string `protobuf:"bytes,1,opt,name=positive,proto3" json:"positive,omitempty"` + Negative string `protobuf:"bytes,2,opt,name=negative,proto3" json:"negative,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BadgeLabel) Reset() { + *x = BadgeLabel{} + mi := &file_v1_manifest_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BadgeLabel) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BadgeLabel) ProtoMessage() {} + +func (x *BadgeLabel) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BadgeLabel.ProtoReflect.Descriptor instead. +func (*BadgeLabel) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{10} +} + +func (x *BadgeLabel) GetPositive() string { + if x != nil { + return x.Positive + } + return "" +} + +func (x *BadgeLabel) GetNegative() string { + if x != nil { + return x.Negative + } + return "" +} + +// MasterPageDefinition mirrors plugin.MasterPageDefinition. +type MasterPageDefinition struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + PageTemplates []string `protobuf:"bytes,3,rep,name=page_templates,json=pageTemplates,proto3" json:"page_templates,omitempty"` + Blocks []*MasterPageBlock `protobuf:"bytes,4,rep,name=blocks,proto3" json:"blocks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MasterPageDefinition) Reset() { + *x = MasterPageDefinition{} + mi := &file_v1_manifest_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MasterPageDefinition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MasterPageDefinition) ProtoMessage() {} + +func (x *MasterPageDefinition) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MasterPageDefinition.ProtoReflect.Descriptor instead. +func (*MasterPageDefinition) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{11} +} + +func (x *MasterPageDefinition) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *MasterPageDefinition) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *MasterPageDefinition) GetPageTemplates() []string { + if x != nil { + return x.PageTemplates + } + return nil +} + +func (x *MasterPageDefinition) GetBlocks() []*MasterPageBlock { + if x != nil { + return x.Blocks + } + return nil +} + +// MasterPageBlock mirrors plugin.MasterPageBlock. +type MasterPageBlock struct { + state protoimpl.MessageState `protogen:"open.v1"` + BlockKey string `protobuf:"bytes,1,opt,name=block_key,json=blockKey,proto3" json:"block_key,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + // JSON encoding of the block's content map. + ContentJson []byte `protobuf:"bytes,3,opt,name=content_json,json=contentJson,proto3" json:"content_json,omitempty"` + HtmlContent *string `protobuf:"bytes,4,opt,name=html_content,json=htmlContent,proto3,oneof" json:"html_content,omitempty"` + Slot string `protobuf:"bytes,5,opt,name=slot,proto3" json:"slot,omitempty"` + SortOrder int32 `protobuf:"varint,6,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MasterPageBlock) Reset() { + *x = MasterPageBlock{} + mi := &file_v1_manifest_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MasterPageBlock) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MasterPageBlock) ProtoMessage() {} + +func (x *MasterPageBlock) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MasterPageBlock.ProtoReflect.Descriptor instead. +func (*MasterPageBlock) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{12} +} + +func (x *MasterPageBlock) GetBlockKey() string { + if x != nil { + return x.BlockKey + } + return "" +} + +func (x *MasterPageBlock) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *MasterPageBlock) GetContentJson() []byte { + if x != nil { + return x.ContentJson + } + return nil +} + +func (x *MasterPageBlock) GetHtmlContent() string { + if x != nil && x.HtmlContent != nil { + return *x.HtmlContent + } + return "" +} + +func (x *MasterPageBlock) GetSlot() string { + if x != nil { + return x.Slot + } + return "" +} + +func (x *MasterPageBlock) GetSortOrder() int32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +// CoreServiceBinding mirrors a plugin.CoreServiceBindings.Bind call: mount +// the named core-provided Connect service with these RBAC roles. +type CoreServiceBinding struct { + state protoimpl.MessageState `protogen:"open.v1"` + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` + MethodRoles map[string]string `protobuf:"bytes,2,rep,name=method_roles,json=methodRoles,proto3" json:"method_roles,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CoreServiceBinding) Reset() { + *x = CoreServiceBinding{} + mi := &file_v1_manifest_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CoreServiceBinding) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CoreServiceBinding) ProtoMessage() {} + +func (x *CoreServiceBinding) ProtoReflect() protoreflect.Message { + mi := &file_v1_manifest_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CoreServiceBinding.ProtoReflect.Descriptor instead. +func (*CoreServiceBinding) Descriptor() ([]byte, []int) { + return file_v1_manifest_proto_rawDescGZIP(), []int{13} +} + +func (x *CoreServiceBinding) GetServiceName() string { + if x != nil { + return x.ServiceName + } + return "" +} + +func (x *CoreServiceBinding) GetMethodRoles() map[string]string { + if x != nil { + return x.MethodRoles + } + return nil +} + +var File_v1_manifest_proto protoreflect.FileDescriptor + +const file_v1_manifest_proto_rawDesc = "" + + "\n" + + "\x11v1/manifest.proto\x12\x06abi.v1\"\x87\f\n" + + "\x0ePluginManifest\x12\x1f\n" + + "\vabi_version\x18\x01 \x01(\rR\n" + + "abiVersion\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x18\n" + + "\aversion\x18\x03 \x01(\tR\aversion\x126\n" + + "\fdependencies\x18\x04 \x03(\v2\x12.abi.v1.DependencyR\fdependencies\x12)\n" + + "\x06blocks\x18\x05 \x03(\v2\x11.abi.v1.BlockMetaR\x06blocks\x12W\n" + + "\x18block_template_overrides\x18\x06 \x03(\v2\x1d.abi.v1.BlockTemplateOverrideR\x16blockTemplateOverrides\x12#\n" + + "\rtemplate_keys\x18\a \x03(\tR\ftemplateKeys\x12E\n" + + "\x10system_templates\x18\b \x03(\v2\x1a.abi.v1.SystemTemplateMetaR\x0fsystemTemplates\x12?\n" + + "\x0epage_templates\x18\t \x03(\v2\x18.abi.v1.PageTemplateMetaR\rpageTemplates\x129\n" + + "\x19email_wrapper_system_keys\x18\n" + + " \x03(\tR\x16emailWrapperSystemKeys\x122\n" + + "\vadmin_pages\x18\v \x03(\v2\x11.abi.v1.AdminPageR\n" + + "adminPages\x12'\n" + + "\x0fsettings_schema\x18\f \x01(\fR\x0esettingsSchema\x12#\n" + + "\rtheme_presets\x18\r \x01(\fR\fthemePresets\x12#\n" + + "\rbundled_fonts\x18\x0e \x01(\fR\fbundledFonts\x12?\n" + + "\fmaster_pages\x18\x0f \x03(\v2\x1c.abi.v1.MasterPageDefinitionR\vmasterPages\x12/\n" + + "\n" + + "ai_actions\x18\x10 \x03(\v2\x10.abi.v1.AiActionR\taiActions\x12W\n" + + "\x11rbac_method_roles\x18\x11 \x03(\v2+.abi.v1.PluginManifest.RbacMethodRolesEntryR\x0frbacMethodRoles\x126\n" + + "\fcss_manifest\x18\x12 \x01(\v2\x13.abi.v1.CssManifestR\vcssManifest\x12.\n" + + "\x13required_icon_packs\x18\x13 \x03(\tR\x11requiredIconPacks\x12N\n" + + "\x14directory_extensions\x18\x14 \x01(\v2\x1b.abi.v1.DirectoryExtensionsR\x13directoryExtensions\x12\x1b\n" + + "\tjob_types\x18\x15 \x03(\tR\bjobTypes\x129\n" + + "\x19rag_content_fetcher_types\x18\x16 \x03(\tR\x16ragContentFetcherTypes\x12%\n" + + "\x0esettings_panel\x18\x17 \x01(\tR\rsettingsPanel\x12(\n" + + "\x10has_http_handler\x18\x18 \x01(\bR\x0ehasHttpHandler\x12\"\n" + + "\rhas_load_hook\x18\x19 \x01(\bR\vhasLoadHook\x12&\n" + + "\x0fhas_unload_hook\x18\x1a \x01(\bR\rhasUnloadHook\x12&\n" + + "\x0fhas_media_hooks\x18\x1b \x01(\bR\rhasMediaHooks\x12'\n" + + "\x0fhas_provisioner\x18\x1c \x01(\bR\x0ehasProvisioner\x12N\n" + + "\x15core_service_bindings\x18\x1d \x03(\v2\x1a.abi.v1.CoreServiceBindingR\x13coreServiceBindings\x1aB\n" + + "\x14RbacMethodRolesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"a\n" + + "\n" + + "Dependency\x12\x16\n" + + "\x06plugin\x18\x01 \x01(\tR\x06plugin\x12\x1f\n" + + "\vmin_version\x18\x02 \x01(\tR\n" + + "minVersion\x12\x1a\n" + + "\brequired\x18\x03 \x01(\bR\brequired\"\xd2\x01\n" + + "\tBlockMeta\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x03 \x01(\tR\vdescription\x12\x1a\n" + + "\bcategory\x18\x04 \x01(\tR\bcategory\x12*\n" + + "\x11has_internal_slot\x18\x05 \x01(\bR\x0fhasInternalSlot\x12\x16\n" + + "\x06hidden\x18\x06 \x01(\bR\x06hidden\x12\x1b\n" + + "\teditor_js\x18\a \x01(\tR\beditorJs\"o\n" + + "\x15BlockTemplateOverride\x12!\n" + + "\ftemplate_key\x18\x01 \x01(\tR\vtemplateKey\x12\x1b\n" + + "\tblock_key\x18\x02 \x01(\tR\bblockKey\x12\x16\n" + + "\x06source\x18\x03 \x01(\tR\x06source\"^\n" + + "\x12SystemTemplateMeta\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x03 \x01(\tR\vdescription\"\x91\x01\n" + + "\x10PageTemplateMeta\x12\x1d\n" + + "\n" + + "system_key\x18\x01 \x01(\tR\tsystemKey\x12\x10\n" + + "\x03key\x18\x02 \x01(\tR\x03key\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x04 \x01(\tR\vdescription\x12\x14\n" + + "\x05slots\x18\x05 \x03(\tR\x05slots\"]\n" + + "\tAdminPage\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12\x12\n" + + "\x04icon\x18\x03 \x01(\tR\x04icon\x12\x14\n" + + "\x05route\x18\x04 \x01(\tR\x05route\"\xa4\x01\n" + + "\bAiAction\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x03 \x01(\tR\vdescription\x12)\n" + + "\x10default_provider\x18\x04 \x01(\tR\x0fdefaultProvider\x12#\n" + + "\rdefault_model\x18\x05 \x01(\tR\fdefaultModel\"\xe7\x01\n" + + "\vCssManifest\x12G\n" + + "\fnpm_packages\x18\x01 \x03(\v2$.abi.v1.CssManifest.NpmPackagesEntryR\vnpmPackages\x12%\n" + + "\x0ecss_directives\x18\x02 \x03(\tR\rcssDirectives\x12(\n" + + "\x10input_css_append\x18\x03 \x01(\tR\x0einputCssAppend\x1a>\n" + + "\x10NpmPackagesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x80\x03\n" + + "\x13DirectoryExtensions\x122\n" + + "\x15boolean_filter_fields\x18\x01 \x03(\tR\x13booleanFilterFields\x120\n" + + "\x14select_filter_fields\x18\x02 \x03(\tR\x12selectFilterFields\x12O\n" + + "\fbadge_labels\x18\x03 \x03(\v2,.abi.v1.DirectoryExtensions.BadgeLabelsEntryR\vbadgeLabels\x12.\n" + + "\x13panel_section_count\x18\x04 \x01(\rR\x11panelSectionCount\x12.\n" + + "\x13pin_decorator_count\x18\x05 \x01(\rR\x11pinDecoratorCount\x1aR\n" + + "\x10BadgeLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12(\n" + + "\x05value\x18\x02 \x01(\v2\x12.abi.v1.BadgeLabelR\x05value:\x028\x01\"D\n" + + "\n" + + "BadgeLabel\x12\x1a\n" + + "\bpositive\x18\x01 \x01(\tR\bpositive\x12\x1a\n" + + "\bnegative\x18\x02 \x01(\tR\bnegative\"\x96\x01\n" + + "\x14MasterPageDefinition\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12%\n" + + "\x0epage_templates\x18\x03 \x03(\tR\rpageTemplates\x12/\n" + + "\x06blocks\x18\x04 \x03(\v2\x17.abi.v1.MasterPageBlockR\x06blocks\"\xd3\x01\n" + + "\x0fMasterPageBlock\x12\x1b\n" + + "\tblock_key\x18\x01 \x01(\tR\bblockKey\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12!\n" + + "\fcontent_json\x18\x03 \x01(\fR\vcontentJson\x12&\n" + + "\fhtml_content\x18\x04 \x01(\tH\x00R\vhtmlContent\x88\x01\x01\x12\x12\n" + + "\x04slot\x18\x05 \x01(\tR\x04slot\x12\x1d\n" + + "\n" + + "sort_order\x18\x06 \x01(\x05R\tsortOrderB\x0f\n" + + "\r_html_content\"\xc7\x01\n" + + "\x12CoreServiceBinding\x12!\n" + + "\fservice_name\x18\x01 \x01(\tR\vserviceName\x12N\n" + + "\fmethod_roles\x18\x02 \x03(\v2+.abi.v1.CoreServiceBinding.MethodRolesEntryR\vmethodRoles\x1a>\n" + + "\x10MethodRolesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01B0Z.git.dev.alexdunmow.com/block/core/abi/v1;abiv1b\x06proto3" + +var ( + file_v1_manifest_proto_rawDescOnce sync.Once + file_v1_manifest_proto_rawDescData []byte +) + +func file_v1_manifest_proto_rawDescGZIP() []byte { + file_v1_manifest_proto_rawDescOnce.Do(func() { + file_v1_manifest_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_v1_manifest_proto_rawDesc), len(file_v1_manifest_proto_rawDesc))) + }) + return file_v1_manifest_proto_rawDescData +} + +var file_v1_manifest_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_v1_manifest_proto_goTypes = []any{ + (*PluginManifest)(nil), // 0: abi.v1.PluginManifest + (*Dependency)(nil), // 1: abi.v1.Dependency + (*BlockMeta)(nil), // 2: abi.v1.BlockMeta + (*BlockTemplateOverride)(nil), // 3: abi.v1.BlockTemplateOverride + (*SystemTemplateMeta)(nil), // 4: abi.v1.SystemTemplateMeta + (*PageTemplateMeta)(nil), // 5: abi.v1.PageTemplateMeta + (*AdminPage)(nil), // 6: abi.v1.AdminPage + (*AiAction)(nil), // 7: abi.v1.AiAction + (*CssManifest)(nil), // 8: abi.v1.CssManifest + (*DirectoryExtensions)(nil), // 9: abi.v1.DirectoryExtensions + (*BadgeLabel)(nil), // 10: abi.v1.BadgeLabel + (*MasterPageDefinition)(nil), // 11: abi.v1.MasterPageDefinition + (*MasterPageBlock)(nil), // 12: abi.v1.MasterPageBlock + (*CoreServiceBinding)(nil), // 13: abi.v1.CoreServiceBinding + nil, // 14: abi.v1.PluginManifest.RbacMethodRolesEntry + nil, // 15: abi.v1.CssManifest.NpmPackagesEntry + nil, // 16: abi.v1.DirectoryExtensions.BadgeLabelsEntry + nil, // 17: abi.v1.CoreServiceBinding.MethodRolesEntry +} +var file_v1_manifest_proto_depIdxs = []int32{ + 1, // 0: abi.v1.PluginManifest.dependencies:type_name -> abi.v1.Dependency + 2, // 1: abi.v1.PluginManifest.blocks:type_name -> abi.v1.BlockMeta + 3, // 2: abi.v1.PluginManifest.block_template_overrides:type_name -> abi.v1.BlockTemplateOverride + 4, // 3: abi.v1.PluginManifest.system_templates:type_name -> abi.v1.SystemTemplateMeta + 5, // 4: abi.v1.PluginManifest.page_templates:type_name -> abi.v1.PageTemplateMeta + 6, // 5: abi.v1.PluginManifest.admin_pages:type_name -> abi.v1.AdminPage + 11, // 6: abi.v1.PluginManifest.master_pages:type_name -> abi.v1.MasterPageDefinition + 7, // 7: abi.v1.PluginManifest.ai_actions:type_name -> abi.v1.AiAction + 14, // 8: abi.v1.PluginManifest.rbac_method_roles:type_name -> abi.v1.PluginManifest.RbacMethodRolesEntry + 8, // 9: abi.v1.PluginManifest.css_manifest:type_name -> abi.v1.CssManifest + 9, // 10: abi.v1.PluginManifest.directory_extensions:type_name -> abi.v1.DirectoryExtensions + 13, // 11: abi.v1.PluginManifest.core_service_bindings:type_name -> abi.v1.CoreServiceBinding + 15, // 12: abi.v1.CssManifest.npm_packages:type_name -> abi.v1.CssManifest.NpmPackagesEntry + 16, // 13: abi.v1.DirectoryExtensions.badge_labels:type_name -> abi.v1.DirectoryExtensions.BadgeLabelsEntry + 12, // 14: abi.v1.MasterPageDefinition.blocks:type_name -> abi.v1.MasterPageBlock + 17, // 15: abi.v1.CoreServiceBinding.method_roles:type_name -> abi.v1.CoreServiceBinding.MethodRolesEntry + 10, // 16: abi.v1.DirectoryExtensions.BadgeLabelsEntry.value:type_name -> abi.v1.BadgeLabel + 17, // [17:17] is the sub-list for method output_type + 17, // [17:17] is the sub-list for method input_type + 17, // [17:17] is the sub-list for extension type_name + 17, // [17:17] is the sub-list for extension extendee + 0, // [0:17] is the sub-list for field type_name +} + +func init() { file_v1_manifest_proto_init() } +func file_v1_manifest_proto_init() { + if File_v1_manifest_proto != nil { + return + } + file_v1_manifest_proto_msgTypes[12].OneofWrappers = []any{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_v1_manifest_proto_rawDesc), len(file_v1_manifest_proto_rawDesc)), + NumEnums: 0, + NumMessages: 18, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_v1_manifest_proto_goTypes, + DependencyIndexes: file_v1_manifest_proto_depIdxs, + MessageInfos: file_v1_manifest_proto_msgTypes, + }.Build() + File_v1_manifest_proto = out.File + file_v1_manifest_proto_goTypes = nil + file_v1_manifest_proto_depIdxs = nil +} diff --git a/abi/v1/render.pb.go b/abi/v1/render.pb.go new file mode 100644 index 0000000..33f2b18 --- /dev/null +++ b/abi/v1/render.pb.go @@ -0,0 +1,1665 @@ +// render.proto — block/template render payloads and the explicit +// render-context envelope (WO-WZ-001). +// +// RenderContext serializes every value blocks currently read from ctx via +// core/blocks/context.go. Function-valued context entries (SlotRenderer, +// MediaResolver, EmbedResolver, the generic Queries value) cannot cross the +// wire; see core/docs/wasm-abi.md for how each one maps. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc (unknown) +// source: v1/render.proto + +package abiv1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// RenderBlockRequest renders one block (blocks.BlockFunc). +type RenderBlockRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + BlockKey string `protobuf:"bytes,1,opt,name=block_key,json=blockKey,proto3" json:"block_key,omitempty"` + // JSON encoding of the block's content map. + ContentJson []byte `protobuf:"bytes,2,opt,name=content_json,json=contentJson,proto3" json:"content_json,omitempty"` + RenderContext *RenderContext `protobuf:"bytes,3,opt,name=render_context,json=renderContext,proto3" json:"render_context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RenderBlockRequest) Reset() { + *x = RenderBlockRequest{} + mi := &file_v1_render_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RenderBlockRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RenderBlockRequest) ProtoMessage() {} + +func (x *RenderBlockRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RenderBlockRequest.ProtoReflect.Descriptor instead. +func (*RenderBlockRequest) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{0} +} + +func (x *RenderBlockRequest) GetBlockKey() string { + if x != nil { + return x.BlockKey + } + return "" +} + +func (x *RenderBlockRequest) GetContentJson() []byte { + if x != nil { + return x.ContentJson + } + return nil +} + +func (x *RenderBlockRequest) GetRenderContext() *RenderContext { + if x != nil { + return x.RenderContext + } + return nil +} + +type RenderBlockResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Html string `protobuf:"bytes,1,opt,name=html,proto3" json:"html,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RenderBlockResponse) Reset() { + *x = RenderBlockResponse{} + mi := &file_v1_render_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RenderBlockResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RenderBlockResponse) ProtoMessage() {} + +func (x *RenderBlockResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RenderBlockResponse.ProtoReflect.Descriptor instead. +func (*RenderBlockResponse) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{1} +} + +func (x *RenderBlockResponse) GetHtml() string { + if x != nil { + return x.Html + } + return "" +} + +// RenderTemplateRequest renders one template (templates.TemplateFunc). +type RenderTemplateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TemplateKey string `protobuf:"bytes,1,opt,name=template_key,json=templateKey,proto3" json:"template_key,omitempty"` + // JSON encoding of the template's doc map (the page document). + DocJson []byte `protobuf:"bytes,2,opt,name=doc_json,json=docJson,proto3" json:"doc_json,omitempty"` + RenderContext *RenderContext `protobuf:"bytes,3,opt,name=render_context,json=renderContext,proto3" json:"render_context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RenderTemplateRequest) Reset() { + *x = RenderTemplateRequest{} + mi := &file_v1_render_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RenderTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RenderTemplateRequest) ProtoMessage() {} + +func (x *RenderTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RenderTemplateRequest.ProtoReflect.Descriptor instead. +func (*RenderTemplateRequest) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{2} +} + +func (x *RenderTemplateRequest) GetTemplateKey() string { + if x != nil { + return x.TemplateKey + } + return "" +} + +func (x *RenderTemplateRequest) GetDocJson() []byte { + if x != nil { + return x.DocJson + } + return nil +} + +func (x *RenderTemplateRequest) GetRenderContext() *RenderContext { + if x != nil { + return x.RenderContext + } + return nil +} + +type RenderTemplateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Html []byte `protobuf:"bytes,1,opt,name=html,proto3" json:"html,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RenderTemplateResponse) Reset() { + *x = RenderTemplateResponse{} + mi := &file_v1_render_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RenderTemplateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RenderTemplateResponse) ProtoMessage() {} + +func (x *RenderTemplateResponse) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RenderTemplateResponse.ProtoReflect.Descriptor instead. +func (*RenderTemplateResponse) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{3} +} + +func (x *RenderTemplateResponse) GetHtml() []byte { + if x != nil { + return x.Html + } + return nil +} + +// RenderContext is the explicit envelope of the context values enumerated +// from core/blocks/context.go. Absent sub-messages mean the corresponding +// ctx value was not set (the getters return nil / zero values). +type RenderContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + // blocks.GetRequest — subset of *http.Request that render code reads. + Request *RequestInfo `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"` + // blocks.GetBlockContext — the pongo2 template data struct. + BlockContext *BlockContext `protobuf:"bytes,2,opt,name=block_context,json=blockContext,proto3" json:"block_context,omitempty"` + // blocks.GetTemplateKey. + TemplateKey string `protobuf:"bytes,3,opt,name=template_key,json=templateKey,proto3" json:"template_key,omitempty"` + // blocks.GetCurrentPage. + Page *PageContext `protobuf:"bytes,4,opt,name=page,proto3" json:"page,omitempty"` + // blocks.GetCurrentBlogPost. + Post *PostContext `protobuf:"bytes,5,opt,name=post,proto3" json:"post,omitempty"` + // blocks.GetCurrentAuthor. + Author *AuthorContext `protobuf:"bytes,6,opt,name=author,proto3" json:"author,omitempty"` + // blocks.GetCurrentCategory. + Category *CategoryContext `protobuf:"bytes,7,opt,name=category,proto3" json:"category,omitempty"` + // blocks.GetMasterPage; presence doubles as IsMasterPageContext. + MasterPage *MasterPageContext `protobuf:"bytes,8,opt,name=master_page,json=masterPage,proto3" json:"master_page,omitempty"` + // blocks.GetRequestedPath (404 pages). + RequestedPath string `protobuf:"bytes,9,opt,name=requested_path,json=requestedPath,proto3" json:"requested_path,omitempty"` + // blocks.GetInjectedSlots (master page rendering). + InjectedSlots map[string]string `protobuf:"bytes,10,rep,name=injected_slots,json=injectedSlots,proto3" json:"injected_slots,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // blocks.IsEditor. + IsEditor bool `protobuf:"varint,11,opt,name=is_editor,json=isEditor,proto3" json:"is_editor,omitempty"` + // blocks.GetExpectedSlots. + ExpectedSlots []string `protobuf:"bytes,12,rep,name=expected_slots,json=expectedSlots,proto3" json:"expected_slots,omitempty"` + // blocks.GetBlockID (UUID; empty for uuid.Nil). + BlockId string `protobuf:"bytes,13,opt,name=block_id,json=blockId,proto3" json:"block_id,omitempty"` + // blocks.GetCurrentPageID (UUID; empty for uuid.Nil). + CurrentPageId string `protobuf:"bytes,14,opt,name=current_page_id,json=currentPageId,proto3" json:"current_page_id,omitempty"` + // blocks.GetHumanProofBanner. + HumanProofBanner *HumanProofBanner `protobuf:"bytes,15,opt,name=human_proof_banner,json=humanProofBanner,proto3" json:"human_proof_banner,omitempty"` + // blocks.GetDetailRow. + DetailRow *DetailRow `protobuf:"bytes,16,opt,name=detail_row,json=detailRow,proto3" json:"detail_row,omitempty"` + // Active theme variables, JSON-encoded. + ThemeJson []byte `protobuf:"bytes,17,opt,name=theme_json,json=themeJson,proto3" json:"theme_json,omitempty"` + // Site locale (BCP 47). + Locale string `protobuf:"bytes,18,opt,name=locale,proto3" json:"locale,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RenderContext) Reset() { + *x = RenderContext{} + mi := &file_v1_render_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RenderContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RenderContext) ProtoMessage() {} + +func (x *RenderContext) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RenderContext.ProtoReflect.Descriptor instead. +func (*RenderContext) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{4} +} + +func (x *RenderContext) GetRequest() *RequestInfo { + if x != nil { + return x.Request + } + return nil +} + +func (x *RenderContext) GetBlockContext() *BlockContext { + if x != nil { + return x.BlockContext + } + return nil +} + +func (x *RenderContext) GetTemplateKey() string { + if x != nil { + return x.TemplateKey + } + return "" +} + +func (x *RenderContext) GetPage() *PageContext { + if x != nil { + return x.Page + } + return nil +} + +func (x *RenderContext) GetPost() *PostContext { + if x != nil { + return x.Post + } + return nil +} + +func (x *RenderContext) GetAuthor() *AuthorContext { + if x != nil { + return x.Author + } + return nil +} + +func (x *RenderContext) GetCategory() *CategoryContext { + if x != nil { + return x.Category + } + return nil +} + +func (x *RenderContext) GetMasterPage() *MasterPageContext { + if x != nil { + return x.MasterPage + } + return nil +} + +func (x *RenderContext) GetRequestedPath() string { + if x != nil { + return x.RequestedPath + } + return "" +} + +func (x *RenderContext) GetInjectedSlots() map[string]string { + if x != nil { + return x.InjectedSlots + } + return nil +} + +func (x *RenderContext) GetIsEditor() bool { + if x != nil { + return x.IsEditor + } + return false +} + +func (x *RenderContext) GetExpectedSlots() []string { + if x != nil { + return x.ExpectedSlots + } + return nil +} + +func (x *RenderContext) GetBlockId() string { + if x != nil { + return x.BlockId + } + return "" +} + +func (x *RenderContext) GetCurrentPageId() string { + if x != nil { + return x.CurrentPageId + } + return "" +} + +func (x *RenderContext) GetHumanProofBanner() *HumanProofBanner { + if x != nil { + return x.HumanProofBanner + } + return nil +} + +func (x *RenderContext) GetDetailRow() *DetailRow { + if x != nil { + return x.DetailRow + } + return nil +} + +func (x *RenderContext) GetThemeJson() []byte { + if x != nil { + return x.ThemeJson + } + return nil +} + +func (x *RenderContext) GetLocale() string { + if x != nil { + return x.Locale + } + return "" +} + +// RequestInfo carries the request subset render code reads from +// blocks.GetRequest (single-valued header map, matching BlockContext). +type RequestInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Method string `protobuf:"bytes,1,opt,name=method,proto3" json:"method,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` + Host string `protobuf:"bytes,4,opt,name=host,proto3" json:"host,omitempty"` + RawQuery string `protobuf:"bytes,5,opt,name=raw_query,json=rawQuery,proto3" json:"raw_query,omitempty"` + Headers map[string]string `protobuf:"bytes,6,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Cookies map[string]string `protobuf:"bytes,7,rep,name=cookies,proto3" json:"cookies,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + RemoteIp string `protobuf:"bytes,8,opt,name=remote_ip,json=remoteIp,proto3" json:"remote_ip,omitempty"` + Referrer string `protobuf:"bytes,9,opt,name=referrer,proto3" json:"referrer,omitempty"` + UserAgent string `protobuf:"bytes,10,opt,name=user_agent,json=userAgent,proto3" json:"user_agent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequestInfo) Reset() { + *x = RequestInfo{} + mi := &file_v1_render_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequestInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequestInfo) ProtoMessage() {} + +func (x *RequestInfo) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequestInfo.ProtoReflect.Descriptor instead. +func (*RequestInfo) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{5} +} + +func (x *RequestInfo) GetMethod() string { + if x != nil { + return x.Method + } + return "" +} + +func (x *RequestInfo) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *RequestInfo) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *RequestInfo) GetHost() string { + if x != nil { + return x.Host + } + return "" +} + +func (x *RequestInfo) GetRawQuery() string { + if x != nil { + return x.RawQuery + } + return "" +} + +func (x *RequestInfo) GetHeaders() map[string]string { + if x != nil { + return x.Headers + } + return nil +} + +func (x *RequestInfo) GetCookies() map[string]string { + if x != nil { + return x.Cookies + } + return nil +} + +func (x *RequestInfo) GetRemoteIp() string { + if x != nil { + return x.RemoteIp + } + return "" +} + +func (x *RequestInfo) GetReferrer() string { + if x != nil { + return x.Referrer + } + return "" +} + +func (x *RequestInfo) GetUserAgent() string { + if x != nil { + return x.UserAgent + } + return "" +} + +// PageContext mirrors blocks.PageContext. +type PageContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"` + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + PostType string `protobuf:"bytes,4,opt,name=post_type,json=postType,proto3" json:"post_type,omitempty"` // "page", "post", "master", "system" + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` // "published", "draft", "scheduled" + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PageContext) Reset() { + *x = PageContext{} + mi := &file_v1_render_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PageContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PageContext) ProtoMessage() {} + +func (x *PageContext) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PageContext.ProtoReflect.Descriptor instead. +func (*PageContext) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{6} +} + +func (x *PageContext) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PageContext) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +func (x *PageContext) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *PageContext) GetPostType() string { + if x != nil { + return x.PostType + } + return "" +} + +func (x *PageContext) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +// PostContext mirrors blocks.PostContext. +type PostContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"` + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + Excerpt string `protobuf:"bytes,4,opt,name=excerpt,proto3" json:"excerpt,omitempty"` + FeaturedImageUrl string `protobuf:"bytes,5,opt,name=featured_image_url,json=featuredImageUrl,proto3" json:"featured_image_url,omitempty"` + AuthorId string `protobuf:"bytes,6,opt,name=author_id,json=authorId,proto3" json:"author_id,omitempty"` // UUID + PublishedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=published_at,json=publishedAt,proto3" json:"published_at,omitempty"` + ReadingTime int32 `protobuf:"varint,8,opt,name=reading_time,json=readingTime,proto3" json:"reading_time,omitempty"` + IsFeatured bool `protobuf:"varint,9,opt,name=is_featured,json=isFeatured,proto3" json:"is_featured,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PostContext) Reset() { + *x = PostContext{} + mi := &file_v1_render_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PostContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PostContext) ProtoMessage() {} + +func (x *PostContext) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PostContext.ProtoReflect.Descriptor instead. +func (*PostContext) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{7} +} + +func (x *PostContext) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PostContext) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +func (x *PostContext) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *PostContext) GetExcerpt() string { + if x != nil { + return x.Excerpt + } + return "" +} + +func (x *PostContext) GetFeaturedImageUrl() string { + if x != nil { + return x.FeaturedImageUrl + } + return "" +} + +func (x *PostContext) GetAuthorId() string { + if x != nil { + return x.AuthorId + } + return "" +} + +func (x *PostContext) GetPublishedAt() *timestamppb.Timestamp { + if x != nil { + return x.PublishedAt + } + return nil +} + +func (x *PostContext) GetReadingTime() int32 { + if x != nil { + return x.ReadingTime + } + return 0 +} + +func (x *PostContext) GetIsFeatured() bool { + if x != nil { + return x.IsFeatured + } + return false +} + +// AuthorContext mirrors blocks.AuthorContext. +type AuthorContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Slug string `protobuf:"bytes,3,opt,name=slug,proto3" json:"slug,omitempty"` + Bio string `protobuf:"bytes,4,opt,name=bio,proto3" json:"bio,omitempty"` + AvatarUrl string `protobuf:"bytes,5,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AuthorContext) Reset() { + *x = AuthorContext{} + mi := &file_v1_render_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AuthorContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthorContext) ProtoMessage() {} + +func (x *AuthorContext) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthorContext.ProtoReflect.Descriptor instead. +func (*AuthorContext) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{8} +} + +func (x *AuthorContext) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AuthorContext) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *AuthorContext) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +func (x *AuthorContext) GetBio() string { + if x != nil { + return x.Bio + } + return "" +} + +func (x *AuthorContext) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +// CategoryContext mirrors blocks.CategoryContext. +type CategoryContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Slug string `protobuf:"bytes,3,opt,name=slug,proto3" json:"slug,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CategoryContext) Reset() { + *x = CategoryContext{} + mi := &file_v1_render_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CategoryContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CategoryContext) ProtoMessage() {} + +func (x *CategoryContext) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CategoryContext.ProtoReflect.Descriptor instead. +func (*CategoryContext) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{9} +} + +func (x *CategoryContext) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *CategoryContext) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *CategoryContext) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +// MasterPageContext mirrors blocks.MasterPageContext. +type MasterPageContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID + Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"` + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MasterPageContext) Reset() { + *x = MasterPageContext{} + mi := &file_v1_render_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MasterPageContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MasterPageContext) ProtoMessage() {} + +func (x *MasterPageContext) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MasterPageContext.ProtoReflect.Descriptor instead. +func (*MasterPageContext) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{10} +} + +func (x *MasterPageContext) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *MasterPageContext) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +func (x *MasterPageContext) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +// HumanProofBanner mirrors blocks.HumanProofBannerData. +type HumanProofBanner struct { + state protoimpl.MessageState `protogen:"open.v1"` + ActiveTimeMinutes int32 `protobuf:"varint,1,opt,name=active_time_minutes,json=activeTimeMinutes,proto3" json:"active_time_minutes,omitempty"` + KeystrokeCount int32 `protobuf:"varint,2,opt,name=keystroke_count,json=keystrokeCount,proto3" json:"keystroke_count,omitempty"` + SessionCount int32 `protobuf:"varint,3,opt,name=session_count,json=sessionCount,proto3" json:"session_count,omitempty"` + PostSlug string `protobuf:"bytes,4,opt,name=post_slug,json=postSlug,proto3" json:"post_slug,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HumanProofBanner) Reset() { + *x = HumanProofBanner{} + mi := &file_v1_render_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HumanProofBanner) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HumanProofBanner) ProtoMessage() {} + +func (x *HumanProofBanner) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HumanProofBanner.ProtoReflect.Descriptor instead. +func (*HumanProofBanner) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{11} +} + +func (x *HumanProofBanner) GetActiveTimeMinutes() int32 { + if x != nil { + return x.ActiveTimeMinutes + } + return 0 +} + +func (x *HumanProofBanner) GetKeystrokeCount() int32 { + if x != nil { + return x.KeystrokeCount + } + return 0 +} + +func (x *HumanProofBanner) GetSessionCount() int32 { + if x != nil { + return x.SessionCount + } + return 0 +} + +func (x *HumanProofBanner) GetPostSlug() string { + if x != nil { + return x.PostSlug + } + return "" +} + +// DetailRow mirrors blocks.DetailRowInfo. +type DetailRow struct { + state protoimpl.MessageState `protogen:"open.v1"` + TableId string `protobuf:"bytes,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"` + RowId string `protobuf:"bytes,2,opt,name=row_id,json=rowId,proto3" json:"row_id,omitempty"` + // JSON encoding of the row data map. + DataJson []byte `protobuf:"bytes,3,opt,name=data_json,json=dataJson,proto3" json:"data_json,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DetailRow) Reset() { + *x = DetailRow{} + mi := &file_v1_render_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DetailRow) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DetailRow) ProtoMessage() {} + +func (x *DetailRow) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DetailRow.ProtoReflect.Descriptor instead. +func (*DetailRow) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{12} +} + +func (x *DetailRow) GetTableId() string { + if x != nil { + return x.TableId + } + return "" +} + +func (x *DetailRow) GetRowId() string { + if x != nil { + return x.RowId + } + return "" +} + +func (x *DetailRow) GetDataJson() []byte { + if x != nil { + return x.DataJson + } + return nil +} + +// BlockContext mirrors blocks.BlockContext (the pongo2 data struct) 1:1. +// map[string]any fields travel as JSON bytes. +type BlockContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Slug string `protobuf:"bytes,3,opt,name=slug,proto3" json:"slug,omitempty"` + PageId string `protobuf:"bytes,4,opt,name=page_id,json=pageId,proto3" json:"page_id,omitempty"` + PageTitle string `protobuf:"bytes,5,opt,name=page_title,json=pageTitle,proto3" json:"page_title,omitempty"` + TemplateKey string `protobuf:"bytes,6,opt,name=template_key,json=templateKey,proto3" json:"template_key,omitempty"` + IsEditor bool `protobuf:"varint,7,opt,name=is_editor,json=isEditor,proto3" json:"is_editor,omitempty"` + Timestamp int64 `protobuf:"varint,8,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Now *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=now,proto3" json:"now,omitempty"` + IsLoggedIn bool `protobuf:"varint,10,opt,name=is_logged_in,json=isLoggedIn,proto3" json:"is_logged_in,omitempty"` + UserId string `protobuf:"bytes,11,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + UserEmail string `protobuf:"bytes,12,opt,name=user_email,json=userEmail,proto3" json:"user_email,omitempty"` + UserRole string `protobuf:"bytes,13,opt,name=user_role,json=userRole,proto3" json:"user_role,omitempty"` + Method string `protobuf:"bytes,14,opt,name=method,proto3" json:"method,omitempty"` + Host string `protobuf:"bytes,15,opt,name=host,proto3" json:"host,omitempty"` + Query map[string]string `protobuf:"bytes,16,rep,name=query,proto3" json:"query,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Referrer string `protobuf:"bytes,17,opt,name=referrer,proto3" json:"referrer,omitempty"` + UserAgent string `protobuf:"bytes,18,opt,name=user_agent,json=userAgent,proto3" json:"user_agent,omitempty"` + Ip string `protobuf:"bytes,19,opt,name=ip,proto3" json:"ip,omitempty"` + Cookies map[string]string `protobuf:"bytes,20,rep,name=cookies,proto3" json:"cookies,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Headers map[string]string `protobuf:"bytes,21,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Country string `protobuf:"bytes,22,opt,name=country,proto3" json:"country,omitempty"` + City string `protobuf:"bytes,23,opt,name=city,proto3" json:"city,omitempty"` + Timezone string `protobuf:"bytes,24,opt,name=timezone,proto3" json:"timezone,omitempty"` + CurrentAuthorJson []byte `protobuf:"bytes,25,opt,name=current_author_json,json=currentAuthorJson,proto3" json:"current_author_json,omitempty"` + CurrentPostJson []byte `protobuf:"bytes,26,opt,name=current_post_json,json=currentPostJson,proto3" json:"current_post_json,omitempty"` + CurrentCategoryJson []byte `protobuf:"bytes,27,opt,name=current_category_json,json=currentCategoryJson,proto3" json:"current_category_json,omitempty"` + SiteJson []byte `protobuf:"bytes,28,opt,name=site_json,json=siteJson,proto3" json:"site_json,omitempty"` + IsPublicLoggedIn bool `protobuf:"varint,29,opt,name=is_public_logged_in,json=isPublicLoggedIn,proto3" json:"is_public_logged_in,omitempty"` + PublicUserId string `protobuf:"bytes,30,opt,name=public_user_id,json=publicUserId,proto3" json:"public_user_id,omitempty"` + PublicUsername string `protobuf:"bytes,31,opt,name=public_username,json=publicUsername,proto3" json:"public_username,omitempty"` + PublicDisplayName string `protobuf:"bytes,32,opt,name=public_display_name,json=publicDisplayName,proto3" json:"public_display_name,omitempty"` + PublicEmailVerified bool `protobuf:"varint,33,opt,name=public_email_verified,json=publicEmailVerified,proto3" json:"public_email_verified,omitempty"` + DetailRowId string `protobuf:"bytes,34,opt,name=detail_row_id,json=detailRowId,proto3" json:"detail_row_id,omitempty"` + DetailTableId string `protobuf:"bytes,35,opt,name=detail_table_id,json=detailTableId,proto3" json:"detail_table_id,omitempty"` + DetailRowDataJson []byte `protobuf:"bytes,36,opt,name=detail_row_data_json,json=detailRowDataJson,proto3" json:"detail_row_data_json,omitempty"` + BlogIndexUrl string `protobuf:"bytes,37,opt,name=blog_index_url,json=blogIndexUrl,proto3" json:"blog_index_url,omitempty"` + CategoryPageUrl string `protobuf:"bytes,38,opt,name=category_page_url,json=categoryPageUrl,proto3" json:"category_page_url,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BlockContext) Reset() { + *x = BlockContext{} + mi := &file_v1_render_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BlockContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlockContext) ProtoMessage() {} + +func (x *BlockContext) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlockContext.ProtoReflect.Descriptor instead. +func (*BlockContext) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{13} +} + +func (x *BlockContext) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *BlockContext) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *BlockContext) GetSlug() string { + if x != nil { + return x.Slug + } + return "" +} + +func (x *BlockContext) GetPageId() string { + if x != nil { + return x.PageId + } + return "" +} + +func (x *BlockContext) GetPageTitle() string { + if x != nil { + return x.PageTitle + } + return "" +} + +func (x *BlockContext) GetTemplateKey() string { + if x != nil { + return x.TemplateKey + } + return "" +} + +func (x *BlockContext) GetIsEditor() bool { + if x != nil { + return x.IsEditor + } + return false +} + +func (x *BlockContext) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *BlockContext) GetNow() *timestamppb.Timestamp { + if x != nil { + return x.Now + } + return nil +} + +func (x *BlockContext) GetIsLoggedIn() bool { + if x != nil { + return x.IsLoggedIn + } + return false +} + +func (x *BlockContext) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *BlockContext) GetUserEmail() string { + if x != nil { + return x.UserEmail + } + return "" +} + +func (x *BlockContext) GetUserRole() string { + if x != nil { + return x.UserRole + } + return "" +} + +func (x *BlockContext) GetMethod() string { + if x != nil { + return x.Method + } + return "" +} + +func (x *BlockContext) GetHost() string { + if x != nil { + return x.Host + } + return "" +} + +func (x *BlockContext) GetQuery() map[string]string { + if x != nil { + return x.Query + } + return nil +} + +func (x *BlockContext) GetReferrer() string { + if x != nil { + return x.Referrer + } + return "" +} + +func (x *BlockContext) GetUserAgent() string { + if x != nil { + return x.UserAgent + } + return "" +} + +func (x *BlockContext) GetIp() string { + if x != nil { + return x.Ip + } + return "" +} + +func (x *BlockContext) GetCookies() map[string]string { + if x != nil { + return x.Cookies + } + return nil +} + +func (x *BlockContext) GetHeaders() map[string]string { + if x != nil { + return x.Headers + } + return nil +} + +func (x *BlockContext) GetCountry() string { + if x != nil { + return x.Country + } + return "" +} + +func (x *BlockContext) GetCity() string { + if x != nil { + return x.City + } + return "" +} + +func (x *BlockContext) GetTimezone() string { + if x != nil { + return x.Timezone + } + return "" +} + +func (x *BlockContext) GetCurrentAuthorJson() []byte { + if x != nil { + return x.CurrentAuthorJson + } + return nil +} + +func (x *BlockContext) GetCurrentPostJson() []byte { + if x != nil { + return x.CurrentPostJson + } + return nil +} + +func (x *BlockContext) GetCurrentCategoryJson() []byte { + if x != nil { + return x.CurrentCategoryJson + } + return nil +} + +func (x *BlockContext) GetSiteJson() []byte { + if x != nil { + return x.SiteJson + } + return nil +} + +func (x *BlockContext) GetIsPublicLoggedIn() bool { + if x != nil { + return x.IsPublicLoggedIn + } + return false +} + +func (x *BlockContext) GetPublicUserId() string { + if x != nil { + return x.PublicUserId + } + return "" +} + +func (x *BlockContext) GetPublicUsername() string { + if x != nil { + return x.PublicUsername + } + return "" +} + +func (x *BlockContext) GetPublicDisplayName() string { + if x != nil { + return x.PublicDisplayName + } + return "" +} + +func (x *BlockContext) GetPublicEmailVerified() bool { + if x != nil { + return x.PublicEmailVerified + } + return false +} + +func (x *BlockContext) GetDetailRowId() string { + if x != nil { + return x.DetailRowId + } + return "" +} + +func (x *BlockContext) GetDetailTableId() string { + if x != nil { + return x.DetailTableId + } + return "" +} + +func (x *BlockContext) GetDetailRowDataJson() []byte { + if x != nil { + return x.DetailRowDataJson + } + return nil +} + +func (x *BlockContext) GetBlogIndexUrl() string { + if x != nil { + return x.BlogIndexUrl + } + return "" +} + +func (x *BlockContext) GetCategoryPageUrl() string { + if x != nil { + return x.CategoryPageUrl + } + return "" +} + +var File_v1_render_proto protoreflect.FileDescriptor + +const file_v1_render_proto_rawDesc = "" + + "\n" + + "\x0fv1/render.proto\x12\x06abi.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"\x92\x01\n" + + "\x12RenderBlockRequest\x12\x1b\n" + + "\tblock_key\x18\x01 \x01(\tR\bblockKey\x12!\n" + + "\fcontent_json\x18\x02 \x01(\fR\vcontentJson\x12<\n" + + "\x0erender_context\x18\x03 \x01(\v2\x15.abi.v1.RenderContextR\rrenderContext\")\n" + + "\x13RenderBlockResponse\x12\x12\n" + + "\x04html\x18\x01 \x01(\tR\x04html\"\x93\x01\n" + + "\x15RenderTemplateRequest\x12!\n" + + "\ftemplate_key\x18\x01 \x01(\tR\vtemplateKey\x12\x19\n" + + "\bdoc_json\x18\x02 \x01(\fR\adocJson\x12<\n" + + "\x0erender_context\x18\x03 \x01(\v2\x15.abi.v1.RenderContextR\rrenderContext\",\n" + + "\x16RenderTemplateResponse\x12\x12\n" + + "\x04html\x18\x01 \x01(\fR\x04html\"\x80\a\n" + + "\rRenderContext\x12-\n" + + "\arequest\x18\x01 \x01(\v2\x13.abi.v1.RequestInfoR\arequest\x129\n" + + "\rblock_context\x18\x02 \x01(\v2\x14.abi.v1.BlockContextR\fblockContext\x12!\n" + + "\ftemplate_key\x18\x03 \x01(\tR\vtemplateKey\x12'\n" + + "\x04page\x18\x04 \x01(\v2\x13.abi.v1.PageContextR\x04page\x12'\n" + + "\x04post\x18\x05 \x01(\v2\x13.abi.v1.PostContextR\x04post\x12-\n" + + "\x06author\x18\x06 \x01(\v2\x15.abi.v1.AuthorContextR\x06author\x123\n" + + "\bcategory\x18\a \x01(\v2\x17.abi.v1.CategoryContextR\bcategory\x12:\n" + + "\vmaster_page\x18\b \x01(\v2\x19.abi.v1.MasterPageContextR\n" + + "masterPage\x12%\n" + + "\x0erequested_path\x18\t \x01(\tR\rrequestedPath\x12O\n" + + "\x0einjected_slots\x18\n" + + " \x03(\v2(.abi.v1.RenderContext.InjectedSlotsEntryR\rinjectedSlots\x12\x1b\n" + + "\tis_editor\x18\v \x01(\bR\bisEditor\x12%\n" + + "\x0eexpected_slots\x18\f \x03(\tR\rexpectedSlots\x12\x19\n" + + "\bblock_id\x18\r \x01(\tR\ablockId\x12&\n" + + "\x0fcurrent_page_id\x18\x0e \x01(\tR\rcurrentPageId\x12F\n" + + "\x12human_proof_banner\x18\x0f \x01(\v2\x18.abi.v1.HumanProofBannerR\x10humanProofBanner\x120\n" + + "\n" + + "detail_row\x18\x10 \x01(\v2\x11.abi.v1.DetailRowR\tdetailRow\x12\x1d\n" + + "\n" + + "theme_json\x18\x11 \x01(\fR\tthemeJson\x12\x16\n" + + "\x06locale\x18\x12 \x01(\tR\x06locale\x1a@\n" + + "\x12InjectedSlotsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xc4\x03\n" + + "\vRequestInfo\x12\x16\n" + + "\x06method\x18\x01 \x01(\tR\x06method\x12\x10\n" + + "\x03url\x18\x02 \x01(\tR\x03url\x12\x12\n" + + "\x04path\x18\x03 \x01(\tR\x04path\x12\x12\n" + + "\x04host\x18\x04 \x01(\tR\x04host\x12\x1b\n" + + "\traw_query\x18\x05 \x01(\tR\brawQuery\x12:\n" + + "\aheaders\x18\x06 \x03(\v2 .abi.v1.RequestInfo.HeadersEntryR\aheaders\x12:\n" + + "\acookies\x18\a \x03(\v2 .abi.v1.RequestInfo.CookiesEntryR\acookies\x12\x1b\n" + + "\tremote_ip\x18\b \x01(\tR\bremoteIp\x12\x1a\n" + + "\breferrer\x18\t \x01(\tR\breferrer\x12\x1d\n" + + "\n" + + "user_agent\x18\n" + + " \x01(\tR\tuserAgent\x1a:\n" + + "\fHeadersEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a:\n" + + "\fCookiesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"|\n" + + "\vPageContext\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04slug\x18\x02 \x01(\tR\x04slug\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\x12\x1b\n" + + "\tpost_type\x18\x04 \x01(\tR\bpostType\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\"\xaf\x02\n" + + "\vPostContext\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04slug\x18\x02 \x01(\tR\x04slug\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\x12\x18\n" + + "\aexcerpt\x18\x04 \x01(\tR\aexcerpt\x12,\n" + + "\x12featured_image_url\x18\x05 \x01(\tR\x10featuredImageUrl\x12\x1b\n" + + "\tauthor_id\x18\x06 \x01(\tR\bauthorId\x12=\n" + + "\fpublished_at\x18\a \x01(\v2\x1a.google.protobuf.TimestampR\vpublishedAt\x12!\n" + + "\freading_time\x18\b \x01(\x05R\vreadingTime\x12\x1f\n" + + "\vis_featured\x18\t \x01(\bR\n" + + "isFeatured\"x\n" + + "\rAuthorContext\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x12\n" + + "\x04slug\x18\x03 \x01(\tR\x04slug\x12\x10\n" + + "\x03bio\x18\x04 \x01(\tR\x03bio\x12\x1d\n" + + "\n" + + "avatar_url\x18\x05 \x01(\tR\tavatarUrl\"I\n" + + "\x0fCategoryContext\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x12\n" + + "\x04slug\x18\x03 \x01(\tR\x04slug\"M\n" + + "\x11MasterPageContext\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04slug\x18\x02 \x01(\tR\x04slug\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\"\xad\x01\n" + + "\x10HumanProofBanner\x12.\n" + + "\x13active_time_minutes\x18\x01 \x01(\x05R\x11activeTimeMinutes\x12'\n" + + "\x0fkeystroke_count\x18\x02 \x01(\x05R\x0ekeystrokeCount\x12#\n" + + "\rsession_count\x18\x03 \x01(\x05R\fsessionCount\x12\x1b\n" + + "\tpost_slug\x18\x04 \x01(\tR\bpostSlug\"Z\n" + + "\tDetailRow\x12\x19\n" + + "\btable_id\x18\x01 \x01(\tR\atableId\x12\x15\n" + + "\x06row_id\x18\x02 \x01(\tR\x05rowId\x12\x1b\n" + + "\tdata_json\x18\x03 \x01(\fR\bdataJson\"\x85\f\n" + + "\fBlockContext\x12\x10\n" + + "\x03url\x18\x01 \x01(\tR\x03url\x12\x12\n" + + "\x04path\x18\x02 \x01(\tR\x04path\x12\x12\n" + + "\x04slug\x18\x03 \x01(\tR\x04slug\x12\x17\n" + + "\apage_id\x18\x04 \x01(\tR\x06pageId\x12\x1d\n" + + "\n" + + "page_title\x18\x05 \x01(\tR\tpageTitle\x12!\n" + + "\ftemplate_key\x18\x06 \x01(\tR\vtemplateKey\x12\x1b\n" + + "\tis_editor\x18\a \x01(\bR\bisEditor\x12\x1c\n" + + "\ttimestamp\x18\b \x01(\x03R\ttimestamp\x12,\n" + + "\x03now\x18\t \x01(\v2\x1a.google.protobuf.TimestampR\x03now\x12 \n" + + "\fis_logged_in\x18\n" + + " \x01(\bR\n" + + "isLoggedIn\x12\x17\n" + + "\auser_id\x18\v \x01(\tR\x06userId\x12\x1d\n" + + "\n" + + "user_email\x18\f \x01(\tR\tuserEmail\x12\x1b\n" + + "\tuser_role\x18\r \x01(\tR\buserRole\x12\x16\n" + + "\x06method\x18\x0e \x01(\tR\x06method\x12\x12\n" + + "\x04host\x18\x0f \x01(\tR\x04host\x125\n" + + "\x05query\x18\x10 \x03(\v2\x1f.abi.v1.BlockContext.QueryEntryR\x05query\x12\x1a\n" + + "\breferrer\x18\x11 \x01(\tR\breferrer\x12\x1d\n" + + "\n" + + "user_agent\x18\x12 \x01(\tR\tuserAgent\x12\x0e\n" + + "\x02ip\x18\x13 \x01(\tR\x02ip\x12;\n" + + "\acookies\x18\x14 \x03(\v2!.abi.v1.BlockContext.CookiesEntryR\acookies\x12;\n" + + "\aheaders\x18\x15 \x03(\v2!.abi.v1.BlockContext.HeadersEntryR\aheaders\x12\x18\n" + + "\acountry\x18\x16 \x01(\tR\acountry\x12\x12\n" + + "\x04city\x18\x17 \x01(\tR\x04city\x12\x1a\n" + + "\btimezone\x18\x18 \x01(\tR\btimezone\x12.\n" + + "\x13current_author_json\x18\x19 \x01(\fR\x11currentAuthorJson\x12*\n" + + "\x11current_post_json\x18\x1a \x01(\fR\x0fcurrentPostJson\x122\n" + + "\x15current_category_json\x18\x1b \x01(\fR\x13currentCategoryJson\x12\x1b\n" + + "\tsite_json\x18\x1c \x01(\fR\bsiteJson\x12-\n" + + "\x13is_public_logged_in\x18\x1d \x01(\bR\x10isPublicLoggedIn\x12$\n" + + "\x0epublic_user_id\x18\x1e \x01(\tR\fpublicUserId\x12'\n" + + "\x0fpublic_username\x18\x1f \x01(\tR\x0epublicUsername\x12.\n" + + "\x13public_display_name\x18 \x01(\tR\x11publicDisplayName\x122\n" + + "\x15public_email_verified\x18! \x01(\bR\x13publicEmailVerified\x12\"\n" + + "\rdetail_row_id\x18\" \x01(\tR\vdetailRowId\x12&\n" + + "\x0fdetail_table_id\x18# \x01(\tR\rdetailTableId\x12/\n" + + "\x14detail_row_data_json\x18$ \x01(\fR\x11detailRowDataJson\x12$\n" + + "\x0eblog_index_url\x18% \x01(\tR\fblogIndexUrl\x12*\n" + + "\x11category_page_url\x18& \x01(\tR\x0fcategoryPageUrl\x1a8\n" + + "\n" + + "QueryEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a:\n" + + "\fCookiesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a:\n" + + "\fHeadersEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01B0Z.git.dev.alexdunmow.com/block/core/abi/v1;abiv1b\x06proto3" + +var ( + file_v1_render_proto_rawDescOnce sync.Once + file_v1_render_proto_rawDescData []byte +) + +func file_v1_render_proto_rawDescGZIP() []byte { + file_v1_render_proto_rawDescOnce.Do(func() { + file_v1_render_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_v1_render_proto_rawDesc), len(file_v1_render_proto_rawDesc))) + }) + return file_v1_render_proto_rawDescData +} + +var file_v1_render_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_v1_render_proto_goTypes = []any{ + (*RenderBlockRequest)(nil), // 0: abi.v1.RenderBlockRequest + (*RenderBlockResponse)(nil), // 1: abi.v1.RenderBlockResponse + (*RenderTemplateRequest)(nil), // 2: abi.v1.RenderTemplateRequest + (*RenderTemplateResponse)(nil), // 3: abi.v1.RenderTemplateResponse + (*RenderContext)(nil), // 4: abi.v1.RenderContext + (*RequestInfo)(nil), // 5: abi.v1.RequestInfo + (*PageContext)(nil), // 6: abi.v1.PageContext + (*PostContext)(nil), // 7: abi.v1.PostContext + (*AuthorContext)(nil), // 8: abi.v1.AuthorContext + (*CategoryContext)(nil), // 9: abi.v1.CategoryContext + (*MasterPageContext)(nil), // 10: abi.v1.MasterPageContext + (*HumanProofBanner)(nil), // 11: abi.v1.HumanProofBanner + (*DetailRow)(nil), // 12: abi.v1.DetailRow + (*BlockContext)(nil), // 13: abi.v1.BlockContext + nil, // 14: abi.v1.RenderContext.InjectedSlotsEntry + nil, // 15: abi.v1.RequestInfo.HeadersEntry + nil, // 16: abi.v1.RequestInfo.CookiesEntry + nil, // 17: abi.v1.BlockContext.QueryEntry + nil, // 18: abi.v1.BlockContext.CookiesEntry + nil, // 19: abi.v1.BlockContext.HeadersEntry + (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp +} +var file_v1_render_proto_depIdxs = []int32{ + 4, // 0: abi.v1.RenderBlockRequest.render_context:type_name -> abi.v1.RenderContext + 4, // 1: abi.v1.RenderTemplateRequest.render_context:type_name -> abi.v1.RenderContext + 5, // 2: abi.v1.RenderContext.request:type_name -> abi.v1.RequestInfo + 13, // 3: abi.v1.RenderContext.block_context:type_name -> abi.v1.BlockContext + 6, // 4: abi.v1.RenderContext.page:type_name -> abi.v1.PageContext + 7, // 5: abi.v1.RenderContext.post:type_name -> abi.v1.PostContext + 8, // 6: abi.v1.RenderContext.author:type_name -> abi.v1.AuthorContext + 9, // 7: abi.v1.RenderContext.category:type_name -> abi.v1.CategoryContext + 10, // 8: abi.v1.RenderContext.master_page:type_name -> abi.v1.MasterPageContext + 14, // 9: abi.v1.RenderContext.injected_slots:type_name -> abi.v1.RenderContext.InjectedSlotsEntry + 11, // 10: abi.v1.RenderContext.human_proof_banner:type_name -> abi.v1.HumanProofBanner + 12, // 11: abi.v1.RenderContext.detail_row:type_name -> abi.v1.DetailRow + 15, // 12: abi.v1.RequestInfo.headers:type_name -> abi.v1.RequestInfo.HeadersEntry + 16, // 13: abi.v1.RequestInfo.cookies:type_name -> abi.v1.RequestInfo.CookiesEntry + 20, // 14: abi.v1.PostContext.published_at:type_name -> google.protobuf.Timestamp + 20, // 15: abi.v1.BlockContext.now:type_name -> google.protobuf.Timestamp + 17, // 16: abi.v1.BlockContext.query:type_name -> abi.v1.BlockContext.QueryEntry + 18, // 17: abi.v1.BlockContext.cookies:type_name -> abi.v1.BlockContext.CookiesEntry + 19, // 18: abi.v1.BlockContext.headers:type_name -> abi.v1.BlockContext.HeadersEntry + 19, // [19:19] is the sub-list for method output_type + 19, // [19:19] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name +} + +func init() { file_v1_render_proto_init() } +func file_v1_render_proto_init() { + if File_v1_render_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_v1_render_proto_rawDesc), len(file_v1_render_proto_rawDesc)), + NumEnums: 0, + NumMessages: 20, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_v1_render_proto_goTypes, + DependencyIndexes: file_v1_render_proto_depIdxs, + MessageInfos: file_v1_render_proto_msgTypes, + }.Build() + File_v1_render_proto = out.File + file_v1_render_proto_goTypes = nil + file_v1_render_proto_depIdxs = nil +} diff --git a/docs/wasm-abi.md b/docs/wasm-abi.md new file mode 100644 index 0000000..fc4085b --- /dev/null +++ b/docs/wasm-abi.md @@ -0,0 +1,197 @@ +# Wasm Plugin ABI (v1) + +The host↔guest wire contract for wazero-loaded BlockNinja plugins. +Schema: [`abi/proto/v1/`](../abi/proto/v1/) (buf module [`abi/`](../abi/)) — +generated Go: `git.dev.alexdunmow.com/block/core/abi/v1` (`abiv1`). +Design rationale: the wasm plugin migration design spec in the cms repo +(`docs/superpowers/specs/2026-07-03-wasm-plugin-migration-design.md`). + +Regenerate with `make abi` (runs `buf lint` + `buf generate` in `abi/`). +The `abi/` buf module is deliberately separate from the repo-root buf config: +`proto/` is the shared block/proto git submodule (service API contracts), +while this ABI is SDK-internal and versions in lockstep with the guest shim, +so it lives repo-local. + +## Versioning — `abi_version` + +`PluginManifest.abi_version` (field 1, `manifest.proto`) carries the ABI +**major** version the plugin was built against. Current value: **1**. + +- The host **rejects** any manifest whose major version it does not support — + at install/publish time (manifest read) and again at `DESCRIBE` + (`DescribeRequest.host_abi_version` tells the guest who is calling, so a + newer guest shim can refuse an older host symmetrically). +- Within a major version, evolution is protobuf-additive only: new fields, + new `Hook` values, new capability methods. Removing or renaming anything + wire-visible requires a major bump. `buf breaking` (FILE rules, configured + in `abi/buf.yaml`) enforces this against the previous commit. + +## Calling convention (ptr+len, packed u64) + +wasm exports can only pass `i32/i64/f32/f64`, so all payloads cross as +protobuf bytes in guest linear memory. The guest exports (via +`go:wasmexport`): + +| Export | Signature | Purpose | +|---|---|---| +| `bn_alloc` | `(size: u32) → ptr: u32` | Host asks the guest to allocate `size` bytes in guest memory. The returned region stays valid until the current `bn_invoke` call returns. | +| `bn_invoke` | `(hook_id: u32, ptr: u32, len: u32) → packed: u64` | Host writes a serialized `InvokeRequest` at `(ptr, len)` (memory from `bn_alloc`) and calls with `hook_id = Hook` enum value (duplicated in the envelope for decode sanity). The return packs the response location: `packed = (ptr << 32) | len`, framing a serialized `InvokeResponse` in guest memory, valid until the next `bn_invoke` on this instance. | + +Host functions (guest→host capability calls, module `env`) use the same +shape in reverse: the guest passes `(ptr, len)` framing a serialized +`HostCallRequest`; the host returns a packed `u64` framing a +`HostCallResponse` that it wrote into guest memory via `bn_alloc`. + +A `packed` value of `0` means the callee could not even produce an envelope +(allocation failure / trap); the caller treats it as +`ABI_ERROR_CODE_INTERNAL` and discards the instance. + +Instances are single-threaded: one `bn_invoke` at a time per instance; +concurrency comes from the per-plugin instance pool. + +## Hook catalog (`invoke.proto`) + +Host→guest calls. `InvokeRequest{hook, payload, deadline_ms}` → +`InvokeResponse{payload, error}`; `payload` holds the hook-specific message: + +| Hook | Request / Response | Fires | +|---|---|---| +| `HOOK_RENDER_BLOCK` | `RenderBlockRequest` / `RenderBlockResponse` | Public render of one plugin block (`blocks.BlockFunc`). | +| `HOOK_RENDER_TEMPLATE` | `RenderTemplateRequest` / `RenderTemplateResponse` | Render of one plugin template (`templates.TemplateFunc`). | +| `HOOK_HANDLE_HTTP` | `HttpRequest` / `HttpResponse` | Buffered HTTP/ConnectRPC request forwarded to the guest's internal mux (only when `manifest.has_http_handler`). No streaming/SSE/WebSocket in v1. | +| `HOOK_JOB` | `JobRequest` / `JobResponse` | Background job dispatch for a `manifest.job_types` entry (`plugin.JobHandlerFunc`). | +| `HOOK_LOAD` | `LoadRequest` / `LoadResponse` | Plugin load (`PluginRegistration.Load`); `LoadRequest.host_config` delivers `AppURL`/`MediaPath`. | +| `HOOK_UNLOAD` | `UnloadRequest` / `UnloadResponse` | Plugin unload (`PluginRegistration.Unload`). | +| `HOOK_RAG_FETCH` | `RagFetchRequest` / `RagFetchResponse` | RAG re-index callback for a `manifest.rag_content_fetcher_types` entry (`plugin.ContentFetcher`). | +| `HOOK_MEDIA_HOOK` | `MediaHookRequest` / `MediaHookResponse` | Media lifecycle event (`plugin.MediaHooksProvider`), only when `manifest.has_media_hooks`. | +| `HOOK_DESCRIBE` | `DescribeRequest` / `DescribeResponse` | Publish-time manifest capture; the result is stored as `manifest.pb` in the `.bnp` artifact. Never called on a live instance. | + +## Capability calls (`capability.proto`, `db.proto`) + +Guest→host. Envelope: `HostCallRequest{method, payload}` → +`HostCallResponse{payload, error}`. `method` is `"."`; +each pair mirrors one Go interface method from `CoreServices` 1:1 +(UUIDs as canonical strings, `map[string]any`/JSON as bytes): + +| Family | Methods | Go surface | +|---|---|---| +| `content` | `get_author_profile`, `get_page`, `get_post`, `slugify`, `block_note_to_html`, `generate_excerpt`, `strip_html` | `content.Content` | +| `settings` | `get_site_settings`, `get_plugin_settings`, `update_site_setting` | `settings.Settings`, `settings.Updater` | +| `gating` | `get_subscriber_tier_level`, `evaluate_access` | `gating.Gating` | +| `crypto` | `encrypt_secret`, `decrypt_secret` | `crypto.Crypto` | +| `menus` | `get_menu_by_name`, `get_menu_items` | `menus.Menus` | +| `datasources` | `resolve_bucket`, `resolve_bucket_by_key` | `datasources.Datasources` | +| `users` | `get_by_username`, `get_by_id` | `auth.PublicUsers` | +| `subscriptions` | `get_user_tier_level`, `get_tier_by_slug`, `list_tiers`, `list_active_plans` | `subscriptions.Subscriptions` | +| `media` | `deposit` | `plugin.Media` | +| `email` | `send` | `plugin.EmailSender` | +| `ai` | `text_call`, `tools.register` | `CoreServices.AITextCall`, `ai.ToolRegistry` | +| `bridge` | `register_service`, `get_service` | `plugin.PluginBridge` | +| `jobs` | `submit` | `plugin.JobRunner` | +| `embeddings` | `generate_embedding`, `embed_content`, `is_available` | `plugin.EmbeddingService` | +| `rag` | `query`, `on_content_changed` | `plugin.RAGService` | +| `reviews` | `submit_review` | `plugin.ReviewSubmitter` | +| `badges` | `refresh_badges` | `plugin.BadgeRefresher` | +| `db` | `query`, `exec`, `tx_begin`, `tx_commit`, `tx_rollback` | `CoreServices.Pool` via the guest `database/sql` driver (`db.proto`) | + +The guest half of the SDK implements the existing Go interfaces as stubs +marshaling to these calls, so plugin code compiles unchanged. + +`CoreServices` members that do **not** cross as capability calls: + +- `Pool` → the `db.*` driver messages (`db.proto`); the host executes under + the per-plugin Postgres role. `DbError.code` carries the SQLSTATE. + Transactions: `tx_begin` returns an opaque `tx_handle` (never 0); `query`/ + `exec` with `tx_handle = 0` run autocommit. Handles die with the call + chain's deadline so a guest can never pin a connection. +- `Interceptors` (`connect.Option`) → host-side only; RBAC merges from + `manifest.rbac_method_roles`. +- `AppURL` / `MediaPath` → delivered once in `LoadRequest.host_config`. +- `CoreServiceBindings.Bind` → static `manifest.core_service_bindings` + declaration; the host constructs and mounts the handlers. +- `RAGService.RegisterContentFetcher` → static + `manifest.rag_content_fetcher_types` declaration + `HOOK_RAG_FETCH` + callback inversion. + +## Error semantics + +`AbiError{code, message}` travels in `InvokeResponse.error` and +`HostCallResponse.error`: + +| Code | Meaning | Instance consequence | +|---|---|---| +| `ABI_ERROR_CODE_INTERNAL` | Handler ran and failed; `message` is the Go error text. | None (normal error). Guest traps / packed `0` returns are *treated as* INTERNAL by the host and **do** discard the instance. | +| `ABI_ERROR_CODE_DECODE` | Envelope or payload failed to decode. | Instance discarded (protocol desync). | +| `ABI_ERROR_CODE_UNIMPLEMENTED` | Callee does not implement the hook/capability (e.g. host too old for a new capability method). | None. | +| `ABI_ERROR_CODE_DEADLINE_EXCEEDED` | `deadline_ms` elapsed. | Instance considered poisoned, discarded. | +| `ABI_ERROR_CODE_PERMISSION_DENIED` | Caller not entitled to the capability. | None. | + +Host-function errors surface to plugin code as ordinary Go errors via the +guest SDK. Repeated instance failures trip the existing +`PluginStatusFailed` path + admin notification. DB failures use `DbError` +(SQLSTATE-carrying) inside the `db.*` responses instead of `AbiError`, so +sqlc/pgx error handling keeps working. + +## Manifest ↔ `PluginRegistration` mapping + +`manifest.pb` (a serialized `PluginManifest`) is produced at publish time via +`HOOK_DESCRIBE` and read by the loader without instantiating the module. +Field-by-field: + +| `PluginRegistration` field | Wire counterpart | +|---|---| +| `Name` | `PluginManifest.name` | +| `Version` | `PluginManifest.version` | +| `Dependencies` | `dependencies` (`Dependency`) | +| `Register` | Static effects captured by DESCRIBE: `blocks` (`BlockMeta`), `block_template_overrides`, `template_keys`, `system_templates`, `page_templates`, `email_wrapper_system_keys` | +| `RegisterWithProvisioner` | Same captures + `has_provisioner` (provisioning runs at load, host-side) | +| `Assets` | `.bnp` artifact `assets/` directory (host serves directly; never crosses the boundary) | +| `Schemas` | `.bnp` artifact `schemas/` directory (host loads into the block registry) | +| `SettingsSchema` | `settings_schema` (JSON bytes) | +| `ThemePresets` | `theme_presets` (JSON bytes) | +| `BundledFonts` | `bundled_fonts` (JSON bytes) | +| `MasterPages` | `master_pages` (`MasterPageDefinition`/`MasterPageBlock`) | +| `HTTPHandler` | `has_http_handler` + `HOOK_HANDLE_HTTP` | +| `SettingsPanel` | `settings_panel` | +| `AdminPages` | `admin_pages` (`AdminPage`) | +| `CSSManifest` | `css_manifest` (`CssManifest`) | +| `ServiceHandlers` | `rbac_method_roles` (method → role; the services themselves answer via `HOOK_HANDLE_HTTP`) + `core_service_bindings` | +| `JobHandlers` | `job_types` + `HOOK_JOB` | +| `AIActions` | `ai_actions` (`AiAction`) | +| `DirectoryExtensions` | `directory_extensions` (static fields + callback counts) | +| `MediaHooks` | `has_media_hooks` + `HOOK_MEDIA_HOOK` | +| `Load` | `has_load_hook` + `HOOK_LOAD` | +| `Unload` | `has_unload_hook` + `HOOK_UNLOAD` | +| `Migrations` | `.bnp` artifact `migrations/` directory (Goose runs host-side; never crosses) | +| `RequiredIconPacks` | `required_icon_packs` | + +## Render context + +`RenderContext` (`render.proto`) is the explicit envelope of every value +blocks read from `ctx` today (`core/blocks/context.go`): request info, +`BlockContext` (the pongo2 data struct, 1:1), current page/post/author/ +category/master-page, requested path, injected/expected slots, editor flag, +block + page IDs, human-proof banner, detail row, theme variables JSON, and +locale. + +Function-valued context entries cannot serialize; their v1 mapping: + +- `GetQueries` → the `db.*` driver (plugin sqlc code, per-plugin role). +- `SlotRenderer` / `MediaResolver` / `EmbedResolver` → **open items** (below). + +## Open items (flagged for runtime WOs — additive, no major bump needed) + +- **AI tool execution**: `AiToolRegisterRequest` registers a tool; executing + its guest-side `Handler` needs a host→guest hook (e.g. `HOOK_AI_TOOL_CALL`). + Deliberately not added here — the WO fixes the v1 hook catalog. +- **Job progress**: `plugin.JobHandlerFunc`'s `progress(current, total, + message)` callback needs a `jobs.progress` host function. +- **Bridge calls**: `bridge.register_service`/`get_service` cover + registration/lookup only; typed cross-plugin *invocation* (today: shared + in-process Go values) needs a runtime design. +- **Directory extension callbacks**: `panel_section_count` / + `pin_decorator_count` declare the guest callbacks; invoking them needs a + hook. +- **Slot/media/embed resolvers in render**: container-slot rendering and + media/embed resolution during a guest render need host functions (or host- + side pre-rendering into `RenderContext`).