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`).