@kong-ui-public/entities-plugins 11.0.4 → 11.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -7,7 +7,7 @@ import { useVueFlow as Po, MarkerType as Jp, Position as Hn, Handle as fo, VueFl
|
|
|
7
7
|
import { createSharedComposable as vy, useEventListener as Ca, useManualRefHistory as yy, createInjectionState as Qp, useElementBounding as Ni, useLocalStorage as cr, createGlobalState as _y, useDraggable as by, useScrollLock as wy } from "@vueuse/core";
|
|
8
8
|
import { createI18n as qt, i18nTComponent as ky } from "@kong-ui-public/i18n";
|
|
9
9
|
import * as xu from "@kong-ui-public/freeform";
|
|
10
|
-
import { USE_SECRET_INPUT_KEY as cc, useField as ei, useFieldAttrs as Fa, generateCredentialSecret as Zp, useFormData as ef, ObjectField as xt, useSchemaExposer as Cy, Form as Yt, FIELD_RENDERERS as Ey, FieldRenderer as
|
|
10
|
+
import { USE_SECRET_INPUT_KEY as cc, useField as ei, useFieldAttrs as Fa, generateCredentialSecret as Zp, useFormData as ef, ObjectField as xt, useSchemaExposer as Cy, Form as Yt, FIELD_RENDERERS as Ey, FieldRenderer as ct, normalizeMatch as Sy, StringArrayField as Ka, StringField as Ke, toArray as gl, resolve as hr, separator as Iy, useFormShared as vt, EXPRESSIONS_FIELD as hl, SwitchField as Ty, Field as yt, ArrayField as lt, MapField as Pn, EnumField as Nt, BooleanField as rn, useMapField as tf, toSelectItems as nf, NumberField as _t, defaultLabelFormatter as xy, SlideTransition as $y, isVersionSupported as Ay, useItemKeys as of, ExpressionEditor as Ny, EXPRESSION_ARRAY_EMPTY as Oy } from "@kong-ui-public/freeform";
|
|
11
11
|
export * from "@kong-ui-public/freeform";
|
|
12
12
|
import { FREE_FORM_SCHEMA_MAP_KEY as b3, USE_SECRET_INPUT_KEY as w3 } from "@kong-ui-public/freeform";
|
|
13
13
|
import "@vue-flow/controls/dist/style.css";
|
|
@@ -37,7 +37,7 @@ import { codeToHtml as d_ } from "shiki";
|
|
|
37
37
|
import { z as R } from "zod";
|
|
38
38
|
import { SecretInput as Nu } from "@kong-ui-public/misc-widgets";
|
|
39
39
|
import "@kong-ui-public/misc-widgets/dist/style.css";
|
|
40
|
-
const p_ = { cancel: "Cancel", view_configuration: "View configuration", create: "New plugin", create_custom: "Create", configure: "Configure", copy_id: "Copy ID", copy_json: "Copy JSON", edit: "Edit", enable: "Enable", enabled: "Enabled", disable: "Disable", delete: "Delete", disabled: "Disabled", confirm_delete: "Yes, delete", view: "View details", configure_dynamic_ordering: "Configure dynamic ordering", go_to_plugins: "Go to plugins", save: "Save", add_entity: "Add {entity}", remove_entity: "Remove {entity}", loading_spinner: "Loading..." }, f_ = { title: "Configuration", message: "Export configurations for core Kong Gateway objects, like services, routes, and plugins, to either YAML, JSON, or Terraform. This allows for straightforward importing into APIOps tools like decK with YAML, Insomnia and cURL with JSON, or Terraform products with Terraform.", yaml: "YAML", terraform: "Terraform", json: "JSON", deck: "decK" }, m_ = { success: "Copied {val} to clipboard", success_brief: "Successfully copied to clipboard", tooltip: "Copy {label}", success_tooltip: "Copied!" }, g_ = { general: "Plugins could not be retrieved", delete: "The plugin could not be deleted at this time.", copy: "Failed to copy to clipboard", load_results: "Error loading available plugins", load_schema: "Error loading plugin schema" }, h_ = { placeholder: { konnect: "Filter by name", exact: "Filter by exact instance name or ID", kongManager: "Filter by exact instance name or ID", select: "Filter plugins", search_plugins: "Search plugins", search: "Search", tags_filter: "Type part of a tag and press Enter", scope_filter: "Select scopes" }, filter: { field: { enabled: "Enabled" }, tags_invalid: "Tags can't contain commas, slashes, or leading/trailing spaces" }, no_results: 'No results found for "{filter}"' }, v_ = { new: "New" }, y_ = { steps: { consumer: { step: "Consumer", title: "Create a consumer", description: "Consumers represent the users or applications calling your API. Add a name or tags to help you identify and manage this consumer later.", note: "A consumer can have both unique username and unique custom ID or one of them." }, credential: { step: "Credential", title: "Add a credential" } }, consumer_fields: { username_label: "Username", username_placeholder: "Enter a unique username", custom_id_label: "Custom ID", custom_id_placeholder: "Enter a unique custom ID" }, choose_consumer: { title: "Choose a consumer", description: "Choose a consumer to add a credential", select_label: "Select an existing consumer", select_placeholder: "Search consumers" }, create_consumer: { title: "Create a consumer" }, add_credential: { title: "Add a credential" }, create_principal: { title: "Create a principal", description: "Create a principal with authentication to test your plugin configuration." }, add_principal_credential: { title: "Add authentication to a principal", description: "Add authentication credentials to an existing principal." }, actions: { save_and_next: "Save and next", skip: "Skip", exit_setup: "Exit setup" }, errors: { create_consumer: "The consumer could not be created at this time.", create_credential: "The credential could not be created at this time.", load_consumers: "Consumers could not be retrieved" }, "basic-auth": { title: "Next steps for basic authentication plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to assign username and password for authentication.", create_consumer: { description: "Create a new consumer with a basic auth credential to test your plugin configuration." }, add_credential: { title: "Add a basic authentication credential", description: "Add a basic auth credential to an existing consumer." }, credential_action: "Create credential" }, "key-auth": { title: "Next steps for key authentication plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to assign API keys for authentication.", create_consumer: { description: "Create a new consumer with a key auth credential to test your plugin configuration." }, add_credential: { title: "Add a key authentication credential", description: "Add key authentication credentials to an existing consumer." }, credential_action: "Create key" }, "key-auth-enc": { title: "Next steps for key authentication plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to assign API keys for authentication.", create_consumer: { description: "Create a new consumer with a key auth credential to test your plugin configuration." }, add_credential: { title: "Add a key authentication credential", description: "Add key authentication credentials to an existing consumer." }, credential_action: "Create key" }, oauth2: { title: "Next steps for OAuth 2.0 authentication plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to register an OAuth 2.0 application for authentication.", create_consumer: { description: "Create a new consumer with an OAuth 2.0 credential to test your plugin configuration." }, add_credential: { title: "Add an OAuth 2.0 credential", description: "Add an OAuth 2.0 credential to an existing consumer." }, credential_action: "Create credential" }, "hmac-auth": { title: "Next steps for HMAC authentication plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to add usernames and secrets for authentication.", create_consumer: { description: "Create a new consumer with a HMAC auth credential to test your plugin configuration." }, add_credential: { title: "Add a HMAC authentication credential", description: "Add a HMAC auth credential to an existing consumer." }, credential_action: "Create credential" }, jwt: { title: "Next steps for JWT plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to assign JWT credentials (public and secret keys) for authentication.", create_consumer: { description: "Create a new consumer with a JWT credential to test your plugin configuration." }, add_credential: { title: "Add a JWT credential", description: "Add a JWT credential to an existing consumer." }, credential_action: "Create credential" }, acl: { title: "Next steps for ACL plugins", subtitle: "Consumers represent the users or applications calling your API. You do this by configuring either an allow list or a deny list with certain consumers or consumer groups.", create_consumer: { description: "Create a new consumer with an ACL credential to test your plugin configuration." }, add_credential: { title: "Add an ACL credential", description: "Add an ACL credential to an existing consumer to test your new plugin configuration." }, credential_action: "Add group to consumer" } }, __ = /* @__PURE__ */ JSON.parse(`{"title":"Plugins","list":{"toolbar_actions":{"new_plugin":"New plugin"},"table_headers":{"applied_to":"Applied to","applied_to_badges":{"consumer":"Consumer","global":"Global","route":"Route","service":"Service","consumer_group":"Consumer group"},"id":"ID","plugin":"Plugin","name":"Name","instance_name":"Instance name","scope":"Scope","status":"Status","ordering":"Ordering","ordering_badge":{"dynamic":"Dynamic","static":"Static"},"enabled":"Enabled","tags":"Tags","updated_at":"Last modified"},"empty_state":{"title":"Configure a new plugin","description":"Plugins are used to extend Kong functionality."},"empty_state_v2":{"title":"Configure your first plugin","description":"Plugins extend gateways functionalities, offering features like authentication, rate limiting, and request transformations to enhance security and performance.","create_cta":"New plugin","group":"Plugins created in gateways within this group will automatically appear here.","learn_more":"Learn more"}},"meta":{"basic-auth":{"name":"Basic Authentication","credential_name":"Basic Auth Credential","description":"Add Basic Authentication to your services"},"hmac-auth":{"name":"HMAC Authentication","credential_name":"HMAC Credential","description":"Add HMAC Authentication to your services"},"jwt-signer":{"name":"JWT Signer","description":"Verify and (re-)sign one or two tokens in a request"},"jwt":{"name":"JWT","credential_name":"JWT Credential","description":"Verify and authenticate JSON Web Tokens"},"key-auth":{"name":"Key Authentication","credential_name":"Key Auth Credential","description":"Add key authentication to your services"},"key-auth-enc":{"name":"Key Authentication Encrypted","credential_name":"Key Auth Encrypted","description":"Add key authentication to your services with an encrypted token"},"ldap-auth-advanced":{"name":"LDAP Authentication Advanced","description":"Integrate Kong with a LDAP server"},"ldap-auth":{"name":"LDAP Authentication","description":"Integrate Kong with a LDAP server"},"oauth2-introspection":{"name":"OAuth 2.0 Introspection","description":"Integrate Kong with a third-party OAuth 2.0 Authorization Server"},"oauth2":{"name":"OAuth 2.0 Authentication","credential_name":"OAuth 2.0 Application","description":"Add OAuth 2.0 authentication to your services"},"openid-connect":{"name":"OpenID Connect","description":"Integrate Kong with a third-party OpenID Connect 1.0 provider"},"mtls-auth":{"name":"Mutual TLS Authentication","description":"Secure routes and services with client certificate and mutual TLS authentication"},"vault-auth":{"name":"Vault Authentication","description":"Secure routes and services with an access token and secret token, stored securely via Vault"},"bot-detection":{"name":"Bot Detection","description":"Detect and clock bots or custom clients"},"cors":{"name":"CORS","description":"Allow developers to make requests from the browser"},"ip-restriction":{"name":"IP Restriction","description":"Whitelist or blacklist IPs that can make requests"},"opa":{"name":"OPA","description":"Authorize requests against Open Policy Agent"},"kubernetes-sidecar-injector":{"name":"Kubernetes Sidecar Injector","description":"This plugin will inject Kong dataplane nodes and form a service mesh on top of Kubernetes"},"request-validator":{"name":"Request Validator","description":"Validate requests before they reach their upstream service."},"acl":{"name":"ACL","credential_name":"Access Control Group","description":"Control which consumers can access services"},"canary":{"name":"Canary Release","description":"Methodically roll out software changes to a subset of users"},"forward-proxy":{"name":"Forward Proxy","description":"Allow Kong to connect to intermediary transparent HTTP proxies"},"proxy-cache":{"name":"Proxy Caching","description":"Cache and serve commonly requested responses in Kong"},"proxy-cache-advanced":{"name":"Proxy Caching Advanced","description":"Cache and serve commonly requested responses in Kong"},"graphql-proxy-cache-advanced":{"name":"GraphQL Proxy Caching Advanced","description":"Cache and serve commonly requested responses in Kong"},"rate-limiting-advanced":{"name":"Rate Limiting Advanced","description":"Rate-limit how many HTTP requests a developer can make"},"rate-limiting":{"name":"Rate Limiting","description":"Rate-limit how many HTTP requests a developer can make"},"graphql-rate-limiting-advanced":{"name":"GraphQL Rate Limiting Advanced","description":"Rate-limit how many HTTP requests a developer can make"},"mocking":{"name":"Mocking","description":"Provide mock endpoints to test your APIs in development against your services"},"request-size-limiting":{"name":"Request Size Limiting","description":"Block requests with bodies greater than a specific size"},"request-termination":{"name":"Request Termination","description":"Terminate all requests with a specific response"},"response-ratelimiting":{"name":"Response Rate Limiting","description":"Rate-Limiting based on a custom response header value"},"route-by-header":{"name":"Route by Header","description":"Route requests based on request headers"},"ai-proxy":{"name":"AI Proxy","description":"Directly call a configured LLM, with mediated security and tuning parameters, and using standardised Kong request and response formats."},"ai-prompt-decorator":{"name":"AI Prompt Decorator","description":"Prepend and append chat prompts to AI Proxy plugin LLM requests."},"ai-prompt-template":{"name":"AI Prompt Template","description":"Define a set of templates, containing string variable placeholders, that can be consumed by users when used with the AI Proxy plugin."},"ai-prompt-guard":{"name":"AI Prompt Guard","description":"Define a set of valid, and a set of invalid, regular expression patterns when calling LLM models with the AI Proxy plugin."},"ai-request-transformer":{"name":"AI Request Transformer","description":"Use an LLM to transform API request from a user, before sending to the upstream service."},"ai-response-transformer":{"name":"AI Response Transformer","description":"Use an LLM to transform API responses from the upstream service, before returning to the user."},"ai-rate-limiting-advanced":{"name":"AI Rate Limiting Advanced","description":"Provides rate limiting for the providers used by any AI plugins."},"ai-azure-content-safety":{"name":"AI Azure Content Safety","description":"Allows checking and auditing of AI-Proxy plugin messages, using Azure Cognitive Services, before proxying to upstream large-language model."},"aws-lambda":{"name":"AWS Lambda","description":"Invoke and manage AWS Lambda functions from Kong"},"azure-functions":{"name":"Azure Functions","description":"Invoke Azure functions"},"openwhisk":{"name":"OpenWhisk","description":"Invoke and manage OpenWhisk actions from Kong"},"pre-function":{"name":"Kong Functions (Pre-Plugins)","description":"Add and manage custom lua functions to run before other plugins"},"post-function":{"name":"Kong Functions (Post-Plugins)","description":"Add and manage custom lua functions to run after other plugins"},"datadog":{"name":"Datadog","description":"Visualize metrics on Datadog"},"prometheus":{"name":"Prometheus","description":"Export performance metrics to Prometheus"},"zipkin":{"name":"Zipkin","description":"Propagate zipkin spans and report spans to a zipkin server"},"collector":{"name":"Collector","description":"Automate spec-driven development & anomaly detection (Early Access)"},"response-transformer-advanced":{"name":"Response Transformer Advanced","description":"Transform the response sent by the upstream server on the fly on Kong, before returning the response to the client."},"correlation-id":{"name":"Correlation ID","description":"Correlate requests and responses using a unique ID"},"request-transformer-advanced":{"name":"Request Transformer Advanced","description":"Use powerful regular expressions, variables and templates to transform API requests"},"request-transformer":{"name":"Request Transformer","description":"Modify the request before hitting the upstream server"},"response-transformer":{"name":"Response Transformer","description":"Modify the upstream response before returning it to the client"},"route-transformer-advanced":{"name":"Route Transformer Advanced","description":"Transforms the routing on the fly in Kong, changing the upstream server/port/path to hit"},"kafka-upstream":{"name":"Kafka Upstream","description":"Transform requests into Kafka messages in a topic"},"degraphql":{"name":"DeGraphQL","description":"Transform a GraphQL upstream into a REST API"},"exit-transformer":{"name":"Exit Transformer","description":"Customize Kong exit responses sent downstream"},"jq":{"name":"jq","description":"Transform JSON objects included in API requests or responses using jq programs"},"file-log":{"name":"File Log","description":"Append request and response data to a log file on disk"},"http-log":{"name":"HTTP Log","description":"Send request and response logs to an HTTP server"},"loggly":{"name":"Loggly","description":"Send request and response logs to Loggly"},"statsd-advanced":{"name":"StatsD Advanced","description":"Send traffic and Kong performance metrics to StatsD"},"statsd":{"name":"StatsD","description":"Send request and response logs to StatsD"},"syslog":{"name":"Syslog","description":"Send request and response logs to Syslog"},"tcp-log":{"name":"TCP Log","description":"Send request and response logs to a TCP server"},"udp-log":{"name":"UDP Log","description":"Send request and response logs to a UDP server"},"kafka-log":{"name":"Kafka Log","description":"Publish request and response logs to a Kafka topic"},"session":{"name":"Session","description":"Sessions for Kong authentication"},"upstream-tls":{"name":"Upstream TLS","description":"Enable TLS on upstream traffic by providing Kong with a list of trusted certificates."},"application-registration":{"name":"Portal Application Registration","description":"Allow portal developers to register applications against services"},"konnect-application-auth":{"name":"Konnect Application Auth","description":"Allow Konnect portal developers to register applications against services"},"acme":{"name":"ACME","description":"Let's Encrypt and ACMEv2 integration with Kong"},"grpc-gateway":{"name":"gRPC Gateway","description":"Access gRPC services through HTTP REST"},"grpc-web":{"name":"gRPC Web","description":"Allow browser clients to call gRPC services"},"upstream-timeout":{"name":"Upstream Timeout","description":"Configure read, send and connect timeouts to an upstream"},"opentelemetry":{"name":"OpenTelemetry","description":"Propagate distributed tracing spans and report low-level spans to a OTLP-compatible server"},"websocket-validator":{"name":"WebSocket Validator","description":"Validate individual WebSocket messages against to a user-specified schema before proxying them"},"websocket-size-limit":{"name":"WebSocket Size Limit","description":"Allows operators to specify a maximum size for incoming WebSocket messages"},"tls-metadata-headers":{"name":"TLS Metadata Headers","description":"Detects client certificates in requests, retrieves the TLS metadata, and proxies this metadata via HTTP headers"},"tls-handshake-modifier":{"name":"TLS Handshake Modifier","description":"Requests the client certificate and if it exists, makes it available to other plugins acting on the request"},"oas-validation":{"name":"OAS Validation","description":"Validate HTTP requests and responses based on an API specification."},"jwe-decrypt":{"name":"Kong JWE Decrypt","description":"The Kong JWE Decrypt plugin makes it possible to decrypt an inbound token(JWE) in a request."},"xml-threat-protection":{"name":"XML Threat Protection","description":"Reduce the risk of XML attacks by checking the structure of XML payloads."},"saml":{"name":"SAML","description":"Security Assertion Markup Language (SAML) is an open standard for exchanging authentication and authorization data between an identity provider and a service provider."},"app-dynamics":{"name":"AppDynamics","description":"This plugin integrates Kong with the AppDynamics APM platform so that proxy requests handled by Kong can be identified and analyzed in AppDynamics."},"json-threat-protection":{"name":"JSON Threat Protection","description":"Apply size checks on JSON payload and minimize risk of content-level attacks"},"standard-webhooks":{"name":"Standard Webhooks","description":"Validate incoming webhooks adhere to the Standard Webhooks specification, to which Kong is a contributor"},"ai-proxy-advanced":{"name":"AI Proxy Advanced","description":"Route across different LLMs and models using advanced load balancing algorithms, including semantic routing."},"ai-semantic-cache":{"name":"AI Semantic Cache","description":"Semantically cache AI requests to any LLM to reduce latency, improve end-user experiences and optimize GenAI costs."},"ai-semantic-prompt-guard":{"name":"AI Semantic Prompt Guard","description":"Semantically and intelligently create allow and deny lists of topics that can be requested across every LLM."},"header-cert-auth":{"name":"Header Certificate Authentication","description":"Authenticate clients with MTLS certificate passed in header by a WAF or load balancer"},"upstream-oauth":{"name":"Upstream OAuth","description":"Configure Kong to obtain a OAuth2 token to consume an upstream API"},"confluent":{"name":"Confluent","description":"Streamlines integration with Confluent Cloud and transforms requests into messages published to a Confluent topic."},"service-protection":{"name":"Service Protection","description":"Prevent abuse and protect services with absolute limits on the number of requests reaching the service."},"injection-protection":{"name":"Injection Protection","description":"Protect against injection attacks by rejecting requests that match common injections patterns."},"redirect":{"name":"Redirect","description":"Redirect incoming requests to a new URL"},"kafka-consume":{"name":"Kafka Consume","description":"Consume messages from Kafka topics over HTTP protocols."},"confluent-consume":{"name":"Confluent Consume","description":"Consume messages from Confluent Kafka topics over HTTP protocols"},"request-callout":{"name":"Request Callout","description":"Callout to third party APIs as part of request processing."},"ai-sanitizer":{"name":"AI Sanitizer","description":"Sanitize personal or sensitive information from prompts before sending to LLM."},"ai-rag-injector":{"name":"AI RAG Injector","description":"Attach contextual knowledge from vector databases with flexible template to LLM prompts."},"datakit":{"name":"Datakit","description":"Datakit is a workflow engine for working with external APIs."},"ai-prompt-compressor":{"name":"AI Prompt Compressor","description":"The AI Prompt Compressor reduces costs associated with LLMs by compressing prompts."},"solace-upstream":{"name":"Solace Upstream","description":"Transform requests into Solace messages in a Solace queue or topic."},"ai-aws-guardrails":{"name":"AI AWS GuardRails","description":"The AI AWS GuardRails enables enforcement of introspection with the AWS GuardRails service for all requests processed by the AI Proxy plugin."},"ace":{"name":"Konnect Access Control Enforcement","description":"Enable Developer Self-Service for Konnect Dev Portals."},"solace-consume":{"name":"Solace Consume","description":"Consume messages from Solace and make them available through HTTP endpoints."},"solace-log":{"name":"Solace Log","description":"Publish request and response logs to a Solace topic."},"ai-llm-as-judge":{"name":"AI LLM Judge","description":"Evaluate LLM responses with an external LLM service and use accuracy scores to drive dynamic load balancing for \`llm/v1/chat\` requests."},"ai-mcp-proxy":{"name":"AI MCP Proxy","description":"Convert APIs into MCP tools, proxy MCP servers, expose multiple MCP tools, and observe MCP traffic in real time."},"ai-gcp-model-armor":{"name":"AI GCP Model Armor","description":"Audit and validate AI Proxy messages with Google Cloud Model Armor before forwarding them to an upstream LLM."},"ai-mcp-oauth2":{"name":"AI MCP OAuth2","description":"Secure MCP server access with OAuth2 authentication."},"ai-semantic-response-guard":{"name":"AI Semantic Response Guard","description":"Permit or block prompts based on semantic similarity to known LLM responses, preventing misuse of \`llm/v1/chat\` or \`llm/v1/completions\` requests."},"ai-lakera-guard":{"name":"AI Lakera Guard","description":"Audit and enforce safety policies on LLM requests and responses using the AI AWS Lakera plugin before they reach upstream LLMs."},"ai-a2a-proxy":{"name":"AI A2A Proxy","description":"Securely proxy A2A agents, with real-time RPC tracing and monitoring."},"ai-custom-guardrail":{"name":"AI Custom Guardrail","description":"Integrate with any 3rd-party Guardrail service, with customizable enforcement modes — choose whether violations block, log, or allow traffic to proceed."},"metering-and-billing":{"name":"Metering & Billing","description":"Meter API requests and AI token usage for usage-based billing. Supports flexible customer identification, custom pricing dimensions, and fine-grained traffic filtering. Integrates natively with Konnect Metering & Billing."},"entitlement-enforcement":{"name":"Entitlement Enforcement","description":"Allow or deny API requests based on customer entitlements. Checks feature access, usage limits, and credit balance against Metering & Billing before routing traffic."}},"fields":{"service":"Service","route":"Route","consumer":"Consumer","consumer_group":"Consumer group","service_id":"Service ID","route_id":"Route ID","consumer_id":"Consumer ID","consumer_group_id":"Consumer group ID"},"select":{"custom_badge_text":"This plugin is data plane node specific","cloned_from_badge":"Cloned from {link}","installed_custom_badge":"Installed custom","streamed_custom_badge":"Streamed custom","unavailable_tooltip":"This plugin is not available","already_exists":"This plugin is already applied to this resource","misc_plugins":"Other plugins","show_all":"Show all","view_more":"View more","view_less":"View less","filter":{"title":"Filter plugins","featured":"Featured","type":"Type","clear":"Clear"},"list":{"table_headers":{"name":"Plugin","description":"Description"}},"tabs":{"kong":{"title":"Kong plugins","description":"Kong plugins are bundled by default with Kong Gateway and are available across all control planes.","empty_title":"No plugins","empty_description":"No plugins are available."},"custom":{"title":"Custom plugins","description":"Custom plugins will be available in this control plane only.","disabled_tooltip":"Custom plugins are not available with this gateway. Create a hybrid or dedicated cloud gateway to leverage custom plugins.","fetch_error":"Unable to load some custom plugins. Bundled plugins are still available.","license_required":"Plugin cloning requires a license to be used.","empty_title":"No custom plugins","empty_description":"No custom plugins have been added to this control plane.","create":{"name":"Custom plugin","description":"Upload schema file to create custom plugin"}}},"highlighted_plugins":{"title":"Highlighted plugins"}},"form":{"button_deck_customize":"Customize before copying to CLI","disable_data_retrieving":"You do not have permission to select {scope}","disable_source_scope_change":"Changing the {scope} is not allowed when configuring a plugin under it","no_selection":"No selection...","fields":{"enabled":{"label":"Enabled","on_text":"This plugin is enabled","off_text":"This plugin is disabled"},"plugin_status":{"label":"Plugin status","text_on":"Enabled","text_off":"Disabled"},"instance_name":{"label":"Name","placeholder":"Enter a unique name","help":"A custom name for this plugin instance to help with identifying from the list view."},"condition":{"label":"Execution condition","placeholder":"Enter an expression","tooltip":"An expression used for conditional control over plugin execution. If the expression evaluates to true during the request flow, the plugin is executed; otherwise, it is skipped.","help":{"learn":"Learn more","about":"{link} about plugin conditions."}},"protocols":{"label":"Protocols","placeholder":"Select valid protocols for the plugin","placeholderWithDefaultValues":"Select valid protocols for the plugin. Default protocols: {protocols}","help":"A list of the request protocols that will trigger this plugin. The default value, as well as the possible values allowed on this field, may change depending on the plugin type."},"tags":{"label":"Tags","help":"An optional set of strings for grouping and filtering, separated by commas.","placeholder":"Tag1, Tag2, Tag3"},"secret":{"generateLabel":"Generate secret"}},"scoping":{"label":"Scoped","placeholder":"Search by name or UUID","disable_global_radio":"The plugin is set to 'scoped' by default. To apply a plugin globally, please navigate to the global plugin list page.","global":{"label":"Global","help":"All services, routes, and consumers"},"gateway_service":{"label":"Select a gateway service","help":"The gateway service to which this plugin configuration will apply","placeholder":"Select a gateway service","plural":"Gateway services"},"route":{"label":"Select a route","help":"The route that this plugin configuration will target","placeholder":"Select a route","plural":"Routes"},"consumer":{"label":"Select a consumer","help":"The consumer that this plugin configuration will target","placeholder":"Select a consumer","plural":"Consumers"},"consumer_group":{"label":"Select a consumer group","help":"The consumer group that this plugin configuration will target","placeholder":"Select a consumer group","plural":"Consumer groups"}},"grouping":{"advanced_parameters":{"view":"Show additional settings","hide":"Hide additional settings"}},"sections":{"plugin_scope":{"title":"Plugin scope","description":"Choose whether this plugin applies to all traffic (global) or is scoped to a specific service, route, or consumer."},"general_info":{"title":"General information","description":"Add details to help identify and manage your plugin."},"plugin_config":{"title":"Plugin configuration","description":"Set the plugin's behavior by defining its configuration settings."},"plugin_general_info":{"description":"Add a name or tags to help you identify and manage this plugin later."},"code_mode":{"title":"Code editor","description":"Configure this plugin by using YAML configuration."}}},"free-form":{"editor_mode":{"visual":"Visual editor","code":"Code editor"},"code-lens":{"entity":{"service":"Service","route":"Route","consumer":"Consumer","consumer_group":"Consumer group","certificate":"Certificate"},"field":{"name":"{entity} \\"{value}\\"","username":"Username \\"{value}\\"","custom_id":"Custom ID \\"{value}\\"","subject":"Subject \\"{value}\\"","expires_after":"Expires after \\"{value}\\""},"action":{"view_entity":"View {title}","copy_certificate":"Copy certificate","copy_uuid":"Copy UUID","retry_fetch":"Retry fetch (Hover for details)"},"unknown_error":"Unknown error"},"acl":{"mode":{"title":{"label":"Access policy","description":"Select how requests are authorized. Choose one access policy: allow or deny by ACL group, or define a CEL expression. Only one policy type can be configured at a time."},"allow":{"label":"Allow list","description":"Allow requests from the specified ACL groups."},"deny":{"label":"Deny list","description":"Deny requests from the specified ACL groups."},"allow_when":{"label":"Allow expression","description":"Allow requests when the CEL expression evaluates to true."},"deny_when":{"label":"Deny expression","description":"Deny requests when the CEL expression evaluates to true."}},"field":{"allow":{"label":"Allowed list","placeholder":"Enter group names","add":"Add allow"},"deny":{"label":"Denied list","placeholder":"Enter group names","add":"Add deny"},"allow_when":{"label":"Kong plug-in conditional expression","description":"A Kong plug-in conditional expression is a CEL expression that determines whether the plugin runs for a request. If the expression evaluates to true, the plugin executes. If it evaluates to false, the plugin is skipped.","placeholder":"eg: 'consumer.username == \\"alice\\"'","add":"Add expression","help":{"learn":"Learn more","text":"Define a Kong plug-in conditional expression to evaluate each request. The expression must return a boolean value (true or false). {link}"}},"deny_when":{"label":"Kong plug-in conditional expression","description":"A Kong plug-in conditional expression is a CEL expression that determines whether the plugin runs for a request. If the expression evaluates to true, the plugin executes. If it evaluates to false, the plugin is skipped.","placeholder":"eg: 'consumer.username == \\"alice\\"'","add":"Add expression","help":{"learn":"Learn more","text":"Define a Kong plug-in conditional expression to evaluate each request. The expression must return a boolean value (true or false). {link}"}}}},"ai-mcp-proxy":{"default_acl_item_label":"Default ACL #{index}","tool_item_label":"Tool #{index}"},"openid-connect":{"tabs":{"common":{"title":"Common Configuration Settings","description":"Parameters for enabling the OpenID Connect plugin. Set these parameters before adding authorization, authentication, or other advanced configuration details."},"authorization":{"title":"Authorization Configuration Settings","description":"Parameters for setting up claims-based authorization."},"advanced":{"title":"Advanced Configuration Settings","description":"Advanced parameters for manually configuring the OpenID Connect plugin."}},"auth_methods":{"label":"Authentication methods","placeholder":"Select authentication methods","hint":"Configure which OAuth and OpenID Connect features are supported.","km_label":"Auth methods","methods":{"authorization_code":"Authorization code flow","bearer":"Bearer access token","client_credentials":"Client credentials grant","password":"Passwords grant","introspection":"Introspection","userinfo":"UserInfo","kong_oauth2":"Kong OAuth","refresh_token":"Refresh token"},"session":{"label":"Session management","switch_label":"Enable Session Management","use_label":"Use sessions","use_description":"Issue a session cookie after successful authentication. Subsequent requests use the session instead of re-authenticating with the identity provider.","no_use_label":"Do not use sessions","no_use_description":"Authenticate each request using the configured authentication flow."}},"principals":{"header":"Who should manage authentication and credentials?","description":"Use External auth server to continue using your existing OAuth provider and authentication workflows. Use Kong Identity to adopt a newer principal-based model that centralizes and simplifies identity and authentication management.","learn_more":"Learn more.","kong_identity_label":"Kong Identity","kong_identity_description":"Use Kong Identity to authenticate OpenID Connect tokens. If all data plane nodes are running version 3.15 or later, you can also map requests to Kong Identity principals for advanced policies and integrations.","kong_identity_description_ai_manager":"Use Kong Identity to authenticate OpenID Connect tokens. If all AI Gateway nodes are running version 2.0 or later, you can also map requests to Kong Identity principals for advanced policies and integrations.","external_label":"External auth server","external_description":"Connect to your existing identity provider to manage authentication outside of Kong.","guide":{"title":"Add principals","description":"Get more value from OAuth 2.0 integration by creating principals in Kong Identity. Associate principals with this authorization server and its clients to enable principal-based authentication across Kong products.","description_external":"Get more value from OAuth 2.0 integration by creating principals in Kong Identity. Associate principals with this authorization server and its clients to enable principal-based authentication across Kong products. Requires data plane nodes to be running version 3.15 or later.","create":"Create principal","learn_more":"Learn more"},"auth_server":{"label":"Authorization Server","info":"The Kong Identity auth server that will act as the OpenID Connect provider for this plugin.","placeholder":"Select an Authorization Server","create":"Create authorization server","create_hint":"You'll need to return here after creating an authorization server. Your progress won't be saved.","no_access_help":"You don't have access to browse authorization servers. Enter the issuer URL of your Kong Identity authorization server directly.","issuer_placeholder":"e.g., https://your-auth-server.identity.konghq.com"},"client":{"label":"Client","id_label":"Client id","secret_label":"Client secret","placeholder":"Select a client","id_placeholder":"e.g., kong-gateway-client","secret_placeholder":"e.g., your-client-secret","create":"Create client","create_hint":"You'll need to return here after creating a client. Your progress won't be saved.","add":"Add client","remove":"Remove client"},"leave_prompt":{"title":"Leave this page?","message":"Your unsaved changes will be lost if you continue.","action":"Leave page"},"dp_version_alert":"We detected that one or more data plane nodes are running a version earlier than 3.15. If principal lookup is enabled, requests handled by those data plane nodes will fail."},"lookup":{"collapse_label":"Show additional settings","toggle_label":"Use principal lookup","toggle_info":"Look up the authenticated principal in Kong Identity after token validation. Enable this when the validated token doesn't contain all of the identity data required for authorization or activity logging.","method":{"label":"Principal lookup method","placeholder":"Select a lookup method","help":"Principal lookup queries Kong Identity for the principal that matches the identity in a verified access token. This enables principal-aware policies and integrations. Requires all data plane nodes to be running version 3.15 or later.","kong_identity_label":"Kong Identity client","kong_identity_description":"Match principals using a token claim, defaulting to the subject (sub) claim.","custom_identity_label":"Custom claim","custom_identity_description":"Match principals using a custom JWT claim."},"custom_identity_name":{"label":"Custom identity name","help":"Enter the custom identity name used to look up the principal. Kong matches the value from the token claim to a principal with the same custom identity name and value.","placeholder":"e.g., Customer_ID"},"token_claim":{"label":"Token claim","placeholder":"e.g., user.employee_id","help":"Defaults to the subject (sub) claim, but you can specify a different token claim if needed. Use dot notation for nested claims (for example, workload.id); escape literal periods with \\\\ (for example, workload\\\\.id).","help_custom":"The token claim whose value is matched against the Custom identity name. Defaults to the subject (sub) claim, but you can specify a different claim if needed. Use dot notation for nested claims (for example, workload.id); escape literal periods with \\\\ (for example, workload\\\\.id)."},"error_on_miss":{"label":"If principal lookup fails","reject_label":"Reject the request","reject_description":"Treat the request as unauthenticated if Kong Identity cannot resolve the principal.","continue_label":"Continue without a principal","continue_description":"Allow the request to continue without resolving a principal."},"match_consumer":{"label":"Use linked consumers","description":"Use the consumer linked to the authenticated principal so existing consumer-based plugins and policies continue to work.","link":"Learn how to link a consumer."},"match_consumer_groups":{"label":"Use linked consumer groups","description":"Use consumer groups linked to the authenticated principal so existing consumer group policies and plugins continue to work. Consumer groups can be linked through principal metadata.","link":"Learn how to link a consumer group."}},"jit":{"toggle_label":"Just-in-time principal provisioning","toggle_info":"Create or update the Kong Identity principal from token claims as requests arrive, so identities don't need to be provisioned in advance.","all_claims":{"label":"Share all token claims","description":"Share every claim from the token when creating or updating a principal."},"claims":{"label":"Claims to share","placeholder":"e.g., email, department","help":"The token claims Kong writes onto the principal when creating or updating it just in time. Separate multiple claims with commas."}},"advanced_fields":{"client_jwk_link_label":"Client JWK","verify_signature_description":"JSON Web Keys are automatically fetched from the issuer's well-known endpoint. Enter a JWKS URI below to override this."}},"request-callout":{"entity_name":"Request callout","by_lua_placeholder":"Enter Lua script here..."},"jwt-signer":{"keyset_url_required":"Provide a valid HTTP/HTTPS URL to ensure signing works correctly when \\"{signingField}\\" is enabled and \\"{headerField}\\" is set."},"metering-and-billing":{"sections":{"plugin_config":{"title":"Plugin configuration","description":"Configure the Metering & Billing plugin."},"metering":{"title":"What to meter"},"subject":{"title":"Who to bill (subject)","description":"Define how billing subjects are identified."},"ingestion":{"title":"Connection","description":"Configure how metered data is delivered to the billing service."},"queue":{"title":"Queue","description":"Configure internal event queue settings."}},"fields":{"meter_api_requests":{"label":"Meter API requests","description":"Emit a usage event for each API Gateway request."},"meter_ai_token_usage":{"label":"Meter AI token usage","description":"Emit events for LLM input and output tokens on AI Gateway requests. Each request produces separate input/output events so they can be priced independently."},"ingest_endpoint":{"description":"The URL of the metering data ingest endpoint.","help":"For Konnect Metering & Billing, use the regional endpoint from your Metering & Billing settings. For self-hosted OpenMeter, use your ingest URL."},"api_token":{"description":"Bearer token for authenticating requests to the ingest endpoint."},"look_up_value_in":{"label":"Look up subject in","help":"Where to find the customer identifier in the request."},"subject_field":{"label":"Subject field name","placeholder":"e.g., x-customer-id","help":"e.g. x-customer-id, x-api-key, x-tenant"},"queue":{"max_coalescing_delay":{"label":"Max coalescing delay (s)"},"initial_retry_delay":{"label":"Initial retry delay (s)"},"max_retry_delay":{"label":"Max retry delay (s)"},"max_retry_time":{"label":"Max retry time (s)"}},"attributes":{"title":"Event attributes","description":"Attach custom dimensions to metered events.","look_up_value_in":{"placeholder":"e.g., x-priority-id"},"event_property_name":{"placeholder":"e.g., priority"}},"ssl_verify":{"label":"Verify TLS certificate","description":"Disable only for local development with self-signed certificates."},"timeout":{"label":"Request timeout (ms)"},"keepalive":{"label":"Connection keep-alive (ms)"}}},"governance":{"unavailable_kong_manager":"The Entitlement Enforcement plugin can't be configured in Kong Manager yet.","sections":{"configuration":{"title":"Plugin configuration","description":"Configure the Entitlement Enforcement plugin subject, feature, and connection settings."},"governance":{"title":"Entitlement Enforcement settings","description":"Configure access control behavior and response codes."},"subject":{"title":"Whose access to enforce (subject)"},"feature":{"title":"Feature"},"connection":{"title":"Connection","description":"Configure how the plugin connects to the entitlement access endpoint."},"redis":{"title":"Redis"},"cache_sync":{"title":"Cache and sync"}},"fields":{"look_up_value_in":{"label":"Whose access to enforce (Look up subject in)","help":"Where to find the customer identifier in the request."},"subject_field":{"label":"Subject field name","placeholder":"e.g., x-customer-id","help":"Name of the header or query parameter that carries the customer identifier."},"feature_key":{"label":"Feature to enforce access","help":"Feature that will control access to the scope where the plugin is applied.","create_feature":"+ Create new feature","unavailable":"You don't have access to metering features. Enable Metering & Billing in your Konnect organization to configure the feature to enforce.","load_error":"Could not load features from the entitlement enforcement service."},"governance_endpoint":{"help":"For Konnect Metering & Billing, use the regional endpoint for Metering & Billing entitlement access. For self-hosted OpenMeter, use the entitlement access endpoint of your self-hosted instance."},"ssl_verify":{"label":"Verify TLS certificate","description":"Disable only for local development with self-signed certificates."},"timeout":{"label":"Request timeout (ms)"},"keepalive":{"label":"Connection keep-alive (ms)"},"sync_rate":{"label":"Sync rate (s)"},"refresh_interval":{"label":"Refresh interval (s)"},"max_stale_seconds":{"label":"Max stale seconds"},"l1_ttl":{"label":"L1 TTL (s)"},"l2_ttl":{"label":"L2 TTL (s)"},"credit_balance_required":{"label":"Credit balance lookup","yes_label":"Yes","yes_description":"Customers must have a positive credit balance to access this feature.","no_label":"No","no_description":"Customers can access this feature regardless of their credit balance."},"fail_policy":{"label":"Plugin failure mode","allow_label":"Allow access","allow_description":"If the plugin fails, customers can still access this feature.","block_label":"Block access","block_description":"If the plugin fails, customers cannot access this feature."},"deny_unknown_customers":{"label":"Unknown customer access","allow_label":"Allow access","allow_description":"The gateway will allow access for unknown customers.","deny_label":"Deny access","deny_description":"The gateway will deny access for unknown customers."},"response":{"label":"Response mapping","columns":{"code":"Response code","status":"Status code","message":"Message"},"defaults":{"NO_CREDIT_AVAILABLE":"Customer has no credit available.","USAGE_LIMIT_REACHED":"Customer has reached usage limit for feature.","FEATURE_UNAVAILABLE":"Feature is not available for the customer.","FEATURE_NOT_FOUND":"Feature not found.","CUSTOMER_NOT_FOUND":"Customer is not found by subject."}}}},"datakit":{"plugin_config":{"title":"Flow editor"},"advanced_configuration":{"title":"Advanced configuration","show_label":"Show advanced configuration","hide_label":"Hide advanced configuration"},"description_code":"Configure this plugin by using YAML configuration. If you are copy/pasting in examples from the documentation - paste from below the <code>config</code> block.","description_flow":"Build flows visually with a drag-and-drop editor for Datakit. Visualize node connections, inputs, and outputs as you design.","description_example":"Start with a use case:","detected_config_format":"Detected {format} configuration. Do you want to convert it to Datakit configuration?","detected_config_format_title":"Convert configuration","detected_config_format_confirm":"Convert","examples":{"authenticateThirdPartyWithDynamicUrl":"Authenticate Kong to a third-party service resolved at runtime","authenticateThirdParty":"Authenticate Kong to a third-party service","authenticateWithVaultSecret":"Authenticate to a third-party service using Vault secrets","clearHeaders":"Clear request headers","combineTwoApisIntoOneResponse":"Combine multiple API responses","conditionallyStoreCachedItems":"Conditionally fetch or store cache data","convertJsonIntoXml":"Transform JSON into XML","convertJsonToXmlAndBack":"Transform JSON into XML and back","convertXmlIntoJson":"Transform XML into JSON","manipulateRequestHeaders":"Manipulate request headers"},"flow_editor":{"mode":"Flow editor","name":"Datakit flow editor","cta":"Go to flow editor","disabled_tooltip":"The flow editor is unavailable due to critical configuration errors or features not supported in the flow editor:<br/><code>{reason}</code>","expand_panel":"Expand panel","collapse_panel":"Collapse panel","return_to_config":"Return to plugin configuration","canvas_panel":{"request":"Request","response":"Response","node_count_plural":"{count} nodes","node_count_singular":"1 node"},"panel_segments":{"nodes":"Nodes","resources":{"title":"Resources","vault":{"title":"Vault secrets","add_button":"Add vault resource","name_exists_error":"Vault name already exists","name_required_error":"Vault name is required","edit":"Edit","delete":"Delete"},"cache":{"title":"Cache configuration","add_button":"Add cache configuration","strategy_options":{"memory":"Memory","redis":"Redis"},"select_redis_configuration":"Select a shared Redis configuration","inline_config":"Inline config","inline_config_preview":"You are using a dedicated Redis configuration, This is a preview of your current setup, please edit it in code editor"}}},"vault_secret_picker":{"title":"Add secret to Datakit","proceed_button_text":"Add secret","secret_name":{"label":"Secret name","placeholder":"Enter a name","help":"A unique identifier for this secret in your Datakit configuration"}},"node_panel":{"title":"Node types","description":"Drag a node onto the canvas to add it to your data flow.","groups":{"external_interaction":"External interaction","control_flow":"Control flow","data_transformation":"Data transformation","data_value":"Data value","authentication":"Authentication"}},"examples":"Examples","debug":{"label":"Debug","description":"Enables detailed error messages in client responses, making debugging easier. <a href=\\"https://developer.konghq.com/plugins/datakit/#debugging\\" target=\\"_blank\\">See the docs</a> for details."},"actions":{"zoom_in":"Zoom in","zoom_out":"Zoom out","fit_view":"Zoom to fit","auto_layout":"Auto layout","undo":"Undo","redo":"Redo","duplicate":"Duplicate","remove_from_branch":"Remove from branch","delete":"Delete","view_docs":"View docs","done":"Done"},"node_types":{"call":{"summary":"Call a third-party API","description":"Send an HTTP request and retrieve the response."},"jq":{"summary":"Transform data and cast variables with jq","description":"The <code>jq</code> node executes a jq script for processing JSON. See the official <a href=\\"https://jqlang.org\\" target=\\"_blank\\">jq docs</a> for more details."},"exit":{"summary":"Return directly to the client","description":"Trigger an early exit that produces a direct response, rather than forwarding a proxied response."},"property":{"summary":"Get and set Kong Gateway-specific data","description":"Get and set Kong Gateway host and request properties."},"static":{"summary":"Configure static input values ahead of time","description":"Emits static values to be used as inputs for other nodes. The <code>static</code> node can help you with hardcoding some known value for an input."},"branch":{"summary":"Execute nodes based on matching input conditions","description":"Execute different nodes based on matching input conditions, such as a cache hit or miss."},"cache":{"summary":"Store and fetch cached data","description":"Store data into cache and fetch cached data from cache."},"xml_to_json":{"summary":"Transform XML to JSON","description":"Transform XML to JSON."},"json_to_xml":{"summary":"Transform JSON to XML","description":"Transform JSON to XML."},"jwt_decode":{"summary":"Decode JWT headers and claims","description":"Parse a JWT without verifying its signature."},"jwt_sign":{"summary":"Create and sign JWTs","description":"Generate a signed JWT from configured claims and a signing key."},"jwt_verify":{"summary":"Verify JWT signature and claims","description":"Verify a JWT signature and validate claims such as exp, nbf, iss, and aud."},"request":{"name":"request","description":"Reads incoming client request properties. You cannot specify request node input."},"response":{"name":"response","description":"Updates properties of the outgoing client response."},"service_request":{"name":"service request","description":"Updates properties of the request sent to the service being proxied to."},"service_response":{"name":"service response","description":"Reads response properties from the service being proxied to."},"vault":{"name":"Vault","description":"Vault is a tool for securely accessing secrets."}},"node_properties":{"name":"Name","configuration":"Configuration","input":{"label":"Inputs configuration","placeholder":"Select a source","add_button":"Add an input","or":"or","input":"Input","fields":"Fields","source":"Source","tooltip":"Fields are part of the node input. A source can connect to either the fields or the input, but not both."},"input_name":{"label":"Input name","placeholder":"Enter an input name"},"jq":{"label":"jq script","help":"Refer to {link} for full documentation."},"output_value":{"label":"Output value","value_name":"Value name","value":"Value","add_button":"Add a value"},"property":{"get":"get","set":"set"},"branch":{"placeholder":"Select nodes"},"xml_to_json":{"force_array_paths":{"placeholder":"e.g. store/product"}},"jwt":{"static_claims":{"label":"Static claims","help":"Enter a JSON object. It will be stored as the node's static claims map.","errors":{"invalid_json_object":"Static claims must be a valid JSON object"}}},"error_handling":{"label":"Error handling","error_output_hint":"The error output is only set when Continue on error is enabled. Without it, connected nodes always receive an empty value.","failure_hint":"To handle a failed call, add a jq node to define the failure condition, then connect it to a Branch node.","failure_example":"For example, to treat non-2xx responses or call errors as failures:","retry":"Retry failed calls","retry_count":"Number of retries","retry_interval":"Retry interval","seconds":"seconds","retry_status_codes":"Retry status codes","status_codes_help":"Enter the status codes that trigger a retry, separated by commas. Use an exact code such as 429, or a range such as 5xx.","retry_warning":"Retrying may repeat this operation. The upstream may have already processed the request."},"errors":{"invalid_status_codes":"{fieldName} must be exact codes such as 429, or ranges such as 5xx","invalid_identifier_format":"{fieldName} must start with a letter or underscore and contain only letters, numbers, underscores, or hyphens","invalid_url_format":"Not a valid URL format","not_empty":"{fieldName} is required","not_float":"{fieldName} must be a float","not_integer":"{fieldName} must be an integer","not_number":"{fieldName} must be a number","not_unique":"{fieldName} must be unique","number_range":"{fieldName} must be between {min} and {max}","string_len_range":"{fieldName} must be between {minLength} and {maxLength} characters","reserved_node_name":"\\"{nodeName}\\" is a reserved node name","attributes_required":"Provide at least one of attributes_block_name or attributes_name_prefix","invalid_force_array_path":"Must be a plain '/'-separated element path, for example 'store/product'"}},"error":{"invalid_connection":"Invalid connection","branch_cycle":"Cannot create a circular branch relationship"},"confirm":{"title":"Connection conflict","message":{"confirm":"Are you sure you want to make this change?","switch":"You can connect an output source to either all inputs of a node or to individual inputs.","override":"Each input can connect to only one output, but one output can connect to many inputs.","branch_replace":"This node already belongs to another branch. Move it to the new branch?"},"proceed":"Yes, update"},"leave_confirm":"Leave current page? Changes you made may not be saved."},"code_editor":{"mode":"Code editor"}},"vault_picker":{"component_error":"The vault secret picker is not available"},"tag_helper":"Use comma to separate values. eg: value1, value2","foreign_placeholder":"Enter a UUID of {entity}"}}`), b_ = { title: "Redis configuration", managed_ui: { title: "Redis", shared_configuration: { label: "Use shared configuration", description: "Select an existing shared Redis configuration or create a new one. Any updates to this configuration will automatically apply to all associated plugins.", badge: "Recommended" }, dedicated_configuration: { label: "Use locally-scoped configuration", description: "Create and use a Redis configuration specifically for this plugin." }, selector: { placeholder: "Filter Redis configurations...", create_new: "New Redis" } }, shared_configuration: { label: "Shared configuration", description: "Select an existing shared Redis configuration or create a new one. Changes to this configuration automatically apply to all associated plugins.", title: "Shared Redis configuration", error: "Fetching shared Redis configurations failed." }, dedicated_configuration: { label: "Dedicated configuration", description: "Create a Redis configuration that is used only by this plugin. Changes won’t affect other plugins." }, config_card: { common_fields: { created_at_label: "Created at", updated_at_label: "Last updated at", type_label: "Redis type" } } }, w_ = { plugin: "plugin" }, k_ = { key_auth_identity_realms: { cp_label: "Current control plane", cp_group_label: "Control plane", realm_group_label: "Realms (can only select one)" }, kong_identity: { title: "Who should manage authentication and credentials?", description_with_realms: "Use Consumers or centrally managed consumers for Consumer-based authentication. Use Kong Identity for principal-based authentication and advanced integrations.", description_without_realms: "Use Consumers for Consumer-based authentication. Use Kong Identity for principal-based authentication and advanced integrations.", learn_more: "Learn more.", incompatible_data_plane_alert: "We detected that one or more data plane nodes are running a version earlier than 3.15. Requests handled by those data plane nodes will use consumers instead of Kong Identity principals.", kong_identity_label: "Kong Identity", kong_identity_description_key_auth: "Use Kong Identity to authenticate API keys and map requests to Kong Identity principals for advanced integrations. Data plane nodes running versions earlier than 3.15 continue using consumers.", kong_identity_description_basic_auth: "Use Kong Identity to authenticate Basic Auth credentials and map requests to Kong Identity principals for advanced integrations. Data plane nodes running versions earlier than 3.15 continue using consumers.", consumers_label: "Consumers", consumers_description_key_auth: "Use consumer-managed API keys. Consumers provide their API key in a request header, query parameter, or request body to authenticate requests.", consumers_description_basic_auth: "Use consumer-managed Basic Auth credentials. Consumers authenticate requests using a username and password.", centrally_managed_label: "Centrally managed consumers", centrally_managed_description: "Authenticate centrally managed consumers in Konnect using identity realms. Identity realms are scoped to the control plane by default.", identity_realms_required: "To use centrally managed consumers, you must select at least one Centrally managed consumer realm.", error_on_miss_label: "If principal lookup fails", error_on_miss_reject_label: "Reject the request", error_on_miss_reject_description: "Treat the request as unauthenticated if Kong Identity cannot resolve the principal.", error_on_miss_continue_label: "Continue without a principal", error_on_miss_continue_description: "Allow the request to continue without resolving a principal.", configure_title: "Configure Kong Identity", configure_description: "Kong Identity uses principals to represent authenticated services or applications. Create your first principal in Kong Identity to start using principal-based authentication. On data plane nodes running versions earlier than 3.15, authentication continues using consumers.", create_principal: "Create principal", configure_learn_more: "Learn more", leave_prompt_title: "Leave this page?", leave_prompt_message: "Your unsaved changes will be lost if you continue.", leave_prompt_action: "Leave page" } }, C_ = { window_type: { label: "Rate limit window type", help: "Sets the time window type to either <code>sliding</code> (default) or <code>fixed</code>.<br><ul><li>Sliding windows apply the rate limiting logic while taking into account previous hit rates (from the window that immediately precedes the current) using a dynamic weight.</li><li>Fixed windows consist of buckets that are statically assigned to a definitive time range, each request is mapped to only one fixed window based on its timestamp and will affect only that window's counters.</li></ul>", options: { fixed: "Fixed", sliding: "Sliding" }, descriptions: { fixed: "Each request counts against one static time bucket, and only that bucket's counter.", sliding: "Each request counts against a rolling window, weighted by the rate of the window before it." } }, request_limits: { title: "Request limits", subtitle: "Set one or more limits on the number of API requests allowed within a defined timeframe.", label: "Limit", label_index: "Limit {index}", request_number: "Request number", time_interval: "Time interval", interval_determiner: "Every", seconds: "Seconds", custom: "Custom", add_limit: "Add limit", remove_limit: "Remove limit {index}", expression_placeholder: "Define an expression for the limit. eg: ‘principal.metadata.limit * 2’" }, error_message: { label: "Error message", code_placeholder: "Code message", message_placeholder: "Error message", help: "Set a custom error code and message to be returned when the rate limit is exceeded." }, start_with_a_use_case: "Start with a use case:", use_cases: { fixed: { hourly_500: { label: "500 requests every hour", description: "A fixed limit of 500 requests per hour resetting sharply on the hour, ensuring no user can exceed this limit." }, half_hourly_200: { label: "200 requests every 30 minutes", description: "Users are allowed 200 requests per 30 minutes, resetting exactly on the 30 minute mark with no carryover of unused limits." }, daily_500: { label: "500 requests every day", description: "A strict limit of 5000 requests per day resetting promptly at midnight, preventing any burst traffic or inconsistent user experiences." } }, sliding: { hourly_100: { label: "100 requests every hour", description: "Maximum of 100 requests every rolling hour, continuously adjusting the count over the course of the hour. No hard limit or known reset." }, half_hourly_300: { label: "300 requests every 30 minutes", description: "Each user can make up to 300 requests in any rolling 30 minute period, with older requests dropping off as new requests are made." }, hourly_500: { label: "500 requests every hour", description: `Each user is allowed 500 requests per hour.
|
|
40
|
+
const p_ = { cancel: "Cancel", view_configuration: "View configuration", create: "New plugin", create_custom: "Create", configure: "Configure", copy_id: "Copy ID", copy_json: "Copy JSON", edit: "Edit", enable: "Enable", enabled: "Enabled", disable: "Disable", delete: "Delete", disabled: "Disabled", confirm_delete: "Yes, delete", view: "View details", configure_dynamic_ordering: "Configure dynamic ordering", go_to_plugins: "Go to plugins", save: "Save", add_entity: "Add {entity}", remove_entity: "Remove {entity}", loading_spinner: "Loading..." }, f_ = { title: "Configuration", message: "Export configurations for core Kong Gateway objects, like services, routes, and plugins, to either YAML, JSON, or Terraform. This allows for straightforward importing into APIOps tools like decK with YAML, Insomnia and cURL with JSON, or Terraform products with Terraform.", yaml: "YAML", terraform: "Terraform", json: "JSON", deck: "decK" }, m_ = { success: "Copied {val} to clipboard", success_brief: "Successfully copied to clipboard", tooltip: "Copy {label}", success_tooltip: "Copied!" }, g_ = { general: "Plugins could not be retrieved", delete: "The plugin could not be deleted at this time.", copy: "Failed to copy to clipboard", load_results: "Error loading available plugins", load_schema: "Error loading plugin schema" }, h_ = { placeholder: { konnect: "Filter by name", exact: "Filter by exact instance name or ID", kongManager: "Filter by exact instance name or ID", select: "Filter plugins", search_plugins: "Search plugins", search: "Search", tags_filter: "Type part of a tag and press Enter", scope_filter: "Select scopes" }, filter: { field: { enabled: "Enabled" }, tags_invalid: "Tags can't contain commas, slashes, or leading/trailing spaces" }, no_results: 'No results found for "{filter}"' }, v_ = { new: "New" }, y_ = { steps: { consumer: { step: "Consumer", title: "Create a consumer", description: "Consumers represent the users or applications calling your API. Add a name or tags to help you identify and manage this consumer later.", note: "A consumer can have both unique username and unique custom ID or one of them." }, credential: { step: "Credential", title: "Add a credential" } }, consumer_fields: { username_label: "Username", username_placeholder: "Enter a unique username", custom_id_label: "Custom ID", custom_id_placeholder: "Enter a unique custom ID" }, choose_consumer: { title: "Choose a consumer", description: "Choose a consumer to add a credential", select_label: "Select an existing consumer", select_placeholder: "Search consumers" }, create_consumer: { title: "Create a consumer" }, add_credential: { title: "Add a credential" }, create_principal: { title: "Create a principal", description: "Create a principal with authentication to test your plugin configuration." }, add_principal_credential: { title: "Add authentication to a principal", description: "Add authentication credentials to an existing principal." }, actions: { save_and_next: "Save and next", skip: "Skip", exit_setup: "Exit setup" }, errors: { create_consumer: "The consumer could not be created at this time.", create_credential: "The credential could not be created at this time.", load_consumers: "Consumers could not be retrieved" }, "basic-auth": { title: "Next steps for basic authentication plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to assign username and password for authentication.", create_consumer: { description: "Create a new consumer with a basic auth credential to test your plugin configuration." }, add_credential: { title: "Add a basic authentication credential", description: "Add a basic auth credential to an existing consumer." }, credential_action: "Create credential" }, "key-auth": { title: "Next steps for key authentication plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to assign API keys for authentication.", create_consumer: { description: "Create a new consumer with a key auth credential to test your plugin configuration." }, add_credential: { title: "Add a key authentication credential", description: "Add key authentication credentials to an existing consumer." }, credential_action: "Create key" }, "key-auth-enc": { title: "Next steps for key authentication plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to assign API keys for authentication.", create_consumer: { description: "Create a new consumer with a key auth credential to test your plugin configuration." }, add_credential: { title: "Add a key authentication credential", description: "Add key authentication credentials to an existing consumer." }, credential_action: "Create key" }, oauth2: { title: "Next steps for OAuth 2.0 authentication plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to register an OAuth 2.0 application for authentication.", create_consumer: { description: "Create a new consumer with an OAuth 2.0 credential to test your plugin configuration." }, add_credential: { title: "Add an OAuth 2.0 credential", description: "Add an OAuth 2.0 credential to an existing consumer." }, credential_action: "Create credential" }, "hmac-auth": { title: "Next steps for HMAC authentication plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to add usernames and secrets for authentication.", create_consumer: { description: "Create a new consumer with a HMAC auth credential to test your plugin configuration." }, add_credential: { title: "Add a HMAC authentication credential", description: "Add a HMAC auth credential to an existing consumer." }, credential_action: "Create credential" }, jwt: { title: "Next steps for JWT plugins", subtitle: "Consumers represent the users or applications calling your API. Create a consumer to assign JWT credentials (public and secret keys) for authentication.", create_consumer: { description: "Create a new consumer with a JWT credential to test your plugin configuration." }, add_credential: { title: "Add a JWT credential", description: "Add a JWT credential to an existing consumer." }, credential_action: "Create credential" }, acl: { title: "Next steps for ACL plugins", subtitle: "Consumers represent the users or applications calling your API. You do this by configuring either an allow list or a deny list with certain consumers or consumer groups.", create_consumer: { description: "Create a new consumer with an ACL credential to test your plugin configuration." }, add_credential: { title: "Add an ACL credential", description: "Add an ACL credential to an existing consumer to test your new plugin configuration." }, credential_action: "Add group to consumer" } }, __ = /* @__PURE__ */ JSON.parse(`{"title":"Plugins","list":{"toolbar_actions":{"new_plugin":"New plugin"},"table_headers":{"applied_to":"Applied to","applied_to_badges":{"consumer":"Consumer","global":"Global","route":"Route","service":"Service","consumer_group":"Consumer group"},"id":"ID","plugin":"Plugin","name":"Name","instance_name":"Instance name","scope":"Scope","status":"Status","ordering":"Ordering","ordering_badge":{"dynamic":"Dynamic","static":"Static"},"enabled":"Enabled","tags":"Tags","updated_at":"Last modified"},"empty_state":{"title":"Configure a new plugin","description":"Plugins are used to extend Kong functionality."},"empty_state_v2":{"title":"Configure your first plugin","description":"Plugins extend gateways functionalities, offering features like authentication, rate limiting, and request transformations to enhance security and performance.","create_cta":"New plugin","group":"Plugins created in gateways within this group will automatically appear here.","learn_more":"Learn more"}},"meta":{"basic-auth":{"name":"Basic Authentication","credential_name":"Basic Auth Credential","description":"Add Basic Authentication to your services"},"hmac-auth":{"name":"HMAC Authentication","credential_name":"HMAC Credential","description":"Add HMAC Authentication to your services"},"jwt-signer":{"name":"JWT Signer","description":"Verify and (re-)sign one or two tokens in a request"},"jwt":{"name":"JWT","credential_name":"JWT Credential","description":"Verify and authenticate JSON Web Tokens"},"key-auth":{"name":"Key Authentication","credential_name":"Key Auth Credential","description":"Add key authentication to your services"},"key-auth-enc":{"name":"Key Authentication Encrypted","credential_name":"Key Auth Encrypted","description":"Add key authentication to your services with an encrypted token"},"ldap-auth-advanced":{"name":"LDAP Authentication Advanced","description":"Integrate Kong with a LDAP server"},"ldap-auth":{"name":"LDAP Authentication","description":"Integrate Kong with a LDAP server"},"oauth2-introspection":{"name":"OAuth 2.0 Introspection","description":"Integrate Kong with a third-party OAuth 2.0 Authorization Server"},"oauth2":{"name":"OAuth 2.0 Authentication","credential_name":"OAuth 2.0 Application","description":"Add OAuth 2.0 authentication to your services"},"openid-connect":{"name":"OpenID Connect","description":"Integrate Kong with a third-party OpenID Connect 1.0 provider"},"mtls-auth":{"name":"Mutual TLS Authentication","description":"Secure routes and services with client certificate and mutual TLS authentication"},"vault-auth":{"name":"Vault Authentication","description":"Secure routes and services with an access token and secret token, stored securely via Vault"},"bot-detection":{"name":"Bot Detection","description":"Detect and clock bots or custom clients"},"cors":{"name":"CORS","description":"Allow developers to make requests from the browser"},"ip-restriction":{"name":"IP Restriction","description":"Whitelist or blacklist IPs that can make requests"},"opa":{"name":"OPA","description":"Authorize requests against Open Policy Agent"},"kubernetes-sidecar-injector":{"name":"Kubernetes Sidecar Injector","description":"This plugin will inject Kong dataplane nodes and form a service mesh on top of Kubernetes"},"request-validator":{"name":"Request Validator","description":"Validate requests before they reach their upstream service."},"acl":{"name":"ACL","credential_name":"Access Control Group","description":"Control which consumers can access services"},"canary":{"name":"Canary Release","description":"Methodically roll out software changes to a subset of users"},"forward-proxy":{"name":"Forward Proxy","description":"Allow Kong to connect to intermediary transparent HTTP proxies"},"proxy-cache":{"name":"Proxy Caching","description":"Cache and serve commonly requested responses in Kong"},"proxy-cache-advanced":{"name":"Proxy Caching Advanced","description":"Cache and serve commonly requested responses in Kong"},"graphql-proxy-cache-advanced":{"name":"GraphQL Proxy Caching Advanced","description":"Cache and serve commonly requested responses in Kong"},"rate-limiting-advanced":{"name":"Rate Limiting Advanced","description":"Rate-limit how many HTTP requests a developer can make"},"rate-limiting":{"name":"Rate Limiting","description":"Rate-limit how many HTTP requests a developer can make"},"graphql-rate-limiting-advanced":{"name":"GraphQL Rate Limiting Advanced","description":"Rate-limit how many HTTP requests a developer can make"},"mocking":{"name":"Mocking","description":"Provide mock endpoints to test your APIs in development against your services"},"request-size-limiting":{"name":"Request Size Limiting","description":"Block requests with bodies greater than a specific size"},"request-termination":{"name":"Request Termination","description":"Terminate all requests with a specific response"},"response-ratelimiting":{"name":"Response Rate Limiting","description":"Rate-Limiting based on a custom response header value"},"route-by-header":{"name":"Route by Header","description":"Route requests based on request headers"},"ai-proxy":{"name":"AI Proxy","description":"Directly call a configured LLM, with mediated security and tuning parameters, and using standardised Kong request and response formats."},"ai-prompt-decorator":{"name":"AI Prompt Decorator","description":"Prepend and append chat prompts to AI Proxy plugin LLM requests."},"ai-prompt-template":{"name":"AI Prompt Template","description":"Define a set of templates, containing string variable placeholders, that can be consumed by users when used with the AI Proxy plugin."},"ai-prompt-guard":{"name":"AI Prompt Guard","description":"Define a set of valid, and a set of invalid, regular expression patterns when calling LLM models with the AI Proxy plugin."},"ai-request-transformer":{"name":"AI Request Transformer","description":"Use an LLM to transform API request from a user, before sending to the upstream service."},"ai-response-transformer":{"name":"AI Response Transformer","description":"Use an LLM to transform API responses from the upstream service, before returning to the user."},"ai-rate-limiting-advanced":{"name":"AI Rate Limiting Advanced","description":"Provides rate limiting for the providers used by any AI plugins."},"ai-azure-content-safety":{"name":"AI Azure Content Safety","description":"Allows checking and auditing of AI-Proxy plugin messages, using Azure Cognitive Services, before proxying to upstream large-language model."},"aws-lambda":{"name":"AWS Lambda","description":"Invoke and manage AWS Lambda functions from Kong"},"azure-functions":{"name":"Azure Functions","description":"Invoke Azure functions"},"openwhisk":{"name":"OpenWhisk","description":"Invoke and manage OpenWhisk actions from Kong"},"pre-function":{"name":"Kong Functions (Pre-Plugins)","description":"Add and manage custom lua functions to run before other plugins"},"post-function":{"name":"Kong Functions (Post-Plugins)","description":"Add and manage custom lua functions to run after other plugins"},"datadog":{"name":"Datadog","description":"Visualize metrics on Datadog"},"prometheus":{"name":"Prometheus","description":"Export performance metrics to Prometheus"},"zipkin":{"name":"Zipkin","description":"Propagate zipkin spans and report spans to a zipkin server"},"collector":{"name":"Collector","description":"Automate spec-driven development & anomaly detection (Early Access)"},"response-transformer-advanced":{"name":"Response Transformer Advanced","description":"Transform the response sent by the upstream server on the fly on Kong, before returning the response to the client."},"correlation-id":{"name":"Correlation ID","description":"Correlate requests and responses using a unique ID"},"request-transformer-advanced":{"name":"Request Transformer Advanced","description":"Use powerful regular expressions, variables and templates to transform API requests"},"request-transformer":{"name":"Request Transformer","description":"Modify the request before hitting the upstream server"},"response-transformer":{"name":"Response Transformer","description":"Modify the upstream response before returning it to the client"},"route-transformer-advanced":{"name":"Route Transformer Advanced","description":"Transforms the routing on the fly in Kong, changing the upstream server/port/path to hit"},"kafka-upstream":{"name":"Kafka Upstream","description":"Transform requests into Kafka messages in a topic"},"degraphql":{"name":"DeGraphQL","description":"Transform a GraphQL upstream into a REST API"},"exit-transformer":{"name":"Exit Transformer","description":"Customize Kong exit responses sent downstream"},"jq":{"name":"jq","description":"Transform JSON objects included in API requests or responses using jq programs"},"file-log":{"name":"File Log","description":"Append request and response data to a log file on disk"},"http-log":{"name":"HTTP Log","description":"Send request and response logs to an HTTP server"},"loggly":{"name":"Loggly","description":"Send request and response logs to Loggly"},"statsd-advanced":{"name":"StatsD Advanced","description":"Send traffic and Kong performance metrics to StatsD"},"statsd":{"name":"StatsD","description":"Send request and response logs to StatsD"},"syslog":{"name":"Syslog","description":"Send request and response logs to Syslog"},"tcp-log":{"name":"TCP Log","description":"Send request and response logs to a TCP server"},"udp-log":{"name":"UDP Log","description":"Send request and response logs to a UDP server"},"kafka-log":{"name":"Kafka Log","description":"Publish request and response logs to a Kafka topic"},"session":{"name":"Session","description":"Sessions for Kong authentication"},"upstream-tls":{"name":"Upstream TLS","description":"Enable TLS on upstream traffic by providing Kong with a list of trusted certificates."},"application-registration":{"name":"Portal Application Registration","description":"Allow portal developers to register applications against services"},"konnect-application-auth":{"name":"Konnect Application Auth","description":"Allow Konnect portal developers to register applications against services"},"acme":{"name":"ACME","description":"Let's Encrypt and ACMEv2 integration with Kong"},"grpc-gateway":{"name":"gRPC Gateway","description":"Access gRPC services through HTTP REST"},"grpc-web":{"name":"gRPC Web","description":"Allow browser clients to call gRPC services"},"upstream-timeout":{"name":"Upstream Timeout","description":"Configure read, send and connect timeouts to an upstream"},"opentelemetry":{"name":"OpenTelemetry","description":"Propagate distributed tracing spans and report low-level spans to a OTLP-compatible server"},"websocket-validator":{"name":"WebSocket Validator","description":"Validate individual WebSocket messages against to a user-specified schema before proxying them"},"websocket-size-limit":{"name":"WebSocket Size Limit","description":"Allows operators to specify a maximum size for incoming WebSocket messages"},"tls-metadata-headers":{"name":"TLS Metadata Headers","description":"Detects client certificates in requests, retrieves the TLS metadata, and proxies this metadata via HTTP headers"},"tls-handshake-modifier":{"name":"TLS Handshake Modifier","description":"Requests the client certificate and if it exists, makes it available to other plugins acting on the request"},"oas-validation":{"name":"OAS Validation","description":"Validate HTTP requests and responses based on an API specification."},"jwe-decrypt":{"name":"Kong JWE Decrypt","description":"The Kong JWE Decrypt plugin makes it possible to decrypt an inbound token(JWE) in a request."},"xml-threat-protection":{"name":"XML Threat Protection","description":"Reduce the risk of XML attacks by checking the structure of XML payloads."},"saml":{"name":"SAML","description":"Security Assertion Markup Language (SAML) is an open standard for exchanging authentication and authorization data between an identity provider and a service provider."},"app-dynamics":{"name":"AppDynamics","description":"This plugin integrates Kong with the AppDynamics APM platform so that proxy requests handled by Kong can be identified and analyzed in AppDynamics."},"json-threat-protection":{"name":"JSON Threat Protection","description":"Apply size checks on JSON payload and minimize risk of content-level attacks"},"standard-webhooks":{"name":"Standard Webhooks","description":"Validate incoming webhooks adhere to the Standard Webhooks specification, to which Kong is a contributor"},"ai-proxy-advanced":{"name":"AI Proxy Advanced","description":"Route across different LLMs and models using advanced load balancing algorithms, including semantic routing."},"ai-semantic-cache":{"name":"AI Semantic Cache","description":"Semantically cache AI requests to any LLM to reduce latency, improve end-user experiences and optimize GenAI costs."},"ai-semantic-prompt-guard":{"name":"AI Semantic Prompt Guard","description":"Semantically and intelligently create allow and deny lists of topics that can be requested across every LLM."},"header-cert-auth":{"name":"Header Certificate Authentication","description":"Authenticate clients with MTLS certificate passed in header by a WAF or load balancer"},"upstream-oauth":{"name":"Upstream OAuth","description":"Configure Kong to obtain a OAuth2 token to consume an upstream API"},"confluent":{"name":"Confluent","description":"Streamlines integration with Confluent Cloud and transforms requests into messages published to a Confluent topic."},"service-protection":{"name":"Service Protection","description":"Prevent abuse and protect services with absolute limits on the number of requests reaching the service."},"injection-protection":{"name":"Injection Protection","description":"Protect against injection attacks by rejecting requests that match common injections patterns."},"redirect":{"name":"Redirect","description":"Redirect incoming requests to a new URL"},"kafka-consume":{"name":"Kafka Consume","description":"Consume messages from Kafka topics over HTTP protocols."},"confluent-consume":{"name":"Confluent Consume","description":"Consume messages from Confluent Kafka topics over HTTP protocols"},"request-callout":{"name":"Request Callout","description":"Callout to third party APIs as part of request processing."},"ai-sanitizer":{"name":"AI Sanitizer","description":"Sanitize personal or sensitive information from prompts before sending to LLM."},"ai-rag-injector":{"name":"AI RAG Injector","description":"Attach contextual knowledge from vector databases with flexible template to LLM prompts."},"datakit":{"name":"Datakit","description":"Datakit is a workflow engine for working with external APIs."},"ai-prompt-compressor":{"name":"AI Prompt Compressor","description":"The AI Prompt Compressor reduces costs associated with LLMs by compressing prompts."},"solace-upstream":{"name":"Solace Upstream","description":"Transform requests into Solace messages in a Solace queue or topic."},"ai-aws-guardrails":{"name":"AI AWS Guardrails","description":"The AI AWS Guardrails enables enforcement of introspection with the AWS Guardrails service for all requests processed by the AI Proxy plugin."},"ace":{"name":"Konnect Access Control Enforcement","description":"Enable Developer Self-Service for Konnect Dev Portals."},"solace-consume":{"name":"Solace Consume","description":"Consume messages from Solace and make them available through HTTP endpoints."},"solace-log":{"name":"Solace Log","description":"Publish request and response logs to a Solace topic."},"ai-llm-as-judge":{"name":"AI LLM Judge","description":"Evaluate LLM responses with an external LLM service and use accuracy scores to drive dynamic load balancing for \`llm/v1/chat\` requests."},"ai-mcp-proxy":{"name":"AI MCP Proxy","description":"Convert APIs into MCP tools, proxy MCP servers, expose multiple MCP tools, and observe MCP traffic in real time."},"ai-gcp-model-armor":{"name":"AI GCP Model Armor","description":"Audit and validate AI Proxy messages with Google Cloud Model Armor before forwarding them to an upstream LLM."},"ai-mcp-oauth2":{"name":"AI MCP OAuth2","description":"Secure MCP server access with OAuth2 authentication."},"ai-semantic-response-guard":{"name":"AI Semantic Response Guard","description":"Permit or block prompts based on semantic similarity to known LLM responses, preventing misuse of \`llm/v1/chat\` or \`llm/v1/completions\` requests."},"ai-lakera-guard":{"name":"AI Lakera Guard","description":"Audit and enforce safety policies on LLM requests and responses using the AI AWS Lakera plugin before they reach upstream LLMs."},"ai-a2a-proxy":{"name":"AI A2A Proxy","description":"Securely proxy A2A agents, with real-time RPC tracing and monitoring."},"ai-custom-guardrail":{"name":"AI Custom Guardrail","description":"Integrate with any 3rd-party Guardrail service, with customizable enforcement modes — choose whether violations block, log, or allow traffic to proceed."},"metering-and-billing":{"name":"Metering & Billing","description":"Meter API requests and AI token usage for usage-based billing. Supports flexible customer identification, custom pricing dimensions, and fine-grained traffic filtering. Integrates natively with Konnect Metering & Billing."},"entitlement-enforcement":{"name":"Entitlement Enforcement","description":"Allow or deny API requests based on customer entitlements. Checks feature access, usage limits, and credit balance against Metering & Billing before routing traffic."}},"fields":{"service":"Service","route":"Route","consumer":"Consumer","consumer_group":"Consumer group","service_id":"Service ID","route_id":"Route ID","consumer_id":"Consumer ID","consumer_group_id":"Consumer group ID"},"select":{"custom_badge_text":"This plugin is data plane node specific","cloned_from_badge":"Cloned from {link}","installed_custom_badge":"Installed custom","streamed_custom_badge":"Streamed custom","unavailable_tooltip":"This plugin is not available","already_exists":"This plugin is already applied to this resource","misc_plugins":"Other plugins","show_all":"Show all","view_more":"View more","view_less":"View less","filter":{"title":"Filter plugins","featured":"Featured","type":"Type","clear":"Clear"},"list":{"table_headers":{"name":"Plugin","description":"Description"}},"tabs":{"kong":{"title":"Kong plugins","description":"Kong plugins are bundled by default with Kong Gateway and are available across all control planes.","empty_title":"No plugins","empty_description":"No plugins are available."},"custom":{"title":"Custom plugins","description":"Custom plugins will be available in this control plane only.","disabled_tooltip":"Custom plugins are not available with this gateway. Create a hybrid or dedicated cloud gateway to leverage custom plugins.","fetch_error":"Unable to load some custom plugins. Bundled plugins are still available.","license_required":"Plugin cloning requires a license to be used.","empty_title":"No custom plugins","empty_description":"No custom plugins have been added to this control plane.","create":{"name":"Custom plugin","description":"Upload schema file to create custom plugin"}}},"highlighted_plugins":{"title":"Highlighted plugins"}},"form":{"button_deck_customize":"Customize before copying to CLI","disable_data_retrieving":"You do not have permission to select {scope}","disable_source_scope_change":"Changing the {scope} is not allowed when configuring a plugin under it","no_selection":"No selection...","fields":{"enabled":{"label":"Enabled","on_text":"This plugin is enabled","off_text":"This plugin is disabled"},"plugin_status":{"label":"Plugin status","text_on":"Enabled","text_off":"Disabled"},"instance_name":{"label":"Name","placeholder":"Enter a unique name","help":"A custom name for this plugin instance to help with identifying from the list view."},"condition":{"label":"Execution condition","placeholder":"Enter an expression","tooltip":"An expression used for conditional control over plugin execution. If the expression evaluates to true during the request flow, the plugin is executed; otherwise, it is skipped.","help":{"learn":"Learn more","about":"{link} about plugin conditions."}},"protocols":{"label":"Protocols","placeholder":"Select valid protocols for the plugin","placeholderWithDefaultValues":"Select valid protocols for the plugin. Default protocols: {protocols}","help":"A list of the request protocols that will trigger this plugin. The default value, as well as the possible values allowed on this field, may change depending on the plugin type."},"tags":{"label":"Tags","help":"An optional set of strings for grouping and filtering, separated by commas.","placeholder":"Tag1, Tag2, Tag3"},"secret":{"generateLabel":"Generate secret"}},"scoping":{"label":"Scoped","placeholder":"Search by name or UUID","disable_global_radio":"The plugin is set to 'scoped' by default. To apply a plugin globally, please navigate to the global plugin list page.","global":{"label":"Global","help":"All services, routes, and consumers"},"gateway_service":{"label":"Select a gateway service","help":"The gateway service to which this plugin configuration will apply","placeholder":"Select a gateway service","plural":"Gateway services"},"route":{"label":"Select a route","help":"The route that this plugin configuration will target","placeholder":"Select a route","plural":"Routes"},"consumer":{"label":"Select a consumer","help":"The consumer that this plugin configuration will target","placeholder":"Select a consumer","plural":"Consumers"},"consumer_group":{"label":"Select a consumer group","help":"The consumer group that this plugin configuration will target","placeholder":"Select a consumer group","plural":"Consumer groups"}},"grouping":{"advanced_parameters":{"view":"Show additional settings","hide":"Hide additional settings"}},"sections":{"plugin_scope":{"title":"Plugin scope","description":"Choose whether this plugin applies to all traffic (global) or is scoped to a specific service, route, or consumer."},"general_info":{"title":"General information","description":"Add details to help identify and manage your plugin."},"plugin_config":{"title":"Plugin configuration","description":"Set the plugin's behavior by defining its configuration settings."},"plugin_general_info":{"description":"Add a name or tags to help you identify and manage this plugin later."},"code_mode":{"title":"Code editor","description":"Configure this plugin by using YAML configuration."}}},"free-form":{"editor_mode":{"visual":"Visual editor","code":"Code editor"},"code-lens":{"entity":{"service":"Service","route":"Route","consumer":"Consumer","consumer_group":"Consumer group","certificate":"Certificate"},"field":{"name":"{entity} \\"{value}\\"","username":"Username \\"{value}\\"","custom_id":"Custom ID \\"{value}\\"","subject":"Subject \\"{value}\\"","expires_after":"Expires after \\"{value}\\""},"action":{"view_entity":"View {title}","copy_certificate":"Copy certificate","copy_uuid":"Copy UUID","retry_fetch":"Retry fetch (Hover for details)"},"unknown_error":"Unknown error"},"acl":{"mode":{"title":{"label":"Access policy","description":"Select how requests are authorized. Choose one access policy: allow or deny by ACL group, or define a CEL expression. Only one policy type can be configured at a time."},"allow":{"label":"Allow list","description":"Allow requests from the specified ACL groups."},"deny":{"label":"Deny list","description":"Deny requests from the specified ACL groups."},"allow_when":{"label":"Allow expression","description":"Allow requests when the CEL expression evaluates to true."},"deny_when":{"label":"Deny expression","description":"Deny requests when the CEL expression evaluates to true."}},"field":{"allow":{"label":"Allowed list","placeholder":"Enter group names","add":"Add allow"},"deny":{"label":"Denied list","placeholder":"Enter group names","add":"Add deny"},"allow_when":{"label":"Kong plug-in conditional expression","description":"A Kong plug-in conditional expression is a CEL expression that determines whether the plugin runs for a request. If the expression evaluates to true, the plugin executes. If it evaluates to false, the plugin is skipped.","placeholder":"eg: 'consumer.username == \\"alice\\"'","add":"Add expression","help":{"learn":"Learn more","text":"Define a Kong plug-in conditional expression to evaluate each request. The expression must return a boolean value (true or false). {link}"}},"deny_when":{"label":"Kong plug-in conditional expression","description":"A Kong plug-in conditional expression is a CEL expression that determines whether the plugin runs for a request. If the expression evaluates to true, the plugin executes. If it evaluates to false, the plugin is skipped.","placeholder":"eg: 'consumer.username == \\"alice\\"'","add":"Add expression","help":{"learn":"Learn more","text":"Define a Kong plug-in conditional expression to evaluate each request. The expression must return a boolean value (true or false). {link}"}}}},"ai-mcp-proxy":{"default_acl_item_label":"Default ACL #{index}","tool_item_label":"Tool #{index}"},"openid-connect":{"tabs":{"common":{"title":"Common Configuration Settings","description":"Parameters for enabling the OpenID Connect plugin. Set these parameters before adding authorization, authentication, or other advanced configuration details."},"authorization":{"title":"Authorization Configuration Settings","description":"Parameters for setting up claims-based authorization."},"advanced":{"title":"Advanced Configuration Settings","description":"Advanced parameters for manually configuring the OpenID Connect plugin."}},"auth_methods":{"label":"Authentication methods","placeholder":"Select authentication methods","hint":"Configure which OAuth and OpenID Connect features are supported.","km_label":"Auth methods","methods":{"authorization_code":"Authorization code flow","bearer":"Bearer access token","client_credentials":"Client credentials grant","password":"Passwords grant","introspection":"Introspection","userinfo":"UserInfo","kong_oauth2":"Kong OAuth","refresh_token":"Refresh token"},"session":{"label":"Session management","switch_label":"Enable Session Management","use_label":"Use sessions","use_description":"Issue a session cookie after successful authentication. Subsequent requests use the session instead of re-authenticating with the identity provider.","no_use_label":"Do not use sessions","no_use_description":"Authenticate each request using the configured authentication flow."}},"principals":{"header":"Who should manage authentication and credentials?","description":"Use External auth server to continue using your existing OAuth provider and authentication workflows. Use Kong Identity to adopt a newer principal-based model that centralizes and simplifies identity and authentication management.","learn_more":"Learn more.","kong_identity_label":"Kong Identity","kong_identity_description":"Use Kong Identity to authenticate OpenID Connect tokens. If all data plane nodes are running version 3.15 or later, you can also map requests to Kong Identity principals for advanced policies and integrations.","kong_identity_description_ai_manager":"Use Kong Identity to authenticate OpenID Connect tokens. If all AI Gateway nodes are running version 2.0 or later, you can also map requests to Kong Identity principals for advanced policies and integrations.","external_label":"External auth server","external_description":"Connect to your existing identity provider to manage authentication outside of Kong.","guide":{"title":"Add principals","description":"Get more value from OAuth 2.0 integration by creating principals in Kong Identity. Associate principals with this authorization server and its clients to enable principal-based authentication across Kong products.","description_external":"Get more value from OAuth 2.0 integration by creating principals in Kong Identity. Associate principals with this authorization server and its clients to enable principal-based authentication across Kong products. Requires data plane nodes to be running version 3.15 or later.","create":"Create principal","learn_more":"Learn more"},"auth_server":{"label":"Authorization Server","info":"The Kong Identity auth server that will act as the OpenID Connect provider for this plugin.","placeholder":"Select an Authorization Server","create":"Create authorization server","create_hint":"You'll need to return here after creating an authorization server. Your progress won't be saved.","no_access_help":"You don't have access to browse authorization servers. Enter the issuer URL of your Kong Identity authorization server directly.","issuer_placeholder":"e.g., https://your-auth-server.identity.konghq.com"},"client":{"label":"Client","id_label":"Client id","secret_label":"Client secret","placeholder":"Select a client","id_placeholder":"e.g., kong-gateway-client","secret_placeholder":"e.g., your-client-secret","create":"Create client","create_hint":"You'll need to return here after creating a client. Your progress won't be saved.","add":"Add client","remove":"Remove client"},"leave_prompt":{"title":"Leave this page?","message":"Your unsaved changes will be lost if you continue.","action":"Leave page"},"dp_version_alert":"We detected that one or more data plane nodes are running a version earlier than 3.15. If principal lookup is enabled, requests handled by those data plane nodes will fail."},"lookup":{"collapse_label":"Show additional settings","toggle_label":"Use principal lookup","toggle_info":"Look up the authenticated principal in Kong Identity after token validation. Enable this when the validated token doesn't contain all of the identity data required for authorization or activity logging.","method":{"label":"Principal lookup method","placeholder":"Select a lookup method","help":"Principal lookup queries Kong Identity for the principal that matches the identity in a verified access token. This enables principal-aware policies and integrations. Requires all data plane nodes to be running version 3.15 or later.","kong_identity_label":"Kong Identity client","kong_identity_description":"Match principals using a token claim, defaulting to the subject (sub) claim.","custom_identity_label":"Custom claim","custom_identity_description":"Match principals using a custom JWT claim."},"custom_identity_name":{"label":"Custom identity name","help":"Enter the custom identity name used to look up the principal. Kong matches the value from the token claim to a principal with the same custom identity name and value.","placeholder":"e.g., Customer_ID"},"token_claim":{"label":"Token claim","placeholder":"e.g., user.employee_id","help":"Defaults to the subject (sub) claim, but you can specify a different token claim if needed. Use dot notation for nested claims (for example, workload.id); escape literal periods with \\\\ (for example, workload\\\\.id).","help_custom":"The token claim whose value is matched against the Custom identity name. Defaults to the subject (sub) claim, but you can specify a different claim if needed. Use dot notation for nested claims (for example, workload.id); escape literal periods with \\\\ (for example, workload\\\\.id)."},"error_on_miss":{"label":"If principal lookup fails","reject_label":"Reject the request","reject_description":"Treat the request as unauthenticated if Kong Identity cannot resolve the principal.","continue_label":"Continue without a principal","continue_description":"Allow the request to continue without resolving a principal."},"match_consumer":{"label":"Use linked consumers","description":"Use the consumer linked to the authenticated principal so existing consumer-based plugins and policies continue to work.","link":"Learn how to link a consumer."},"match_consumer_groups":{"label":"Use linked consumer groups","description":"Use consumer groups linked to the authenticated principal so existing consumer group policies and plugins continue to work. Consumer groups can be linked through principal metadata.","link":"Learn how to link a consumer group."}},"jit":{"toggle_label":"Just-in-time principal provisioning","toggle_info":"Create or update the Kong Identity principal from token claims as requests arrive, so identities don't need to be provisioned in advance.","all_claims":{"label":"Share all token claims","description":"Share every claim from the token when creating or updating a principal."},"claims":{"label":"Claims to share","placeholder":"e.g., email, department","help":"The token claims Kong writes onto the principal when creating or updating it just in time. Separate multiple claims with commas."}},"advanced_fields":{"client_jwk_link_label":"Client JWK","verify_signature_description":"JSON Web Keys are automatically fetched from the issuer's well-known endpoint. Enter a JWKS URI below to override this."}},"request-callout":{"entity_name":"Request callout","by_lua_placeholder":"Enter Lua script here..."},"jwt-signer":{"keyset_url_required":"Provide a valid HTTP/HTTPS URL to ensure signing works correctly when \\"{signingField}\\" is enabled and \\"{headerField}\\" is set."},"metering-and-billing":{"sections":{"plugin_config":{"title":"Plugin configuration","description":"Configure the Metering & Billing plugin."},"metering":{"title":"What to meter"},"subject":{"title":"Who to bill (subject)","description":"Define how billing subjects are identified."},"ingestion":{"title":"Connection","description":"Configure how metered data is delivered to the billing service."},"queue":{"title":"Queue","description":"Configure internal event queue settings."}},"fields":{"meter_api_requests":{"label":"Meter API requests","description":"Emit a usage event for each API Gateway request."},"meter_ai_token_usage":{"label":"Meter AI token usage","description":"Emit events for LLM input and output tokens on AI Gateway requests. Each request produces separate input/output events so they can be priced independently."},"allow_status_codes":{"label":"Allowed status codes","info":"Only meter responses whose status code falls within these ranges. Leave empty to meter all responses.","placeholder":"e.g., 200-299","add":"Add status code range"},"ingest_endpoint":{"description":"The URL of the metering data ingest endpoint.","help":"For Konnect Metering & Billing, use the regional endpoint from your Metering & Billing settings. For self-hosted OpenMeter, use your ingest URL."},"api_token":{"description":"Bearer token for authenticating requests to the ingest endpoint."},"look_up_value_in":{"label":"Look up subject in","help":"Where to find the customer identifier in the request."},"subject_field":{"label":"Subject field name","placeholder":"e.g., x-customer-id","help":"e.g. x-customer-id, x-api-key, x-tenant"},"queue":{"max_coalescing_delay":{"label":"Max coalescing delay (s)"},"initial_retry_delay":{"label":"Initial retry delay (s)"},"max_retry_delay":{"label":"Max retry delay (s)"},"max_retry_time":{"label":"Max retry time (s)"}},"attributes":{"title":"Event attributes","description":"Attach custom dimensions to metered events.","look_up_value_in":{"placeholder":"e.g., x-priority-id"},"event_property_name":{"placeholder":"e.g., priority"}},"ssl_verify":{"label":"Verify TLS certificate","description":"Disable only for local development with self-signed certificates."},"timeout":{"label":"Request timeout (ms)"},"keepalive":{"label":"Connection keep-alive (ms)"}}},"governance":{"unavailable_kong_manager":"The Entitlement Enforcement plugin can't be configured in Kong Manager yet.","sections":{"configuration":{"title":"Plugin configuration","description":"Configure the Entitlement Enforcement plugin subject, feature, and connection settings."},"governance":{"title":"Entitlement Enforcement settings","description":"Configure access control behavior and response codes."},"subject":{"title":"Whose access to enforce (subject)"},"feature":{"title":"Feature"},"connection":{"title":"Connection","description":"Configure how the plugin connects to the entitlement access endpoint."},"redis":{"title":"Redis"},"cache_sync":{"title":"Cache and sync"}},"fields":{"look_up_value_in":{"label":"Whose access to enforce (Look up subject in)","help":"Where to find the customer identifier in the request."},"subject_field":{"label":"Subject field name","placeholder":"e.g., x-customer-id","help":"Name of the header or query parameter that carries the customer identifier."},"feature_key":{"label":"Feature to enforce access","help":"Feature that will control access to the scope where the plugin is applied.","create_feature":"+ Create new feature","unavailable":"You don't have access to metering features. Enable Metering & Billing in your Konnect organization to configure the feature to enforce.","load_error":"Could not load features from the entitlement enforcement service."},"governance_endpoint":{"help":"For Konnect Metering & Billing, use the regional endpoint for Metering & Billing entitlement access. For self-hosted OpenMeter, use the entitlement access endpoint of your self-hosted instance."},"ssl_verify":{"label":"Verify TLS certificate","description":"Disable only for local development with self-signed certificates."},"timeout":{"label":"Request timeout (ms)"},"keepalive":{"label":"Connection keep-alive (ms)"},"sync_rate":{"label":"Sync rate (s)"},"refresh_interval":{"label":"Refresh interval (s)"},"max_stale_seconds":{"label":"Max stale seconds"},"l1_ttl":{"label":"L1 TTL (s)"},"l2_ttl":{"label":"L2 TTL (s)"},"credit_balance_required":{"label":"Credit balance lookup","yes_label":"Yes","yes_description":"Customers must have a positive credit balance to access this feature.","no_label":"No","no_description":"Customers can access this feature regardless of their credit balance."},"fail_policy":{"label":"Plugin failure mode","allow_label":"Allow access","allow_description":"If the plugin fails, customers can still access this feature.","block_label":"Block access","block_description":"If the plugin fails, customers cannot access this feature."},"deny_unknown_customers":{"label":"Unknown customer access","allow_label":"Allow access","allow_description":"The gateway will allow access for unknown customers.","deny_label":"Deny access","deny_description":"The gateway will deny access for unknown customers."},"response":{"label":"Response mapping","columns":{"code":"Response code","status":"Status code","message":"Message"},"defaults":{"NO_CREDIT_AVAILABLE":"Customer has no credit available.","USAGE_LIMIT_REACHED":"Customer has reached usage limit for feature.","FEATURE_UNAVAILABLE":"Feature is not available for the customer.","FEATURE_NOT_FOUND":"Feature not found.","CUSTOMER_NOT_FOUND":"Customer is not found by subject."}}}},"datakit":{"plugin_config":{"title":"Flow editor"},"advanced_configuration":{"title":"Advanced configuration","show_label":"Show advanced configuration","hide_label":"Hide advanced configuration"},"description_code":"Configure this plugin by using YAML configuration. If you are copy/pasting in examples from the documentation - paste from below the <code>config</code> block.","description_flow":"Build flows visually with a drag-and-drop editor for Datakit. Visualize node connections, inputs, and outputs as you design.","description_example":"Start with a use case:","detected_config_format":"Detected {format} configuration. Do you want to convert it to Datakit configuration?","detected_config_format_title":"Convert configuration","detected_config_format_confirm":"Convert","examples":{"authenticateThirdPartyWithDynamicUrl":"Authenticate Kong to a third-party service resolved at runtime","authenticateThirdParty":"Authenticate Kong to a third-party service","authenticateWithVaultSecret":"Authenticate to a third-party service using Vault secrets","clearHeaders":"Clear request headers","combineTwoApisIntoOneResponse":"Combine multiple API responses","conditionallyStoreCachedItems":"Conditionally fetch or store cache data","convertJsonIntoXml":"Transform JSON into XML","convertJsonToXmlAndBack":"Transform JSON into XML and back","convertXmlIntoJson":"Transform XML into JSON","manipulateRequestHeaders":"Manipulate request headers"},"flow_editor":{"mode":"Flow editor","name":"Datakit flow editor","cta":"Go to flow editor","disabled_tooltip":"The flow editor is unavailable due to critical configuration errors or features not supported in the flow editor:<br/><code>{reason}</code>","expand_panel":"Expand panel","collapse_panel":"Collapse panel","return_to_config":"Return to plugin configuration","canvas_panel":{"request":"Request","response":"Response","node_count_plural":"{count} nodes","node_count_singular":"1 node"},"panel_segments":{"nodes":"Nodes","resources":{"title":"Resources","vault":{"title":"Vault secrets","add_button":"Add vault resource","name_exists_error":"Vault name already exists","name_required_error":"Vault name is required","edit":"Edit","delete":"Delete"},"cache":{"title":"Cache configuration","add_button":"Add cache configuration","strategy_options":{"memory":"Memory","redis":"Redis"},"select_redis_configuration":"Select a shared Redis configuration","inline_config":"Inline config","inline_config_preview":"You are using a dedicated Redis configuration, This is a preview of your current setup, please edit it in code editor"}}},"vault_secret_picker":{"title":"Add secret to Datakit","proceed_button_text":"Add secret","secret_name":{"label":"Secret name","placeholder":"Enter a name","help":"A unique identifier for this secret in your Datakit configuration"}},"node_panel":{"title":"Node types","description":"Drag a node onto the canvas to add it to your data flow.","groups":{"external_interaction":"External interaction","control_flow":"Control flow","data_transformation":"Data transformation","data_value":"Data value","authentication":"Authentication"}},"examples":"Examples","debug":{"label":"Debug","description":"Enables detailed error messages in client responses, making debugging easier. <a href=\\"https://developer.konghq.com/plugins/datakit/#debugging\\" target=\\"_blank\\">See the docs</a> for details."},"actions":{"zoom_in":"Zoom in","zoom_out":"Zoom out","fit_view":"Zoom to fit","auto_layout":"Auto layout","undo":"Undo","redo":"Redo","duplicate":"Duplicate","remove_from_branch":"Remove from branch","delete":"Delete","view_docs":"View docs","done":"Done"},"node_types":{"call":{"summary":"Call a third-party API","description":"Send an HTTP request and retrieve the response."},"jq":{"summary":"Transform data and cast variables with jq","description":"The <code>jq</code> node executes a jq script for processing JSON. See the official <a href=\\"https://jqlang.org\\" target=\\"_blank\\">jq docs</a> for more details."},"exit":{"summary":"Return directly to the client","description":"Trigger an early exit that produces a direct response, rather than forwarding a proxied response."},"property":{"summary":"Get and set Kong Gateway-specific data","description":"Get and set Kong Gateway host and request properties."},"static":{"summary":"Configure static input values ahead of time","description":"Emits static values to be used as inputs for other nodes. The <code>static</code> node can help you with hardcoding some known value for an input."},"branch":{"summary":"Execute nodes based on matching input conditions","description":"Execute different nodes based on matching input conditions, such as a cache hit or miss."},"cache":{"summary":"Store and fetch cached data","description":"Store data into cache and fetch cached data from cache."},"xml_to_json":{"summary":"Transform XML to JSON","description":"Transform XML to JSON."},"json_to_xml":{"summary":"Transform JSON to XML","description":"Transform JSON to XML."},"jwt_decode":{"summary":"Decode JWT headers and claims","description":"Parse a JWT without verifying its signature."},"jwt_sign":{"summary":"Create and sign JWTs","description":"Generate a signed JWT from configured claims and a signing key."},"jwt_verify":{"summary":"Verify JWT signature and claims","description":"Verify a JWT signature and validate claims such as exp, nbf, iss, and aud."},"request":{"name":"request","description":"Reads incoming client request properties. You cannot specify request node input."},"response":{"name":"response","description":"Updates properties of the outgoing client response."},"service_request":{"name":"service request","description":"Updates properties of the request sent to the service being proxied to."},"service_response":{"name":"service response","description":"Reads response properties from the service being proxied to."},"vault":{"name":"Vault","description":"Vault is a tool for securely accessing secrets."}},"node_properties":{"name":"Name","configuration":"Configuration","input":{"label":"Inputs configuration","placeholder":"Select a source","add_button":"Add an input","or":"or","input":"Input","fields":"Fields","source":"Source","tooltip":"Fields are part of the node input. A source can connect to either the fields or the input, but not both."},"input_name":{"label":"Input name","placeholder":"Enter an input name"},"jq":{"label":"jq script","help":"Refer to {link} for full documentation."},"output_value":{"label":"Output value","value_name":"Value name","value":"Value","add_button":"Add a value"},"property":{"get":"get","set":"set"},"branch":{"placeholder":"Select nodes"},"xml_to_json":{"force_array_paths":{"placeholder":"e.g. store/product"}},"jwt":{"static_claims":{"label":"Static claims","help":"Enter a JSON object. It will be stored as the node's static claims map.","errors":{"invalid_json_object":"Static claims must be a valid JSON object"}}},"error_handling":{"label":"Error handling","error_output_hint":"The error output is only set when Continue on error is enabled. Without it, connected nodes always receive an empty value.","failure_hint":"To handle a failed call, add a jq node to define the failure condition, then connect it to a Branch node.","failure_example":"For example, to treat non-2xx responses or call errors as failures:","retry":"Retry failed calls","retry_count":"Number of retries","retry_interval":"Retry interval","seconds":"seconds","retry_status_codes":"Retry status codes","status_codes_help":"Enter the status codes that trigger a retry, separated by commas. Use an exact code such as 429, or a range such as 5xx.","retry_warning":"Retrying may repeat this operation. The upstream may have already processed the request."},"errors":{"invalid_status_codes":"{fieldName} must be exact codes such as 429, or ranges such as 5xx","invalid_identifier_format":"{fieldName} must start with a letter or underscore and contain only letters, numbers, underscores, or hyphens","invalid_url_format":"Not a valid URL format","not_empty":"{fieldName} is required","not_float":"{fieldName} must be a float","not_integer":"{fieldName} must be an integer","not_number":"{fieldName} must be a number","not_unique":"{fieldName} must be unique","number_range":"{fieldName} must be between {min} and {max}","string_len_range":"{fieldName} must be between {minLength} and {maxLength} characters","reserved_node_name":"\\"{nodeName}\\" is a reserved node name","attributes_required":"Provide at least one of attributes_block_name or attributes_name_prefix","invalid_force_array_path":"Must be a plain '/'-separated element path, for example 'store/product'"}},"error":{"invalid_connection":"Invalid connection","branch_cycle":"Cannot create a circular branch relationship"},"confirm":{"title":"Connection conflict","message":{"confirm":"Are you sure you want to make this change?","switch":"You can connect an output source to either all inputs of a node or to individual inputs.","override":"Each input can connect to only one output, but one output can connect to many inputs.","branch_replace":"This node already belongs to another branch. Move it to the new branch?"},"proceed":"Yes, update"},"leave_confirm":"Leave current page? Changes you made may not be saved."},"code_editor":{"mode":"Code editor"}},"vault_picker":{"component_error":"The vault secret picker is not available"},"tag_helper":"Use comma to separate values. eg: value1, value2","foreign_placeholder":"Enter a UUID of {entity}"}}`), b_ = { title: "Redis configuration", managed_ui: { title: "Redis", shared_configuration: { label: "Use shared configuration", description: "Select an existing shared Redis configuration or create a new one. Any updates to this configuration will automatically apply to all associated plugins.", badge: "Recommended" }, dedicated_configuration: { label: "Use locally-scoped configuration", description: "Create and use a Redis configuration specifically for this plugin." }, selector: { placeholder: "Filter Redis configurations...", create_new: "New Redis" } }, shared_configuration: { label: "Shared configuration", description: "Select an existing shared Redis configuration or create a new one. Changes to this configuration automatically apply to all associated plugins.", title: "Shared Redis configuration", error: "Fetching shared Redis configurations failed." }, dedicated_configuration: { label: "Dedicated configuration", description: "Create a Redis configuration that is used only by this plugin. Changes won’t affect other plugins." }, config_card: { common_fields: { created_at_label: "Created at", updated_at_label: "Last updated at", type_label: "Redis type" } } }, w_ = { plugin: "plugin" }, k_ = { key_auth_identity_realms: { cp_label: "Current control plane", cp_group_label: "Control plane", realm_group_label: "Realms (can only select one)" }, kong_identity: { title: "Who should manage authentication and credentials?", description_with_realms: "Use Consumers or centrally managed consumers for Consumer-based authentication. Use Kong Identity for principal-based authentication and advanced integrations.", description_without_realms: "Use Consumers for Consumer-based authentication. Use Kong Identity for principal-based authentication and advanced integrations.", learn_more: "Learn more.", incompatible_data_plane_alert: "We detected that one or more data plane nodes are running a version earlier than 3.15. Requests handled by those data plane nodes will use consumers instead of Kong Identity principals.", kong_identity_label: "Kong Identity", kong_identity_description_key_auth: "Use Kong Identity to authenticate API keys and map requests to Kong Identity principals for advanced integrations. Data plane nodes running versions earlier than 3.15 continue using consumers.", kong_identity_description_basic_auth: "Use Kong Identity to authenticate Basic Auth credentials and map requests to Kong Identity principals for advanced integrations. Data plane nodes running versions earlier than 3.15 continue using consumers.", consumers_label: "Consumers", consumers_description_key_auth: "Use consumer-managed API keys. Consumers provide their API key in a request header, query parameter, or request body to authenticate requests.", consumers_description_basic_auth: "Use consumer-managed Basic Auth credentials. Consumers authenticate requests using a username and password.", centrally_managed_label: "Centrally managed consumers", centrally_managed_description: "Authenticate centrally managed consumers in Konnect using identity realms. Identity realms are scoped to the control plane by default.", identity_realms_required: "To use centrally managed consumers, you must select at least one Centrally managed consumer realm.", error_on_miss_label: "If principal lookup fails", error_on_miss_reject_label: "Reject the request", error_on_miss_reject_description: "Treat the request as unauthenticated if Kong Identity cannot resolve the principal.", error_on_miss_continue_label: "Continue without a principal", error_on_miss_continue_description: "Allow the request to continue without resolving a principal.", configure_title: "Configure Kong Identity", configure_description: "Kong Identity uses principals to represent authenticated services or applications. Create your first principal in Kong Identity to start using principal-based authentication. On data plane nodes running versions earlier than 3.15, authentication continues using consumers.", create_principal: "Create principal", configure_learn_more: "Learn more", leave_prompt_title: "Leave this page?", leave_prompt_message: "Your unsaved changes will be lost if you continue.", leave_prompt_action: "Leave page" } }, C_ = { window_type: { label: "Rate limit window type", help: "Sets the time window type to either <code>sliding</code> (default) or <code>fixed</code>.<br><ul><li>Sliding windows apply the rate limiting logic while taking into account previous hit rates (from the window that immediately precedes the current) using a dynamic weight.</li><li>Fixed windows consist of buckets that are statically assigned to a definitive time range, each request is mapped to only one fixed window based on its timestamp and will affect only that window's counters.</li></ul>", options: { fixed: "Fixed", sliding: "Sliding" }, descriptions: { fixed: "Each request counts against one static time bucket, and only that bucket's counter.", sliding: "Each request counts against a rolling window, weighted by the rate of the window before it." } }, request_limits: { title: "Request limits", subtitle: "Set one or more limits on the number of API requests allowed within a defined timeframe.", label: "Limit", label_index: "Limit {index}", request_number: "Request number", time_interval: "Time interval", interval_determiner: "Every", seconds: "Seconds", custom: "Custom", add_limit: "Add limit", remove_limit: "Remove limit {index}", expression_placeholder: "Define an expression for the limit. eg: ‘principal.metadata.limit * 2’" }, error_message: { label: "Error message", code_placeholder: "Code message", message_placeholder: "Error message", help: "Set a custom error code and message to be returned when the rate limit is exceeded." }, start_with_a_use_case: "Start with a use case:", use_cases: { fixed: { hourly_500: { label: "500 requests every hour", description: "A fixed limit of 500 requests per hour resetting sharply on the hour, ensuring no user can exceed this limit." }, half_hourly_200: { label: "200 requests every 30 minutes", description: "Users are allowed 200 requests per 30 minutes, resetting exactly on the 30 minute mark with no carryover of unused limits." }, daily_500: { label: "500 requests every day", description: "A strict limit of 5000 requests per day resetting promptly at midnight, preventing any burst traffic or inconsistent user experiences." } }, sliding: { hourly_100: { label: "100 requests every hour", description: "Maximum of 100 requests every rolling hour, continuously adjusting the count over the course of the hour. No hard limit or known reset." }, half_hourly_300: { label: "300 requests every 30 minutes", description: "Each user can make up to 300 requests in any rolling 30 minute period, with older requests dropping off as new requests are made." }, hourly_500: { label: "500 requests every hour", description: `Each user is allowed 500 requests per hour.
|
|
41
41
|
If the limit is exceeded and the user receives a 429 error, each additional request within the sliding window (hour)
|
|
42
42
|
will extend the wait time by about 12 minutes, continuously adjusting as new requests are made.` } } }, custom_key: { expression_placeholder: "e.g. principal.metadata.ff_id ? principal.metadata.ff_id : principal.id", expression_help: { text: "Define a Kong plug-in dynamic expression to determine the counter key for each request. The expression must return a string. {link}", learn: "Learn more" } } }, E_ = { step1: { title: "Custom plugin type", types: { installed: { label: "Installed custom plugin", description: "Install and manage plugins with full control over deployment and runtime. Requires restarting data planes." }, streamed: { label: "Streamed custom plugin", description: "Deploy and update plugins on running data planes without requiring gateway access." }, cloned: { label: "Cloned plugin", description: "Duplicate an existing plugin to run multiple instances within a single request." } }, compare_trigger: "Compare deployment options", compare_table: { columns: { installed: "Installed custom plugin", streamed: "Streamed custom plugin", cloned: "Cloned plugin" }, rows: { main_use_case: { header: "Main use case", installed: "Extend Kong functionality with custom plugins and control who can modify and roll out changes.", streamed: "Extend Kong functionality with plugins without requiring sysadmin access to data plane instances.", cloned: "Modify an existing plugin to run multiple instances with different names or priorities." }, file_supplied: { header: "File supplied", installed: { handler: "handler.lua", schema: "schema.lua", additional: "Any additional files or libraries needed" }, streamed: { handler: "handler.lua", schema: "schema.lua" } }, how_installed: { header: "How it's installed", installed: "Install directly on the data plane", streamed: "Through gateway configuration changes", cloned: "Through gateway configuration changes" }, sandboxing: { header: "Sandboxing", streamed: "Follows the standard sandboxing settings. {link}", streamed_link: "Link to docs", cloned: "Inherit the same sandboxing as the original plugins" }, data_plane_reload: { header: "Data plane reload" } } } }, step2_files: { title: "Custom plugin files", schema_file: { label: "Upload schema file", placeholder: "No file selected", placeholder_edit: "File not changed", button_text: "Select File", help: { text: "Only Lua based schemas are supported by Konnect. Other plugin modules can be in any language as desired. {link}", link: "Learn more" } }, handler_file: { label: "Upload handler file", placeholder: "No file selected", placeholder_edit: "File not changed", button_text: "Select File", help: "Upload plugin handler to the data plane." }, plugin_modules: { label: "Plugin modules", alert: "Upload all plugin modules to the data plane: schema.lua, handler.lua" }, streaming_enabled: { alert: "Each data plane node must run with KONG_CUSTOM_PLUGIN_STREAMING_ENABLED=true. Otherwise, Kong Gateway removes this plugin from the node's configuration. {link}", alert_link: "Learn more" } }, step2_clone: { title: "Clone plugin", select_plugin: { label: "Select a plugin", placeholder: "Type to search" } }, step3: { title: "General information", description: "Enter a custom name for this custom plugin", name: { label: "Name", placeholder: "Enter a unique name", help: "The name must be identical to the name of the plugin in the schema file." }, alias_name: { label: "Alias name", placeholder: "Enter a unique name", help: "Format: ^[a-z][a-z0-9-]*[a-z0-9]$. The name must be unique enough to avoid future conflicts with bundled plugins." }, priority: { label: "Priority", tooltip: "Set the execution priority for this cloned plugin", help: { text: "Optional. Use a number to set the absolute execution priority. If priority isn't set, plugins run in alphabetical order. {link} in the docs.", link: "Learn more" } } }, errors: { file_read_error: "Failed to read file content. Please try again.", file_too_large: "File size exceeds the maximum limit of 1 MB.", plugin_not_found: "The selected plugin could not be found. Please refresh the list and try again.", no_supported_types: "No supported custom plugin types are available in this context.", unsupported_plugin_type: "Unsupported plugin type {type}." } }, Ut = {
|
|
43
43
|
actions: p_,
|
|
@@ -4866,7 +4866,7 @@ const [eg, ST] = Qp(
|
|
|
4866
4866
|
const Me = Y ?? !Pe.expanded[H];
|
|
4867
4867
|
Me !== !!Pe.expanded[H] && (Pe.expanded[H] = Me, ve && c.commit(_e ?? `toggle:${X}:${H}`));
|
|
4868
4868
|
}
|
|
4869
|
-
function
|
|
4869
|
+
function De(X, H, Y = !0, ve) {
|
|
4870
4870
|
const _e = T(X);
|
|
4871
4871
|
_e && (_e.config = ri(H), Y && c.commit(ve));
|
|
4872
4872
|
}
|
|
@@ -5079,7 +5079,7 @@ const [eg, ST] = Qp(
|
|
|
5079
5079
|
moveGroup: he,
|
|
5080
5080
|
setGroupLayout: qe,
|
|
5081
5081
|
toggleExpanded: Te,
|
|
5082
|
-
replaceConfig:
|
|
5082
|
+
replaceConfig: De,
|
|
5083
5083
|
branchGroups: E,
|
|
5084
5084
|
// field ops
|
|
5085
5085
|
addField: se,
|
|
@@ -5167,14 +5167,14 @@ function IT(e) {
|
|
|
5167
5167
|
const he = ee.source, qe = ee.target;
|
|
5168
5168
|
if (m(he) || m(qe))
|
|
5169
5169
|
continue;
|
|
5170
|
-
const Te = J(he),
|
|
5170
|
+
const Te = J(he), De = J(qe);
|
|
5171
5171
|
if (Te) {
|
|
5172
|
-
if (!
|
|
5172
|
+
if (!De)
|
|
5173
5173
|
throw new Error(`Cannot find target node '${qe}' for edge '${ee.id}' via findNode`);
|
|
5174
5174
|
} else throw new Error(`Cannot find source node '${he}' for edge '${ee.id}' via findNode`);
|
|
5175
|
-
if (G(Te) === G(
|
|
5175
|
+
if (G(Te) === G(De))
|
|
5176
5176
|
continue;
|
|
5177
|
-
let se = Te, ae =
|
|
5177
|
+
let se = Te, ae = De, U = V(se.id), te = V(ae.id);
|
|
5178
5178
|
for (; U !== te; )
|
|
5179
5179
|
if (U > te) {
|
|
5180
5180
|
const pe = G(se);
|
|
@@ -5228,8 +5228,8 @@ function IT(e) {
|
|
|
5228
5228
|
return console.warn(`Cannot find node '${qe}' of group '${ee.id}' by getNodeById`), he;
|
|
5229
5229
|
if (Te.phase !== n) return he;
|
|
5230
5230
|
if (Te.type === "branch") {
|
|
5231
|
-
const
|
|
5232
|
-
|
|
5231
|
+
const De = h.value.get(Te.id);
|
|
5232
|
+
De && he.push(...De);
|
|
5233
5233
|
}
|
|
5234
5234
|
return F.delete(Te.id), he.push(Te), he;
|
|
5235
5235
|
}, []),
|
|
@@ -5297,13 +5297,13 @@ function IT(e) {
|
|
|
5297
5297
|
const W = me.length > 0 ? Im(me) : { x: 0, y: 0, width: 0, height: 0 }, ge = W.width, ee = W.height, he = W.x, qe = W.x + W.width, Te = Math.max(
|
|
5298
5298
|
0,
|
|
5299
5299
|
Math.min(Oo(w?.width) ?? Number.POSITIVE_INFINITY, Z_) - ge - 2 * x - (V?.dimensions?.width ?? 0) - (G?.dimensions?.width ?? 0) - 2 * S
|
|
5300
|
-
),
|
|
5300
|
+
), De = W.y + ee / 2;
|
|
5301
5301
|
B && d(B.id, {
|
|
5302
5302
|
x: he - x - Te / 2 - (V?.dimensions?.width ?? 0),
|
|
5303
|
-
y:
|
|
5303
|
+
y: De - (V?.dimensions?.height ?? 0) / 2
|
|
5304
5304
|
}, !1), j && d(j.id, {
|
|
5305
5305
|
x: qe + x + Te / 2,
|
|
5306
|
-
y:
|
|
5306
|
+
y: De - (G?.dimensions?.height ?? 0) / 2
|
|
5307
5307
|
}, !1);
|
|
5308
5308
|
}
|
|
5309
5309
|
function T(A) {
|
|
@@ -5509,12 +5509,12 @@ function xT({
|
|
|
5509
5509
|
if (!me.length) return;
|
|
5510
5510
|
const le = [];
|
|
5511
5511
|
for (const he of me) {
|
|
5512
|
-
const Te = o(he.id)?.dimensions,
|
|
5513
|
-
if (
|
|
5512
|
+
const Te = o(he.id)?.dimensions, De = Te?.width ?? 0, se = Te?.height ?? 0;
|
|
5513
|
+
if (De <= 0 || se <= 0)
|
|
5514
5514
|
return;
|
|
5515
5515
|
le.push({
|
|
5516
5516
|
...he.position,
|
|
5517
|
-
width:
|
|
5517
|
+
width: De,
|
|
5518
5518
|
height: se
|
|
5519
5519
|
});
|
|
5520
5520
|
const ae = y.value.get(he.id) ?? [];
|
|
@@ -5593,8 +5593,8 @@ function xT({
|
|
|
5593
5593
|
for (; ge.length; ) {
|
|
5594
5594
|
const qe = ge.shift(), Te = l.value.get(qe);
|
|
5595
5595
|
if (!Te) continue;
|
|
5596
|
-
const
|
|
5597
|
-
for (const se of
|
|
5596
|
+
const De = w(Te).filter((se) => se.phase === e && !se.hidden);
|
|
5597
|
+
for (const se of De) {
|
|
5598
5598
|
he.has(se.id) || (u(se.id, {
|
|
5599
5599
|
x: se.position.x + me,
|
|
5600
5600
|
y: se.position.y + le
|
|
@@ -5752,9 +5752,9 @@ const [OT, PT] = Qp(
|
|
|
5752
5752
|
commit: ge,
|
|
5753
5753
|
reset: ee,
|
|
5754
5754
|
groupMapById: he
|
|
5755
|
-
} = d, { isGroupId: qe, canAddMember: Te } = W,
|
|
5756
|
-
|
|
5757
|
-
}, ae = mv(
|
|
5755
|
+
} = d, { isGroupId: qe, canAddMember: Te } = W, De = pn(), se = (Z) => {
|
|
5756
|
+
De.value = Z;
|
|
5757
|
+
}, ae = mv(De);
|
|
5758
5758
|
function U(Z, de) {
|
|
5759
5759
|
const Fe = G(Z.source), xe = G(Z.target);
|
|
5760
5760
|
return !!(Fe && xe && Fe.phase === de && xe.phase === de);
|
|
@@ -6338,12 +6338,12 @@ const DT = {
|
|
|
6338
6338
|
const qe = le === "input" ? ee.targetField || "input" : ee.sourceField || "output";
|
|
6339
6339
|
let Te;
|
|
6340
6340
|
le === "input" && ee.sourceField ? Te = he.fields.output.find((U) => U.id === ee.sourceField)?.name : le === "output" && ee.targetField && (Te = he.fields.input.find((U) => U.id === ee.targetField)?.name);
|
|
6341
|
-
const
|
|
6341
|
+
const De = {
|
|
6342
6342
|
edgeId: ee.id,
|
|
6343
6343
|
node: he,
|
|
6344
6344
|
fieldName: Te
|
|
6345
6345
|
}, se = W.get(qe);
|
|
6346
|
-
se ? se.push(
|
|
6346
|
+
se ? se.push(De) : W.set(qe, [De]);
|
|
6347
6347
|
}
|
|
6348
6348
|
return W;
|
|
6349
6349
|
}
|
|
@@ -6687,9 +6687,9 @@ const DT = {
|
|
|
6687
6687
|
attachNodeToActiveGroup: G
|
|
6688
6688
|
} = _;
|
|
6689
6689
|
function K(Te) {
|
|
6690
|
-
const
|
|
6691
|
-
if (
|
|
6692
|
-
return
|
|
6690
|
+
const De = Te.dataTransfer?.types.find((se) => se.startsWith(`${ga}/`));
|
|
6691
|
+
if (De)
|
|
6692
|
+
return De.replace(`${ga}/`, "");
|
|
6693
6693
|
}
|
|
6694
6694
|
function me(Te) {
|
|
6695
6695
|
if (e.mode === "inspect") {
|
|
@@ -6711,10 +6711,10 @@ const DT = {
|
|
|
6711
6711
|
}
|
|
6712
6712
|
function W(Te) {
|
|
6713
6713
|
if (e.mode !== "edit") return;
|
|
6714
|
-
const
|
|
6715
|
-
if (!
|
|
6714
|
+
const De = Te.dataTransfer?.getData(ga);
|
|
6715
|
+
if (!De) return;
|
|
6716
6716
|
Te.preventDefault();
|
|
6717
|
-
const se = JSON.parse(
|
|
6717
|
+
const se = JSON.parse(De);
|
|
6718
6718
|
if (se.action !== "create-node") return;
|
|
6719
6719
|
const ae = P({ x: Te.clientX, y: Te.clientY }), { type: U, anchor: te } = se.data, pe = {
|
|
6720
6720
|
type: U,
|
|
@@ -6755,13 +6755,13 @@ const DT = {
|
|
|
6755
6755
|
async function qe() {
|
|
6756
6756
|
const Te = E.value;
|
|
6757
6757
|
if (e.mode !== "edit" || !Te || Te.phase !== e.phase) return;
|
|
6758
|
-
const
|
|
6759
|
-
|
|
6758
|
+
const De = x(Te.id, y(Te.id));
|
|
6759
|
+
De && (await h(De), w.value = !0, v(De));
|
|
6760
6760
|
}
|
|
6761
6761
|
return pf({
|
|
6762
6762
|
enabled: I(() => !!E.value && e.mode === "edit" && E.value.phase === e.phase),
|
|
6763
6763
|
duplicate: qe
|
|
6764
|
-
}), t({ autoLayout: p, fitView: m }), (Te,
|
|
6764
|
+
}), t({ autoLayout: p, fitView: m }), (Te, De) => (b(), q("div", {
|
|
6765
6765
|
ref_key: "flowCanvas",
|
|
6766
6766
|
ref: a,
|
|
6767
6767
|
class: "dk-flow-canvas"
|
|
@@ -6780,7 +6780,7 @@ const DT = {
|
|
|
6780
6780
|
onDragover: le,
|
|
6781
6781
|
onDrop: W,
|
|
6782
6782
|
onNodeClick: me,
|
|
6783
|
-
onNodesChange:
|
|
6783
|
+
onNodesChange: De[0] || (De[0] = (se) => o("nodes-change")),
|
|
6784
6784
|
onNodesInitialized: ge
|
|
6785
6785
|
}), {
|
|
6786
6786
|
"node-flow": C(({ data: se }) => [
|
|
@@ -8535,7 +8535,7 @@ const it = {
|
|
|
8535
8535
|
}
|
|
8536
8536
|
}, Te = (ae) => {
|
|
8537
8537
|
ae === "schema" ? K.fields.schemaContent = "" : K.fields.handlerContent = "";
|
|
8538
|
-
},
|
|
8538
|
+
}, De = () => {
|
|
8539
8539
|
c.push(o.config.cancelRoute);
|
|
8540
8540
|
};
|
|
8541
8541
|
Wt(async () => {
|
|
@@ -8620,7 +8620,7 @@ const it = {
|
|
|
8620
8620
|
"slideout-deck-entity-type": L.value,
|
|
8621
8621
|
"slideout-fetch-url": E.value,
|
|
8622
8622
|
"slideout-request-method": x.value,
|
|
8623
|
-
onCancel:
|
|
8623
|
+
onCancel: De,
|
|
8624
8624
|
onSubmit: se
|
|
8625
8625
|
}, {
|
|
8626
8626
|
"form-actions": C(() => [
|
|
@@ -8640,7 +8640,7 @@ const it = {
|
|
|
8640
8640
|
appearance: "secondary",
|
|
8641
8641
|
"data-testid": "custom-plugin-form-cancel",
|
|
8642
8642
|
disabled: K.readonly,
|
|
8643
|
-
onClick:
|
|
8643
|
+
onClick: De
|
|
8644
8644
|
}, {
|
|
8645
8645
|
default: C(() => [
|
|
8646
8646
|
ue(M(s(r)("actions.cancel")), 1)
|
|
@@ -9487,7 +9487,7 @@ const it = {
|
|
|
9487
9487
|
onChange: h
|
|
9488
9488
|
}), St({
|
|
9489
9489
|
[s(Ey)]: C(() => [
|
|
9490
|
-
(b(!0), q(Ae, null, et(u.value, (_, k) => (b(), D(s(
|
|
9490
|
+
(b(!0), q(Ae, null, et(u.value, (_, k) => (b(), D(s(ct), {
|
|
9491
9491
|
key: `${e.pluginName}-${k}`,
|
|
9492
9492
|
match: s(Sy)(_.match)
|
|
9493
9493
|
}, {
|
|
@@ -9499,7 +9499,7 @@ const it = {
|
|
|
9499
9499
|
]),
|
|
9500
9500
|
_: 2
|
|
9501
9501
|
}, 1032, ["match"]))), 128)),
|
|
9502
|
-
g(s(
|
|
9502
|
+
g(s(ct), {
|
|
9503
9503
|
match: ({ path: _ }) => _ === s(c)?.redisPath?.value
|
|
9504
9504
|
}, {
|
|
9505
9505
|
default: C(() => [
|
|
@@ -9590,7 +9590,7 @@ const q$ = /* @__PURE__ */ be({
|
|
|
9590
9590
|
// JWT: PEM-formatted public key
|
|
9591
9591
|
{
|
|
9592
9592
|
match: "rsa_public_key",
|
|
9593
|
-
component:
|
|
9593
|
+
component: Ke,
|
|
9594
9594
|
propsOverrides: { multiline: !0, rows: 10 }
|
|
9595
9595
|
}
|
|
9596
9596
|
]), v = I(() => {
|
|
@@ -17200,7 +17200,7 @@ const T2 = {
|
|
|
17200
17200
|
]),
|
|
17201
17201
|
_: 1
|
|
17202
17202
|
}, 8, ["for", "label"]),
|
|
17203
|
-
g(s(
|
|
17203
|
+
g(s(Ke), {
|
|
17204
17204
|
"input-id": s(t),
|
|
17205
17205
|
label: "",
|
|
17206
17206
|
name: "condition",
|
|
@@ -17600,7 +17600,7 @@ const T2 = {
|
|
|
17600
17600
|
label: s(n)("plugins.form.fields.plugin_status.label"),
|
|
17601
17601
|
name: "enabled"
|
|
17602
17602
|
}, null, 8, ["disabled-text", "enabled-text", "label"])) : Q("", !0),
|
|
17603
|
-
$.value.has("instance_name") ? (b(), D(s(
|
|
17603
|
+
$.value.has("instance_name") ? (b(), D(s(Ke), {
|
|
17604
17604
|
key: 1,
|
|
17605
17605
|
label: s(n)("plugins.form.fields.instance_name.label"),
|
|
17606
17606
|
name: "instance_name",
|
|
@@ -17756,7 +17756,7 @@ const _n = /* @__PURE__ */ be({
|
|
|
17756
17756
|
])
|
|
17757
17757
|
]),
|
|
17758
17758
|
N("div", j2, [
|
|
17759
|
-
(b(), D(s(
|
|
17759
|
+
(b(), D(s(lt), {
|
|
17760
17760
|
key: p.value,
|
|
17761
17761
|
"add-item-label": s(c)(`plugins.free-form.acl.field.${p.value}.add`),
|
|
17762
17762
|
label: s(c)(`plugins.free-form.acl.field.${p.value}.label`),
|
|
@@ -17764,7 +17764,7 @@ const _n = /* @__PURE__ */ be({
|
|
|
17764
17764
|
name: `config.${p.value}`
|
|
17765
17765
|
}, {
|
|
17766
17766
|
item: C(({ autofocus: L, fieldName: $ }) => [
|
|
17767
|
-
g(s(
|
|
17767
|
+
g(s(Ke), {
|
|
17768
17768
|
autofocus: L,
|
|
17769
17769
|
multiline: f.value,
|
|
17770
17770
|
name: $,
|
|
@@ -17847,7 +17847,7 @@ const V2 = Le({
|
|
|
17847
17847
|
fieldRenderers: [
|
|
17848
17848
|
{
|
|
17849
17849
|
match: "config.categories",
|
|
17850
|
-
component:
|
|
17850
|
+
component: lt,
|
|
17851
17851
|
propsOverrides: {
|
|
17852
17852
|
appearance: "tabs",
|
|
17853
17853
|
itemLabel: (e, t) => `#${t + 1} Category`
|
|
@@ -17868,7 +17868,7 @@ const V2 = Le({
|
|
|
17868
17868
|
fieldRenderers: [
|
|
17869
17869
|
{
|
|
17870
17870
|
match: "config.gcp_service_account_json",
|
|
17871
|
-
component:
|
|
17871
|
+
component: Ke,
|
|
17872
17872
|
propsOverrides: {
|
|
17873
17873
|
multiline: !0,
|
|
17874
17874
|
rows: 4
|
|
@@ -17879,7 +17879,7 @@ const V2 = Le({
|
|
|
17879
17879
|
fieldRenderers: [
|
|
17880
17880
|
{
|
|
17881
17881
|
match: "config.prompt",
|
|
17882
|
-
component:
|
|
17882
|
+
component: Ke,
|
|
17883
17883
|
propsOverrides: {
|
|
17884
17884
|
multiline: !0,
|
|
17885
17885
|
rows: 4
|
|
@@ -17913,11 +17913,11 @@ const V2 = Le({
|
|
|
17913
17913
|
const { i18n: { t: i } } = it.useI18n();
|
|
17914
17914
|
return (o, a) => (b(), D(_n, hn(xn(t)), {
|
|
17915
17915
|
"field-renderers": C(() => [
|
|
17916
|
-
g(s(
|
|
17916
|
+
g(s(ct), {
|
|
17917
17917
|
match: ({ path: r }) => r === "config.default_acl"
|
|
17918
17918
|
}, {
|
|
17919
17919
|
default: C((r) => [
|
|
17920
|
-
g(s(
|
|
17920
|
+
g(s(lt), je(r, {
|
|
17921
17921
|
appearance: "tabs",
|
|
17922
17922
|
"item-label": (l, c) => s(i)("plugins.free-form.ai-mcp-proxy.default_acl_item_label", { index: c + 1 }),
|
|
17923
17923
|
"sticky-tabs": ""
|
|
@@ -17925,11 +17925,11 @@ const V2 = Le({
|
|
|
17925
17925
|
]),
|
|
17926
17926
|
_: 1
|
|
17927
17927
|
}, 8, ["match"]),
|
|
17928
|
-
g(s(
|
|
17928
|
+
g(s(ct), {
|
|
17929
17929
|
match: ({ path: r }) => r === "config.tools"
|
|
17930
17930
|
}, {
|
|
17931
17931
|
default: C((r) => [
|
|
17932
|
-
g(s(
|
|
17932
|
+
g(s(lt), je(r, {
|
|
17933
17933
|
appearance: "tabs",
|
|
17934
17934
|
"item-label": (l, c) => s(i)("plugins.free-form.ai-mcp-proxy.tool_item_label", { index: c + 1 }),
|
|
17935
17935
|
"sticky-tabs": ""
|
|
@@ -17937,7 +17937,7 @@ const V2 = Le({
|
|
|
17937
17937
|
]),
|
|
17938
17938
|
_: 1
|
|
17939
17939
|
}, 8, ["match"]),
|
|
17940
|
-
g(s(
|
|
17940
|
+
g(s(ct), {
|
|
17941
17941
|
match: ({ genericPath: r }) => r === "config.tools.*.query" || r === "config.tools.*.headers"
|
|
17942
17942
|
}, {
|
|
17943
17943
|
default: C((r) => [
|
|
@@ -17970,7 +17970,7 @@ const V2 = Le({
|
|
|
17970
17970
|
fieldRenderers: [
|
|
17971
17971
|
{
|
|
17972
17972
|
match: "config.compression_ranges",
|
|
17973
|
-
component:
|
|
17973
|
+
component: lt,
|
|
17974
17974
|
propsOverrides: {
|
|
17975
17975
|
appearance: "tabs",
|
|
17976
17976
|
itemLabel: (e, t) => `#${t + 1} Range`
|
|
@@ -17981,12 +17981,12 @@ const V2 = Le({
|
|
|
17981
17981
|
fieldRenderers: [
|
|
17982
17982
|
{
|
|
17983
17983
|
match: "config.prompts.prepend.*.content",
|
|
17984
|
-
component:
|
|
17984
|
+
component: Ke,
|
|
17985
17985
|
propsOverrides: { multiline: !0, rows: 4 }
|
|
17986
17986
|
},
|
|
17987
17987
|
{
|
|
17988
17988
|
match: "config.prompts.append.*.content",
|
|
17989
|
-
component:
|
|
17989
|
+
component: Ke,
|
|
17990
17990
|
propsOverrides: { multiline: !0, rows: 4 }
|
|
17991
17991
|
}
|
|
17992
17992
|
]
|
|
@@ -17994,7 +17994,7 @@ const V2 = Le({
|
|
|
17994
17994
|
fieldRenderers: [
|
|
17995
17995
|
{
|
|
17996
17996
|
match: "config.templates",
|
|
17997
|
-
component:
|
|
17997
|
+
component: lt,
|
|
17998
17998
|
propsOverrides: {
|
|
17999
17999
|
appearance: "tabs",
|
|
18000
18000
|
itemLabel: (e, t) => `#${t + 1} Template`
|
|
@@ -18002,7 +18002,7 @@ const V2 = Le({
|
|
|
18002
18002
|
},
|
|
18003
18003
|
{
|
|
18004
18004
|
match: ({ genericPath: e }) => e === "config.templates.*.template",
|
|
18005
|
-
component:
|
|
18005
|
+
component: Ke,
|
|
18006
18006
|
propsOverrides: {
|
|
18007
18007
|
multiline: !0,
|
|
18008
18008
|
rows: 4
|
|
@@ -18013,7 +18013,7 @@ const V2 = Le({
|
|
|
18013
18013
|
fieldRenderers: [
|
|
18014
18014
|
{
|
|
18015
18015
|
match: "config.targets",
|
|
18016
|
-
component:
|
|
18016
|
+
component: lt,
|
|
18017
18017
|
propsOverrides: {
|
|
18018
18018
|
appearance: "tabs",
|
|
18019
18019
|
stickyTabs: !0,
|
|
@@ -18022,7 +18022,7 @@ const V2 = Le({
|
|
|
18022
18022
|
},
|
|
18023
18023
|
{
|
|
18024
18024
|
match: "config.acls.allow",
|
|
18025
|
-
component:
|
|
18025
|
+
component: lt,
|
|
18026
18026
|
propsOverrides: {
|
|
18027
18027
|
appearance: "tabs",
|
|
18028
18028
|
itemLabel: (e, t) => `#${t + 1} Allow`
|
|
@@ -18033,7 +18033,7 @@ const V2 = Le({
|
|
|
18033
18033
|
"config.acls.allow.*.match",
|
|
18034
18034
|
"config.acls.deny.*.match"
|
|
18035
18035
|
].includes(e),
|
|
18036
|
-
component:
|
|
18036
|
+
component: lt,
|
|
18037
18037
|
propsOverrides: {
|
|
18038
18038
|
appearance: "tabs",
|
|
18039
18039
|
itemLabel: (e, t) => `#${t + 1} Match`
|
|
@@ -18041,7 +18041,7 @@ const V2 = Le({
|
|
|
18041
18041
|
},
|
|
18042
18042
|
{
|
|
18043
18043
|
match: "config.acls.deny",
|
|
18044
|
-
component:
|
|
18044
|
+
component: lt,
|
|
18045
18045
|
propsOverrides: {
|
|
18046
18046
|
appearance: "tabs",
|
|
18047
18047
|
stickyTabs: !0,
|
|
@@ -18052,7 +18052,7 @@ const V2 = Le({
|
|
|
18052
18052
|
}), Cs = [
|
|
18053
18053
|
{
|
|
18054
18054
|
match: "config.vectordb.redis.sentinel_nodes",
|
|
18055
|
-
component:
|
|
18055
|
+
component: lt,
|
|
18056
18056
|
propsOverrides: {
|
|
18057
18057
|
appearance: "tabs",
|
|
18058
18058
|
itemLabel: (e, t) => ` #${t + 1} Sentinel node`
|
|
@@ -18060,7 +18060,7 @@ const V2 = Le({
|
|
|
18060
18060
|
},
|
|
18061
18061
|
{
|
|
18062
18062
|
match: "config.vectordb.redis.cluster_nodes",
|
|
18063
|
-
component:
|
|
18063
|
+
component: lt,
|
|
18064
18064
|
propsOverrides: {
|
|
18065
18065
|
appearance: "tabs",
|
|
18066
18066
|
itemLabel: (e, t) => ` #${t + 1} Cluster node`
|
|
@@ -18093,7 +18093,7 @@ const V2 = Le({
|
|
|
18093
18093
|
...Cs,
|
|
18094
18094
|
{
|
|
18095
18095
|
match: "config.inject_template",
|
|
18096
|
-
component:
|
|
18096
|
+
component: Ke,
|
|
18097
18097
|
propsOverrides: { multiline: !0, rows: 8 }
|
|
18098
18098
|
}
|
|
18099
18099
|
],
|
|
@@ -18111,7 +18111,7 @@ const V2 = Le({
|
|
|
18111
18111
|
fieldRenderers: [
|
|
18112
18112
|
{
|
|
18113
18113
|
match: "config.prompt",
|
|
18114
|
-
component:
|
|
18114
|
+
component: Ke,
|
|
18115
18115
|
propsOverrides: {
|
|
18116
18116
|
multiline: !0,
|
|
18117
18117
|
rows: 4
|
|
@@ -18122,7 +18122,7 @@ const V2 = Le({
|
|
|
18122
18122
|
fieldRenderers: [
|
|
18123
18123
|
{
|
|
18124
18124
|
match: "config.prompt",
|
|
18125
|
-
component:
|
|
18125
|
+
component: Ke,
|
|
18126
18126
|
propsOverrides: {
|
|
18127
18127
|
multiline: !0,
|
|
18128
18128
|
rows: 4
|
|
@@ -18138,7 +18138,7 @@ const V2 = Le({
|
|
|
18138
18138
|
},
|
|
18139
18139
|
{
|
|
18140
18140
|
match: "config.custom_patterns",
|
|
18141
|
-
component:
|
|
18141
|
+
component: lt,
|
|
18142
18142
|
propsOverrides: {
|
|
18143
18143
|
appearance: "tabs",
|
|
18144
18144
|
itemLabel: (e, t) => `#${t + 1} Pattern`
|
|
@@ -18153,12 +18153,12 @@ const V2 = Le({
|
|
|
18153
18153
|
...Cs,
|
|
18154
18154
|
{
|
|
18155
18155
|
match: "config.rules.allow_prompts.*",
|
|
18156
|
-
component:
|
|
18156
|
+
component: Ke,
|
|
18157
18157
|
propsOverrides: { multiline: !0, rows: 2 }
|
|
18158
18158
|
},
|
|
18159
18159
|
{
|
|
18160
18160
|
match: "config.rules.deny_prompts.*",
|
|
18161
|
-
component:
|
|
18161
|
+
component: Ke,
|
|
18162
18162
|
propsOverrides: { multiline: !0, rows: 2 }
|
|
18163
18163
|
}
|
|
18164
18164
|
],
|
|
@@ -18168,12 +18168,12 @@ const V2 = Le({
|
|
|
18168
18168
|
...Cs,
|
|
18169
18169
|
{
|
|
18170
18170
|
match: "config.rules.allow_responses.*",
|
|
18171
|
-
component:
|
|
18171
|
+
component: Ke,
|
|
18172
18172
|
propsOverrides: { multiline: !0, rows: 2 }
|
|
18173
18173
|
},
|
|
18174
18174
|
{
|
|
18175
18175
|
match: "config.rules.deny_responses.*",
|
|
18176
|
-
component:
|
|
18176
|
+
component: Ke,
|
|
18177
18177
|
propsOverrides: { multiline: !0, rows: 2 }
|
|
18178
18178
|
}
|
|
18179
18179
|
],
|
|
@@ -18323,7 +18323,7 @@ const V2 = Le({
|
|
|
18323
18323
|
name: "tags",
|
|
18324
18324
|
placeholder: s(t)("plugins.form.fields.tags.placeholder")
|
|
18325
18325
|
}, null, 8, ["placeholder"])) : Q("", !0),
|
|
18326
|
-
s(n)("condition") ? (b(), D(s(
|
|
18326
|
+
s(n)("condition") ? (b(), D(s(Ke), {
|
|
18327
18327
|
key: 3,
|
|
18328
18328
|
name: "condition",
|
|
18329
18329
|
placeholder: s(t)("plugins.form.fields.condition.placeholder")
|
|
@@ -18728,7 +18728,7 @@ const V2 = Le({
|
|
|
18728
18728
|
},
|
|
18729
18729
|
{
|
|
18730
18730
|
match: "config.realm",
|
|
18731
|
-
component:
|
|
18731
|
+
component: Ke,
|
|
18732
18732
|
propsOverrides: {
|
|
18733
18733
|
placeholder: "e.g., my-api"
|
|
18734
18734
|
}
|
|
@@ -18736,7 +18736,7 @@ const V2 = Le({
|
|
|
18736
18736
|
// basic-auth + key-auth
|
|
18737
18737
|
{
|
|
18738
18738
|
match: "config.anonymous",
|
|
18739
|
-
component:
|
|
18739
|
+
component: Ke,
|
|
18740
18740
|
propsOverrides: {
|
|
18741
18741
|
placeholder: "e.g., 00000000-0000-0000-0000-000000000001"
|
|
18742
18742
|
}
|
|
@@ -18761,7 +18761,7 @@ const V2 = Le({
|
|
|
18761
18761
|
fieldRenderers: [
|
|
18762
18762
|
{
|
|
18763
18763
|
match: "config.message_by_lua_functions.*",
|
|
18764
|
-
component:
|
|
18764
|
+
component: Ke,
|
|
18765
18765
|
propsOverrides: {
|
|
18766
18766
|
multiline: !0,
|
|
18767
18767
|
rows: 3
|
|
@@ -18769,7 +18769,7 @@ const V2 = Le({
|
|
|
18769
18769
|
},
|
|
18770
18770
|
{
|
|
18771
18771
|
match: "config.topics",
|
|
18772
|
-
component:
|
|
18772
|
+
component: lt,
|
|
18773
18773
|
propsOverrides: {
|
|
18774
18774
|
appearance: "tabs",
|
|
18775
18775
|
stickyTabs: !0,
|
|
@@ -18778,7 +18778,7 @@ const V2 = Le({
|
|
|
18778
18778
|
},
|
|
18779
18779
|
{
|
|
18780
18780
|
match: "config.bootstrap_servers",
|
|
18781
|
-
component:
|
|
18781
|
+
component: lt,
|
|
18782
18782
|
propsOverrides: {
|
|
18783
18783
|
appearance: "tabs",
|
|
18784
18784
|
itemLabel: (e, t) => `#${t + 1} Server`
|
|
@@ -18789,7 +18789,7 @@ const V2 = Le({
|
|
|
18789
18789
|
fieldRenderers: [
|
|
18790
18790
|
{
|
|
18791
18791
|
match: "config.message_by_lua_functions.*",
|
|
18792
|
-
component:
|
|
18792
|
+
component: Ke,
|
|
18793
18793
|
propsOverrides: {
|
|
18794
18794
|
multiline: !0,
|
|
18795
18795
|
rows: 3
|
|
@@ -18797,7 +18797,7 @@ const V2 = Le({
|
|
|
18797
18797
|
},
|
|
18798
18798
|
{
|
|
18799
18799
|
match: "config.bootstrap_servers",
|
|
18800
|
-
component:
|
|
18800
|
+
component: lt,
|
|
18801
18801
|
propsOverrides: {
|
|
18802
18802
|
appearance: "tabs",
|
|
18803
18803
|
itemLabel: (e, t) => `#${t + 1} Server`
|
|
@@ -18816,7 +18816,7 @@ const V2 = Le({
|
|
|
18816
18816
|
fieldRenderers: [
|
|
18817
18817
|
{
|
|
18818
18818
|
match: "config.metrics",
|
|
18819
|
-
component:
|
|
18819
|
+
component: lt,
|
|
18820
18820
|
propsOverrides: {
|
|
18821
18821
|
appearance: "tabs",
|
|
18822
18822
|
itemLabel: (e, t) => `#${t + 1} Metric`
|
|
@@ -20046,7 +20046,7 @@ const hL = { class: "label-content" }, vL = { class: "count" }, yL = { class: "l
|
|
|
20046
20046
|
e.resizable && (le.value ? ee(!1) : he());
|
|
20047
20047
|
}, Te = () => {
|
|
20048
20048
|
e.resizable && ee(!W.value);
|
|
20049
|
-
}, { isDragging:
|
|
20049
|
+
}, { isDragging: De } = by(x, {
|
|
20050
20050
|
onMove(ae) {
|
|
20051
20051
|
if (!e.resizable) return;
|
|
20052
20052
|
const U = Math.max(0, ae.y - A.top.value), te = Math.min(
|
|
@@ -20103,7 +20103,7 @@ const hL = { class: "label-content" }, vL = { class: "count" }, yL = { class: "l
|
|
|
20103
20103
|
N("div", {
|
|
20104
20104
|
ref_key: "requestCanvasContainer",
|
|
20105
20105
|
ref: S,
|
|
20106
|
-
class: dt(["canvas", { dragging: s(
|
|
20106
|
+
class: dt(["canvas", { dragging: s(De) }]),
|
|
20107
20107
|
style: ji({ flexBasis: K.value })
|
|
20108
20108
|
}, [
|
|
20109
20109
|
g(Kd, {
|
|
@@ -20124,7 +20124,7 @@ const hL = { class: "label-content" }, vL = { class: "count" }, yL = { class: "l
|
|
|
20124
20124
|
N("div", {
|
|
20125
20125
|
ref_key: "responseLabel",
|
|
20126
20126
|
ref: L,
|
|
20127
|
-
class: dt(["label response", { dragging: s(
|
|
20127
|
+
class: dt(["label response", { dragging: s(De), resizable: e.resizable }]),
|
|
20128
20128
|
onClick: Te
|
|
20129
20129
|
}, [
|
|
20130
20130
|
e.resizable ? (b(), D(s(Iu), {
|
|
@@ -20145,7 +20145,7 @@ const hL = { class: "label-content" }, vL = { class: "count" }, yL = { class: "l
|
|
|
20145
20145
|
N("div", {
|
|
20146
20146
|
ref_key: "responseCanvasContainer",
|
|
20147
20147
|
ref: $,
|
|
20148
|
-
class: dt(["canvas response", { dragging: s(
|
|
20148
|
+
class: dt(["canvas response", { dragging: s(De) }]),
|
|
20149
20149
|
style: ji({ flexBasis: me.value })
|
|
20150
20150
|
}, [
|
|
20151
20151
|
g(Kd, {
|
|
@@ -22322,7 +22322,7 @@ const On = /* @__PURE__ */ $e(YF, [["render", XF], ["__scopeId", "data-v-35ed58b
|
|
|
22322
22322
|
]),
|
|
22323
22323
|
_: 1
|
|
22324
22324
|
}),
|
|
22325
|
-
g(s(
|
|
22325
|
+
g(s(Ke), {
|
|
22326
22326
|
error: s(P).error,
|
|
22327
22327
|
"error-message": s(P).errorMessage,
|
|
22328
22328
|
name: "url",
|
|
@@ -22340,7 +22340,7 @@ const On = /* @__PURE__ */ $e(YF, [["render", XF], ["__scopeId", "data-v-35ed58b
|
|
|
22340
22340
|
onBlur: s(O).validate,
|
|
22341
22341
|
"onUpdate:modelValue": s(O).update
|
|
22342
22342
|
}, null, 8, ["error", "error-message", "onBlur", "onUpdate:modelValue"]),
|
|
22343
|
-
g(s(
|
|
22343
|
+
g(s(Ke), {
|
|
22344
22344
|
name: "ssl_server_name",
|
|
22345
22345
|
"onUpdate:modelValue": j[1] || (j[1] = (K) => s(u)("ssl_server_name"))
|
|
22346
22346
|
}),
|
|
@@ -22565,7 +22565,7 @@ const On = /* @__PURE__ */ $e(YF, [["render", XF], ["__scopeId", "data-v-35ed58b
|
|
|
22565
22565
|
]),
|
|
22566
22566
|
_: 1
|
|
22567
22567
|
}),
|
|
22568
|
-
g(s(
|
|
22568
|
+
g(s(Ke), {
|
|
22569
22569
|
autosize: "",
|
|
22570
22570
|
error: s(L).error,
|
|
22571
22571
|
"error-message": s(L).errorMessage,
|
|
@@ -23466,21 +23466,21 @@ const bK = /* @__PURE__ */ be({
|
|
|
23466
23466
|
name: "recognize_type",
|
|
23467
23467
|
"onUpdate:modelValue": V[0] || (V[0] = (G) => s(l)("recognize_type"))
|
|
23468
23468
|
}),
|
|
23469
|
-
g(s(
|
|
23469
|
+
g(s(Ke), {
|
|
23470
23470
|
error: s(w).error,
|
|
23471
23471
|
"error-message": s(w).errorMessage,
|
|
23472
23472
|
name: "attributes_block_name",
|
|
23473
23473
|
onBlur: B,
|
|
23474
23474
|
"onUpdate:modelValue": j
|
|
23475
23475
|
}, null, 8, ["error", "error-message"]),
|
|
23476
|
-
g(s(
|
|
23476
|
+
g(s(Ke), {
|
|
23477
23477
|
error: s(S).error,
|
|
23478
23478
|
"error-message": s(S).errorMessage,
|
|
23479
23479
|
name: "attributes_name_prefix",
|
|
23480
23480
|
onBlur: B,
|
|
23481
23481
|
"onUpdate:modelValue": J
|
|
23482
23482
|
}, null, 8, ["error", "error-message"]),
|
|
23483
|
-
g(s(
|
|
23483
|
+
g(s(Ke), {
|
|
23484
23484
|
error: s(E).error,
|
|
23485
23485
|
"error-message": s(E).errorMessage,
|
|
23486
23486
|
name: "text_block_name",
|
|
@@ -23491,21 +23491,21 @@ const bK = /* @__PURE__ */ be({
|
|
|
23491
23491
|
name: "text_as_property",
|
|
23492
23492
|
"onUpdate:modelValue": V[1] || (V[1] = (G) => s(l)("text_as_property"))
|
|
23493
23493
|
}),
|
|
23494
|
-
g(s(
|
|
23494
|
+
g(s(Ke), {
|
|
23495
23495
|
error: s(x).error,
|
|
23496
23496
|
"error-message": s(x).errorMessage,
|
|
23497
23497
|
name: "xpath",
|
|
23498
23498
|
onBlur: s(x).validate,
|
|
23499
23499
|
"onUpdate:modelValue": s(x).update
|
|
23500
23500
|
}, null, 8, ["error", "error-message", "onBlur", "onUpdate:modelValue"]),
|
|
23501
|
-
i.value ? (b(), D(s(
|
|
23501
|
+
i.value ? (b(), D(s(lt), {
|
|
23502
23502
|
key: 0,
|
|
23503
23503
|
name: "force_array_paths",
|
|
23504
23504
|
onAdd: V[2] || (V[2] = (G) => s(l)("force_array_paths")),
|
|
23505
23505
|
onRemove: F
|
|
23506
23506
|
}, {
|
|
23507
23507
|
item: C(({ fieldName: G, index: K, autofocus: me }) => [
|
|
23508
|
-
g(s(
|
|
23508
|
+
g(s(Ke), {
|
|
23509
23509
|
autofocus: me,
|
|
23510
23510
|
error: !!$.value[K],
|
|
23511
23511
|
"error-message": $.value[K],
|
|
@@ -23608,28 +23608,28 @@ const bK = /* @__PURE__ */ be({
|
|
|
23608
23608
|
]),
|
|
23609
23609
|
_: 1
|
|
23610
23610
|
}),
|
|
23611
|
-
g(s(
|
|
23611
|
+
g(s(Ke), {
|
|
23612
23612
|
error: s(S).error,
|
|
23613
23613
|
"error-message": s(S).errorMessage,
|
|
23614
23614
|
name: "attributes_block_name",
|
|
23615
23615
|
onBlur: $,
|
|
23616
23616
|
"onUpdate:modelValue": P
|
|
23617
23617
|
}, null, 8, ["error", "error-message"]),
|
|
23618
|
-
g(s(
|
|
23618
|
+
g(s(Ke), {
|
|
23619
23619
|
error: s(E).error,
|
|
23620
23620
|
"error-message": s(E).errorMessage,
|
|
23621
23621
|
name: "attributes_name_prefix",
|
|
23622
23622
|
onBlur: $,
|
|
23623
23623
|
"onUpdate:modelValue": O
|
|
23624
23624
|
}, null, 8, ["error", "error-message"]),
|
|
23625
|
-
g(s(
|
|
23625
|
+
g(s(Ke), {
|
|
23626
23626
|
error: s(x).error,
|
|
23627
23627
|
"error-message": s(x).errorMessage,
|
|
23628
23628
|
name: "root_element_name",
|
|
23629
23629
|
onBlur: s(x).validate,
|
|
23630
23630
|
"onUpdate:modelValue": s(x).update
|
|
23631
23631
|
}, null, 8, ["error", "error-message", "onBlur", "onUpdate:modelValue"]),
|
|
23632
|
-
g(s(
|
|
23632
|
+
g(s(Ke), {
|
|
23633
23633
|
error: s(L).error,
|
|
23634
23634
|
"error-message": s(L).errorMessage,
|
|
23635
23635
|
name: "text_block_name",
|
|
@@ -23769,11 +23769,11 @@ const bK = /* @__PURE__ */ be({
|
|
|
23769
23769
|
onBlur: s(_).validate,
|
|
23770
23770
|
"onUpdate:modelValue": s(_).update
|
|
23771
23771
|
}, null, 8, ["error", "error-message", "onBlur", "onUpdate:modelValue"]),
|
|
23772
|
-
g(s(
|
|
23772
|
+
g(s(Ke), {
|
|
23773
23773
|
name: "kid",
|
|
23774
23774
|
"onUpdate:modelValue": w[0] || (w[0] = (S) => s(r)("kid"))
|
|
23775
23775
|
}),
|
|
23776
|
-
g(s(
|
|
23776
|
+
g(s(Ke), {
|
|
23777
23777
|
name: "typ",
|
|
23778
23778
|
"onUpdate:modelValue": w[1] || (w[1] = (S) => s(r)("typ"))
|
|
23779
23779
|
}),
|
|
@@ -23849,13 +23849,13 @@ const bK = /* @__PURE__ */ be({
|
|
|
23849
23849
|
name: "allowed_algorithms",
|
|
23850
23850
|
onUpdate: _[0] || (_[0] = (k) => s(r)("allowed_algorithms"))
|
|
23851
23851
|
}),
|
|
23852
|
-
g(s(
|
|
23852
|
+
g(s(lt), {
|
|
23853
23853
|
name: "issuers",
|
|
23854
23854
|
onAdd: _[2] || (_[2] = (k) => s(r)("issuers")),
|
|
23855
23855
|
onRemove: _[3] || (_[3] = (k) => s(r)("issuers"))
|
|
23856
23856
|
}, {
|
|
23857
23857
|
item: C(({ fieldName: k, autofocus: w }) => [
|
|
23858
|
-
g(s(
|
|
23858
|
+
g(s(Ke), {
|
|
23859
23859
|
autofocus: w,
|
|
23860
23860
|
name: k,
|
|
23861
23861
|
"onUpdate:modelValue": _[1] || (_[1] = (S) => s(r)("issuers"))
|
|
@@ -23863,13 +23863,13 @@ const bK = /* @__PURE__ */ be({
|
|
|
23863
23863
|
]),
|
|
23864
23864
|
_: 1
|
|
23865
23865
|
}),
|
|
23866
|
-
g(s(
|
|
23866
|
+
g(s(lt), {
|
|
23867
23867
|
name: "audiences",
|
|
23868
23868
|
onAdd: _[5] || (_[5] = (k) => s(r)("audiences")),
|
|
23869
23869
|
onRemove: _[6] || (_[6] = (k) => s(r)("audiences"))
|
|
23870
23870
|
}, {
|
|
23871
23871
|
item: C(({ fieldName: k, autofocus: w }) => [
|
|
23872
|
-
g(s(
|
|
23872
|
+
g(s(Ke), {
|
|
23873
23873
|
autofocus: w,
|
|
23874
23874
|
name: k,
|
|
23875
23875
|
"onUpdate:modelValue": _[4] || (_[4] = (S) => s(r)("audiences"))
|
|
@@ -23877,13 +23877,13 @@ const bK = /* @__PURE__ */ be({
|
|
|
23877
23877
|
]),
|
|
23878
23878
|
_: 1
|
|
23879
23879
|
}),
|
|
23880
|
-
g(s(
|
|
23880
|
+
g(s(lt), {
|
|
23881
23881
|
name: "required_claims",
|
|
23882
23882
|
onAdd: _[8] || (_[8] = (k) => s(r)("required_claims")),
|
|
23883
23883
|
onRemove: _[9] || (_[9] = (k) => s(r)("required_claims"))
|
|
23884
23884
|
}, {
|
|
23885
23885
|
item: C(({ fieldName: k, autofocus: w }) => [
|
|
23886
|
-
g(s(
|
|
23886
|
+
g(s(Ke), {
|
|
23887
23887
|
autofocus: w,
|
|
23888
23888
|
name: k,
|
|
23889
23889
|
"onUpdate:modelValue": _[7] || (_[7] = (S) => s(r)("required_claims"))
|
|
@@ -24370,7 +24370,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24370
24370
|
}, null, 8, ["name"])
|
|
24371
24371
|
]),
|
|
24372
24372
|
N("div", iD, [
|
|
24373
|
-
g(s(
|
|
24373
|
+
g(s(Ke), {
|
|
24374
24374
|
label: "",
|
|
24375
24375
|
name: `config.response_codes.${l}.message`
|
|
24376
24376
|
}, null, 8, ["name"])
|
|
@@ -24583,7 +24583,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24583
24583
|
"form-config": p
|
|
24584
24584
|
}), {
|
|
24585
24585
|
"field-renderers": C(() => [
|
|
24586
|
-
g(s(
|
|
24586
|
+
g(s(ct), {
|
|
24587
24587
|
match: ({ path: w }) => w === "config.customer.look_up_value_in"
|
|
24588
24588
|
}, {
|
|
24589
24589
|
default: C((w) => [
|
|
@@ -24594,11 +24594,11 @@ const bK = /* @__PURE__ */ be({
|
|
|
24594
24594
|
]),
|
|
24595
24595
|
_: 1
|
|
24596
24596
|
}, 8, ["match"]),
|
|
24597
|
-
g(s(
|
|
24597
|
+
g(s(ct), {
|
|
24598
24598
|
match: ({ path: w }) => w === "config.customer.field"
|
|
24599
24599
|
}, {
|
|
24600
24600
|
default: C((w) => [
|
|
24601
|
-
g(s(
|
|
24601
|
+
g(s(Ke), je(w, {
|
|
24602
24602
|
help: s(a)("plugins.free-form.governance.fields.subject_field.help"),
|
|
24603
24603
|
label: s(a)("plugins.free-form.governance.fields.subject_field.label"),
|
|
24604
24604
|
placeholder: s(a)("plugins.free-form.governance.fields.subject_field.placeholder")
|
|
@@ -24606,7 +24606,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24606
24606
|
]),
|
|
24607
24607
|
_: 1
|
|
24608
24608
|
}, 8, ["match"]),
|
|
24609
|
-
g(s(
|
|
24609
|
+
g(s(ct), {
|
|
24610
24610
|
match: ({ path: w }) => w === "config.ssl_verify"
|
|
24611
24611
|
}, {
|
|
24612
24612
|
default: C((w) => [
|
|
@@ -24617,7 +24617,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24617
24617
|
]),
|
|
24618
24618
|
_: 1
|
|
24619
24619
|
}, 8, ["match"]),
|
|
24620
|
-
g(s(
|
|
24620
|
+
g(s(ct), {
|
|
24621
24621
|
match: ({ path: w }) => w === "config.timeout"
|
|
24622
24622
|
}, {
|
|
24623
24623
|
default: C((w) => [
|
|
@@ -24627,7 +24627,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24627
24627
|
]),
|
|
24628
24628
|
_: 1
|
|
24629
24629
|
}, 8, ["match"]),
|
|
24630
|
-
g(s(
|
|
24630
|
+
g(s(ct), {
|
|
24631
24631
|
match: ({ path: w }) => w === "config.keepalive"
|
|
24632
24632
|
}, {
|
|
24633
24633
|
default: C((w) => [
|
|
@@ -24655,7 +24655,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24655
24655
|
"onClick:createEntity": _[0] || (_[0] = (w) => i("click:create-entity", w))
|
|
24656
24656
|
}),
|
|
24657
24657
|
N("h3", gD, M(s(a)("plugins.free-form.governance.sections.connection.title")), 1),
|
|
24658
|
-
g(s(
|
|
24658
|
+
g(s(Ke), {
|
|
24659
24659
|
help: s(a)("plugins.free-form.governance.fields.governance_endpoint.help"),
|
|
24660
24660
|
name: "config.entitlement_access_endpoint"
|
|
24661
24661
|
}, null, 8, ["help"]),
|
|
@@ -24746,7 +24746,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24746
24746
|
fieldRenderers: [
|
|
24747
24747
|
{
|
|
24748
24748
|
match: ({ genericPath: e }) => e === "config.functions.*",
|
|
24749
|
-
component:
|
|
24749
|
+
component: Ke,
|
|
24750
24750
|
propsOverrides: (e) => ({
|
|
24751
24751
|
...e,
|
|
24752
24752
|
multiline: !0,
|
|
@@ -24786,7 +24786,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24786
24786
|
fieldRenderers: [
|
|
24787
24787
|
{
|
|
24788
24788
|
match: "config.proto",
|
|
24789
|
-
component:
|
|
24789
|
+
component: Ke,
|
|
24790
24790
|
propsOverrides: {
|
|
24791
24791
|
multiline: !0,
|
|
24792
24792
|
rows: 4
|
|
@@ -24825,7 +24825,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24825
24825
|
},
|
|
24826
24826
|
{
|
|
24827
24827
|
match: "config.custom_injections",
|
|
24828
|
-
component:
|
|
24828
|
+
component: lt,
|
|
24829
24829
|
propsOverrides: {
|
|
24830
24830
|
appearance: "tabs",
|
|
24831
24831
|
itemLabel: (e, t) => `#${t + 1} Injection`
|
|
@@ -24836,7 +24836,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24836
24836
|
fieldRenderers: [
|
|
24837
24837
|
{
|
|
24838
24838
|
match: ({ path: e }) => e === "config.request_jq_program" || e === "config.response_jq_program",
|
|
24839
|
-
component:
|
|
24839
|
+
component: Ke,
|
|
24840
24840
|
propsOverrides: {
|
|
24841
24841
|
multiline: !0,
|
|
24842
24842
|
rows: 4
|
|
@@ -24942,7 +24942,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24942
24942
|
})
|
|
24943
24943
|
};
|
|
24944
24944
|
}), d = I(() => u.value.hasError), p = I(() => u.value.message);
|
|
24945
|
-
return (f, m) => (b(), D(s(
|
|
24945
|
+
return (f, m) => (b(), D(s(Ke), je(f.$attrs, {
|
|
24946
24946
|
error: d.value,
|
|
24947
24947
|
"error-message": p.value,
|
|
24948
24948
|
name: e.name
|
|
@@ -24978,7 +24978,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24978
24978
|
}, i = en();
|
|
24979
24979
|
return Tt(vn, i?.[yn]), (o, a) => (b(), D(_n, je(t, { "render-rules": n }), {
|
|
24980
24980
|
"field-renderers": C(() => [
|
|
24981
|
-
g(s(
|
|
24981
|
+
g(s(ct), {
|
|
24982
24982
|
match: ({ path: r }) => r === "config.access_token_keyset"
|
|
24983
24983
|
}, {
|
|
24984
24984
|
default: C((r) => [
|
|
@@ -24986,7 +24986,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
24986
24986
|
]),
|
|
24987
24987
|
_: 1
|
|
24988
24988
|
}, 8, ["match"]),
|
|
24989
|
-
g(s(
|
|
24989
|
+
g(s(ct), {
|
|
24990
24990
|
match: ({ path: r }) => r === "config.channel_token_keyset"
|
|
24991
24991
|
}, {
|
|
24992
24992
|
default: C((r) => [
|
|
@@ -25007,7 +25007,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25007
25007
|
fieldRenderers: [
|
|
25008
25008
|
{
|
|
25009
25009
|
match: "config.message_by_lua_functions.*",
|
|
25010
|
-
component:
|
|
25010
|
+
component: Ke,
|
|
25011
25011
|
propsOverrides: {
|
|
25012
25012
|
multiline: !0,
|
|
25013
25013
|
rows: 3
|
|
@@ -25015,7 +25015,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25015
25015
|
},
|
|
25016
25016
|
{
|
|
25017
25017
|
match: "config.topics",
|
|
25018
|
-
component:
|
|
25018
|
+
component: lt,
|
|
25019
25019
|
propsOverrides: {
|
|
25020
25020
|
appearance: "tabs",
|
|
25021
25021
|
stickyTabs: !0,
|
|
@@ -25024,7 +25024,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25024
25024
|
},
|
|
25025
25025
|
{
|
|
25026
25026
|
match: "config.bootstrap_servers",
|
|
25027
|
-
component:
|
|
25027
|
+
component: lt,
|
|
25028
25028
|
propsOverrides: {
|
|
25029
25029
|
appearance: "tabs",
|
|
25030
25030
|
itemLabel: (e, t) => `#${t + 1} Server`
|
|
@@ -25042,7 +25042,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25042
25042
|
},
|
|
25043
25043
|
{
|
|
25044
25044
|
match: "config.bootstrap_servers",
|
|
25045
|
-
component:
|
|
25045
|
+
component: lt,
|
|
25046
25046
|
propsOverrides: {
|
|
25047
25047
|
appearance: "tabs",
|
|
25048
25048
|
itemLabel: (e, t) => `#${t + 1} Server`
|
|
@@ -25053,7 +25053,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25053
25053
|
fieldRenderers: [
|
|
25054
25054
|
{
|
|
25055
25055
|
match: "config.message_by_lua_functions.*",
|
|
25056
|
-
component:
|
|
25056
|
+
component: Ke,
|
|
25057
25057
|
propsOverrides: {
|
|
25058
25058
|
multiline: !0,
|
|
25059
25059
|
rows: 3
|
|
@@ -25061,7 +25061,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25061
25061
|
},
|
|
25062
25062
|
{
|
|
25063
25063
|
match: "config.bootstrap_servers",
|
|
25064
|
-
component:
|
|
25064
|
+
component: lt,
|
|
25065
25065
|
propsOverrides: {
|
|
25066
25066
|
appearance: "tabs",
|
|
25067
25067
|
itemLabel: (e, t) => `#${t + 1} Server`
|
|
@@ -25176,7 +25176,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25176
25176
|
"plugin-config-description": s(i)("plugins.free-form.metering-and-billing.sections.plugin_config.description")
|
|
25177
25177
|
}), {
|
|
25178
25178
|
"field-renderers": C(() => [
|
|
25179
|
-
g(s(
|
|
25179
|
+
g(s(ct), {
|
|
25180
25180
|
match: ({ path: f }) => f === "config.meter_api_requests"
|
|
25181
25181
|
}, {
|
|
25182
25182
|
default: C((f) => [
|
|
@@ -25186,7 +25186,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25186
25186
|
]),
|
|
25187
25187
|
_: 1
|
|
25188
25188
|
}, 8, ["match"]),
|
|
25189
|
-
g(s(
|
|
25189
|
+
g(s(ct), {
|
|
25190
25190
|
match: ({ path: f }) => f === "config.meter_ai_token_usage"
|
|
25191
25191
|
}, {
|
|
25192
25192
|
default: C((f) => [
|
|
@@ -25196,7 +25196,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25196
25196
|
]),
|
|
25197
25197
|
_: 1
|
|
25198
25198
|
}, 8, ["match"]),
|
|
25199
|
-
g(s(
|
|
25199
|
+
g(s(ct), {
|
|
25200
25200
|
match: ({ path: f }) => f === "config.ssl_verify"
|
|
25201
25201
|
}, {
|
|
25202
25202
|
default: C((f) => [
|
|
@@ -25207,7 +25207,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25207
25207
|
]),
|
|
25208
25208
|
_: 1
|
|
25209
25209
|
}, 8, ["match"]),
|
|
25210
|
-
g(s(
|
|
25210
|
+
g(s(ct), {
|
|
25211
25211
|
match: ({ path: f }) => f === "config.subject.look_up_value_in"
|
|
25212
25212
|
}, {
|
|
25213
25213
|
default: C((f) => [
|
|
@@ -25218,11 +25218,11 @@ const bK = /* @__PURE__ */ be({
|
|
|
25218
25218
|
]),
|
|
25219
25219
|
_: 1
|
|
25220
25220
|
}, 8, ["match"]),
|
|
25221
|
-
g(s(
|
|
25221
|
+
g(s(ct), {
|
|
25222
25222
|
match: ({ path: f }) => f === "config.subject.field"
|
|
25223
25223
|
}, {
|
|
25224
25224
|
default: C((f) => [
|
|
25225
|
-
g(s(
|
|
25225
|
+
g(s(Ke), je(f, {
|
|
25226
25226
|
help: s(i)("plugins.free-form.metering-and-billing.fields.subject_field.help"),
|
|
25227
25227
|
label: s(i)("plugins.free-form.metering-and-billing.fields.subject_field.label"),
|
|
25228
25228
|
placeholder: s(i)("plugins.free-form.metering-and-billing.fields.subject_field.placeholder")
|
|
@@ -25230,7 +25230,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25230
25230
|
]),
|
|
25231
25231
|
_: 1
|
|
25232
25232
|
}, 8, ["match"]),
|
|
25233
|
-
g(s(
|
|
25233
|
+
g(s(ct), {
|
|
25234
25234
|
match: ({ path: f }) => f === "config.timeout"
|
|
25235
25235
|
}, {
|
|
25236
25236
|
default: C((f) => [
|
|
@@ -25240,7 +25240,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25240
25240
|
]),
|
|
25241
25241
|
_: 1
|
|
25242
25242
|
}, 8, ["match"]),
|
|
25243
|
-
g(s(
|
|
25243
|
+
g(s(ct), {
|
|
25244
25244
|
match: ({ path: f }) => f === "config.keepalive"
|
|
25245
25245
|
}, {
|
|
25246
25246
|
default: C((f) => [
|
|
@@ -25250,7 +25250,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25250
25250
|
]),
|
|
25251
25251
|
_: 1
|
|
25252
25252
|
}, 8, ["match"]),
|
|
25253
|
-
g(s(
|
|
25253
|
+
g(s(ct), {
|
|
25254
25254
|
match: ({ path: f }) => f === "config.queue.max_coalescing_delay"
|
|
25255
25255
|
}, {
|
|
25256
25256
|
default: C((f) => [
|
|
@@ -25260,7 +25260,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25260
25260
|
]),
|
|
25261
25261
|
_: 1
|
|
25262
25262
|
}, 8, ["match"]),
|
|
25263
|
-
g(s(
|
|
25263
|
+
g(s(ct), {
|
|
25264
25264
|
match: ({ path: f }) => f === "config.queue.initial_retry_delay"
|
|
25265
25265
|
}, {
|
|
25266
25266
|
default: C((f) => [
|
|
@@ -25270,7 +25270,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25270
25270
|
]),
|
|
25271
25271
|
_: 1
|
|
25272
25272
|
}, 8, ["match"]),
|
|
25273
|
-
g(s(
|
|
25273
|
+
g(s(ct), {
|
|
25274
25274
|
match: ({ path: f }) => f === "config.queue.max_retry_delay"
|
|
25275
25275
|
}, {
|
|
25276
25276
|
default: C((f) => [
|
|
@@ -25280,7 +25280,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25280
25280
|
]),
|
|
25281
25281
|
_: 1
|
|
25282
25282
|
}, 8, ["match"]),
|
|
25283
|
-
g(s(
|
|
25283
|
+
g(s(ct), {
|
|
25284
25284
|
match: ({ path: f }) => f === "config.queue.max_retry_time"
|
|
25285
25285
|
}, {
|
|
25286
25286
|
default: C((f) => [
|
|
@@ -25290,21 +25290,21 @@ const bK = /* @__PURE__ */ be({
|
|
|
25290
25290
|
]),
|
|
25291
25291
|
_: 1
|
|
25292
25292
|
}, 8, ["match"]),
|
|
25293
|
-
g(s(
|
|
25293
|
+
g(s(ct), {
|
|
25294
25294
|
match: ({ path: f }) => f.startsWith("config.attributes.") && f.endsWith(".look_up_value_in")
|
|
25295
25295
|
}, {
|
|
25296
25296
|
default: C((f) => [
|
|
25297
|
-
g(s(
|
|
25297
|
+
g(s(Ke), je(f, {
|
|
25298
25298
|
placeholder: s(i)("plugins.free-form.metering-and-billing.fields.attributes.look_up_value_in.placeholder")
|
|
25299
25299
|
}), null, 16, ["placeholder"])
|
|
25300
25300
|
]),
|
|
25301
25301
|
_: 1
|
|
25302
25302
|
}, 8, ["match"]),
|
|
25303
|
-
g(s(
|
|
25303
|
+
g(s(ct), {
|
|
25304
25304
|
match: ({ path: f }) => f.startsWith("config.attributes.") && f.endsWith(".event_property_name")
|
|
25305
25305
|
}, {
|
|
25306
25306
|
default: C((f) => [
|
|
25307
|
-
g(s(
|
|
25307
|
+
g(s(Ke), je(f, {
|
|
25308
25308
|
placeholder: s(i)("plugins.free-form.metering-and-billing.fields.attributes.event_property_name.placeholder")
|
|
25309
25309
|
}), null, 16, ["placeholder"])
|
|
25310
25310
|
]),
|
|
@@ -25319,7 +25319,22 @@ const bK = /* @__PURE__ */ be({
|
|
|
25319
25319
|
}, {
|
|
25320
25320
|
default: C(() => [
|
|
25321
25321
|
g(s(yt), { name: "config.meter_api_requests" }),
|
|
25322
|
-
g(s(yt), { name: "config.meter_ai_token_usage" })
|
|
25322
|
+
g(s(yt), { name: "config.meter_ai_token_usage" }),
|
|
25323
|
+
g(s(lt), {
|
|
25324
|
+
"add-item-label": s(i)("plugins.free-form.metering-and-billing.fields.allow_status_codes.add"),
|
|
25325
|
+
label: s(i)("plugins.free-form.metering-and-billing.fields.allow_status_codes.label"),
|
|
25326
|
+
"label-attributes": { info: s(i)("plugins.free-form.metering-and-billing.fields.allow_status_codes.info") },
|
|
25327
|
+
name: "config.allow_status_codes"
|
|
25328
|
+
}, {
|
|
25329
|
+
item: C(({ autofocus: f, fieldName: m }) => [
|
|
25330
|
+
g(s(Ke), {
|
|
25331
|
+
autofocus: f,
|
|
25332
|
+
name: m,
|
|
25333
|
+
placeholder: s(i)("plugins.free-form.metering-and-billing.fields.allow_status_codes.placeholder")
|
|
25334
|
+
}, null, 8, ["autofocus", "name", "placeholder"])
|
|
25335
|
+
]),
|
|
25336
|
+
_: 1
|
|
25337
|
+
}, 8, ["add-item-label", "label", "label-attributes"])
|
|
25323
25338
|
]),
|
|
25324
25339
|
_: 1
|
|
25325
25340
|
}, 8, ["expanded", "label"]),
|
|
@@ -25342,7 +25357,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25342
25357
|
}, {
|
|
25343
25358
|
default: C(() => [
|
|
25344
25359
|
N("div", YD, [
|
|
25345
|
-
g(s(
|
|
25360
|
+
g(s(lt), {
|
|
25346
25361
|
"hide-label": "",
|
|
25347
25362
|
name: "config.attributes"
|
|
25348
25363
|
})
|
|
@@ -25356,7 +25371,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25356
25371
|
label: s(i)("plugins.free-form.metering-and-billing.sections.ingestion.title")
|
|
25357
25372
|
}, {
|
|
25358
25373
|
default: C(() => [
|
|
25359
|
-
g(s(
|
|
25374
|
+
g(s(Ke), {
|
|
25360
25375
|
help: s(i)("plugins.free-form.metering-and-billing.fields.ingest_endpoint.help"),
|
|
25361
25376
|
name: "config.ingest_endpoint"
|
|
25362
25377
|
}, null, 8, ["help"]),
|
|
@@ -25395,13 +25410,13 @@ const bK = /* @__PURE__ */ be({
|
|
|
25395
25410
|
_: 1
|
|
25396
25411
|
}, 16, ["plugin-config-description"]));
|
|
25397
25412
|
}
|
|
25398
|
-
}), ZD = /* @__PURE__ */ $e(QD, [["__scopeId", "data-v-
|
|
25413
|
+
}), ZD = /* @__PURE__ */ $e(QD, [["__scopeId", "data-v-748ca047"]]), ej = Le({
|
|
25399
25414
|
component: ZD
|
|
25400
25415
|
}), tj = Le({
|
|
25401
25416
|
fieldRenderers: [
|
|
25402
25417
|
{
|
|
25403
25418
|
match: "config.api_specification",
|
|
25404
|
-
component:
|
|
25419
|
+
component: Ke,
|
|
25405
25420
|
propsOverrides: {
|
|
25406
25421
|
multiline: !0,
|
|
25407
25422
|
rows: 15
|
|
@@ -25420,7 +25435,7 @@ const bK = /* @__PURE__ */ be({
|
|
|
25420
25435
|
fieldRenderers: [
|
|
25421
25436
|
{
|
|
25422
25437
|
match: "config.api_spec",
|
|
25423
|
-
component:
|
|
25438
|
+
component: Ke,
|
|
25424
25439
|
propsOverrides: {
|
|
25425
25440
|
multiline: !0,
|
|
25426
25441
|
rows: 15
|
|
@@ -25604,7 +25619,7 @@ const uj = {
|
|
|
25604
25619
|
setup(e) {
|
|
25605
25620
|
const { i18n: { t } } = Ge();
|
|
25606
25621
|
return (n, i) => (b(), q("div", yj, [
|
|
25607
|
-
g(s(
|
|
25622
|
+
g(s(lt), {
|
|
25608
25623
|
appearance: "tabs",
|
|
25609
25624
|
"item-label": (o, a) => `#${a + 1} Client JWK`,
|
|
25610
25625
|
name: e.name,
|
|
@@ -25722,7 +25737,7 @@ const uj = {
|
|
|
25722
25737
|
function Te(se) {
|
|
25723
25738
|
K.value = se ?? "kong-identity", se !== "custom-identity" && (p.value = a(), f.value = a());
|
|
25724
25739
|
}
|
|
25725
|
-
function
|
|
25740
|
+
function De(se) {
|
|
25726
25741
|
t.onEnabledChange ? t.onEnabledChange(se) : d.value = se;
|
|
25727
25742
|
}
|
|
25728
25743
|
return (se, ae) => {
|
|
@@ -25748,7 +25763,7 @@ const uj = {
|
|
|
25748
25763
|
"data-testid": "use-principal-lookup",
|
|
25749
25764
|
disabled: e.disabled,
|
|
25750
25765
|
"model-value": me.value,
|
|
25751
|
-
"onUpdate:modelValue":
|
|
25766
|
+
"onUpdate:modelValue": De
|
|
25752
25767
|
}, {
|
|
25753
25768
|
label: C(() => [
|
|
25754
25769
|
g(s(Mt), {
|
|
@@ -26042,7 +26057,7 @@ const uj = {
|
|
|
26042
26057
|
}
|
|
26043
26058
|
L.value = w.value.find((Ie) => Ie.id === ke) || null, L.value?.issuer && (y.value = L.value.issuer), v.value = null, _.value = null, E.value = [], x.value = !!ke, ke && qe(ke);
|
|
26044
26059
|
}
|
|
26045
|
-
function
|
|
26060
|
+
function De(ke, Ie) {
|
|
26046
26061
|
const Ce = [...v.value];
|
|
26047
26062
|
Ce[ke] = Ie, v.value = Ce;
|
|
26048
26063
|
}
|
|
@@ -26261,7 +26276,7 @@ const uj = {
|
|
|
26261
26276
|
loading: x.value,
|
|
26262
26277
|
"model-value": Ce ?? void 0,
|
|
26263
26278
|
placeholder: s(r)("plugins.free-form.openid-connect.principals.client.placeholder"),
|
|
26264
|
-
"onUpdate:modelValue": (oe) =>
|
|
26279
|
+
"onUpdate:modelValue": (oe) => De(ie, oe)
|
|
26265
26280
|
}, St({ _: 2 }, [
|
|
26266
26281
|
me.value ? {
|
|
26267
26282
|
name: "dropdown-footer-text",
|
|
@@ -26291,7 +26306,7 @@ const uj = {
|
|
|
26291
26306
|
label: ie === 0 ? s(r)("plugins.free-form.openid-connect.principals.client.label") : void 0,
|
|
26292
26307
|
"model-value": Ce ?? void 0,
|
|
26293
26308
|
placeholder: s(r)("plugins.free-form.openid-connect.principals.client.id_placeholder"),
|
|
26294
|
-
"onUpdate:modelValue": (oe) =>
|
|
26309
|
+
"onUpdate:modelValue": (oe) => De(ie, oe)
|
|
26295
26310
|
}, null, 8, ["label", "model-value", "placeholder", "onUpdate:modelValue"])),
|
|
26296
26311
|
N("div", Jj, [
|
|
26297
26312
|
(b(), D(jt(s(n) ? s(Nu) : s(ai)), je({
|
|
@@ -26362,7 +26377,7 @@ const uj = {
|
|
|
26362
26377
|
label: ie === 0 ? s(r)("plugins.free-form.openid-connect.principals.client.id_label") : void 0,
|
|
26363
26378
|
"model-value": Ce ?? void 0,
|
|
26364
26379
|
placeholder: s(r)("plugins.free-form.openid-connect.principals.client.id_placeholder"),
|
|
26365
|
-
"onUpdate:modelValue": (oe) =>
|
|
26380
|
+
"onUpdate:modelValue": (oe) => De(ie, oe)
|
|
26366
26381
|
}, St({ _: 2 }, [
|
|
26367
26382
|
ie === 0 && B.value ? {
|
|
26368
26383
|
name: "label-tooltip",
|
|
@@ -26375,7 +26390,7 @@ const uj = {
|
|
|
26375
26390
|
s(c) ? (b(), D(jt(s(c)), {
|
|
26376
26391
|
key: 0,
|
|
26377
26392
|
schema: { model: "config-client_id", referenceable: !0 },
|
|
26378
|
-
update: (oe) =>
|
|
26393
|
+
update: (oe) => De(ie, oe),
|
|
26379
26394
|
value: Ce
|
|
26380
26395
|
}, null, 8, ["update", "value"])) : Q("", !0)
|
|
26381
26396
|
]),
|
|
@@ -26671,7 +26686,7 @@ const uj = {
|
|
|
26671
26686
|
schema: L.value
|
|
26672
26687
|
}), {
|
|
26673
26688
|
"field-renderers": C(() => [
|
|
26674
|
-
g(s(
|
|
26689
|
+
g(s(ct), {
|
|
26675
26690
|
match: ({ path: V }) => V === "config.client_jwk"
|
|
26676
26691
|
}, {
|
|
26677
26692
|
default: C((V) => [
|
|
@@ -26679,7 +26694,7 @@ const uj = {
|
|
|
26679
26694
|
]),
|
|
26680
26695
|
_: 1
|
|
26681
26696
|
}, 8, ["match"]),
|
|
26682
|
-
g(s(
|
|
26697
|
+
g(s(ct), {
|
|
26683
26698
|
match: ({ genericPath: V }) => V === "config.token_exchange.subject_token_issuers.*.verify_signature"
|
|
26684
26699
|
}, {
|
|
26685
26700
|
default: C((V) => [
|
|
@@ -26687,38 +26702,38 @@ const uj = {
|
|
|
26687
26702
|
]),
|
|
26688
26703
|
_: 1
|
|
26689
26704
|
}, 8, ["match"]),
|
|
26690
|
-
g(s(
|
|
26705
|
+
g(s(ct), {
|
|
26691
26706
|
match: ({ genericPath: V }) => V in F
|
|
26692
26707
|
}, {
|
|
26693
26708
|
default: C((V) => [
|
|
26694
|
-
g(s(
|
|
26709
|
+
g(s(lt), je(V, {
|
|
26695
26710
|
appearance: "tabs",
|
|
26696
26711
|
"item-label": (G, K) => B(V.name, K)
|
|
26697
26712
|
}), null, 16, ["item-label"])
|
|
26698
26713
|
]),
|
|
26699
26714
|
_: 1
|
|
26700
26715
|
}, 8, ["match"]),
|
|
26701
|
-
g(s(
|
|
26716
|
+
g(s(ct), {
|
|
26702
26717
|
match: ({ genericPath: V }) => s(j).has(V)
|
|
26703
26718
|
}, {
|
|
26704
26719
|
default: C((V) => [
|
|
26705
|
-
g(s(
|
|
26720
|
+
g(s(Ke), je(V, { multiline: "" }), null, 16)
|
|
26706
26721
|
]),
|
|
26707
26722
|
_: 1
|
|
26708
26723
|
}, 8, ["match"]),
|
|
26709
|
-
g(s(
|
|
26724
|
+
g(s(ct), {
|
|
26710
26725
|
match: ({ path: V }) => V === "config.cache_tokens_salt"
|
|
26711
26726
|
}, {
|
|
26712
26727
|
default: C((V) => [
|
|
26713
|
-
g(s(
|
|
26728
|
+
g(s(Ke), je(V, { required: f.value }), null, 16, ["required"])
|
|
26714
26729
|
]),
|
|
26715
26730
|
_: 1
|
|
26716
26731
|
}, 8, ["match"]),
|
|
26717
|
-
g(s(
|
|
26732
|
+
g(s(ct), {
|
|
26718
26733
|
match: ({ genericPath: V }) => V === "config.token_exchange.subject_token_issuers"
|
|
26719
26734
|
}, {
|
|
26720
26735
|
default: C((V) => [
|
|
26721
|
-
g(s(
|
|
26736
|
+
g(s(lt), je(V, {
|
|
26722
26737
|
appearance: "tabs",
|
|
26723
26738
|
"item-label": (G, K) => `#${K + 1} Issuer`
|
|
26724
26739
|
}), null, 16, ["item-label"])
|
|
@@ -26840,7 +26855,7 @@ const uj = {
|
|
|
26840
26855
|
"config.ws_upstream_frame.*",
|
|
26841
26856
|
"config.ws_close.*"
|
|
26842
26857
|
].includes(e),
|
|
26843
|
-
component:
|
|
26858
|
+
component: Ke,
|
|
26844
26859
|
propsOverrides: {
|
|
26845
26860
|
multiline: !0,
|
|
26846
26861
|
rows: 3
|
|
@@ -26863,7 +26878,7 @@ const uj = {
|
|
|
26863
26878
|
"config.ws_upstream_frame.*",
|
|
26864
26879
|
"config.ws_close.*"
|
|
26865
26880
|
].includes(e),
|
|
26866
|
-
component:
|
|
26881
|
+
component: Ke,
|
|
26867
26882
|
propsOverrides: {
|
|
26868
26883
|
multiline: !0,
|
|
26869
26884
|
rows: 3
|
|
@@ -27154,7 +27169,7 @@ const uj = {
|
|
|
27154
27169
|
placeholder: s(t)("sp.error_message.code_placeholder")
|
|
27155
27170
|
}, null, 8, ["placeholder"]),
|
|
27156
27171
|
i[0] || (i[0] = N("div", null, ":", -1)),
|
|
27157
|
-
g(s(
|
|
27172
|
+
g(s(Ke), {
|
|
27158
27173
|
class: "input-error-message",
|
|
27159
27174
|
label: "",
|
|
27160
27175
|
name: "error_message",
|
|
@@ -27217,7 +27232,7 @@ const uj = {
|
|
|
27217
27232
|
},
|
|
27218
27233
|
setup(e) {
|
|
27219
27234
|
const t = e, { i18n: { t: n }, i18nT: i } = Ge();
|
|
27220
|
-
return (o, a) => (b(), D(s(
|
|
27235
|
+
return (o, a) => (b(), D(s(Ke), je(t, {
|
|
27221
27236
|
"expression-editor": { placeholder: s(n)("sp.custom_key.expression_placeholder") }
|
|
27222
27237
|
}), {
|
|
27223
27238
|
"expression-help": C(() => [
|
|
@@ -27278,7 +27293,7 @@ const uj = {
|
|
|
27278
27293
|
"render-rules": n
|
|
27279
27294
|
}), {
|
|
27280
27295
|
"field-renderers": C(() => [
|
|
27281
|
-
g(s(
|
|
27296
|
+
g(s(ct), {
|
|
27282
27297
|
match: ({ path: l }) => l === "config.custom_key"
|
|
27283
27298
|
}, {
|
|
27284
27299
|
default: C((l) => [
|
|
@@ -27286,7 +27301,7 @@ const uj = {
|
|
|
27286
27301
|
]),
|
|
27287
27302
|
_: 1
|
|
27288
27303
|
}, 8, ["match"]),
|
|
27289
|
-
g(s(
|
|
27304
|
+
g(s(ct), {
|
|
27290
27305
|
match: ({ path: l }) => l === "config.compound_identifier"
|
|
27291
27306
|
}, {
|
|
27292
27307
|
default: C((l) => [
|
|
@@ -27385,7 +27400,7 @@ const uj = {
|
|
|
27385
27400
|
}, a = en();
|
|
27386
27401
|
return Tt(vn, a?.[yn]), (r, l) => (b(), D(_n, je(t, { "render-rules": o }), {
|
|
27387
27402
|
"field-renderers": C(() => [
|
|
27388
|
-
g(s(
|
|
27403
|
+
g(s(ct), {
|
|
27389
27404
|
match: ({ path: c }) => c === "config.custom_key"
|
|
27390
27405
|
}, {
|
|
27391
27406
|
default: C((c) => [
|
|
@@ -27393,7 +27408,7 @@ const uj = {
|
|
|
27393
27408
|
]),
|
|
27394
27409
|
_: 1
|
|
27395
27410
|
}, 8, ["match"]),
|
|
27396
|
-
g(s(
|
|
27411
|
+
g(s(ct), {
|
|
27397
27412
|
match: ({ path: c }) => s(i).has(c)
|
|
27398
27413
|
}, {
|
|
27399
27414
|
default: C((c) => [
|
|
@@ -27470,7 +27485,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
27470
27485
|
const i = t.config.callouts[t.config.callouts.length - 1];
|
|
27471
27486
|
i && (i[wa] = sv());
|
|
27472
27487
|
}
|
|
27473
|
-
return (i, o) => (b(), D(s(
|
|
27488
|
+
return (i, o) => (b(), D(s(lt), {
|
|
27474
27489
|
appearance: "tabs",
|
|
27475
27490
|
"item-label": (a) => a.name || "New callout",
|
|
27476
27491
|
name: "callouts",
|
|
@@ -27603,11 +27618,11 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
27603
27618
|
"on-form-change": l
|
|
27604
27619
|
}), {
|
|
27605
27620
|
"field-renderers": C(() => [
|
|
27606
|
-
g(s(
|
|
27621
|
+
g(s(ct), {
|
|
27607
27622
|
match: ({ path: d }) => d.endsWith("by_lua")
|
|
27608
27623
|
}, {
|
|
27609
27624
|
default: C((d) => [
|
|
27610
|
-
g(s(
|
|
27625
|
+
g(s(Ke), je(d, {
|
|
27611
27626
|
autosize: "",
|
|
27612
27627
|
class: "rc-code",
|
|
27613
27628
|
multiline: "",
|
|
@@ -27616,11 +27631,11 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
27616
27631
|
]),
|
|
27617
27632
|
_: 1
|
|
27618
27633
|
}, 8, ["match"]),
|
|
27619
|
-
g(s(
|
|
27634
|
+
g(s(ct), {
|
|
27620
27635
|
match: ({ path: d }) => ["cluster_nodes", "sentinel_nodes"].some((p) => d.endsWith(p))
|
|
27621
27636
|
}, {
|
|
27622
27637
|
default: C((d) => [
|
|
27623
|
-
g(s(
|
|
27638
|
+
g(s(lt), je(d, { appearance: "card" }), null, 16)
|
|
27624
27639
|
]),
|
|
27625
27640
|
_: 1
|
|
27626
27641
|
}, 8, ["match"])
|
|
@@ -27637,7 +27652,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
27637
27652
|
fieldRenderers: [
|
|
27638
27653
|
{
|
|
27639
27654
|
match: "config.parameter_schema",
|
|
27640
|
-
component:
|
|
27655
|
+
component: lt,
|
|
27641
27656
|
propsOverrides: {
|
|
27642
27657
|
appearance: "tabs",
|
|
27643
27658
|
itemLabel: (e, t) => `#${t + 1} Parameter schema`
|
|
@@ -27645,7 +27660,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
27645
27660
|
},
|
|
27646
27661
|
{
|
|
27647
27662
|
match: "config.body_schema",
|
|
27648
|
-
component:
|
|
27663
|
+
component: Ke,
|
|
27649
27664
|
propsOverrides: {
|
|
27650
27665
|
multiline: !0,
|
|
27651
27666
|
rows: 4
|
|
@@ -27653,7 +27668,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
27653
27668
|
},
|
|
27654
27669
|
{
|
|
27655
27670
|
match: "config.parameter_schema.*.schema",
|
|
27656
|
-
component:
|
|
27671
|
+
component: Ke,
|
|
27657
27672
|
propsOverrides: {
|
|
27658
27673
|
multiline: !0,
|
|
27659
27674
|
rows: 4
|
|
@@ -27673,7 +27688,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
27673
27688
|
fieldRenderers: [
|
|
27674
27689
|
{
|
|
27675
27690
|
match: ({ path: e, genericPath: t }) => e === "config.replace.body" || t === "config.transform.functions.*" || t.endsWith(".json.*"),
|
|
27676
|
-
component:
|
|
27691
|
+
component: Ke,
|
|
27677
27692
|
propsOverrides: {
|
|
27678
27693
|
multiline: !0,
|
|
27679
27694
|
rows: 3
|
|
@@ -27684,7 +27699,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
27684
27699
|
fieldRenderers: [
|
|
27685
27700
|
{
|
|
27686
27701
|
match: ({ genericPath: e }) => e.endsWith(".json.*"),
|
|
27687
|
-
component:
|
|
27702
|
+
component: Ke,
|
|
27688
27703
|
propsOverrides: {
|
|
27689
27704
|
multiline: !0,
|
|
27690
27705
|
rows: 3
|
|
@@ -27695,7 +27710,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
27695
27710
|
fieldRenderers: [
|
|
27696
27711
|
{
|
|
27697
27712
|
match: "config.rules",
|
|
27698
|
-
component:
|
|
27713
|
+
component: lt,
|
|
27699
27714
|
propsOverrides: {
|
|
27700
27715
|
appearance: "tabs",
|
|
27701
27716
|
itemLabel: (e, t) => `#${t + 1} Rule`
|
|
@@ -27930,7 +27945,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
27930
27945
|
placeholder: s(t)("sp.error_message.code_placeholder")
|
|
27931
27946
|
}, null, 8, ["placeholder"]),
|
|
27932
27947
|
i[0] || (i[0] = N("div", null, ":", -1)),
|
|
27933
|
-
g(s(
|
|
27948
|
+
g(s(Ke), {
|
|
27934
27949
|
class: "input-error-message",
|
|
27935
27950
|
label: "",
|
|
27936
27951
|
name: "error_message",
|
|
@@ -28027,7 +28042,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
28027
28042
|
fieldRenderers: [
|
|
28028
28043
|
{
|
|
28029
28044
|
match: ({ genericPath: e }) => e === "config.flow.functions.*",
|
|
28030
|
-
component:
|
|
28045
|
+
component: Ke,
|
|
28031
28046
|
propsOverrides: {
|
|
28032
28047
|
multiline: !0,
|
|
28033
28048
|
rows: 3
|
|
@@ -28048,7 +28063,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
28048
28063
|
fieldRenderers: [
|
|
28049
28064
|
{
|
|
28050
28065
|
match: "config.message.functions.*",
|
|
28051
|
-
component:
|
|
28066
|
+
component: Ke,
|
|
28052
28067
|
propsOverrides: {
|
|
28053
28068
|
multiline: !0,
|
|
28054
28069
|
rows: 3
|
|
@@ -28059,7 +28074,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
28059
28074
|
fieldRenderers: [
|
|
28060
28075
|
{
|
|
28061
28076
|
match: "config.metrics",
|
|
28062
|
-
component:
|
|
28077
|
+
component: lt,
|
|
28063
28078
|
propsOverrides: {
|
|
28064
28079
|
appearance: "tabs",
|
|
28065
28080
|
itemLabel: (e, t) => `#${t + 1} Metric`
|
|
@@ -28070,7 +28085,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
28070
28085
|
fieldRenderers: [
|
|
28071
28086
|
{
|
|
28072
28087
|
match: "config.metrics",
|
|
28073
|
-
component:
|
|
28088
|
+
component: lt,
|
|
28074
28089
|
propsOverrides: {
|
|
28075
28090
|
appearance: "tabs",
|
|
28076
28091
|
itemLabel: (e, t) => `#${t + 1} Metric`
|
|
@@ -28119,7 +28134,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
28119
28134
|
fieldRenderers: [
|
|
28120
28135
|
{
|
|
28121
28136
|
match: "config.behavior.idp_error_response_body_template",
|
|
28122
|
-
component:
|
|
28137
|
+
component: Ke,
|
|
28123
28138
|
propsOverrides: {
|
|
28124
28139
|
multiline: !0,
|
|
28125
28140
|
rows: 4
|
|
@@ -28130,7 +28145,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
28130
28145
|
fieldRenderers: [
|
|
28131
28146
|
{
|
|
28132
28147
|
match: ({ path: e }) => /^config\.(client|upstream)\.(text|binary)\.schema$/.test(e),
|
|
28133
|
-
component:
|
|
28148
|
+
component: Ke,
|
|
28134
28149
|
propsOverrides: {
|
|
28135
28150
|
multiline: !0,
|
|
28136
28151
|
rows: 4
|
|
@@ -28141,7 +28156,7 @@ const wa = "_callout_id", Zq = /* @__PURE__ */ be({
|
|
|
28141
28156
|
fieldRenderers: [
|
|
28142
28157
|
{
|
|
28143
28158
|
match: "config.static_tags",
|
|
28144
|
-
component:
|
|
28159
|
+
component: lt,
|
|
28145
28160
|
propsOverrides: {
|
|
28146
28161
|
appearance: "tabs",
|
|
28147
28162
|
itemLabel: (e, t) => `#${t + 1} Tag`
|
|
@@ -28590,7 +28605,7 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
28590
28605
|
}, ee = () => {
|
|
28591
28606
|
const U = i.rawSchema?.fields;
|
|
28592
28607
|
return Array.isArray(U) ? U.find((pe) => pe?.config)?.config : void 0;
|
|
28593
|
-
}, he = /* @__PURE__ */ new Set(["datakit"]), qe = I(() => i.schema?._sourcePlugin || F.name), Te = pn(i.record),
|
|
28608
|
+
}, he = /* @__PURE__ */ new Set(["datakit"]), qe = I(() => i.schema?._sourcePlugin || F.name), Te = pn(i.record), De = (U, te) => {
|
|
28594
28609
|
const pe = he.has(qe.value) ? U : { ...U, config: ge(U.config, ee()) };
|
|
28595
28610
|
Te.value = pe;
|
|
28596
28611
|
const Ee = { ...F };
|
|
@@ -28615,7 +28630,7 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
28615
28630
|
route_id: i.record.route_id || i.record.route,
|
|
28616
28631
|
consumer_id: i.record.consumer_id || i.record.consumer,
|
|
28617
28632
|
consumer_group_id: i.record.consumer_group_id || i.record.consumer_group
|
|
28618
|
-
}), i.record.partials && me("redis", { partials: i.record.partials }), O.value ?
|
|
28633
|
+
}), i.record.partials && me("redis", { partials: i.record.partials }), O.value ? De(i.record) : W(i.record.config, "config"))), Object.keys(i.entityMap).length && !i.entityMap.global && i.schema) {
|
|
28619
28634
|
const U = {};
|
|
28620
28635
|
for (const te in i.entityMap) {
|
|
28621
28636
|
const pe = i.entityMap[te].id, Ee = i.entityMap[te].idField, Re = Ee === "consumer_group_id" ? "consumer_group-id" : JSON.parse(JSON.stringify(Ee).replace("_", "-"));
|
|
@@ -28656,7 +28671,7 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
28656
28671
|
"is-editing": e.editing,
|
|
28657
28672
|
"is-konnect-managed-redis-enabled": o.value,
|
|
28658
28673
|
model: e.record,
|
|
28659
|
-
"on-form-change":
|
|
28674
|
+
"on-form-change": De,
|
|
28660
28675
|
"on-validity-change": le,
|
|
28661
28676
|
"plugin-name": F.name,
|
|
28662
28677
|
"render-rules": P.value?.renderRules,
|
|
@@ -28978,7 +28993,7 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
28978
28993
|
}), Te = (Se) => {
|
|
28979
28994
|
const re = Array.from(new Set(Se.map((ce) => typeof ce)));
|
|
28980
28995
|
return re.length > 1 ? "string" : re[0];
|
|
28981
|
-
},
|
|
28996
|
+
}, De = (Se, re, ce, Ze) => {
|
|
28982
28997
|
let Ye = re && re.fields || [];
|
|
28983
28998
|
return Array.isArray(Ye) && (Ye = Ye.reduce((at, Z) => {
|
|
28984
28999
|
const de = Object.keys(Z)[0];
|
|
@@ -28997,15 +29012,15 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
28997
29012
|
if (Object.prototype.hasOwnProperty.call(Z, "overwrite") || Z.hidden)
|
|
28998
29013
|
return;
|
|
28999
29014
|
if (Z.type === "table")
|
|
29000
|
-
return
|
|
29015
|
+
return De(de, Z.schema, ce);
|
|
29001
29016
|
if (Z.fields)
|
|
29002
29017
|
return Ze && Z.type === "record" ? (ce[de] = {
|
|
29003
29018
|
type: "object",
|
|
29004
29019
|
model: at,
|
|
29005
29020
|
schema: {
|
|
29006
|
-
fields: Object.values(
|
|
29021
|
+
fields: Object.values(De(de, Z, {}, !0))
|
|
29007
29022
|
}
|
|
29008
|
-
}, ce) :
|
|
29023
|
+
}, ce) : De(de, Z, ce);
|
|
29009
29024
|
if (ce[de] = { id: de, model: at }, ce[de].type = Z.type === "boolean" ? "checkbox" : "input", ce[de].required = Z.required, ce[de].referenceable = Z.referenceable, de.startsWith("config-"))
|
|
29010
29025
|
if (!Ze && Z.type === "array" && (le.value = de), Ze && le.value && de.startsWith(le.value)) {
|
|
29011
29026
|
const xe = de.slice(le.value.length + 1);
|
|
@@ -29095,7 +29110,7 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
29095
29110
|
if (Je || (ce[de].type = "array", ce[de].newElementButtonLabelClasses = "kong-form-new-element-button-label", ce[de].fieldClasses = "array-card-container-wrapper", ce[de].itemContainerComponent = "FieldArrayCardContainer", ce[de].items = {
|
|
29096
29111
|
type: "object",
|
|
29097
29112
|
schema: {
|
|
29098
|
-
fields: Object.values(
|
|
29113
|
+
fields: Object.values(De(de, Z.elements, {}, !0))
|
|
29099
29114
|
}
|
|
29100
29115
|
}, ce[de].items.schema.fields.forEach(
|
|
29101
29116
|
(Ve) => {
|
|
@@ -29259,7 +29274,7 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
29259
29274
|
Be([ee, te], (Se, re) => {
|
|
29260
29275
|
const ce = Se[0] !== re[0], Ze = Se[1], Ye = re[1];
|
|
29261
29276
|
if (!E.value && k.value === yi.Edit && (ce || Ze && Ze !== Ye)) {
|
|
29262
|
-
const at =
|
|
29277
|
+
const at = De("config", L.value, he);
|
|
29263
29278
|
H.value && (at._isCustomPlugin = !0), T.value && O.value && (at._sourcePlugin = O.value), $.value && (at._supported_redis_partial_type = $.value), S.value = at;
|
|
29264
29279
|
}
|
|
29265
29280
|
}, { deep: !0 });
|
|
@@ -29318,7 +29333,7 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
29318
29333
|
}) : c("plugins.form.fields.protocols.placeholder"), Z.one_of?.length && (he.protocols.values = Z.one_of.map((de) => ({ label: de, value: de })));
|
|
29319
29334
|
}
|
|
29320
29335
|
if (te.value || k.value === yi.Create) {
|
|
29321
|
-
const at =
|
|
29336
|
+
const at = De("config", L.value, he);
|
|
29322
29337
|
$.value && (at._supported_redis_partial_type = $.value), H.value && (at._isCustomPlugin = !0), T.value && O.value && (at._sourcePlugin = O.value), S.value = at;
|
|
29323
29338
|
}
|
|
29324
29339
|
}
|
|
@@ -29922,7 +29937,7 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
29922
29937
|
field: "id",
|
|
29923
29938
|
message: a("copy.success", { val: ve })
|
|
29924
29939
|
});
|
|
29925
|
-
},
|
|
29940
|
+
}, De = async (H, Y) => {
|
|
29926
29941
|
const ve = JSON.stringify(H);
|
|
29927
29942
|
if (!await Y(ve)) {
|
|
29928
29943
|
i("copy:error", {
|
|
@@ -30184,7 +30199,7 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
30184
30199
|
default: C(({ copyToClipboard: ce }) => [
|
|
30185
30200
|
g(Lt, {
|
|
30186
30201
|
"data-testid": "action-entity-copy-json",
|
|
30187
|
-
onClick: (Ze) =>
|
|
30202
|
+
onClick: (Ze) => De(re, ce)
|
|
30188
30203
|
}, {
|
|
30189
30204
|
default: C(() => [
|
|
30190
30205
|
ue(M(s(a)("actions.copy_json")), 1)
|
|
@@ -31226,7 +31241,7 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
31226
31241
|
return n.config.app === "konnect" && (oe = oe.replace(/{controlPlaneId}/gi, n.config.controlPlaneId || "")), oe.replace(/\/{workspace}/gi, n.config.workspace ? `/${n.config.workspace}` : "").replace(/{entityType}/gi, n.config.entityType || "").replace(/{entityId}/gi, n.config.entityId || "");
|
|
31227
31242
|
}
|
|
31228
31243
|
return "";
|
|
31229
|
-
}),
|
|
31244
|
+
}), De = (oe) => {
|
|
31230
31245
|
a.replace({ hash: oe, query: o.query });
|
|
31231
31246
|
};
|
|
31232
31247
|
Be(() => n.disabledPlugins, (oe, ye) => {
|
|
@@ -31375,7 +31390,7 @@ const B8 = { class: "kong-ui-entities-plugin-form" }, V8 = {
|
|
|
31375
31390
|
"onUpdate:modelValue": ye[3] || (ye[3] = (st) => W.value = st),
|
|
31376
31391
|
"data-testid": "plugins-tabs",
|
|
31377
31392
|
tabs: le.value,
|
|
31378
|
-
onChange:
|
|
31393
|
+
onChange: De
|
|
31379
31394
|
}, St({
|
|
31380
31395
|
kong: C(() => [
|
|
31381
31396
|
N("div", VU, [
|
|
@@ -32145,7 +32160,7 @@ const aB = {
|
|
|
32145
32160
|
Object.keys(h.value).forEach((ie) => {
|
|
32146
32161
|
h.value[ie] = !1;
|
|
32147
32162
|
});
|
|
32148
|
-
},
|
|
32163
|
+
}, De = () => {
|
|
32149
32164
|
const ie = new Map(E.value.map((H) => [H.name, H])), oe = new Set(S.value.map((H) => H.name)), ye = /* @__PURE__ */ new Set([
|
|
32150
32165
|
...oe,
|
|
32151
32166
|
...ie.keys()
|
|
@@ -32191,9 +32206,9 @@ const aB = {
|
|
|
32191
32206
|
return X;
|
|
32192
32207
|
};
|
|
32193
32208
|
Be(() => c.disabledPlugins, (ie, oe) => {
|
|
32194
|
-
!l(ie || {}, oe || {}) && !y.value && (x.value =
|
|
32209
|
+
!l(ie || {}, oe || {}) && !y.value && (x.value = De());
|
|
32195
32210
|
}), Be(() => c.ignoredPlugins, (ie, oe) => {
|
|
32196
|
-
!l(ie, oe) && !y.value && (x.value =
|
|
32211
|
+
!l(ie, oe) && !y.value && (x.value = De());
|
|
32197
32212
|
}), Be(y, (ie) => {
|
|
32198
32213
|
n("loading", ie);
|
|
32199
32214
|
});
|
|
@@ -32260,7 +32275,7 @@ const aB = {
|
|
|
32260
32275
|
const { plugins: { available_on_server: ye } } = oe;
|
|
32261
32276
|
w.value = ye ? Object.keys(ye) : [];
|
|
32262
32277
|
}
|
|
32263
|
-
await ke(ie.signal), x.value =
|
|
32278
|
+
await ke(ie.signal), x.value = De();
|
|
32264
32279
|
} catch (oe) {
|
|
32265
32280
|
G(oe) || (v.value = !0, _.value = a(oe));
|
|
32266
32281
|
} finally {
|