diff --git a/.prettierignore b/.prettierignore index 989440dc0..42b95f1da 100755 --- a/.prettierignore +++ b/.prettierignore @@ -27,3 +27,4 @@ website/static/katex/katex.min.css website/changelog/_swizzle_theme_tests website/_dogfooding/_swizzle_theme_tests +content/docs/api/ \ No newline at end of file diff --git a/content/docs/api/pomerium-api.info.mdx b/content/docs/api/pomerium-api.info.mdx new file mode 100644 index 000000000..0574f5e47 --- /dev/null +++ b/content/docs/api/pomerium-api.info.mdx @@ -0,0 +1,59 @@ +--- +id: pomerium-api +title: "Pomerium API" +description: "API for managing Pomerium configuration." +sidebar_label: Introduction +sidebar_position: 0 +hide_title: true +custom_edit_url: null +--- + +import ApiLogo from "@theme/ApiLogo"; +import Heading from "@theme/Heading"; +import SchemaTabs from "@theme/SchemaTabs"; +import TabItem from "@theme/TabItem"; +import Export from "@theme/ApiExplorer/Export"; + + + + + + + + + +API for managing Pomerium configuration. + +
+

+ Contact +

+ Pomerium: [support@pomerium.com](mailto:support@pomerium.com) + + URL: [https://github.com/pomerium](https://github.com/pomerium) + +
+

+ License +

+ Apache License 2.0 + +
+ \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-key-pair.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-create-key-pair.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-key-pair.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-key-pair.RequestSchema.json b/content/docs/api/pomerium-config-config-service-create-key-pair.RequestSchema.json new file mode 100644 index 000000000..c1356d73d --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-key-pair.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"keyPair":{"title":"key_pair","description":"The key pair to create.","type":"object","properties":{"id":{"type":["string","null"],"examples":["019e8e96-0959-7dc2-b45f-e32dcafcf95b"],"title":"id","description":"ID of the key pair."},"namespaceId":{"type":["string","null"],"examples":["019e8e96-87b4-78b9-9830-19874b518d60"],"title":"namespace_id","description":"Namespace of the key pair."},"originatorId":{"type":["string","null"],"examples":["your-custom-app"],"title":"originator_id","description":"Originator of the key pair."},"name":{"type":["string","null"],"examples":["TLS Certificate for www.example.com"],"title":"name","description":"The name of the key pair."},"certificate":{"type":["string","null"],"examples":["-----BEGIN CERTIFICATE-----\nEXAMPLE\n-----END CERTIFICATE-----"],"title":"certificate","format":"byte","description":"The key pair certificate raw bytes."},"key":{"type":["string","null"],"examples":["-----BEGIN EC PRIVATE KEY-----\nEXAMPLE\n-----END EC PRIVATE KEY-----"],"title":"key","format":"byte","description":"The key pair private key raw bytes."},"createdAt":{"title":"created_at","description":"When the key pair was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the key pair was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"status":{"title":"status","description":"The status of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_STATUS_UNKNOWN","KEY_PAIR_STATUS_READY","KEY_PAIR_STATUS_PENDING"]},"origin":{"title":"origin","description":"The origin of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_ORIGIN_UNKNOWN","KEY_PAIR_ORIGIN_USER","KEY_PAIR_ORIGIN_SYSTEM"]},"certificateInfo":{"type":"array","items":{"type":"object","properties":{"version":{"type":["integer","string"],"title":"version","format":"int64","description":"X.509 certificate format version (3 for modern certificates)."},"serial":{"type":"string","title":"serial","description":"Certificate serial number, formatted as a decimal integer string."},"issuer":{"title":"issuer","description":"Issuer distinguished name (the CA that signed this certificate).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"subject":{"title":"subject","description":"Subject distinguished name (the identity the certificate vouches for).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"notBefore":{"title":"not_before","description":"First instant the certificate is valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"notAfter":{"title":"not_after","description":"First instant the certificate is no longer valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"keyUsage":{"title":"key_usage","description":"Decoded KeyUsage and ExtKeyUsage extensions on the certificate.","type":"object","properties":{"digitalSignature":{"type":"boolean","title":"digital_signature","description":"Certificate authorizes verifying digital signatures."},"contentCommitment":{"type":"boolean","title":"content_commitment","description":"Certificate authorizes non-repudiation of signed data."},"keyEncipherment":{"type":"boolean","title":"key_encipherment","description":"Certificate authorizes key transport (encryption of session keys)."},"dataEncipherment":{"type":"boolean","title":"data_encipherment","description":"Certificate authorizes direct encryption of arbitrary data."},"keyAgreement":{"type":"boolean","title":"key_agreement","description":"Certificate authorizes Diffie-Hellman style key agreement."},"certSign":{"type":"boolean","title":"cert_sign","description":"Certificate authorizes signing other certificates (CA)."},"crlSign":{"type":"boolean","title":"crl_sign","description":"Certificate authorizes signing certificate revocation lists."},"encipherOnly":{"type":"boolean","title":"encipher_only","description":"With key_agreement, restricts use to encipherment only."},"decipherOnly":{"type":"boolean","title":"decipher_only","description":"With key_agreement, restricts use to decipherment only."},"serverAuth":{"type":"boolean","title":"server_auth","description":"Extended usage: server authentication (TLS server certificates)."},"clientAuth":{"type":"boolean","title":"client_auth","description":"Extended usage: client authentication (TLS client certificates)."}},"additionalProperties":false},"dnsNames":{"type":"array","items":{"type":"string"},"title":"dns_names","description":"DNS names in the Subject Alternative Name extension."},"emailAddresses":{"type":"array","items":{"type":"string"},"title":"email_addresses","description":"Email addresses in the Subject Alternative Name extension."},"ipAddresses":{"type":"array","items":{"type":"string"},"title":"ip_addresses","description":"IP addresses in the Subject Alternative Name extension, formatted as\n strings (IPv4 dotted-decimal or IPv6 colon-hex)."},"uris":{"type":"array","items":{"type":"string"},"title":"uris","description":"URIs in the Subject Alternative Name extension."},"permittedDnsDomainsCritical":{"type":"boolean","title":"permitted_dns_domains_critical","description":"When true the permitted/excluded DNS-domain name-constraints are marked\n critical and clients must understand them or reject the certificate."},"permittedDnsDomains":{"type":"array","items":{"type":"string"},"title":"permitted_dns_domains","description":"Name constraints: DNS domains the certificate is permitted to assert."},"excludedDnsDomains":{"type":"array","items":{"type":"string"},"title":"excluded_dns_domains","description":"Name constraints: DNS domains the certificate must not assert."},"permittedIpRanges":{"type":"array","items":{"type":"string"},"title":"permitted_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate is permitted to assert."},"excludedIpRanges":{"type":"array","items":{"type":"string"},"title":"excluded_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate must not assert."},"permittedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"permitted_email_addresses","description":"Name constraints: email addresses (or domains) the certificate is\n permitted to assert."},"excludedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"excluded_email_addresses","description":"Name constraints: email addresses (or domains) the certificate must not\n assert."},"permittedUriDomains":{"type":"array","items":{"type":"string"},"title":"permitted_uri_domains","description":"Name constraints: URI domains the certificate is permitted to assert."},"excludedUriDomains":{"type":"array","items":{"type":"string"},"title":"excluded_uri_domains","description":"Name constraints: URI domains the certificate must not assert."}},"title":"CertificateInfo","additionalProperties":false,"description":"CertificateInfo is a .proto reflection of\n https://golang.org/pkg/crypto/x509/#Certificate"},"title":"certificate_info","description":"Info about any certificates the key pair has.","readOnly":true}},"additionalProperties":false}},"title":"CreateKeyPairRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-key-pair.StatusCodes.json b/content/docs/api/pomerium-config-config-service-create-key-pair.StatusCodes.json new file mode 100644 index 000000000..239b67fb8 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-key-pair.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"keyPair":{"title":"key_pair","description":"The newly created key pair, including any server-assigned fields.","type":"object","properties":{"id":{"type":["string","null"],"examples":["019e8e96-0959-7dc2-b45f-e32dcafcf95b"],"title":"id","description":"ID of the key pair."},"namespaceId":{"type":["string","null"],"examples":["019e8e96-87b4-78b9-9830-19874b518d60"],"title":"namespace_id","description":"Namespace of the key pair."},"originatorId":{"type":["string","null"],"examples":["your-custom-app"],"title":"originator_id","description":"Originator of the key pair."},"name":{"type":["string","null"],"examples":["TLS Certificate for www.example.com"],"title":"name","description":"The name of the key pair."},"certificate":{"type":["string","null"],"examples":["-----BEGIN CERTIFICATE-----\nEXAMPLE\n-----END CERTIFICATE-----"],"title":"certificate","format":"byte","description":"The key pair certificate raw bytes."},"key":{"type":["string","null"],"examples":["-----BEGIN EC PRIVATE KEY-----\nEXAMPLE\n-----END EC PRIVATE KEY-----"],"title":"key","format":"byte","description":"The key pair private key raw bytes."},"createdAt":{"title":"created_at","description":"When the key pair was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the key pair was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"status":{"title":"status","description":"The status of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_STATUS_UNKNOWN","KEY_PAIR_STATUS_READY","KEY_PAIR_STATUS_PENDING"]},"origin":{"title":"origin","description":"The origin of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_ORIGIN_UNKNOWN","KEY_PAIR_ORIGIN_USER","KEY_PAIR_ORIGIN_SYSTEM"]},"certificateInfo":{"type":"array","items":{"type":"object","properties":{"version":{"type":["integer","string"],"title":"version","format":"int64","description":"X.509 certificate format version (3 for modern certificates)."},"serial":{"type":"string","title":"serial","description":"Certificate serial number, formatted as a decimal integer string."},"issuer":{"title":"issuer","description":"Issuer distinguished name (the CA that signed this certificate).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"subject":{"title":"subject","description":"Subject distinguished name (the identity the certificate vouches for).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"notBefore":{"title":"not_before","description":"First instant the certificate is valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"notAfter":{"title":"not_after","description":"First instant the certificate is no longer valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"keyUsage":{"title":"key_usage","description":"Decoded KeyUsage and ExtKeyUsage extensions on the certificate.","type":"object","properties":{"digitalSignature":{"type":"boolean","title":"digital_signature","description":"Certificate authorizes verifying digital signatures."},"contentCommitment":{"type":"boolean","title":"content_commitment","description":"Certificate authorizes non-repudiation of signed data."},"keyEncipherment":{"type":"boolean","title":"key_encipherment","description":"Certificate authorizes key transport (encryption of session keys)."},"dataEncipherment":{"type":"boolean","title":"data_encipherment","description":"Certificate authorizes direct encryption of arbitrary data."},"keyAgreement":{"type":"boolean","title":"key_agreement","description":"Certificate authorizes Diffie-Hellman style key agreement."},"certSign":{"type":"boolean","title":"cert_sign","description":"Certificate authorizes signing other certificates (CA)."},"crlSign":{"type":"boolean","title":"crl_sign","description":"Certificate authorizes signing certificate revocation lists."},"encipherOnly":{"type":"boolean","title":"encipher_only","description":"With key_agreement, restricts use to encipherment only."},"decipherOnly":{"type":"boolean","title":"decipher_only","description":"With key_agreement, restricts use to decipherment only."},"serverAuth":{"type":"boolean","title":"server_auth","description":"Extended usage: server authentication (TLS server certificates)."},"clientAuth":{"type":"boolean","title":"client_auth","description":"Extended usage: client authentication (TLS client certificates)."}},"additionalProperties":false},"dnsNames":{"type":"array","items":{"type":"string"},"title":"dns_names","description":"DNS names in the Subject Alternative Name extension."},"emailAddresses":{"type":"array","items":{"type":"string"},"title":"email_addresses","description":"Email addresses in the Subject Alternative Name extension."},"ipAddresses":{"type":"array","items":{"type":"string"},"title":"ip_addresses","description":"IP addresses in the Subject Alternative Name extension, formatted as\n strings (IPv4 dotted-decimal or IPv6 colon-hex)."},"uris":{"type":"array","items":{"type":"string"},"title":"uris","description":"URIs in the Subject Alternative Name extension."},"permittedDnsDomainsCritical":{"type":"boolean","title":"permitted_dns_domains_critical","description":"When true the permitted/excluded DNS-domain name-constraints are marked\n critical and clients must understand them or reject the certificate."},"permittedDnsDomains":{"type":"array","items":{"type":"string"},"title":"permitted_dns_domains","description":"Name constraints: DNS domains the certificate is permitted to assert."},"excludedDnsDomains":{"type":"array","items":{"type":"string"},"title":"excluded_dns_domains","description":"Name constraints: DNS domains the certificate must not assert."},"permittedIpRanges":{"type":"array","items":{"type":"string"},"title":"permitted_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate is permitted to assert."},"excludedIpRanges":{"type":"array","items":{"type":"string"},"title":"excluded_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate must not assert."},"permittedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"permitted_email_addresses","description":"Name constraints: email addresses (or domains) the certificate is\n permitted to assert."},"excludedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"excluded_email_addresses","description":"Name constraints: email addresses (or domains) the certificate must not\n assert."},"permittedUriDomains":{"type":"array","items":{"type":"string"},"title":"permitted_uri_domains","description":"Name constraints: URI domains the certificate is permitted to assert."},"excludedUriDomains":{"type":"array","items":{"type":"string"},"title":"excluded_uri_domains","description":"Name constraints: URI domains the certificate must not assert."}},"title":"CertificateInfo","additionalProperties":false,"description":"CertificateInfo is a .proto reflection of\n https://golang.org/pkg/crypto/x509/#Certificate"},"title":"certificate_info","description":"Info about any certificates the key pair has.","readOnly":true}},"additionalProperties":false}},"title":"CreateKeyPairResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-key-pair.api.mdx b/content/docs/api/pomerium-config-config-service-create-key-pair.api.mdx new file mode 100644 index 000000000..b8ffd1aab --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-key-pair.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-create-key-pair +title: "CreateKeyPair" +description: "Creates a key pair" +sidebar_label: "CreateKeyPair" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Creates a key pair + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-policy.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-create-policy.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-policy.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-policy.RequestSchema.json b/content/docs/api/pomerium-config-config-service-create-policy.RequestSchema.json new file mode 100644 index 000000000..c696f2eb2 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-policy.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"policy":{"title":"policy","description":"The policy to create.","type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"additionalProperties":false}},"title":"CreatePolicyRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-policy.StatusCodes.json b/content/docs/api/pomerium-config-config-service-create-policy.StatusCodes.json new file mode 100644 index 000000000..6a1c6c555 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-policy.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"policy":{"title":"policy","description":"The newly created policy, including any server-assigned fields.","type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"additionalProperties":false}},"title":"CreatePolicyResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-policy.api.mdx b/content/docs/api/pomerium-config-config-service-create-policy.api.mdx new file mode 100644 index 000000000..8886ff0d2 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-policy.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-create-policy +title: "CreatePolicy" +description: "Creates a policy" +sidebar_label: "CreatePolicy" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Creates a policy + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-route.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-create-route.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-route.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-route.RequestSchema.json b/content/docs/api/pomerium-config-config-service-create-route.RequestSchema.json new file mode 100644 index 000000000..58d1d1e8c --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-route.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"route":{"title":"route","description":"The route to create.","type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The id of the route."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"The namespace id of the route."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"The originator id of the route."},"name":{"type":["string","null"],"title":"name","description":"The name of the route."},"statName":{"type":["string","null"],"title":"stat_name","description":"The name used for stats telemetry with the route."},"description":{"type":["string","null"],"title":"description","description":"A human-readable description of the route."},"logoUrl":{"type":["string","null"],"title":"logo_url","description":"A URL for a logo for the route."},"from":{"type":"string","title":"from","description":"The externally accessible URL for a proxied HTTP request."},"to":{"type":"array","items":{"type":"string"},"title":"to","description":"The destination(s) of a proxied request."},"redirect":{"title":"redirect","description":"Indicates that a route should be redirected.","type":"object","properties":{"httpsRedirect":{"type":["boolean","null"],"title":"https_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n \"https\"."},"schemeRedirect":{"type":["string","null"],"title":"scheme_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n the given value."},"hostRedirect":{"type":["string","null"],"title":"host_redirect","description":"Indicates that the incoming host of a request will be swapped with\n the given value."},"portRedirect":{"type":["integer","null"],"title":"port_redirect","description":"Indicates that the incoming port of a request will be swapped with\n the given value."},"pathRedirect":{"type":["string","null"],"title":"path_redirect","description":"Indicates that the incoming path portion of a request URL will be\n swapped with the given value."},"prefixRewrite":{"type":["string","null"],"title":"prefix_rewrite","description":"Indicates that the incoming matched path prefix portion of a request\n URL will be swapped with the given value."},"responseCode":{"type":["integer","null"],"title":"response_code","format":"int32","description":"The response code used for the redirect. Defaults to 301."},"stripQuery":{"type":["boolean","null"],"title":"strip_query","description":"Indicates that during redirection, the query portion of the URL will\n be removed. Defaults to false."}},"additionalProperties":false},"response":{"title":"response","description":"Indicates that a route should return a direct response.","type":"object","properties":{"status":{"type":"integer","title":"status","description":"The status code that Pomerium returns for a static HTTP response.\n For example, 200."},"body":{"type":"string","title":"body","description":"The response body that Pomerium returns for a static HTTP\n response."}},"additionalProperties":false},"loadBalancingWeights":{"type":"array","items":{"type":"integer"},"title":"load_balancing_weights","description":"Optional load balancing weights for upstream servers defined in to.\n If not specified, all upstream servers are assigned the same weight.\n If provided, len(to) must equal len(load_balancing_weights)."},"allowedUsers":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_users","description":"Grants access to the route if the logged-in user's ID matches one of the\n given values. Deprecated in favor of the PPL user criterion.","deprecated":true},"allowedDomains":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_domains","description":"Grants access to the route if the logged-in user's email address is for\n one of the given values. Deprecated in favor of the PPL domain criterion.","deprecated":true},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access to the route if the logged-in user's session/user claims\n match one of the given values. Deprecated in favor of the PPL claim\n criterion.","deprecated":true},"prefix":{"type":"string","title":"prefix","description":"Only match requests that have a path that begins with the given prefix."},"path":{"type":"string","title":"path","description":"Only match requests whose path is an exact match for the given path."},"regex":{"type":"string","title":"regex","description":"Only match requests whose path matches the given regular expression."},"prefixRewrite":{"type":"string","title":"prefix_rewrite","description":"Indicates that when a request is forwarded, the matched prefix (or path)\n will be swapped with this value."},"regexRewritePattern":{"type":"string","title":"regex_rewrite_pattern","description":"A regular expression used to rewrite the path of a forwarded request."},"regexRewriteSubstitution":{"type":"string","title":"regex_rewrite_substitution","description":"When a regular expression pattern is set, what the matched pattern will\n be replaced with."},"regexPriorityOrder":{"type":["integer","string","null"],"title":"regex_priority_order","format":"int64","description":"Determines the ordering of routes that use regular expressions."},"corsAllowPreflight":{"type":"boolean","title":"cors_allow_preflight","description":"Indicates that OPTIONS requests used for CORS can pass through\n unauthenticated."},"allowPublicUnauthenticatedAccess":{"type":"boolean","title":"allow_public_unauthenticated_access","description":"Grants access to a route without requiring any authentication."},"allowAnyAuthenticatedUser":{"type":"boolean","title":"allow_any_authenticated_user","description":"Grants access to a route for any logged-in user."},"timeout":{"title":"timeout","description":"The per-route request timeout option. Cannot exceed global values.","type":"string","format":"duration"},"idleTimeout":{"title":"idle_timeout","description":"The per-route request timeout for a connection that is idle with\n no data exchange.","type":"string","format":"duration"},"allowWebsockets":{"type":"boolean","title":"allow_websockets","description":"Allow websocket requests. Also disables the default route timeout."},"allowSpdy":{"type":"boolean","title":"allow_spdy","description":"Allow SPDY protocol upgrade requests."},"tlsSkipVerify":{"type":"boolean","title":"tls_skip_verify","description":"Indicates that pomerium should perform no verification on upstream\n TLS connections. Any certificate for any hostname will be accepted."},"tlsServerName":{"type":"string","title":"tls_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence.","deprecated":true},"tlsUpstreamServerName":{"type":"string","title":"tls_upstream_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence."},"tlsDownstreamServerName":{"type":"string","title":"tls_downstream_server_name","description":"The server name indication (SNI) for downstream TLS connections."},"tlsCustomCa":{"type":"string","title":"tls_custom_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates of upstream TLS connections."},"tlsCustomCaFile":{"type":"string","title":"tls_custom_ca_file","description":"A file containing root certificate authorities (in PEM format)\n used to verify certificates of upstream TLS connections."},"tlsCustomCaKeyPairId":{"type":["string","null"],"title":"tls_custom_ca_key_pair_id","description":"A reference to a key pair containing root certificate authorities (in PEM\n format) used to verify certificates of upstream TLS connections."},"tlsClientCert":{"type":"string","title":"tls_client_cert","description":"The client certificate to present to upstream TLS connections for\n mTLS."},"tlsClientKey":{"type":"string","title":"tls_client_key","description":"The private key for the client certificate to present to upstream\n TLS connections for mTLS."},"tlsClientCertFile":{"type":"string","title":"tls_client_cert_file","description":"A file containing the client certificate to present to upstream TLS\n connections for mTLS."},"tlsClientKeyFile":{"type":"string","title":"tls_client_key_file","description":"A file containing the private key for the client certificate to\n present to upstream TLS connections for mTLS."},"tlsClientKeyPairId":{"type":["string","null"],"title":"tls_client_key_pair_id","description":"A reference to the key pair containing the client certificate\n and private key to present to upstream TLS connections for mTLS."},"tlsDownstreamClientCa":{"type":"string","title":"tls_downstream_client_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaFile":{"type":"string","title":"tls_downstream_client_ca_file","description":"A file containing the root certificate authorities (in PEM format) used to\n verify certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaKeyPairId":{"type":["string","null"],"title":"tls_downstream_client_ca_key_pair_id","description":"A reference to a key pair containing the root certificate authorities (in\n PEM format) used to verify certificates for downstream TLS connections. If\n specified downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsUpstreamAllowRenegotiation":{"type":"boolean","title":"tls_upstream_allow_renegotiation","description":"Controls whether server-initiated TLS renegotiation is allowed for\n upstream servers."},"setRequestHeaders":{"type":"object","title":"set_request_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set both static and dynamic headers for upstream requests.\n Static values can be useful if you want to pass along additional\n information to upstream applications as headers, or to set a fixed\n authentication header on the request. Dynamic values enable you to pass\n ID and Access tokens from your identity provider to upstream\n applications. The following dynamic header values are supported:\n\n - ${pomerium.access_token}: OAuth access token from the identity provider.\n - ${pomerium.client_cert_fingerprint}: Short-form SHA-256 fingerprint of the presented client certificate.\n - ${pomerium.id_token}: OIDC ID token from the identity provider.\n - ${pomerium.jwt}: The Pomerium assertion JWT for the logged-in user."},"removeRequestHeaders":{"type":"array","items":{"type":"string"},"title":"remove_request_headers","description":"Headers to remove from upstream requests. This can be useful if you want to\n prevent privacy information from being passed to upstream applications."},"setResponseHeaders":{"type":"object","title":"set_response_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set static values for the given downstream response headers.\n These headers will take precedence over the global set_response_headers."},"rewriteResponseHeaders":{"type":"array","items":{"type":"object","allOf":[{"properties":{"header":{"type":"string","title":"header","description":"The name of the response header to rewrite (case-insensitive)."},"value":{"type":"string","title":"value","description":"The new value (or replacement substring, when `prefix` is set) to write\n back to the header."}}},{"oneOf":[{"type":"object","properties":{"prefix":{"type":"string","title":"prefix","description":"Only the portion of the header value that begins with this literal\n prefix is replaced; the remainder is kept."}},"title":"prefix","required":["prefix"]}]}],"title":"RouteRewriteHeader","additionalProperties":false,"description":"A rewrite rule applied to a single response header before the response is\n returned to the downstream client."},"title":"rewrite_response_headers","description":"Used to modify downstream response headers."},"preserveHostHeader":{"type":"boolean","title":"preserve_host_header","description":"Passes the Host (or :authority) header from the incoming request to the\n upstream service, instead of the Host header from the route's to URL."},"passIdentityHeaders":{"type":["boolean","null"],"title":"pass_identity_headers","description":"Sends identity headers to all upstream applications. Identity headers\n include:\n\n - X-Pomerium-Jwt-Assertion: The pomerium assertion JWT for the logged-in user.\n - X-Pomerium-Claim-*: Each of the claim values specified by the jwt_claim_headers option.\n\n When not set explicitly, the global pass_identity_headers option will be used."},"kubernetesServiceAccountToken":{"type":"string","title":"kubernetes_service_account_token","description":"A Kubernetes service account token used to authenticate to the\n Kubernetes API via Authorization: Bearer and Impersonate-User/Group\n headers."},"kubernetesServiceAccountTokenFile":{"type":"string","title":"kubernetes_service_account_token_file","description":"A file containing a Kubernetes service account token."},"kubernetesServiceAccountTokenKeyPairId":{"type":["string","null"],"title":"kubernetes_service_account_token_key_pair_id","description":"A key pair reference for a Kubernetes service account token."},"enableGoogleCloudServerlessAuthentication":{"type":"boolean","title":"enable_google_cloud_serverless_authentication","description":"Adds an Authorization: Bearer ID_TOKEN header for Google Cloud\n serverless upstream requests."},"jwtIssuerFormat":{"oneOf":[{"type":"string","title":"IssuerFormat","enum":["IssuerHostOnly","IssuerURI"],"description":"Format used for the `iss` claim of JWTs Pomerium issues for upstream\n requests."},{"type":"null"}],"title":"jwt_issuer_format","description":"Controls the format of the iss claim in JWTs passed to upstream\n services by this route."},"jwtGroupsFilter":{"type":"array","items":{"type":"string"},"title":"jwt_groups_filter","description":"Allowlist of group names or IDs to include in the Pomerium JWT for\n this route."},"jwtGroupsFilterInferFromPpl":{"type":["boolean","null"],"title":"jwt_groups_filter_infer_from_ppl","description":"Whether to add JWT groups from any PPL policies.\n Not supported in the open source version of Pomerium."},"bearerTokenFormat":{"oneOf":[{"type":"string","title":"BearerTokenFormat","enum":["BEARER_TOKEN_FORMAT_UNKNOWN","BEARER_TOKEN_FORMAT_DEFAULT","BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN","BEARER_TOKEN_FORMAT_IDP_IDENTITY_TOKEN"],"description":"Controls how HTTP bearer token authentication is handled."},{"type":"null"}],"title":"bearer_token_format","description":"Controls how authorization bearer tokens are interpreted for this\n route. When unset, the global bearer_token_format option is used."},"dependsOn":{"type":"array","items":{"type":"string"},"title":"depends_on","description":"Additional hosts that participate in chained login redirects for\n this route. Up to five hosts are supported."},"policies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"title":"Policy","additionalProperties":false,"description":"Configuration for a policy."},"title":"policies","description":"Structured sub-policies attached to this route."},"pplPolicies":{"type":"array","items":{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},"title":"ppl_policies","description":"PPL policies attached to this route."},"policyIds":{"type":"array","items":{"type":"string"},"title":"policy_ids","description":"IDs of policies assigned to this route."},"hostRewrite":{"type":["string","null"],"title":"host_rewrite","description":"Rewrites the Host or :authority header to a fixed value."},"hostRewriteHeader":{"type":["string","null"],"title":"host_rewrite_header","description":"Rewrites the Host or :authority header using the value of another\n request header."},"hostPathRegexRewritePattern":{"type":["string","null"],"title":"host_path_regex_rewrite_pattern","description":"A regular expression used to rewrite the Host or :authority header\n from the request path."},"hostPathRegexRewriteSubstitution":{"type":["string","null"],"title":"host_path_regex_rewrite_substitution","description":"When host_path_regex_rewrite_pattern is set, what the matched\n pattern will be replaced with to produce the Host header."},"idpClientId":{"type":["string","null"],"title":"idp_client_id","description":"Overrides the global identity provider client ID for this route."},"idpClientSecret":{"type":["string","null"],"title":"idp_client_secret","description":"Overrides the global identity provider client secret for this route."},"idpAccessTokenAllowedAudiences":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"idp_access_token_allowed_audiences","description":"Allowed audiences for validating IdP-issued access tokens for this\n route."},"showErrorDetails":{"type":"boolean","title":"show_error_details","description":"If true, include policy explanation and remediation details in\n authorization error responses."},"mcp":{"oneOf":[{"type":"object","oneOf":[{"type":"object","properties":{"client":{"title":"client","description":"Provides an application with external tokens for MCP server access.","type":"object","additionalProperties":false}},"title":"client","required":["client"]},{"type":"object","properties":{"server":{"title":"server","description":"Indicates that this route fronts an MCP server.","type":"object","properties":{"upstreamOauth2":{"oneOf":[{"type":"object","properties":{"clientId":{"type":"string","title":"client_id","description":"The public identifier for an application."},"clientSecret":{"type":"string","title":"client_secret","description":"The secret known only to the application and the authorization server."},"oauth2Endpoint":{"title":"oauth2_endpoint","description":"The OAuth2 endpoint configuration.","type":"object","properties":{"authUrl":{"type":"string","title":"auth_url","description":"The authorization URL."},"tokenUrl":{"type":"string","title":"token_url","description":"The token URL."},"authStyle":{"oneOf":[{"type":"string","title":"OAuth2AuthStyle","enum":["OAUTH2_AUTH_STYLE_UNSPECIFIED","OAUTH2_AUTH_STYLE_IN_PARAMS","OAUTH2_AUTH_STYLE_IN_HEADER"],"description":"How the OAuth2 client identifies itself to the authorization server when\n fetching tokens."},{"type":"null"}],"title":"auth_style","description":"if unset, auto-detect which authentication\n style the provider wants by trying both ways and caching\n the successful way for the future."}},"additionalProperties":false},"scopes":{"type":"array","items":{"type":"string"},"title":"scopes","description":"Scope to control what data the OAuth2 server returns."},"authorizationUrlParams":{"type":"object","title":"authorization_url_params","additionalProperties":{"type":"string","title":"value"},"description":"Additional parameters to add to authorization requests."}},"title":"UpstreamOAuth2","additionalProperties":false,"description":"Configuration for OAuth2 authorization for an upstream service behind\n Pomerium."},{"type":"null"}],"title":"upstream_oauth2","description":"Specifies that before the request reaches the MCP upstream server,\n it should acquire an OAuth2 token."},"maxRequestBytes":{"type":["integer","null"],"title":"max_request_bytes","description":"The maximum request body size in bytes that can be sent to the MCP\n server (default: 4KiB)."},"path":{"type":["string","null"],"title":"path","description":"The path to append to the URL when returning the server URL in the\n .mcp/routes endpoint. Defaults to \"/\"."},"authorizationServerUrl":{"type":["string","null"],"title":"authorization_server_url","description":"The issuer URL of the upstream authorization server. Used as a fallback\n when PRM (RFC 9728) discovery fails, per the MCP spec's \"abort or use\n pre-configured values\" guidance."}},"additionalProperties":false}},"title":"server","required":["server"]}],"title":"MCP","additionalProperties":false,"description":"Configuration for an MCP route."},{"type":"null"}],"title":"mcp","description":"Model Context Protocol configuration for this route. Requires the\n runtime_flags.mcp feature flag."},"circuitBreakerThresholds":{"oneOf":[{"type":"object","properties":{"maxConnections":{"type":["integer","null"],"title":"max_connections","description":"The maximum number of connections that Envoy will make to the upstream\n cluster. If not specified, the default is 1024."},"maxPendingRequests":{"type":["integer","null"],"title":"max_pending_requests","description":"The maximum number of pending requests that Envoy will allow to the\n upstream cluster. If not specified, the default is 1024. This limit is\n applied as a connection limit for non-HTTP traffic."},"maxRequests":{"type":["integer","null"],"title":"max_requests","description":"The maximum number of parallel requests that Envoy will make to the\n upstream cluster. If not specified, the default is 1024. This limit does\n not apply to non-HTTP traffic."},"maxRetries":{"type":["integer","null"],"title":"max_retries","description":"The maximum number of parallel retries that Envoy will allow to the\n upstream cluster. If not specified, the default is 3."},"maxConnectionPools":{"type":["integer","null"],"title":"max_connection_pools","description":"The maximum number of connection pools per cluster that Envoy will\n concurrently support at once. If not specified, the default is unlimited.\n Set this for clusters which create a large number of connection pools."}},"title":"CircuitBreakerThresholds","additionalProperties":false,"description":"CircuitBreakerThresholds defines CircuitBreaker settings."},{"type":"null"}],"title":"circuit_breaker_thresholds","description":"Circuit breaker thresholds for upstream requests on this route."},"upstreamTunnel":{"oneOf":[{"type":"object","properties":{"sshPolicy":{"oneOf":[{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},{"type":"null"}],"title":"ssh_policy","description":"PPL policy enforced before the SSH tunnel is opened to the upstream."},"sshPolicyRego":{"type":"array","items":{"type":"string"},"title":"ssh_policy_rego","description":"Rego rules evaluated before the SSH tunnel is opened to the upstream."},"sshPolicyId":{"type":["string","null"],"title":"ssh_policy_id","description":"ID of a shared policy whose rules also gate this SSH tunnel."}},"title":"UpstreamTunnel","additionalProperties":false,"description":"Configuration for an upstream tunnel. Applies to routes whose upstream is\n reached through Pomerium's SSH proxy."},{"type":"null"}],"title":"upstream_tunnel","description":"Configuration for reverse tunneling to upstreams for this route."},"outlierDetection":{"oneOf":[{"type":"object","properties":{"consecutive5xx":{"title":"consecutive_5xx","description":"The number of consecutive server-side error responses (for HTTP traffic,\n 5xx responses; for TCP traffic, connection failures; for Redis, failure to\n respond PONG; etc.) before a consecutive 5xx ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"interval":{"title":"interval","description":"The time interval between ejection analysis sweeps. This can result in\n both new ejections as well as hosts being returned to service. Defaults\n to 10000ms or 10s.","type":"string","format":"duration"},"baseEjectionTime":{"title":"base_ejection_time","description":"The base time that a host is ejected for. The real time is equal to the\n base time multiplied by the number of times the host has been ejected and is\n capped by :ref:`max_ejection_time`.\n Defaults to 30000ms or 30s.","type":"string","format":"duration"},"maxEjectionPercent":{"title":"max_ejection_percent","description":"The maximum % of an upstream cluster that can be ejected due to outlier detection. Defaults to 10% .\n Will eject at least one host regardless of the value if :ref:`always_eject_one_host` is enabled.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutive5xx":{"title":"enforcing_consecutive_5xx","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive 5xx. This setting can be used to disable\n ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingSuccessRate":{"title":"enforcing_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics. This setting can be used to\n disable ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateMinimumHosts":{"title":"success_rate_minimum_hosts","description":"The number of hosts in a cluster that must have enough request volume to\n detect success rate outliers. If the number of hosts is less than this\n setting, outlier detection via success rate statistics is not performed\n for any host in the cluster. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateRequestVolume":{"title":"success_rate_request_volume","description":"The minimum number of total requests that must be collected in one\n interval (as defined by the interval duration above) to include this host\n in success rate based outlier detection. If the volume is lower than this\n setting, outlier detection via success rate statistics is not performed\n for that host. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateStdevFactor":{"title":"success_rate_stdev_factor","description":"This factor is used to determine the ejection threshold for success rate\n outlier ejection. The ejection threshold is the difference between the\n mean success rate, and the product of this factor and the standard\n deviation of the mean success rate: mean - (stdev *\n success_rate_stdev_factor). This factor is divided by a thousand to get a\n double. That is, if the desired factor is 1.9, the runtime value should\n be 1900. Defaults to 1900.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"consecutiveGatewayFailure":{"title":"consecutive_gateway_failure","description":"The number of consecutive gateway failures (502, 503, 504 status codes)\n before a consecutive gateway failure ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveGatewayFailure":{"title":"enforcing_consecutive_gateway_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive gateway failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"splitExternalLocalOriginErrors":{"type":"boolean","title":"split_external_local_origin_errors","description":"Determines whether to distinguish local origin failures from external errors. If set to true\n the following configuration parameters are taken into account:\n :ref:`consecutive_local_origin_failure`,\n :ref:`enforcing_consecutive_local_origin_failure`\n and\n :ref:`enforcing_local_origin_success_rate`.\n Defaults to false."},"consecutiveLocalOriginFailure":{"title":"consecutive_local_origin_failure","description":"The number of consecutive locally originated failures before ejection\n occurs. Defaults to 5. Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveLocalOriginFailure":{"title":"enforcing_consecutive_local_origin_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive locally originated failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingLocalOriginSuccessRate":{"title":"enforcing_local_origin_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics for locally originated errors.\n This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageThreshold":{"title":"failure_percentage_threshold","description":"The failure percentage to use when determining failure percentage-based outlier detection. If\n the failure percentage of a given host is greater than or equal to this value, it will be\n ejected. Defaults to 85.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentage":{"title":"enforcing_failure_percentage","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n failure percentage statistics. This setting can be used to disable ejection or to ramp it up\n slowly. Defaults to 0.\n\n [#next-major-version: setting this without setting failure_percentage_threshold should be\n invalid in v4.]","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentageLocalOrigin":{"title":"enforcing_failure_percentage_local_origin","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n local-origin failure percentage statistics. This setting can be used to disable ejection or to\n ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageMinimumHosts":{"title":"failure_percentage_minimum_hosts","description":"The minimum number of hosts in a cluster in order to perform failure percentage-based ejection.\n If the total number of hosts in the cluster is less than this value, failure percentage-based\n ejection will not be performed. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageRequestVolume":{"title":"failure_percentage_request_volume","description":"The minimum number of total requests that must be collected in one interval (as defined by the\n interval duration above) to perform failure percentage-based ejection for this host. If the\n volume is lower than this setting, failure percentage-based ejection will not be performed for\n this host. Defaults to 50.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"maxEjectionTime":{"title":"max_ejection_time","description":"The maximum time that a host is ejected for. See :ref:`base_ejection_time`\n for more information. If not specified, the default value (300000ms or 300s) or\n :ref:`base_ejection_time` value is applied, whatever is larger.","type":"string","format":"duration"},"maxEjectionTimeJitter":{"title":"max_ejection_time_jitter","description":"The maximum amount of jitter to add to the ejection time, in order to prevent\n a 'thundering herd' effect where all proxies try to reconnect to host at the same time.\n See :ref:`max_ejection_time_jitter`\n Defaults to 0s.","type":"string","format":"duration"},"successfulActiveHealthCheckUnejectHost":{"title":"successful_active_health_check_uneject_host","description":"If active health checking is enabled and a host is ejected by outlier detection, a successful active health check\n unejects the host by default and considers it as healthy. Unejection also clears all the outlier detection counters.\n To change this default behavior set this config to ``false`` where active health checking will not uneject the host.\n Defaults to true.","type":"boolean"},"alwaysEjectOneHost":{"title":"always_eject_one_host","description":"If enabled, at least one host is ejected regardless of the value of :ref:`max_ejection_percent`.\n Defaults to false.","type":"boolean"}},"title":"OutlierDetection","additionalProperties":false},{"type":"null"}],"title":"outlier_detection","description":"Passive health checking via outlier detection for upstream hosts on\n this route."},"healthChecks":{"type":"array","items":{"type":"object","allOf":[{"properties":{"timeout":{"title":"timeout","description":"The time to wait for a health check response. If the timeout is reached the\n health check attempt will be considered a failure.","type":"string","format":"duration"},"interval":{"title":"interval","description":"The interval between health checks.","type":"string","format":"duration"},"initialJitter":{"title":"initial_jitter","description":"An optional jitter amount in milliseconds. If specified, Envoy will start health\n checking after for a random time in ms between 0 and initial_jitter. This only\n applies to the first health check.","type":"string","format":"duration"},"intervalJitter":{"title":"interval_jitter","description":"An optional jitter amount in milliseconds. If specified, during every\n interval Envoy will add interval_jitter to the wait time.","type":"string","format":"duration"},"intervalJitterPercent":{"type":"integer","title":"interval_jitter_percent","description":"An optional jitter amount as a percentage of interval_ms. If specified,\n during every interval Envoy will add ``interval_ms`` *\n ``interval_jitter_percent`` / 100 to the wait time.\n\n If interval_jitter_ms and interval_jitter_percent are both set, both of\n them will be used to increase the wait time."},"unhealthyThreshold":{"title":"unhealthy_threshold","description":"The number of unhealthy health checks required before a host is marked\n unhealthy. Note that for ``http`` health checking if a host responds with a code not in\n :ref:`expected_statuses `\n or :ref:`retriable_statuses `,\n this threshold is ignored and the host is considered immediately unhealthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"healthyThreshold":{"title":"healthy_threshold","description":"The number of healthy health checks required before a host is marked\n healthy. Note that during startup, only a single successful health check is\n required to mark a host healthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"altPort":{"title":"alt_port","description":"[#not-implemented-hide:] Non-serving port for health checking.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"reuseConnection":{"title":"reuse_connection","description":"Reuse health check connection between health checks. Default is true.","type":"boolean"},"noTrafficInterval":{"title":"no_traffic_interval","description":"The \"no traffic interval\" is a special health check interval that is used when a cluster has\n never had traffic routed to it. This lower interval allows cluster information to be kept up to\n date, without sending a potentially large amount of active health checking traffic for no\n reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined. Note that this interval takes precedence over\n any other.\n\n The default value for \"no traffic interval\" is 60 seconds.","type":"string","format":"duration"},"noTrafficHealthyInterval":{"title":"no_traffic_healthy_interval","description":"The \"no traffic healthy interval\" is a special health check interval that\n is used for hosts that are currently passing active health checking\n (including new hosts) when the cluster has received no traffic.\n\n This is useful for when we want to send frequent health checks with\n ``no_traffic_interval`` but then revert to lower frequency ``no_traffic_healthy_interval`` once\n a host in the cluster is marked as healthy.\n\n Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined.\n\n If no_traffic_healthy_interval is not set, it will default to the\n no traffic interval and send that interval regardless of health state.","type":"string","format":"duration"},"unhealthyInterval":{"title":"unhealthy_interval","description":"The \"unhealthy interval\" is a health check interval that is used for hosts that are marked as\n unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the\n standard health check interval that is defined.\n\n The default value for \"unhealthy interval\" is the same as \"interval\".","type":"string","format":"duration"},"unhealthyEdgeInterval":{"title":"unhealthy_edge_interval","description":"The \"unhealthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as unhealthy. For subsequent health checks\n Envoy will shift back to using either \"unhealthy interval\" if present or the standard health\n check interval that is defined.\n\n The default value for \"unhealthy edge interval\" is the same as \"unhealthy interval\".","type":"string","format":"duration"},"healthyEdgeInterval":{"title":"healthy_edge_interval","description":"The \"healthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as healthy. For subsequent health checks\n Envoy will shift back to using the standard health check interval that is defined.\n\n The default value for \"healthy edge interval\" is the same as the default interval.","type":"string","format":"duration"},"alwaysLogHealthCheckFailures":{"type":"boolean","title":"always_log_health_check_failures","description":"If set to true, health check failure events will always be logged. If set to false, only the\n initial health check failure event will be logged.\n The default value is false."},"alwaysLogHealthCheckSuccess":{"type":"boolean","title":"always_log_health_check_success","description":"If set to true, health check success events will always be logged. If set to false, only host addition event will be logged\n if it is the first successful health check, or if the healthy threshold is reached.\n The default value is false."},"transportSocketMatchCriteria":{"title":"transport_socket_match_criteria","description":"Optional key/value pairs that will be used to match a transport socket from those specified in the cluster's\n :ref:`tranport socket matches `.\n For example, the following match criteria\n\n .. code-block:: yaml\n\n transport_socket_match_criteria:\n useMTLS: true\n\n Will match the following :ref:`cluster socket match `\n\n .. code-block:: yaml\n\n transport_socket_matches:\n - name: \"useMTLS\"\n match:\n useMTLS: true\n transport_socket:\n name: envoy.transport_sockets.tls\n config: { ... } # tls socket configuration\n\n If this field is set, then for health checks it will supersede an entry of ``envoy.transport_socket`` in the\n :ref:`LbEndpoint.Metadata `.\n This allows using different transport socket capabilities for health checking versus proxying to the\n endpoint.\n\n If the key/values pairs specified do not match any\n :ref:`transport socket matches `,\n the cluster's :ref:`transport socket `\n will be used for health check socket configuration.","type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"}}}},{"oneOf":[{"type":"object","properties":{"grpcHealthCheck":{"title":"grpc_health_check","description":"gRPC health check.","type":"object","properties":{"serviceName":{"type":"string","title":"service_name","description":"An optional service name parameter which will be sent to gRPC service in\n `grpc.health.v1.HealthCheckRequest\n `_.\n message. See `gRPC health-checking overview\n `_ for\n more information."},"authority":{"type":"string","title":"authority","description":"The value of the :authority header in the gRPC health check request. If\n left empty (default value), the name of the cluster this health check is\n associated with will be used. The authority header can be customized for\n a specific endpoint by setting the :ref:`hostname\n `\n field."}},"additionalProperties":false}},"title":"grpc_health_check","required":["grpcHealthCheck"]},{"type":"object","properties":{"httpHealthCheck":{"title":"http_health_check","description":"HTTP health check.","type":"object","properties":{"host":{"type":"string","title":"host","description":"The value of the host header in the HTTP health check request. If\n left empty (default value), the name of the cluster this health check is associated\n with will be used. The host header can be customized for a specific endpoint by setting the\n :ref:`hostname ` field."},"path":{"type":"string","title":"path","description":"Specifies the HTTP path that will be requested during health checking. For example\n ``/healthcheck``."},"send":{"title":"send","description":"HTTP specific payload to be sent as the request body during health checking.\n If specified, the method should support a request body (POST, PUT, PATCH, etc.).","type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"additionalProperties":false},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"Specifies a list of HTTP expected responses to match in the first ``response_buffer_size`` bytes of the response body.\n If it is set, both the expected response check and status code determine the health check.\n When checking the response, “fuzzy” matching is performed such that each payload block must be found,\n and in the order specified, but not necessarily contiguous.\n\n .. note::\n\n It is recommended to set ``response_buffer_size`` based on the total Payload size for efficiency.\n The default buffer size is 1024 bytes when it is not set."},"responseBufferSize":{"title":"response_buffer_size","description":"Specifies the size of response buffer in bytes that is used to Payload match.\n The default value is 1024. Setting to 0 implies that the Payload will be matched against the entire response.","type":"object","properties":{"value":{"type":["integer","string"],"title":"value","format":"int64","description":"The uint64 value."}},"additionalProperties":false},"requestHeadersToRemove":{"type":"array","items":{"type":"string"},"title":"request_headers_to_remove","description":"Specifies a list of HTTP headers that should be removed from each request that is sent to the\n health checked cluster."},"expectedStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"expected_statuses","description":"Specifies a list of HTTP response statuses considered healthy. If provided, replaces default\n 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open\n semantics of :ref:`Int64Range `. The start and end of each\n range are required. Only statuses in the range [100, 600) are allowed."},"retriableStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"retriable_statuses","description":"Specifies a list of HTTP response statuses considered retriable. If provided, responses in this range\n will count towards the configured :ref:`unhealthy_threshold `,\n but will not result in the host being considered immediately unhealthy. Ranges follow half-open semantics of\n :ref:`Int64Range `. The start and end of each range are required.\n Only statuses in the range [100, 600) are allowed. The :ref:`expected_statuses `\n field takes precedence for any range overlaps with this field i.e. if status code 200 is both retriable and expected, a 200 response will\n be considered a successful health check. By default all responses not in\n :ref:`expected_statuses ` will result in\n the host being considered immediately unhealthy i.e. if status code 200 is expected and there are no configured retriable statuses, any\n non-200 response will result in the host being marked unhealthy."},"codecClientType":{"title":"codec_client_type","description":"Use specified application protocol for health checks.","type":"string","enum":["HTTP1","HTTP2","HTTP3"]}},"additionalProperties":false}},"title":"http_health_check","required":["httpHealthCheck"]},{"type":"object","properties":{"tcpHealthCheck":{"title":"tcp_health_check","description":"TCP health check.","type":"object","properties":{"send":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"When checking the response, “fuzzy” matching is performed such that each\n payload block must be found, and in the order specified, but not\n necessarily contiguous."}},"additionalProperties":false}},"title":"tcp_health_check","required":["tcpHealthCheck"]}]}],"title":"HealthCheck","additionalProperties":false,"description":"[#next-free-field: 27]"},"title":"health_checks","description":"Active health checks to run against upstream hosts for this route."},"loadBalancingPolicy":{"oneOf":[{"type":"string","title":"LoadBalancingPolicy","enum":["LOAD_BALANCING_POLICY_UNSPECIFIED","LOAD_BALANCING_POLICY_ROUND_ROBIN","LOAD_BALANCING_POLICY_MAGLEV","LOAD_BALANCING_POLICY_RANDOM","LOAD_BALANCING_POLICY_RING_HASH","LOAD_BALANCING_POLICY_LEAST_REQUEST"],"description":"LoadBalancingPolicy defines the strategy used to balance requests across\n upstream endpoints"},{"type":"null"}],"title":"load_balancing_policy","description":"The load balancing algorithm for upstream endpoints. Options:\n ROUND_ROBIN, RING_HASH, LEAST_REQUEST, RANDOM, MAGLEV."},"healthyPanicThreshold":{"type":["integer","null"],"title":"healthy_panic_threshold","format":"int32","description":"If the percentage of healthy upstream hosts drops below this value,\n traffic will be sent to all hosts regardless of health status."},"allowUpgrades":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"allow_upgrades","description":"Allows HTTP upgrade requests to be forwarded upstream."},"sessionRecording":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Toggle to enable/disable recording for this route."}},"title":"SessionRecording","additionalProperties":false,"description":"SessionRecording defines session recording settings for routes."},{"type":"null"}],"title":"session_recording","description":"Configures session recording behaviour on this route.\n SSH specific."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"enforcedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_policies","description":"Policies that are automatically enforced.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_policies","description":"Info about policies assigned to this route.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the route.","readOnly":true}},"additionalProperties":false}},"title":"CreateRouteRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-route.StatusCodes.json b/content/docs/api/pomerium-config-config-service-create-route.StatusCodes.json new file mode 100644 index 000000000..585a432da --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-route.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"route":{"title":"route","description":"The newly created route, including any server-assigned fields.","type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The id of the route."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"The namespace id of the route."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"The originator id of the route."},"name":{"type":["string","null"],"title":"name","description":"The name of the route."},"statName":{"type":["string","null"],"title":"stat_name","description":"The name used for stats telemetry with the route."},"description":{"type":["string","null"],"title":"description","description":"A human-readable description of the route."},"logoUrl":{"type":["string","null"],"title":"logo_url","description":"A URL for a logo for the route."},"from":{"type":"string","title":"from","description":"The externally accessible URL for a proxied HTTP request."},"to":{"type":"array","items":{"type":"string"},"title":"to","description":"The destination(s) of a proxied request."},"redirect":{"title":"redirect","description":"Indicates that a route should be redirected.","type":"object","properties":{"httpsRedirect":{"type":["boolean","null"],"title":"https_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n \"https\"."},"schemeRedirect":{"type":["string","null"],"title":"scheme_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n the given value."},"hostRedirect":{"type":["string","null"],"title":"host_redirect","description":"Indicates that the incoming host of a request will be swapped with\n the given value."},"portRedirect":{"type":["integer","null"],"title":"port_redirect","description":"Indicates that the incoming port of a request will be swapped with\n the given value."},"pathRedirect":{"type":["string","null"],"title":"path_redirect","description":"Indicates that the incoming path portion of a request URL will be\n swapped with the given value."},"prefixRewrite":{"type":["string","null"],"title":"prefix_rewrite","description":"Indicates that the incoming matched path prefix portion of a request\n URL will be swapped with the given value."},"responseCode":{"type":["integer","null"],"title":"response_code","format":"int32","description":"The response code used for the redirect. Defaults to 301."},"stripQuery":{"type":["boolean","null"],"title":"strip_query","description":"Indicates that during redirection, the query portion of the URL will\n be removed. Defaults to false."}},"additionalProperties":false},"response":{"title":"response","description":"Indicates that a route should return a direct response.","type":"object","properties":{"status":{"type":"integer","title":"status","description":"The status code that Pomerium returns for a static HTTP response.\n For example, 200."},"body":{"type":"string","title":"body","description":"The response body that Pomerium returns for a static HTTP\n response."}},"additionalProperties":false},"loadBalancingWeights":{"type":"array","items":{"type":"integer"},"title":"load_balancing_weights","description":"Optional load balancing weights for upstream servers defined in to.\n If not specified, all upstream servers are assigned the same weight.\n If provided, len(to) must equal len(load_balancing_weights)."},"allowedUsers":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_users","description":"Grants access to the route if the logged-in user's ID matches one of the\n given values. Deprecated in favor of the PPL user criterion.","deprecated":true},"allowedDomains":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_domains","description":"Grants access to the route if the logged-in user's email address is for\n one of the given values. Deprecated in favor of the PPL domain criterion.","deprecated":true},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access to the route if the logged-in user's session/user claims\n match one of the given values. Deprecated in favor of the PPL claim\n criterion.","deprecated":true},"prefix":{"type":"string","title":"prefix","description":"Only match requests that have a path that begins with the given prefix."},"path":{"type":"string","title":"path","description":"Only match requests whose path is an exact match for the given path."},"regex":{"type":"string","title":"regex","description":"Only match requests whose path matches the given regular expression."},"prefixRewrite":{"type":"string","title":"prefix_rewrite","description":"Indicates that when a request is forwarded, the matched prefix (or path)\n will be swapped with this value."},"regexRewritePattern":{"type":"string","title":"regex_rewrite_pattern","description":"A regular expression used to rewrite the path of a forwarded request."},"regexRewriteSubstitution":{"type":"string","title":"regex_rewrite_substitution","description":"When a regular expression pattern is set, what the matched pattern will\n be replaced with."},"regexPriorityOrder":{"type":["integer","string","null"],"title":"regex_priority_order","format":"int64","description":"Determines the ordering of routes that use regular expressions."},"corsAllowPreflight":{"type":"boolean","title":"cors_allow_preflight","description":"Indicates that OPTIONS requests used for CORS can pass through\n unauthenticated."},"allowPublicUnauthenticatedAccess":{"type":"boolean","title":"allow_public_unauthenticated_access","description":"Grants access to a route without requiring any authentication."},"allowAnyAuthenticatedUser":{"type":"boolean","title":"allow_any_authenticated_user","description":"Grants access to a route for any logged-in user."},"timeout":{"title":"timeout","description":"The per-route request timeout option. Cannot exceed global values.","type":"string","format":"duration"},"idleTimeout":{"title":"idle_timeout","description":"The per-route request timeout for a connection that is idle with\n no data exchange.","type":"string","format":"duration"},"allowWebsockets":{"type":"boolean","title":"allow_websockets","description":"Allow websocket requests. Also disables the default route timeout."},"allowSpdy":{"type":"boolean","title":"allow_spdy","description":"Allow SPDY protocol upgrade requests."},"tlsSkipVerify":{"type":"boolean","title":"tls_skip_verify","description":"Indicates that pomerium should perform no verification on upstream\n TLS connections. Any certificate for any hostname will be accepted."},"tlsServerName":{"type":"string","title":"tls_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence.","deprecated":true},"tlsUpstreamServerName":{"type":"string","title":"tls_upstream_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence."},"tlsDownstreamServerName":{"type":"string","title":"tls_downstream_server_name","description":"The server name indication (SNI) for downstream TLS connections."},"tlsCustomCa":{"type":"string","title":"tls_custom_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates of upstream TLS connections."},"tlsCustomCaFile":{"type":"string","title":"tls_custom_ca_file","description":"A file containing root certificate authorities (in PEM format)\n used to verify certificates of upstream TLS connections."},"tlsCustomCaKeyPairId":{"type":["string","null"],"title":"tls_custom_ca_key_pair_id","description":"A reference to a key pair containing root certificate authorities (in PEM\n format) used to verify certificates of upstream TLS connections."},"tlsClientCert":{"type":"string","title":"tls_client_cert","description":"The client certificate to present to upstream TLS connections for\n mTLS."},"tlsClientKey":{"type":"string","title":"tls_client_key","description":"The private key for the client certificate to present to upstream\n TLS connections for mTLS."},"tlsClientCertFile":{"type":"string","title":"tls_client_cert_file","description":"A file containing the client certificate to present to upstream TLS\n connections for mTLS."},"tlsClientKeyFile":{"type":"string","title":"tls_client_key_file","description":"A file containing the private key for the client certificate to\n present to upstream TLS connections for mTLS."},"tlsClientKeyPairId":{"type":["string","null"],"title":"tls_client_key_pair_id","description":"A reference to the key pair containing the client certificate\n and private key to present to upstream TLS connections for mTLS."},"tlsDownstreamClientCa":{"type":"string","title":"tls_downstream_client_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaFile":{"type":"string","title":"tls_downstream_client_ca_file","description":"A file containing the root certificate authorities (in PEM format) used to\n verify certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaKeyPairId":{"type":["string","null"],"title":"tls_downstream_client_ca_key_pair_id","description":"A reference to a key pair containing the root certificate authorities (in\n PEM format) used to verify certificates for downstream TLS connections. If\n specified downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsUpstreamAllowRenegotiation":{"type":"boolean","title":"tls_upstream_allow_renegotiation","description":"Controls whether server-initiated TLS renegotiation is allowed for\n upstream servers."},"setRequestHeaders":{"type":"object","title":"set_request_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set both static and dynamic headers for upstream requests.\n Static values can be useful if you want to pass along additional\n information to upstream applications as headers, or to set a fixed\n authentication header on the request. Dynamic values enable you to pass\n ID and Access tokens from your identity provider to upstream\n applications. The following dynamic header values are supported:\n\n - ${pomerium.access_token}: OAuth access token from the identity provider.\n - ${pomerium.client_cert_fingerprint}: Short-form SHA-256 fingerprint of the presented client certificate.\n - ${pomerium.id_token}: OIDC ID token from the identity provider.\n - ${pomerium.jwt}: The Pomerium assertion JWT for the logged-in user."},"removeRequestHeaders":{"type":"array","items":{"type":"string"},"title":"remove_request_headers","description":"Headers to remove from upstream requests. This can be useful if you want to\n prevent privacy information from being passed to upstream applications."},"setResponseHeaders":{"type":"object","title":"set_response_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set static values for the given downstream response headers.\n These headers will take precedence over the global set_response_headers."},"rewriteResponseHeaders":{"type":"array","items":{"type":"object","allOf":[{"properties":{"header":{"type":"string","title":"header","description":"The name of the response header to rewrite (case-insensitive)."},"value":{"type":"string","title":"value","description":"The new value (or replacement substring, when `prefix` is set) to write\n back to the header."}}},{"oneOf":[{"type":"object","properties":{"prefix":{"type":"string","title":"prefix","description":"Only the portion of the header value that begins with this literal\n prefix is replaced; the remainder is kept."}},"title":"prefix","required":["prefix"]}]}],"title":"RouteRewriteHeader","additionalProperties":false,"description":"A rewrite rule applied to a single response header before the response is\n returned to the downstream client."},"title":"rewrite_response_headers","description":"Used to modify downstream response headers."},"preserveHostHeader":{"type":"boolean","title":"preserve_host_header","description":"Passes the Host (or :authority) header from the incoming request to the\n upstream service, instead of the Host header from the route's to URL."},"passIdentityHeaders":{"type":["boolean","null"],"title":"pass_identity_headers","description":"Sends identity headers to all upstream applications. Identity headers\n include:\n\n - X-Pomerium-Jwt-Assertion: The pomerium assertion JWT for the logged-in user.\n - X-Pomerium-Claim-*: Each of the claim values specified by the jwt_claim_headers option.\n\n When not set explicitly, the global pass_identity_headers option will be used."},"kubernetesServiceAccountToken":{"type":"string","title":"kubernetes_service_account_token","description":"A Kubernetes service account token used to authenticate to the\n Kubernetes API via Authorization: Bearer and Impersonate-User/Group\n headers."},"kubernetesServiceAccountTokenFile":{"type":"string","title":"kubernetes_service_account_token_file","description":"A file containing a Kubernetes service account token."},"kubernetesServiceAccountTokenKeyPairId":{"type":["string","null"],"title":"kubernetes_service_account_token_key_pair_id","description":"A key pair reference for a Kubernetes service account token."},"enableGoogleCloudServerlessAuthentication":{"type":"boolean","title":"enable_google_cloud_serverless_authentication","description":"Adds an Authorization: Bearer ID_TOKEN header for Google Cloud\n serverless upstream requests."},"jwtIssuerFormat":{"oneOf":[{"type":"string","title":"IssuerFormat","enum":["IssuerHostOnly","IssuerURI"],"description":"Format used for the `iss` claim of JWTs Pomerium issues for upstream\n requests."},{"type":"null"}],"title":"jwt_issuer_format","description":"Controls the format of the iss claim in JWTs passed to upstream\n services by this route."},"jwtGroupsFilter":{"type":"array","items":{"type":"string"},"title":"jwt_groups_filter","description":"Allowlist of group names or IDs to include in the Pomerium JWT for\n this route."},"jwtGroupsFilterInferFromPpl":{"type":["boolean","null"],"title":"jwt_groups_filter_infer_from_ppl","description":"Whether to add JWT groups from any PPL policies.\n Not supported in the open source version of Pomerium."},"bearerTokenFormat":{"oneOf":[{"type":"string","title":"BearerTokenFormat","enum":["BEARER_TOKEN_FORMAT_UNKNOWN","BEARER_TOKEN_FORMAT_DEFAULT","BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN","BEARER_TOKEN_FORMAT_IDP_IDENTITY_TOKEN"],"description":"Controls how HTTP bearer token authentication is handled."},{"type":"null"}],"title":"bearer_token_format","description":"Controls how authorization bearer tokens are interpreted for this\n route. When unset, the global bearer_token_format option is used."},"dependsOn":{"type":"array","items":{"type":"string"},"title":"depends_on","description":"Additional hosts that participate in chained login redirects for\n this route. Up to five hosts are supported."},"policies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"title":"Policy","additionalProperties":false,"description":"Configuration for a policy."},"title":"policies","description":"Structured sub-policies attached to this route."},"pplPolicies":{"type":"array","items":{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},"title":"ppl_policies","description":"PPL policies attached to this route."},"policyIds":{"type":"array","items":{"type":"string"},"title":"policy_ids","description":"IDs of policies assigned to this route."},"hostRewrite":{"type":["string","null"],"title":"host_rewrite","description":"Rewrites the Host or :authority header to a fixed value."},"hostRewriteHeader":{"type":["string","null"],"title":"host_rewrite_header","description":"Rewrites the Host or :authority header using the value of another\n request header."},"hostPathRegexRewritePattern":{"type":["string","null"],"title":"host_path_regex_rewrite_pattern","description":"A regular expression used to rewrite the Host or :authority header\n from the request path."},"hostPathRegexRewriteSubstitution":{"type":["string","null"],"title":"host_path_regex_rewrite_substitution","description":"When host_path_regex_rewrite_pattern is set, what the matched\n pattern will be replaced with to produce the Host header."},"idpClientId":{"type":["string","null"],"title":"idp_client_id","description":"Overrides the global identity provider client ID for this route."},"idpClientSecret":{"type":["string","null"],"title":"idp_client_secret","description":"Overrides the global identity provider client secret for this route."},"idpAccessTokenAllowedAudiences":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"idp_access_token_allowed_audiences","description":"Allowed audiences for validating IdP-issued access tokens for this\n route."},"showErrorDetails":{"type":"boolean","title":"show_error_details","description":"If true, include policy explanation and remediation details in\n authorization error responses."},"mcp":{"oneOf":[{"type":"object","oneOf":[{"type":"object","properties":{"client":{"title":"client","description":"Provides an application with external tokens for MCP server access.","type":"object","additionalProperties":false}},"title":"client","required":["client"]},{"type":"object","properties":{"server":{"title":"server","description":"Indicates that this route fronts an MCP server.","type":"object","properties":{"upstreamOauth2":{"oneOf":[{"type":"object","properties":{"clientId":{"type":"string","title":"client_id","description":"The public identifier for an application."},"clientSecret":{"type":"string","title":"client_secret","description":"The secret known only to the application and the authorization server."},"oauth2Endpoint":{"title":"oauth2_endpoint","description":"The OAuth2 endpoint configuration.","type":"object","properties":{"authUrl":{"type":"string","title":"auth_url","description":"The authorization URL."},"tokenUrl":{"type":"string","title":"token_url","description":"The token URL."},"authStyle":{"oneOf":[{"type":"string","title":"OAuth2AuthStyle","enum":["OAUTH2_AUTH_STYLE_UNSPECIFIED","OAUTH2_AUTH_STYLE_IN_PARAMS","OAUTH2_AUTH_STYLE_IN_HEADER"],"description":"How the OAuth2 client identifies itself to the authorization server when\n fetching tokens."},{"type":"null"}],"title":"auth_style","description":"if unset, auto-detect which authentication\n style the provider wants by trying both ways and caching\n the successful way for the future."}},"additionalProperties":false},"scopes":{"type":"array","items":{"type":"string"},"title":"scopes","description":"Scope to control what data the OAuth2 server returns."},"authorizationUrlParams":{"type":"object","title":"authorization_url_params","additionalProperties":{"type":"string","title":"value"},"description":"Additional parameters to add to authorization requests."}},"title":"UpstreamOAuth2","additionalProperties":false,"description":"Configuration for OAuth2 authorization for an upstream service behind\n Pomerium."},{"type":"null"}],"title":"upstream_oauth2","description":"Specifies that before the request reaches the MCP upstream server,\n it should acquire an OAuth2 token."},"maxRequestBytes":{"type":["integer","null"],"title":"max_request_bytes","description":"The maximum request body size in bytes that can be sent to the MCP\n server (default: 4KiB)."},"path":{"type":["string","null"],"title":"path","description":"The path to append to the URL when returning the server URL in the\n .mcp/routes endpoint. Defaults to \"/\"."},"authorizationServerUrl":{"type":["string","null"],"title":"authorization_server_url","description":"The issuer URL of the upstream authorization server. Used as a fallback\n when PRM (RFC 9728) discovery fails, per the MCP spec's \"abort or use\n pre-configured values\" guidance."}},"additionalProperties":false}},"title":"server","required":["server"]}],"title":"MCP","additionalProperties":false,"description":"Configuration for an MCP route."},{"type":"null"}],"title":"mcp","description":"Model Context Protocol configuration for this route. Requires the\n runtime_flags.mcp feature flag."},"circuitBreakerThresholds":{"oneOf":[{"type":"object","properties":{"maxConnections":{"type":["integer","null"],"title":"max_connections","description":"The maximum number of connections that Envoy will make to the upstream\n cluster. If not specified, the default is 1024."},"maxPendingRequests":{"type":["integer","null"],"title":"max_pending_requests","description":"The maximum number of pending requests that Envoy will allow to the\n upstream cluster. If not specified, the default is 1024. This limit is\n applied as a connection limit for non-HTTP traffic."},"maxRequests":{"type":["integer","null"],"title":"max_requests","description":"The maximum number of parallel requests that Envoy will make to the\n upstream cluster. If not specified, the default is 1024. This limit does\n not apply to non-HTTP traffic."},"maxRetries":{"type":["integer","null"],"title":"max_retries","description":"The maximum number of parallel retries that Envoy will allow to the\n upstream cluster. If not specified, the default is 3."},"maxConnectionPools":{"type":["integer","null"],"title":"max_connection_pools","description":"The maximum number of connection pools per cluster that Envoy will\n concurrently support at once. If not specified, the default is unlimited.\n Set this for clusters which create a large number of connection pools."}},"title":"CircuitBreakerThresholds","additionalProperties":false,"description":"CircuitBreakerThresholds defines CircuitBreaker settings."},{"type":"null"}],"title":"circuit_breaker_thresholds","description":"Circuit breaker thresholds for upstream requests on this route."},"upstreamTunnel":{"oneOf":[{"type":"object","properties":{"sshPolicy":{"oneOf":[{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},{"type":"null"}],"title":"ssh_policy","description":"PPL policy enforced before the SSH tunnel is opened to the upstream."},"sshPolicyRego":{"type":"array","items":{"type":"string"},"title":"ssh_policy_rego","description":"Rego rules evaluated before the SSH tunnel is opened to the upstream."},"sshPolicyId":{"type":["string","null"],"title":"ssh_policy_id","description":"ID of a shared policy whose rules also gate this SSH tunnel."}},"title":"UpstreamTunnel","additionalProperties":false,"description":"Configuration for an upstream tunnel. Applies to routes whose upstream is\n reached through Pomerium's SSH proxy."},{"type":"null"}],"title":"upstream_tunnel","description":"Configuration for reverse tunneling to upstreams for this route."},"outlierDetection":{"oneOf":[{"type":"object","properties":{"consecutive5xx":{"title":"consecutive_5xx","description":"The number of consecutive server-side error responses (for HTTP traffic,\n 5xx responses; for TCP traffic, connection failures; for Redis, failure to\n respond PONG; etc.) before a consecutive 5xx ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"interval":{"title":"interval","description":"The time interval between ejection analysis sweeps. This can result in\n both new ejections as well as hosts being returned to service. Defaults\n to 10000ms or 10s.","type":"string","format":"duration"},"baseEjectionTime":{"title":"base_ejection_time","description":"The base time that a host is ejected for. The real time is equal to the\n base time multiplied by the number of times the host has been ejected and is\n capped by :ref:`max_ejection_time`.\n Defaults to 30000ms or 30s.","type":"string","format":"duration"},"maxEjectionPercent":{"title":"max_ejection_percent","description":"The maximum % of an upstream cluster that can be ejected due to outlier detection. Defaults to 10% .\n Will eject at least one host regardless of the value if :ref:`always_eject_one_host` is enabled.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutive5xx":{"title":"enforcing_consecutive_5xx","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive 5xx. This setting can be used to disable\n ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingSuccessRate":{"title":"enforcing_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics. This setting can be used to\n disable ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateMinimumHosts":{"title":"success_rate_minimum_hosts","description":"The number of hosts in a cluster that must have enough request volume to\n detect success rate outliers. If the number of hosts is less than this\n setting, outlier detection via success rate statistics is not performed\n for any host in the cluster. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateRequestVolume":{"title":"success_rate_request_volume","description":"The minimum number of total requests that must be collected in one\n interval (as defined by the interval duration above) to include this host\n in success rate based outlier detection. If the volume is lower than this\n setting, outlier detection via success rate statistics is not performed\n for that host. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateStdevFactor":{"title":"success_rate_stdev_factor","description":"This factor is used to determine the ejection threshold for success rate\n outlier ejection. The ejection threshold is the difference between the\n mean success rate, and the product of this factor and the standard\n deviation of the mean success rate: mean - (stdev *\n success_rate_stdev_factor). This factor is divided by a thousand to get a\n double. That is, if the desired factor is 1.9, the runtime value should\n be 1900. Defaults to 1900.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"consecutiveGatewayFailure":{"title":"consecutive_gateway_failure","description":"The number of consecutive gateway failures (502, 503, 504 status codes)\n before a consecutive gateway failure ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveGatewayFailure":{"title":"enforcing_consecutive_gateway_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive gateway failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"splitExternalLocalOriginErrors":{"type":"boolean","title":"split_external_local_origin_errors","description":"Determines whether to distinguish local origin failures from external errors. If set to true\n the following configuration parameters are taken into account:\n :ref:`consecutive_local_origin_failure`,\n :ref:`enforcing_consecutive_local_origin_failure`\n and\n :ref:`enforcing_local_origin_success_rate`.\n Defaults to false."},"consecutiveLocalOriginFailure":{"title":"consecutive_local_origin_failure","description":"The number of consecutive locally originated failures before ejection\n occurs. Defaults to 5. Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveLocalOriginFailure":{"title":"enforcing_consecutive_local_origin_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive locally originated failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingLocalOriginSuccessRate":{"title":"enforcing_local_origin_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics for locally originated errors.\n This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageThreshold":{"title":"failure_percentage_threshold","description":"The failure percentage to use when determining failure percentage-based outlier detection. If\n the failure percentage of a given host is greater than or equal to this value, it will be\n ejected. Defaults to 85.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentage":{"title":"enforcing_failure_percentage","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n failure percentage statistics. This setting can be used to disable ejection or to ramp it up\n slowly. Defaults to 0.\n\n [#next-major-version: setting this without setting failure_percentage_threshold should be\n invalid in v4.]","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentageLocalOrigin":{"title":"enforcing_failure_percentage_local_origin","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n local-origin failure percentage statistics. This setting can be used to disable ejection or to\n ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageMinimumHosts":{"title":"failure_percentage_minimum_hosts","description":"The minimum number of hosts in a cluster in order to perform failure percentage-based ejection.\n If the total number of hosts in the cluster is less than this value, failure percentage-based\n ejection will not be performed. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageRequestVolume":{"title":"failure_percentage_request_volume","description":"The minimum number of total requests that must be collected in one interval (as defined by the\n interval duration above) to perform failure percentage-based ejection for this host. If the\n volume is lower than this setting, failure percentage-based ejection will not be performed for\n this host. Defaults to 50.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"maxEjectionTime":{"title":"max_ejection_time","description":"The maximum time that a host is ejected for. See :ref:`base_ejection_time`\n for more information. If not specified, the default value (300000ms or 300s) or\n :ref:`base_ejection_time` value is applied, whatever is larger.","type":"string","format":"duration"},"maxEjectionTimeJitter":{"title":"max_ejection_time_jitter","description":"The maximum amount of jitter to add to the ejection time, in order to prevent\n a 'thundering herd' effect where all proxies try to reconnect to host at the same time.\n See :ref:`max_ejection_time_jitter`\n Defaults to 0s.","type":"string","format":"duration"},"successfulActiveHealthCheckUnejectHost":{"title":"successful_active_health_check_uneject_host","description":"If active health checking is enabled and a host is ejected by outlier detection, a successful active health check\n unejects the host by default and considers it as healthy. Unejection also clears all the outlier detection counters.\n To change this default behavior set this config to ``false`` where active health checking will not uneject the host.\n Defaults to true.","type":"boolean"},"alwaysEjectOneHost":{"title":"always_eject_one_host","description":"If enabled, at least one host is ejected regardless of the value of :ref:`max_ejection_percent`.\n Defaults to false.","type":"boolean"}},"title":"OutlierDetection","additionalProperties":false},{"type":"null"}],"title":"outlier_detection","description":"Passive health checking via outlier detection for upstream hosts on\n this route."},"healthChecks":{"type":"array","items":{"type":"object","allOf":[{"properties":{"timeout":{"title":"timeout","description":"The time to wait for a health check response. If the timeout is reached the\n health check attempt will be considered a failure.","type":"string","format":"duration"},"interval":{"title":"interval","description":"The interval between health checks.","type":"string","format":"duration"},"initialJitter":{"title":"initial_jitter","description":"An optional jitter amount in milliseconds. If specified, Envoy will start health\n checking after for a random time in ms between 0 and initial_jitter. This only\n applies to the first health check.","type":"string","format":"duration"},"intervalJitter":{"title":"interval_jitter","description":"An optional jitter amount in milliseconds. If specified, during every\n interval Envoy will add interval_jitter to the wait time.","type":"string","format":"duration"},"intervalJitterPercent":{"type":"integer","title":"interval_jitter_percent","description":"An optional jitter amount as a percentage of interval_ms. If specified,\n during every interval Envoy will add ``interval_ms`` *\n ``interval_jitter_percent`` / 100 to the wait time.\n\n If interval_jitter_ms and interval_jitter_percent are both set, both of\n them will be used to increase the wait time."},"unhealthyThreshold":{"title":"unhealthy_threshold","description":"The number of unhealthy health checks required before a host is marked\n unhealthy. Note that for ``http`` health checking if a host responds with a code not in\n :ref:`expected_statuses `\n or :ref:`retriable_statuses `,\n this threshold is ignored and the host is considered immediately unhealthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"healthyThreshold":{"title":"healthy_threshold","description":"The number of healthy health checks required before a host is marked\n healthy. Note that during startup, only a single successful health check is\n required to mark a host healthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"altPort":{"title":"alt_port","description":"[#not-implemented-hide:] Non-serving port for health checking.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"reuseConnection":{"title":"reuse_connection","description":"Reuse health check connection between health checks. Default is true.","type":"boolean"},"noTrafficInterval":{"title":"no_traffic_interval","description":"The \"no traffic interval\" is a special health check interval that is used when a cluster has\n never had traffic routed to it. This lower interval allows cluster information to be kept up to\n date, without sending a potentially large amount of active health checking traffic for no\n reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined. Note that this interval takes precedence over\n any other.\n\n The default value for \"no traffic interval\" is 60 seconds.","type":"string","format":"duration"},"noTrafficHealthyInterval":{"title":"no_traffic_healthy_interval","description":"The \"no traffic healthy interval\" is a special health check interval that\n is used for hosts that are currently passing active health checking\n (including new hosts) when the cluster has received no traffic.\n\n This is useful for when we want to send frequent health checks with\n ``no_traffic_interval`` but then revert to lower frequency ``no_traffic_healthy_interval`` once\n a host in the cluster is marked as healthy.\n\n Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined.\n\n If no_traffic_healthy_interval is not set, it will default to the\n no traffic interval and send that interval regardless of health state.","type":"string","format":"duration"},"unhealthyInterval":{"title":"unhealthy_interval","description":"The \"unhealthy interval\" is a health check interval that is used for hosts that are marked as\n unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the\n standard health check interval that is defined.\n\n The default value for \"unhealthy interval\" is the same as \"interval\".","type":"string","format":"duration"},"unhealthyEdgeInterval":{"title":"unhealthy_edge_interval","description":"The \"unhealthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as unhealthy. For subsequent health checks\n Envoy will shift back to using either \"unhealthy interval\" if present or the standard health\n check interval that is defined.\n\n The default value for \"unhealthy edge interval\" is the same as \"unhealthy interval\".","type":"string","format":"duration"},"healthyEdgeInterval":{"title":"healthy_edge_interval","description":"The \"healthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as healthy. For subsequent health checks\n Envoy will shift back to using the standard health check interval that is defined.\n\n The default value for \"healthy edge interval\" is the same as the default interval.","type":"string","format":"duration"},"alwaysLogHealthCheckFailures":{"type":"boolean","title":"always_log_health_check_failures","description":"If set to true, health check failure events will always be logged. If set to false, only the\n initial health check failure event will be logged.\n The default value is false."},"alwaysLogHealthCheckSuccess":{"type":"boolean","title":"always_log_health_check_success","description":"If set to true, health check success events will always be logged. If set to false, only host addition event will be logged\n if it is the first successful health check, or if the healthy threshold is reached.\n The default value is false."},"transportSocketMatchCriteria":{"title":"transport_socket_match_criteria","description":"Optional key/value pairs that will be used to match a transport socket from those specified in the cluster's\n :ref:`tranport socket matches `.\n For example, the following match criteria\n\n .. code-block:: yaml\n\n transport_socket_match_criteria:\n useMTLS: true\n\n Will match the following :ref:`cluster socket match `\n\n .. code-block:: yaml\n\n transport_socket_matches:\n - name: \"useMTLS\"\n match:\n useMTLS: true\n transport_socket:\n name: envoy.transport_sockets.tls\n config: { ... } # tls socket configuration\n\n If this field is set, then for health checks it will supersede an entry of ``envoy.transport_socket`` in the\n :ref:`LbEndpoint.Metadata `.\n This allows using different transport socket capabilities for health checking versus proxying to the\n endpoint.\n\n If the key/values pairs specified do not match any\n :ref:`transport socket matches `,\n the cluster's :ref:`transport socket `\n will be used for health check socket configuration.","type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"}}}},{"oneOf":[{"type":"object","properties":{"grpcHealthCheck":{"title":"grpc_health_check","description":"gRPC health check.","type":"object","properties":{"serviceName":{"type":"string","title":"service_name","description":"An optional service name parameter which will be sent to gRPC service in\n `grpc.health.v1.HealthCheckRequest\n `_.\n message. See `gRPC health-checking overview\n `_ for\n more information."},"authority":{"type":"string","title":"authority","description":"The value of the :authority header in the gRPC health check request. If\n left empty (default value), the name of the cluster this health check is\n associated with will be used. The authority header can be customized for\n a specific endpoint by setting the :ref:`hostname\n `\n field."}},"additionalProperties":false}},"title":"grpc_health_check","required":["grpcHealthCheck"]},{"type":"object","properties":{"httpHealthCheck":{"title":"http_health_check","description":"HTTP health check.","type":"object","properties":{"host":{"type":"string","title":"host","description":"The value of the host header in the HTTP health check request. If\n left empty (default value), the name of the cluster this health check is associated\n with will be used. The host header can be customized for a specific endpoint by setting the\n :ref:`hostname ` field."},"path":{"type":"string","title":"path","description":"Specifies the HTTP path that will be requested during health checking. For example\n ``/healthcheck``."},"send":{"title":"send","description":"HTTP specific payload to be sent as the request body during health checking.\n If specified, the method should support a request body (POST, PUT, PATCH, etc.).","type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"additionalProperties":false},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"Specifies a list of HTTP expected responses to match in the first ``response_buffer_size`` bytes of the response body.\n If it is set, both the expected response check and status code determine the health check.\n When checking the response, “fuzzy” matching is performed such that each payload block must be found,\n and in the order specified, but not necessarily contiguous.\n\n .. note::\n\n It is recommended to set ``response_buffer_size`` based on the total Payload size for efficiency.\n The default buffer size is 1024 bytes when it is not set."},"responseBufferSize":{"title":"response_buffer_size","description":"Specifies the size of response buffer in bytes that is used to Payload match.\n The default value is 1024. Setting to 0 implies that the Payload will be matched against the entire response.","type":"object","properties":{"value":{"type":["integer","string"],"title":"value","format":"int64","description":"The uint64 value."}},"additionalProperties":false},"requestHeadersToRemove":{"type":"array","items":{"type":"string"},"title":"request_headers_to_remove","description":"Specifies a list of HTTP headers that should be removed from each request that is sent to the\n health checked cluster."},"expectedStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"expected_statuses","description":"Specifies a list of HTTP response statuses considered healthy. If provided, replaces default\n 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open\n semantics of :ref:`Int64Range `. The start and end of each\n range are required. Only statuses in the range [100, 600) are allowed."},"retriableStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"retriable_statuses","description":"Specifies a list of HTTP response statuses considered retriable. If provided, responses in this range\n will count towards the configured :ref:`unhealthy_threshold `,\n but will not result in the host being considered immediately unhealthy. Ranges follow half-open semantics of\n :ref:`Int64Range `. The start and end of each range are required.\n Only statuses in the range [100, 600) are allowed. The :ref:`expected_statuses `\n field takes precedence for any range overlaps with this field i.e. if status code 200 is both retriable and expected, a 200 response will\n be considered a successful health check. By default all responses not in\n :ref:`expected_statuses ` will result in\n the host being considered immediately unhealthy i.e. if status code 200 is expected and there are no configured retriable statuses, any\n non-200 response will result in the host being marked unhealthy."},"codecClientType":{"title":"codec_client_type","description":"Use specified application protocol for health checks.","type":"string","enum":["HTTP1","HTTP2","HTTP3"]}},"additionalProperties":false}},"title":"http_health_check","required":["httpHealthCheck"]},{"type":"object","properties":{"tcpHealthCheck":{"title":"tcp_health_check","description":"TCP health check.","type":"object","properties":{"send":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"When checking the response, “fuzzy” matching is performed such that each\n payload block must be found, and in the order specified, but not\n necessarily contiguous."}},"additionalProperties":false}},"title":"tcp_health_check","required":["tcpHealthCheck"]}]}],"title":"HealthCheck","additionalProperties":false,"description":"[#next-free-field: 27]"},"title":"health_checks","description":"Active health checks to run against upstream hosts for this route."},"loadBalancingPolicy":{"oneOf":[{"type":"string","title":"LoadBalancingPolicy","enum":["LOAD_BALANCING_POLICY_UNSPECIFIED","LOAD_BALANCING_POLICY_ROUND_ROBIN","LOAD_BALANCING_POLICY_MAGLEV","LOAD_BALANCING_POLICY_RANDOM","LOAD_BALANCING_POLICY_RING_HASH","LOAD_BALANCING_POLICY_LEAST_REQUEST"],"description":"LoadBalancingPolicy defines the strategy used to balance requests across\n upstream endpoints"},{"type":"null"}],"title":"load_balancing_policy","description":"The load balancing algorithm for upstream endpoints. Options:\n ROUND_ROBIN, RING_HASH, LEAST_REQUEST, RANDOM, MAGLEV."},"healthyPanicThreshold":{"type":["integer","null"],"title":"healthy_panic_threshold","format":"int32","description":"If the percentage of healthy upstream hosts drops below this value,\n traffic will be sent to all hosts regardless of health status."},"allowUpgrades":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"allow_upgrades","description":"Allows HTTP upgrade requests to be forwarded upstream."},"sessionRecording":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Toggle to enable/disable recording for this route."}},"title":"SessionRecording","additionalProperties":false,"description":"SessionRecording defines session recording settings for routes."},{"type":"null"}],"title":"session_recording","description":"Configures session recording behaviour on this route.\n SSH specific."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"enforcedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_policies","description":"Policies that are automatically enforced.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_policies","description":"Info about policies assigned to this route.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the route.","readOnly":true}},"additionalProperties":false}},"title":"CreateRouteResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-route.api.mdx b/content/docs/api/pomerium-config-config-service-create-route.api.mdx new file mode 100644 index 000000000..e1d030887 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-route.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-create-route +title: "CreateRoute" +description: "Creates a route" +sidebar_label: "CreateRoute" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Creates a route + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-service-account.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-create-service-account.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-service-account.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-service-account.RequestSchema.json b/content/docs/api/pomerium-config-config-service-create-service-account.RequestSchema.json new file mode 100644 index 000000000..1da038e3e --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-service-account.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"serviceAccount":{"title":"service_account","description":"The service account to create.","type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"ID of the service account."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"Namespace of the service account."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"Originator of the service account."},"description":{"type":["string","null"],"title":"description","description":"Description of the service account."},"userId":{"type":["string","null"],"title":"user_id","description":"User ID of the service account."},"expiresAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"expires_at","description":"When the service account expires."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"accessedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"}},"additionalProperties":false}},"title":"CreateServiceAccountRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-service-account.StatusCodes.json b/content/docs/api/pomerium-config-config-service-create-service-account.StatusCodes.json new file mode 100644 index 000000000..3ae7598b6 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-service-account.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"serviceAccount":{"title":"service_account","description":"The newly created service account, including any server-assigned fields.","type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"ID of the service account."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"Namespace of the service account."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"Originator of the service account."},"description":{"type":["string","null"],"title":"description","description":"Description of the service account."},"userId":{"type":["string","null"],"title":"user_id","description":"User ID of the service account."},"expiresAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"expires_at","description":"When the service account expires."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"accessedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"}},"additionalProperties":false},"jwt":{"type":"string","title":"jwt","description":"A signed JWT credential the holder uses to authenticate as the new\n service account. Issued only at creation time and never returned again."}},"title":"CreateServiceAccountResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-create-service-account.api.mdx b/content/docs/api/pomerium-config-config-service-create-service-account.api.mdx new file mode 100644 index 000000000..c81e9331a --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-create-service-account.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-create-service-account +title: "CreateServiceAccount" +description: "Creates a service account" +sidebar_label: "CreateServiceAccount" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Creates a service account + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-key-pair.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-delete-key-pair.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-key-pair.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-key-pair.RequestSchema.json b/content/docs/api/pomerium-config-config-service-delete-key-pair.RequestSchema.json new file mode 100644 index 000000000..6b825567b --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-key-pair.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"ID of the key pair to delete."}},"title":"DeleteKeyPairRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-key-pair.StatusCodes.json b/content/docs/api/pomerium-config-config-service-delete-key-pair.StatusCodes.json new file mode 100644 index 000000000..bb0807934 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-key-pair.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","title":"DeleteKeyPairResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-key-pair.api.mdx b/content/docs/api/pomerium-config-config-service-delete-key-pair.api.mdx new file mode 100644 index 000000000..a09e8eb6b --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-key-pair.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-delete-key-pair +title: "DeleteKeyPair" +description: "Deletes a key pair" +sidebar_label: "DeleteKeyPair" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Deletes a key pair + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-policy.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-delete-policy.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-policy.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-policy.RequestSchema.json b/content/docs/api/pomerium-config-config-service-delete-policy.RequestSchema.json new file mode 100644 index 000000000..b9f904e63 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-policy.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"ID of the policy to delete."}},"title":"DeletePolicyRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-policy.StatusCodes.json b/content/docs/api/pomerium-config-config-service-delete-policy.StatusCodes.json new file mode 100644 index 000000000..649727fea --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-policy.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","title":"DeletePolicyResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-policy.api.mdx b/content/docs/api/pomerium-config-config-service-delete-policy.api.mdx new file mode 100644 index 000000000..cef8a778e --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-policy.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-delete-policy +title: "DeletePolicy" +description: "Deletes a policy" +sidebar_label: "DeletePolicy" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Deletes a policy + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-route.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-delete-route.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-route.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-route.RequestSchema.json b/content/docs/api/pomerium-config-config-service-delete-route.RequestSchema.json new file mode 100644 index 000000000..51ef92697 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-route.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"ID of the route to delete."}},"title":"DeleteRouteRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-route.StatusCodes.json b/content/docs/api/pomerium-config-config-service-delete-route.StatusCodes.json new file mode 100644 index 000000000..8e1c984c1 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-route.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","title":"DeleteRouteResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-route.api.mdx b/content/docs/api/pomerium-config-config-service-delete-route.api.mdx new file mode 100644 index 000000000..129c77bfb --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-route.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-delete-route +title: "DeleteRoute" +description: "Deletes a route" +sidebar_label: "DeleteRoute" +hide_title: true +hide_table_of_contents: true +api: eJylV9tu5DYS/RWC+5AEkNUzs5eHforXcQADs4lhO3mIYbRLZEliQpEaXuzpbejfF0Wy3VLaN2z8YlssFk+dOlUs7niAzvP1Lb+yMSCv+GgHdCoOtbCmVV19ln5do3tQAvldxSV64dQYlDV8zX9AjQE9A+aKAzuiA1q9kHz9urs67346GhwMGNARoB03MCBf8zNrDIpwculssMLqk1/ReTq84ooQ9AgSHa+4wy9ROZR8HVzEinvR4wB8veNhO5InE4cmWQYV9Buu0cSBr28/PhNwqwyy0CN7yNbMtunf4o2NxRuvuLDGB77+OE3VUTw3akAbw8l//FEk70e+cPIi0JCtKqYMGzyfprvMFvrwbyu3dJCwJqAJ9CeMo1YipXD1uydfu2NEtvkdRaCkOUp4UOhpVcmZjQ9OmW6GWskjlBc/7OlL+mHBMplEUfNpOuycCeUqA+cVBykVuQF9OQPRgvY40ealINIHP1rjM9RPHz7QryWc6ygEep9T9/8R8izkfO6bmCeip4WowzG0c+es+yvAlpkSVuJzucKvMIwaU08wNmxaG42kui8VwQUYgRopldH8YexjrsQH0EpuwHVxIHQUCEitDG7wq0CUacPBYcVBOwS53eBX5QMxPqIblKeK2kg0Km1w6G10gpz0EH1IH1tQGuVmdCisyXSSv8a6vG5j2Nh248B0mFAqiohgpWVlAjoDOi3BAygNjSZDCQE22qb0RwMx9GgC8YvyuPHd9Mh8gBA9Iyor9tgr0TPf26gla5CBYUQZewAdkUR+21nbaazdKOozK/Hu6EPNp4oP6D10z+ZmieCUSXxATUk9aUEo0zEkjbDi4RiSMuzcdFr5vmanZsuif2HrbI+2ArT6L0oGRjKPJpAbKtg5/OvERC0xgNL+7pUl1irUsmLWzVw32+RRaIUmJBaK+YwFcA62lL6Ag39b33n1bQ5/ufrMQg+BgQieAd1knbYNaL1l0agvEZmSpINWoWOtdbmjbkfcNy6PTpU4Cn01+9E6Vippze7Jus6UwKh8LeywmjGUKvvCtPa+Zje98kx5So3MzTBQWZRGnot7fzDpdZ+M+ySz+8xuSpXy2UhRvIMyEOwB/73EJnbFPBGe9j9HWGvdAIGveaMMuO0RhVQI6QJtYnuQ3owU8KzZphnBSNaAx3/94wQNFY2keJH5EYVqlXhSX2KXeNgT/6SQROUcdoqDYFuDP7dpbnipIZ+a7YsNOE8Mf75AQ2o0pTSUyUwoa2pON+iCWYJQBLj9KV/0CcfiDiOox6fMqMonZe2zEbbaQuHoG/L2TUmvMjK1JT8TRZFOMfAp0wieRJs46qjIUwnn0jY2UHk71ERvHK1JW2ZXCtO2UyLfw+9n7cyaAMpQthm4RgUHbvtMjTDQ1nTsUYWeAfs+pTzVYXbXlOBeL7Sq7DfsADCHW4igkMqsdHV5tuDX1zNtiGxTJ4PN3oAUMx23DK18IEwFhM+4BTiXRbo8hdLnkpyNZVoNKjCbazZPdXNPy6FnP1Dub/73JyHtyNw5DNGZXEHF4Zr1IYx+vVqVsKkJUU+SVvhVZ1cpAL/6G5mdOBwdUt9PouBTHlMGDL3NA36axUYIPV/z1avz/mo573t0D/thPzpNE3DBtdv11odpOqqWy+Ke/YbOstPLC06dyym6wVPbp315dipjVJrBrcb6CRmMI0VxRwBEdCps+fr2ruI0QV0dpuLz3L73U+2+IU40QLSWPpf5n6/5w4f675/qf544UX+cqeoJbQb6Jx1dXiR5DmAgFeeTdaYuutJr8sgHIsVVHhF7W5pUFsx1KvSxSdkcDzY4gCIrH8fRuvD9LEsDRaSVQJpPDwecjiB6ZJ/zAvtUf3jPUYc/Gm2b1QDKrD5fnJ3/dH2elE1iGcDMzlkqYsHQ7FHyzDOzdPmAX8Nq1KAMxZEA7ooYb994y1aLw++qop1bvtvRLfWL09NEn79EdEUie6nRf1O1f7CRfqXytCDLLP9KKN9elWfJd+ylMP7A7euv03JZc07vyvcf/b7zFm/KxUlPduTv5IZcHSyOHiOHHadC4Bhetb2btZTLn69veMWb8jQd0kuFO3ikBwE85kBsii/VfPq24xpMF9PkzLNP+vkfWerznQ== +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Deletes a route + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-service-account.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-delete-service-account.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-service-account.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-service-account.RequestSchema.json b/content/docs/api/pomerium-config-config-service-delete-service-account.RequestSchema.json new file mode 100644 index 000000000..b2c9b2ef6 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-service-account.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"ID of the service account to delete."}},"title":"DeleteServiceAccountRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-service-account.StatusCodes.json b/content/docs/api/pomerium-config-config-service-delete-service-account.StatusCodes.json new file mode 100644 index 000000000..81836180a --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-service-account.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","title":"DeleteServiceAccountResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-delete-service-account.api.mdx b/content/docs/api/pomerium-config-config-service-delete-service-account.api.mdx new file mode 100644 index 000000000..90c42ffdf --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-delete-service-account.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-delete-service-account +title: "DeleteServiceAccount" +description: "Deletes a service account" +sidebar_label: "DeleteServiceAccount" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Deletes a service account + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-key-pair.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-get-key-pair.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-key-pair.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-key-pair.RequestSchema.json b/content/docs/api/pomerium-config-config-service-get-key-pair.RequestSchema.json new file mode 100644 index 000000000..9180ac14c --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-key-pair.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"ID of the key pair to fetch."}},"title":"GetKeyPairRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-key-pair.StatusCodes.json b/content/docs/api/pomerium-config-config-service-get-key-pair.StatusCodes.json new file mode 100644 index 000000000..33c12538f --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-key-pair.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"keyPair":{"title":"key_pair","description":"The requested key pair. Sensitive fields are stripped before return.","type":"object","properties":{"id":{"type":["string","null"],"examples":["019e8e96-0959-7dc2-b45f-e32dcafcf95b"],"title":"id","description":"ID of the key pair."},"namespaceId":{"type":["string","null"],"examples":["019e8e96-87b4-78b9-9830-19874b518d60"],"title":"namespace_id","description":"Namespace of the key pair."},"originatorId":{"type":["string","null"],"examples":["your-custom-app"],"title":"originator_id","description":"Originator of the key pair."},"name":{"type":["string","null"],"examples":["TLS Certificate for www.example.com"],"title":"name","description":"The name of the key pair."},"certificate":{"type":["string","null"],"examples":["-----BEGIN CERTIFICATE-----\nEXAMPLE\n-----END CERTIFICATE-----"],"title":"certificate","format":"byte","description":"The key pair certificate raw bytes."},"key":{"type":["string","null"],"examples":["-----BEGIN EC PRIVATE KEY-----\nEXAMPLE\n-----END EC PRIVATE KEY-----"],"title":"key","format":"byte","description":"The key pair private key raw bytes."},"createdAt":{"title":"created_at","description":"When the key pair was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the key pair was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"status":{"title":"status","description":"The status of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_STATUS_UNKNOWN","KEY_PAIR_STATUS_READY","KEY_PAIR_STATUS_PENDING"]},"origin":{"title":"origin","description":"The origin of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_ORIGIN_UNKNOWN","KEY_PAIR_ORIGIN_USER","KEY_PAIR_ORIGIN_SYSTEM"]},"certificateInfo":{"type":"array","items":{"type":"object","properties":{"version":{"type":["integer","string"],"title":"version","format":"int64","description":"X.509 certificate format version (3 for modern certificates)."},"serial":{"type":"string","title":"serial","description":"Certificate serial number, formatted as a decimal integer string."},"issuer":{"title":"issuer","description":"Issuer distinguished name (the CA that signed this certificate).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"subject":{"title":"subject","description":"Subject distinguished name (the identity the certificate vouches for).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"notBefore":{"title":"not_before","description":"First instant the certificate is valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"notAfter":{"title":"not_after","description":"First instant the certificate is no longer valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"keyUsage":{"title":"key_usage","description":"Decoded KeyUsage and ExtKeyUsage extensions on the certificate.","type":"object","properties":{"digitalSignature":{"type":"boolean","title":"digital_signature","description":"Certificate authorizes verifying digital signatures."},"contentCommitment":{"type":"boolean","title":"content_commitment","description":"Certificate authorizes non-repudiation of signed data."},"keyEncipherment":{"type":"boolean","title":"key_encipherment","description":"Certificate authorizes key transport (encryption of session keys)."},"dataEncipherment":{"type":"boolean","title":"data_encipherment","description":"Certificate authorizes direct encryption of arbitrary data."},"keyAgreement":{"type":"boolean","title":"key_agreement","description":"Certificate authorizes Diffie-Hellman style key agreement."},"certSign":{"type":"boolean","title":"cert_sign","description":"Certificate authorizes signing other certificates (CA)."},"crlSign":{"type":"boolean","title":"crl_sign","description":"Certificate authorizes signing certificate revocation lists."},"encipherOnly":{"type":"boolean","title":"encipher_only","description":"With key_agreement, restricts use to encipherment only."},"decipherOnly":{"type":"boolean","title":"decipher_only","description":"With key_agreement, restricts use to decipherment only."},"serverAuth":{"type":"boolean","title":"server_auth","description":"Extended usage: server authentication (TLS server certificates)."},"clientAuth":{"type":"boolean","title":"client_auth","description":"Extended usage: client authentication (TLS client certificates)."}},"additionalProperties":false},"dnsNames":{"type":"array","items":{"type":"string"},"title":"dns_names","description":"DNS names in the Subject Alternative Name extension."},"emailAddresses":{"type":"array","items":{"type":"string"},"title":"email_addresses","description":"Email addresses in the Subject Alternative Name extension."},"ipAddresses":{"type":"array","items":{"type":"string"},"title":"ip_addresses","description":"IP addresses in the Subject Alternative Name extension, formatted as\n strings (IPv4 dotted-decimal or IPv6 colon-hex)."},"uris":{"type":"array","items":{"type":"string"},"title":"uris","description":"URIs in the Subject Alternative Name extension."},"permittedDnsDomainsCritical":{"type":"boolean","title":"permitted_dns_domains_critical","description":"When true the permitted/excluded DNS-domain name-constraints are marked\n critical and clients must understand them or reject the certificate."},"permittedDnsDomains":{"type":"array","items":{"type":"string"},"title":"permitted_dns_domains","description":"Name constraints: DNS domains the certificate is permitted to assert."},"excludedDnsDomains":{"type":"array","items":{"type":"string"},"title":"excluded_dns_domains","description":"Name constraints: DNS domains the certificate must not assert."},"permittedIpRanges":{"type":"array","items":{"type":"string"},"title":"permitted_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate is permitted to assert."},"excludedIpRanges":{"type":"array","items":{"type":"string"},"title":"excluded_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate must not assert."},"permittedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"permitted_email_addresses","description":"Name constraints: email addresses (or domains) the certificate is\n permitted to assert."},"excludedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"excluded_email_addresses","description":"Name constraints: email addresses (or domains) the certificate must not\n assert."},"permittedUriDomains":{"type":"array","items":{"type":"string"},"title":"permitted_uri_domains","description":"Name constraints: URI domains the certificate is permitted to assert."},"excludedUriDomains":{"type":"array","items":{"type":"string"},"title":"excluded_uri_domains","description":"Name constraints: URI domains the certificate must not assert."}},"title":"CertificateInfo","additionalProperties":false,"description":"CertificateInfo is a .proto reflection of\n https://golang.org/pkg/crypto/x509/#Certificate"},"title":"certificate_info","description":"Info about any certificates the key pair has.","readOnly":true}},"additionalProperties":false}},"title":"GetKeyPairResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-key-pair.api.mdx b/content/docs/api/pomerium-config-config-service-get-key-pair.api.mdx new file mode 100644 index 000000000..0692e3f60 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-key-pair.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-get-key-pair +title: "GetKeyPair" +description: "Gets a key pair" +sidebar_label: "GetKeyPair" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Gets a key pair + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-policy.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-get-policy.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-policy.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-policy.RequestSchema.json b/content/docs/api/pomerium-config-config-service-get-policy.RequestSchema.json new file mode 100644 index 000000000..711adba22 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-policy.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"ID of the policy to fetch."}},"title":"GetPolicyRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-policy.StatusCodes.json b/content/docs/api/pomerium-config-config-service-get-policy.StatusCodes.json new file mode 100644 index 000000000..d80a79e03 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-policy.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"policy":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"title":"Policy","additionalProperties":false,"description":"Configuration for a policy."}},"title":"GetPolicyResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-policy.api.mdx b/content/docs/api/pomerium-config-config-service-get-policy.api.mdx new file mode 100644 index 000000000..e4d226af4 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-policy.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-get-policy +title: "GetPolicy" +description: "Gets a policy" +sidebar_label: "GetPolicy" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Gets a policy + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-route.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-get-route.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-route.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-route.RequestSchema.json b/content/docs/api/pomerium-config-config-service-get-route.RequestSchema.json new file mode 100644 index 000000000..fd3c0e694 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-route.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"ID of the route to fetch."}},"title":"GetRouteRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-route.StatusCodes.json b/content/docs/api/pomerium-config-config-service-get-route.StatusCodes.json new file mode 100644 index 000000000..22cd19d66 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-route.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"route":{"title":"route","description":"The requested route. Sensitive fields are stripped before return.","type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The id of the route."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"The namespace id of the route."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"The originator id of the route."},"name":{"type":["string","null"],"title":"name","description":"The name of the route."},"statName":{"type":["string","null"],"title":"stat_name","description":"The name used for stats telemetry with the route."},"description":{"type":["string","null"],"title":"description","description":"A human-readable description of the route."},"logoUrl":{"type":["string","null"],"title":"logo_url","description":"A URL for a logo for the route."},"from":{"type":"string","title":"from","description":"The externally accessible URL for a proxied HTTP request."},"to":{"type":"array","items":{"type":"string"},"title":"to","description":"The destination(s) of a proxied request."},"redirect":{"title":"redirect","description":"Indicates that a route should be redirected.","type":"object","properties":{"httpsRedirect":{"type":["boolean","null"],"title":"https_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n \"https\"."},"schemeRedirect":{"type":["string","null"],"title":"scheme_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n the given value."},"hostRedirect":{"type":["string","null"],"title":"host_redirect","description":"Indicates that the incoming host of a request will be swapped with\n the given value."},"portRedirect":{"type":["integer","null"],"title":"port_redirect","description":"Indicates that the incoming port of a request will be swapped with\n the given value."},"pathRedirect":{"type":["string","null"],"title":"path_redirect","description":"Indicates that the incoming path portion of a request URL will be\n swapped with the given value."},"prefixRewrite":{"type":["string","null"],"title":"prefix_rewrite","description":"Indicates that the incoming matched path prefix portion of a request\n URL will be swapped with the given value."},"responseCode":{"type":["integer","null"],"title":"response_code","format":"int32","description":"The response code used for the redirect. Defaults to 301."},"stripQuery":{"type":["boolean","null"],"title":"strip_query","description":"Indicates that during redirection, the query portion of the URL will\n be removed. Defaults to false."}},"additionalProperties":false},"response":{"title":"response","description":"Indicates that a route should return a direct response.","type":"object","properties":{"status":{"type":"integer","title":"status","description":"The status code that Pomerium returns for a static HTTP response.\n For example, 200."},"body":{"type":"string","title":"body","description":"The response body that Pomerium returns for a static HTTP\n response."}},"additionalProperties":false},"loadBalancingWeights":{"type":"array","items":{"type":"integer"},"title":"load_balancing_weights","description":"Optional load balancing weights for upstream servers defined in to.\n If not specified, all upstream servers are assigned the same weight.\n If provided, len(to) must equal len(load_balancing_weights)."},"allowedUsers":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_users","description":"Grants access to the route if the logged-in user's ID matches one of the\n given values. Deprecated in favor of the PPL user criterion.","deprecated":true},"allowedDomains":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_domains","description":"Grants access to the route if the logged-in user's email address is for\n one of the given values. Deprecated in favor of the PPL domain criterion.","deprecated":true},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access to the route if the logged-in user's session/user claims\n match one of the given values. Deprecated in favor of the PPL claim\n criterion.","deprecated":true},"prefix":{"type":"string","title":"prefix","description":"Only match requests that have a path that begins with the given prefix."},"path":{"type":"string","title":"path","description":"Only match requests whose path is an exact match for the given path."},"regex":{"type":"string","title":"regex","description":"Only match requests whose path matches the given regular expression."},"prefixRewrite":{"type":"string","title":"prefix_rewrite","description":"Indicates that when a request is forwarded, the matched prefix (or path)\n will be swapped with this value."},"regexRewritePattern":{"type":"string","title":"regex_rewrite_pattern","description":"A regular expression used to rewrite the path of a forwarded request."},"regexRewriteSubstitution":{"type":"string","title":"regex_rewrite_substitution","description":"When a regular expression pattern is set, what the matched pattern will\n be replaced with."},"regexPriorityOrder":{"type":["integer","string","null"],"title":"regex_priority_order","format":"int64","description":"Determines the ordering of routes that use regular expressions."},"corsAllowPreflight":{"type":"boolean","title":"cors_allow_preflight","description":"Indicates that OPTIONS requests used for CORS can pass through\n unauthenticated."},"allowPublicUnauthenticatedAccess":{"type":"boolean","title":"allow_public_unauthenticated_access","description":"Grants access to a route without requiring any authentication."},"allowAnyAuthenticatedUser":{"type":"boolean","title":"allow_any_authenticated_user","description":"Grants access to a route for any logged-in user."},"timeout":{"title":"timeout","description":"The per-route request timeout option. Cannot exceed global values.","type":"string","format":"duration"},"idleTimeout":{"title":"idle_timeout","description":"The per-route request timeout for a connection that is idle with\n no data exchange.","type":"string","format":"duration"},"allowWebsockets":{"type":"boolean","title":"allow_websockets","description":"Allow websocket requests. Also disables the default route timeout."},"allowSpdy":{"type":"boolean","title":"allow_spdy","description":"Allow SPDY protocol upgrade requests."},"tlsSkipVerify":{"type":"boolean","title":"tls_skip_verify","description":"Indicates that pomerium should perform no verification on upstream\n TLS connections. Any certificate for any hostname will be accepted."},"tlsServerName":{"type":"string","title":"tls_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence.","deprecated":true},"tlsUpstreamServerName":{"type":"string","title":"tls_upstream_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence."},"tlsDownstreamServerName":{"type":"string","title":"tls_downstream_server_name","description":"The server name indication (SNI) for downstream TLS connections."},"tlsCustomCa":{"type":"string","title":"tls_custom_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates of upstream TLS connections."},"tlsCustomCaFile":{"type":"string","title":"tls_custom_ca_file","description":"A file containing root certificate authorities (in PEM format)\n used to verify certificates of upstream TLS connections."},"tlsCustomCaKeyPairId":{"type":["string","null"],"title":"tls_custom_ca_key_pair_id","description":"A reference to a key pair containing root certificate authorities (in PEM\n format) used to verify certificates of upstream TLS connections."},"tlsClientCert":{"type":"string","title":"tls_client_cert","description":"The client certificate to present to upstream TLS connections for\n mTLS."},"tlsClientKey":{"type":"string","title":"tls_client_key","description":"The private key for the client certificate to present to upstream\n TLS connections for mTLS."},"tlsClientCertFile":{"type":"string","title":"tls_client_cert_file","description":"A file containing the client certificate to present to upstream TLS\n connections for mTLS."},"tlsClientKeyFile":{"type":"string","title":"tls_client_key_file","description":"A file containing the private key for the client certificate to\n present to upstream TLS connections for mTLS."},"tlsClientKeyPairId":{"type":["string","null"],"title":"tls_client_key_pair_id","description":"A reference to the key pair containing the client certificate\n and private key to present to upstream TLS connections for mTLS."},"tlsDownstreamClientCa":{"type":"string","title":"tls_downstream_client_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaFile":{"type":"string","title":"tls_downstream_client_ca_file","description":"A file containing the root certificate authorities (in PEM format) used to\n verify certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaKeyPairId":{"type":["string","null"],"title":"tls_downstream_client_ca_key_pair_id","description":"A reference to a key pair containing the root certificate authorities (in\n PEM format) used to verify certificates for downstream TLS connections. If\n specified downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsUpstreamAllowRenegotiation":{"type":"boolean","title":"tls_upstream_allow_renegotiation","description":"Controls whether server-initiated TLS renegotiation is allowed for\n upstream servers."},"setRequestHeaders":{"type":"object","title":"set_request_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set both static and dynamic headers for upstream requests.\n Static values can be useful if you want to pass along additional\n information to upstream applications as headers, or to set a fixed\n authentication header on the request. Dynamic values enable you to pass\n ID and Access tokens from your identity provider to upstream\n applications. The following dynamic header values are supported:\n\n - ${pomerium.access_token}: OAuth access token from the identity provider.\n - ${pomerium.client_cert_fingerprint}: Short-form SHA-256 fingerprint of the presented client certificate.\n - ${pomerium.id_token}: OIDC ID token from the identity provider.\n - ${pomerium.jwt}: The Pomerium assertion JWT for the logged-in user."},"removeRequestHeaders":{"type":"array","items":{"type":"string"},"title":"remove_request_headers","description":"Headers to remove from upstream requests. This can be useful if you want to\n prevent privacy information from being passed to upstream applications."},"setResponseHeaders":{"type":"object","title":"set_response_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set static values for the given downstream response headers.\n These headers will take precedence over the global set_response_headers."},"rewriteResponseHeaders":{"type":"array","items":{"type":"object","allOf":[{"properties":{"header":{"type":"string","title":"header","description":"The name of the response header to rewrite (case-insensitive)."},"value":{"type":"string","title":"value","description":"The new value (or replacement substring, when `prefix` is set) to write\n back to the header."}}},{"oneOf":[{"type":"object","properties":{"prefix":{"type":"string","title":"prefix","description":"Only the portion of the header value that begins with this literal\n prefix is replaced; the remainder is kept."}},"title":"prefix","required":["prefix"]}]}],"title":"RouteRewriteHeader","additionalProperties":false,"description":"A rewrite rule applied to a single response header before the response is\n returned to the downstream client."},"title":"rewrite_response_headers","description":"Used to modify downstream response headers."},"preserveHostHeader":{"type":"boolean","title":"preserve_host_header","description":"Passes the Host (or :authority) header from the incoming request to the\n upstream service, instead of the Host header from the route's to URL."},"passIdentityHeaders":{"type":["boolean","null"],"title":"pass_identity_headers","description":"Sends identity headers to all upstream applications. Identity headers\n include:\n\n - X-Pomerium-Jwt-Assertion: The pomerium assertion JWT for the logged-in user.\n - X-Pomerium-Claim-*: Each of the claim values specified by the jwt_claim_headers option.\n\n When not set explicitly, the global pass_identity_headers option will be used."},"kubernetesServiceAccountToken":{"type":"string","title":"kubernetes_service_account_token","description":"A Kubernetes service account token used to authenticate to the\n Kubernetes API via Authorization: Bearer and Impersonate-User/Group\n headers."},"kubernetesServiceAccountTokenFile":{"type":"string","title":"kubernetes_service_account_token_file","description":"A file containing a Kubernetes service account token."},"kubernetesServiceAccountTokenKeyPairId":{"type":["string","null"],"title":"kubernetes_service_account_token_key_pair_id","description":"A key pair reference for a Kubernetes service account token."},"enableGoogleCloudServerlessAuthentication":{"type":"boolean","title":"enable_google_cloud_serverless_authentication","description":"Adds an Authorization: Bearer ID_TOKEN header for Google Cloud\n serverless upstream requests."},"jwtIssuerFormat":{"oneOf":[{"type":"string","title":"IssuerFormat","enum":["IssuerHostOnly","IssuerURI"],"description":"Format used for the `iss` claim of JWTs Pomerium issues for upstream\n requests."},{"type":"null"}],"title":"jwt_issuer_format","description":"Controls the format of the iss claim in JWTs passed to upstream\n services by this route."},"jwtGroupsFilter":{"type":"array","items":{"type":"string"},"title":"jwt_groups_filter","description":"Allowlist of group names or IDs to include in the Pomerium JWT for\n this route."},"jwtGroupsFilterInferFromPpl":{"type":["boolean","null"],"title":"jwt_groups_filter_infer_from_ppl","description":"Whether to add JWT groups from any PPL policies.\n Not supported in the open source version of Pomerium."},"bearerTokenFormat":{"oneOf":[{"type":"string","title":"BearerTokenFormat","enum":["BEARER_TOKEN_FORMAT_UNKNOWN","BEARER_TOKEN_FORMAT_DEFAULT","BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN","BEARER_TOKEN_FORMAT_IDP_IDENTITY_TOKEN"],"description":"Controls how HTTP bearer token authentication is handled."},{"type":"null"}],"title":"bearer_token_format","description":"Controls how authorization bearer tokens are interpreted for this\n route. When unset, the global bearer_token_format option is used."},"dependsOn":{"type":"array","items":{"type":"string"},"title":"depends_on","description":"Additional hosts that participate in chained login redirects for\n this route. Up to five hosts are supported."},"policies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"title":"Policy","additionalProperties":false,"description":"Configuration for a policy."},"title":"policies","description":"Structured sub-policies attached to this route."},"pplPolicies":{"type":"array","items":{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},"title":"ppl_policies","description":"PPL policies attached to this route."},"policyIds":{"type":"array","items":{"type":"string"},"title":"policy_ids","description":"IDs of policies assigned to this route."},"hostRewrite":{"type":["string","null"],"title":"host_rewrite","description":"Rewrites the Host or :authority header to a fixed value."},"hostRewriteHeader":{"type":["string","null"],"title":"host_rewrite_header","description":"Rewrites the Host or :authority header using the value of another\n request header."},"hostPathRegexRewritePattern":{"type":["string","null"],"title":"host_path_regex_rewrite_pattern","description":"A regular expression used to rewrite the Host or :authority header\n from the request path."},"hostPathRegexRewriteSubstitution":{"type":["string","null"],"title":"host_path_regex_rewrite_substitution","description":"When host_path_regex_rewrite_pattern is set, what the matched\n pattern will be replaced with to produce the Host header."},"idpClientId":{"type":["string","null"],"title":"idp_client_id","description":"Overrides the global identity provider client ID for this route."},"idpClientSecret":{"type":["string","null"],"title":"idp_client_secret","description":"Overrides the global identity provider client secret for this route."},"idpAccessTokenAllowedAudiences":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"idp_access_token_allowed_audiences","description":"Allowed audiences for validating IdP-issued access tokens for this\n route."},"showErrorDetails":{"type":"boolean","title":"show_error_details","description":"If true, include policy explanation and remediation details in\n authorization error responses."},"mcp":{"oneOf":[{"type":"object","oneOf":[{"type":"object","properties":{"client":{"title":"client","description":"Provides an application with external tokens for MCP server access.","type":"object","additionalProperties":false}},"title":"client","required":["client"]},{"type":"object","properties":{"server":{"title":"server","description":"Indicates that this route fronts an MCP server.","type":"object","properties":{"upstreamOauth2":{"oneOf":[{"type":"object","properties":{"clientId":{"type":"string","title":"client_id","description":"The public identifier for an application."},"clientSecret":{"type":"string","title":"client_secret","description":"The secret known only to the application and the authorization server."},"oauth2Endpoint":{"title":"oauth2_endpoint","description":"The OAuth2 endpoint configuration.","type":"object","properties":{"authUrl":{"type":"string","title":"auth_url","description":"The authorization URL."},"tokenUrl":{"type":"string","title":"token_url","description":"The token URL."},"authStyle":{"oneOf":[{"type":"string","title":"OAuth2AuthStyle","enum":["OAUTH2_AUTH_STYLE_UNSPECIFIED","OAUTH2_AUTH_STYLE_IN_PARAMS","OAUTH2_AUTH_STYLE_IN_HEADER"],"description":"How the OAuth2 client identifies itself to the authorization server when\n fetching tokens."},{"type":"null"}],"title":"auth_style","description":"if unset, auto-detect which authentication\n style the provider wants by trying both ways and caching\n the successful way for the future."}},"additionalProperties":false},"scopes":{"type":"array","items":{"type":"string"},"title":"scopes","description":"Scope to control what data the OAuth2 server returns."},"authorizationUrlParams":{"type":"object","title":"authorization_url_params","additionalProperties":{"type":"string","title":"value"},"description":"Additional parameters to add to authorization requests."}},"title":"UpstreamOAuth2","additionalProperties":false,"description":"Configuration for OAuth2 authorization for an upstream service behind\n Pomerium."},{"type":"null"}],"title":"upstream_oauth2","description":"Specifies that before the request reaches the MCP upstream server,\n it should acquire an OAuth2 token."},"maxRequestBytes":{"type":["integer","null"],"title":"max_request_bytes","description":"The maximum request body size in bytes that can be sent to the MCP\n server (default: 4KiB)."},"path":{"type":["string","null"],"title":"path","description":"The path to append to the URL when returning the server URL in the\n .mcp/routes endpoint. Defaults to \"/\"."},"authorizationServerUrl":{"type":["string","null"],"title":"authorization_server_url","description":"The issuer URL of the upstream authorization server. Used as a fallback\n when PRM (RFC 9728) discovery fails, per the MCP spec's \"abort or use\n pre-configured values\" guidance."}},"additionalProperties":false}},"title":"server","required":["server"]}],"title":"MCP","additionalProperties":false,"description":"Configuration for an MCP route."},{"type":"null"}],"title":"mcp","description":"Model Context Protocol configuration for this route. Requires the\n runtime_flags.mcp feature flag."},"circuitBreakerThresholds":{"oneOf":[{"type":"object","properties":{"maxConnections":{"type":["integer","null"],"title":"max_connections","description":"The maximum number of connections that Envoy will make to the upstream\n cluster. If not specified, the default is 1024."},"maxPendingRequests":{"type":["integer","null"],"title":"max_pending_requests","description":"The maximum number of pending requests that Envoy will allow to the\n upstream cluster. If not specified, the default is 1024. This limit is\n applied as a connection limit for non-HTTP traffic."},"maxRequests":{"type":["integer","null"],"title":"max_requests","description":"The maximum number of parallel requests that Envoy will make to the\n upstream cluster. If not specified, the default is 1024. This limit does\n not apply to non-HTTP traffic."},"maxRetries":{"type":["integer","null"],"title":"max_retries","description":"The maximum number of parallel retries that Envoy will allow to the\n upstream cluster. If not specified, the default is 3."},"maxConnectionPools":{"type":["integer","null"],"title":"max_connection_pools","description":"The maximum number of connection pools per cluster that Envoy will\n concurrently support at once. If not specified, the default is unlimited.\n Set this for clusters which create a large number of connection pools."}},"title":"CircuitBreakerThresholds","additionalProperties":false,"description":"CircuitBreakerThresholds defines CircuitBreaker settings."},{"type":"null"}],"title":"circuit_breaker_thresholds","description":"Circuit breaker thresholds for upstream requests on this route."},"upstreamTunnel":{"oneOf":[{"type":"object","properties":{"sshPolicy":{"oneOf":[{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},{"type":"null"}],"title":"ssh_policy","description":"PPL policy enforced before the SSH tunnel is opened to the upstream."},"sshPolicyRego":{"type":"array","items":{"type":"string"},"title":"ssh_policy_rego","description":"Rego rules evaluated before the SSH tunnel is opened to the upstream."},"sshPolicyId":{"type":["string","null"],"title":"ssh_policy_id","description":"ID of a shared policy whose rules also gate this SSH tunnel."}},"title":"UpstreamTunnel","additionalProperties":false,"description":"Configuration for an upstream tunnel. Applies to routes whose upstream is\n reached through Pomerium's SSH proxy."},{"type":"null"}],"title":"upstream_tunnel","description":"Configuration for reverse tunneling to upstreams for this route."},"outlierDetection":{"oneOf":[{"type":"object","properties":{"consecutive5xx":{"title":"consecutive_5xx","description":"The number of consecutive server-side error responses (for HTTP traffic,\n 5xx responses; for TCP traffic, connection failures; for Redis, failure to\n respond PONG; etc.) before a consecutive 5xx ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"interval":{"title":"interval","description":"The time interval between ejection analysis sweeps. This can result in\n both new ejections as well as hosts being returned to service. Defaults\n to 10000ms or 10s.","type":"string","format":"duration"},"baseEjectionTime":{"title":"base_ejection_time","description":"The base time that a host is ejected for. The real time is equal to the\n base time multiplied by the number of times the host has been ejected and is\n capped by :ref:`max_ejection_time`.\n Defaults to 30000ms or 30s.","type":"string","format":"duration"},"maxEjectionPercent":{"title":"max_ejection_percent","description":"The maximum % of an upstream cluster that can be ejected due to outlier detection. Defaults to 10% .\n Will eject at least one host regardless of the value if :ref:`always_eject_one_host` is enabled.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutive5xx":{"title":"enforcing_consecutive_5xx","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive 5xx. This setting can be used to disable\n ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingSuccessRate":{"title":"enforcing_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics. This setting can be used to\n disable ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateMinimumHosts":{"title":"success_rate_minimum_hosts","description":"The number of hosts in a cluster that must have enough request volume to\n detect success rate outliers. If the number of hosts is less than this\n setting, outlier detection via success rate statistics is not performed\n for any host in the cluster. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateRequestVolume":{"title":"success_rate_request_volume","description":"The minimum number of total requests that must be collected in one\n interval (as defined by the interval duration above) to include this host\n in success rate based outlier detection. If the volume is lower than this\n setting, outlier detection via success rate statistics is not performed\n for that host. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateStdevFactor":{"title":"success_rate_stdev_factor","description":"This factor is used to determine the ejection threshold for success rate\n outlier ejection. The ejection threshold is the difference between the\n mean success rate, and the product of this factor and the standard\n deviation of the mean success rate: mean - (stdev *\n success_rate_stdev_factor). This factor is divided by a thousand to get a\n double. That is, if the desired factor is 1.9, the runtime value should\n be 1900. Defaults to 1900.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"consecutiveGatewayFailure":{"title":"consecutive_gateway_failure","description":"The number of consecutive gateway failures (502, 503, 504 status codes)\n before a consecutive gateway failure ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveGatewayFailure":{"title":"enforcing_consecutive_gateway_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive gateway failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"splitExternalLocalOriginErrors":{"type":"boolean","title":"split_external_local_origin_errors","description":"Determines whether to distinguish local origin failures from external errors. If set to true\n the following configuration parameters are taken into account:\n :ref:`consecutive_local_origin_failure`,\n :ref:`enforcing_consecutive_local_origin_failure`\n and\n :ref:`enforcing_local_origin_success_rate`.\n Defaults to false."},"consecutiveLocalOriginFailure":{"title":"consecutive_local_origin_failure","description":"The number of consecutive locally originated failures before ejection\n occurs. Defaults to 5. Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveLocalOriginFailure":{"title":"enforcing_consecutive_local_origin_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive locally originated failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingLocalOriginSuccessRate":{"title":"enforcing_local_origin_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics for locally originated errors.\n This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageThreshold":{"title":"failure_percentage_threshold","description":"The failure percentage to use when determining failure percentage-based outlier detection. If\n the failure percentage of a given host is greater than or equal to this value, it will be\n ejected. Defaults to 85.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentage":{"title":"enforcing_failure_percentage","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n failure percentage statistics. This setting can be used to disable ejection or to ramp it up\n slowly. Defaults to 0.\n\n [#next-major-version: setting this without setting failure_percentage_threshold should be\n invalid in v4.]","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentageLocalOrigin":{"title":"enforcing_failure_percentage_local_origin","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n local-origin failure percentage statistics. This setting can be used to disable ejection or to\n ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageMinimumHosts":{"title":"failure_percentage_minimum_hosts","description":"The minimum number of hosts in a cluster in order to perform failure percentage-based ejection.\n If the total number of hosts in the cluster is less than this value, failure percentage-based\n ejection will not be performed. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageRequestVolume":{"title":"failure_percentage_request_volume","description":"The minimum number of total requests that must be collected in one interval (as defined by the\n interval duration above) to perform failure percentage-based ejection for this host. If the\n volume is lower than this setting, failure percentage-based ejection will not be performed for\n this host. Defaults to 50.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"maxEjectionTime":{"title":"max_ejection_time","description":"The maximum time that a host is ejected for. See :ref:`base_ejection_time`\n for more information. If not specified, the default value (300000ms or 300s) or\n :ref:`base_ejection_time` value is applied, whatever is larger.","type":"string","format":"duration"},"maxEjectionTimeJitter":{"title":"max_ejection_time_jitter","description":"The maximum amount of jitter to add to the ejection time, in order to prevent\n a 'thundering herd' effect where all proxies try to reconnect to host at the same time.\n See :ref:`max_ejection_time_jitter`\n Defaults to 0s.","type":"string","format":"duration"},"successfulActiveHealthCheckUnejectHost":{"title":"successful_active_health_check_uneject_host","description":"If active health checking is enabled and a host is ejected by outlier detection, a successful active health check\n unejects the host by default and considers it as healthy. Unejection also clears all the outlier detection counters.\n To change this default behavior set this config to ``false`` where active health checking will not uneject the host.\n Defaults to true.","type":"boolean"},"alwaysEjectOneHost":{"title":"always_eject_one_host","description":"If enabled, at least one host is ejected regardless of the value of :ref:`max_ejection_percent`.\n Defaults to false.","type":"boolean"}},"title":"OutlierDetection","additionalProperties":false},{"type":"null"}],"title":"outlier_detection","description":"Passive health checking via outlier detection for upstream hosts on\n this route."},"healthChecks":{"type":"array","items":{"type":"object","allOf":[{"properties":{"timeout":{"title":"timeout","description":"The time to wait for a health check response. If the timeout is reached the\n health check attempt will be considered a failure.","type":"string","format":"duration"},"interval":{"title":"interval","description":"The interval between health checks.","type":"string","format":"duration"},"initialJitter":{"title":"initial_jitter","description":"An optional jitter amount in milliseconds. If specified, Envoy will start health\n checking after for a random time in ms between 0 and initial_jitter. This only\n applies to the first health check.","type":"string","format":"duration"},"intervalJitter":{"title":"interval_jitter","description":"An optional jitter amount in milliseconds. If specified, during every\n interval Envoy will add interval_jitter to the wait time.","type":"string","format":"duration"},"intervalJitterPercent":{"type":"integer","title":"interval_jitter_percent","description":"An optional jitter amount as a percentage of interval_ms. If specified,\n during every interval Envoy will add ``interval_ms`` *\n ``interval_jitter_percent`` / 100 to the wait time.\n\n If interval_jitter_ms and interval_jitter_percent are both set, both of\n them will be used to increase the wait time."},"unhealthyThreshold":{"title":"unhealthy_threshold","description":"The number of unhealthy health checks required before a host is marked\n unhealthy. Note that for ``http`` health checking if a host responds with a code not in\n :ref:`expected_statuses `\n or :ref:`retriable_statuses `,\n this threshold is ignored and the host is considered immediately unhealthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"healthyThreshold":{"title":"healthy_threshold","description":"The number of healthy health checks required before a host is marked\n healthy. Note that during startup, only a single successful health check is\n required to mark a host healthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"altPort":{"title":"alt_port","description":"[#not-implemented-hide:] Non-serving port for health checking.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"reuseConnection":{"title":"reuse_connection","description":"Reuse health check connection between health checks. Default is true.","type":"boolean"},"noTrafficInterval":{"title":"no_traffic_interval","description":"The \"no traffic interval\" is a special health check interval that is used when a cluster has\n never had traffic routed to it. This lower interval allows cluster information to be kept up to\n date, without sending a potentially large amount of active health checking traffic for no\n reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined. Note that this interval takes precedence over\n any other.\n\n The default value for \"no traffic interval\" is 60 seconds.","type":"string","format":"duration"},"noTrafficHealthyInterval":{"title":"no_traffic_healthy_interval","description":"The \"no traffic healthy interval\" is a special health check interval that\n is used for hosts that are currently passing active health checking\n (including new hosts) when the cluster has received no traffic.\n\n This is useful for when we want to send frequent health checks with\n ``no_traffic_interval`` but then revert to lower frequency ``no_traffic_healthy_interval`` once\n a host in the cluster is marked as healthy.\n\n Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined.\n\n If no_traffic_healthy_interval is not set, it will default to the\n no traffic interval and send that interval regardless of health state.","type":"string","format":"duration"},"unhealthyInterval":{"title":"unhealthy_interval","description":"The \"unhealthy interval\" is a health check interval that is used for hosts that are marked as\n unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the\n standard health check interval that is defined.\n\n The default value for \"unhealthy interval\" is the same as \"interval\".","type":"string","format":"duration"},"unhealthyEdgeInterval":{"title":"unhealthy_edge_interval","description":"The \"unhealthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as unhealthy. For subsequent health checks\n Envoy will shift back to using either \"unhealthy interval\" if present or the standard health\n check interval that is defined.\n\n The default value for \"unhealthy edge interval\" is the same as \"unhealthy interval\".","type":"string","format":"duration"},"healthyEdgeInterval":{"title":"healthy_edge_interval","description":"The \"healthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as healthy. For subsequent health checks\n Envoy will shift back to using the standard health check interval that is defined.\n\n The default value for \"healthy edge interval\" is the same as the default interval.","type":"string","format":"duration"},"alwaysLogHealthCheckFailures":{"type":"boolean","title":"always_log_health_check_failures","description":"If set to true, health check failure events will always be logged. If set to false, only the\n initial health check failure event will be logged.\n The default value is false."},"alwaysLogHealthCheckSuccess":{"type":"boolean","title":"always_log_health_check_success","description":"If set to true, health check success events will always be logged. If set to false, only host addition event will be logged\n if it is the first successful health check, or if the healthy threshold is reached.\n The default value is false."},"transportSocketMatchCriteria":{"title":"transport_socket_match_criteria","description":"Optional key/value pairs that will be used to match a transport socket from those specified in the cluster's\n :ref:`tranport socket matches `.\n For example, the following match criteria\n\n .. code-block:: yaml\n\n transport_socket_match_criteria:\n useMTLS: true\n\n Will match the following :ref:`cluster socket match `\n\n .. code-block:: yaml\n\n transport_socket_matches:\n - name: \"useMTLS\"\n match:\n useMTLS: true\n transport_socket:\n name: envoy.transport_sockets.tls\n config: { ... } # tls socket configuration\n\n If this field is set, then for health checks it will supersede an entry of ``envoy.transport_socket`` in the\n :ref:`LbEndpoint.Metadata `.\n This allows using different transport socket capabilities for health checking versus proxying to the\n endpoint.\n\n If the key/values pairs specified do not match any\n :ref:`transport socket matches `,\n the cluster's :ref:`transport socket `\n will be used for health check socket configuration.","type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"}}}},{"oneOf":[{"type":"object","properties":{"grpcHealthCheck":{"title":"grpc_health_check","description":"gRPC health check.","type":"object","properties":{"serviceName":{"type":"string","title":"service_name","description":"An optional service name parameter which will be sent to gRPC service in\n `grpc.health.v1.HealthCheckRequest\n `_.\n message. See `gRPC health-checking overview\n `_ for\n more information."},"authority":{"type":"string","title":"authority","description":"The value of the :authority header in the gRPC health check request. If\n left empty (default value), the name of the cluster this health check is\n associated with will be used. The authority header can be customized for\n a specific endpoint by setting the :ref:`hostname\n `\n field."}},"additionalProperties":false}},"title":"grpc_health_check","required":["grpcHealthCheck"]},{"type":"object","properties":{"httpHealthCheck":{"title":"http_health_check","description":"HTTP health check.","type":"object","properties":{"host":{"type":"string","title":"host","description":"The value of the host header in the HTTP health check request. If\n left empty (default value), the name of the cluster this health check is associated\n with will be used. The host header can be customized for a specific endpoint by setting the\n :ref:`hostname ` field."},"path":{"type":"string","title":"path","description":"Specifies the HTTP path that will be requested during health checking. For example\n ``/healthcheck``."},"send":{"title":"send","description":"HTTP specific payload to be sent as the request body during health checking.\n If specified, the method should support a request body (POST, PUT, PATCH, etc.).","type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"additionalProperties":false},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"Specifies a list of HTTP expected responses to match in the first ``response_buffer_size`` bytes of the response body.\n If it is set, both the expected response check and status code determine the health check.\n When checking the response, “fuzzy” matching is performed such that each payload block must be found,\n and in the order specified, but not necessarily contiguous.\n\n .. note::\n\n It is recommended to set ``response_buffer_size`` based on the total Payload size for efficiency.\n The default buffer size is 1024 bytes when it is not set."},"responseBufferSize":{"title":"response_buffer_size","description":"Specifies the size of response buffer in bytes that is used to Payload match.\n The default value is 1024. Setting to 0 implies that the Payload will be matched against the entire response.","type":"object","properties":{"value":{"type":["integer","string"],"title":"value","format":"int64","description":"The uint64 value."}},"additionalProperties":false},"requestHeadersToRemove":{"type":"array","items":{"type":"string"},"title":"request_headers_to_remove","description":"Specifies a list of HTTP headers that should be removed from each request that is sent to the\n health checked cluster."},"expectedStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"expected_statuses","description":"Specifies a list of HTTP response statuses considered healthy. If provided, replaces default\n 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open\n semantics of :ref:`Int64Range `. The start and end of each\n range are required. Only statuses in the range [100, 600) are allowed."},"retriableStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"retriable_statuses","description":"Specifies a list of HTTP response statuses considered retriable. If provided, responses in this range\n will count towards the configured :ref:`unhealthy_threshold `,\n but will not result in the host being considered immediately unhealthy. Ranges follow half-open semantics of\n :ref:`Int64Range `. The start and end of each range are required.\n Only statuses in the range [100, 600) are allowed. The :ref:`expected_statuses `\n field takes precedence for any range overlaps with this field i.e. if status code 200 is both retriable and expected, a 200 response will\n be considered a successful health check. By default all responses not in\n :ref:`expected_statuses ` will result in\n the host being considered immediately unhealthy i.e. if status code 200 is expected and there are no configured retriable statuses, any\n non-200 response will result in the host being marked unhealthy."},"codecClientType":{"title":"codec_client_type","description":"Use specified application protocol for health checks.","type":"string","enum":["HTTP1","HTTP2","HTTP3"]}},"additionalProperties":false}},"title":"http_health_check","required":["httpHealthCheck"]},{"type":"object","properties":{"tcpHealthCheck":{"title":"tcp_health_check","description":"TCP health check.","type":"object","properties":{"send":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"When checking the response, “fuzzy” matching is performed such that each\n payload block must be found, and in the order specified, but not\n necessarily contiguous."}},"additionalProperties":false}},"title":"tcp_health_check","required":["tcpHealthCheck"]}]}],"title":"HealthCheck","additionalProperties":false,"description":"[#next-free-field: 27]"},"title":"health_checks","description":"Active health checks to run against upstream hosts for this route."},"loadBalancingPolicy":{"oneOf":[{"type":"string","title":"LoadBalancingPolicy","enum":["LOAD_BALANCING_POLICY_UNSPECIFIED","LOAD_BALANCING_POLICY_ROUND_ROBIN","LOAD_BALANCING_POLICY_MAGLEV","LOAD_BALANCING_POLICY_RANDOM","LOAD_BALANCING_POLICY_RING_HASH","LOAD_BALANCING_POLICY_LEAST_REQUEST"],"description":"LoadBalancingPolicy defines the strategy used to balance requests across\n upstream endpoints"},{"type":"null"}],"title":"load_balancing_policy","description":"The load balancing algorithm for upstream endpoints. Options:\n ROUND_ROBIN, RING_HASH, LEAST_REQUEST, RANDOM, MAGLEV."},"healthyPanicThreshold":{"type":["integer","null"],"title":"healthy_panic_threshold","format":"int32","description":"If the percentage of healthy upstream hosts drops below this value,\n traffic will be sent to all hosts regardless of health status."},"allowUpgrades":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"allow_upgrades","description":"Allows HTTP upgrade requests to be forwarded upstream."},"sessionRecording":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Toggle to enable/disable recording for this route."}},"title":"SessionRecording","additionalProperties":false,"description":"SessionRecording defines session recording settings for routes."},{"type":"null"}],"title":"session_recording","description":"Configures session recording behaviour on this route.\n SSH specific."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"enforcedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_policies","description":"Policies that are automatically enforced.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_policies","description":"Info about policies assigned to this route.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the route.","readOnly":true}},"additionalProperties":false}},"title":"GetRouteResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-route.api.mdx b/content/docs/api/pomerium-config-config-service-get-route.api.mdx new file mode 100644 index 000000000..06842f71b --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-route.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-get-route +title: "GetRoute" +description: "Gets a route" +sidebar_label: "GetRoute" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Gets a route + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-server-info.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-get-server-info.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-server-info.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-server-info.RequestSchema.json b/content/docs/api/pomerium-config-config-service-get-server-info.RequestSchema.json new file mode 100644 index 000000000..2489a77fd --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-server-info.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","title":"GetServerInfoRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-server-info.StatusCodes.json b/content/docs/api/pomerium-config-config-service-get-server-info.StatusCodes.json new file mode 100644 index 000000000..56475173d --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-server-info.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"serverType":{"title":"server_type","description":"Which Pomerium build is serving this request (core, enterprise, zero).","type":"string","enum":["SERVER_TYPE_UNKNOWN","SERVER_TYPE_CORE","SERVER_TYPE_ENTERPRISE","SERVER_TYPE_ZERO"]},"version":{"type":"string","title":"version","description":"The semantic version string of the running Pomerium binary."}},"title":"GetServerInfoResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-server-info.api.mdx b/content/docs/api/pomerium-config-config-service-get-server-info.api.mdx new file mode 100644 index 000000000..c13b4c7ab --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-server-info.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-get-server-info +title: "GetServerInfo" +description: "Gets information about a server" +sidebar_label: "GetServerInfo" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Gets information about a server + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-service-account.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-get-service-account.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-service-account.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-service-account.RequestSchema.json b/content/docs/api/pomerium-config-config-service-get-service-account.RequestSchema.json new file mode 100644 index 000000000..4d12de0bf --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-service-account.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"ID of the service account to fetch."}},"title":"GetServiceAccountRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-service-account.StatusCodes.json b/content/docs/api/pomerium-config-config-service-get-service-account.StatusCodes.json new file mode 100644 index 000000000..e55a23a6b --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-service-account.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"serviceAccount":{"title":"service_account","description":"The requested service account.","type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"ID of the service account."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"Namespace of the service account."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"Originator of the service account."},"description":{"type":["string","null"],"title":"description","description":"Description of the service account."},"userId":{"type":["string","null"],"title":"user_id","description":"User ID of the service account."},"expiresAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"expires_at","description":"When the service account expires."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"accessedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"}},"additionalProperties":false}},"title":"GetServiceAccountResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-service-account.api.mdx b/content/docs/api/pomerium-config-config-service-get-service-account.api.mdx new file mode 100644 index 000000000..79cc7226a --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-service-account.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-get-service-account +title: "GetServiceAccount" +description: "Gets a service account" +sidebar_label: "GetServiceAccount" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Gets a service account + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-settings.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-get-settings.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-settings.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-settings.RequestSchema.json b/content/docs/api/pomerium-config-config-service-get-settings.RequestSchema.json new file mode 100644 index 000000000..16ea5b810 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-settings.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","oneOf":[{"type":"object","properties":{"clusterId":{"type":"string","title":"cluster_id","description":"Cluster ID whose Settings record should be returned."}},"title":"cluster_id","required":["clusterId"]},{"type":"object","properties":{"id":{"type":"string","title":"id","description":"ID of the Settings record to fetch."}},"title":"id","required":["id"]}],"title":"GetSettingsRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-settings.StatusCodes.json b/content/docs/api/pomerium-config-config-service-get-settings.StatusCodes.json new file mode 100644 index 000000000..aaaead9ba --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-settings.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"settings":{"title":"settings","description":"The requested Settings record. Sensitive fields are stripped before\n return.","type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the Settings record."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the Settings record belongs to."},"clusterId":{"type":["string","null"],"title":"cluster_id","description":"ID of the cluster the Settings record applies to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the record originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the Settings record."},"installationId":{"type":["string","null"],"title":"installation_id","description":"Stable identifier for this installation, used in telemetry and\n diagnostics. Generated at first start when unset."},"logLevel":{"type":["string","null"],"title":"log_level","description":"Global log level for Pomerium services (\"debug\", \"info\", \"warn\",\n \"error\"). Empty falls back to \"info\"."},"accessLogFields":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"access_log_fields","description":"Subset of access-log fields to emit. Use\n ListAvailableLogFields.available_access_log_fields to see what's valid;\n unset means the service default."},"authorizeLogFields":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"authorize_log_fields","description":"Subset of authorize-log fields to emit; see ListAvailableLogFields."},"proxyLogLevel":{"type":["string","null"],"title":"proxy_log_level","description":"Log level for the proxy service in particular, overriding `log_level`."},"sharedSecret":{"type":["string","null"],"title":"shared_secret","description":"Cluster-wide shared secret used to sign and validate internal requests\n and JWTs across Pomerium services. Must be a base64-encoded 32-byte\n value."},"services":{"type":["string","null"],"title":"services","description":"Comma-separated list of Pomerium services to run in this process\n (\"all\", \"authenticate\", \"authorize\", \"databroker\", \"proxy\")."},"address":{"type":["string","null"],"title":"address","description":"IP address and port for serving HTTPS requests (e.g. \":443\")."},"insecureServer":{"type":["boolean","null"],"title":"insecure_server","description":"When true, Pomerium serves HTTP without TLS. Intended only for testing\n behind a TLS-terminating load balancer."},"dnsFailureRefreshRate":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_failure_refresh_rate","description":"How long Envoy waits before retrying a failed DNS resolution."},"dnsLookupFamily":{"type":["string","null"],"title":"dns_lookup_family","description":"Envoy DNS lookup family (\"AUTO\", \"V4_ONLY\", \"V6_ONLY\", \"V4_PREFERRED\",\n \"ALL\"). Controls which address families Envoy resolves."},"dnsQueryTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_query_timeout","description":"Maximum time Envoy waits for a single DNS query to return."},"dnsQueryTries":{"type":["integer","null"],"title":"dns_query_tries","description":"Number of times Envoy retries a failed DNS query before giving up."},"dnsRefreshRate":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_refresh_rate","description":"How often Envoy refreshes resolved addresses regardless of TTL."},"dnsUdpMaxQueries":{"type":["integer","null"],"title":"dns_udp_max_queries","description":"Maximum number of in-flight DNS queries Envoy will multiplex over a\n single UDP socket."},"dnsUseTcp":{"type":["boolean","null"],"title":"dns_use_tcp","description":"When true, Envoy resolves DNS over TCP instead of UDP."},"certificates":{"type":"array","items":{"type":"object","properties":{"certBytes":{"type":"string","title":"cert_bytes","format":"byte","description":"PEM-encoded certificate chain."},"keyBytes":{"type":"string","title":"key_bytes","format":"byte","description":"PEM-encoded private key matching `cert_bytes`."},"id":{"type":"string","title":"id","description":"Optional identifier for the certificate, used to refer to it from\n other parts of the configuration."}},"title":"Certificate","additionalProperties":false,"description":"An inline TLS certificate/key pair Pomerium serves for matching SNI\n hostnames."},"title":"certificates","description":"Inline TLS certificate/key pairs Pomerium serves. Each entry is matched\n against the request's SNI hostname."},"certificateKeyPairIds":{"type":"array","items":{"type":"string"},"title":"certificate_key_pair_ids","description":"IDs of managed key pairs to serve as TLS certificates, as an alternative\n to inline `certificates` entries."},"httpRedirectAddr":{"type":["string","null"],"title":"http_redirect_addr","description":"Address (host:port) on which Pomerium listens for plaintext HTTP and\n issues a redirect to the HTTPS address. Empty disables the redirect\n listener."},"timeoutRead":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_read","description":"Maximum time the proxy will wait for a complete request from a\n downstream client."},"timeoutWrite":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_write","description":"Maximum time the proxy will wait to send a complete response to a\n downstream client."},"timeoutIdle":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_idle","description":"Maximum idle time on a kept-alive connection before it is closed."},"authenticateServiceUrl":{"type":["string","null"],"title":"authenticate_service_url","description":"Externally accessible URL for the authenticate service."},"authenticateInternalServiceUrl":{"type":["string","null"],"title":"authenticate_internal_service_url","description":"URL Pomerium uses internally to reach the authenticate service. Set\n when the externally visible URL goes through a load balancer that\n proxies cannot reuse."},"signoutRedirectUrl":{"type":["string","null"],"title":"signout_redirect_url","description":"URL to redirect users to after they sign out."},"cookieName":{"type":["string","null"],"title":"cookie_name","description":"Name of the session cookie Pomerium issues. Defaults to \"_pomerium\"."},"cookieSecret":{"type":["string","null"],"title":"cookie_secret","description":"Secret used to encrypt and sign session cookies. Must be a\n base64-encoded 32-byte value."},"cookieDomain":{"type":["string","null"],"title":"cookie_domain","description":"Domain set on the session cookie. Pomerium defaults to the\n authenticate service URL host."},"cookieHttpOnly":{"type":["boolean","null"],"title":"cookie_http_only","description":"When true the session cookie carries the HttpOnly attribute."},"cookieExpire":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"cookie_expire","description":"How long an issued session cookie remains valid."},"cookieSameSite":{"type":["string","null"],"title":"cookie_same_site","description":"SameSite attribute of the session cookie (\"strict\", \"lax\", \"none\")."},"idpClientId":{"type":["string","null"],"title":"idp_client_id","description":"OAuth2 client ID for the identity provider."},"idpClientSecret":{"type":["string","null"],"title":"idp_client_secret","description":"OAuth2 client secret for the identity provider."},"idpProvider":{"type":["string","null"],"title":"idp_provider","description":"Identity provider name (\"oidc\", \"okta\", \"auth0\", \"google\", \"azure\", …).\n Selects which IdP integration Pomerium uses."},"idpProviderUrl":{"type":["string","null"],"title":"idp_provider_url","description":"OIDC issuer URL of the identity provider."},"idpAccessTokenAllowedAudiences":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"idp_access_token_allowed_audiences","description":"Audiences Pomerium accepts on IdP-issued access tokens. Required when\n BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN routes exist."},"scopes":{"type":"array","items":{"type":"string"},"title":"scopes","description":"OIDC scopes Pomerium requests when authenticating users."},"requestParams":{"type":"object","title":"request_params","additionalProperties":{"type":"string","title":"value"},"description":"Additional query parameters Pomerium appends to the IdP authorization\n request."},"authorizeServiceUrls":{"type":"array","items":{"type":"string"},"title":"authorize_service_urls","description":"Externally accessible URLs for the authorize service."},"authorizeInternalServiceUrl":{"type":["string","null"],"title":"authorize_internal_service_url","description":"URL Pomerium uses internally to reach the authorize service."},"overrideCertificateName":{"type":["string","null"],"title":"override_certificate_name","description":"Hostname Pomerium expects in upstream TLS certificates. Useful when\n upstream addresses are IPs but the certificate contains a hostname SAN."},"certificateAuthority":{"type":["string","null"],"title":"certificate_authority","description":"PEM-encoded certificate authority bundle Pomerium trusts for upstream\n TLS verification."},"certificateAuthorityKeyPairId":{"type":["string","null"],"title":"certificate_authority_key_pair_id","description":"ID of a managed key pair whose certificate is used as the upstream CA\n bundle, as an alternative to the inline `certificate_authority` value."},"deriveTls":{"type":["string","null"],"title":"derive_tls","description":"Base hostname Pomerium uses to derive default TLS certificates for\n routes. Empty disables derivation."},"signingKey":{"type":["string","null"],"title":"signing_key","description":"Private key Pomerium uses to sign internally issued JWTs (e.g. the JWT\n attached to upstream requests). Must be a PEM-encoded key."},"setResponseHeaders":{"type":"object","title":"set_response_headers","additionalProperties":{"type":"string","title":"value"},"description":"Headers Pomerium sets on every response across all routes."},"jwtClaimsHeaders":{"type":"object","title":"jwt_claims_headers","additionalProperties":{"type":"string","title":"value"},"description":"Map of header name to JWT claim. Pomerium copies the claim value from\n the session JWT to the named header on upstream requests."},"jwtIssuerFormat":{"oneOf":[{"type":"string","title":"IssuerFormat","enum":["IssuerHostOnly","IssuerURI"],"description":"Format used for the `iss` claim of JWTs Pomerium issues for upstream\n requests."},{"type":"null"}],"title":"jwt_issuer_format","description":"Format of the `iss` claim in JWTs Pomerium issues for upstream\n requests."},"jwtGroupsFilter":{"type":"array","items":{"type":"string"},"title":"jwt_groups_filter","description":"Allowlist of group IDs/names; the JWT Pomerium issues includes only\n groups appearing here. Empty means include all."},"jwtGroupsFilterInferFromPpl":{"type":["boolean","null"],"title":"jwt_groups_filter_infer_from_ppl","description":"When true the effective `jwt_groups_filter` is augmented with groups\n referenced by route PPL policies."},"bearerTokenFormat":{"oneOf":[{"type":"string","title":"BearerTokenFormat","enum":["BEARER_TOKEN_FORMAT_UNKNOWN","BEARER_TOKEN_FORMAT_DEFAULT","BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN","BEARER_TOKEN_FORMAT_IDP_IDENTITY_TOKEN"],"description":"Controls how HTTP bearer token authentication is handled."},{"type":"null"}],"title":"bearer_token_format","description":"Cluster-wide default for how to interpret HTTP bearer tokens. Routes\n may override per-route."},"defaultUpstreamTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"default_upstream_timeout","description":"Default per-request timeout applied to upstream HTTP requests when a\n route does not specify its own."},"debugAddress":{"type":["string","null"],"title":"debug_address","description":"Address (host:port) on which Pomerium exposes its pprof debug\n endpoints. Empty disables them."},"metricsAddress":{"type":["string","null"],"title":"metrics_address","description":"Address (host:port) on which Pomerium serves Prometheus metrics."},"metricsBasicAuth":{"type":["string","null"],"title":"metrics_basic_auth","description":"HTTP Basic Auth credentials required to access `metrics_address`, of\n the form \"user:password\". Empty disables auth."},"metricsCertificate":{"oneOf":[{"type":"object","properties":{"certBytes":{"type":"string","title":"cert_bytes","format":"byte","description":"PEM-encoded certificate chain."},"keyBytes":{"type":"string","title":"key_bytes","format":"byte","description":"PEM-encoded private key matching `cert_bytes`."},"id":{"type":"string","title":"id","description":"Optional identifier for the certificate, used to refer to it from\n other parts of the configuration."}},"title":"Certificate","additionalProperties":false,"description":"An inline TLS certificate/key pair Pomerium serves for matching SNI\n hostnames."},{"type":"null"}],"title":"metrics_certificate","description":"TLS certificate/key pair Pomerium uses on the metrics listener."},"metricsClientCa":{"type":["string","null"],"title":"metrics_client_ca","description":"PEM-encoded CA bundle used to authenticate clients connecting to the\n metrics listener."},"metricsClientCaKeyPairId":{"type":["string","null"],"title":"metrics_client_ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the metrics\n client CA bundle, as an alternative to `metrics_client_ca`."},"otelTracesExporter":{"type":["string","null"],"title":"otel_traces_exporter","description":"Which OpenTelemetry traces exporter to use (\"otlp\", \"none\", …). Empty\n disables tracing."},"otelTracesSamplerArg":{"type":["number","null"],"title":"otel_traces_sampler_arg","format":"double","description":"OpenTelemetry sampler argument. For ratio-based samplers this is the\n sampling probability (0.0–1.0)."},"otelResourceAttributes":{"type":"array","items":{"type":"string"},"title":"otel_resource_attributes","description":"OpenTelemetry resource attributes appended to every emitted span/log,\n as \"key=value\" strings."},"otelLogLevel":{"type":["string","null"],"title":"otel_log_level","description":"Log level for the OpenTelemetry SDK itself."},"otelAttributeValueLengthLimit":{"type":["integer","null"],"title":"otel_attribute_value_length_limit","format":"int32","description":"Maximum length of a single OpenTelemetry attribute value before it is\n truncated."},"otelExporterOtlpEndpoint":{"type":["string","null"],"title":"otel_exporter_otlp_endpoint","description":"Default OTLP endpoint Pomerium dials for any OTLP exporter (traces,\n logs) when no signal-specific endpoint is set."},"otelExporterOtlpTracesEndpoint":{"type":["string","null"],"title":"otel_exporter_otlp_traces_endpoint","description":"OTLP endpoint specifically for traces; overrides\n `otel_exporter_otlp_endpoint` for the trace signal."},"otelExporterOtlpProtocol":{"type":["string","null"],"title":"otel_exporter_otlp_protocol","description":"OTLP transport protocol (\"grpc\" or \"http/protobuf\")."},"otelExporterOtlpTracesProtocol":{"type":["string","null"],"title":"otel_exporter_otlp_traces_protocol","description":"OTLP transport protocol used specifically for traces."},"otelExporterOtlpHeaders":{"type":"array","items":{"type":"string"},"title":"otel_exporter_otlp_headers","description":"Headers attached to every OTLP request, as \"key=value\" strings (e.g.\n for tenant identification)."},"otelExporterOtlpTracesHeaders":{"type":"array","items":{"type":"string"},"title":"otel_exporter_otlp_traces_headers","description":"OTLP headers used specifically for traces."},"otelExporterOtlpTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_exporter_otlp_timeout","description":"Per-request timeout for the OTLP exporter."},"otelExporterOtlpTracesTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_exporter_otlp_traces_timeout","description":"Per-request timeout used specifically for the OTLP traces exporter."},"otelBspScheduleDelay":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_bsp_schedule_delay","description":"Delay between scheduled batches of spans the BatchSpanProcessor\n exports."},"otelBspMaxExportBatchSize":{"type":["integer","null"],"title":"otel_bsp_max_export_batch_size","format":"int32","description":"Maximum number of spans per export batch."},"grpcAddress":{"type":["string","null"],"title":"grpc_address","description":"Address (host:port) on which Pomerium serves its gRPC API."},"grpcInsecure":{"type":["boolean","null"],"title":"grpc_insecure","description":"When true, Pomerium speaks plaintext gRPC instead of TLS. Intended for\n co-located service deployments behind a trusted network boundary."},"grpcClientTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"grpc_client_timeout","description":"Per-request timeout applied to gRPC client calls Pomerium makes to its\n own services (authorize, databroker)."},"databrokerClusterLeaderId":{"type":["string","null"],"title":"databroker_cluster_leader_id","description":"Node ID of the databroker Raft leader, as observed by this process."},"databrokerClusterNodeId":{"type":["string","null"],"title":"databroker_cluster_node_id","description":"Node ID this process uses when participating in the databroker\n cluster."},"databrokerClusterNodes":{"oneOf":[{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"Stable identifier of the node within the cluster."},"grpcAddress":{"type":"string","title":"grpc_address","description":"gRPC service address (host:port) other components dial to reach this\n databroker node."},"raftAddress":{"type":["string","null"],"title":"raft_address","description":"Raft transport address (host:port) used for peer-to-peer replication."}},"title":"DataBrokerClusterNode","additionalProperties":false,"description":"One peer in a Pomerium databroker Raft cluster."},"title":"nodes","description":"Every node participating in the databroker cluster."}},"title":"DataBrokerClusterNodes","additionalProperties":false,"description":"Aggregate list of databroker cluster peers."},{"type":"null"}],"title":"databroker_cluster_nodes","description":"Full membership list of the databroker cluster."},"databrokerServiceUrls":{"type":"array","items":{"type":"string"},"title":"databroker_service_urls","description":"Externally accessible URLs for the databroker service."},"databrokerInternalServiceUrl":{"type":["string","null"],"title":"databroker_internal_service_url","description":"URL Pomerium uses internally to reach the databroker service."},"databrokerRaftBindAddress":{"type":["string","null"],"title":"databroker_raft_bind_address","description":"Bind address (host:port) for this node's Raft transport."},"databrokerStorageType":{"type":["string","null"],"title":"databroker_storage_type","description":"Backing-store type for the databroker (\"memory\", \"postgres\", …)."},"databrokerStorageConnectionString":{"type":["string","null"],"title":"databroker_storage_connection_string","description":"Connection string for the databroker storage backend, when applicable."},"downstreamMtls":{"oneOf":[{"type":"object","properties":{"ca":{"type":["string","null"],"title":"ca","description":"PEM-encoded certificate authority bundle used to verify client\n certificates."},"crl":{"type":["string","null"],"title":"crl","description":"PEM-encoded certificate revocation list checked against client\n certificates."},"enforcement":{"oneOf":[{"type":"string","title":"MtlsEnforcementMode","enum":["UNKNOWN","POLICY","POLICY_WITH_DEFAULT_DENY","REJECT_CONNECTION"],"description":"Represents a client certificate enforcement behavior."},{"type":"null"}],"title":"enforcement","description":"How aggressively client certificate requirements are enforced."},"matchSubjectAltNames":{"type":"array","items":{"type":"object","properties":{"sanType":{"title":"san_type","description":"Which SAN entry type this pattern applies to.","type":"string","enum":["SAN_TYPE_UNSPECIFIED","EMAIL","DNS","URI","IP_ADDRESS","USER_PRINCIPAL_NAME"]},"pattern":{"type":"string","title":"pattern","description":"Regular expression the SAN value must fully match."}},"title":"SANMatcher","additionalProperties":false,"description":"SANMatcher describes a constraint against one Subject Alternative Name\n entry in a client certificate."},"title":"match_subject_alt_names","description":"Patterns the certificate Subject Alternative Names must satisfy for the\n connection to be allowed."},"maxVerifyDepth":{"type":["integer","null"],"title":"max_verify_depth","description":"Maximum depth of the verification chain accepted from clients. Zero\n means use Envoy's default."},"caKeyPairId":{"type":["string","null"],"title":"ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the client CA,\n as an alternative to the inline `ca` value."}},"title":"DownstreamMtlsSettings","additionalProperties":false,"description":"DownstreamMtlsSettings controls how Pomerium validates client certificates\n presented by downstream (end-user) connections."},{"type":"null"}],"title":"downstream_mtls","description":"Downstream (end-user) mTLS validation configuration."},"googleCloudServerlessAuthenticationServiceAccount":{"type":["string","null"],"title":"google_cloud_serverless_authentication_service_account","description":"Google Cloud service account email Pomerium uses to obtain ID tokens\n for Cloud Run / serverless upstream targets."},"useProxyProtocol":{"type":["boolean","null"],"title":"use_proxy_protocol","description":"When true, Pomerium expects downstream connections to begin with the\n HAProxy PROXY protocol header (v1 or v2)."},"autocert":{"type":["boolean","null"],"title":"autocert","description":"When true, Pomerium uses ACME to automatically obtain and renew TLS\n certificates for the configured route hostnames."},"autocertCa":{"type":["string","null"],"title":"autocert_ca","description":"Directory URL of the ACME CA to use when `autocert` is enabled."},"autocertCaKeyPairId":{"type":["string","null"],"title":"autocert_ca_key_pair_id","description":"ID of a managed key pair whose certificate Pomerium presents to the\n ACME CA for account binding."},"autocertEmail":{"type":["string","null"],"title":"autocert_email","description":"Email address Pomerium registers with the ACME CA. Required by most\n CAs for expiration notifications."},"autocertUseStaging":{"type":["boolean","null"],"title":"autocert_use_staging","description":"When true, Pomerium uses Let's Encrypt's staging environment. Useful\n for testing to avoid hitting rate limits."},"autocertEabKeyId":{"type":["string","null"],"title":"autocert_eab_key_id","description":"External Account Binding key identifier provided by the ACME CA."},"autocertEabMacKey":{"type":["string","null"],"title":"autocert_eab_mac_key","description":"Base64-URL-encoded EAB MAC key paired with `autocert_eab_key_id`."},"autocertMustStaple":{"type":["boolean","null"],"title":"autocert_must_staple","description":"When true, Pomerium requests certificates with the OCSP Must-Staple\n extension."},"autocertDir":{"type":["string","null"],"title":"autocert_dir","description":"Filesystem directory Pomerium uses to cache obtained certificates and\n ACME account state."},"autocertTrustedCa":{"type":["string","null"],"title":"autocert_trusted_ca","description":"PEM-encoded CA bundle Pomerium trusts when validating the ACME CA's\n own TLS certificate, for private ACME servers."},"autocertTrustedCaKeyPairId":{"type":["string","null"],"title":"autocert_trusted_ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the trusted CA\n for the ACME server, as an alternative to `autocert_trusted_ca`."},"skipXffAppend":{"type":["boolean","null"],"title":"skip_xff_append","description":"When true, Pomerium does not append the immediate client IP to the\n X-Forwarded-For header on upstream requests."},"xffNumTrustedHops":{"type":["integer","null"],"title":"xff_num_trusted_hops","description":"Number of trusted hops Pomerium considers when extracting the\n client IP from the X-Forwarded-For header."},"envoyAdminAccessLogPath":{"type":["string","null"],"title":"envoy_admin_access_log_path","description":"Path to which Envoy writes admin-interface access logs. Empty\n disables admin-access logging."},"envoyAdminProfilePath":{"type":["string","null"],"title":"envoy_admin_profile_path","description":"Path to which Envoy writes pprof profiles when requested via the\n admin interface."},"envoyAdminAddress":{"type":["string","null"],"title":"envoy_admin_address","description":"Address (host:port) on which Envoy exposes its admin interface.\n Empty disables the admin interface."},"envoyBindConfigSourceAddress":{"type":["string","null"],"title":"envoy_bind_config_source_address","description":"Source address Envoy binds when connecting to upstreams."},"envoyBindConfigFreebind":{"type":["boolean","null"],"title":"envoy_bind_config_freebind","description":"When true, Envoy's upstream connections set IP_FREEBIND, allowing\n binding to non-local addresses."},"programmaticRedirectDomainWhitelist":{"type":"array","items":{"type":"string"},"title":"programmatic_redirect_domain_whitelist","description":"Hostnames Pomerium allows in programmatic-login redirect URLs."},"codecType":{"oneOf":[{"type":"string","title":"CodecType","enum":["CODEC_TYPE_AUTO","CODEC_TYPE_HTTP1","CODEC_TYPE_HTTP2","CODEC_TYPE_HTTP3"],"description":"CodecType defines the codec type to use for connections."},{"type":"null"}],"title":"codec_type","description":"Default HTTP codec used for downstream connections."},"primaryColor":{"type":["string","null"],"title":"primary_color","description":"Primary brand color (hex string like \"#1e88e5\") used in the\n Pomerium-served sign-in and error pages."},"secondaryColor":{"type":["string","null"],"title":"secondary_color","description":"Secondary brand color (hex string)."},"darkmodePrimaryColor":{"type":["string","null"],"title":"darkmode_primary_color","description":"Primary brand color used in dark mode."},"darkmodeSecondaryColor":{"type":["string","null"],"title":"darkmode_secondary_color","description":"Secondary brand color used in dark mode."},"logoUrl":{"type":["string","null"],"title":"logo_url","description":"URL of the logo image displayed on Pomerium-served pages."},"faviconUrl":{"type":["string","null"],"title":"favicon_url","description":"URL of the favicon used on Pomerium-served pages."},"errorMessageFirstParagraph":{"type":["string","null"],"title":"error_message_first_paragraph","description":"First paragraph of the error message Pomerium shows on access denied\n pages, before the auto-generated diagnostic text."},"passIdentityHeaders":{"type":["boolean","null"],"title":"pass_identity_headers","description":"When true, Pomerium adds X-Pomerium-* identity headers to upstream\n requests in addition to the signed JWT."},"runtimeFlags":{"type":"object","title":"runtime_flags","additionalProperties":{"type":"boolean","title":"value"},"description":"Per-flag boolean overrides for Pomerium runtime feature gates. The\n set of supported keys evolves with the release."},"http3AdvertisePort":{"type":["integer","null"],"title":"http3_advertise_port","description":"Port advertised in the Alt-Svc header so clients can upgrade to HTTP/3\n (QUIC). Zero disables advertisement."},"circuitBreakerThresholds":{"oneOf":[{"type":"object","properties":{"maxConnections":{"type":["integer","null"],"title":"max_connections","description":"The maximum number of connections that Envoy will make to the upstream\n cluster. If not specified, the default is 1024."},"maxPendingRequests":{"type":["integer","null"],"title":"max_pending_requests","description":"The maximum number of pending requests that Envoy will allow to the\n upstream cluster. If not specified, the default is 1024. This limit is\n applied as a connection limit for non-HTTP traffic."},"maxRequests":{"type":["integer","null"],"title":"max_requests","description":"The maximum number of parallel requests that Envoy will make to the\n upstream cluster. If not specified, the default is 1024. This limit does\n not apply to non-HTTP traffic."},"maxRetries":{"type":["integer","null"],"title":"max_retries","description":"The maximum number of parallel retries that Envoy will allow to the\n upstream cluster. If not specified, the default is 3."},"maxConnectionPools":{"type":["integer","null"],"title":"max_connection_pools","description":"The maximum number of connection pools per cluster that Envoy will\n concurrently support at once. If not specified, the default is unlimited.\n Set this for clusters which create a large number of connection pools."}},"title":"CircuitBreakerThresholds","additionalProperties":false,"description":"CircuitBreakerThresholds defines CircuitBreaker settings."},{"type":"null"}],"title":"circuit_breaker_thresholds","description":"Default upstream circuit-breaker thresholds applied to all routes\n unless overridden per route."},"sshAddress":{"type":["string","null"],"title":"ssh_address","description":"Address (host:port) on which Pomerium listens for SSH traffic.\n Empty disables the SSH proxy."},"sshHostKeyFiles":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"ssh_host_key_files","description":"Paths to host-key files Pomerium reads at startup to authenticate\n itself to SSH clients."},"sshHostKeys":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"ssh_host_keys","description":"Inline SSH host keys, used in place of `ssh_host_key_files`."},"sshHostKeyPairIds":{"type":"array","items":{"type":"string"},"title":"ssh_host_key_pair_ids","description":"IDs of managed key pairs to use as SSH host keys, as an alternative\n to file or inline values."},"sshUserCaKeyFile":{"type":["string","null"],"title":"ssh_user_ca_key_file","description":"Path to a file containing the SSH user-CA private key Pomerium uses\n to issue short-lived SSH user certificates."},"sshUserCaKey":{"type":["string","null"],"title":"ssh_user_ca_key","description":"Inline SSH user-CA private key, used in place of\n `ssh_user_ca_key_file`."},"sshUserCaKeyPairId":{"type":["string","null"],"title":"ssh_user_ca_key_pair_id","description":"ID of a managed key pair to use as the SSH user-CA key, as an\n alternative to file or inline values."},"mcpAllowedClientIdDomains":{"type":"array","items":{"type":"string"},"title":"mcp_allowed_client_id_domains","description":"mcp_allowed_client_id_domains specifies the allowed domains for MCP client ID metadata URLs.\n Supports wildcard patterns like \"*.example.com\".\n This is REQUIRED when MCP is enabled - client metadata fetching will fail if empty."},"mcpAllowedAsMetadataDomains":{"type":"array","items":{"type":"string"},"title":"mcp_allowed_as_metadata_domains","description":"mcp_allowed_as_metadata_domains specifies the allowed domains for upstream AS/PRM metadata URLs.\n Supports wildcard patterns like \"*.example.com\".\n This restricts which domains Pomerium will contact during upstream OAuth discovery."},"directoryProvider":{"type":["string","null"],"title":"directory_provider","description":"Directory-sync provider Pomerium uses to enumerate users and groups\n (\"auth0\", \"okta\", \"azure\", …). Empty disables directory sync."},"directoryProviderOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"description":"Represents a JSON object.\n\n An unordered key-value map, intending to perfectly capture the semantics of a\n JSON object. This enables parsing any arbitrary JSON payload as a message\n field in ProtoJSON format.\n\n This follows RFC 8259 guidelines for interoperable JSON: notably this type\n cannot represent large Int64 values or `NaN`/`Infinity` numbers,\n since the JSON format generally does not support those values in its number\n type.\n\n If you do not intend to parse arbitrary JSON into your message, a custom\n typed message should be preferred instead of using this type.","title":"google.protobuf.Struct"},{"type":"null"}],"title":"directory_provider_options","description":"Provider-specific options for the directory provider, as a generic\n JSON object."},"directoryProviderRefreshInterval":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"directory_provider_refresh_interval","description":"How often Pomerium refreshes the directory cache."},"directoryProviderRefreshTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"directory_provider_refresh_timeout","description":"Per-attempt timeout for a single directory refresh cycle."},"blobStorage":{"oneOf":[{"type":"object","properties":{"bucketUri":{"type":["string","null"],"title":"bucket_uri","description":"URI of the object-storage bucket (e.g. \"s3://my-bucket\",\n \"gs://my-bucket\"). Empty disables blob storage."},"managedPrefix":{"type":["string","null"],"title":"managed_prefix","description":"Optional path prefix within the bucket where Pomerium stores managed\n objects, isolating them from other tenants of the same bucket."}},"title":"BlobStorageSettings","additionalProperties":false,"description":"BlobStorageSettings configures the object-storage backend Pomerium uses\n for large artifacts such as session recordings."},{"type":"null"}],"title":"blob_storage","description":"Object-storage backend Pomerium uses for large artifacts (session\n recordings, exports). Empty disables blob storage."},"autoApplyChangesets":{"type":["boolean","null"],"title":"auto_apply_changesets","description":"auto_apply_changesets controls whether or not changesets are automatically\n applied or require an adminstrator to apply them. This setting is\n currently only used in Pomerium Zero."},"allowUpgrades":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"allow_upgrades","description":"Allows HTTP upgrade requests to be forwarded upstream."},"envoyDynamicExtensions":{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},"sessionRecordingConcurrency":{"type":["integer","null"],"title":"session_recording_concurrency","description":"Tunes the maximum number of worker threads that envoy allocates for session recording\n uploading"},"normalizePath":{"type":["boolean","null"],"title":"normalize_path","description":"Should paths be normalized according to RFC 3986 before any processing of\n requests by HTTP filters or routing? Defaults to true."},"mergeSlashes":{"type":["boolean","null"],"title":"merge_slashes","description":"Determines if adjacent slashes in the path are merged into one before any\n processing of requests by HTTP filters or routing. Defaults to true."},"pathWithEscapedSlashesAction":{"oneOf":[{"type":"string","title":"PathWithEscapedSlashesAction","enum":["PATH_WITH_ESCAPED_SLASHES_ACTION_UNKNOWN","PATH_WITH_ESCAPED_SLASHES_ACTION_KEEP_UNCHANGED","PATH_WITH_ESCAPED_SLASHES_ACTION_REJECT_REQUEST","PATH_WITH_ESCAPED_SLASHES_ACTION_UNESCAPE_AND_REDIRECT","PATH_WITH_ESCAPED_SLASHES_ACTION_UNESCAPE_AND_FORWARD"],"description":"PathWithEscapedSlashesAction determines the action for request that contain\n %2F, %2f, %5C or %5c sequences in the URI path."},{"type":"null"}],"title":"path_with_escaped_slashes_action","description":"Action to take when request URL path contains escaped slash sequences\n (%2F, %2f, %5C and %5c). Defaults to rejecting requests."},"headersWithUnderscoresAction":{"oneOf":[{"type":"string","title":"HeadersWithUnderscoresAction","enum":["HEADERS_WITH_UNDERSCORES_ACTION_UNKNOWN","HEADERS_WITH_UNDERSCORES_ACTION_ALLOW","HEADERS_WITH_UNDERSCORES_ACTION_REJECT_REQUEST","HEADERS_WITH_UNDERSCORES_ACTION_DROP_HEADER"],"description":"Action to take when Envoy receives client request with header names containing underscore characters."},{"type":"null"}],"title":"headers_with_underscores_action","description":"Action to take when a client request with a header name containing\n underscore characters is received. Defaults to rejecting the request."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true}},"additionalProperties":false}},"title":"GetSettingsResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-get-settings.api.mdx b/content/docs/api/pomerium-config-config-service-get-settings.api.mdx new file mode 100644 index 000000000..3d289264d --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-get-settings.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-get-settings +title: "GetSettings" +description: "Gets settings" +sidebar_label: "GetSettings" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Gets settings + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-available-log-fields.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-list-available-log-fields.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-available-log-fields.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-available-log-fields.RequestSchema.json b/content/docs/api/pomerium-config-config-service-list-available-log-fields.RequestSchema.json new file mode 100644 index 000000000..3aecfdbdf --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-available-log-fields.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","title":"ListAvailableLogFieldsRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-available-log-fields.StatusCodes.json b/content/docs/api/pomerium-config-config-service-list-available-log-fields.StatusCodes.json new file mode 100644 index 000000000..ebf6af2b2 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-available-log-fields.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"availableAccessLogFields":{"type":"array","items":{"type":"string"},"title":"available_access_log_fields","description":"All access-log field names that may appear in `Settings.access_log_fields`."},"availableAuthorizeLogFields":{"type":"array","items":{"type":"string"},"title":"available_authorize_log_fields","description":"All authorize-log field names that may appear in\n `Settings.authorize_log_fields`."},"defaultAccessLogFields":{"type":"array","items":{"type":"string"},"title":"default_access_log_fields","description":"The default access-log field set Pomerium uses when\n `Settings.access_log_fields` is unset."},"defaultAuthorizeLogFields":{"type":"array","items":{"type":"string"},"title":"default_authorize_log_fields","description":"The default authorize-log field set Pomerium uses when\n `Settings.authorize_log_fields` is unset."}},"title":"ListAvailableLogFieldsResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-available-log-fields.api.mdx b/content/docs/api/pomerium-config-config-service-list-available-log-fields.api.mdx new file mode 100644 index 000000000..7be09bcdd --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-available-log-fields.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-list-available-log-fields +title: "ListAvailableLogFields" +description: "Lists all the available log fields" +sidebar_label: "ListAvailableLogFields" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Lists all the available log fields + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-key-pairs.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-list-key-pairs.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-key-pairs.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-key-pairs.RequestSchema.json b/content/docs/api/pomerium-config-config-service-list-key-pairs.RequestSchema.json new file mode 100644 index 000000000..386efb82d --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-key-pairs.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"offset":{"type":["integer","string","null"],"title":"offset","format":"int64","description":"Zero-based index of the first record to return; combine with `limit` to\n page through results."},"limit":{"type":["integer","string","null"],"title":"limit","format":"int64","description":"Maximum number of records to return in this page. The server clamps\n very large values; callers should not depend on the exact ceiling."},"filter":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"description":"Represents a JSON object.\n\n An unordered key-value map, intending to perfectly capture the semantics of a\n JSON object. This enables parsing any arbitrary JSON payload as a message\n field in ProtoJSON format.\n\n This follows RFC 8259 guidelines for interoperable JSON: notably this type\n cannot represent large Int64 values or `NaN`/`Infinity` numbers,\n since the JSON format generally does not support those values in its number\n type.\n\n If you do not intend to parse arbitrary JSON into your message, a custom\n typed message should be preferred instead of using this type.","title":"google.protobuf.Struct"},{"type":"null"}],"title":"filter","description":"Optional structured filter expression. The accepted shape is\n service-specific; see the Pomerium console for examples."},"orderBy":{"type":["string","null"],"title":"order_by","description":"Sort expression, e.g. \"modified_at desc\". Empty for service default\n ordering."}},"title":"ListKeyPairsRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-key-pairs.StatusCodes.json b/content/docs/api/pomerium-config-config-service-list-key-pairs.StatusCodes.json new file mode 100644 index 000000000..821a3d721 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-key-pairs.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"keyPairs":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"examples":["019e8e96-0959-7dc2-b45f-e32dcafcf95b"],"title":"id","description":"ID of the key pair."},"namespaceId":{"type":["string","null"],"examples":["019e8e96-87b4-78b9-9830-19874b518d60"],"title":"namespace_id","description":"Namespace of the key pair."},"originatorId":{"type":["string","null"],"examples":["your-custom-app"],"title":"originator_id","description":"Originator of the key pair."},"name":{"type":["string","null"],"examples":["TLS Certificate for www.example.com"],"title":"name","description":"The name of the key pair."},"certificate":{"type":["string","null"],"examples":["-----BEGIN CERTIFICATE-----\nEXAMPLE\n-----END CERTIFICATE-----"],"title":"certificate","format":"byte","description":"The key pair certificate raw bytes."},"key":{"type":["string","null"],"examples":["-----BEGIN EC PRIVATE KEY-----\nEXAMPLE\n-----END EC PRIVATE KEY-----"],"title":"key","format":"byte","description":"The key pair private key raw bytes."},"createdAt":{"title":"created_at","description":"When the key pair was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the key pair was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"status":{"title":"status","description":"The status of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_STATUS_UNKNOWN","KEY_PAIR_STATUS_READY","KEY_PAIR_STATUS_PENDING"]},"origin":{"title":"origin","description":"The origin of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_ORIGIN_UNKNOWN","KEY_PAIR_ORIGIN_USER","KEY_PAIR_ORIGIN_SYSTEM"]},"certificateInfo":{"type":"array","items":{"type":"object","properties":{"version":{"type":["integer","string"],"title":"version","format":"int64","description":"X.509 certificate format version (3 for modern certificates)."},"serial":{"type":"string","title":"serial","description":"Certificate serial number, formatted as a decimal integer string."},"issuer":{"title":"issuer","description":"Issuer distinguished name (the CA that signed this certificate).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"subject":{"title":"subject","description":"Subject distinguished name (the identity the certificate vouches for).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"notBefore":{"title":"not_before","description":"First instant the certificate is valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"notAfter":{"title":"not_after","description":"First instant the certificate is no longer valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"keyUsage":{"title":"key_usage","description":"Decoded KeyUsage and ExtKeyUsage extensions on the certificate.","type":"object","properties":{"digitalSignature":{"type":"boolean","title":"digital_signature","description":"Certificate authorizes verifying digital signatures."},"contentCommitment":{"type":"boolean","title":"content_commitment","description":"Certificate authorizes non-repudiation of signed data."},"keyEncipherment":{"type":"boolean","title":"key_encipherment","description":"Certificate authorizes key transport (encryption of session keys)."},"dataEncipherment":{"type":"boolean","title":"data_encipherment","description":"Certificate authorizes direct encryption of arbitrary data."},"keyAgreement":{"type":"boolean","title":"key_agreement","description":"Certificate authorizes Diffie-Hellman style key agreement."},"certSign":{"type":"boolean","title":"cert_sign","description":"Certificate authorizes signing other certificates (CA)."},"crlSign":{"type":"boolean","title":"crl_sign","description":"Certificate authorizes signing certificate revocation lists."},"encipherOnly":{"type":"boolean","title":"encipher_only","description":"With key_agreement, restricts use to encipherment only."},"decipherOnly":{"type":"boolean","title":"decipher_only","description":"With key_agreement, restricts use to decipherment only."},"serverAuth":{"type":"boolean","title":"server_auth","description":"Extended usage: server authentication (TLS server certificates)."},"clientAuth":{"type":"boolean","title":"client_auth","description":"Extended usage: client authentication (TLS client certificates)."}},"additionalProperties":false},"dnsNames":{"type":"array","items":{"type":"string"},"title":"dns_names","description":"DNS names in the Subject Alternative Name extension."},"emailAddresses":{"type":"array","items":{"type":"string"},"title":"email_addresses","description":"Email addresses in the Subject Alternative Name extension."},"ipAddresses":{"type":"array","items":{"type":"string"},"title":"ip_addresses","description":"IP addresses in the Subject Alternative Name extension, formatted as\n strings (IPv4 dotted-decimal or IPv6 colon-hex)."},"uris":{"type":"array","items":{"type":"string"},"title":"uris","description":"URIs in the Subject Alternative Name extension."},"permittedDnsDomainsCritical":{"type":"boolean","title":"permitted_dns_domains_critical","description":"When true the permitted/excluded DNS-domain name-constraints are marked\n critical and clients must understand them or reject the certificate."},"permittedDnsDomains":{"type":"array","items":{"type":"string"},"title":"permitted_dns_domains","description":"Name constraints: DNS domains the certificate is permitted to assert."},"excludedDnsDomains":{"type":"array","items":{"type":"string"},"title":"excluded_dns_domains","description":"Name constraints: DNS domains the certificate must not assert."},"permittedIpRanges":{"type":"array","items":{"type":"string"},"title":"permitted_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate is permitted to assert."},"excludedIpRanges":{"type":"array","items":{"type":"string"},"title":"excluded_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate must not assert."},"permittedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"permitted_email_addresses","description":"Name constraints: email addresses (or domains) the certificate is\n permitted to assert."},"excludedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"excluded_email_addresses","description":"Name constraints: email addresses (or domains) the certificate must not\n assert."},"permittedUriDomains":{"type":"array","items":{"type":"string"},"title":"permitted_uri_domains","description":"Name constraints: URI domains the certificate is permitted to assert."},"excludedUriDomains":{"type":"array","items":{"type":"string"},"title":"excluded_uri_domains","description":"Name constraints: URI domains the certificate must not assert."}},"title":"CertificateInfo","additionalProperties":false,"description":"CertificateInfo is a .proto reflection of\n https://golang.org/pkg/crypto/x509/#Certificate"},"title":"certificate_info","description":"Info about any certificates the key pair has.","readOnly":true}},"title":"KeyPair","additionalProperties":false,"description":"A KeyPair represents a public / private key pair."},"title":"key_pairs","description":"Page of key pairs matching the request."},"totalCount":{"type":["integer","string"],"title":"total_count","format":"int64","description":"Total number of key pairs that match the request across all pages,\n independent of `limit`/`offset`."}},"title":"ListKeyPairsResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-key-pairs.api.mdx b/content/docs/api/pomerium-config-config-service-list-key-pairs.api.mdx new file mode 100644 index 000000000..6b831a2f3 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-key-pairs.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-list-key-pairs +title: "ListKeyPairs" +description: "Lists key pairs" +sidebar_label: "ListKeyPairs" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Lists key pairs + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-policies.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-list-policies.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-policies.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-policies.RequestSchema.json b/content/docs/api/pomerium-config-config-service-list-policies.RequestSchema.json new file mode 100644 index 000000000..c19272589 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-policies.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"offset":{"type":["integer","string","null"],"title":"offset","format":"int64","description":"Zero-based index of the first record to return."},"limit":{"type":["integer","string","null"],"title":"limit","format":"int64","description":"Maximum number of records to return in this page."},"filter":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"description":"Represents a JSON object.\n\n An unordered key-value map, intending to perfectly capture the semantics of a\n JSON object. This enables parsing any arbitrary JSON payload as a message\n field in ProtoJSON format.\n\n This follows RFC 8259 guidelines for interoperable JSON: notably this type\n cannot represent large Int64 values or `NaN`/`Infinity` numbers,\n since the JSON format generally does not support those values in its number\n type.\n\n If you do not intend to parse arbitrary JSON into your message, a custom\n typed message should be preferred instead of using this type.","title":"google.protobuf.Struct"},{"type":"null"}],"title":"filter","description":"Optional structured filter expression."},"orderBy":{"type":["string","null"],"title":"order_by","description":"Sort expression, e.g. \"name asc\"."}},"title":"ListPoliciesRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-policies.StatusCodes.json b/content/docs/api/pomerium-config-config-service-list-policies.StatusCodes.json new file mode 100644 index 000000000..b5d467d23 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-policies.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"policies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"title":"Policy","additionalProperties":false,"description":"Configuration for a policy."},"title":"policies","description":"Page of policies matching the request."},"totalCount":{"type":["integer","string"],"title":"total_count","format":"int64","description":"Total number of policies matching the request across all pages."}},"title":"ListPoliciesResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-policies.api.mdx b/content/docs/api/pomerium-config-config-service-list-policies.api.mdx new file mode 100644 index 000000000..75ede8fbb --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-policies.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-list-policies +title: "ListPolicies" +description: "Lists policies" +sidebar_label: "ListPolicies" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Lists policies + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-routes.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-list-routes.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-routes.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-routes.RequestSchema.json b/content/docs/api/pomerium-config-config-service-list-routes.RequestSchema.json new file mode 100644 index 000000000..60c2863f8 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-routes.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"offset":{"type":["integer","string","null"],"title":"offset","format":"int64","description":"Zero-based index of the first record to return."},"limit":{"type":["integer","string","null"],"title":"limit","format":"int64","description":"Maximum number of records to return in this page."},"filter":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"description":"Represents a JSON object.\n\n An unordered key-value map, intending to perfectly capture the semantics of a\n JSON object. This enables parsing any arbitrary JSON payload as a message\n field in ProtoJSON format.\n\n This follows RFC 8259 guidelines for interoperable JSON: notably this type\n cannot represent large Int64 values or `NaN`/`Infinity` numbers,\n since the JSON format generally does not support those values in its number\n type.\n\n If you do not intend to parse arbitrary JSON into your message, a custom\n typed message should be preferred instead of using this type.","title":"google.protobuf.Struct"},{"type":"null"}],"title":"filter","description":"Optional structured filter expression."},"orderBy":{"type":["string","null"],"title":"order_by","description":"Sort expression, e.g. \"name asc\"."}},"title":"ListRoutesRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-routes.StatusCodes.json b/content/docs/api/pomerium-config-config-service-list-routes.StatusCodes.json new file mode 100644 index 000000000..5866feadf --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-routes.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"routes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The id of the route."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"The namespace id of the route."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"The originator id of the route."},"name":{"type":["string","null"],"title":"name","description":"The name of the route."},"statName":{"type":["string","null"],"title":"stat_name","description":"The name used for stats telemetry with the route."},"description":{"type":["string","null"],"title":"description","description":"A human-readable description of the route."},"logoUrl":{"type":["string","null"],"title":"logo_url","description":"A URL for a logo for the route."},"from":{"type":"string","title":"from","description":"The externally accessible URL for a proxied HTTP request."},"to":{"type":"array","items":{"type":"string"},"title":"to","description":"The destination(s) of a proxied request."},"redirect":{"title":"redirect","description":"Indicates that a route should be redirected.","type":"object","properties":{"httpsRedirect":{"type":["boolean","null"],"title":"https_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n \"https\"."},"schemeRedirect":{"type":["string","null"],"title":"scheme_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n the given value."},"hostRedirect":{"type":["string","null"],"title":"host_redirect","description":"Indicates that the incoming host of a request will be swapped with\n the given value."},"portRedirect":{"type":["integer","null"],"title":"port_redirect","description":"Indicates that the incoming port of a request will be swapped with\n the given value."},"pathRedirect":{"type":["string","null"],"title":"path_redirect","description":"Indicates that the incoming path portion of a request URL will be\n swapped with the given value."},"prefixRewrite":{"type":["string","null"],"title":"prefix_rewrite","description":"Indicates that the incoming matched path prefix portion of a request\n URL will be swapped with the given value."},"responseCode":{"type":["integer","null"],"title":"response_code","format":"int32","description":"The response code used for the redirect. Defaults to 301."},"stripQuery":{"type":["boolean","null"],"title":"strip_query","description":"Indicates that during redirection, the query portion of the URL will\n be removed. Defaults to false."}},"additionalProperties":false},"response":{"title":"response","description":"Indicates that a route should return a direct response.","type":"object","properties":{"status":{"type":"integer","title":"status","description":"The status code that Pomerium returns for a static HTTP response.\n For example, 200."},"body":{"type":"string","title":"body","description":"The response body that Pomerium returns for a static HTTP\n response."}},"additionalProperties":false},"loadBalancingWeights":{"type":"array","items":{"type":"integer"},"title":"load_balancing_weights","description":"Optional load balancing weights for upstream servers defined in to.\n If not specified, all upstream servers are assigned the same weight.\n If provided, len(to) must equal len(load_balancing_weights)."},"allowedUsers":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_users","description":"Grants access to the route if the logged-in user's ID matches one of the\n given values. Deprecated in favor of the PPL user criterion.","deprecated":true},"allowedDomains":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_domains","description":"Grants access to the route if the logged-in user's email address is for\n one of the given values. Deprecated in favor of the PPL domain criterion.","deprecated":true},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access to the route if the logged-in user's session/user claims\n match one of the given values. Deprecated in favor of the PPL claim\n criterion.","deprecated":true},"prefix":{"type":"string","title":"prefix","description":"Only match requests that have a path that begins with the given prefix."},"path":{"type":"string","title":"path","description":"Only match requests whose path is an exact match for the given path."},"regex":{"type":"string","title":"regex","description":"Only match requests whose path matches the given regular expression."},"prefixRewrite":{"type":"string","title":"prefix_rewrite","description":"Indicates that when a request is forwarded, the matched prefix (or path)\n will be swapped with this value."},"regexRewritePattern":{"type":"string","title":"regex_rewrite_pattern","description":"A regular expression used to rewrite the path of a forwarded request."},"regexRewriteSubstitution":{"type":"string","title":"regex_rewrite_substitution","description":"When a regular expression pattern is set, what the matched pattern will\n be replaced with."},"regexPriorityOrder":{"type":["integer","string","null"],"title":"regex_priority_order","format":"int64","description":"Determines the ordering of routes that use regular expressions."},"corsAllowPreflight":{"type":"boolean","title":"cors_allow_preflight","description":"Indicates that OPTIONS requests used for CORS can pass through\n unauthenticated."},"allowPublicUnauthenticatedAccess":{"type":"boolean","title":"allow_public_unauthenticated_access","description":"Grants access to a route without requiring any authentication."},"allowAnyAuthenticatedUser":{"type":"boolean","title":"allow_any_authenticated_user","description":"Grants access to a route for any logged-in user."},"timeout":{"title":"timeout","description":"The per-route request timeout option. Cannot exceed global values.","type":"string","format":"duration"},"idleTimeout":{"title":"idle_timeout","description":"The per-route request timeout for a connection that is idle with\n no data exchange.","type":"string","format":"duration"},"allowWebsockets":{"type":"boolean","title":"allow_websockets","description":"Allow websocket requests. Also disables the default route timeout."},"allowSpdy":{"type":"boolean","title":"allow_spdy","description":"Allow SPDY protocol upgrade requests."},"tlsSkipVerify":{"type":"boolean","title":"tls_skip_verify","description":"Indicates that pomerium should perform no verification on upstream\n TLS connections. Any certificate for any hostname will be accepted."},"tlsServerName":{"type":"string","title":"tls_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence.","deprecated":true},"tlsUpstreamServerName":{"type":"string","title":"tls_upstream_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence."},"tlsDownstreamServerName":{"type":"string","title":"tls_downstream_server_name","description":"The server name indication (SNI) for downstream TLS connections."},"tlsCustomCa":{"type":"string","title":"tls_custom_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates of upstream TLS connections."},"tlsCustomCaFile":{"type":"string","title":"tls_custom_ca_file","description":"A file containing root certificate authorities (in PEM format)\n used to verify certificates of upstream TLS connections."},"tlsCustomCaKeyPairId":{"type":["string","null"],"title":"tls_custom_ca_key_pair_id","description":"A reference to a key pair containing root certificate authorities (in PEM\n format) used to verify certificates of upstream TLS connections."},"tlsClientCert":{"type":"string","title":"tls_client_cert","description":"The client certificate to present to upstream TLS connections for\n mTLS."},"tlsClientKey":{"type":"string","title":"tls_client_key","description":"The private key for the client certificate to present to upstream\n TLS connections for mTLS."},"tlsClientCertFile":{"type":"string","title":"tls_client_cert_file","description":"A file containing the client certificate to present to upstream TLS\n connections for mTLS."},"tlsClientKeyFile":{"type":"string","title":"tls_client_key_file","description":"A file containing the private key for the client certificate to\n present to upstream TLS connections for mTLS."},"tlsClientKeyPairId":{"type":["string","null"],"title":"tls_client_key_pair_id","description":"A reference to the key pair containing the client certificate\n and private key to present to upstream TLS connections for mTLS."},"tlsDownstreamClientCa":{"type":"string","title":"tls_downstream_client_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaFile":{"type":"string","title":"tls_downstream_client_ca_file","description":"A file containing the root certificate authorities (in PEM format) used to\n verify certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaKeyPairId":{"type":["string","null"],"title":"tls_downstream_client_ca_key_pair_id","description":"A reference to a key pair containing the root certificate authorities (in\n PEM format) used to verify certificates for downstream TLS connections. If\n specified downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsUpstreamAllowRenegotiation":{"type":"boolean","title":"tls_upstream_allow_renegotiation","description":"Controls whether server-initiated TLS renegotiation is allowed for\n upstream servers."},"setRequestHeaders":{"type":"object","title":"set_request_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set both static and dynamic headers for upstream requests.\n Static values can be useful if you want to pass along additional\n information to upstream applications as headers, or to set a fixed\n authentication header on the request. Dynamic values enable you to pass\n ID and Access tokens from your identity provider to upstream\n applications. The following dynamic header values are supported:\n\n - ${pomerium.access_token}: OAuth access token from the identity provider.\n - ${pomerium.client_cert_fingerprint}: Short-form SHA-256 fingerprint of the presented client certificate.\n - ${pomerium.id_token}: OIDC ID token from the identity provider.\n - ${pomerium.jwt}: The Pomerium assertion JWT for the logged-in user."},"removeRequestHeaders":{"type":"array","items":{"type":"string"},"title":"remove_request_headers","description":"Headers to remove from upstream requests. This can be useful if you want to\n prevent privacy information from being passed to upstream applications."},"setResponseHeaders":{"type":"object","title":"set_response_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set static values for the given downstream response headers.\n These headers will take precedence over the global set_response_headers."},"rewriteResponseHeaders":{"type":"array","items":{"type":"object","allOf":[{"properties":{"header":{"type":"string","title":"header","description":"The name of the response header to rewrite (case-insensitive)."},"value":{"type":"string","title":"value","description":"The new value (or replacement substring, when `prefix` is set) to write\n back to the header."}}},{"oneOf":[{"type":"object","properties":{"prefix":{"type":"string","title":"prefix","description":"Only the portion of the header value that begins with this literal\n prefix is replaced; the remainder is kept."}},"title":"prefix","required":["prefix"]}]}],"title":"RouteRewriteHeader","additionalProperties":false,"description":"A rewrite rule applied to a single response header before the response is\n returned to the downstream client."},"title":"rewrite_response_headers","description":"Used to modify downstream response headers."},"preserveHostHeader":{"type":"boolean","title":"preserve_host_header","description":"Passes the Host (or :authority) header from the incoming request to the\n upstream service, instead of the Host header from the route's to URL."},"passIdentityHeaders":{"type":["boolean","null"],"title":"pass_identity_headers","description":"Sends identity headers to all upstream applications. Identity headers\n include:\n\n - X-Pomerium-Jwt-Assertion: The pomerium assertion JWT for the logged-in user.\n - X-Pomerium-Claim-*: Each of the claim values specified by the jwt_claim_headers option.\n\n When not set explicitly, the global pass_identity_headers option will be used."},"kubernetesServiceAccountToken":{"type":"string","title":"kubernetes_service_account_token","description":"A Kubernetes service account token used to authenticate to the\n Kubernetes API via Authorization: Bearer and Impersonate-User/Group\n headers."},"kubernetesServiceAccountTokenFile":{"type":"string","title":"kubernetes_service_account_token_file","description":"A file containing a Kubernetes service account token."},"kubernetesServiceAccountTokenKeyPairId":{"type":["string","null"],"title":"kubernetes_service_account_token_key_pair_id","description":"A key pair reference for a Kubernetes service account token."},"enableGoogleCloudServerlessAuthentication":{"type":"boolean","title":"enable_google_cloud_serverless_authentication","description":"Adds an Authorization: Bearer ID_TOKEN header for Google Cloud\n serverless upstream requests."},"jwtIssuerFormat":{"oneOf":[{"type":"string","title":"IssuerFormat","enum":["IssuerHostOnly","IssuerURI"],"description":"Format used for the `iss` claim of JWTs Pomerium issues for upstream\n requests."},{"type":"null"}],"title":"jwt_issuer_format","description":"Controls the format of the iss claim in JWTs passed to upstream\n services by this route."},"jwtGroupsFilter":{"type":"array","items":{"type":"string"},"title":"jwt_groups_filter","description":"Allowlist of group names or IDs to include in the Pomerium JWT for\n this route."},"jwtGroupsFilterInferFromPpl":{"type":["boolean","null"],"title":"jwt_groups_filter_infer_from_ppl","description":"Whether to add JWT groups from any PPL policies.\n Not supported in the open source version of Pomerium."},"bearerTokenFormat":{"oneOf":[{"type":"string","title":"BearerTokenFormat","enum":["BEARER_TOKEN_FORMAT_UNKNOWN","BEARER_TOKEN_FORMAT_DEFAULT","BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN","BEARER_TOKEN_FORMAT_IDP_IDENTITY_TOKEN"],"description":"Controls how HTTP bearer token authentication is handled."},{"type":"null"}],"title":"bearer_token_format","description":"Controls how authorization bearer tokens are interpreted for this\n route. When unset, the global bearer_token_format option is used."},"dependsOn":{"type":"array","items":{"type":"string"},"title":"depends_on","description":"Additional hosts that participate in chained login redirects for\n this route. Up to five hosts are supported."},"policies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"title":"Policy","additionalProperties":false,"description":"Configuration for a policy."},"title":"policies","description":"Structured sub-policies attached to this route."},"pplPolicies":{"type":"array","items":{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},"title":"ppl_policies","description":"PPL policies attached to this route."},"policyIds":{"type":"array","items":{"type":"string"},"title":"policy_ids","description":"IDs of policies assigned to this route."},"hostRewrite":{"type":["string","null"],"title":"host_rewrite","description":"Rewrites the Host or :authority header to a fixed value."},"hostRewriteHeader":{"type":["string","null"],"title":"host_rewrite_header","description":"Rewrites the Host or :authority header using the value of another\n request header."},"hostPathRegexRewritePattern":{"type":["string","null"],"title":"host_path_regex_rewrite_pattern","description":"A regular expression used to rewrite the Host or :authority header\n from the request path."},"hostPathRegexRewriteSubstitution":{"type":["string","null"],"title":"host_path_regex_rewrite_substitution","description":"When host_path_regex_rewrite_pattern is set, what the matched\n pattern will be replaced with to produce the Host header."},"idpClientId":{"type":["string","null"],"title":"idp_client_id","description":"Overrides the global identity provider client ID for this route."},"idpClientSecret":{"type":["string","null"],"title":"idp_client_secret","description":"Overrides the global identity provider client secret for this route."},"idpAccessTokenAllowedAudiences":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"idp_access_token_allowed_audiences","description":"Allowed audiences for validating IdP-issued access tokens for this\n route."},"showErrorDetails":{"type":"boolean","title":"show_error_details","description":"If true, include policy explanation and remediation details in\n authorization error responses."},"mcp":{"oneOf":[{"type":"object","oneOf":[{"type":"object","properties":{"client":{"title":"client","description":"Provides an application with external tokens for MCP server access.","type":"object","additionalProperties":false}},"title":"client","required":["client"]},{"type":"object","properties":{"server":{"title":"server","description":"Indicates that this route fronts an MCP server.","type":"object","properties":{"upstreamOauth2":{"oneOf":[{"type":"object","properties":{"clientId":{"type":"string","title":"client_id","description":"The public identifier for an application."},"clientSecret":{"type":"string","title":"client_secret","description":"The secret known only to the application and the authorization server."},"oauth2Endpoint":{"title":"oauth2_endpoint","description":"The OAuth2 endpoint configuration.","type":"object","properties":{"authUrl":{"type":"string","title":"auth_url","description":"The authorization URL."},"tokenUrl":{"type":"string","title":"token_url","description":"The token URL."},"authStyle":{"oneOf":[{"type":"string","title":"OAuth2AuthStyle","enum":["OAUTH2_AUTH_STYLE_UNSPECIFIED","OAUTH2_AUTH_STYLE_IN_PARAMS","OAUTH2_AUTH_STYLE_IN_HEADER"],"description":"How the OAuth2 client identifies itself to the authorization server when\n fetching tokens."},{"type":"null"}],"title":"auth_style","description":"if unset, auto-detect which authentication\n style the provider wants by trying both ways and caching\n the successful way for the future."}},"additionalProperties":false},"scopes":{"type":"array","items":{"type":"string"},"title":"scopes","description":"Scope to control what data the OAuth2 server returns."},"authorizationUrlParams":{"type":"object","title":"authorization_url_params","additionalProperties":{"type":"string","title":"value"},"description":"Additional parameters to add to authorization requests."}},"title":"UpstreamOAuth2","additionalProperties":false,"description":"Configuration for OAuth2 authorization for an upstream service behind\n Pomerium."},{"type":"null"}],"title":"upstream_oauth2","description":"Specifies that before the request reaches the MCP upstream server,\n it should acquire an OAuth2 token."},"maxRequestBytes":{"type":["integer","null"],"title":"max_request_bytes","description":"The maximum request body size in bytes that can be sent to the MCP\n server (default: 4KiB)."},"path":{"type":["string","null"],"title":"path","description":"The path to append to the URL when returning the server URL in the\n .mcp/routes endpoint. Defaults to \"/\"."},"authorizationServerUrl":{"type":["string","null"],"title":"authorization_server_url","description":"The issuer URL of the upstream authorization server. Used as a fallback\n when PRM (RFC 9728) discovery fails, per the MCP spec's \"abort or use\n pre-configured values\" guidance."}},"additionalProperties":false}},"title":"server","required":["server"]}],"title":"MCP","additionalProperties":false,"description":"Configuration for an MCP route."},{"type":"null"}],"title":"mcp","description":"Model Context Protocol configuration for this route. Requires the\n runtime_flags.mcp feature flag."},"circuitBreakerThresholds":{"oneOf":[{"type":"object","properties":{"maxConnections":{"type":["integer","null"],"title":"max_connections","description":"The maximum number of connections that Envoy will make to the upstream\n cluster. If not specified, the default is 1024."},"maxPendingRequests":{"type":["integer","null"],"title":"max_pending_requests","description":"The maximum number of pending requests that Envoy will allow to the\n upstream cluster. If not specified, the default is 1024. This limit is\n applied as a connection limit for non-HTTP traffic."},"maxRequests":{"type":["integer","null"],"title":"max_requests","description":"The maximum number of parallel requests that Envoy will make to the\n upstream cluster. If not specified, the default is 1024. This limit does\n not apply to non-HTTP traffic."},"maxRetries":{"type":["integer","null"],"title":"max_retries","description":"The maximum number of parallel retries that Envoy will allow to the\n upstream cluster. If not specified, the default is 3."},"maxConnectionPools":{"type":["integer","null"],"title":"max_connection_pools","description":"The maximum number of connection pools per cluster that Envoy will\n concurrently support at once. If not specified, the default is unlimited.\n Set this for clusters which create a large number of connection pools."}},"title":"CircuitBreakerThresholds","additionalProperties":false,"description":"CircuitBreakerThresholds defines CircuitBreaker settings."},{"type":"null"}],"title":"circuit_breaker_thresholds","description":"Circuit breaker thresholds for upstream requests on this route."},"upstreamTunnel":{"oneOf":[{"type":"object","properties":{"sshPolicy":{"oneOf":[{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},{"type":"null"}],"title":"ssh_policy","description":"PPL policy enforced before the SSH tunnel is opened to the upstream."},"sshPolicyRego":{"type":"array","items":{"type":"string"},"title":"ssh_policy_rego","description":"Rego rules evaluated before the SSH tunnel is opened to the upstream."},"sshPolicyId":{"type":["string","null"],"title":"ssh_policy_id","description":"ID of a shared policy whose rules also gate this SSH tunnel."}},"title":"UpstreamTunnel","additionalProperties":false,"description":"Configuration for an upstream tunnel. Applies to routes whose upstream is\n reached through Pomerium's SSH proxy."},{"type":"null"}],"title":"upstream_tunnel","description":"Configuration for reverse tunneling to upstreams for this route."},"outlierDetection":{"oneOf":[{"type":"object","properties":{"consecutive5xx":{"title":"consecutive_5xx","description":"The number of consecutive server-side error responses (for HTTP traffic,\n 5xx responses; for TCP traffic, connection failures; for Redis, failure to\n respond PONG; etc.) before a consecutive 5xx ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"interval":{"title":"interval","description":"The time interval between ejection analysis sweeps. This can result in\n both new ejections as well as hosts being returned to service. Defaults\n to 10000ms or 10s.","type":"string","format":"duration"},"baseEjectionTime":{"title":"base_ejection_time","description":"The base time that a host is ejected for. The real time is equal to the\n base time multiplied by the number of times the host has been ejected and is\n capped by :ref:`max_ejection_time`.\n Defaults to 30000ms or 30s.","type":"string","format":"duration"},"maxEjectionPercent":{"title":"max_ejection_percent","description":"The maximum % of an upstream cluster that can be ejected due to outlier detection. Defaults to 10% .\n Will eject at least one host regardless of the value if :ref:`always_eject_one_host` is enabled.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutive5xx":{"title":"enforcing_consecutive_5xx","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive 5xx. This setting can be used to disable\n ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingSuccessRate":{"title":"enforcing_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics. This setting can be used to\n disable ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateMinimumHosts":{"title":"success_rate_minimum_hosts","description":"The number of hosts in a cluster that must have enough request volume to\n detect success rate outliers. If the number of hosts is less than this\n setting, outlier detection via success rate statistics is not performed\n for any host in the cluster. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateRequestVolume":{"title":"success_rate_request_volume","description":"The minimum number of total requests that must be collected in one\n interval (as defined by the interval duration above) to include this host\n in success rate based outlier detection. If the volume is lower than this\n setting, outlier detection via success rate statistics is not performed\n for that host. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateStdevFactor":{"title":"success_rate_stdev_factor","description":"This factor is used to determine the ejection threshold for success rate\n outlier ejection. The ejection threshold is the difference between the\n mean success rate, and the product of this factor and the standard\n deviation of the mean success rate: mean - (stdev *\n success_rate_stdev_factor). This factor is divided by a thousand to get a\n double. That is, if the desired factor is 1.9, the runtime value should\n be 1900. Defaults to 1900.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"consecutiveGatewayFailure":{"title":"consecutive_gateway_failure","description":"The number of consecutive gateway failures (502, 503, 504 status codes)\n before a consecutive gateway failure ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveGatewayFailure":{"title":"enforcing_consecutive_gateway_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive gateway failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"splitExternalLocalOriginErrors":{"type":"boolean","title":"split_external_local_origin_errors","description":"Determines whether to distinguish local origin failures from external errors. If set to true\n the following configuration parameters are taken into account:\n :ref:`consecutive_local_origin_failure`,\n :ref:`enforcing_consecutive_local_origin_failure`\n and\n :ref:`enforcing_local_origin_success_rate`.\n Defaults to false."},"consecutiveLocalOriginFailure":{"title":"consecutive_local_origin_failure","description":"The number of consecutive locally originated failures before ejection\n occurs. Defaults to 5. Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveLocalOriginFailure":{"title":"enforcing_consecutive_local_origin_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive locally originated failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingLocalOriginSuccessRate":{"title":"enforcing_local_origin_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics for locally originated errors.\n This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageThreshold":{"title":"failure_percentage_threshold","description":"The failure percentage to use when determining failure percentage-based outlier detection. If\n the failure percentage of a given host is greater than or equal to this value, it will be\n ejected. Defaults to 85.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentage":{"title":"enforcing_failure_percentage","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n failure percentage statistics. This setting can be used to disable ejection or to ramp it up\n slowly. Defaults to 0.\n\n [#next-major-version: setting this without setting failure_percentage_threshold should be\n invalid in v4.]","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentageLocalOrigin":{"title":"enforcing_failure_percentage_local_origin","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n local-origin failure percentage statistics. This setting can be used to disable ejection or to\n ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageMinimumHosts":{"title":"failure_percentage_minimum_hosts","description":"The minimum number of hosts in a cluster in order to perform failure percentage-based ejection.\n If the total number of hosts in the cluster is less than this value, failure percentage-based\n ejection will not be performed. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageRequestVolume":{"title":"failure_percentage_request_volume","description":"The minimum number of total requests that must be collected in one interval (as defined by the\n interval duration above) to perform failure percentage-based ejection for this host. If the\n volume is lower than this setting, failure percentage-based ejection will not be performed for\n this host. Defaults to 50.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"maxEjectionTime":{"title":"max_ejection_time","description":"The maximum time that a host is ejected for. See :ref:`base_ejection_time`\n for more information. If not specified, the default value (300000ms or 300s) or\n :ref:`base_ejection_time` value is applied, whatever is larger.","type":"string","format":"duration"},"maxEjectionTimeJitter":{"title":"max_ejection_time_jitter","description":"The maximum amount of jitter to add to the ejection time, in order to prevent\n a 'thundering herd' effect where all proxies try to reconnect to host at the same time.\n See :ref:`max_ejection_time_jitter`\n Defaults to 0s.","type":"string","format":"duration"},"successfulActiveHealthCheckUnejectHost":{"title":"successful_active_health_check_uneject_host","description":"If active health checking is enabled and a host is ejected by outlier detection, a successful active health check\n unejects the host by default and considers it as healthy. Unejection also clears all the outlier detection counters.\n To change this default behavior set this config to ``false`` where active health checking will not uneject the host.\n Defaults to true.","type":"boolean"},"alwaysEjectOneHost":{"title":"always_eject_one_host","description":"If enabled, at least one host is ejected regardless of the value of :ref:`max_ejection_percent`.\n Defaults to false.","type":"boolean"}},"title":"OutlierDetection","additionalProperties":false},{"type":"null"}],"title":"outlier_detection","description":"Passive health checking via outlier detection for upstream hosts on\n this route."},"healthChecks":{"type":"array","items":{"type":"object","allOf":[{"properties":{"timeout":{"title":"timeout","description":"The time to wait for a health check response. If the timeout is reached the\n health check attempt will be considered a failure.","type":"string","format":"duration"},"interval":{"title":"interval","description":"The interval between health checks.","type":"string","format":"duration"},"initialJitter":{"title":"initial_jitter","description":"An optional jitter amount in milliseconds. If specified, Envoy will start health\n checking after for a random time in ms between 0 and initial_jitter. This only\n applies to the first health check.","type":"string","format":"duration"},"intervalJitter":{"title":"interval_jitter","description":"An optional jitter amount in milliseconds. If specified, during every\n interval Envoy will add interval_jitter to the wait time.","type":"string","format":"duration"},"intervalJitterPercent":{"type":"integer","title":"interval_jitter_percent","description":"An optional jitter amount as a percentage of interval_ms. If specified,\n during every interval Envoy will add ``interval_ms`` *\n ``interval_jitter_percent`` / 100 to the wait time.\n\n If interval_jitter_ms and interval_jitter_percent are both set, both of\n them will be used to increase the wait time."},"unhealthyThreshold":{"title":"unhealthy_threshold","description":"The number of unhealthy health checks required before a host is marked\n unhealthy. Note that for ``http`` health checking if a host responds with a code not in\n :ref:`expected_statuses `\n or :ref:`retriable_statuses `,\n this threshold is ignored and the host is considered immediately unhealthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"healthyThreshold":{"title":"healthy_threshold","description":"The number of healthy health checks required before a host is marked\n healthy. Note that during startup, only a single successful health check is\n required to mark a host healthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"altPort":{"title":"alt_port","description":"[#not-implemented-hide:] Non-serving port for health checking.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"reuseConnection":{"title":"reuse_connection","description":"Reuse health check connection between health checks. Default is true.","type":"boolean"},"noTrafficInterval":{"title":"no_traffic_interval","description":"The \"no traffic interval\" is a special health check interval that is used when a cluster has\n never had traffic routed to it. This lower interval allows cluster information to be kept up to\n date, without sending a potentially large amount of active health checking traffic for no\n reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined. Note that this interval takes precedence over\n any other.\n\n The default value for \"no traffic interval\" is 60 seconds.","type":"string","format":"duration"},"noTrafficHealthyInterval":{"title":"no_traffic_healthy_interval","description":"The \"no traffic healthy interval\" is a special health check interval that\n is used for hosts that are currently passing active health checking\n (including new hosts) when the cluster has received no traffic.\n\n This is useful for when we want to send frequent health checks with\n ``no_traffic_interval`` but then revert to lower frequency ``no_traffic_healthy_interval`` once\n a host in the cluster is marked as healthy.\n\n Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined.\n\n If no_traffic_healthy_interval is not set, it will default to the\n no traffic interval and send that interval regardless of health state.","type":"string","format":"duration"},"unhealthyInterval":{"title":"unhealthy_interval","description":"The \"unhealthy interval\" is a health check interval that is used for hosts that are marked as\n unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the\n standard health check interval that is defined.\n\n The default value for \"unhealthy interval\" is the same as \"interval\".","type":"string","format":"duration"},"unhealthyEdgeInterval":{"title":"unhealthy_edge_interval","description":"The \"unhealthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as unhealthy. For subsequent health checks\n Envoy will shift back to using either \"unhealthy interval\" if present or the standard health\n check interval that is defined.\n\n The default value for \"unhealthy edge interval\" is the same as \"unhealthy interval\".","type":"string","format":"duration"},"healthyEdgeInterval":{"title":"healthy_edge_interval","description":"The \"healthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as healthy. For subsequent health checks\n Envoy will shift back to using the standard health check interval that is defined.\n\n The default value for \"healthy edge interval\" is the same as the default interval.","type":"string","format":"duration"},"alwaysLogHealthCheckFailures":{"type":"boolean","title":"always_log_health_check_failures","description":"If set to true, health check failure events will always be logged. If set to false, only the\n initial health check failure event will be logged.\n The default value is false."},"alwaysLogHealthCheckSuccess":{"type":"boolean","title":"always_log_health_check_success","description":"If set to true, health check success events will always be logged. If set to false, only host addition event will be logged\n if it is the first successful health check, or if the healthy threshold is reached.\n The default value is false."},"transportSocketMatchCriteria":{"title":"transport_socket_match_criteria","description":"Optional key/value pairs that will be used to match a transport socket from those specified in the cluster's\n :ref:`tranport socket matches `.\n For example, the following match criteria\n\n .. code-block:: yaml\n\n transport_socket_match_criteria:\n useMTLS: true\n\n Will match the following :ref:`cluster socket match `\n\n .. code-block:: yaml\n\n transport_socket_matches:\n - name: \"useMTLS\"\n match:\n useMTLS: true\n transport_socket:\n name: envoy.transport_sockets.tls\n config: { ... } # tls socket configuration\n\n If this field is set, then for health checks it will supersede an entry of ``envoy.transport_socket`` in the\n :ref:`LbEndpoint.Metadata `.\n This allows using different transport socket capabilities for health checking versus proxying to the\n endpoint.\n\n If the key/values pairs specified do not match any\n :ref:`transport socket matches `,\n the cluster's :ref:`transport socket `\n will be used for health check socket configuration.","type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"}}}},{"oneOf":[{"type":"object","properties":{"grpcHealthCheck":{"title":"grpc_health_check","description":"gRPC health check.","type":"object","properties":{"serviceName":{"type":"string","title":"service_name","description":"An optional service name parameter which will be sent to gRPC service in\n `grpc.health.v1.HealthCheckRequest\n `_.\n message. See `gRPC health-checking overview\n `_ for\n more information."},"authority":{"type":"string","title":"authority","description":"The value of the :authority header in the gRPC health check request. If\n left empty (default value), the name of the cluster this health check is\n associated with will be used. The authority header can be customized for\n a specific endpoint by setting the :ref:`hostname\n `\n field."}},"additionalProperties":false}},"title":"grpc_health_check","required":["grpcHealthCheck"]},{"type":"object","properties":{"httpHealthCheck":{"title":"http_health_check","description":"HTTP health check.","type":"object","properties":{"host":{"type":"string","title":"host","description":"The value of the host header in the HTTP health check request. If\n left empty (default value), the name of the cluster this health check is associated\n with will be used. The host header can be customized for a specific endpoint by setting the\n :ref:`hostname ` field."},"path":{"type":"string","title":"path","description":"Specifies the HTTP path that will be requested during health checking. For example\n ``/healthcheck``."},"send":{"title":"send","description":"HTTP specific payload to be sent as the request body during health checking.\n If specified, the method should support a request body (POST, PUT, PATCH, etc.).","type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"additionalProperties":false},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"Specifies a list of HTTP expected responses to match in the first ``response_buffer_size`` bytes of the response body.\n If it is set, both the expected response check and status code determine the health check.\n When checking the response, “fuzzy” matching is performed such that each payload block must be found,\n and in the order specified, but not necessarily contiguous.\n\n .. note::\n\n It is recommended to set ``response_buffer_size`` based on the total Payload size for efficiency.\n The default buffer size is 1024 bytes when it is not set."},"responseBufferSize":{"title":"response_buffer_size","description":"Specifies the size of response buffer in bytes that is used to Payload match.\n The default value is 1024. Setting to 0 implies that the Payload will be matched against the entire response.","type":"object","properties":{"value":{"type":["integer","string"],"title":"value","format":"int64","description":"The uint64 value."}},"additionalProperties":false},"requestHeadersToRemove":{"type":"array","items":{"type":"string"},"title":"request_headers_to_remove","description":"Specifies a list of HTTP headers that should be removed from each request that is sent to the\n health checked cluster."},"expectedStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"expected_statuses","description":"Specifies a list of HTTP response statuses considered healthy. If provided, replaces default\n 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open\n semantics of :ref:`Int64Range `. The start and end of each\n range are required. Only statuses in the range [100, 600) are allowed."},"retriableStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"retriable_statuses","description":"Specifies a list of HTTP response statuses considered retriable. If provided, responses in this range\n will count towards the configured :ref:`unhealthy_threshold `,\n but will not result in the host being considered immediately unhealthy. Ranges follow half-open semantics of\n :ref:`Int64Range `. The start and end of each range are required.\n Only statuses in the range [100, 600) are allowed. The :ref:`expected_statuses `\n field takes precedence for any range overlaps with this field i.e. if status code 200 is both retriable and expected, a 200 response will\n be considered a successful health check. By default all responses not in\n :ref:`expected_statuses ` will result in\n the host being considered immediately unhealthy i.e. if status code 200 is expected and there are no configured retriable statuses, any\n non-200 response will result in the host being marked unhealthy."},"codecClientType":{"title":"codec_client_type","description":"Use specified application protocol for health checks.","type":"string","enum":["HTTP1","HTTP2","HTTP3"]}},"additionalProperties":false}},"title":"http_health_check","required":["httpHealthCheck"]},{"type":"object","properties":{"tcpHealthCheck":{"title":"tcp_health_check","description":"TCP health check.","type":"object","properties":{"send":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"When checking the response, “fuzzy” matching is performed such that each\n payload block must be found, and in the order specified, but not\n necessarily contiguous."}},"additionalProperties":false}},"title":"tcp_health_check","required":["tcpHealthCheck"]}]}],"title":"HealthCheck","additionalProperties":false,"description":"[#next-free-field: 27]"},"title":"health_checks","description":"Active health checks to run against upstream hosts for this route."},"loadBalancingPolicy":{"oneOf":[{"type":"string","title":"LoadBalancingPolicy","enum":["LOAD_BALANCING_POLICY_UNSPECIFIED","LOAD_BALANCING_POLICY_ROUND_ROBIN","LOAD_BALANCING_POLICY_MAGLEV","LOAD_BALANCING_POLICY_RANDOM","LOAD_BALANCING_POLICY_RING_HASH","LOAD_BALANCING_POLICY_LEAST_REQUEST"],"description":"LoadBalancingPolicy defines the strategy used to balance requests across\n upstream endpoints"},{"type":"null"}],"title":"load_balancing_policy","description":"The load balancing algorithm for upstream endpoints. Options:\n ROUND_ROBIN, RING_HASH, LEAST_REQUEST, RANDOM, MAGLEV."},"healthyPanicThreshold":{"type":["integer","null"],"title":"healthy_panic_threshold","format":"int32","description":"If the percentage of healthy upstream hosts drops below this value,\n traffic will be sent to all hosts regardless of health status."},"allowUpgrades":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"allow_upgrades","description":"Allows HTTP upgrade requests to be forwarded upstream."},"sessionRecording":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Toggle to enable/disable recording for this route."}},"title":"SessionRecording","additionalProperties":false,"description":"SessionRecording defines session recording settings for routes."},{"type":"null"}],"title":"session_recording","description":"Configures session recording behaviour on this route.\n SSH specific."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"enforcedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_policies","description":"Policies that are automatically enforced.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_policies","description":"Info about policies assigned to this route.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the route.","readOnly":true}},"title":"Route","additionalProperties":false,"description":"Configuration for a route."},"title":"routes","description":"Page of routes matching the request."},"totalCount":{"type":["integer","string"],"title":"total_count","format":"int64","description":"Total number of routes matching the request across all pages."}},"title":"ListRoutesResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-routes.api.mdx b/content/docs/api/pomerium-config-config-service-list-routes.api.mdx new file mode 100644 index 000000000..bf153cb7e --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-routes.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-list-routes +title: "ListRoutes" +description: "Lists routes" +sidebar_label: "ListRoutes" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Lists routes + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-service-accounts.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-list-service-accounts.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-service-accounts.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-service-accounts.RequestSchema.json b/content/docs/api/pomerium-config-config-service-list-service-accounts.RequestSchema.json new file mode 100644 index 000000000..5b336f8c2 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-service-accounts.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"offset":{"type":["integer","string","null"],"title":"offset","format":"int64","description":"Zero-based index of the first record to return."},"limit":{"type":["integer","string","null"],"title":"limit","format":"int64","description":"Maximum number of records to return in this page."},"filter":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"description":"Represents a JSON object.\n\n An unordered key-value map, intending to perfectly capture the semantics of a\n JSON object. This enables parsing any arbitrary JSON payload as a message\n field in ProtoJSON format.\n\n This follows RFC 8259 guidelines for interoperable JSON: notably this type\n cannot represent large Int64 values or `NaN`/`Infinity` numbers,\n since the JSON format generally does not support those values in its number\n type.\n\n If you do not intend to parse arbitrary JSON into your message, a custom\n typed message should be preferred instead of using this type.","title":"google.protobuf.Struct"},{"type":"null"}],"title":"filter","description":"Optional structured filter expression."},"orderBy":{"type":["string","null"],"title":"order_by","description":"Sort expression, e.g. \"name asc\"."}},"title":"ListServiceAccountsRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-service-accounts.StatusCodes.json b/content/docs/api/pomerium-config-config-service-list-service-accounts.StatusCodes.json new file mode 100644 index 000000000..ade3d93ea --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-service-accounts.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"serviceAccounts":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"ID of the service account."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"Namespace of the service account."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"Originator of the service account."},"description":{"type":["string","null"],"title":"description","description":"Description of the service account."},"userId":{"type":["string","null"],"title":"user_id","description":"User ID of the service account."},"expiresAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"expires_at","description":"When the service account expires."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"accessedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"}},"title":"ServiceAccount","additionalProperties":false,"description":"A ServiceAccount represents a Pomerium service account."},"title":"service_accounts","description":"Page of service accounts matching the request."},"totalCount":{"type":["integer","string"],"title":"total_count","format":"int64","description":"Total number of service accounts matching the request across all pages."}},"title":"ListServiceAccountsResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-service-accounts.api.mdx b/content/docs/api/pomerium-config-config-service-list-service-accounts.api.mdx new file mode 100644 index 000000000..5b89a0636 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-service-accounts.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-list-service-accounts +title: "ListServiceAccounts" +description: "Lists service accounts" +sidebar_label: "ListServiceAccounts" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Lists service accounts + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-settings.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-list-settings.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-settings.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-settings.RequestSchema.json b/content/docs/api/pomerium-config-config-service-list-settings.RequestSchema.json new file mode 100644 index 000000000..0ff5ad9ad --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-settings.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"offset":{"type":["integer","string","null"],"title":"offset","format":"int64","description":"Zero-based index of the first record to return."},"limit":{"type":["integer","string","null"],"title":"limit","format":"int64","description":"Maximum number of records to return in this page."},"filter":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"description":"Represents a JSON object.\n\n An unordered key-value map, intending to perfectly capture the semantics of a\n JSON object. This enables parsing any arbitrary JSON payload as a message\n field in ProtoJSON format.\n\n This follows RFC 8259 guidelines for interoperable JSON: notably this type\n cannot represent large Int64 values or `NaN`/`Infinity` numbers,\n since the JSON format generally does not support those values in its number\n type.\n\n If you do not intend to parse arbitrary JSON into your message, a custom\n typed message should be preferred instead of using this type.","title":"google.protobuf.Struct"},{"type":"null"}],"title":"filter","description":"Optional structured filter expression."},"orderBy":{"type":["string","null"],"title":"order_by","description":"Sort expression."}},"title":"ListSettingsRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-settings.StatusCodes.json b/content/docs/api/pomerium-config-config-service-list-settings.StatusCodes.json new file mode 100644 index 000000000..5a2dabab6 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-settings.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"settings":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the Settings record."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the Settings record belongs to."},"clusterId":{"type":["string","null"],"title":"cluster_id","description":"ID of the cluster the Settings record applies to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the record originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the Settings record."},"installationId":{"type":["string","null"],"title":"installation_id","description":"Stable identifier for this installation, used in telemetry and\n diagnostics. Generated at first start when unset."},"logLevel":{"type":["string","null"],"title":"log_level","description":"Global log level for Pomerium services (\"debug\", \"info\", \"warn\",\n \"error\"). Empty falls back to \"info\"."},"accessLogFields":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"access_log_fields","description":"Subset of access-log fields to emit. Use\n ListAvailableLogFields.available_access_log_fields to see what's valid;\n unset means the service default."},"authorizeLogFields":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"authorize_log_fields","description":"Subset of authorize-log fields to emit; see ListAvailableLogFields."},"proxyLogLevel":{"type":["string","null"],"title":"proxy_log_level","description":"Log level for the proxy service in particular, overriding `log_level`."},"sharedSecret":{"type":["string","null"],"title":"shared_secret","description":"Cluster-wide shared secret used to sign and validate internal requests\n and JWTs across Pomerium services. Must be a base64-encoded 32-byte\n value."},"services":{"type":["string","null"],"title":"services","description":"Comma-separated list of Pomerium services to run in this process\n (\"all\", \"authenticate\", \"authorize\", \"databroker\", \"proxy\")."},"address":{"type":["string","null"],"title":"address","description":"IP address and port for serving HTTPS requests (e.g. \":443\")."},"insecureServer":{"type":["boolean","null"],"title":"insecure_server","description":"When true, Pomerium serves HTTP without TLS. Intended only for testing\n behind a TLS-terminating load balancer."},"dnsFailureRefreshRate":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_failure_refresh_rate","description":"How long Envoy waits before retrying a failed DNS resolution."},"dnsLookupFamily":{"type":["string","null"],"title":"dns_lookup_family","description":"Envoy DNS lookup family (\"AUTO\", \"V4_ONLY\", \"V6_ONLY\", \"V4_PREFERRED\",\n \"ALL\"). Controls which address families Envoy resolves."},"dnsQueryTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_query_timeout","description":"Maximum time Envoy waits for a single DNS query to return."},"dnsQueryTries":{"type":["integer","null"],"title":"dns_query_tries","description":"Number of times Envoy retries a failed DNS query before giving up."},"dnsRefreshRate":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_refresh_rate","description":"How often Envoy refreshes resolved addresses regardless of TTL."},"dnsUdpMaxQueries":{"type":["integer","null"],"title":"dns_udp_max_queries","description":"Maximum number of in-flight DNS queries Envoy will multiplex over a\n single UDP socket."},"dnsUseTcp":{"type":["boolean","null"],"title":"dns_use_tcp","description":"When true, Envoy resolves DNS over TCP instead of UDP."},"certificates":{"type":"array","items":{"type":"object","properties":{"certBytes":{"type":"string","title":"cert_bytes","format":"byte","description":"PEM-encoded certificate chain."},"keyBytes":{"type":"string","title":"key_bytes","format":"byte","description":"PEM-encoded private key matching `cert_bytes`."},"id":{"type":"string","title":"id","description":"Optional identifier for the certificate, used to refer to it from\n other parts of the configuration."}},"title":"Certificate","additionalProperties":false,"description":"An inline TLS certificate/key pair Pomerium serves for matching SNI\n hostnames."},"title":"certificates","description":"Inline TLS certificate/key pairs Pomerium serves. Each entry is matched\n against the request's SNI hostname."},"certificateKeyPairIds":{"type":"array","items":{"type":"string"},"title":"certificate_key_pair_ids","description":"IDs of managed key pairs to serve as TLS certificates, as an alternative\n to inline `certificates` entries."},"httpRedirectAddr":{"type":["string","null"],"title":"http_redirect_addr","description":"Address (host:port) on which Pomerium listens for plaintext HTTP and\n issues a redirect to the HTTPS address. Empty disables the redirect\n listener."},"timeoutRead":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_read","description":"Maximum time the proxy will wait for a complete request from a\n downstream client."},"timeoutWrite":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_write","description":"Maximum time the proxy will wait to send a complete response to a\n downstream client."},"timeoutIdle":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_idle","description":"Maximum idle time on a kept-alive connection before it is closed."},"authenticateServiceUrl":{"type":["string","null"],"title":"authenticate_service_url","description":"Externally accessible URL for the authenticate service."},"authenticateInternalServiceUrl":{"type":["string","null"],"title":"authenticate_internal_service_url","description":"URL Pomerium uses internally to reach the authenticate service. Set\n when the externally visible URL goes through a load balancer that\n proxies cannot reuse."},"signoutRedirectUrl":{"type":["string","null"],"title":"signout_redirect_url","description":"URL to redirect users to after they sign out."},"cookieName":{"type":["string","null"],"title":"cookie_name","description":"Name of the session cookie Pomerium issues. Defaults to \"_pomerium\"."},"cookieSecret":{"type":["string","null"],"title":"cookie_secret","description":"Secret used to encrypt and sign session cookies. Must be a\n base64-encoded 32-byte value."},"cookieDomain":{"type":["string","null"],"title":"cookie_domain","description":"Domain set on the session cookie. Pomerium defaults to the\n authenticate service URL host."},"cookieHttpOnly":{"type":["boolean","null"],"title":"cookie_http_only","description":"When true the session cookie carries the HttpOnly attribute."},"cookieExpire":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"cookie_expire","description":"How long an issued session cookie remains valid."},"cookieSameSite":{"type":["string","null"],"title":"cookie_same_site","description":"SameSite attribute of the session cookie (\"strict\", \"lax\", \"none\")."},"idpClientId":{"type":["string","null"],"title":"idp_client_id","description":"OAuth2 client ID for the identity provider."},"idpClientSecret":{"type":["string","null"],"title":"idp_client_secret","description":"OAuth2 client secret for the identity provider."},"idpProvider":{"type":["string","null"],"title":"idp_provider","description":"Identity provider name (\"oidc\", \"okta\", \"auth0\", \"google\", \"azure\", …).\n Selects which IdP integration Pomerium uses."},"idpProviderUrl":{"type":["string","null"],"title":"idp_provider_url","description":"OIDC issuer URL of the identity provider."},"idpAccessTokenAllowedAudiences":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"idp_access_token_allowed_audiences","description":"Audiences Pomerium accepts on IdP-issued access tokens. Required when\n BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN routes exist."},"scopes":{"type":"array","items":{"type":"string"},"title":"scopes","description":"OIDC scopes Pomerium requests when authenticating users."},"requestParams":{"type":"object","title":"request_params","additionalProperties":{"type":"string","title":"value"},"description":"Additional query parameters Pomerium appends to the IdP authorization\n request."},"authorizeServiceUrls":{"type":"array","items":{"type":"string"},"title":"authorize_service_urls","description":"Externally accessible URLs for the authorize service."},"authorizeInternalServiceUrl":{"type":["string","null"],"title":"authorize_internal_service_url","description":"URL Pomerium uses internally to reach the authorize service."},"overrideCertificateName":{"type":["string","null"],"title":"override_certificate_name","description":"Hostname Pomerium expects in upstream TLS certificates. Useful when\n upstream addresses are IPs but the certificate contains a hostname SAN."},"certificateAuthority":{"type":["string","null"],"title":"certificate_authority","description":"PEM-encoded certificate authority bundle Pomerium trusts for upstream\n TLS verification."},"certificateAuthorityKeyPairId":{"type":["string","null"],"title":"certificate_authority_key_pair_id","description":"ID of a managed key pair whose certificate is used as the upstream CA\n bundle, as an alternative to the inline `certificate_authority` value."},"deriveTls":{"type":["string","null"],"title":"derive_tls","description":"Base hostname Pomerium uses to derive default TLS certificates for\n routes. Empty disables derivation."},"signingKey":{"type":["string","null"],"title":"signing_key","description":"Private key Pomerium uses to sign internally issued JWTs (e.g. the JWT\n attached to upstream requests). Must be a PEM-encoded key."},"setResponseHeaders":{"type":"object","title":"set_response_headers","additionalProperties":{"type":"string","title":"value"},"description":"Headers Pomerium sets on every response across all routes."},"jwtClaimsHeaders":{"type":"object","title":"jwt_claims_headers","additionalProperties":{"type":"string","title":"value"},"description":"Map of header name to JWT claim. Pomerium copies the claim value from\n the session JWT to the named header on upstream requests."},"jwtIssuerFormat":{"oneOf":[{"type":"string","title":"IssuerFormat","enum":["IssuerHostOnly","IssuerURI"],"description":"Format used for the `iss` claim of JWTs Pomerium issues for upstream\n requests."},{"type":"null"}],"title":"jwt_issuer_format","description":"Format of the `iss` claim in JWTs Pomerium issues for upstream\n requests."},"jwtGroupsFilter":{"type":"array","items":{"type":"string"},"title":"jwt_groups_filter","description":"Allowlist of group IDs/names; the JWT Pomerium issues includes only\n groups appearing here. Empty means include all."},"jwtGroupsFilterInferFromPpl":{"type":["boolean","null"],"title":"jwt_groups_filter_infer_from_ppl","description":"When true the effective `jwt_groups_filter` is augmented with groups\n referenced by route PPL policies."},"bearerTokenFormat":{"oneOf":[{"type":"string","title":"BearerTokenFormat","enum":["BEARER_TOKEN_FORMAT_UNKNOWN","BEARER_TOKEN_FORMAT_DEFAULT","BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN","BEARER_TOKEN_FORMAT_IDP_IDENTITY_TOKEN"],"description":"Controls how HTTP bearer token authentication is handled."},{"type":"null"}],"title":"bearer_token_format","description":"Cluster-wide default for how to interpret HTTP bearer tokens. Routes\n may override per-route."},"defaultUpstreamTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"default_upstream_timeout","description":"Default per-request timeout applied to upstream HTTP requests when a\n route does not specify its own."},"debugAddress":{"type":["string","null"],"title":"debug_address","description":"Address (host:port) on which Pomerium exposes its pprof debug\n endpoints. Empty disables them."},"metricsAddress":{"type":["string","null"],"title":"metrics_address","description":"Address (host:port) on which Pomerium serves Prometheus metrics."},"metricsBasicAuth":{"type":["string","null"],"title":"metrics_basic_auth","description":"HTTP Basic Auth credentials required to access `metrics_address`, of\n the form \"user:password\". Empty disables auth."},"metricsCertificate":{"oneOf":[{"type":"object","properties":{"certBytes":{"type":"string","title":"cert_bytes","format":"byte","description":"PEM-encoded certificate chain."},"keyBytes":{"type":"string","title":"key_bytes","format":"byte","description":"PEM-encoded private key matching `cert_bytes`."},"id":{"type":"string","title":"id","description":"Optional identifier for the certificate, used to refer to it from\n other parts of the configuration."}},"title":"Certificate","additionalProperties":false,"description":"An inline TLS certificate/key pair Pomerium serves for matching SNI\n hostnames."},{"type":"null"}],"title":"metrics_certificate","description":"TLS certificate/key pair Pomerium uses on the metrics listener."},"metricsClientCa":{"type":["string","null"],"title":"metrics_client_ca","description":"PEM-encoded CA bundle used to authenticate clients connecting to the\n metrics listener."},"metricsClientCaKeyPairId":{"type":["string","null"],"title":"metrics_client_ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the metrics\n client CA bundle, as an alternative to `metrics_client_ca`."},"otelTracesExporter":{"type":["string","null"],"title":"otel_traces_exporter","description":"Which OpenTelemetry traces exporter to use (\"otlp\", \"none\", …). Empty\n disables tracing."},"otelTracesSamplerArg":{"type":["number","null"],"title":"otel_traces_sampler_arg","format":"double","description":"OpenTelemetry sampler argument. For ratio-based samplers this is the\n sampling probability (0.0–1.0)."},"otelResourceAttributes":{"type":"array","items":{"type":"string"},"title":"otel_resource_attributes","description":"OpenTelemetry resource attributes appended to every emitted span/log,\n as \"key=value\" strings."},"otelLogLevel":{"type":["string","null"],"title":"otel_log_level","description":"Log level for the OpenTelemetry SDK itself."},"otelAttributeValueLengthLimit":{"type":["integer","null"],"title":"otel_attribute_value_length_limit","format":"int32","description":"Maximum length of a single OpenTelemetry attribute value before it is\n truncated."},"otelExporterOtlpEndpoint":{"type":["string","null"],"title":"otel_exporter_otlp_endpoint","description":"Default OTLP endpoint Pomerium dials for any OTLP exporter (traces,\n logs) when no signal-specific endpoint is set."},"otelExporterOtlpTracesEndpoint":{"type":["string","null"],"title":"otel_exporter_otlp_traces_endpoint","description":"OTLP endpoint specifically for traces; overrides\n `otel_exporter_otlp_endpoint` for the trace signal."},"otelExporterOtlpProtocol":{"type":["string","null"],"title":"otel_exporter_otlp_protocol","description":"OTLP transport protocol (\"grpc\" or \"http/protobuf\")."},"otelExporterOtlpTracesProtocol":{"type":["string","null"],"title":"otel_exporter_otlp_traces_protocol","description":"OTLP transport protocol used specifically for traces."},"otelExporterOtlpHeaders":{"type":"array","items":{"type":"string"},"title":"otel_exporter_otlp_headers","description":"Headers attached to every OTLP request, as \"key=value\" strings (e.g.\n for tenant identification)."},"otelExporterOtlpTracesHeaders":{"type":"array","items":{"type":"string"},"title":"otel_exporter_otlp_traces_headers","description":"OTLP headers used specifically for traces."},"otelExporterOtlpTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_exporter_otlp_timeout","description":"Per-request timeout for the OTLP exporter."},"otelExporterOtlpTracesTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_exporter_otlp_traces_timeout","description":"Per-request timeout used specifically for the OTLP traces exporter."},"otelBspScheduleDelay":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_bsp_schedule_delay","description":"Delay between scheduled batches of spans the BatchSpanProcessor\n exports."},"otelBspMaxExportBatchSize":{"type":["integer","null"],"title":"otel_bsp_max_export_batch_size","format":"int32","description":"Maximum number of spans per export batch."},"grpcAddress":{"type":["string","null"],"title":"grpc_address","description":"Address (host:port) on which Pomerium serves its gRPC API."},"grpcInsecure":{"type":["boolean","null"],"title":"grpc_insecure","description":"When true, Pomerium speaks plaintext gRPC instead of TLS. Intended for\n co-located service deployments behind a trusted network boundary."},"grpcClientTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"grpc_client_timeout","description":"Per-request timeout applied to gRPC client calls Pomerium makes to its\n own services (authorize, databroker)."},"databrokerClusterLeaderId":{"type":["string","null"],"title":"databroker_cluster_leader_id","description":"Node ID of the databroker Raft leader, as observed by this process."},"databrokerClusterNodeId":{"type":["string","null"],"title":"databroker_cluster_node_id","description":"Node ID this process uses when participating in the databroker\n cluster."},"databrokerClusterNodes":{"oneOf":[{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"Stable identifier of the node within the cluster."},"grpcAddress":{"type":"string","title":"grpc_address","description":"gRPC service address (host:port) other components dial to reach this\n databroker node."},"raftAddress":{"type":["string","null"],"title":"raft_address","description":"Raft transport address (host:port) used for peer-to-peer replication."}},"title":"DataBrokerClusterNode","additionalProperties":false,"description":"One peer in a Pomerium databroker Raft cluster."},"title":"nodes","description":"Every node participating in the databroker cluster."}},"title":"DataBrokerClusterNodes","additionalProperties":false,"description":"Aggregate list of databroker cluster peers."},{"type":"null"}],"title":"databroker_cluster_nodes","description":"Full membership list of the databroker cluster."},"databrokerServiceUrls":{"type":"array","items":{"type":"string"},"title":"databroker_service_urls","description":"Externally accessible URLs for the databroker service."},"databrokerInternalServiceUrl":{"type":["string","null"],"title":"databroker_internal_service_url","description":"URL Pomerium uses internally to reach the databroker service."},"databrokerRaftBindAddress":{"type":["string","null"],"title":"databroker_raft_bind_address","description":"Bind address (host:port) for this node's Raft transport."},"databrokerStorageType":{"type":["string","null"],"title":"databroker_storage_type","description":"Backing-store type for the databroker (\"memory\", \"postgres\", …)."},"databrokerStorageConnectionString":{"type":["string","null"],"title":"databroker_storage_connection_string","description":"Connection string for the databroker storage backend, when applicable."},"downstreamMtls":{"oneOf":[{"type":"object","properties":{"ca":{"type":["string","null"],"title":"ca","description":"PEM-encoded certificate authority bundle used to verify client\n certificates."},"crl":{"type":["string","null"],"title":"crl","description":"PEM-encoded certificate revocation list checked against client\n certificates."},"enforcement":{"oneOf":[{"type":"string","title":"MtlsEnforcementMode","enum":["UNKNOWN","POLICY","POLICY_WITH_DEFAULT_DENY","REJECT_CONNECTION"],"description":"Represents a client certificate enforcement behavior."},{"type":"null"}],"title":"enforcement","description":"How aggressively client certificate requirements are enforced."},"matchSubjectAltNames":{"type":"array","items":{"type":"object","properties":{"sanType":{"title":"san_type","description":"Which SAN entry type this pattern applies to.","type":"string","enum":["SAN_TYPE_UNSPECIFIED","EMAIL","DNS","URI","IP_ADDRESS","USER_PRINCIPAL_NAME"]},"pattern":{"type":"string","title":"pattern","description":"Regular expression the SAN value must fully match."}},"title":"SANMatcher","additionalProperties":false,"description":"SANMatcher describes a constraint against one Subject Alternative Name\n entry in a client certificate."},"title":"match_subject_alt_names","description":"Patterns the certificate Subject Alternative Names must satisfy for the\n connection to be allowed."},"maxVerifyDepth":{"type":["integer","null"],"title":"max_verify_depth","description":"Maximum depth of the verification chain accepted from clients. Zero\n means use Envoy's default."},"caKeyPairId":{"type":["string","null"],"title":"ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the client CA,\n as an alternative to the inline `ca` value."}},"title":"DownstreamMtlsSettings","additionalProperties":false,"description":"DownstreamMtlsSettings controls how Pomerium validates client certificates\n presented by downstream (end-user) connections."},{"type":"null"}],"title":"downstream_mtls","description":"Downstream (end-user) mTLS validation configuration."},"googleCloudServerlessAuthenticationServiceAccount":{"type":["string","null"],"title":"google_cloud_serverless_authentication_service_account","description":"Google Cloud service account email Pomerium uses to obtain ID tokens\n for Cloud Run / serverless upstream targets."},"useProxyProtocol":{"type":["boolean","null"],"title":"use_proxy_protocol","description":"When true, Pomerium expects downstream connections to begin with the\n HAProxy PROXY protocol header (v1 or v2)."},"autocert":{"type":["boolean","null"],"title":"autocert","description":"When true, Pomerium uses ACME to automatically obtain and renew TLS\n certificates for the configured route hostnames."},"autocertCa":{"type":["string","null"],"title":"autocert_ca","description":"Directory URL of the ACME CA to use when `autocert` is enabled."},"autocertCaKeyPairId":{"type":["string","null"],"title":"autocert_ca_key_pair_id","description":"ID of a managed key pair whose certificate Pomerium presents to the\n ACME CA for account binding."},"autocertEmail":{"type":["string","null"],"title":"autocert_email","description":"Email address Pomerium registers with the ACME CA. Required by most\n CAs for expiration notifications."},"autocertUseStaging":{"type":["boolean","null"],"title":"autocert_use_staging","description":"When true, Pomerium uses Let's Encrypt's staging environment. Useful\n for testing to avoid hitting rate limits."},"autocertEabKeyId":{"type":["string","null"],"title":"autocert_eab_key_id","description":"External Account Binding key identifier provided by the ACME CA."},"autocertEabMacKey":{"type":["string","null"],"title":"autocert_eab_mac_key","description":"Base64-URL-encoded EAB MAC key paired with `autocert_eab_key_id`."},"autocertMustStaple":{"type":["boolean","null"],"title":"autocert_must_staple","description":"When true, Pomerium requests certificates with the OCSP Must-Staple\n extension."},"autocertDir":{"type":["string","null"],"title":"autocert_dir","description":"Filesystem directory Pomerium uses to cache obtained certificates and\n ACME account state."},"autocertTrustedCa":{"type":["string","null"],"title":"autocert_trusted_ca","description":"PEM-encoded CA bundle Pomerium trusts when validating the ACME CA's\n own TLS certificate, for private ACME servers."},"autocertTrustedCaKeyPairId":{"type":["string","null"],"title":"autocert_trusted_ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the trusted CA\n for the ACME server, as an alternative to `autocert_trusted_ca`."},"skipXffAppend":{"type":["boolean","null"],"title":"skip_xff_append","description":"When true, Pomerium does not append the immediate client IP to the\n X-Forwarded-For header on upstream requests."},"xffNumTrustedHops":{"type":["integer","null"],"title":"xff_num_trusted_hops","description":"Number of trusted hops Pomerium considers when extracting the\n client IP from the X-Forwarded-For header."},"envoyAdminAccessLogPath":{"type":["string","null"],"title":"envoy_admin_access_log_path","description":"Path to which Envoy writes admin-interface access logs. Empty\n disables admin-access logging."},"envoyAdminProfilePath":{"type":["string","null"],"title":"envoy_admin_profile_path","description":"Path to which Envoy writes pprof profiles when requested via the\n admin interface."},"envoyAdminAddress":{"type":["string","null"],"title":"envoy_admin_address","description":"Address (host:port) on which Envoy exposes its admin interface.\n Empty disables the admin interface."},"envoyBindConfigSourceAddress":{"type":["string","null"],"title":"envoy_bind_config_source_address","description":"Source address Envoy binds when connecting to upstreams."},"envoyBindConfigFreebind":{"type":["boolean","null"],"title":"envoy_bind_config_freebind","description":"When true, Envoy's upstream connections set IP_FREEBIND, allowing\n binding to non-local addresses."},"programmaticRedirectDomainWhitelist":{"type":"array","items":{"type":"string"},"title":"programmatic_redirect_domain_whitelist","description":"Hostnames Pomerium allows in programmatic-login redirect URLs."},"codecType":{"oneOf":[{"type":"string","title":"CodecType","enum":["CODEC_TYPE_AUTO","CODEC_TYPE_HTTP1","CODEC_TYPE_HTTP2","CODEC_TYPE_HTTP3"],"description":"CodecType defines the codec type to use for connections."},{"type":"null"}],"title":"codec_type","description":"Default HTTP codec used for downstream connections."},"primaryColor":{"type":["string","null"],"title":"primary_color","description":"Primary brand color (hex string like \"#1e88e5\") used in the\n Pomerium-served sign-in and error pages."},"secondaryColor":{"type":["string","null"],"title":"secondary_color","description":"Secondary brand color (hex string)."},"darkmodePrimaryColor":{"type":["string","null"],"title":"darkmode_primary_color","description":"Primary brand color used in dark mode."},"darkmodeSecondaryColor":{"type":["string","null"],"title":"darkmode_secondary_color","description":"Secondary brand color used in dark mode."},"logoUrl":{"type":["string","null"],"title":"logo_url","description":"URL of the logo image displayed on Pomerium-served pages."},"faviconUrl":{"type":["string","null"],"title":"favicon_url","description":"URL of the favicon used on Pomerium-served pages."},"errorMessageFirstParagraph":{"type":["string","null"],"title":"error_message_first_paragraph","description":"First paragraph of the error message Pomerium shows on access denied\n pages, before the auto-generated diagnostic text."},"passIdentityHeaders":{"type":["boolean","null"],"title":"pass_identity_headers","description":"When true, Pomerium adds X-Pomerium-* identity headers to upstream\n requests in addition to the signed JWT."},"runtimeFlags":{"type":"object","title":"runtime_flags","additionalProperties":{"type":"boolean","title":"value"},"description":"Per-flag boolean overrides for Pomerium runtime feature gates. The\n set of supported keys evolves with the release."},"http3AdvertisePort":{"type":["integer","null"],"title":"http3_advertise_port","description":"Port advertised in the Alt-Svc header so clients can upgrade to HTTP/3\n (QUIC). Zero disables advertisement."},"circuitBreakerThresholds":{"oneOf":[{"type":"object","properties":{"maxConnections":{"type":["integer","null"],"title":"max_connections","description":"The maximum number of connections that Envoy will make to the upstream\n cluster. If not specified, the default is 1024."},"maxPendingRequests":{"type":["integer","null"],"title":"max_pending_requests","description":"The maximum number of pending requests that Envoy will allow to the\n upstream cluster. If not specified, the default is 1024. This limit is\n applied as a connection limit for non-HTTP traffic."},"maxRequests":{"type":["integer","null"],"title":"max_requests","description":"The maximum number of parallel requests that Envoy will make to the\n upstream cluster. If not specified, the default is 1024. This limit does\n not apply to non-HTTP traffic."},"maxRetries":{"type":["integer","null"],"title":"max_retries","description":"The maximum number of parallel retries that Envoy will allow to the\n upstream cluster. If not specified, the default is 3."},"maxConnectionPools":{"type":["integer","null"],"title":"max_connection_pools","description":"The maximum number of connection pools per cluster that Envoy will\n concurrently support at once. If not specified, the default is unlimited.\n Set this for clusters which create a large number of connection pools."}},"title":"CircuitBreakerThresholds","additionalProperties":false,"description":"CircuitBreakerThresholds defines CircuitBreaker settings."},{"type":"null"}],"title":"circuit_breaker_thresholds","description":"Default upstream circuit-breaker thresholds applied to all routes\n unless overridden per route."},"sshAddress":{"type":["string","null"],"title":"ssh_address","description":"Address (host:port) on which Pomerium listens for SSH traffic.\n Empty disables the SSH proxy."},"sshHostKeyFiles":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"ssh_host_key_files","description":"Paths to host-key files Pomerium reads at startup to authenticate\n itself to SSH clients."},"sshHostKeys":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"ssh_host_keys","description":"Inline SSH host keys, used in place of `ssh_host_key_files`."},"sshHostKeyPairIds":{"type":"array","items":{"type":"string"},"title":"ssh_host_key_pair_ids","description":"IDs of managed key pairs to use as SSH host keys, as an alternative\n to file or inline values."},"sshUserCaKeyFile":{"type":["string","null"],"title":"ssh_user_ca_key_file","description":"Path to a file containing the SSH user-CA private key Pomerium uses\n to issue short-lived SSH user certificates."},"sshUserCaKey":{"type":["string","null"],"title":"ssh_user_ca_key","description":"Inline SSH user-CA private key, used in place of\n `ssh_user_ca_key_file`."},"sshUserCaKeyPairId":{"type":["string","null"],"title":"ssh_user_ca_key_pair_id","description":"ID of a managed key pair to use as the SSH user-CA key, as an\n alternative to file or inline values."},"mcpAllowedClientIdDomains":{"type":"array","items":{"type":"string"},"title":"mcp_allowed_client_id_domains","description":"mcp_allowed_client_id_domains specifies the allowed domains for MCP client ID metadata URLs.\n Supports wildcard patterns like \"*.example.com\".\n This is REQUIRED when MCP is enabled - client metadata fetching will fail if empty."},"mcpAllowedAsMetadataDomains":{"type":"array","items":{"type":"string"},"title":"mcp_allowed_as_metadata_domains","description":"mcp_allowed_as_metadata_domains specifies the allowed domains for upstream AS/PRM metadata URLs.\n Supports wildcard patterns like \"*.example.com\".\n This restricts which domains Pomerium will contact during upstream OAuth discovery."},"directoryProvider":{"type":["string","null"],"title":"directory_provider","description":"Directory-sync provider Pomerium uses to enumerate users and groups\n (\"auth0\", \"okta\", \"azure\", …). Empty disables directory sync."},"directoryProviderOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"description":"Represents a JSON object.\n\n An unordered key-value map, intending to perfectly capture the semantics of a\n JSON object. This enables parsing any arbitrary JSON payload as a message\n field in ProtoJSON format.\n\n This follows RFC 8259 guidelines for interoperable JSON: notably this type\n cannot represent large Int64 values or `NaN`/`Infinity` numbers,\n since the JSON format generally does not support those values in its number\n type.\n\n If you do not intend to parse arbitrary JSON into your message, a custom\n typed message should be preferred instead of using this type.","title":"google.protobuf.Struct"},{"type":"null"}],"title":"directory_provider_options","description":"Provider-specific options for the directory provider, as a generic\n JSON object."},"directoryProviderRefreshInterval":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"directory_provider_refresh_interval","description":"How often Pomerium refreshes the directory cache."},"directoryProviderRefreshTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"directory_provider_refresh_timeout","description":"Per-attempt timeout for a single directory refresh cycle."},"blobStorage":{"oneOf":[{"type":"object","properties":{"bucketUri":{"type":["string","null"],"title":"bucket_uri","description":"URI of the object-storage bucket (e.g. \"s3://my-bucket\",\n \"gs://my-bucket\"). Empty disables blob storage."},"managedPrefix":{"type":["string","null"],"title":"managed_prefix","description":"Optional path prefix within the bucket where Pomerium stores managed\n objects, isolating them from other tenants of the same bucket."}},"title":"BlobStorageSettings","additionalProperties":false,"description":"BlobStorageSettings configures the object-storage backend Pomerium uses\n for large artifacts such as session recordings."},{"type":"null"}],"title":"blob_storage","description":"Object-storage backend Pomerium uses for large artifacts (session\n recordings, exports). Empty disables blob storage."},"autoApplyChangesets":{"type":["boolean","null"],"title":"auto_apply_changesets","description":"auto_apply_changesets controls whether or not changesets are automatically\n applied or require an adminstrator to apply them. This setting is\n currently only used in Pomerium Zero."},"allowUpgrades":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"allow_upgrades","description":"Allows HTTP upgrade requests to be forwarded upstream."},"envoyDynamicExtensions":{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},"sessionRecordingConcurrency":{"type":["integer","null"],"title":"session_recording_concurrency","description":"Tunes the maximum number of worker threads that envoy allocates for session recording\n uploading"},"normalizePath":{"type":["boolean","null"],"title":"normalize_path","description":"Should paths be normalized according to RFC 3986 before any processing of\n requests by HTTP filters or routing? Defaults to true."},"mergeSlashes":{"type":["boolean","null"],"title":"merge_slashes","description":"Determines if adjacent slashes in the path are merged into one before any\n processing of requests by HTTP filters or routing. Defaults to true."},"pathWithEscapedSlashesAction":{"oneOf":[{"type":"string","title":"PathWithEscapedSlashesAction","enum":["PATH_WITH_ESCAPED_SLASHES_ACTION_UNKNOWN","PATH_WITH_ESCAPED_SLASHES_ACTION_KEEP_UNCHANGED","PATH_WITH_ESCAPED_SLASHES_ACTION_REJECT_REQUEST","PATH_WITH_ESCAPED_SLASHES_ACTION_UNESCAPE_AND_REDIRECT","PATH_WITH_ESCAPED_SLASHES_ACTION_UNESCAPE_AND_FORWARD"],"description":"PathWithEscapedSlashesAction determines the action for request that contain\n %2F, %2f, %5C or %5c sequences in the URI path."},{"type":"null"}],"title":"path_with_escaped_slashes_action","description":"Action to take when request URL path contains escaped slash sequences\n (%2F, %2f, %5C and %5c). Defaults to rejecting requests."},"headersWithUnderscoresAction":{"oneOf":[{"type":"string","title":"HeadersWithUnderscoresAction","enum":["HEADERS_WITH_UNDERSCORES_ACTION_UNKNOWN","HEADERS_WITH_UNDERSCORES_ACTION_ALLOW","HEADERS_WITH_UNDERSCORES_ACTION_REJECT_REQUEST","HEADERS_WITH_UNDERSCORES_ACTION_DROP_HEADER"],"description":"Action to take when Envoy receives client request with header names containing underscore characters."},{"type":"null"}],"title":"headers_with_underscores_action","description":"Action to take when a client request with a header name containing\n underscore characters is received. Defaults to rejecting the request."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true}},"title":"Settings","additionalProperties":false,"description":"Global Pomerium configuration settings."},"title":"settings","description":"Page of Settings records matching the request."},"totalCount":{"type":["integer","string"],"title":"total_count","format":"int64","description":"Total number of Settings records matching the request across all pages."}},"title":"ListSettingsResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-list-settings.api.mdx b/content/docs/api/pomerium-config-config-service-list-settings.api.mdx new file mode 100644 index 000000000..2fd2af8c5 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-list-settings.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-list-settings +title: "ListSettings" +description: "Lists settings" +sidebar_label: "ListSettings" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Lists settings + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-key-pair.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-update-key-pair.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-key-pair.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-key-pair.RequestSchema.json b/content/docs/api/pomerium-config-config-service-update-key-pair.RequestSchema.json new file mode 100644 index 000000000..e4c4262bf --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-key-pair.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"keyPair":{"type":"object","properties":{"id":{"type":["string","null"],"examples":["019e8e96-0959-7dc2-b45f-e32dcafcf95b"],"title":"id","description":"ID of the key pair."},"namespaceId":{"type":["string","null"],"examples":["019e8e96-87b4-78b9-9830-19874b518d60"],"title":"namespace_id","description":"Namespace of the key pair."},"originatorId":{"type":["string","null"],"examples":["your-custom-app"],"title":"originator_id","description":"Originator of the key pair."},"name":{"type":["string","null"],"examples":["TLS Certificate for www.example.com"],"title":"name","description":"The name of the key pair."},"certificate":{"type":["string","null"],"examples":["-----BEGIN CERTIFICATE-----\nEXAMPLE\n-----END CERTIFICATE-----"],"title":"certificate","format":"byte","description":"The key pair certificate raw bytes."},"key":{"type":["string","null"],"examples":["-----BEGIN EC PRIVATE KEY-----\nEXAMPLE\n-----END EC PRIVATE KEY-----"],"title":"key","format":"byte","description":"The key pair private key raw bytes."},"createdAt":{"title":"created_at","description":"When the key pair was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the key pair was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"status":{"title":"status","description":"The status of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_STATUS_UNKNOWN","KEY_PAIR_STATUS_READY","KEY_PAIR_STATUS_PENDING"]},"origin":{"title":"origin","description":"The origin of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_ORIGIN_UNKNOWN","KEY_PAIR_ORIGIN_USER","KEY_PAIR_ORIGIN_SYSTEM"]},"certificateInfo":{"type":"array","items":{"type":"object","properties":{"version":{"type":["integer","string"],"title":"version","format":"int64","description":"X.509 certificate format version (3 for modern certificates)."},"serial":{"type":"string","title":"serial","description":"Certificate serial number, formatted as a decimal integer string."},"issuer":{"title":"issuer","description":"Issuer distinguished name (the CA that signed this certificate).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"subject":{"title":"subject","description":"Subject distinguished name (the identity the certificate vouches for).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"notBefore":{"title":"not_before","description":"First instant the certificate is valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"notAfter":{"title":"not_after","description":"First instant the certificate is no longer valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"keyUsage":{"title":"key_usage","description":"Decoded KeyUsage and ExtKeyUsage extensions on the certificate.","type":"object","properties":{"digitalSignature":{"type":"boolean","title":"digital_signature","description":"Certificate authorizes verifying digital signatures."},"contentCommitment":{"type":"boolean","title":"content_commitment","description":"Certificate authorizes non-repudiation of signed data."},"keyEncipherment":{"type":"boolean","title":"key_encipherment","description":"Certificate authorizes key transport (encryption of session keys)."},"dataEncipherment":{"type":"boolean","title":"data_encipherment","description":"Certificate authorizes direct encryption of arbitrary data."},"keyAgreement":{"type":"boolean","title":"key_agreement","description":"Certificate authorizes Diffie-Hellman style key agreement."},"certSign":{"type":"boolean","title":"cert_sign","description":"Certificate authorizes signing other certificates (CA)."},"crlSign":{"type":"boolean","title":"crl_sign","description":"Certificate authorizes signing certificate revocation lists."},"encipherOnly":{"type":"boolean","title":"encipher_only","description":"With key_agreement, restricts use to encipherment only."},"decipherOnly":{"type":"boolean","title":"decipher_only","description":"With key_agreement, restricts use to decipherment only."},"serverAuth":{"type":"boolean","title":"server_auth","description":"Extended usage: server authentication (TLS server certificates)."},"clientAuth":{"type":"boolean","title":"client_auth","description":"Extended usage: client authentication (TLS client certificates)."}},"additionalProperties":false},"dnsNames":{"type":"array","items":{"type":"string"},"title":"dns_names","description":"DNS names in the Subject Alternative Name extension."},"emailAddresses":{"type":"array","items":{"type":"string"},"title":"email_addresses","description":"Email addresses in the Subject Alternative Name extension."},"ipAddresses":{"type":"array","items":{"type":"string"},"title":"ip_addresses","description":"IP addresses in the Subject Alternative Name extension, formatted as\n strings (IPv4 dotted-decimal or IPv6 colon-hex)."},"uris":{"type":"array","items":{"type":"string"},"title":"uris","description":"URIs in the Subject Alternative Name extension."},"permittedDnsDomainsCritical":{"type":"boolean","title":"permitted_dns_domains_critical","description":"When true the permitted/excluded DNS-domain name-constraints are marked\n critical and clients must understand them or reject the certificate."},"permittedDnsDomains":{"type":"array","items":{"type":"string"},"title":"permitted_dns_domains","description":"Name constraints: DNS domains the certificate is permitted to assert."},"excludedDnsDomains":{"type":"array","items":{"type":"string"},"title":"excluded_dns_domains","description":"Name constraints: DNS domains the certificate must not assert."},"permittedIpRanges":{"type":"array","items":{"type":"string"},"title":"permitted_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate is permitted to assert."},"excludedIpRanges":{"type":"array","items":{"type":"string"},"title":"excluded_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate must not assert."},"permittedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"permitted_email_addresses","description":"Name constraints: email addresses (or domains) the certificate is\n permitted to assert."},"excludedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"excluded_email_addresses","description":"Name constraints: email addresses (or domains) the certificate must not\n assert."},"permittedUriDomains":{"type":"array","items":{"type":"string"},"title":"permitted_uri_domains","description":"Name constraints: URI domains the certificate is permitted to assert."},"excludedUriDomains":{"type":"array","items":{"type":"string"},"title":"excluded_uri_domains","description":"Name constraints: URI domains the certificate must not assert."}},"title":"CertificateInfo","additionalProperties":false,"description":"CertificateInfo is a .proto reflection of\n https://golang.org/pkg/crypto/x509/#Certificate"},"title":"certificate_info","description":"Info about any certificates the key pair has.","readOnly":true}},"title":"KeyPair","additionalProperties":false,"description":"A KeyPair represents a public / private key pair."},"updateMask":{"oneOf":[{"type":"string","description":"`FieldMask` represents a set of symbolic field paths, for example:\n\n paths: \"f.a\"\n paths: \"f.b.d\"\n\n Here `f` represents a field in some root message, `a` and `b`\n fields in the message found in `f`, and `d` a field found in the\n message in `f.b`.\n\n Field masks are used to specify a subset of fields that should be\n returned by a get operation or modified by an update operation.\n Field masks also have a custom JSON encoding (see below).\n\n # Field Masks in Projections\n\n When used in the context of a projection, a response message or\n sub-message is filtered by the API to only contain those fields as\n specified in the mask. For example, if the mask in the previous\n example is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\n The result will not contain specific values for fields x,y and z\n (their value will be set to the default, and omitted in proto text\n output):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\n A repeated field is not allowed except at the last position of a\n paths string.\n\n If a FieldMask object is not present in a get operation, the\n operation applies to all fields (as if a FieldMask of all fields\n had been specified).\n\n Note that a field mask does not necessarily apply to the\n top-level response message. In case of a REST get operation, the\n field mask applies directly to the response, but in case of a REST\n list operation, the mask instead applies to each individual message\n in the returned resource list. In case of a REST custom method,\n other definitions may be used. Where the mask applies will be\n clearly documented together with its declaration in the API. In\n any case, the effect on the returned resource/resources is required\n behavior for APIs.\n\n # Field Masks in Update Operations\n\n A field mask in update operations specifies which fields of the\n targeted resource are going to be updated. The API is required\n to only change the values of the fields as specified in the mask\n and leave the others untouched. If a resource is passed in to\n describe the updated values, the API ignores the values of all\n fields not covered by the mask.\n\n If a repeated field is specified for an update operation, new values will\n be appended to the existing repeated field in the target resource. Note that\n a repeated field is only allowed in the last position of a `paths` string.\n\n If a sub-message is specified in the last position of the field mask for an\n update operation, then new value will be merged into the existing sub-message\n in the target resource.\n\n For example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\n And an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\n then if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\n then the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\n An implementation may provide options to override this default behavior for\n repeated and message fields.\n\n Note that libraries which implement FieldMask resolution have various\n different behaviors in the face of empty masks or the special \"*\" mask.\n When implementing a service you should confirm these cases have the\n appropriate behavior in the underlying FieldMask library that you desire,\n and you may need to special case those cases in your application code if\n the underlying field mask library behavior differs from your intended\n service semantics.\n\n Update methods implementing https://google.aip.dev/134\n - MUST support the special value * meaning \"full replace\"\n - MUST treat an omitted field mask as \"replace fields which are present\".\n\n Other methods implementing https://google.aip.dev/157\n - SHOULD support the special value \"*\" to mean \"get all\".\n - MUST treat an omitted field mask to mean \"get all\", unless otherwise\n documented.\n\n ## Considerations for HTTP REST\n\n The HTTP kind of an update operation which uses a field mask must\n be set to PATCH instead of PUT in order to satisfy HTTP semantics\n (PUT must only be used for full updates).\n\n # JSON Encoding of Field Masks\n\n In JSON, a field mask is encoded as a single string where paths are\n separated by a comma. Fields name in each path are converted\n to/from lower-camel naming conventions.\n\n As an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\n In proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\n In JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n # Field Masks and Oneof Fields\n\n Field masks treat fields in oneofs just as regular fields. Consider the\n following message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\n The field mask can be:\n\n mask {\n paths: \"name\"\n }\n\n Or:\n\n mask {\n paths: \"sub_message\"\n }\n\n Note that oneof type names (\"test_oneof\" in this case) cannot be used in\n paths.\n\n ## Field Mask Verification\n\n The implementation of any API method which has a FieldMask type field in the\n request should verify the included field paths, and return an\n `INVALID_ARGUMENT` error if any path is unmappable.","title":"google.protobuf.FieldMask"},{"type":"null"}],"title":"update_mask","description":"Optional update_mask to only update a subset of the fields."}},"title":"UpdateKeyPairRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-key-pair.StatusCodes.json b/content/docs/api/pomerium-config-config-service-update-key-pair.StatusCodes.json new file mode 100644 index 000000000..9570ed0d5 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-key-pair.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"keyPair":{"type":"object","properties":{"id":{"type":["string","null"],"examples":["019e8e96-0959-7dc2-b45f-e32dcafcf95b"],"title":"id","description":"ID of the key pair."},"namespaceId":{"type":["string","null"],"examples":["019e8e96-87b4-78b9-9830-19874b518d60"],"title":"namespace_id","description":"Namespace of the key pair."},"originatorId":{"type":["string","null"],"examples":["your-custom-app"],"title":"originator_id","description":"Originator of the key pair."},"name":{"type":["string","null"],"examples":["TLS Certificate for www.example.com"],"title":"name","description":"The name of the key pair."},"certificate":{"type":["string","null"],"examples":["-----BEGIN CERTIFICATE-----\nEXAMPLE\n-----END CERTIFICATE-----"],"title":"certificate","format":"byte","description":"The key pair certificate raw bytes."},"key":{"type":["string","null"],"examples":["-----BEGIN EC PRIVATE KEY-----\nEXAMPLE\n-----END EC PRIVATE KEY-----"],"title":"key","format":"byte","description":"The key pair private key raw bytes."},"createdAt":{"title":"created_at","description":"When the key pair was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the key pair was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"status":{"title":"status","description":"The status of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_STATUS_UNKNOWN","KEY_PAIR_STATUS_READY","KEY_PAIR_STATUS_PENDING"]},"origin":{"title":"origin","description":"The origin of the key pair.","readOnly":true,"type":"string","enum":["KEY_PAIR_ORIGIN_UNKNOWN","KEY_PAIR_ORIGIN_USER","KEY_PAIR_ORIGIN_SYSTEM"]},"certificateInfo":{"type":"array","items":{"type":"object","properties":{"version":{"type":["integer","string"],"title":"version","format":"int64","description":"X.509 certificate format version (3 for modern certificates)."},"serial":{"type":"string","title":"serial","description":"Certificate serial number, formatted as a decimal integer string."},"issuer":{"title":"issuer","description":"Issuer distinguished name (the CA that signed this certificate).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"subject":{"title":"subject","description":"Subject distinguished name (the identity the certificate vouches for).","type":"object","properties":{"country":{"type":"array","items":{"type":"string"},"title":"country","description":"Two-letter ISO country codes from the C= relative distinguished name."},"organization":{"type":"array","items":{"type":"string"},"title":"organization","description":"Organization (O=) entries."},"organizationalUnit":{"type":"array","items":{"type":"string"},"title":"organizational_unit","description":"Organizational unit (OU=) entries."},"locality":{"type":"array","items":{"type":"string"},"title":"locality","description":"Locality (L=) entries — typically a city."},"province":{"type":"array","items":{"type":"string"},"title":"province","description":"State or province (ST=) entries."},"streetAddress":{"type":"array","items":{"type":"string"},"title":"street_address","description":"Street address (STREET=) entries."},"postalCode":{"type":"array","items":{"type":"string"},"title":"postal_code","description":"Postal code (postalCode=) entries."},"serialNumber":{"type":"string","title":"serial_number","description":"X.509 serialNumber attribute of the name (not the certificate serial)."},"commonName":{"type":"string","title":"common_name","description":"Common name (CN=)."}},"additionalProperties":false},"notBefore":{"title":"not_before","description":"First instant the certificate is valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"notAfter":{"title":"not_after","description":"First instant the certificate is no longer valid.","type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"keyUsage":{"title":"key_usage","description":"Decoded KeyUsage and ExtKeyUsage extensions on the certificate.","type":"object","properties":{"digitalSignature":{"type":"boolean","title":"digital_signature","description":"Certificate authorizes verifying digital signatures."},"contentCommitment":{"type":"boolean","title":"content_commitment","description":"Certificate authorizes non-repudiation of signed data."},"keyEncipherment":{"type":"boolean","title":"key_encipherment","description":"Certificate authorizes key transport (encryption of session keys)."},"dataEncipherment":{"type":"boolean","title":"data_encipherment","description":"Certificate authorizes direct encryption of arbitrary data."},"keyAgreement":{"type":"boolean","title":"key_agreement","description":"Certificate authorizes Diffie-Hellman style key agreement."},"certSign":{"type":"boolean","title":"cert_sign","description":"Certificate authorizes signing other certificates (CA)."},"crlSign":{"type":"boolean","title":"crl_sign","description":"Certificate authorizes signing certificate revocation lists."},"encipherOnly":{"type":"boolean","title":"encipher_only","description":"With key_agreement, restricts use to encipherment only."},"decipherOnly":{"type":"boolean","title":"decipher_only","description":"With key_agreement, restricts use to decipherment only."},"serverAuth":{"type":"boolean","title":"server_auth","description":"Extended usage: server authentication (TLS server certificates)."},"clientAuth":{"type":"boolean","title":"client_auth","description":"Extended usage: client authentication (TLS client certificates)."}},"additionalProperties":false},"dnsNames":{"type":"array","items":{"type":"string"},"title":"dns_names","description":"DNS names in the Subject Alternative Name extension."},"emailAddresses":{"type":"array","items":{"type":"string"},"title":"email_addresses","description":"Email addresses in the Subject Alternative Name extension."},"ipAddresses":{"type":"array","items":{"type":"string"},"title":"ip_addresses","description":"IP addresses in the Subject Alternative Name extension, formatted as\n strings (IPv4 dotted-decimal or IPv6 colon-hex)."},"uris":{"type":"array","items":{"type":"string"},"title":"uris","description":"URIs in the Subject Alternative Name extension."},"permittedDnsDomainsCritical":{"type":"boolean","title":"permitted_dns_domains_critical","description":"When true the permitted/excluded DNS-domain name-constraints are marked\n critical and clients must understand them or reject the certificate."},"permittedDnsDomains":{"type":"array","items":{"type":"string"},"title":"permitted_dns_domains","description":"Name constraints: DNS domains the certificate is permitted to assert."},"excludedDnsDomains":{"type":"array","items":{"type":"string"},"title":"excluded_dns_domains","description":"Name constraints: DNS domains the certificate must not assert."},"permittedIpRanges":{"type":"array","items":{"type":"string"},"title":"permitted_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate is permitted to assert."},"excludedIpRanges":{"type":"array","items":{"type":"string"},"title":"excluded_ip_ranges","description":"Name constraints: IP-range CIDRs the certificate must not assert."},"permittedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"permitted_email_addresses","description":"Name constraints: email addresses (or domains) the certificate is\n permitted to assert."},"excludedEmailAddresses":{"type":"array","items":{"type":"string"},"title":"excluded_email_addresses","description":"Name constraints: email addresses (or domains) the certificate must not\n assert."},"permittedUriDomains":{"type":"array","items":{"type":"string"},"title":"permitted_uri_domains","description":"Name constraints: URI domains the certificate is permitted to assert."},"excludedUriDomains":{"type":"array","items":{"type":"string"},"title":"excluded_uri_domains","description":"Name constraints: URI domains the certificate must not assert."}},"title":"CertificateInfo","additionalProperties":false,"description":"CertificateInfo is a .proto reflection of\n https://golang.org/pkg/crypto/x509/#Certificate"},"title":"certificate_info","description":"Info about any certificates the key pair has.","readOnly":true}},"title":"KeyPair","additionalProperties":false,"description":"A KeyPair represents a public / private key pair."}},"title":"UpdateKeyPairResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-key-pair.api.mdx b/content/docs/api/pomerium-config-config-service-update-key-pair.api.mdx new file mode 100644 index 000000000..a615aedb7 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-key-pair.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-update-key-pair +title: "UpdateKeyPair" +description: "Updates an existing key pair" +sidebar_label: "UpdateKeyPair" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Updates an existing key pair + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-policy.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-update-policy.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-policy.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-policy.RequestSchema.json b/content/docs/api/pomerium-config-config-service-update-policy.RequestSchema.json new file mode 100644 index 000000000..a0b1d71f0 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-policy.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"policy":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"title":"Policy","additionalProperties":false,"description":"Configuration for a policy."},"updateMask":{"oneOf":[{"type":"string","description":"`FieldMask` represents a set of symbolic field paths, for example:\n\n paths: \"f.a\"\n paths: \"f.b.d\"\n\n Here `f` represents a field in some root message, `a` and `b`\n fields in the message found in `f`, and `d` a field found in the\n message in `f.b`.\n\n Field masks are used to specify a subset of fields that should be\n returned by a get operation or modified by an update operation.\n Field masks also have a custom JSON encoding (see below).\n\n # Field Masks in Projections\n\n When used in the context of a projection, a response message or\n sub-message is filtered by the API to only contain those fields as\n specified in the mask. For example, if the mask in the previous\n example is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\n The result will not contain specific values for fields x,y and z\n (their value will be set to the default, and omitted in proto text\n output):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\n A repeated field is not allowed except at the last position of a\n paths string.\n\n If a FieldMask object is not present in a get operation, the\n operation applies to all fields (as if a FieldMask of all fields\n had been specified).\n\n Note that a field mask does not necessarily apply to the\n top-level response message. In case of a REST get operation, the\n field mask applies directly to the response, but in case of a REST\n list operation, the mask instead applies to each individual message\n in the returned resource list. In case of a REST custom method,\n other definitions may be used. Where the mask applies will be\n clearly documented together with its declaration in the API. In\n any case, the effect on the returned resource/resources is required\n behavior for APIs.\n\n # Field Masks in Update Operations\n\n A field mask in update operations specifies which fields of the\n targeted resource are going to be updated. The API is required\n to only change the values of the fields as specified in the mask\n and leave the others untouched. If a resource is passed in to\n describe the updated values, the API ignores the values of all\n fields not covered by the mask.\n\n If a repeated field is specified for an update operation, new values will\n be appended to the existing repeated field in the target resource. Note that\n a repeated field is only allowed in the last position of a `paths` string.\n\n If a sub-message is specified in the last position of the field mask for an\n update operation, then new value will be merged into the existing sub-message\n in the target resource.\n\n For example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\n And an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\n then if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\n then the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\n An implementation may provide options to override this default behavior for\n repeated and message fields.\n\n Note that libraries which implement FieldMask resolution have various\n different behaviors in the face of empty masks or the special \"*\" mask.\n When implementing a service you should confirm these cases have the\n appropriate behavior in the underlying FieldMask library that you desire,\n and you may need to special case those cases in your application code if\n the underlying field mask library behavior differs from your intended\n service semantics.\n\n Update methods implementing https://google.aip.dev/134\n - MUST support the special value * meaning \"full replace\"\n - MUST treat an omitted field mask as \"replace fields which are present\".\n\n Other methods implementing https://google.aip.dev/157\n - SHOULD support the special value \"*\" to mean \"get all\".\n - MUST treat an omitted field mask to mean \"get all\", unless otherwise\n documented.\n\n ## Considerations for HTTP REST\n\n The HTTP kind of an update operation which uses a field mask must\n be set to PATCH instead of PUT in order to satisfy HTTP semantics\n (PUT must only be used for full updates).\n\n # JSON Encoding of Field Masks\n\n In JSON, a field mask is encoded as a single string where paths are\n separated by a comma. Fields name in each path are converted\n to/from lower-camel naming conventions.\n\n As an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\n In proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\n In JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n # Field Masks and Oneof Fields\n\n Field masks treat fields in oneofs just as regular fields. Consider the\n following message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\n The field mask can be:\n\n mask {\n paths: \"name\"\n }\n\n Or:\n\n mask {\n paths: \"sub_message\"\n }\n\n Note that oneof type names (\"test_oneof\" in this case) cannot be used in\n paths.\n\n ## Field Mask Verification\n\n The implementation of any API method which has a FieldMask type field in the\n request should verify the included field paths, and return an\n `INVALID_ARGUMENT` error if any path is unmappable.","title":"google.protobuf.FieldMask"},{"type":"null"}],"title":"update_mask","description":"Optional update_mask to only update a subset of the fields."}},"title":"UpdatePolicyRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-policy.StatusCodes.json b/content/docs/api/pomerium-config-config-service-update-policy.StatusCodes.json new file mode 100644 index 000000000..1b28ee679 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-policy.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"policy":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"title":"Policy","additionalProperties":false,"description":"Configuration for a policy."}},"title":"UpdatePolicyResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-policy.api.mdx b/content/docs/api/pomerium-config-config-service-update-policy.api.mdx new file mode 100644 index 000000000..34d84032a --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-policy.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-update-policy +title: "UpdatePolicy" +description: "Updates an existing policy" +sidebar_label: "UpdatePolicy" +hide_title: true +hide_table_of_contents: true +api: eJztXQtz2ziS/isoTmXH3pIoP5LMRdmpWk8eE08lsSu2Z+8SuSyIbEmYkAAXAKUoPv33q26AICnJjmd2rvaqjq7dGZvEo7vRL3xEY24jy2cmGn6KzlUmklXUiwqVgxZlHidKTsUsfkH/ugC9EAlE170oBZNoUVihZDSMroqUWzCMSwZfhLFCzlhRjaUK0BwbnqbR8P6RYzdQTQbXPAcLGqm7jSTPIRpGL5SUkNj+uVZWJSrr/wraICG9SCA1c+Ap6KgXafhnKTSk0dDqEnqRSeaQ82h4G9lVgSPJMp9QSyts9o2hQZZ5NPx0uMX8S5gKCczOgS1ca6am9KcfjRV+tKgXJUoaGw0P1+veFj+XIgdV2v47s8XJwylvDXInoda16jEhWW6i9fraSQuM/UmlK5woUdKCtPgrL4pMJLSGg98MjnW7TZGa/AaJxUXTuOJWgMG3Xg2+2U6kdZtPkbFayFnUi2SZZahvFZsi3WILdQd0nxsjZhJSVkrxzxLY6ctqGRwJcbTukcRNwRM4fdh0of3NjonrGUKzxnxsApmSM8OsoqmVFjMhuVX6gXPXHe6fvCyM1cBz5iTbJKEaAlI21SrvseUcJBN5obSFNEjkwaLYouJNmXPZ18BTPsmcHHZIvdXnAVM122/O+FoD9KdK56zxHOdcznmLd2HYVGmaH+RU6QRaYp8olQGXO2YPrTenPpGseteYhJdW5dyKhGfZipGpQMqsYlqVFkw8kuy9ssyUhZM6mhySqQqQzKhSJy2/cV75RyScZ5laQnplyAMGE+Jac3SPwkLefO4Fuq558QPclDTCJkM/ay6tYTxJwBgm3LplajaDtC8kw07fGzSknNtkDoYpGZZ3JhYg2YJnJZgmrS9VzoX816hN/Rh/jF7IucgYT1ONrdxYTQ5G8ls8nKbFi4yLFrXBbW0SK9LiJnGtexFPU4HE8uy85d2qTjQXDnKvL3QU3SdCJeFsSjExxIMsizCmtOND40kQd3hSmUDjkZuo8SBQuJszjKvrrYj4AQoNBmit2C8XZ++djOORHEk2/hV/HzPdbJSuJM+9CeHMqevBlnORzFnCJZsAA2HnoEeSIbM9xpljEn9zzOFvnin8VUNSaiMWgK/LxLoxe0xpxkeSZcJY1AS//uwE43RaJqDDU7Rv+FJAYp1JG7ANGzCoSguuBWplzE4mBmRCL7lcVS/IRUgm5IJnImXGcgtxQ41mSs0yiClFmJTTmKTTNAqvDDtkDM6xC8hSnPQOGaJmr+9avynPDHx7+Ugttl35Qx1Ies6chTAhk6xMoSFEvxCQss+wGjipF1xoZ5AaZuoPuRLquM3YTDFdZmCYxWjBSztXWnwF5nMfXMUs803y0lhGVo6BpGLSqhEp4wxZ9zHUefHzIntQdHOtb4oi2yLwEuOCi9kZOz9/W8WHRlhbcsMSlRciawd1vuAiwyDsIt6XIuOSPzjiNtvfHXEtfLHMzNVSojFQ7mFAM+osJCb9y/mK2bkwFbUuHFZrmUMqHk5Ts/3vpslCliFBdg45m6slvpxhIPDLiDIbyRatKUhBmhHUgchONNnZiW36cf/whtst0v6Bq7G5YK55THsSnp7JbFXtSdoajCvH8yID2o4dHRwd9w8O+4dPLg8Oh8cHw8Mn8cHhx6iHbx73D4/6R08uD4+GBwfDg4OPKDsUCbeYQnELfczykYVcpWIqNnmonj6UiYwby6pO/y5WqgTsAyVXD3ANf/p2A220Tr5BWmFXf0ImfTlvp8+NgdvLtxX6//fkvZUAM9xdGsvzoh2+CyUw0knaVzIhUyhApiBtFQzp+Vfy+pplKuHZSLKEZyBTrnsMZKJSSBnHwRJVuo4GEiVTDJ/o6XiCVJjWC4vJAJfKPWAajMpKbBYzlKcbSRimIeMWEwGrCKMoVDJn3LKryxcsF6kUszkG9pFkv3BZcr1ihz12+OyHg16VrRdaZVBYkbCfMbRgaA/0+ywFvlhAqlxQ29FswpPPS66xiWIr4BrDoEuKMOrkQpYEomhgTw8Ck7iJjNlb4EXNtwY2ikwOXEM6iphRLp5JxTLgxUj6lszSrkwYJgFQvhjHhLSgCw2WPGuPlQb9JGefjh7356rULBMSOKZZNMH13tzawgwHgxQWkKENmdgnLYnKB7iyA2q571hBwWsuZzQvBih2cHBw2Kf/XZK6ocahCJ49e/YMNfH48PLoePjk2fDJs/hZ9fMxZj+tRhLX1GqREKRkPZ80fI8t0UpMqcE9XQIliomSC9DWLbULkezTh9cvRpIdHx8/q/lZLpexADuNlZ4N9DTB/2OL2H6x+wytwKeVxjH2HXvlDYz+9H+wwyF7ofKitNCwDpr1/Ozi9D/ZGCW0tz92g+BP3cxWvz33r8KD2IC98eu9RyO8v3r7dn9/d0Oygb0DfNug7OhblM3AEhA0TfmqRaHPl/HlgmfMLqppWz3+Yhc9RmQ9/xd4W8R2gX/dy5prVRpI2F/Z4cHBJqvHd7L6DyGPj9j4Z7AXK2Mhx9cn5rXI4HJzXV6fvn11efruFZvaipa7uv1lagO9V6fvL58+ZlYknw37ke3t7bkn+1Mbp8s3YjZ/yS1122d/+xs7Ptpn/83o3Vu1rF7VEhwM2AlSnaqloUHRjg4PDhqOzsShgXNlh0+3LaweDvsfPn38+PEPx08PascyganSwK6k+FIN8+yHg81h4j+6sHtOCGxvz0lmQOuGP/us3yToW2qNA6HQqoEeNQYiZdjfUIbHdyrDL3zB2ditaJyUWoO02OSdyDJhWsqAbpfl9Jz9yO7ucq/qsx/rp7GE5U+lyFLQe/vI3oUXlJ/EyWffD4Y/2Oi9E4GQFgXgmzoJeO5JEPvxBIfe25DEk29I4lQay6WNpVq2mPfPmVRL9iNrtfoGvw3yv825VMt4BvYVKp97trffFEBbCL41/rF3F8NP72TYL12VobDzlZ0rWbO8c8329rf08mewL2otwAYUGmib/I4XhZAzenQq3TOXVvUoiWhIbFU4cKGZ+Lho4zOOkaSo9btilpsLcx+OaU/Pj+Me43Sj6BbzjnX/NlfSztf925Sv1pe3GPfXw9tcyPXw1kCy/hTfYsaFxry+/jiKRhJ3TBqY60+gRrbkK4JHEGdD3J0SiSmmEKmYCYubLJEB83P1GE3WG0nm5usxmrBHYZpmpcTmK2jVL3iaOsjFLlU1HPBk7hK7KhukNNI7nF4DLJopVhaUYlR990QMsX94uDtn3EfSkAJVuLHdXKPoI6ZY5XQqvmBqix9C/DYRtYKS2r1RdHX5YhTtP289H0mXfLqvUIgw0Xcl0gsDWvBMfAWNu9cySyuBlgYoL93jJkyXsgnmQkTKvtvvF1pI63e4m4qFAuWNuQquTT3PBOmixBBTpCSBwrKJsnOaFbsqhNkCE2aLEkyh1XRqwPqU77VCEIAssMdG0dHB4Q879h6jyKu7YfQgBKKCG0zkqS0RoRp5+JMew/HiYFR8wS9oT9IjFKmZ8nGG4TR8B1Fue+/V36mnswj0ZynXKRqZVacXZxdkenv7O7LdOFdfRZZxMjmQ/auLQaoSM/gHTAY1MYMPMAWN+N/g50xNeHZzRlSYAZI0aEyCLiUHO1dpjPw4P+QwTEcUG2PuieKPq1/GFU8eCfUMAzKwi03ka2ysnlLnBlMqMXHhPB+yczTIxERzvaI0Pp7bPPuOfqv67rOlsPORDGpdTWMKSNj3j/6r/yjvP0ovH70ZPno3fHQRP5p+/D5mb8VnWAoDtH1CIdVrVRJqisP9olJOmvu9YZ/GpxdnVS702rmx1P+5tz++3htJhkwMB4PfVMr7jkgCx6ZKzyCWYAe8ELQyyBm2cnsTR/Bge3zitp5kJNk+ClNNLOFEnlMLmiW8IHtRUzYDSV+zUZUqozPOZYc1uA/eDZbaBusRvG8gBA+CZhxCsAuaWTeA0FfU6lRO1Z0g/k4QuO6HPgznm3AjElRdnnLLHSYqmzjF5ge0G/cFbBuGpccegtWw8QUtfGKbtKDEP/4dbROoQjDcfyvuUKQORepQpA5F6lCkDkXqUKQORepQpA5F6lCkDkXqUKQORepQpA5F6lCkfx+KVGE0d6FINCifqNL6k9akZO3TZ36IPxU7Cmf93/8epMYVETwIs6mLCVA4zaP0W9Q0xBVqZn7H6rjam9JV57ilaB7bL6kY5x03n+9HjNqDjl/jgVTstXHGlw7PTplZ5ROcwx9cLbidmx5N7p3/MGRT9G7IRtE05pQ9bDycxCk+Hkn2BrOK8XRjRjeDwCXOgWmlLMvBGI7b/jEfU5gaT8aY3GBLU6mFb4RZiKT+4+nYJRjjdBzGDW9dNKg6UfN44vNgEgbLufnsAJfS+JPEBSRiukKxlBMvGU8EwRDNKKvBllr6oImbZxZKqhAIqyzWx1S3anWTeJOKzCg25wtAkKw0FtN4DO8UVdEj7RkAKl5Z7leQhev/jvpj1qsVxhEE0qgBORPizAuQaoe+ONwOQS/f2h3KNoWSphayIpConPSDAA2bisyCrjBgYCfnp+RUZbaisTnNowxUMuMGByGZipoMZDhu5xX+jDK+qUE5WAhV4gi+GSWmdSHHDqI5emk8GmxqbZ2y27Dr4GzIjo7Cn5PGK8ZSNmSHjb+/YOPw9zr8tsJ2x/7P6vHXIfuPGiEDU2aWLUWWMalskI2XROJPgJN1eUl96a1Ik7+OJNuzcxC6OmqPg0yAzNSfpE1hysvMOtVXubDedVIcopO3WEtR2qK0+ySHf00S65pVBDPRlptH3BGAVP5ENqQMvlDO6Yt+KHYVyoiqHAhP+JOr8Bsin/qhQgYHVeVDfmTvORjF7ZaZVXug2u78wWZSjyyrhEs57sYU00YDzD84WjU0tNVb2XtlPQRZORhS0lSBo04CHlzmWvgqo5VfJUrein6GmeaWolJymHDjqhLYh1cXl7s5a8xYsZYKDYkN84Sxe2xSkpDa44aKitbQlaUZCzxtSg23YbQfWIi05FlFMG52pJ/Oez3cW1GExuF3MeS9mEuHcfvlth4pljsKB/fnHOvxyEfF6K401MRVRHkDwE8KGXCdrViqkjIH6Yo/ZkCjUpKBe8EUkox7bfAkn5yfxgh74M5IrohMJwSYTlHP1B2cDapfTHOnR3UGc74QaLxK4+jmDofsymbZWSV64y2osapiOzKYoIPG73q9GofKDMv1DGxzDTCGzZSH0VGiNGbqNrnoptsMBKc9JyyfamSdS/LJTvDfu703STLF7xEL15uW1rBSWlUmc5yYTDrQJ2gjWIUirNVw2ckEfK0kkeuJ6IXgImZSab8frwnkWVbnBs6/LpphieJL7Ve2/VXNk89zN5egxyQsqxlRAV1xCS/oy1damV4oqt6cwm+paJmCEOLal6D8dtBFa1I5Uj/ItgdlY3Kg420PuhGut5Zua6yw1E4ZnTRGu+RhMZcIQglRKQc9o/E3JdIgpfYdmwLZxhdc6V+jrR9jdzjfiFob4Xt39E6G7NPhdTukIaISmP6dMx7cMcdRew6Sn9iSuKgSFZ8+f6L8eRT1KJFORtF13dtuZBaTP0Dj/WLpsaNNyWBVcgbobZ1LRY9daLUQaQWlUdhAA9T4jPZ5PkFp+UlKmL3Co+8IyTyZ8WasdchF7QEDFY0QXoN7Lm/Gyj6XL6ZiSnhNTUHYQ0y5KwWEvLArn3r77RyZC8/YKPrrKKqciEuiw/Tua6px1yKwlSqrHQFdm4B1T1h/SCHGOKqcx+YFnlDQAhUsSMWTVMoUdLbCoWvmPHTjpIHzpGCEhp73vPgElwI//YZ9C89cCHYpuKNBSGyrWeOuAIYwHRPT0db0DcWs5g/EOpn6j740JH5rRm9IKK0TiIGcSysSv55XlUVhBmDaUqxQK4+hcFHEKSwGh8ePR5L12buri8sKGGitjvM/f2U5cCptG0XTEmsDoch4ArQd9b2x+t4SnOlT5GYyhXC571NFEqdpGEl9xjmKHBtnlGH8Li6e/EB0XLw5u3r78h4+nK5ZReywUYQuD8MbzvwQPnb07LFSZlhLRzEZgTq0iJAy+VTlO7wFw4g05Bzo+99cXp77pNHvZOjJZyFTd9ZjKzB4oZWoaq38GKs0XdD0G5fzk8sXb0LGiWjO1SVqp9Ip4tGKGW6Fma7clEGRcDuELanqk+Kjzxfd5gmX3tFkwq6Yts2vqm2zmjazsubXm16b4q0PNkLOsuqUgP9A4nYuXBPMDHgNSgWaY/FnzmM3l3HAkZAuncZepFdtZHdApoTBXvcTnkOGvXAuaiZpWfwBEn+Fiw+SiV8559Bov4vdKo/ayIAb2+Dq7blWU/pwE1w/XmPgqjN/ZIfPw+PzOe4mC/rnj+zo+caGtxqPeteDeXGlwhQZXxGy1h7WN6juAWiP7BbH7WP5ZmYy9qSPyfNlSpEZmzKZN7jExjU1AZRC9uImUQG3ajQiXsOLdVtXyHaRm0pZAqTlFIaQmZqQmgZsv0kCYpS9XdO1txDo6c8kVCpstqAr5xpqlExhY8N+oxJpJHFWZrzCGOJg8uHT4YbqbGvLBancO/9XzRRNxCwYe+N+baYcfon92j9+3nh1UU6qwUw5uamm+ZE9e76VlKyDF2oogvtG8u0Fb62xG+lMf7tbg6iN3nVu4nnHb3GECeMHwloSoyh8MMAIvI8U4x6lcltCVghI8MT1krNfQSNARMYb2N9IwfypO9wfuZjknfCc3FadQhCFzQ0JpWBUQV1lLQuczm2a/BUAVXTx+C+nj6i4L3Ybg/Hp+19P3p6+vDn58PPVu1fvL8cMtMZcxhFFrk7gRjDnReHq3u/+XhJovfd7ifPvN7hkW6j2mf+ayxqNwu7WB6smllvvbdsfUpoXXH1wMrofs1+v15sXWdEDh8XQKdSjgwP818atSCUVursrp7qLnLqLnLqLnLqLnLqLnLqLnLqLnLqLnLqLnLqLnLqLnLqLnLqLnLoSvK4EryvB60rwuhK8rgSvK8HrSvDukFBXgteV4HUleF0JXleC15XgdSV4XQne/48SvO4ipw5F6lCkDkXqUKQORepQpA5F6lCkDkXqUKQORepQpA5F6lCkDkXqUKQOReoucvq/fpHTndUnroTkm+UndFiU6qy3q0xeYU3On1djguFg+zRoG8qSyt7Q1Uu4Mv4/yh4lXCaQ0VH/Un6Waun+Y/B0VPeG6xnVpNKC8RQBjRu8PQYxEFzlMCCeG8eFWd3Q9QKoqgXoXBjUpxs6VpjS2vmTn/Blzks88hr1oinHg5w3haYoJvxhRz4hNY16kSrtjZreEFZBVIZiK3pNMIzkGb0KR0CRYm75TaaokqeUeNAVTYxib7R1Xhs1EA8ml4Zqr6scKER6Z6Fl7g9Fqyn75D2SLpL4hUrheuuBwxxdqdqutdnEBEOk7E95go7R1W2Fi7c2SRKSvZKzTJh5zE7kik597uza6EOQofjqK/yrS3vQwprkX5Ak4hQsF5m5vueVO3vdC2gkDe0v+UgyAdL6M9PU/I/DzO7tt2V49eGtR9UTa9xuYEZpBBabuaoogXgqOngdvAsle973hHwyra8CauRlQzbG1h6544UwhN41JESWja55jHmvoJtpqsvLUrBoFtKdZ3bGXU1MwcAvxnjhKgTcyXZcKh87UoH85q4oKtA/TmFSznxzErirstghsIBOT4TkerXTFZ/7IFurXkMoWEi7InhVphjK4Onjvt99uTw/XKFVaV+1RwuCDxpComySTXzsBOe3ik9O5N2u3h3GbTP2klQQr79y1ZDSSQIxbkoZWpKlsj034MoFOUdHIyK8JFK3Z2mIys3kdJ8VfJUp7mX0PY72fSj9bO6FnFJ41Qn3ztAtf9wIup1pUs5mhDWjCTvT9vWrGqj0qiyqYNa4UyJTM5HcVwmxS2ov3L1oVMDB9URYunJi20YYJ5yH8g/O/k5LTnZYXSJkHmBoPd9fsppAx264OFBjhbSExH44f9GSr2kmi4lrE1ODm6oBasxW/cZJKILxRPivcgnX2ilpexZcPu0+BSiWiVyEy6lcKU5zpHYK4QlnVeR/+CJQDye75o2GfsBhuOLCs41OCH0S5fAzNSAGzOA7bNYPn5tcVcHapSluHxUNo0JRWS0WCUfDaFBUaSBdnjKLXbp04e4SGTSToqgXGapCNWS1pc6iYVQRdns7V8au11vmUqWZ7CNohfXSEbouLTCEk9/Hfi558nkUrq1RuBOoSONFgWxcIwFJqYVdRcNP170IUyhfKPyTSlce2WoX5OLXy0bW2iyNrR+3y1bbze+ORXUKFkov3dq2KxpD0ny9XT+4412zLi8UBzXbNQpxmllgoxamftwqR2lUEDWvL208RpdJtXlum4CFWQfx8VH8pK+T+DBqJuJ+Vd2Cbhjc+SnZcc4lJy8WWifNXDz2uTFPaP29rKu2mNK1NGwm7LyckNoXdRuqg0Qe3K7n7w11zpGjTCSAiXw9wUnBkzmwt+4FO4oPHjJV/cskU5MBLt/g7emLV+8vXpELQKvKuWzMs2E6G+XBYVPg2/nLRfzFXUXVy4dGrP8ZUP0RLZ6mGixnwZ+iey046rUJue55g/sU3d5ibL/S2XqNj/9ZgvZ2Vdkn/rXuRXPgKWgy+lQYfJHu3ms12dr74LG8fXYXH59hVTvNPqUkicr6v3rlCylORADAw6d+2HwIL6jS9t+ZzZlCOxyvf4lD1S22tnB1jxMCCO9te91wxOdnF5dRL5qolBxVTvu7SPMl2i1fOkb89V7YgJ7dRhmXs5L2G5EbE3/+B2rBLxs= +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Updates an existing policy + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-route.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-update-route.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-route.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-route.RequestSchema.json b/content/docs/api/pomerium-config-config-service-update-route.RequestSchema.json new file mode 100644 index 000000000..0f72c7f2c --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-route.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"route":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The id of the route."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"The namespace id of the route."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"The originator id of the route."},"name":{"type":["string","null"],"title":"name","description":"The name of the route."},"statName":{"type":["string","null"],"title":"stat_name","description":"The name used for stats telemetry with the route."},"description":{"type":["string","null"],"title":"description","description":"A human-readable description of the route."},"logoUrl":{"type":["string","null"],"title":"logo_url","description":"A URL for a logo for the route."},"from":{"type":"string","title":"from","description":"The externally accessible URL for a proxied HTTP request."},"to":{"type":"array","items":{"type":"string"},"title":"to","description":"The destination(s) of a proxied request."},"redirect":{"title":"redirect","description":"Indicates that a route should be redirected.","type":"object","properties":{"httpsRedirect":{"type":["boolean","null"],"title":"https_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n \"https\"."},"schemeRedirect":{"type":["string","null"],"title":"scheme_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n the given value."},"hostRedirect":{"type":["string","null"],"title":"host_redirect","description":"Indicates that the incoming host of a request will be swapped with\n the given value."},"portRedirect":{"type":["integer","null"],"title":"port_redirect","description":"Indicates that the incoming port of a request will be swapped with\n the given value."},"pathRedirect":{"type":["string","null"],"title":"path_redirect","description":"Indicates that the incoming path portion of a request URL will be\n swapped with the given value."},"prefixRewrite":{"type":["string","null"],"title":"prefix_rewrite","description":"Indicates that the incoming matched path prefix portion of a request\n URL will be swapped with the given value."},"responseCode":{"type":["integer","null"],"title":"response_code","format":"int32","description":"The response code used for the redirect. Defaults to 301."},"stripQuery":{"type":["boolean","null"],"title":"strip_query","description":"Indicates that during redirection, the query portion of the URL will\n be removed. Defaults to false."}},"additionalProperties":false},"response":{"title":"response","description":"Indicates that a route should return a direct response.","type":"object","properties":{"status":{"type":"integer","title":"status","description":"The status code that Pomerium returns for a static HTTP response.\n For example, 200."},"body":{"type":"string","title":"body","description":"The response body that Pomerium returns for a static HTTP\n response."}},"additionalProperties":false},"loadBalancingWeights":{"type":"array","items":{"type":"integer"},"title":"load_balancing_weights","description":"Optional load balancing weights for upstream servers defined in to.\n If not specified, all upstream servers are assigned the same weight.\n If provided, len(to) must equal len(load_balancing_weights)."},"allowedUsers":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_users","description":"Grants access to the route if the logged-in user's ID matches one of the\n given values. Deprecated in favor of the PPL user criterion.","deprecated":true},"allowedDomains":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_domains","description":"Grants access to the route if the logged-in user's email address is for\n one of the given values. Deprecated in favor of the PPL domain criterion.","deprecated":true},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access to the route if the logged-in user's session/user claims\n match one of the given values. Deprecated in favor of the PPL claim\n criterion.","deprecated":true},"prefix":{"type":"string","title":"prefix","description":"Only match requests that have a path that begins with the given prefix."},"path":{"type":"string","title":"path","description":"Only match requests whose path is an exact match for the given path."},"regex":{"type":"string","title":"regex","description":"Only match requests whose path matches the given regular expression."},"prefixRewrite":{"type":"string","title":"prefix_rewrite","description":"Indicates that when a request is forwarded, the matched prefix (or path)\n will be swapped with this value."},"regexRewritePattern":{"type":"string","title":"regex_rewrite_pattern","description":"A regular expression used to rewrite the path of a forwarded request."},"regexRewriteSubstitution":{"type":"string","title":"regex_rewrite_substitution","description":"When a regular expression pattern is set, what the matched pattern will\n be replaced with."},"regexPriorityOrder":{"type":["integer","string","null"],"title":"regex_priority_order","format":"int64","description":"Determines the ordering of routes that use regular expressions."},"corsAllowPreflight":{"type":"boolean","title":"cors_allow_preflight","description":"Indicates that OPTIONS requests used for CORS can pass through\n unauthenticated."},"allowPublicUnauthenticatedAccess":{"type":"boolean","title":"allow_public_unauthenticated_access","description":"Grants access to a route without requiring any authentication."},"allowAnyAuthenticatedUser":{"type":"boolean","title":"allow_any_authenticated_user","description":"Grants access to a route for any logged-in user."},"timeout":{"title":"timeout","description":"The per-route request timeout option. Cannot exceed global values.","type":"string","format":"duration"},"idleTimeout":{"title":"idle_timeout","description":"The per-route request timeout for a connection that is idle with\n no data exchange.","type":"string","format":"duration"},"allowWebsockets":{"type":"boolean","title":"allow_websockets","description":"Allow websocket requests. Also disables the default route timeout."},"allowSpdy":{"type":"boolean","title":"allow_spdy","description":"Allow SPDY protocol upgrade requests."},"tlsSkipVerify":{"type":"boolean","title":"tls_skip_verify","description":"Indicates that pomerium should perform no verification on upstream\n TLS connections. Any certificate for any hostname will be accepted."},"tlsServerName":{"type":"string","title":"tls_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence.","deprecated":true},"tlsUpstreamServerName":{"type":"string","title":"tls_upstream_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence."},"tlsDownstreamServerName":{"type":"string","title":"tls_downstream_server_name","description":"The server name indication (SNI) for downstream TLS connections."},"tlsCustomCa":{"type":"string","title":"tls_custom_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates of upstream TLS connections."},"tlsCustomCaFile":{"type":"string","title":"tls_custom_ca_file","description":"A file containing root certificate authorities (in PEM format)\n used to verify certificates of upstream TLS connections."},"tlsCustomCaKeyPairId":{"type":["string","null"],"title":"tls_custom_ca_key_pair_id","description":"A reference to a key pair containing root certificate authorities (in PEM\n format) used to verify certificates of upstream TLS connections."},"tlsClientCert":{"type":"string","title":"tls_client_cert","description":"The client certificate to present to upstream TLS connections for\n mTLS."},"tlsClientKey":{"type":"string","title":"tls_client_key","description":"The private key for the client certificate to present to upstream\n TLS connections for mTLS."},"tlsClientCertFile":{"type":"string","title":"tls_client_cert_file","description":"A file containing the client certificate to present to upstream TLS\n connections for mTLS."},"tlsClientKeyFile":{"type":"string","title":"tls_client_key_file","description":"A file containing the private key for the client certificate to\n present to upstream TLS connections for mTLS."},"tlsClientKeyPairId":{"type":["string","null"],"title":"tls_client_key_pair_id","description":"A reference to the key pair containing the client certificate\n and private key to present to upstream TLS connections for mTLS."},"tlsDownstreamClientCa":{"type":"string","title":"tls_downstream_client_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaFile":{"type":"string","title":"tls_downstream_client_ca_file","description":"A file containing the root certificate authorities (in PEM format) used to\n verify certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaKeyPairId":{"type":["string","null"],"title":"tls_downstream_client_ca_key_pair_id","description":"A reference to a key pair containing the root certificate authorities (in\n PEM format) used to verify certificates for downstream TLS connections. If\n specified downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsUpstreamAllowRenegotiation":{"type":"boolean","title":"tls_upstream_allow_renegotiation","description":"Controls whether server-initiated TLS renegotiation is allowed for\n upstream servers."},"setRequestHeaders":{"type":"object","title":"set_request_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set both static and dynamic headers for upstream requests.\n Static values can be useful if you want to pass along additional\n information to upstream applications as headers, or to set a fixed\n authentication header on the request. Dynamic values enable you to pass\n ID and Access tokens from your identity provider to upstream\n applications. The following dynamic header values are supported:\n\n - ${pomerium.access_token}: OAuth access token from the identity provider.\n - ${pomerium.client_cert_fingerprint}: Short-form SHA-256 fingerprint of the presented client certificate.\n - ${pomerium.id_token}: OIDC ID token from the identity provider.\n - ${pomerium.jwt}: The Pomerium assertion JWT for the logged-in user."},"removeRequestHeaders":{"type":"array","items":{"type":"string"},"title":"remove_request_headers","description":"Headers to remove from upstream requests. This can be useful if you want to\n prevent privacy information from being passed to upstream applications."},"setResponseHeaders":{"type":"object","title":"set_response_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set static values for the given downstream response headers.\n These headers will take precedence over the global set_response_headers."},"rewriteResponseHeaders":{"type":"array","items":{"type":"object","allOf":[{"properties":{"header":{"type":"string","title":"header","description":"The name of the response header to rewrite (case-insensitive)."},"value":{"type":"string","title":"value","description":"The new value (or replacement substring, when `prefix` is set) to write\n back to the header."}}},{"oneOf":[{"type":"object","properties":{"prefix":{"type":"string","title":"prefix","description":"Only the portion of the header value that begins with this literal\n prefix is replaced; the remainder is kept."}},"title":"prefix","required":["prefix"]}]}],"title":"RouteRewriteHeader","additionalProperties":false,"description":"A rewrite rule applied to a single response header before the response is\n returned to the downstream client."},"title":"rewrite_response_headers","description":"Used to modify downstream response headers."},"preserveHostHeader":{"type":"boolean","title":"preserve_host_header","description":"Passes the Host (or :authority) header from the incoming request to the\n upstream service, instead of the Host header from the route's to URL."},"passIdentityHeaders":{"type":["boolean","null"],"title":"pass_identity_headers","description":"Sends identity headers to all upstream applications. Identity headers\n include:\n\n - X-Pomerium-Jwt-Assertion: The pomerium assertion JWT for the logged-in user.\n - X-Pomerium-Claim-*: Each of the claim values specified by the jwt_claim_headers option.\n\n When not set explicitly, the global pass_identity_headers option will be used."},"kubernetesServiceAccountToken":{"type":"string","title":"kubernetes_service_account_token","description":"A Kubernetes service account token used to authenticate to the\n Kubernetes API via Authorization: Bearer and Impersonate-User/Group\n headers."},"kubernetesServiceAccountTokenFile":{"type":"string","title":"kubernetes_service_account_token_file","description":"A file containing a Kubernetes service account token."},"kubernetesServiceAccountTokenKeyPairId":{"type":["string","null"],"title":"kubernetes_service_account_token_key_pair_id","description":"A key pair reference for a Kubernetes service account token."},"enableGoogleCloudServerlessAuthentication":{"type":"boolean","title":"enable_google_cloud_serverless_authentication","description":"Adds an Authorization: Bearer ID_TOKEN header for Google Cloud\n serverless upstream requests."},"jwtIssuerFormat":{"oneOf":[{"type":"string","title":"IssuerFormat","enum":["IssuerHostOnly","IssuerURI"],"description":"Format used for the `iss` claim of JWTs Pomerium issues for upstream\n requests."},{"type":"null"}],"title":"jwt_issuer_format","description":"Controls the format of the iss claim in JWTs passed to upstream\n services by this route."},"jwtGroupsFilter":{"type":"array","items":{"type":"string"},"title":"jwt_groups_filter","description":"Allowlist of group names or IDs to include in the Pomerium JWT for\n this route."},"jwtGroupsFilterInferFromPpl":{"type":["boolean","null"],"title":"jwt_groups_filter_infer_from_ppl","description":"Whether to add JWT groups from any PPL policies.\n Not supported in the open source version of Pomerium."},"bearerTokenFormat":{"oneOf":[{"type":"string","title":"BearerTokenFormat","enum":["BEARER_TOKEN_FORMAT_UNKNOWN","BEARER_TOKEN_FORMAT_DEFAULT","BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN","BEARER_TOKEN_FORMAT_IDP_IDENTITY_TOKEN"],"description":"Controls how HTTP bearer token authentication is handled."},{"type":"null"}],"title":"bearer_token_format","description":"Controls how authorization bearer tokens are interpreted for this\n route. When unset, the global bearer_token_format option is used."},"dependsOn":{"type":"array","items":{"type":"string"},"title":"depends_on","description":"Additional hosts that participate in chained login redirects for\n this route. Up to five hosts are supported."},"policies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"title":"Policy","additionalProperties":false,"description":"Configuration for a policy."},"title":"policies","description":"Structured sub-policies attached to this route."},"pplPolicies":{"type":"array","items":{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},"title":"ppl_policies","description":"PPL policies attached to this route."},"policyIds":{"type":"array","items":{"type":"string"},"title":"policy_ids","description":"IDs of policies assigned to this route."},"hostRewrite":{"type":["string","null"],"title":"host_rewrite","description":"Rewrites the Host or :authority header to a fixed value."},"hostRewriteHeader":{"type":["string","null"],"title":"host_rewrite_header","description":"Rewrites the Host or :authority header using the value of another\n request header."},"hostPathRegexRewritePattern":{"type":["string","null"],"title":"host_path_regex_rewrite_pattern","description":"A regular expression used to rewrite the Host or :authority header\n from the request path."},"hostPathRegexRewriteSubstitution":{"type":["string","null"],"title":"host_path_regex_rewrite_substitution","description":"When host_path_regex_rewrite_pattern is set, what the matched\n pattern will be replaced with to produce the Host header."},"idpClientId":{"type":["string","null"],"title":"idp_client_id","description":"Overrides the global identity provider client ID for this route."},"idpClientSecret":{"type":["string","null"],"title":"idp_client_secret","description":"Overrides the global identity provider client secret for this route."},"idpAccessTokenAllowedAudiences":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"idp_access_token_allowed_audiences","description":"Allowed audiences for validating IdP-issued access tokens for this\n route."},"showErrorDetails":{"type":"boolean","title":"show_error_details","description":"If true, include policy explanation and remediation details in\n authorization error responses."},"mcp":{"oneOf":[{"type":"object","oneOf":[{"type":"object","properties":{"client":{"title":"client","description":"Provides an application with external tokens for MCP server access.","type":"object","additionalProperties":false}},"title":"client","required":["client"]},{"type":"object","properties":{"server":{"title":"server","description":"Indicates that this route fronts an MCP server.","type":"object","properties":{"upstreamOauth2":{"oneOf":[{"type":"object","properties":{"clientId":{"type":"string","title":"client_id","description":"The public identifier for an application."},"clientSecret":{"type":"string","title":"client_secret","description":"The secret known only to the application and the authorization server."},"oauth2Endpoint":{"title":"oauth2_endpoint","description":"The OAuth2 endpoint configuration.","type":"object","properties":{"authUrl":{"type":"string","title":"auth_url","description":"The authorization URL."},"tokenUrl":{"type":"string","title":"token_url","description":"The token URL."},"authStyle":{"oneOf":[{"type":"string","title":"OAuth2AuthStyle","enum":["OAUTH2_AUTH_STYLE_UNSPECIFIED","OAUTH2_AUTH_STYLE_IN_PARAMS","OAUTH2_AUTH_STYLE_IN_HEADER"],"description":"How the OAuth2 client identifies itself to the authorization server when\n fetching tokens."},{"type":"null"}],"title":"auth_style","description":"if unset, auto-detect which authentication\n style the provider wants by trying both ways and caching\n the successful way for the future."}},"additionalProperties":false},"scopes":{"type":"array","items":{"type":"string"},"title":"scopes","description":"Scope to control what data the OAuth2 server returns."},"authorizationUrlParams":{"type":"object","title":"authorization_url_params","additionalProperties":{"type":"string","title":"value"},"description":"Additional parameters to add to authorization requests."}},"title":"UpstreamOAuth2","additionalProperties":false,"description":"Configuration for OAuth2 authorization for an upstream service behind\n Pomerium."},{"type":"null"}],"title":"upstream_oauth2","description":"Specifies that before the request reaches the MCP upstream server,\n it should acquire an OAuth2 token."},"maxRequestBytes":{"type":["integer","null"],"title":"max_request_bytes","description":"The maximum request body size in bytes that can be sent to the MCP\n server (default: 4KiB)."},"path":{"type":["string","null"],"title":"path","description":"The path to append to the URL when returning the server URL in the\n .mcp/routes endpoint. Defaults to \"/\"."},"authorizationServerUrl":{"type":["string","null"],"title":"authorization_server_url","description":"The issuer URL of the upstream authorization server. Used as a fallback\n when PRM (RFC 9728) discovery fails, per the MCP spec's \"abort or use\n pre-configured values\" guidance."}},"additionalProperties":false}},"title":"server","required":["server"]}],"title":"MCP","additionalProperties":false,"description":"Configuration for an MCP route."},{"type":"null"}],"title":"mcp","description":"Model Context Protocol configuration for this route. Requires the\n runtime_flags.mcp feature flag."},"circuitBreakerThresholds":{"oneOf":[{"type":"object","properties":{"maxConnections":{"type":["integer","null"],"title":"max_connections","description":"The maximum number of connections that Envoy will make to the upstream\n cluster. If not specified, the default is 1024."},"maxPendingRequests":{"type":["integer","null"],"title":"max_pending_requests","description":"The maximum number of pending requests that Envoy will allow to the\n upstream cluster. If not specified, the default is 1024. This limit is\n applied as a connection limit for non-HTTP traffic."},"maxRequests":{"type":["integer","null"],"title":"max_requests","description":"The maximum number of parallel requests that Envoy will make to the\n upstream cluster. If not specified, the default is 1024. This limit does\n not apply to non-HTTP traffic."},"maxRetries":{"type":["integer","null"],"title":"max_retries","description":"The maximum number of parallel retries that Envoy will allow to the\n upstream cluster. If not specified, the default is 3."},"maxConnectionPools":{"type":["integer","null"],"title":"max_connection_pools","description":"The maximum number of connection pools per cluster that Envoy will\n concurrently support at once. If not specified, the default is unlimited.\n Set this for clusters which create a large number of connection pools."}},"title":"CircuitBreakerThresholds","additionalProperties":false,"description":"CircuitBreakerThresholds defines CircuitBreaker settings."},{"type":"null"}],"title":"circuit_breaker_thresholds","description":"Circuit breaker thresholds for upstream requests on this route."},"upstreamTunnel":{"oneOf":[{"type":"object","properties":{"sshPolicy":{"oneOf":[{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},{"type":"null"}],"title":"ssh_policy","description":"PPL policy enforced before the SSH tunnel is opened to the upstream."},"sshPolicyRego":{"type":"array","items":{"type":"string"},"title":"ssh_policy_rego","description":"Rego rules evaluated before the SSH tunnel is opened to the upstream."},"sshPolicyId":{"type":["string","null"],"title":"ssh_policy_id","description":"ID of a shared policy whose rules also gate this SSH tunnel."}},"title":"UpstreamTunnel","additionalProperties":false,"description":"Configuration for an upstream tunnel. Applies to routes whose upstream is\n reached through Pomerium's SSH proxy."},{"type":"null"}],"title":"upstream_tunnel","description":"Configuration for reverse tunneling to upstreams for this route."},"outlierDetection":{"oneOf":[{"type":"object","properties":{"consecutive5xx":{"title":"consecutive_5xx","description":"The number of consecutive server-side error responses (for HTTP traffic,\n 5xx responses; for TCP traffic, connection failures; for Redis, failure to\n respond PONG; etc.) before a consecutive 5xx ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"interval":{"title":"interval","description":"The time interval between ejection analysis sweeps. This can result in\n both new ejections as well as hosts being returned to service. Defaults\n to 10000ms or 10s.","type":"string","format":"duration"},"baseEjectionTime":{"title":"base_ejection_time","description":"The base time that a host is ejected for. The real time is equal to the\n base time multiplied by the number of times the host has been ejected and is\n capped by :ref:`max_ejection_time`.\n Defaults to 30000ms or 30s.","type":"string","format":"duration"},"maxEjectionPercent":{"title":"max_ejection_percent","description":"The maximum % of an upstream cluster that can be ejected due to outlier detection. Defaults to 10% .\n Will eject at least one host regardless of the value if :ref:`always_eject_one_host` is enabled.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutive5xx":{"title":"enforcing_consecutive_5xx","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive 5xx. This setting can be used to disable\n ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingSuccessRate":{"title":"enforcing_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics. This setting can be used to\n disable ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateMinimumHosts":{"title":"success_rate_minimum_hosts","description":"The number of hosts in a cluster that must have enough request volume to\n detect success rate outliers. If the number of hosts is less than this\n setting, outlier detection via success rate statistics is not performed\n for any host in the cluster. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateRequestVolume":{"title":"success_rate_request_volume","description":"The minimum number of total requests that must be collected in one\n interval (as defined by the interval duration above) to include this host\n in success rate based outlier detection. If the volume is lower than this\n setting, outlier detection via success rate statistics is not performed\n for that host. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateStdevFactor":{"title":"success_rate_stdev_factor","description":"This factor is used to determine the ejection threshold for success rate\n outlier ejection. The ejection threshold is the difference between the\n mean success rate, and the product of this factor and the standard\n deviation of the mean success rate: mean - (stdev *\n success_rate_stdev_factor). This factor is divided by a thousand to get a\n double. That is, if the desired factor is 1.9, the runtime value should\n be 1900. Defaults to 1900.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"consecutiveGatewayFailure":{"title":"consecutive_gateway_failure","description":"The number of consecutive gateway failures (502, 503, 504 status codes)\n before a consecutive gateway failure ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveGatewayFailure":{"title":"enforcing_consecutive_gateway_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive gateway failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"splitExternalLocalOriginErrors":{"type":"boolean","title":"split_external_local_origin_errors","description":"Determines whether to distinguish local origin failures from external errors. If set to true\n the following configuration parameters are taken into account:\n :ref:`consecutive_local_origin_failure`,\n :ref:`enforcing_consecutive_local_origin_failure`\n and\n :ref:`enforcing_local_origin_success_rate`.\n Defaults to false."},"consecutiveLocalOriginFailure":{"title":"consecutive_local_origin_failure","description":"The number of consecutive locally originated failures before ejection\n occurs. Defaults to 5. Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveLocalOriginFailure":{"title":"enforcing_consecutive_local_origin_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive locally originated failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingLocalOriginSuccessRate":{"title":"enforcing_local_origin_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics for locally originated errors.\n This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageThreshold":{"title":"failure_percentage_threshold","description":"The failure percentage to use when determining failure percentage-based outlier detection. If\n the failure percentage of a given host is greater than or equal to this value, it will be\n ejected. Defaults to 85.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentage":{"title":"enforcing_failure_percentage","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n failure percentage statistics. This setting can be used to disable ejection or to ramp it up\n slowly. Defaults to 0.\n\n [#next-major-version: setting this without setting failure_percentage_threshold should be\n invalid in v4.]","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentageLocalOrigin":{"title":"enforcing_failure_percentage_local_origin","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n local-origin failure percentage statistics. This setting can be used to disable ejection or to\n ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageMinimumHosts":{"title":"failure_percentage_minimum_hosts","description":"The minimum number of hosts in a cluster in order to perform failure percentage-based ejection.\n If the total number of hosts in the cluster is less than this value, failure percentage-based\n ejection will not be performed. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageRequestVolume":{"title":"failure_percentage_request_volume","description":"The minimum number of total requests that must be collected in one interval (as defined by the\n interval duration above) to perform failure percentage-based ejection for this host. If the\n volume is lower than this setting, failure percentage-based ejection will not be performed for\n this host. Defaults to 50.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"maxEjectionTime":{"title":"max_ejection_time","description":"The maximum time that a host is ejected for. See :ref:`base_ejection_time`\n for more information. If not specified, the default value (300000ms or 300s) or\n :ref:`base_ejection_time` value is applied, whatever is larger.","type":"string","format":"duration"},"maxEjectionTimeJitter":{"title":"max_ejection_time_jitter","description":"The maximum amount of jitter to add to the ejection time, in order to prevent\n a 'thundering herd' effect where all proxies try to reconnect to host at the same time.\n See :ref:`max_ejection_time_jitter`\n Defaults to 0s.","type":"string","format":"duration"},"successfulActiveHealthCheckUnejectHost":{"title":"successful_active_health_check_uneject_host","description":"If active health checking is enabled and a host is ejected by outlier detection, a successful active health check\n unejects the host by default and considers it as healthy. Unejection also clears all the outlier detection counters.\n To change this default behavior set this config to ``false`` where active health checking will not uneject the host.\n Defaults to true.","type":"boolean"},"alwaysEjectOneHost":{"title":"always_eject_one_host","description":"If enabled, at least one host is ejected regardless of the value of :ref:`max_ejection_percent`.\n Defaults to false.","type":"boolean"}},"title":"OutlierDetection","additionalProperties":false},{"type":"null"}],"title":"outlier_detection","description":"Passive health checking via outlier detection for upstream hosts on\n this route."},"healthChecks":{"type":"array","items":{"type":"object","allOf":[{"properties":{"timeout":{"title":"timeout","description":"The time to wait for a health check response. If the timeout is reached the\n health check attempt will be considered a failure.","type":"string","format":"duration"},"interval":{"title":"interval","description":"The interval between health checks.","type":"string","format":"duration"},"initialJitter":{"title":"initial_jitter","description":"An optional jitter amount in milliseconds. If specified, Envoy will start health\n checking after for a random time in ms between 0 and initial_jitter. This only\n applies to the first health check.","type":"string","format":"duration"},"intervalJitter":{"title":"interval_jitter","description":"An optional jitter amount in milliseconds. If specified, during every\n interval Envoy will add interval_jitter to the wait time.","type":"string","format":"duration"},"intervalJitterPercent":{"type":"integer","title":"interval_jitter_percent","description":"An optional jitter amount as a percentage of interval_ms. If specified,\n during every interval Envoy will add ``interval_ms`` *\n ``interval_jitter_percent`` / 100 to the wait time.\n\n If interval_jitter_ms and interval_jitter_percent are both set, both of\n them will be used to increase the wait time."},"unhealthyThreshold":{"title":"unhealthy_threshold","description":"The number of unhealthy health checks required before a host is marked\n unhealthy. Note that for ``http`` health checking if a host responds with a code not in\n :ref:`expected_statuses `\n or :ref:`retriable_statuses `,\n this threshold is ignored and the host is considered immediately unhealthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"healthyThreshold":{"title":"healthy_threshold","description":"The number of healthy health checks required before a host is marked\n healthy. Note that during startup, only a single successful health check is\n required to mark a host healthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"altPort":{"title":"alt_port","description":"[#not-implemented-hide:] Non-serving port for health checking.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"reuseConnection":{"title":"reuse_connection","description":"Reuse health check connection between health checks. Default is true.","type":"boolean"},"noTrafficInterval":{"title":"no_traffic_interval","description":"The \"no traffic interval\" is a special health check interval that is used when a cluster has\n never had traffic routed to it. This lower interval allows cluster information to be kept up to\n date, without sending a potentially large amount of active health checking traffic for no\n reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined. Note that this interval takes precedence over\n any other.\n\n The default value for \"no traffic interval\" is 60 seconds.","type":"string","format":"duration"},"noTrafficHealthyInterval":{"title":"no_traffic_healthy_interval","description":"The \"no traffic healthy interval\" is a special health check interval that\n is used for hosts that are currently passing active health checking\n (including new hosts) when the cluster has received no traffic.\n\n This is useful for when we want to send frequent health checks with\n ``no_traffic_interval`` but then revert to lower frequency ``no_traffic_healthy_interval`` once\n a host in the cluster is marked as healthy.\n\n Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined.\n\n If no_traffic_healthy_interval is not set, it will default to the\n no traffic interval and send that interval regardless of health state.","type":"string","format":"duration"},"unhealthyInterval":{"title":"unhealthy_interval","description":"The \"unhealthy interval\" is a health check interval that is used for hosts that are marked as\n unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the\n standard health check interval that is defined.\n\n The default value for \"unhealthy interval\" is the same as \"interval\".","type":"string","format":"duration"},"unhealthyEdgeInterval":{"title":"unhealthy_edge_interval","description":"The \"unhealthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as unhealthy. For subsequent health checks\n Envoy will shift back to using either \"unhealthy interval\" if present or the standard health\n check interval that is defined.\n\n The default value for \"unhealthy edge interval\" is the same as \"unhealthy interval\".","type":"string","format":"duration"},"healthyEdgeInterval":{"title":"healthy_edge_interval","description":"The \"healthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as healthy. For subsequent health checks\n Envoy will shift back to using the standard health check interval that is defined.\n\n The default value for \"healthy edge interval\" is the same as the default interval.","type":"string","format":"duration"},"alwaysLogHealthCheckFailures":{"type":"boolean","title":"always_log_health_check_failures","description":"If set to true, health check failure events will always be logged. If set to false, only the\n initial health check failure event will be logged.\n The default value is false."},"alwaysLogHealthCheckSuccess":{"type":"boolean","title":"always_log_health_check_success","description":"If set to true, health check success events will always be logged. If set to false, only host addition event will be logged\n if it is the first successful health check, or if the healthy threshold is reached.\n The default value is false."},"transportSocketMatchCriteria":{"title":"transport_socket_match_criteria","description":"Optional key/value pairs that will be used to match a transport socket from those specified in the cluster's\n :ref:`tranport socket matches `.\n For example, the following match criteria\n\n .. code-block:: yaml\n\n transport_socket_match_criteria:\n useMTLS: true\n\n Will match the following :ref:`cluster socket match `\n\n .. code-block:: yaml\n\n transport_socket_matches:\n - name: \"useMTLS\"\n match:\n useMTLS: true\n transport_socket:\n name: envoy.transport_sockets.tls\n config: { ... } # tls socket configuration\n\n If this field is set, then for health checks it will supersede an entry of ``envoy.transport_socket`` in the\n :ref:`LbEndpoint.Metadata `.\n This allows using different transport socket capabilities for health checking versus proxying to the\n endpoint.\n\n If the key/values pairs specified do not match any\n :ref:`transport socket matches `,\n the cluster's :ref:`transport socket `\n will be used for health check socket configuration.","type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"}}}},{"oneOf":[{"type":"object","properties":{"grpcHealthCheck":{"title":"grpc_health_check","description":"gRPC health check.","type":"object","properties":{"serviceName":{"type":"string","title":"service_name","description":"An optional service name parameter which will be sent to gRPC service in\n `grpc.health.v1.HealthCheckRequest\n `_.\n message. See `gRPC health-checking overview\n `_ for\n more information."},"authority":{"type":"string","title":"authority","description":"The value of the :authority header in the gRPC health check request. If\n left empty (default value), the name of the cluster this health check is\n associated with will be used. The authority header can be customized for\n a specific endpoint by setting the :ref:`hostname\n `\n field."}},"additionalProperties":false}},"title":"grpc_health_check","required":["grpcHealthCheck"]},{"type":"object","properties":{"httpHealthCheck":{"title":"http_health_check","description":"HTTP health check.","type":"object","properties":{"host":{"type":"string","title":"host","description":"The value of the host header in the HTTP health check request. If\n left empty (default value), the name of the cluster this health check is associated\n with will be used. The host header can be customized for a specific endpoint by setting the\n :ref:`hostname ` field."},"path":{"type":"string","title":"path","description":"Specifies the HTTP path that will be requested during health checking. For example\n ``/healthcheck``."},"send":{"title":"send","description":"HTTP specific payload to be sent as the request body during health checking.\n If specified, the method should support a request body (POST, PUT, PATCH, etc.).","type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"additionalProperties":false},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"Specifies a list of HTTP expected responses to match in the first ``response_buffer_size`` bytes of the response body.\n If it is set, both the expected response check and status code determine the health check.\n When checking the response, “fuzzy” matching is performed such that each payload block must be found,\n and in the order specified, but not necessarily contiguous.\n\n .. note::\n\n It is recommended to set ``response_buffer_size`` based on the total Payload size for efficiency.\n The default buffer size is 1024 bytes when it is not set."},"responseBufferSize":{"title":"response_buffer_size","description":"Specifies the size of response buffer in bytes that is used to Payload match.\n The default value is 1024. Setting to 0 implies that the Payload will be matched against the entire response.","type":"object","properties":{"value":{"type":["integer","string"],"title":"value","format":"int64","description":"The uint64 value."}},"additionalProperties":false},"requestHeadersToRemove":{"type":"array","items":{"type":"string"},"title":"request_headers_to_remove","description":"Specifies a list of HTTP headers that should be removed from each request that is sent to the\n health checked cluster."},"expectedStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"expected_statuses","description":"Specifies a list of HTTP response statuses considered healthy. If provided, replaces default\n 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open\n semantics of :ref:`Int64Range `. The start and end of each\n range are required. Only statuses in the range [100, 600) are allowed."},"retriableStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"retriable_statuses","description":"Specifies a list of HTTP response statuses considered retriable. If provided, responses in this range\n will count towards the configured :ref:`unhealthy_threshold `,\n but will not result in the host being considered immediately unhealthy. Ranges follow half-open semantics of\n :ref:`Int64Range `. The start and end of each range are required.\n Only statuses in the range [100, 600) are allowed. The :ref:`expected_statuses `\n field takes precedence for any range overlaps with this field i.e. if status code 200 is both retriable and expected, a 200 response will\n be considered a successful health check. By default all responses not in\n :ref:`expected_statuses ` will result in\n the host being considered immediately unhealthy i.e. if status code 200 is expected and there are no configured retriable statuses, any\n non-200 response will result in the host being marked unhealthy."},"codecClientType":{"title":"codec_client_type","description":"Use specified application protocol for health checks.","type":"string","enum":["HTTP1","HTTP2","HTTP3"]}},"additionalProperties":false}},"title":"http_health_check","required":["httpHealthCheck"]},{"type":"object","properties":{"tcpHealthCheck":{"title":"tcp_health_check","description":"TCP health check.","type":"object","properties":{"send":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"When checking the response, “fuzzy” matching is performed such that each\n payload block must be found, and in the order specified, but not\n necessarily contiguous."}},"additionalProperties":false}},"title":"tcp_health_check","required":["tcpHealthCheck"]}]}],"title":"HealthCheck","additionalProperties":false,"description":"[#next-free-field: 27]"},"title":"health_checks","description":"Active health checks to run against upstream hosts for this route."},"loadBalancingPolicy":{"oneOf":[{"type":"string","title":"LoadBalancingPolicy","enum":["LOAD_BALANCING_POLICY_UNSPECIFIED","LOAD_BALANCING_POLICY_ROUND_ROBIN","LOAD_BALANCING_POLICY_MAGLEV","LOAD_BALANCING_POLICY_RANDOM","LOAD_BALANCING_POLICY_RING_HASH","LOAD_BALANCING_POLICY_LEAST_REQUEST"],"description":"LoadBalancingPolicy defines the strategy used to balance requests across\n upstream endpoints"},{"type":"null"}],"title":"load_balancing_policy","description":"The load balancing algorithm for upstream endpoints. Options:\n ROUND_ROBIN, RING_HASH, LEAST_REQUEST, RANDOM, MAGLEV."},"healthyPanicThreshold":{"type":["integer","null"],"title":"healthy_panic_threshold","format":"int32","description":"If the percentage of healthy upstream hosts drops below this value,\n traffic will be sent to all hosts regardless of health status."},"allowUpgrades":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"allow_upgrades","description":"Allows HTTP upgrade requests to be forwarded upstream."},"sessionRecording":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Toggle to enable/disable recording for this route."}},"title":"SessionRecording","additionalProperties":false,"description":"SessionRecording defines session recording settings for routes."},{"type":"null"}],"title":"session_recording","description":"Configures session recording behaviour on this route.\n SSH specific."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"enforcedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_policies","description":"Policies that are automatically enforced.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_policies","description":"Info about policies assigned to this route.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the route.","readOnly":true}},"title":"Route","additionalProperties":false,"description":"Configuration for a route."},"updateMask":{"oneOf":[{"type":"string","description":"`FieldMask` represents a set of symbolic field paths, for example:\n\n paths: \"f.a\"\n paths: \"f.b.d\"\n\n Here `f` represents a field in some root message, `a` and `b`\n fields in the message found in `f`, and `d` a field found in the\n message in `f.b`.\n\n Field masks are used to specify a subset of fields that should be\n returned by a get operation or modified by an update operation.\n Field masks also have a custom JSON encoding (see below).\n\n # Field Masks in Projections\n\n When used in the context of a projection, a response message or\n sub-message is filtered by the API to only contain those fields as\n specified in the mask. For example, if the mask in the previous\n example is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\n The result will not contain specific values for fields x,y and z\n (their value will be set to the default, and omitted in proto text\n output):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\n A repeated field is not allowed except at the last position of a\n paths string.\n\n If a FieldMask object is not present in a get operation, the\n operation applies to all fields (as if a FieldMask of all fields\n had been specified).\n\n Note that a field mask does not necessarily apply to the\n top-level response message. In case of a REST get operation, the\n field mask applies directly to the response, but in case of a REST\n list operation, the mask instead applies to each individual message\n in the returned resource list. In case of a REST custom method,\n other definitions may be used. Where the mask applies will be\n clearly documented together with its declaration in the API. In\n any case, the effect on the returned resource/resources is required\n behavior for APIs.\n\n # Field Masks in Update Operations\n\n A field mask in update operations specifies which fields of the\n targeted resource are going to be updated. The API is required\n to only change the values of the fields as specified in the mask\n and leave the others untouched. If a resource is passed in to\n describe the updated values, the API ignores the values of all\n fields not covered by the mask.\n\n If a repeated field is specified for an update operation, new values will\n be appended to the existing repeated field in the target resource. Note that\n a repeated field is only allowed in the last position of a `paths` string.\n\n If a sub-message is specified in the last position of the field mask for an\n update operation, then new value will be merged into the existing sub-message\n in the target resource.\n\n For example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\n And an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\n then if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\n then the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\n An implementation may provide options to override this default behavior for\n repeated and message fields.\n\n Note that libraries which implement FieldMask resolution have various\n different behaviors in the face of empty masks or the special \"*\" mask.\n When implementing a service you should confirm these cases have the\n appropriate behavior in the underlying FieldMask library that you desire,\n and you may need to special case those cases in your application code if\n the underlying field mask library behavior differs from your intended\n service semantics.\n\n Update methods implementing https://google.aip.dev/134\n - MUST support the special value * meaning \"full replace\"\n - MUST treat an omitted field mask as \"replace fields which are present\".\n\n Other methods implementing https://google.aip.dev/157\n - SHOULD support the special value \"*\" to mean \"get all\".\n - MUST treat an omitted field mask to mean \"get all\", unless otherwise\n documented.\n\n ## Considerations for HTTP REST\n\n The HTTP kind of an update operation which uses a field mask must\n be set to PATCH instead of PUT in order to satisfy HTTP semantics\n (PUT must only be used for full updates).\n\n # JSON Encoding of Field Masks\n\n In JSON, a field mask is encoded as a single string where paths are\n separated by a comma. Fields name in each path are converted\n to/from lower-camel naming conventions.\n\n As an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\n In proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\n In JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n # Field Masks and Oneof Fields\n\n Field masks treat fields in oneofs just as regular fields. Consider the\n following message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\n The field mask can be:\n\n mask {\n paths: \"name\"\n }\n\n Or:\n\n mask {\n paths: \"sub_message\"\n }\n\n Note that oneof type names (\"test_oneof\" in this case) cannot be used in\n paths.\n\n ## Field Mask Verification\n\n The implementation of any API method which has a FieldMask type field in the\n request should verify the included field paths, and return an\n `INVALID_ARGUMENT` error if any path is unmappable.","title":"google.protobuf.FieldMask"},{"type":"null"}],"title":"update_mask","description":"Optional update_mask to only update a subset of the fields."}},"title":"UpdateRouteRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-route.StatusCodes.json b/content/docs/api/pomerium-config-config-service-update-route.StatusCodes.json new file mode 100644 index 000000000..c12919f56 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-route.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"route":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The id of the route."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"The namespace id of the route."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"The originator id of the route."},"name":{"type":["string","null"],"title":"name","description":"The name of the route."},"statName":{"type":["string","null"],"title":"stat_name","description":"The name used for stats telemetry with the route."},"description":{"type":["string","null"],"title":"description","description":"A human-readable description of the route."},"logoUrl":{"type":["string","null"],"title":"logo_url","description":"A URL for a logo for the route."},"from":{"type":"string","title":"from","description":"The externally accessible URL for a proxied HTTP request."},"to":{"type":"array","items":{"type":"string"},"title":"to","description":"The destination(s) of a proxied request."},"redirect":{"title":"redirect","description":"Indicates that a route should be redirected.","type":"object","properties":{"httpsRedirect":{"type":["boolean","null"],"title":"https_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n \"https\"."},"schemeRedirect":{"type":["string","null"],"title":"scheme_redirect","description":"Indicates that the incoming scheme of a request will be swapped with\n the given value."},"hostRedirect":{"type":["string","null"],"title":"host_redirect","description":"Indicates that the incoming host of a request will be swapped with\n the given value."},"portRedirect":{"type":["integer","null"],"title":"port_redirect","description":"Indicates that the incoming port of a request will be swapped with\n the given value."},"pathRedirect":{"type":["string","null"],"title":"path_redirect","description":"Indicates that the incoming path portion of a request URL will be\n swapped with the given value."},"prefixRewrite":{"type":["string","null"],"title":"prefix_rewrite","description":"Indicates that the incoming matched path prefix portion of a request\n URL will be swapped with the given value."},"responseCode":{"type":["integer","null"],"title":"response_code","format":"int32","description":"The response code used for the redirect. Defaults to 301."},"stripQuery":{"type":["boolean","null"],"title":"strip_query","description":"Indicates that during redirection, the query portion of the URL will\n be removed. Defaults to false."}},"additionalProperties":false},"response":{"title":"response","description":"Indicates that a route should return a direct response.","type":"object","properties":{"status":{"type":"integer","title":"status","description":"The status code that Pomerium returns for a static HTTP response.\n For example, 200."},"body":{"type":"string","title":"body","description":"The response body that Pomerium returns for a static HTTP\n response."}},"additionalProperties":false},"loadBalancingWeights":{"type":"array","items":{"type":"integer"},"title":"load_balancing_weights","description":"Optional load balancing weights for upstream servers defined in to.\n If not specified, all upstream servers are assigned the same weight.\n If provided, len(to) must equal len(load_balancing_weights)."},"allowedUsers":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_users","description":"Grants access to the route if the logged-in user's ID matches one of the\n given values. Deprecated in favor of the PPL user criterion.","deprecated":true},"allowedDomains":{"type":"array","items":{"type":"string","deprecated":true},"title":"allowed_domains","description":"Grants access to the route if the logged-in user's email address is for\n one of the given values. Deprecated in favor of the PPL domain criterion.","deprecated":true},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access to the route if the logged-in user's session/user claims\n match one of the given values. Deprecated in favor of the PPL claim\n criterion.","deprecated":true},"prefix":{"type":"string","title":"prefix","description":"Only match requests that have a path that begins with the given prefix."},"path":{"type":"string","title":"path","description":"Only match requests whose path is an exact match for the given path."},"regex":{"type":"string","title":"regex","description":"Only match requests whose path matches the given regular expression."},"prefixRewrite":{"type":"string","title":"prefix_rewrite","description":"Indicates that when a request is forwarded, the matched prefix (or path)\n will be swapped with this value."},"regexRewritePattern":{"type":"string","title":"regex_rewrite_pattern","description":"A regular expression used to rewrite the path of a forwarded request."},"regexRewriteSubstitution":{"type":"string","title":"regex_rewrite_substitution","description":"When a regular expression pattern is set, what the matched pattern will\n be replaced with."},"regexPriorityOrder":{"type":["integer","string","null"],"title":"regex_priority_order","format":"int64","description":"Determines the ordering of routes that use regular expressions."},"corsAllowPreflight":{"type":"boolean","title":"cors_allow_preflight","description":"Indicates that OPTIONS requests used for CORS can pass through\n unauthenticated."},"allowPublicUnauthenticatedAccess":{"type":"boolean","title":"allow_public_unauthenticated_access","description":"Grants access to a route without requiring any authentication."},"allowAnyAuthenticatedUser":{"type":"boolean","title":"allow_any_authenticated_user","description":"Grants access to a route for any logged-in user."},"timeout":{"title":"timeout","description":"The per-route request timeout option. Cannot exceed global values.","type":"string","format":"duration"},"idleTimeout":{"title":"idle_timeout","description":"The per-route request timeout for a connection that is idle with\n no data exchange.","type":"string","format":"duration"},"allowWebsockets":{"type":"boolean","title":"allow_websockets","description":"Allow websocket requests. Also disables the default route timeout."},"allowSpdy":{"type":"boolean","title":"allow_spdy","description":"Allow SPDY protocol upgrade requests."},"tlsSkipVerify":{"type":"boolean","title":"tls_skip_verify","description":"Indicates that pomerium should perform no verification on upstream\n TLS connections. Any certificate for any hostname will be accepted."},"tlsServerName":{"type":"string","title":"tls_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence.","deprecated":true},"tlsUpstreamServerName":{"type":"string","title":"tls_upstream_server_name","description":"The server name indication (SNI) for upstream TLS connections. If\n both tls_server_name and tls_upstream_server_name are set,\n tls_upstream_server_name will take precedence."},"tlsDownstreamServerName":{"type":"string","title":"tls_downstream_server_name","description":"The server name indication (SNI) for downstream TLS connections."},"tlsCustomCa":{"type":"string","title":"tls_custom_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates of upstream TLS connections."},"tlsCustomCaFile":{"type":"string","title":"tls_custom_ca_file","description":"A file containing root certificate authorities (in PEM format)\n used to verify certificates of upstream TLS connections."},"tlsCustomCaKeyPairId":{"type":["string","null"],"title":"tls_custom_ca_key_pair_id","description":"A reference to a key pair containing root certificate authorities (in PEM\n format) used to verify certificates of upstream TLS connections."},"tlsClientCert":{"type":"string","title":"tls_client_cert","description":"The client certificate to present to upstream TLS connections for\n mTLS."},"tlsClientKey":{"type":"string","title":"tls_client_key","description":"The private key for the client certificate to present to upstream\n TLS connections for mTLS."},"tlsClientCertFile":{"type":"string","title":"tls_client_cert_file","description":"A file containing the client certificate to present to upstream TLS\n connections for mTLS."},"tlsClientKeyFile":{"type":"string","title":"tls_client_key_file","description":"A file containing the private key for the client certificate to\n present to upstream TLS connections for mTLS."},"tlsClientKeyPairId":{"type":["string","null"],"title":"tls_client_key_pair_id","description":"A reference to the key pair containing the client certificate\n and private key to present to upstream TLS connections for mTLS."},"tlsDownstreamClientCa":{"type":"string","title":"tls_downstream_client_ca","description":"The root certificate authorities (in PEM format) used to verify\n certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaFile":{"type":"string","title":"tls_downstream_client_ca_file","description":"A file containing the root certificate authorities (in PEM format) used to\n verify certificates for downstream TLS connections. If specified\n downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsDownstreamClientCaKeyPairId":{"type":["string","null"],"title":"tls_downstream_client_ca_key_pair_id","description":"A reference to a key pair containing the root certificate authorities (in\n PEM format) used to verify certificates for downstream TLS connections. If\n specified downstream clients will be required to provide a valid client TLS\n certificate.","deprecated":true},"tlsUpstreamAllowRenegotiation":{"type":"boolean","title":"tls_upstream_allow_renegotiation","description":"Controls whether server-initiated TLS renegotiation is allowed for\n upstream servers."},"setRequestHeaders":{"type":"object","title":"set_request_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set both static and dynamic headers for upstream requests.\n Static values can be useful if you want to pass along additional\n information to upstream applications as headers, or to set a fixed\n authentication header on the request. Dynamic values enable you to pass\n ID and Access tokens from your identity provider to upstream\n applications. The following dynamic header values are supported:\n\n - ${pomerium.access_token}: OAuth access token from the identity provider.\n - ${pomerium.client_cert_fingerprint}: Short-form SHA-256 fingerprint of the presented client certificate.\n - ${pomerium.id_token}: OIDC ID token from the identity provider.\n - ${pomerium.jwt}: The Pomerium assertion JWT for the logged-in user."},"removeRequestHeaders":{"type":"array","items":{"type":"string"},"title":"remove_request_headers","description":"Headers to remove from upstream requests. This can be useful if you want to\n prevent privacy information from being passed to upstream applications."},"setResponseHeaders":{"type":"object","title":"set_response_headers","additionalProperties":{"type":"string","title":"value"},"description":"Allows you to set static values for the given downstream response headers.\n These headers will take precedence over the global set_response_headers."},"rewriteResponseHeaders":{"type":"array","items":{"type":"object","allOf":[{"properties":{"header":{"type":"string","title":"header","description":"The name of the response header to rewrite (case-insensitive)."},"value":{"type":"string","title":"value","description":"The new value (or replacement substring, when `prefix` is set) to write\n back to the header."}}},{"oneOf":[{"type":"object","properties":{"prefix":{"type":"string","title":"prefix","description":"Only the portion of the header value that begins with this literal\n prefix is replaced; the remainder is kept."}},"title":"prefix","required":["prefix"]}]}],"title":"RouteRewriteHeader","additionalProperties":false,"description":"A rewrite rule applied to a single response header before the response is\n returned to the downstream client."},"title":"rewrite_response_headers","description":"Used to modify downstream response headers."},"preserveHostHeader":{"type":"boolean","title":"preserve_host_header","description":"Passes the Host (or :authority) header from the incoming request to the\n upstream service, instead of the Host header from the route's to URL."},"passIdentityHeaders":{"type":["boolean","null"],"title":"pass_identity_headers","description":"Sends identity headers to all upstream applications. Identity headers\n include:\n\n - X-Pomerium-Jwt-Assertion: The pomerium assertion JWT for the logged-in user.\n - X-Pomerium-Claim-*: Each of the claim values specified by the jwt_claim_headers option.\n\n When not set explicitly, the global pass_identity_headers option will be used."},"kubernetesServiceAccountToken":{"type":"string","title":"kubernetes_service_account_token","description":"A Kubernetes service account token used to authenticate to the\n Kubernetes API via Authorization: Bearer and Impersonate-User/Group\n headers."},"kubernetesServiceAccountTokenFile":{"type":"string","title":"kubernetes_service_account_token_file","description":"A file containing a Kubernetes service account token."},"kubernetesServiceAccountTokenKeyPairId":{"type":["string","null"],"title":"kubernetes_service_account_token_key_pair_id","description":"A key pair reference for a Kubernetes service account token."},"enableGoogleCloudServerlessAuthentication":{"type":"boolean","title":"enable_google_cloud_serverless_authentication","description":"Adds an Authorization: Bearer ID_TOKEN header for Google Cloud\n serverless upstream requests."},"jwtIssuerFormat":{"oneOf":[{"type":"string","title":"IssuerFormat","enum":["IssuerHostOnly","IssuerURI"],"description":"Format used for the `iss` claim of JWTs Pomerium issues for upstream\n requests."},{"type":"null"}],"title":"jwt_issuer_format","description":"Controls the format of the iss claim in JWTs passed to upstream\n services by this route."},"jwtGroupsFilter":{"type":"array","items":{"type":"string"},"title":"jwt_groups_filter","description":"Allowlist of group names or IDs to include in the Pomerium JWT for\n this route."},"jwtGroupsFilterInferFromPpl":{"type":["boolean","null"],"title":"jwt_groups_filter_infer_from_ppl","description":"Whether to add JWT groups from any PPL policies.\n Not supported in the open source version of Pomerium."},"bearerTokenFormat":{"oneOf":[{"type":"string","title":"BearerTokenFormat","enum":["BEARER_TOKEN_FORMAT_UNKNOWN","BEARER_TOKEN_FORMAT_DEFAULT","BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN","BEARER_TOKEN_FORMAT_IDP_IDENTITY_TOKEN"],"description":"Controls how HTTP bearer token authentication is handled."},{"type":"null"}],"title":"bearer_token_format","description":"Controls how authorization bearer tokens are interpreted for this\n route. When unset, the global bearer_token_format option is used."},"dependsOn":{"type":"array","items":{"type":"string"},"title":"depends_on","description":"Additional hosts that participate in chained login redirects for\n this route. Up to five hosts are supported."},"policies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the policy."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the policy belongs to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the policy originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the policy."},"description":{"type":["string","null"],"title":"description","description":"Free-form description of what the policy is for."},"enforced":{"type":["boolean","null"],"title":"enforced","description":"An enforced policy is automatically applied to routes.\n Not supported in the open source version of Pomerium."},"allowedUsers":{"type":"array","items":{"type":"string"},"title":"allowed_users","description":"Grants access if the logged-in user's ID matches one of the given values."},"allowedDomains":{"type":"array","items":{"type":"string"},"title":"allowed_domains","description":"Grants access if the logged-in user's email address domain matches one\n of the given values."},"allowedIdpClaims":{"type":"object","title":"allowed_idp_claims","additionalProperties":{"title":"value","type":"object","properties":{"values":{"type":"array","items":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"title":"values","description":"Repeated field of dynamically typed values."}},"additionalProperties":false,"description":"Represents a JSON array."},"description":"Grants access if the logged-in user's IdP claims include one of the\n listed key/value pairs."},"rego":{"type":"array","items":{"type":"string"},"title":"rego","description":"Rego rules that authorize requests. All rules must allow for access to\n be granted."},"sourcePpl":{"type":["string","null"],"title":"source_ppl","description":"The original PPL source the policy was compiled from, when available."},"explanation":{"type":["string","null"],"title":"explanation","description":"Free-form text shown to the user explaining why this policy applies."},"remediation":{"type":["string","null"],"title":"remediation","description":"Free-form text shown to the user telling them how to gain access when\n this policy denies the request."},"createdAt":{"title":"created_at","description":"When the policy was created.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"modifiedAt":{"title":"modified_at","description":"When the policy was last modified.","readOnly":true,"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time"},"enforcedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_routes","description":"Routes that are automatically enforced by this policy.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedRoutes":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_routes","description":"Info about routes with this policy assigned.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the policy.","readOnly":true}},"title":"Policy","additionalProperties":false,"description":"Configuration for a policy."},"title":"policies","description":"Structured sub-policies attached to this route."},"pplPolicies":{"type":"array","items":{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},"title":"ppl_policies","description":"PPL policies attached to this route."},"policyIds":{"type":"array","items":{"type":"string"},"title":"policy_ids","description":"IDs of policies assigned to this route."},"hostRewrite":{"type":["string","null"],"title":"host_rewrite","description":"Rewrites the Host or :authority header to a fixed value."},"hostRewriteHeader":{"type":["string","null"],"title":"host_rewrite_header","description":"Rewrites the Host or :authority header using the value of another\n request header."},"hostPathRegexRewritePattern":{"type":["string","null"],"title":"host_path_regex_rewrite_pattern","description":"A regular expression used to rewrite the Host or :authority header\n from the request path."},"hostPathRegexRewriteSubstitution":{"type":["string","null"],"title":"host_path_regex_rewrite_substitution","description":"When host_path_regex_rewrite_pattern is set, what the matched\n pattern will be replaced with to produce the Host header."},"idpClientId":{"type":["string","null"],"title":"idp_client_id","description":"Overrides the global identity provider client ID for this route."},"idpClientSecret":{"type":["string","null"],"title":"idp_client_secret","description":"Overrides the global identity provider client secret for this route."},"idpAccessTokenAllowedAudiences":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"idp_access_token_allowed_audiences","description":"Allowed audiences for validating IdP-issued access tokens for this\n route."},"showErrorDetails":{"type":"boolean","title":"show_error_details","description":"If true, include policy explanation and remediation details in\n authorization error responses."},"mcp":{"oneOf":[{"type":"object","oneOf":[{"type":"object","properties":{"client":{"title":"client","description":"Provides an application with external tokens for MCP server access.","type":"object","additionalProperties":false}},"title":"client","required":["client"]},{"type":"object","properties":{"server":{"title":"server","description":"Indicates that this route fronts an MCP server.","type":"object","properties":{"upstreamOauth2":{"oneOf":[{"type":"object","properties":{"clientId":{"type":"string","title":"client_id","description":"The public identifier for an application."},"clientSecret":{"type":"string","title":"client_secret","description":"The secret known only to the application and the authorization server."},"oauth2Endpoint":{"title":"oauth2_endpoint","description":"The OAuth2 endpoint configuration.","type":"object","properties":{"authUrl":{"type":"string","title":"auth_url","description":"The authorization URL."},"tokenUrl":{"type":"string","title":"token_url","description":"The token URL."},"authStyle":{"oneOf":[{"type":"string","title":"OAuth2AuthStyle","enum":["OAUTH2_AUTH_STYLE_UNSPECIFIED","OAUTH2_AUTH_STYLE_IN_PARAMS","OAUTH2_AUTH_STYLE_IN_HEADER"],"description":"How the OAuth2 client identifies itself to the authorization server when\n fetching tokens."},{"type":"null"}],"title":"auth_style","description":"if unset, auto-detect which authentication\n style the provider wants by trying both ways and caching\n the successful way for the future."}},"additionalProperties":false},"scopes":{"type":"array","items":{"type":"string"},"title":"scopes","description":"Scope to control what data the OAuth2 server returns."},"authorizationUrlParams":{"type":"object","title":"authorization_url_params","additionalProperties":{"type":"string","title":"value"},"description":"Additional parameters to add to authorization requests."}},"title":"UpstreamOAuth2","additionalProperties":false,"description":"Configuration for OAuth2 authorization for an upstream service behind\n Pomerium."},{"type":"null"}],"title":"upstream_oauth2","description":"Specifies that before the request reaches the MCP upstream server,\n it should acquire an OAuth2 token."},"maxRequestBytes":{"type":["integer","null"],"title":"max_request_bytes","description":"The maximum request body size in bytes that can be sent to the MCP\n server (default: 4KiB)."},"path":{"type":["string","null"],"title":"path","description":"The path to append to the URL when returning the server URL in the\n .mcp/routes endpoint. Defaults to \"/\"."},"authorizationServerUrl":{"type":["string","null"],"title":"authorization_server_url","description":"The issuer URL of the upstream authorization server. Used as a fallback\n when PRM (RFC 9728) discovery fails, per the MCP spec's \"abort or use\n pre-configured values\" guidance."}},"additionalProperties":false}},"title":"server","required":["server"]}],"title":"MCP","additionalProperties":false,"description":"Configuration for an MCP route."},{"type":"null"}],"title":"mcp","description":"Model Context Protocol configuration for this route. Requires the\n runtime_flags.mcp feature flag."},"circuitBreakerThresholds":{"oneOf":[{"type":"object","properties":{"maxConnections":{"type":["integer","null"],"title":"max_connections","description":"The maximum number of connections that Envoy will make to the upstream\n cluster. If not specified, the default is 1024."},"maxPendingRequests":{"type":["integer","null"],"title":"max_pending_requests","description":"The maximum number of pending requests that Envoy will allow to the\n upstream cluster. If not specified, the default is 1024. This limit is\n applied as a connection limit for non-HTTP traffic."},"maxRequests":{"type":["integer","null"],"title":"max_requests","description":"The maximum number of parallel requests that Envoy will make to the\n upstream cluster. If not specified, the default is 1024. This limit does\n not apply to non-HTTP traffic."},"maxRetries":{"type":["integer","null"],"title":"max_retries","description":"The maximum number of parallel retries that Envoy will allow to the\n upstream cluster. If not specified, the default is 3."},"maxConnectionPools":{"type":["integer","null"],"title":"max_connection_pools","description":"The maximum number of connection pools per cluster that Envoy will\n concurrently support at once. If not specified, the default is unlimited.\n Set this for clusters which create a large number of connection pools."}},"title":"CircuitBreakerThresholds","additionalProperties":false,"description":"CircuitBreakerThresholds defines CircuitBreaker settings."},{"type":"null"}],"title":"circuit_breaker_thresholds","description":"Circuit breaker thresholds for upstream requests on this route."},"upstreamTunnel":{"oneOf":[{"type":"object","properties":{"sshPolicy":{"oneOf":[{"type":"object","properties":{"raw":{"type":"string","title":"raw","format":"byte","description":"The serialized PPL document as raw bytes (typically YAML)."}},"title":"PPLPolicy","additionalProperties":false,"description":"A policy expressed in Pomerium Policy Language (PPL)."},{"type":"null"}],"title":"ssh_policy","description":"PPL policy enforced before the SSH tunnel is opened to the upstream."},"sshPolicyRego":{"type":"array","items":{"type":"string"},"title":"ssh_policy_rego","description":"Rego rules evaluated before the SSH tunnel is opened to the upstream."},"sshPolicyId":{"type":["string","null"],"title":"ssh_policy_id","description":"ID of a shared policy whose rules also gate this SSH tunnel."}},"title":"UpstreamTunnel","additionalProperties":false,"description":"Configuration for an upstream tunnel. Applies to routes whose upstream is\n reached through Pomerium's SSH proxy."},{"type":"null"}],"title":"upstream_tunnel","description":"Configuration for reverse tunneling to upstreams for this route."},"outlierDetection":{"oneOf":[{"type":"object","properties":{"consecutive5xx":{"title":"consecutive_5xx","description":"The number of consecutive server-side error responses (for HTTP traffic,\n 5xx responses; for TCP traffic, connection failures; for Redis, failure to\n respond PONG; etc.) before a consecutive 5xx ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"interval":{"title":"interval","description":"The time interval between ejection analysis sweeps. This can result in\n both new ejections as well as hosts being returned to service. Defaults\n to 10000ms or 10s.","type":"string","format":"duration"},"baseEjectionTime":{"title":"base_ejection_time","description":"The base time that a host is ejected for. The real time is equal to the\n base time multiplied by the number of times the host has been ejected and is\n capped by :ref:`max_ejection_time`.\n Defaults to 30000ms or 30s.","type":"string","format":"duration"},"maxEjectionPercent":{"title":"max_ejection_percent","description":"The maximum % of an upstream cluster that can be ejected due to outlier detection. Defaults to 10% .\n Will eject at least one host regardless of the value if :ref:`always_eject_one_host` is enabled.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutive5xx":{"title":"enforcing_consecutive_5xx","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive 5xx. This setting can be used to disable\n ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingSuccessRate":{"title":"enforcing_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics. This setting can be used to\n disable ejection or to ramp it up slowly. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateMinimumHosts":{"title":"success_rate_minimum_hosts","description":"The number of hosts in a cluster that must have enough request volume to\n detect success rate outliers. If the number of hosts is less than this\n setting, outlier detection via success rate statistics is not performed\n for any host in the cluster. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateRequestVolume":{"title":"success_rate_request_volume","description":"The minimum number of total requests that must be collected in one\n interval (as defined by the interval duration above) to include this host\n in success rate based outlier detection. If the volume is lower than this\n setting, outlier detection via success rate statistics is not performed\n for that host. Defaults to 100.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"successRateStdevFactor":{"title":"success_rate_stdev_factor","description":"This factor is used to determine the ejection threshold for success rate\n outlier ejection. The ejection threshold is the difference between the\n mean success rate, and the product of this factor and the standard\n deviation of the mean success rate: mean - (stdev *\n success_rate_stdev_factor). This factor is divided by a thousand to get a\n double. That is, if the desired factor is 1.9, the runtime value should\n be 1900. Defaults to 1900.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"consecutiveGatewayFailure":{"title":"consecutive_gateway_failure","description":"The number of consecutive gateway failures (502, 503, 504 status codes)\n before a consecutive gateway failure ejection occurs. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveGatewayFailure":{"title":"enforcing_consecutive_gateway_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive gateway failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"splitExternalLocalOriginErrors":{"type":"boolean","title":"split_external_local_origin_errors","description":"Determines whether to distinguish local origin failures from external errors. If set to true\n the following configuration parameters are taken into account:\n :ref:`consecutive_local_origin_failure`,\n :ref:`enforcing_consecutive_local_origin_failure`\n and\n :ref:`enforcing_local_origin_success_rate`.\n Defaults to false."},"consecutiveLocalOriginFailure":{"title":"consecutive_local_origin_failure","description":"The number of consecutive locally originated failures before ejection\n occurs. Defaults to 5. Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingConsecutiveLocalOriginFailure":{"title":"enforcing_consecutive_local_origin_failure","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through consecutive locally originated failures. This setting can be\n used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingLocalOriginSuccessRate":{"title":"enforcing_local_origin_success_rate","description":"The % chance that a host will be actually ejected when an outlier status\n is detected through success rate statistics for locally originated errors.\n This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100.\n Parameter takes effect only when\n :ref:`split_external_local_origin_errors`\n is set to true.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageThreshold":{"title":"failure_percentage_threshold","description":"The failure percentage to use when determining failure percentage-based outlier detection. If\n the failure percentage of a given host is greater than or equal to this value, it will be\n ejected. Defaults to 85.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentage":{"title":"enforcing_failure_percentage","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n failure percentage statistics. This setting can be used to disable ejection or to ramp it up\n slowly. Defaults to 0.\n\n [#next-major-version: setting this without setting failure_percentage_threshold should be\n invalid in v4.]","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"enforcingFailurePercentageLocalOrigin":{"title":"enforcing_failure_percentage_local_origin","description":"The % chance that a host will be actually ejected when an outlier status is detected through\n local-origin failure percentage statistics. This setting can be used to disable ejection or to\n ramp it up slowly. Defaults to 0.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageMinimumHosts":{"title":"failure_percentage_minimum_hosts","description":"The minimum number of hosts in a cluster in order to perform failure percentage-based ejection.\n If the total number of hosts in the cluster is less than this value, failure percentage-based\n ejection will not be performed. Defaults to 5.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"failurePercentageRequestVolume":{"title":"failure_percentage_request_volume","description":"The minimum number of total requests that must be collected in one interval (as defined by the\n interval duration above) to perform failure percentage-based ejection for this host. If the\n volume is lower than this setting, failure percentage-based ejection will not be performed for\n this host. Defaults to 50.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"maxEjectionTime":{"title":"max_ejection_time","description":"The maximum time that a host is ejected for. See :ref:`base_ejection_time`\n for more information. If not specified, the default value (300000ms or 300s) or\n :ref:`base_ejection_time` value is applied, whatever is larger.","type":"string","format":"duration"},"maxEjectionTimeJitter":{"title":"max_ejection_time_jitter","description":"The maximum amount of jitter to add to the ejection time, in order to prevent\n a 'thundering herd' effect where all proxies try to reconnect to host at the same time.\n See :ref:`max_ejection_time_jitter`\n Defaults to 0s.","type":"string","format":"duration"},"successfulActiveHealthCheckUnejectHost":{"title":"successful_active_health_check_uneject_host","description":"If active health checking is enabled and a host is ejected by outlier detection, a successful active health check\n unejects the host by default and considers it as healthy. Unejection also clears all the outlier detection counters.\n To change this default behavior set this config to ``false`` where active health checking will not uneject the host.\n Defaults to true.","type":"boolean"},"alwaysEjectOneHost":{"title":"always_eject_one_host","description":"If enabled, at least one host is ejected regardless of the value of :ref:`max_ejection_percent`.\n Defaults to false.","type":"boolean"}},"title":"OutlierDetection","additionalProperties":false},{"type":"null"}],"title":"outlier_detection","description":"Passive health checking via outlier detection for upstream hosts on\n this route."},"healthChecks":{"type":"array","items":{"type":"object","allOf":[{"properties":{"timeout":{"title":"timeout","description":"The time to wait for a health check response. If the timeout is reached the\n health check attempt will be considered a failure.","type":"string","format":"duration"},"interval":{"title":"interval","description":"The interval between health checks.","type":"string","format":"duration"},"initialJitter":{"title":"initial_jitter","description":"An optional jitter amount in milliseconds. If specified, Envoy will start health\n checking after for a random time in ms between 0 and initial_jitter. This only\n applies to the first health check.","type":"string","format":"duration"},"intervalJitter":{"title":"interval_jitter","description":"An optional jitter amount in milliseconds. If specified, during every\n interval Envoy will add interval_jitter to the wait time.","type":"string","format":"duration"},"intervalJitterPercent":{"type":"integer","title":"interval_jitter_percent","description":"An optional jitter amount as a percentage of interval_ms. If specified,\n during every interval Envoy will add ``interval_ms`` *\n ``interval_jitter_percent`` / 100 to the wait time.\n\n If interval_jitter_ms and interval_jitter_percent are both set, both of\n them will be used to increase the wait time."},"unhealthyThreshold":{"title":"unhealthy_threshold","description":"The number of unhealthy health checks required before a host is marked\n unhealthy. Note that for ``http`` health checking if a host responds with a code not in\n :ref:`expected_statuses `\n or :ref:`retriable_statuses `,\n this threshold is ignored and the host is considered immediately unhealthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"healthyThreshold":{"title":"healthy_threshold","description":"The number of healthy health checks required before a host is marked\n healthy. Note that during startup, only a single successful health check is\n required to mark a host healthy.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"altPort":{"title":"alt_port","description":"[#not-implemented-hide:] Non-serving port for health checking.","type":"object","properties":{"value":{"type":"integer","title":"value","description":"The uint32 value."}},"additionalProperties":false},"reuseConnection":{"title":"reuse_connection","description":"Reuse health check connection between health checks. Default is true.","type":"boolean"},"noTrafficInterval":{"title":"no_traffic_interval","description":"The \"no traffic interval\" is a special health check interval that is used when a cluster has\n never had traffic routed to it. This lower interval allows cluster information to be kept up to\n date, without sending a potentially large amount of active health checking traffic for no\n reason. Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined. Note that this interval takes precedence over\n any other.\n\n The default value for \"no traffic interval\" is 60 seconds.","type":"string","format":"duration"},"noTrafficHealthyInterval":{"title":"no_traffic_healthy_interval","description":"The \"no traffic healthy interval\" is a special health check interval that\n is used for hosts that are currently passing active health checking\n (including new hosts) when the cluster has received no traffic.\n\n This is useful for when we want to send frequent health checks with\n ``no_traffic_interval`` but then revert to lower frequency ``no_traffic_healthy_interval`` once\n a host in the cluster is marked as healthy.\n\n Once a cluster has been used for traffic routing, Envoy will shift back to using the\n standard health check interval that is defined.\n\n If no_traffic_healthy_interval is not set, it will default to the\n no traffic interval and send that interval regardless of health state.","type":"string","format":"duration"},"unhealthyInterval":{"title":"unhealthy_interval","description":"The \"unhealthy interval\" is a health check interval that is used for hosts that are marked as\n unhealthy. As soon as the host is marked as healthy, Envoy will shift back to using the\n standard health check interval that is defined.\n\n The default value for \"unhealthy interval\" is the same as \"interval\".","type":"string","format":"duration"},"unhealthyEdgeInterval":{"title":"unhealthy_edge_interval","description":"The \"unhealthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as unhealthy. For subsequent health checks\n Envoy will shift back to using either \"unhealthy interval\" if present or the standard health\n check interval that is defined.\n\n The default value for \"unhealthy edge interval\" is the same as \"unhealthy interval\".","type":"string","format":"duration"},"healthyEdgeInterval":{"title":"healthy_edge_interval","description":"The \"healthy edge interval\" is a special health check interval that is used for the first\n health check right after a host is marked as healthy. For subsequent health checks\n Envoy will shift back to using the standard health check interval that is defined.\n\n The default value for \"healthy edge interval\" is the same as the default interval.","type":"string","format":"duration"},"alwaysLogHealthCheckFailures":{"type":"boolean","title":"always_log_health_check_failures","description":"If set to true, health check failure events will always be logged. If set to false, only the\n initial health check failure event will be logged.\n The default value is false."},"alwaysLogHealthCheckSuccess":{"type":"boolean","title":"always_log_health_check_success","description":"If set to true, health check success events will always be logged. If set to false, only host addition event will be logged\n if it is the first successful health check, or if the healthy threshold is reached.\n The default value is false."},"transportSocketMatchCriteria":{"title":"transport_socket_match_criteria","description":"Optional key/value pairs that will be used to match a transport socket from those specified in the cluster's\n :ref:`tranport socket matches `.\n For example, the following match criteria\n\n .. code-block:: yaml\n\n transport_socket_match_criteria:\n useMTLS: true\n\n Will match the following :ref:`cluster socket match `\n\n .. code-block:: yaml\n\n transport_socket_matches:\n - name: \"useMTLS\"\n match:\n useMTLS: true\n transport_socket:\n name: envoy.transport_sockets.tls\n config: { ... } # tls socket configuration\n\n If this field is set, then for health checks it will supersede an entry of ``envoy.transport_socket`` in the\n :ref:`LbEndpoint.Metadata `.\n This allows using different transport socket capabilities for health checking versus proxying to the\n endpoint.\n\n If the key/values pairs specified do not match any\n :ref:`transport socket matches `,\n the cluster's :ref:`transport socket `\n will be used for health check socket configuration.","type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"}}}},{"oneOf":[{"type":"object","properties":{"grpcHealthCheck":{"title":"grpc_health_check","description":"gRPC health check.","type":"object","properties":{"serviceName":{"type":"string","title":"service_name","description":"An optional service name parameter which will be sent to gRPC service in\n `grpc.health.v1.HealthCheckRequest\n `_.\n message. See `gRPC health-checking overview\n `_ for\n more information."},"authority":{"type":"string","title":"authority","description":"The value of the :authority header in the gRPC health check request. If\n left empty (default value), the name of the cluster this health check is\n associated with will be used. The authority header can be customized for\n a specific endpoint by setting the :ref:`hostname\n `\n field."}},"additionalProperties":false}},"title":"grpc_health_check","required":["grpcHealthCheck"]},{"type":"object","properties":{"httpHealthCheck":{"title":"http_health_check","description":"HTTP health check.","type":"object","properties":{"host":{"type":"string","title":"host","description":"The value of the host header in the HTTP health check request. If\n left empty (default value), the name of the cluster this health check is associated\n with will be used. The host header can be customized for a specific endpoint by setting the\n :ref:`hostname ` field."},"path":{"type":"string","title":"path","description":"Specifies the HTTP path that will be requested during health checking. For example\n ``/healthcheck``."},"send":{"title":"send","description":"HTTP specific payload to be sent as the request body during health checking.\n If specified, the method should support a request body (POST, PUT, PATCH, etc.).","type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"additionalProperties":false},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"Specifies a list of HTTP expected responses to match in the first ``response_buffer_size`` bytes of the response body.\n If it is set, both the expected response check and status code determine the health check.\n When checking the response, “fuzzy” matching is performed such that each payload block must be found,\n and in the order specified, but not necessarily contiguous.\n\n .. note::\n\n It is recommended to set ``response_buffer_size`` based on the total Payload size for efficiency.\n The default buffer size is 1024 bytes when it is not set."},"responseBufferSize":{"title":"response_buffer_size","description":"Specifies the size of response buffer in bytes that is used to Payload match.\n The default value is 1024. Setting to 0 implies that the Payload will be matched against the entire response.","type":"object","properties":{"value":{"type":["integer","string"],"title":"value","format":"int64","description":"The uint64 value."}},"additionalProperties":false},"requestHeadersToRemove":{"type":"array","items":{"type":"string"},"title":"request_headers_to_remove","description":"Specifies a list of HTTP headers that should be removed from each request that is sent to the\n health checked cluster."},"expectedStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"expected_statuses","description":"Specifies a list of HTTP response statuses considered healthy. If provided, replaces default\n 200-only policy - 200 must be included explicitly as needed. Ranges follow half-open\n semantics of :ref:`Int64Range `. The start and end of each\n range are required. Only statuses in the range [100, 600) are allowed."},"retriableStatuses":{"type":"array","items":{"type":"object","properties":{"start":{"type":["integer","string"],"title":"start","format":"int64","description":"start of the range (inclusive)"},"end":{"type":["integer","string"],"title":"end","format":"int64","description":"end of the range (exclusive)"}},"title":"Int64Range","additionalProperties":false},"title":"retriable_statuses","description":"Specifies a list of HTTP response statuses considered retriable. If provided, responses in this range\n will count towards the configured :ref:`unhealthy_threshold `,\n but will not result in the host being considered immediately unhealthy. Ranges follow half-open semantics of\n :ref:`Int64Range `. The start and end of each range are required.\n Only statuses in the range [100, 600) are allowed. The :ref:`expected_statuses `\n field takes precedence for any range overlaps with this field i.e. if status code 200 is both retriable and expected, a 200 response will\n be considered a successful health check. By default all responses not in\n :ref:`expected_statuses ` will result in\n the host being considered immediately unhealthy i.e. if status code 200 is expected and there are no configured retriable statuses, any\n non-200 response will result in the host being marked unhealthy."},"codecClientType":{"title":"codec_client_type","description":"Use specified application protocol for health checks.","type":"string","enum":["HTTP1","HTTP2","HTTP3"]}},"additionalProperties":false}},"title":"http_health_check","required":["httpHealthCheck"]},{"type":"object","properties":{"tcpHealthCheck":{"title":"tcp_health_check","description":"TCP health check.","type":"object","properties":{"send":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"receive":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"binary":{"type":"string","title":"binary","format":"byte","description":"Binary payload."}},"title":"binary","required":["binary"]},{"type":"object","properties":{"text":{"type":"string","title":"text","description":"Hex encoded payload. E.g., \"000000FF\"."}},"title":"text","required":["text"]}],"title":"Payload","additionalProperties":false,"description":"Describes the encoding of the payload bytes in the payload."},"title":"receive","description":"When checking the response, “fuzzy” matching is performed such that each\n payload block must be found, and in the order specified, but not\n necessarily contiguous."}},"additionalProperties":false}},"title":"tcp_health_check","required":["tcpHealthCheck"]}]}],"title":"HealthCheck","additionalProperties":false,"description":"[#next-free-field: 27]"},"title":"health_checks","description":"Active health checks to run against upstream hosts for this route."},"loadBalancingPolicy":{"oneOf":[{"type":"string","title":"LoadBalancingPolicy","enum":["LOAD_BALANCING_POLICY_UNSPECIFIED","LOAD_BALANCING_POLICY_ROUND_ROBIN","LOAD_BALANCING_POLICY_MAGLEV","LOAD_BALANCING_POLICY_RANDOM","LOAD_BALANCING_POLICY_RING_HASH","LOAD_BALANCING_POLICY_LEAST_REQUEST"],"description":"LoadBalancingPolicy defines the strategy used to balance requests across\n upstream endpoints"},{"type":"null"}],"title":"load_balancing_policy","description":"The load balancing algorithm for upstream endpoints. Options:\n ROUND_ROBIN, RING_HASH, LEAST_REQUEST, RANDOM, MAGLEV."},"healthyPanicThreshold":{"type":["integer","null"],"title":"healthy_panic_threshold","format":"int32","description":"If the percentage of healthy upstream hosts drops below this value,\n traffic will be sent to all hosts regardless of health status."},"allowUpgrades":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued fields can hold\n repeated string values."},{"type":"null"}],"title":"allow_upgrades","description":"Allows HTTP upgrade requests to be forwarded upstream."},"sessionRecording":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Toggle to enable/disable recording for this route."}},"title":"SessionRecording","additionalProperties":false,"description":"SessionRecording defines session recording settings for routes."},{"type":"null"}],"title":"session_recording","description":"Configures session recording behaviour on this route.\n SSH specific."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"enforcedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"enforced_policies","description":"Policies that are automatically enforced.\n Not supported in the open source version of Pomerium.","readOnly":true},"assignedPolicies":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"The ID of the entity."},"name":{"type":["string","null"],"title":"name","description":"The name of the entity."},"modifiedAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"modified_at","description":"When the entity was last modified."}},"title":"EntityInfo","additionalProperties":false,"description":"EntityInfo is the basic metadata for an entity."},"title":"assigned_policies","description":"Info about policies assigned to this route.\n Not supported in the open source version of Pomerium.","readOnly":true},"namespaceName":{"type":["string","null"],"title":"namespace_name","description":"The name of the namespace for the route.","readOnly":true}},"title":"Route","additionalProperties":false,"description":"Configuration for a route."}},"title":"UpdateRouteResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-route.api.mdx b/content/docs/api/pomerium-config-config-service-update-route.api.mdx new file mode 100644 index 000000000..3fa5606ea --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-route.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-update-route +title: "UpdateRoute" +description: "Updates an existing route" +sidebar_label: "UpdateRoute" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Updates an existing route + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-service-account.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-update-service-account.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-service-account.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-service-account.RequestSchema.json b/content/docs/api/pomerium-config-config-service-update-service-account.RequestSchema.json new file mode 100644 index 000000000..b5be17093 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-service-account.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"serviceAccount":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"ID of the service account."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"Namespace of the service account."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"Originator of the service account."},"description":{"type":["string","null"],"title":"description","description":"Description of the service account."},"userId":{"type":["string","null"],"title":"user_id","description":"User ID of the service account."},"expiresAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"expires_at","description":"When the service account expires."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"accessedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"}},"title":"ServiceAccount","additionalProperties":false,"description":"A ServiceAccount represents a Pomerium service account."},"updateMask":{"oneOf":[{"type":"string","description":"`FieldMask` represents a set of symbolic field paths, for example:\n\n paths: \"f.a\"\n paths: \"f.b.d\"\n\n Here `f` represents a field in some root message, `a` and `b`\n fields in the message found in `f`, and `d` a field found in the\n message in `f.b`.\n\n Field masks are used to specify a subset of fields that should be\n returned by a get operation or modified by an update operation.\n Field masks also have a custom JSON encoding (see below).\n\n # Field Masks in Projections\n\n When used in the context of a projection, a response message or\n sub-message is filtered by the API to only contain those fields as\n specified in the mask. For example, if the mask in the previous\n example is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\n The result will not contain specific values for fields x,y and z\n (their value will be set to the default, and omitted in proto text\n output):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\n A repeated field is not allowed except at the last position of a\n paths string.\n\n If a FieldMask object is not present in a get operation, the\n operation applies to all fields (as if a FieldMask of all fields\n had been specified).\n\n Note that a field mask does not necessarily apply to the\n top-level response message. In case of a REST get operation, the\n field mask applies directly to the response, but in case of a REST\n list operation, the mask instead applies to each individual message\n in the returned resource list. In case of a REST custom method,\n other definitions may be used. Where the mask applies will be\n clearly documented together with its declaration in the API. In\n any case, the effect on the returned resource/resources is required\n behavior for APIs.\n\n # Field Masks in Update Operations\n\n A field mask in update operations specifies which fields of the\n targeted resource are going to be updated. The API is required\n to only change the values of the fields as specified in the mask\n and leave the others untouched. If a resource is passed in to\n describe the updated values, the API ignores the values of all\n fields not covered by the mask.\n\n If a repeated field is specified for an update operation, new values will\n be appended to the existing repeated field in the target resource. Note that\n a repeated field is only allowed in the last position of a `paths` string.\n\n If a sub-message is specified in the last position of the field mask for an\n update operation, then new value will be merged into the existing sub-message\n in the target resource.\n\n For example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\n And an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\n then if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\n then the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\n An implementation may provide options to override this default behavior for\n repeated and message fields.\n\n Note that libraries which implement FieldMask resolution have various\n different behaviors in the face of empty masks or the special \"*\" mask.\n When implementing a service you should confirm these cases have the\n appropriate behavior in the underlying FieldMask library that you desire,\n and you may need to special case those cases in your application code if\n the underlying field mask library behavior differs from your intended\n service semantics.\n\n Update methods implementing https://google.aip.dev/134\n - MUST support the special value * meaning \"full replace\"\n - MUST treat an omitted field mask as \"replace fields which are present\".\n\n Other methods implementing https://google.aip.dev/157\n - SHOULD support the special value \"*\" to mean \"get all\".\n - MUST treat an omitted field mask to mean \"get all\", unless otherwise\n documented.\n\n ## Considerations for HTTP REST\n\n The HTTP kind of an update operation which uses a field mask must\n be set to PATCH instead of PUT in order to satisfy HTTP semantics\n (PUT must only be used for full updates).\n\n # JSON Encoding of Field Masks\n\n In JSON, a field mask is encoded as a single string where paths are\n separated by a comma. Fields name in each path are converted\n to/from lower-camel naming conventions.\n\n As an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\n In proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\n In JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n # Field Masks and Oneof Fields\n\n Field masks treat fields in oneofs just as regular fields. Consider the\n following message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\n The field mask can be:\n\n mask {\n paths: \"name\"\n }\n\n Or:\n\n mask {\n paths: \"sub_message\"\n }\n\n Note that oneof type names (\"test_oneof\" in this case) cannot be used in\n paths.\n\n ## Field Mask Verification\n\n The implementation of any API method which has a FieldMask type field in the\n request should verify the included field paths, and return an\n `INVALID_ARGUMENT` error if any path is unmappable.","title":"google.protobuf.FieldMask"},{"type":"null"}],"title":"update_mask","description":"Optional update_mask to only update a subset of the fields."}},"title":"UpdateServiceAccountRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-service-account.StatusCodes.json b/content/docs/api/pomerium-config-config-service-update-service-account.StatusCodes.json new file mode 100644 index 000000000..1cea518c2 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-service-account.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"serviceAccount":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"ID of the service account."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"Namespace of the service account."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"Originator of the service account."},"description":{"type":["string","null"],"title":"description","description":"Description of the service account."},"userId":{"type":["string","null"],"title":"user_id","description":"User ID of the service account."},"expiresAt":{"oneOf":[{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},{"type":"null"}],"title":"expires_at","description":"When the service account expires."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"},"accessedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp"}},"title":"ServiceAccount","additionalProperties":false,"description":"A ServiceAccount represents a Pomerium service account."},"jwt":{"type":"string","title":"jwt","description":"A newly issued JWT for the service account."}},"title":"UpdateServiceAccountResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-service-account.api.mdx b/content/docs/api/pomerium-config-config-service-update-service-account.api.mdx new file mode 100644 index 000000000..fb6443c33 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-service-account.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-update-service-account +title: "UpdateServiceAccount" +description: "Updates an existing service account" +sidebar_label: "UpdateServiceAccount" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Updates an existing service account + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-settings.ParamsDetails.json b/content/docs/api/pomerium-config-config-service-update-settings.ParamsDetails.json new file mode 100644 index 000000000..533618705 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-settings.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"Connect-Protocol-Version","in":"header","required":true,"schema":{"type":"number","title":"Connect-Protocol-Version","enum":[1],"description":"Define the version of the Connect protocol","const":1}},{"name":"Connect-Timeout-Ms","in":"header","schema":{"type":"number","title":"Connect-Timeout-Ms","description":"Define the timeout, in ms"}}]} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-settings.RequestSchema.json b/content/docs/api/pomerium-config-config-service-update-settings.RequestSchema.json new file mode 100644 index 000000000..df802c262 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-settings.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"content":{"application/json":{"schema":{"type":"object","properties":{"settings":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the Settings record."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the Settings record belongs to."},"clusterId":{"type":["string","null"],"title":"cluster_id","description":"ID of the cluster the Settings record applies to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the record originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the Settings record."},"installationId":{"type":["string","null"],"title":"installation_id","description":"Stable identifier for this installation, used in telemetry and\n diagnostics. Generated at first start when unset."},"logLevel":{"type":["string","null"],"title":"log_level","description":"Global log level for Pomerium services (\"debug\", \"info\", \"warn\",\n \"error\"). Empty falls back to \"info\"."},"accessLogFields":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"access_log_fields","description":"Subset of access-log fields to emit. Use\n ListAvailableLogFields.available_access_log_fields to see what's valid;\n unset means the service default."},"authorizeLogFields":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"authorize_log_fields","description":"Subset of authorize-log fields to emit; see ListAvailableLogFields."},"proxyLogLevel":{"type":["string","null"],"title":"proxy_log_level","description":"Log level for the proxy service in particular, overriding `log_level`."},"sharedSecret":{"type":["string","null"],"title":"shared_secret","description":"Cluster-wide shared secret used to sign and validate internal requests\n and JWTs across Pomerium services. Must be a base64-encoded 32-byte\n value."},"services":{"type":["string","null"],"title":"services","description":"Comma-separated list of Pomerium services to run in this process\n (\"all\", \"authenticate\", \"authorize\", \"databroker\", \"proxy\")."},"address":{"type":["string","null"],"title":"address","description":"IP address and port for serving HTTPS requests (e.g. \":443\")."},"insecureServer":{"type":["boolean","null"],"title":"insecure_server","description":"When true, Pomerium serves HTTP without TLS. Intended only for testing\n behind a TLS-terminating load balancer."},"dnsFailureRefreshRate":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_failure_refresh_rate","description":"How long Envoy waits before retrying a failed DNS resolution."},"dnsLookupFamily":{"type":["string","null"],"title":"dns_lookup_family","description":"Envoy DNS lookup family (\"AUTO\", \"V4_ONLY\", \"V6_ONLY\", \"V4_PREFERRED\",\n \"ALL\"). Controls which address families Envoy resolves."},"dnsQueryTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_query_timeout","description":"Maximum time Envoy waits for a single DNS query to return."},"dnsQueryTries":{"type":["integer","null"],"title":"dns_query_tries","description":"Number of times Envoy retries a failed DNS query before giving up."},"dnsRefreshRate":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_refresh_rate","description":"How often Envoy refreshes resolved addresses regardless of TTL."},"dnsUdpMaxQueries":{"type":["integer","null"],"title":"dns_udp_max_queries","description":"Maximum number of in-flight DNS queries Envoy will multiplex over a\n single UDP socket."},"dnsUseTcp":{"type":["boolean","null"],"title":"dns_use_tcp","description":"When true, Envoy resolves DNS over TCP instead of UDP."},"certificates":{"type":"array","items":{"type":"object","properties":{"certBytes":{"type":"string","title":"cert_bytes","format":"byte","description":"PEM-encoded certificate chain."},"keyBytes":{"type":"string","title":"key_bytes","format":"byte","description":"PEM-encoded private key matching `cert_bytes`."},"id":{"type":"string","title":"id","description":"Optional identifier for the certificate, used to refer to it from\n other parts of the configuration."}},"title":"Certificate","additionalProperties":false,"description":"An inline TLS certificate/key pair Pomerium serves for matching SNI\n hostnames."},"title":"certificates","description":"Inline TLS certificate/key pairs Pomerium serves. Each entry is matched\n against the request's SNI hostname."},"certificateKeyPairIds":{"type":"array","items":{"type":"string"},"title":"certificate_key_pair_ids","description":"IDs of managed key pairs to serve as TLS certificates, as an alternative\n to inline `certificates` entries."},"httpRedirectAddr":{"type":["string","null"],"title":"http_redirect_addr","description":"Address (host:port) on which Pomerium listens for plaintext HTTP and\n issues a redirect to the HTTPS address. Empty disables the redirect\n listener."},"timeoutRead":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_read","description":"Maximum time the proxy will wait for a complete request from a\n downstream client."},"timeoutWrite":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_write","description":"Maximum time the proxy will wait to send a complete response to a\n downstream client."},"timeoutIdle":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_idle","description":"Maximum idle time on a kept-alive connection before it is closed."},"authenticateServiceUrl":{"type":["string","null"],"title":"authenticate_service_url","description":"Externally accessible URL for the authenticate service."},"authenticateInternalServiceUrl":{"type":["string","null"],"title":"authenticate_internal_service_url","description":"URL Pomerium uses internally to reach the authenticate service. Set\n when the externally visible URL goes through a load balancer that\n proxies cannot reuse."},"signoutRedirectUrl":{"type":["string","null"],"title":"signout_redirect_url","description":"URL to redirect users to after they sign out."},"cookieName":{"type":["string","null"],"title":"cookie_name","description":"Name of the session cookie Pomerium issues. Defaults to \"_pomerium\"."},"cookieSecret":{"type":["string","null"],"title":"cookie_secret","description":"Secret used to encrypt and sign session cookies. Must be a\n base64-encoded 32-byte value."},"cookieDomain":{"type":["string","null"],"title":"cookie_domain","description":"Domain set on the session cookie. Pomerium defaults to the\n authenticate service URL host."},"cookieHttpOnly":{"type":["boolean","null"],"title":"cookie_http_only","description":"When true the session cookie carries the HttpOnly attribute."},"cookieExpire":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"cookie_expire","description":"How long an issued session cookie remains valid."},"cookieSameSite":{"type":["string","null"],"title":"cookie_same_site","description":"SameSite attribute of the session cookie (\"strict\", \"lax\", \"none\")."},"idpClientId":{"type":["string","null"],"title":"idp_client_id","description":"OAuth2 client ID for the identity provider."},"idpClientSecret":{"type":["string","null"],"title":"idp_client_secret","description":"OAuth2 client secret for the identity provider."},"idpProvider":{"type":["string","null"],"title":"idp_provider","description":"Identity provider name (\"oidc\", \"okta\", \"auth0\", \"google\", \"azure\", …).\n Selects which IdP integration Pomerium uses."},"idpProviderUrl":{"type":["string","null"],"title":"idp_provider_url","description":"OIDC issuer URL of the identity provider."},"idpAccessTokenAllowedAudiences":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"idp_access_token_allowed_audiences","description":"Audiences Pomerium accepts on IdP-issued access tokens. Required when\n BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN routes exist."},"scopes":{"type":"array","items":{"type":"string"},"title":"scopes","description":"OIDC scopes Pomerium requests when authenticating users."},"requestParams":{"type":"object","title":"request_params","additionalProperties":{"type":"string","title":"value"},"description":"Additional query parameters Pomerium appends to the IdP authorization\n request."},"authorizeServiceUrls":{"type":"array","items":{"type":"string"},"title":"authorize_service_urls","description":"Externally accessible URLs for the authorize service."},"authorizeInternalServiceUrl":{"type":["string","null"],"title":"authorize_internal_service_url","description":"URL Pomerium uses internally to reach the authorize service."},"overrideCertificateName":{"type":["string","null"],"title":"override_certificate_name","description":"Hostname Pomerium expects in upstream TLS certificates. Useful when\n upstream addresses are IPs but the certificate contains a hostname SAN."},"certificateAuthority":{"type":["string","null"],"title":"certificate_authority","description":"PEM-encoded certificate authority bundle Pomerium trusts for upstream\n TLS verification."},"certificateAuthorityKeyPairId":{"type":["string","null"],"title":"certificate_authority_key_pair_id","description":"ID of a managed key pair whose certificate is used as the upstream CA\n bundle, as an alternative to the inline `certificate_authority` value."},"deriveTls":{"type":["string","null"],"title":"derive_tls","description":"Base hostname Pomerium uses to derive default TLS certificates for\n routes. Empty disables derivation."},"signingKey":{"type":["string","null"],"title":"signing_key","description":"Private key Pomerium uses to sign internally issued JWTs (e.g. the JWT\n attached to upstream requests). Must be a PEM-encoded key."},"setResponseHeaders":{"type":"object","title":"set_response_headers","additionalProperties":{"type":"string","title":"value"},"description":"Headers Pomerium sets on every response across all routes."},"jwtClaimsHeaders":{"type":"object","title":"jwt_claims_headers","additionalProperties":{"type":"string","title":"value"},"description":"Map of header name to JWT claim. Pomerium copies the claim value from\n the session JWT to the named header on upstream requests."},"jwtIssuerFormat":{"oneOf":[{"type":"string","title":"IssuerFormat","enum":["IssuerHostOnly","IssuerURI"],"description":"Format used for the `iss` claim of JWTs Pomerium issues for upstream\n requests."},{"type":"null"}],"title":"jwt_issuer_format","description":"Format of the `iss` claim in JWTs Pomerium issues for upstream\n requests."},"jwtGroupsFilter":{"type":"array","items":{"type":"string"},"title":"jwt_groups_filter","description":"Allowlist of group IDs/names; the JWT Pomerium issues includes only\n groups appearing here. Empty means include all."},"jwtGroupsFilterInferFromPpl":{"type":["boolean","null"],"title":"jwt_groups_filter_infer_from_ppl","description":"When true the effective `jwt_groups_filter` is augmented with groups\n referenced by route PPL policies."},"bearerTokenFormat":{"oneOf":[{"type":"string","title":"BearerTokenFormat","enum":["BEARER_TOKEN_FORMAT_UNKNOWN","BEARER_TOKEN_FORMAT_DEFAULT","BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN","BEARER_TOKEN_FORMAT_IDP_IDENTITY_TOKEN"],"description":"Controls how HTTP bearer token authentication is handled."},{"type":"null"}],"title":"bearer_token_format","description":"Cluster-wide default for how to interpret HTTP bearer tokens. Routes\n may override per-route."},"defaultUpstreamTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"default_upstream_timeout","description":"Default per-request timeout applied to upstream HTTP requests when a\n route does not specify its own."},"debugAddress":{"type":["string","null"],"title":"debug_address","description":"Address (host:port) on which Pomerium exposes its pprof debug\n endpoints. Empty disables them."},"metricsAddress":{"type":["string","null"],"title":"metrics_address","description":"Address (host:port) on which Pomerium serves Prometheus metrics."},"metricsBasicAuth":{"type":["string","null"],"title":"metrics_basic_auth","description":"HTTP Basic Auth credentials required to access `metrics_address`, of\n the form \"user:password\". Empty disables auth."},"metricsCertificate":{"oneOf":[{"type":"object","properties":{"certBytes":{"type":"string","title":"cert_bytes","format":"byte","description":"PEM-encoded certificate chain."},"keyBytes":{"type":"string","title":"key_bytes","format":"byte","description":"PEM-encoded private key matching `cert_bytes`."},"id":{"type":"string","title":"id","description":"Optional identifier for the certificate, used to refer to it from\n other parts of the configuration."}},"title":"Certificate","additionalProperties":false,"description":"An inline TLS certificate/key pair Pomerium serves for matching SNI\n hostnames."},{"type":"null"}],"title":"metrics_certificate","description":"TLS certificate/key pair Pomerium uses on the metrics listener."},"metricsClientCa":{"type":["string","null"],"title":"metrics_client_ca","description":"PEM-encoded CA bundle used to authenticate clients connecting to the\n metrics listener."},"metricsClientCaKeyPairId":{"type":["string","null"],"title":"metrics_client_ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the metrics\n client CA bundle, as an alternative to `metrics_client_ca`."},"otelTracesExporter":{"type":["string","null"],"title":"otel_traces_exporter","description":"Which OpenTelemetry traces exporter to use (\"otlp\", \"none\", …). Empty\n disables tracing."},"otelTracesSamplerArg":{"type":["number","null"],"title":"otel_traces_sampler_arg","format":"double","description":"OpenTelemetry sampler argument. For ratio-based samplers this is the\n sampling probability (0.0–1.0)."},"otelResourceAttributes":{"type":"array","items":{"type":"string"},"title":"otel_resource_attributes","description":"OpenTelemetry resource attributes appended to every emitted span/log,\n as \"key=value\" strings."},"otelLogLevel":{"type":["string","null"],"title":"otel_log_level","description":"Log level for the OpenTelemetry SDK itself."},"otelAttributeValueLengthLimit":{"type":["integer","null"],"title":"otel_attribute_value_length_limit","format":"int32","description":"Maximum length of a single OpenTelemetry attribute value before it is\n truncated."},"otelExporterOtlpEndpoint":{"type":["string","null"],"title":"otel_exporter_otlp_endpoint","description":"Default OTLP endpoint Pomerium dials for any OTLP exporter (traces,\n logs) when no signal-specific endpoint is set."},"otelExporterOtlpTracesEndpoint":{"type":["string","null"],"title":"otel_exporter_otlp_traces_endpoint","description":"OTLP endpoint specifically for traces; overrides\n `otel_exporter_otlp_endpoint` for the trace signal."},"otelExporterOtlpProtocol":{"type":["string","null"],"title":"otel_exporter_otlp_protocol","description":"OTLP transport protocol (\"grpc\" or \"http/protobuf\")."},"otelExporterOtlpTracesProtocol":{"type":["string","null"],"title":"otel_exporter_otlp_traces_protocol","description":"OTLP transport protocol used specifically for traces."},"otelExporterOtlpHeaders":{"type":"array","items":{"type":"string"},"title":"otel_exporter_otlp_headers","description":"Headers attached to every OTLP request, as \"key=value\" strings (e.g.\n for tenant identification)."},"otelExporterOtlpTracesHeaders":{"type":"array","items":{"type":"string"},"title":"otel_exporter_otlp_traces_headers","description":"OTLP headers used specifically for traces."},"otelExporterOtlpTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_exporter_otlp_timeout","description":"Per-request timeout for the OTLP exporter."},"otelExporterOtlpTracesTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_exporter_otlp_traces_timeout","description":"Per-request timeout used specifically for the OTLP traces exporter."},"otelBspScheduleDelay":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_bsp_schedule_delay","description":"Delay between scheduled batches of spans the BatchSpanProcessor\n exports."},"otelBspMaxExportBatchSize":{"type":["integer","null"],"title":"otel_bsp_max_export_batch_size","format":"int32","description":"Maximum number of spans per export batch."},"grpcAddress":{"type":["string","null"],"title":"grpc_address","description":"Address (host:port) on which Pomerium serves its gRPC API."},"grpcInsecure":{"type":["boolean","null"],"title":"grpc_insecure","description":"When true, Pomerium speaks plaintext gRPC instead of TLS. Intended for\n co-located service deployments behind a trusted network boundary."},"grpcClientTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"grpc_client_timeout","description":"Per-request timeout applied to gRPC client calls Pomerium makes to its\n own services (authorize, databroker)."},"databrokerClusterLeaderId":{"type":["string","null"],"title":"databroker_cluster_leader_id","description":"Node ID of the databroker Raft leader, as observed by this process."},"databrokerClusterNodeId":{"type":["string","null"],"title":"databroker_cluster_node_id","description":"Node ID this process uses when participating in the databroker\n cluster."},"databrokerClusterNodes":{"oneOf":[{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"Stable identifier of the node within the cluster."},"grpcAddress":{"type":"string","title":"grpc_address","description":"gRPC service address (host:port) other components dial to reach this\n databroker node."},"raftAddress":{"type":["string","null"],"title":"raft_address","description":"Raft transport address (host:port) used for peer-to-peer replication."}},"title":"DataBrokerClusterNode","additionalProperties":false,"description":"One peer in a Pomerium databroker Raft cluster."},"title":"nodes","description":"Every node participating in the databroker cluster."}},"title":"DataBrokerClusterNodes","additionalProperties":false,"description":"Aggregate list of databroker cluster peers."},{"type":"null"}],"title":"databroker_cluster_nodes","description":"Full membership list of the databroker cluster."},"databrokerServiceUrls":{"type":"array","items":{"type":"string"},"title":"databroker_service_urls","description":"Externally accessible URLs for the databroker service."},"databrokerInternalServiceUrl":{"type":["string","null"],"title":"databroker_internal_service_url","description":"URL Pomerium uses internally to reach the databroker service."},"databrokerRaftBindAddress":{"type":["string","null"],"title":"databroker_raft_bind_address","description":"Bind address (host:port) for this node's Raft transport."},"databrokerStorageType":{"type":["string","null"],"title":"databroker_storage_type","description":"Backing-store type for the databroker (\"memory\", \"postgres\", …)."},"databrokerStorageConnectionString":{"type":["string","null"],"title":"databroker_storage_connection_string","description":"Connection string for the databroker storage backend, when applicable."},"downstreamMtls":{"oneOf":[{"type":"object","properties":{"ca":{"type":["string","null"],"title":"ca","description":"PEM-encoded certificate authority bundle used to verify client\n certificates."},"crl":{"type":["string","null"],"title":"crl","description":"PEM-encoded certificate revocation list checked against client\n certificates."},"enforcement":{"oneOf":[{"type":"string","title":"MtlsEnforcementMode","enum":["UNKNOWN","POLICY","POLICY_WITH_DEFAULT_DENY","REJECT_CONNECTION"],"description":"Represents a client certificate enforcement behavior."},{"type":"null"}],"title":"enforcement","description":"How aggressively client certificate requirements are enforced."},"matchSubjectAltNames":{"type":"array","items":{"type":"object","properties":{"sanType":{"title":"san_type","description":"Which SAN entry type this pattern applies to.","type":"string","enum":["SAN_TYPE_UNSPECIFIED","EMAIL","DNS","URI","IP_ADDRESS","USER_PRINCIPAL_NAME"]},"pattern":{"type":"string","title":"pattern","description":"Regular expression the SAN value must fully match."}},"title":"SANMatcher","additionalProperties":false,"description":"SANMatcher describes a constraint against one Subject Alternative Name\n entry in a client certificate."},"title":"match_subject_alt_names","description":"Patterns the certificate Subject Alternative Names must satisfy for the\n connection to be allowed."},"maxVerifyDepth":{"type":["integer","null"],"title":"max_verify_depth","description":"Maximum depth of the verification chain accepted from clients. Zero\n means use Envoy's default."},"caKeyPairId":{"type":["string","null"],"title":"ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the client CA,\n as an alternative to the inline `ca` value."}},"title":"DownstreamMtlsSettings","additionalProperties":false,"description":"DownstreamMtlsSettings controls how Pomerium validates client certificates\n presented by downstream (end-user) connections."},{"type":"null"}],"title":"downstream_mtls","description":"Downstream (end-user) mTLS validation configuration."},"googleCloudServerlessAuthenticationServiceAccount":{"type":["string","null"],"title":"google_cloud_serverless_authentication_service_account","description":"Google Cloud service account email Pomerium uses to obtain ID tokens\n for Cloud Run / serverless upstream targets."},"useProxyProtocol":{"type":["boolean","null"],"title":"use_proxy_protocol","description":"When true, Pomerium expects downstream connections to begin with the\n HAProxy PROXY protocol header (v1 or v2)."},"autocert":{"type":["boolean","null"],"title":"autocert","description":"When true, Pomerium uses ACME to automatically obtain and renew TLS\n certificates for the configured route hostnames."},"autocertCa":{"type":["string","null"],"title":"autocert_ca","description":"Directory URL of the ACME CA to use when `autocert` is enabled."},"autocertCaKeyPairId":{"type":["string","null"],"title":"autocert_ca_key_pair_id","description":"ID of a managed key pair whose certificate Pomerium presents to the\n ACME CA for account binding."},"autocertEmail":{"type":["string","null"],"title":"autocert_email","description":"Email address Pomerium registers with the ACME CA. Required by most\n CAs for expiration notifications."},"autocertUseStaging":{"type":["boolean","null"],"title":"autocert_use_staging","description":"When true, Pomerium uses Let's Encrypt's staging environment. Useful\n for testing to avoid hitting rate limits."},"autocertEabKeyId":{"type":["string","null"],"title":"autocert_eab_key_id","description":"External Account Binding key identifier provided by the ACME CA."},"autocertEabMacKey":{"type":["string","null"],"title":"autocert_eab_mac_key","description":"Base64-URL-encoded EAB MAC key paired with `autocert_eab_key_id`."},"autocertMustStaple":{"type":["boolean","null"],"title":"autocert_must_staple","description":"When true, Pomerium requests certificates with the OCSP Must-Staple\n extension."},"autocertDir":{"type":["string","null"],"title":"autocert_dir","description":"Filesystem directory Pomerium uses to cache obtained certificates and\n ACME account state."},"autocertTrustedCa":{"type":["string","null"],"title":"autocert_trusted_ca","description":"PEM-encoded CA bundle Pomerium trusts when validating the ACME CA's\n own TLS certificate, for private ACME servers."},"autocertTrustedCaKeyPairId":{"type":["string","null"],"title":"autocert_trusted_ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the trusted CA\n for the ACME server, as an alternative to `autocert_trusted_ca`."},"skipXffAppend":{"type":["boolean","null"],"title":"skip_xff_append","description":"When true, Pomerium does not append the immediate client IP to the\n X-Forwarded-For header on upstream requests."},"xffNumTrustedHops":{"type":["integer","null"],"title":"xff_num_trusted_hops","description":"Number of trusted hops Pomerium considers when extracting the\n client IP from the X-Forwarded-For header."},"envoyAdminAccessLogPath":{"type":["string","null"],"title":"envoy_admin_access_log_path","description":"Path to which Envoy writes admin-interface access logs. Empty\n disables admin-access logging."},"envoyAdminProfilePath":{"type":["string","null"],"title":"envoy_admin_profile_path","description":"Path to which Envoy writes pprof profiles when requested via the\n admin interface."},"envoyAdminAddress":{"type":["string","null"],"title":"envoy_admin_address","description":"Address (host:port) on which Envoy exposes its admin interface.\n Empty disables the admin interface."},"envoyBindConfigSourceAddress":{"type":["string","null"],"title":"envoy_bind_config_source_address","description":"Source address Envoy binds when connecting to upstreams."},"envoyBindConfigFreebind":{"type":["boolean","null"],"title":"envoy_bind_config_freebind","description":"When true, Envoy's upstream connections set IP_FREEBIND, allowing\n binding to non-local addresses."},"programmaticRedirectDomainWhitelist":{"type":"array","items":{"type":"string"},"title":"programmatic_redirect_domain_whitelist","description":"Hostnames Pomerium allows in programmatic-login redirect URLs."},"codecType":{"oneOf":[{"type":"string","title":"CodecType","enum":["CODEC_TYPE_AUTO","CODEC_TYPE_HTTP1","CODEC_TYPE_HTTP2","CODEC_TYPE_HTTP3"],"description":"CodecType defines the codec type to use for connections."},{"type":"null"}],"title":"codec_type","description":"Default HTTP codec used for downstream connections."},"primaryColor":{"type":["string","null"],"title":"primary_color","description":"Primary brand color (hex string like \"#1e88e5\") used in the\n Pomerium-served sign-in and error pages."},"secondaryColor":{"type":["string","null"],"title":"secondary_color","description":"Secondary brand color (hex string)."},"darkmodePrimaryColor":{"type":["string","null"],"title":"darkmode_primary_color","description":"Primary brand color used in dark mode."},"darkmodeSecondaryColor":{"type":["string","null"],"title":"darkmode_secondary_color","description":"Secondary brand color used in dark mode."},"logoUrl":{"type":["string","null"],"title":"logo_url","description":"URL of the logo image displayed on Pomerium-served pages."},"faviconUrl":{"type":["string","null"],"title":"favicon_url","description":"URL of the favicon used on Pomerium-served pages."},"errorMessageFirstParagraph":{"type":["string","null"],"title":"error_message_first_paragraph","description":"First paragraph of the error message Pomerium shows on access denied\n pages, before the auto-generated diagnostic text."},"passIdentityHeaders":{"type":["boolean","null"],"title":"pass_identity_headers","description":"When true, Pomerium adds X-Pomerium-* identity headers to upstream\n requests in addition to the signed JWT."},"runtimeFlags":{"type":"object","title":"runtime_flags","additionalProperties":{"type":"boolean","title":"value"},"description":"Per-flag boolean overrides for Pomerium runtime feature gates. The\n set of supported keys evolves with the release."},"http3AdvertisePort":{"type":["integer","null"],"title":"http3_advertise_port","description":"Port advertised in the Alt-Svc header so clients can upgrade to HTTP/3\n (QUIC). Zero disables advertisement."},"circuitBreakerThresholds":{"oneOf":[{"type":"object","properties":{"maxConnections":{"type":["integer","null"],"title":"max_connections","description":"The maximum number of connections that Envoy will make to the upstream\n cluster. If not specified, the default is 1024."},"maxPendingRequests":{"type":["integer","null"],"title":"max_pending_requests","description":"The maximum number of pending requests that Envoy will allow to the\n upstream cluster. If not specified, the default is 1024. This limit is\n applied as a connection limit for non-HTTP traffic."},"maxRequests":{"type":["integer","null"],"title":"max_requests","description":"The maximum number of parallel requests that Envoy will make to the\n upstream cluster. If not specified, the default is 1024. This limit does\n not apply to non-HTTP traffic."},"maxRetries":{"type":["integer","null"],"title":"max_retries","description":"The maximum number of parallel retries that Envoy will allow to the\n upstream cluster. If not specified, the default is 3."},"maxConnectionPools":{"type":["integer","null"],"title":"max_connection_pools","description":"The maximum number of connection pools per cluster that Envoy will\n concurrently support at once. If not specified, the default is unlimited.\n Set this for clusters which create a large number of connection pools."}},"title":"CircuitBreakerThresholds","additionalProperties":false,"description":"CircuitBreakerThresholds defines CircuitBreaker settings."},{"type":"null"}],"title":"circuit_breaker_thresholds","description":"Default upstream circuit-breaker thresholds applied to all routes\n unless overridden per route."},"sshAddress":{"type":["string","null"],"title":"ssh_address","description":"Address (host:port) on which Pomerium listens for SSH traffic.\n Empty disables the SSH proxy."},"sshHostKeyFiles":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"ssh_host_key_files","description":"Paths to host-key files Pomerium reads at startup to authenticate\n itself to SSH clients."},"sshHostKeys":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"ssh_host_keys","description":"Inline SSH host keys, used in place of `ssh_host_key_files`."},"sshHostKeyPairIds":{"type":"array","items":{"type":"string"},"title":"ssh_host_key_pair_ids","description":"IDs of managed key pairs to use as SSH host keys, as an alternative\n to file or inline values."},"sshUserCaKeyFile":{"type":["string","null"],"title":"ssh_user_ca_key_file","description":"Path to a file containing the SSH user-CA private key Pomerium uses\n to issue short-lived SSH user certificates."},"sshUserCaKey":{"type":["string","null"],"title":"ssh_user_ca_key","description":"Inline SSH user-CA private key, used in place of\n `ssh_user_ca_key_file`."},"sshUserCaKeyPairId":{"type":["string","null"],"title":"ssh_user_ca_key_pair_id","description":"ID of a managed key pair to use as the SSH user-CA key, as an\n alternative to file or inline values."},"mcpAllowedClientIdDomains":{"type":"array","items":{"type":"string"},"title":"mcp_allowed_client_id_domains","description":"mcp_allowed_client_id_domains specifies the allowed domains for MCP client ID metadata URLs.\n Supports wildcard patterns like \"*.example.com\".\n This is REQUIRED when MCP is enabled - client metadata fetching will fail if empty."},"mcpAllowedAsMetadataDomains":{"type":"array","items":{"type":"string"},"title":"mcp_allowed_as_metadata_domains","description":"mcp_allowed_as_metadata_domains specifies the allowed domains for upstream AS/PRM metadata URLs.\n Supports wildcard patterns like \"*.example.com\".\n This restricts which domains Pomerium will contact during upstream OAuth discovery."},"directoryProvider":{"type":["string","null"],"title":"directory_provider","description":"Directory-sync provider Pomerium uses to enumerate users and groups\n (\"auth0\", \"okta\", \"azure\", …). Empty disables directory sync."},"directoryProviderOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"description":"Represents a JSON object.\n\n An unordered key-value map, intending to perfectly capture the semantics of a\n JSON object. This enables parsing any arbitrary JSON payload as a message\n field in ProtoJSON format.\n\n This follows RFC 8259 guidelines for interoperable JSON: notably this type\n cannot represent large Int64 values or `NaN`/`Infinity` numbers,\n since the JSON format generally does not support those values in its number\n type.\n\n If you do not intend to parse arbitrary JSON into your message, a custom\n typed message should be preferred instead of using this type.","title":"google.protobuf.Struct"},{"type":"null"}],"title":"directory_provider_options","description":"Provider-specific options for the directory provider, as a generic\n JSON object."},"directoryProviderRefreshInterval":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"directory_provider_refresh_interval","description":"How often Pomerium refreshes the directory cache."},"directoryProviderRefreshTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"directory_provider_refresh_timeout","description":"Per-attempt timeout for a single directory refresh cycle."},"blobStorage":{"oneOf":[{"type":"object","properties":{"bucketUri":{"type":["string","null"],"title":"bucket_uri","description":"URI of the object-storage bucket (e.g. \"s3://my-bucket\",\n \"gs://my-bucket\"). Empty disables blob storage."},"managedPrefix":{"type":["string","null"],"title":"managed_prefix","description":"Optional path prefix within the bucket where Pomerium stores managed\n objects, isolating them from other tenants of the same bucket."}},"title":"BlobStorageSettings","additionalProperties":false,"description":"BlobStorageSettings configures the object-storage backend Pomerium uses\n for large artifacts such as session recordings."},{"type":"null"}],"title":"blob_storage","description":"Object-storage backend Pomerium uses for large artifacts (session\n recordings, exports). Empty disables blob storage."},"autoApplyChangesets":{"type":["boolean","null"],"title":"auto_apply_changesets","description":"auto_apply_changesets controls whether or not changesets are automatically\n applied or require an adminstrator to apply them. This setting is\n currently only used in Pomerium Zero."},"allowUpgrades":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"allow_upgrades","description":"Allows HTTP upgrade requests to be forwarded upstream."},"envoyDynamicExtensions":{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},"sessionRecordingConcurrency":{"type":["integer","null"],"title":"session_recording_concurrency","description":"Tunes the maximum number of worker threads that envoy allocates for session recording\n uploading"},"normalizePath":{"type":["boolean","null"],"title":"normalize_path","description":"Should paths be normalized according to RFC 3986 before any processing of\n requests by HTTP filters or routing? Defaults to true."},"mergeSlashes":{"type":["boolean","null"],"title":"merge_slashes","description":"Determines if adjacent slashes in the path are merged into one before any\n processing of requests by HTTP filters or routing. Defaults to true."},"pathWithEscapedSlashesAction":{"oneOf":[{"type":"string","title":"PathWithEscapedSlashesAction","enum":["PATH_WITH_ESCAPED_SLASHES_ACTION_UNKNOWN","PATH_WITH_ESCAPED_SLASHES_ACTION_KEEP_UNCHANGED","PATH_WITH_ESCAPED_SLASHES_ACTION_REJECT_REQUEST","PATH_WITH_ESCAPED_SLASHES_ACTION_UNESCAPE_AND_REDIRECT","PATH_WITH_ESCAPED_SLASHES_ACTION_UNESCAPE_AND_FORWARD"],"description":"PathWithEscapedSlashesAction determines the action for request that contain\n %2F, %2f, %5C or %5c sequences in the URI path."},{"type":"null"}],"title":"path_with_escaped_slashes_action","description":"Action to take when request URL path contains escaped slash sequences\n (%2F, %2f, %5C and %5c). Defaults to rejecting requests."},"headersWithUnderscoresAction":{"oneOf":[{"type":"string","title":"HeadersWithUnderscoresAction","enum":["HEADERS_WITH_UNDERSCORES_ACTION_UNKNOWN","HEADERS_WITH_UNDERSCORES_ACTION_ALLOW","HEADERS_WITH_UNDERSCORES_ACTION_REJECT_REQUEST","HEADERS_WITH_UNDERSCORES_ACTION_DROP_HEADER"],"description":"Action to take when Envoy receives client request with header names containing underscore characters."},{"type":"null"}],"title":"headers_with_underscores_action","description":"Action to take when a client request with a header name containing\n underscore characters is received. Defaults to rejecting the request."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true}},"title":"Settings","additionalProperties":false,"description":"Global Pomerium configuration settings."},"updateMask":{"oneOf":[{"type":"string","description":"`FieldMask` represents a set of symbolic field paths, for example:\n\n paths: \"f.a\"\n paths: \"f.b.d\"\n\n Here `f` represents a field in some root message, `a` and `b`\n fields in the message found in `f`, and `d` a field found in the\n message in `f.b`.\n\n Field masks are used to specify a subset of fields that should be\n returned by a get operation or modified by an update operation.\n Field masks also have a custom JSON encoding (see below).\n\n # Field Masks in Projections\n\n When used in the context of a projection, a response message or\n sub-message is filtered by the API to only contain those fields as\n specified in the mask. For example, if the mask in the previous\n example is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\n The result will not contain specific values for fields x,y and z\n (their value will be set to the default, and omitted in proto text\n output):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\n A repeated field is not allowed except at the last position of a\n paths string.\n\n If a FieldMask object is not present in a get operation, the\n operation applies to all fields (as if a FieldMask of all fields\n had been specified).\n\n Note that a field mask does not necessarily apply to the\n top-level response message. In case of a REST get operation, the\n field mask applies directly to the response, but in case of a REST\n list operation, the mask instead applies to each individual message\n in the returned resource list. In case of a REST custom method,\n other definitions may be used. Where the mask applies will be\n clearly documented together with its declaration in the API. In\n any case, the effect on the returned resource/resources is required\n behavior for APIs.\n\n # Field Masks in Update Operations\n\n A field mask in update operations specifies which fields of the\n targeted resource are going to be updated. The API is required\n to only change the values of the fields as specified in the mask\n and leave the others untouched. If a resource is passed in to\n describe the updated values, the API ignores the values of all\n fields not covered by the mask.\n\n If a repeated field is specified for an update operation, new values will\n be appended to the existing repeated field in the target resource. Note that\n a repeated field is only allowed in the last position of a `paths` string.\n\n If a sub-message is specified in the last position of the field mask for an\n update operation, then new value will be merged into the existing sub-message\n in the target resource.\n\n For example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\n And an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\n then if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\n then the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\n An implementation may provide options to override this default behavior for\n repeated and message fields.\n\n Note that libraries which implement FieldMask resolution have various\n different behaviors in the face of empty masks or the special \"*\" mask.\n When implementing a service you should confirm these cases have the\n appropriate behavior in the underlying FieldMask library that you desire,\n and you may need to special case those cases in your application code if\n the underlying field mask library behavior differs from your intended\n service semantics.\n\n Update methods implementing https://google.aip.dev/134\n - MUST support the special value * meaning \"full replace\"\n - MUST treat an omitted field mask as \"replace fields which are present\".\n\n Other methods implementing https://google.aip.dev/157\n - SHOULD support the special value \"*\" to mean \"get all\".\n - MUST treat an omitted field mask to mean \"get all\", unless otherwise\n documented.\n\n ## Considerations for HTTP REST\n\n The HTTP kind of an update operation which uses a field mask must\n be set to PATCH instead of PUT in order to satisfy HTTP semantics\n (PUT must only be used for full updates).\n\n # JSON Encoding of Field Masks\n\n In JSON, a field mask is encoded as a single string where paths are\n separated by a comma. Fields name in each path are converted\n to/from lower-camel naming conventions.\n\n As an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\n In proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\n In JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n # Field Masks and Oneof Fields\n\n Field masks treat fields in oneofs just as regular fields. Consider the\n following message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\n The field mask can be:\n\n mask {\n paths: \"name\"\n }\n\n Or:\n\n mask {\n paths: \"sub_message\"\n }\n\n Note that oneof type names (\"test_oneof\" in this case) cannot be used in\n paths.\n\n ## Field Mask Verification\n\n The implementation of any API method which has a FieldMask type field in the\n request should verify the included field paths, and return an\n `INVALID_ARGUMENT` error if any path is unmappable.","title":"google.protobuf.FieldMask"},{"type":"null"}],"title":"update_mask","description":"Optional update_mask to only update a subset of the fields."}},"title":"UpdateSettingsRequest","additionalProperties":false}}},"required":true}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-settings.StatusCodes.json b/content/docs/api/pomerium-config-config-service-update-settings.StatusCodes.json new file mode 100644 index 000000000..08615caa0 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-settings.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"settings":{"type":"object","properties":{"id":{"type":["string","null"],"title":"id","description":"Server-assigned unique ID of the Settings record."},"namespaceId":{"type":["string","null"],"title":"namespace_id","description":"ID of the namespace the Settings record belongs to."},"clusterId":{"type":["string","null"],"title":"cluster_id","description":"ID of the cluster the Settings record applies to."},"originatorId":{"type":["string","null"],"title":"originator_id","description":"ID of the upstream object the record originated from, when imported."},"name":{"type":["string","null"],"title":"name","description":"Human-readable name of the Settings record."},"installationId":{"type":["string","null"],"title":"installation_id","description":"Stable identifier for this installation, used in telemetry and\n diagnostics. Generated at first start when unset."},"logLevel":{"type":["string","null"],"title":"log_level","description":"Global log level for Pomerium services (\"debug\", \"info\", \"warn\",\n \"error\"). Empty falls back to \"info\"."},"accessLogFields":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"access_log_fields","description":"Subset of access-log fields to emit. Use\n ListAvailableLogFields.available_access_log_fields to see what's valid;\n unset means the service default."},"authorizeLogFields":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"authorize_log_fields","description":"Subset of authorize-log fields to emit; see ListAvailableLogFields."},"proxyLogLevel":{"type":["string","null"],"title":"proxy_log_level","description":"Log level for the proxy service in particular, overriding `log_level`."},"sharedSecret":{"type":["string","null"],"title":"shared_secret","description":"Cluster-wide shared secret used to sign and validate internal requests\n and JWTs across Pomerium services. Must be a base64-encoded 32-byte\n value."},"services":{"type":["string","null"],"title":"services","description":"Comma-separated list of Pomerium services to run in this process\n (\"all\", \"authenticate\", \"authorize\", \"databroker\", \"proxy\")."},"address":{"type":["string","null"],"title":"address","description":"IP address and port for serving HTTPS requests (e.g. \":443\")."},"insecureServer":{"type":["boolean","null"],"title":"insecure_server","description":"When true, Pomerium serves HTTP without TLS. Intended only for testing\n behind a TLS-terminating load balancer."},"dnsFailureRefreshRate":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_failure_refresh_rate","description":"How long Envoy waits before retrying a failed DNS resolution."},"dnsLookupFamily":{"type":["string","null"],"title":"dns_lookup_family","description":"Envoy DNS lookup family (\"AUTO\", \"V4_ONLY\", \"V6_ONLY\", \"V4_PREFERRED\",\n \"ALL\"). Controls which address families Envoy resolves."},"dnsQueryTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_query_timeout","description":"Maximum time Envoy waits for a single DNS query to return."},"dnsQueryTries":{"type":["integer","null"],"title":"dns_query_tries","description":"Number of times Envoy retries a failed DNS query before giving up."},"dnsRefreshRate":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"dns_refresh_rate","description":"How often Envoy refreshes resolved addresses regardless of TTL."},"dnsUdpMaxQueries":{"type":["integer","null"],"title":"dns_udp_max_queries","description":"Maximum number of in-flight DNS queries Envoy will multiplex over a\n single UDP socket."},"dnsUseTcp":{"type":["boolean","null"],"title":"dns_use_tcp","description":"When true, Envoy resolves DNS over TCP instead of UDP."},"certificates":{"type":"array","items":{"type":"object","properties":{"certBytes":{"type":"string","title":"cert_bytes","format":"byte","description":"PEM-encoded certificate chain."},"keyBytes":{"type":"string","title":"key_bytes","format":"byte","description":"PEM-encoded private key matching `cert_bytes`."},"id":{"type":"string","title":"id","description":"Optional identifier for the certificate, used to refer to it from\n other parts of the configuration."}},"title":"Certificate","additionalProperties":false,"description":"An inline TLS certificate/key pair Pomerium serves for matching SNI\n hostnames."},"title":"certificates","description":"Inline TLS certificate/key pairs Pomerium serves. Each entry is matched\n against the request's SNI hostname."},"certificateKeyPairIds":{"type":"array","items":{"type":"string"},"title":"certificate_key_pair_ids","description":"IDs of managed key pairs to serve as TLS certificates, as an alternative\n to inline `certificates` entries."},"httpRedirectAddr":{"type":["string","null"],"title":"http_redirect_addr","description":"Address (host:port) on which Pomerium listens for plaintext HTTP and\n issues a redirect to the HTTPS address. Empty disables the redirect\n listener."},"timeoutRead":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_read","description":"Maximum time the proxy will wait for a complete request from a\n downstream client."},"timeoutWrite":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_write","description":"Maximum time the proxy will wait to send a complete response to a\n downstream client."},"timeoutIdle":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"timeout_idle","description":"Maximum idle time on a kept-alive connection before it is closed."},"authenticateServiceUrl":{"type":["string","null"],"title":"authenticate_service_url","description":"Externally accessible URL for the authenticate service."},"authenticateInternalServiceUrl":{"type":["string","null"],"title":"authenticate_internal_service_url","description":"URL Pomerium uses internally to reach the authenticate service. Set\n when the externally visible URL goes through a load balancer that\n proxies cannot reuse."},"signoutRedirectUrl":{"type":["string","null"],"title":"signout_redirect_url","description":"URL to redirect users to after they sign out."},"cookieName":{"type":["string","null"],"title":"cookie_name","description":"Name of the session cookie Pomerium issues. Defaults to \"_pomerium\"."},"cookieSecret":{"type":["string","null"],"title":"cookie_secret","description":"Secret used to encrypt and sign session cookies. Must be a\n base64-encoded 32-byte value."},"cookieDomain":{"type":["string","null"],"title":"cookie_domain","description":"Domain set on the session cookie. Pomerium defaults to the\n authenticate service URL host."},"cookieHttpOnly":{"type":["boolean","null"],"title":"cookie_http_only","description":"When true the session cookie carries the HttpOnly attribute."},"cookieExpire":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"cookie_expire","description":"How long an issued session cookie remains valid."},"cookieSameSite":{"type":["string","null"],"title":"cookie_same_site","description":"SameSite attribute of the session cookie (\"strict\", \"lax\", \"none\")."},"idpClientId":{"type":["string","null"],"title":"idp_client_id","description":"OAuth2 client ID for the identity provider."},"idpClientSecret":{"type":["string","null"],"title":"idp_client_secret","description":"OAuth2 client secret for the identity provider."},"idpProvider":{"type":["string","null"],"title":"idp_provider","description":"Identity provider name (\"oidc\", \"okta\", \"auth0\", \"google\", \"azure\", …).\n Selects which IdP integration Pomerium uses."},"idpProviderUrl":{"type":["string","null"],"title":"idp_provider_url","description":"OIDC issuer URL of the identity provider."},"idpAccessTokenAllowedAudiences":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"idp_access_token_allowed_audiences","description":"Audiences Pomerium accepts on IdP-issued access tokens. Required when\n BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN routes exist."},"scopes":{"type":"array","items":{"type":"string"},"title":"scopes","description":"OIDC scopes Pomerium requests when authenticating users."},"requestParams":{"type":"object","title":"request_params","additionalProperties":{"type":"string","title":"value"},"description":"Additional query parameters Pomerium appends to the IdP authorization\n request."},"authorizeServiceUrls":{"type":"array","items":{"type":"string"},"title":"authorize_service_urls","description":"Externally accessible URLs for the authorize service."},"authorizeInternalServiceUrl":{"type":["string","null"],"title":"authorize_internal_service_url","description":"URL Pomerium uses internally to reach the authorize service."},"overrideCertificateName":{"type":["string","null"],"title":"override_certificate_name","description":"Hostname Pomerium expects in upstream TLS certificates. Useful when\n upstream addresses are IPs but the certificate contains a hostname SAN."},"certificateAuthority":{"type":["string","null"],"title":"certificate_authority","description":"PEM-encoded certificate authority bundle Pomerium trusts for upstream\n TLS verification."},"certificateAuthorityKeyPairId":{"type":["string","null"],"title":"certificate_authority_key_pair_id","description":"ID of a managed key pair whose certificate is used as the upstream CA\n bundle, as an alternative to the inline `certificate_authority` value."},"deriveTls":{"type":["string","null"],"title":"derive_tls","description":"Base hostname Pomerium uses to derive default TLS certificates for\n routes. Empty disables derivation."},"signingKey":{"type":["string","null"],"title":"signing_key","description":"Private key Pomerium uses to sign internally issued JWTs (e.g. the JWT\n attached to upstream requests). Must be a PEM-encoded key."},"setResponseHeaders":{"type":"object","title":"set_response_headers","additionalProperties":{"type":"string","title":"value"},"description":"Headers Pomerium sets on every response across all routes."},"jwtClaimsHeaders":{"type":"object","title":"jwt_claims_headers","additionalProperties":{"type":"string","title":"value"},"description":"Map of header name to JWT claim. Pomerium copies the claim value from\n the session JWT to the named header on upstream requests."},"jwtIssuerFormat":{"oneOf":[{"type":"string","title":"IssuerFormat","enum":["IssuerHostOnly","IssuerURI"],"description":"Format used for the `iss` claim of JWTs Pomerium issues for upstream\n requests."},{"type":"null"}],"title":"jwt_issuer_format","description":"Format of the `iss` claim in JWTs Pomerium issues for upstream\n requests."},"jwtGroupsFilter":{"type":"array","items":{"type":"string"},"title":"jwt_groups_filter","description":"Allowlist of group IDs/names; the JWT Pomerium issues includes only\n groups appearing here. Empty means include all."},"jwtGroupsFilterInferFromPpl":{"type":["boolean","null"],"title":"jwt_groups_filter_infer_from_ppl","description":"When true the effective `jwt_groups_filter` is augmented with groups\n referenced by route PPL policies."},"bearerTokenFormat":{"oneOf":[{"type":"string","title":"BearerTokenFormat","enum":["BEARER_TOKEN_FORMAT_UNKNOWN","BEARER_TOKEN_FORMAT_DEFAULT","BEARER_TOKEN_FORMAT_IDP_ACCESS_TOKEN","BEARER_TOKEN_FORMAT_IDP_IDENTITY_TOKEN"],"description":"Controls how HTTP bearer token authentication is handled."},{"type":"null"}],"title":"bearer_token_format","description":"Cluster-wide default for how to interpret HTTP bearer tokens. Routes\n may override per-route."},"defaultUpstreamTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"default_upstream_timeout","description":"Default per-request timeout applied to upstream HTTP requests when a\n route does not specify its own."},"debugAddress":{"type":["string","null"],"title":"debug_address","description":"Address (host:port) on which Pomerium exposes its pprof debug\n endpoints. Empty disables them."},"metricsAddress":{"type":["string","null"],"title":"metrics_address","description":"Address (host:port) on which Pomerium serves Prometheus metrics."},"metricsBasicAuth":{"type":["string","null"],"title":"metrics_basic_auth","description":"HTTP Basic Auth credentials required to access `metrics_address`, of\n the form \"user:password\". Empty disables auth."},"metricsCertificate":{"oneOf":[{"type":"object","properties":{"certBytes":{"type":"string","title":"cert_bytes","format":"byte","description":"PEM-encoded certificate chain."},"keyBytes":{"type":"string","title":"key_bytes","format":"byte","description":"PEM-encoded private key matching `cert_bytes`."},"id":{"type":"string","title":"id","description":"Optional identifier for the certificate, used to refer to it from\n other parts of the configuration."}},"title":"Certificate","additionalProperties":false,"description":"An inline TLS certificate/key pair Pomerium serves for matching SNI\n hostnames."},{"type":"null"}],"title":"metrics_certificate","description":"TLS certificate/key pair Pomerium uses on the metrics listener."},"metricsClientCa":{"type":["string","null"],"title":"metrics_client_ca","description":"PEM-encoded CA bundle used to authenticate clients connecting to the\n metrics listener."},"metricsClientCaKeyPairId":{"type":["string","null"],"title":"metrics_client_ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the metrics\n client CA bundle, as an alternative to `metrics_client_ca`."},"otelTracesExporter":{"type":["string","null"],"title":"otel_traces_exporter","description":"Which OpenTelemetry traces exporter to use (\"otlp\", \"none\", …). Empty\n disables tracing."},"otelTracesSamplerArg":{"type":["number","null"],"title":"otel_traces_sampler_arg","format":"double","description":"OpenTelemetry sampler argument. For ratio-based samplers this is the\n sampling probability (0.0–1.0)."},"otelResourceAttributes":{"type":"array","items":{"type":"string"},"title":"otel_resource_attributes","description":"OpenTelemetry resource attributes appended to every emitted span/log,\n as \"key=value\" strings."},"otelLogLevel":{"type":["string","null"],"title":"otel_log_level","description":"Log level for the OpenTelemetry SDK itself."},"otelAttributeValueLengthLimit":{"type":["integer","null"],"title":"otel_attribute_value_length_limit","format":"int32","description":"Maximum length of a single OpenTelemetry attribute value before it is\n truncated."},"otelExporterOtlpEndpoint":{"type":["string","null"],"title":"otel_exporter_otlp_endpoint","description":"Default OTLP endpoint Pomerium dials for any OTLP exporter (traces,\n logs) when no signal-specific endpoint is set."},"otelExporterOtlpTracesEndpoint":{"type":["string","null"],"title":"otel_exporter_otlp_traces_endpoint","description":"OTLP endpoint specifically for traces; overrides\n `otel_exporter_otlp_endpoint` for the trace signal."},"otelExporterOtlpProtocol":{"type":["string","null"],"title":"otel_exporter_otlp_protocol","description":"OTLP transport protocol (\"grpc\" or \"http/protobuf\")."},"otelExporterOtlpTracesProtocol":{"type":["string","null"],"title":"otel_exporter_otlp_traces_protocol","description":"OTLP transport protocol used specifically for traces."},"otelExporterOtlpHeaders":{"type":"array","items":{"type":"string"},"title":"otel_exporter_otlp_headers","description":"Headers attached to every OTLP request, as \"key=value\" strings (e.g.\n for tenant identification)."},"otelExporterOtlpTracesHeaders":{"type":"array","items":{"type":"string"},"title":"otel_exporter_otlp_traces_headers","description":"OTLP headers used specifically for traces."},"otelExporterOtlpTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_exporter_otlp_timeout","description":"Per-request timeout for the OTLP exporter."},"otelExporterOtlpTracesTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_exporter_otlp_traces_timeout","description":"Per-request timeout used specifically for the OTLP traces exporter."},"otelBspScheduleDelay":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"otel_bsp_schedule_delay","description":"Delay between scheduled batches of spans the BatchSpanProcessor\n exports."},"otelBspMaxExportBatchSize":{"type":["integer","null"],"title":"otel_bsp_max_export_batch_size","format":"int32","description":"Maximum number of spans per export batch."},"grpcAddress":{"type":["string","null"],"title":"grpc_address","description":"Address (host:port) on which Pomerium serves its gRPC API."},"grpcInsecure":{"type":["boolean","null"],"title":"grpc_insecure","description":"When true, Pomerium speaks plaintext gRPC instead of TLS. Intended for\n co-located service deployments behind a trusted network boundary."},"grpcClientTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"grpc_client_timeout","description":"Per-request timeout applied to gRPC client calls Pomerium makes to its\n own services (authorize, databroker)."},"databrokerClusterLeaderId":{"type":["string","null"],"title":"databroker_cluster_leader_id","description":"Node ID of the databroker Raft leader, as observed by this process."},"databrokerClusterNodeId":{"type":["string","null"],"title":"databroker_cluster_node_id","description":"Node ID this process uses when participating in the databroker\n cluster."},"databrokerClusterNodes":{"oneOf":[{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","title":"id","description":"Stable identifier of the node within the cluster."},"grpcAddress":{"type":"string","title":"grpc_address","description":"gRPC service address (host:port) other components dial to reach this\n databroker node."},"raftAddress":{"type":["string","null"],"title":"raft_address","description":"Raft transport address (host:port) used for peer-to-peer replication."}},"title":"DataBrokerClusterNode","additionalProperties":false,"description":"One peer in a Pomerium databroker Raft cluster."},"title":"nodes","description":"Every node participating in the databroker cluster."}},"title":"DataBrokerClusterNodes","additionalProperties":false,"description":"Aggregate list of databroker cluster peers."},{"type":"null"}],"title":"databroker_cluster_nodes","description":"Full membership list of the databroker cluster."},"databrokerServiceUrls":{"type":"array","items":{"type":"string"},"title":"databroker_service_urls","description":"Externally accessible URLs for the databroker service."},"databrokerInternalServiceUrl":{"type":["string","null"],"title":"databroker_internal_service_url","description":"URL Pomerium uses internally to reach the databroker service."},"databrokerRaftBindAddress":{"type":["string","null"],"title":"databroker_raft_bind_address","description":"Bind address (host:port) for this node's Raft transport."},"databrokerStorageType":{"type":["string","null"],"title":"databroker_storage_type","description":"Backing-store type for the databroker (\"memory\", \"postgres\", …)."},"databrokerStorageConnectionString":{"type":["string","null"],"title":"databroker_storage_connection_string","description":"Connection string for the databroker storage backend, when applicable."},"downstreamMtls":{"oneOf":[{"type":"object","properties":{"ca":{"type":["string","null"],"title":"ca","description":"PEM-encoded certificate authority bundle used to verify client\n certificates."},"crl":{"type":["string","null"],"title":"crl","description":"PEM-encoded certificate revocation list checked against client\n certificates."},"enforcement":{"oneOf":[{"type":"string","title":"MtlsEnforcementMode","enum":["UNKNOWN","POLICY","POLICY_WITH_DEFAULT_DENY","REJECT_CONNECTION"],"description":"Represents a client certificate enforcement behavior."},{"type":"null"}],"title":"enforcement","description":"How aggressively client certificate requirements are enforced."},"matchSubjectAltNames":{"type":"array","items":{"type":"object","properties":{"sanType":{"title":"san_type","description":"Which SAN entry type this pattern applies to.","type":"string","enum":["SAN_TYPE_UNSPECIFIED","EMAIL","DNS","URI","IP_ADDRESS","USER_PRINCIPAL_NAME"]},"pattern":{"type":"string","title":"pattern","description":"Regular expression the SAN value must fully match."}},"title":"SANMatcher","additionalProperties":false,"description":"SANMatcher describes a constraint against one Subject Alternative Name\n entry in a client certificate."},"title":"match_subject_alt_names","description":"Patterns the certificate Subject Alternative Names must satisfy for the\n connection to be allowed."},"maxVerifyDepth":{"type":["integer","null"],"title":"max_verify_depth","description":"Maximum depth of the verification chain accepted from clients. Zero\n means use Envoy's default."},"caKeyPairId":{"type":["string","null"],"title":"ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the client CA,\n as an alternative to the inline `ca` value."}},"title":"DownstreamMtlsSettings","additionalProperties":false,"description":"DownstreamMtlsSettings controls how Pomerium validates client certificates\n presented by downstream (end-user) connections."},{"type":"null"}],"title":"downstream_mtls","description":"Downstream (end-user) mTLS validation configuration."},"googleCloudServerlessAuthenticationServiceAccount":{"type":["string","null"],"title":"google_cloud_serverless_authentication_service_account","description":"Google Cloud service account email Pomerium uses to obtain ID tokens\n for Cloud Run / serverless upstream targets."},"useProxyProtocol":{"type":["boolean","null"],"title":"use_proxy_protocol","description":"When true, Pomerium expects downstream connections to begin with the\n HAProxy PROXY protocol header (v1 or v2)."},"autocert":{"type":["boolean","null"],"title":"autocert","description":"When true, Pomerium uses ACME to automatically obtain and renew TLS\n certificates for the configured route hostnames."},"autocertCa":{"type":["string","null"],"title":"autocert_ca","description":"Directory URL of the ACME CA to use when `autocert` is enabled."},"autocertCaKeyPairId":{"type":["string","null"],"title":"autocert_ca_key_pair_id","description":"ID of a managed key pair whose certificate Pomerium presents to the\n ACME CA for account binding."},"autocertEmail":{"type":["string","null"],"title":"autocert_email","description":"Email address Pomerium registers with the ACME CA. Required by most\n CAs for expiration notifications."},"autocertUseStaging":{"type":["boolean","null"],"title":"autocert_use_staging","description":"When true, Pomerium uses Let's Encrypt's staging environment. Useful\n for testing to avoid hitting rate limits."},"autocertEabKeyId":{"type":["string","null"],"title":"autocert_eab_key_id","description":"External Account Binding key identifier provided by the ACME CA."},"autocertEabMacKey":{"type":["string","null"],"title":"autocert_eab_mac_key","description":"Base64-URL-encoded EAB MAC key paired with `autocert_eab_key_id`."},"autocertMustStaple":{"type":["boolean","null"],"title":"autocert_must_staple","description":"When true, Pomerium requests certificates with the OCSP Must-Staple\n extension."},"autocertDir":{"type":["string","null"],"title":"autocert_dir","description":"Filesystem directory Pomerium uses to cache obtained certificates and\n ACME account state."},"autocertTrustedCa":{"type":["string","null"],"title":"autocert_trusted_ca","description":"PEM-encoded CA bundle Pomerium trusts when validating the ACME CA's\n own TLS certificate, for private ACME servers."},"autocertTrustedCaKeyPairId":{"type":["string","null"],"title":"autocert_trusted_ca_key_pair_id","description":"ID of a managed key pair whose certificate is used as the trusted CA\n for the ACME server, as an alternative to `autocert_trusted_ca`."},"skipXffAppend":{"type":["boolean","null"],"title":"skip_xff_append","description":"When true, Pomerium does not append the immediate client IP to the\n X-Forwarded-For header on upstream requests."},"xffNumTrustedHops":{"type":["integer","null"],"title":"xff_num_trusted_hops","description":"Number of trusted hops Pomerium considers when extracting the\n client IP from the X-Forwarded-For header."},"envoyAdminAccessLogPath":{"type":["string","null"],"title":"envoy_admin_access_log_path","description":"Path to which Envoy writes admin-interface access logs. Empty\n disables admin-access logging."},"envoyAdminProfilePath":{"type":["string","null"],"title":"envoy_admin_profile_path","description":"Path to which Envoy writes pprof profiles when requested via the\n admin interface."},"envoyAdminAddress":{"type":["string","null"],"title":"envoy_admin_address","description":"Address (host:port) on which Envoy exposes its admin interface.\n Empty disables the admin interface."},"envoyBindConfigSourceAddress":{"type":["string","null"],"title":"envoy_bind_config_source_address","description":"Source address Envoy binds when connecting to upstreams."},"envoyBindConfigFreebind":{"type":["boolean","null"],"title":"envoy_bind_config_freebind","description":"When true, Envoy's upstream connections set IP_FREEBIND, allowing\n binding to non-local addresses."},"programmaticRedirectDomainWhitelist":{"type":"array","items":{"type":"string"},"title":"programmatic_redirect_domain_whitelist","description":"Hostnames Pomerium allows in programmatic-login redirect URLs."},"codecType":{"oneOf":[{"type":"string","title":"CodecType","enum":["CODEC_TYPE_AUTO","CODEC_TYPE_HTTP1","CODEC_TYPE_HTTP2","CODEC_TYPE_HTTP3"],"description":"CodecType defines the codec type to use for connections."},{"type":"null"}],"title":"codec_type","description":"Default HTTP codec used for downstream connections."},"primaryColor":{"type":["string","null"],"title":"primary_color","description":"Primary brand color (hex string like \"#1e88e5\") used in the\n Pomerium-served sign-in and error pages."},"secondaryColor":{"type":["string","null"],"title":"secondary_color","description":"Secondary brand color (hex string)."},"darkmodePrimaryColor":{"type":["string","null"],"title":"darkmode_primary_color","description":"Primary brand color used in dark mode."},"darkmodeSecondaryColor":{"type":["string","null"],"title":"darkmode_secondary_color","description":"Secondary brand color used in dark mode."},"logoUrl":{"type":["string","null"],"title":"logo_url","description":"URL of the logo image displayed on Pomerium-served pages."},"faviconUrl":{"type":["string","null"],"title":"favicon_url","description":"URL of the favicon used on Pomerium-served pages."},"errorMessageFirstParagraph":{"type":["string","null"],"title":"error_message_first_paragraph","description":"First paragraph of the error message Pomerium shows on access denied\n pages, before the auto-generated diagnostic text."},"passIdentityHeaders":{"type":["boolean","null"],"title":"pass_identity_headers","description":"When true, Pomerium adds X-Pomerium-* identity headers to upstream\n requests in addition to the signed JWT."},"runtimeFlags":{"type":"object","title":"runtime_flags","additionalProperties":{"type":"boolean","title":"value"},"description":"Per-flag boolean overrides for Pomerium runtime feature gates. The\n set of supported keys evolves with the release."},"http3AdvertisePort":{"type":["integer","null"],"title":"http3_advertise_port","description":"Port advertised in the Alt-Svc header so clients can upgrade to HTTP/3\n (QUIC). Zero disables advertisement."},"circuitBreakerThresholds":{"oneOf":[{"type":"object","properties":{"maxConnections":{"type":["integer","null"],"title":"max_connections","description":"The maximum number of connections that Envoy will make to the upstream\n cluster. If not specified, the default is 1024."},"maxPendingRequests":{"type":["integer","null"],"title":"max_pending_requests","description":"The maximum number of pending requests that Envoy will allow to the\n upstream cluster. If not specified, the default is 1024. This limit is\n applied as a connection limit for non-HTTP traffic."},"maxRequests":{"type":["integer","null"],"title":"max_requests","description":"The maximum number of parallel requests that Envoy will make to the\n upstream cluster. If not specified, the default is 1024. This limit does\n not apply to non-HTTP traffic."},"maxRetries":{"type":["integer","null"],"title":"max_retries","description":"The maximum number of parallel retries that Envoy will allow to the\n upstream cluster. If not specified, the default is 3."},"maxConnectionPools":{"type":["integer","null"],"title":"max_connection_pools","description":"The maximum number of connection pools per cluster that Envoy will\n concurrently support at once. If not specified, the default is unlimited.\n Set this for clusters which create a large number of connection pools."}},"title":"CircuitBreakerThresholds","additionalProperties":false,"description":"CircuitBreakerThresholds defines CircuitBreaker settings."},{"type":"null"}],"title":"circuit_breaker_thresholds","description":"Default upstream circuit-breaker thresholds applied to all routes\n unless overridden per route."},"sshAddress":{"type":["string","null"],"title":"ssh_address","description":"Address (host:port) on which Pomerium listens for SSH traffic.\n Empty disables the SSH proxy."},"sshHostKeyFiles":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"ssh_host_key_files","description":"Paths to host-key files Pomerium reads at startup to authenticate\n itself to SSH clients."},"sshHostKeys":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"ssh_host_keys","description":"Inline SSH host keys, used in place of `ssh_host_key_files`."},"sshHostKeyPairIds":{"type":"array","items":{"type":"string"},"title":"ssh_host_key_pair_ids","description":"IDs of managed key pairs to use as SSH host keys, as an alternative\n to file or inline values."},"sshUserCaKeyFile":{"type":["string","null"],"title":"ssh_user_ca_key_file","description":"Path to a file containing the SSH user-CA private key Pomerium uses\n to issue short-lived SSH user certificates."},"sshUserCaKey":{"type":["string","null"],"title":"ssh_user_ca_key","description":"Inline SSH user-CA private key, used in place of\n `ssh_user_ca_key_file`."},"sshUserCaKeyPairId":{"type":["string","null"],"title":"ssh_user_ca_key_pair_id","description":"ID of a managed key pair to use as the SSH user-CA key, as an\n alternative to file or inline values."},"mcpAllowedClientIdDomains":{"type":"array","items":{"type":"string"},"title":"mcp_allowed_client_id_domains","description":"mcp_allowed_client_id_domains specifies the allowed domains for MCP client ID metadata URLs.\n Supports wildcard patterns like \"*.example.com\".\n This is REQUIRED when MCP is enabled - client metadata fetching will fail if empty."},"mcpAllowedAsMetadataDomains":{"type":"array","items":{"type":"string"},"title":"mcp_allowed_as_metadata_domains","description":"mcp_allowed_as_metadata_domains specifies the allowed domains for upstream AS/PRM metadata URLs.\n Supports wildcard patterns like \"*.example.com\".\n This restricts which domains Pomerium will contact during upstream OAuth discovery."},"directoryProvider":{"type":["string","null"],"title":"directory_provider","description":"Directory-sync provider Pomerium uses to enumerate users and groups\n (\"auth0\", \"okta\", \"azure\", …). Empty disables directory sync."},"directoryProviderOptions":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"null"},{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object","additionalProperties":true}],"description":"Represents a JSON value.\n\n `Value` represents a dynamically typed value which can be either\n null, a number, a string, a boolean, a recursive struct value, or a\n list of values. A producer of value is expected to set one of these\n variants. Absence of any variant is an invalid state.","title":"google.protobuf.Value"},"description":"Represents a JSON object.\n\n An unordered key-value map, intending to perfectly capture the semantics of a\n JSON object. This enables parsing any arbitrary JSON payload as a message\n field in ProtoJSON format.\n\n This follows RFC 8259 guidelines for interoperable JSON: notably this type\n cannot represent large Int64 values or `NaN`/`Infinity` numbers,\n since the JSON format generally does not support those values in its number\n type.\n\n If you do not intend to parse arbitrary JSON into your message, a custom\n typed message should be preferred instead of using this type.","title":"google.protobuf.Struct"},{"type":"null"}],"title":"directory_provider_options","description":"Provider-specific options for the directory provider, as a generic\n JSON object."},"directoryProviderRefreshInterval":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"directory_provider_refresh_interval","description":"How often Pomerium refreshes the directory cache."},"directoryProviderRefreshTimeout":{"oneOf":[{"type":"string","format":"duration","description":"A Duration represents a signed, fixed-length span of time represented\n as a count of seconds and fractions of seconds at nanosecond\n resolution. It is independent of any calendar and concepts like \"day\"\n or \"month\". It is related to Timestamp in that the difference between\n two Timestamp values is a Duration and it can be added or subtracted\n from a Timestamp. Range is approximately +-10,000 years.\n\n # Examples\n\n Example 1: Compute Duration from two Timestamps in pseudo code.\n\n Timestamp start = ...;\n Timestamp end = ...;\n Duration duration = ...;\n\n duration.seconds = end.seconds - start.seconds;\n duration.nanos = end.nanos - start.nanos;\n\n if (duration.seconds < 0 && duration.nanos > 0) {\n duration.seconds += 1;\n duration.nanos -= 1000000000;\n } else if (duration.seconds > 0 && duration.nanos < 0) {\n duration.seconds -= 1;\n duration.nanos += 1000000000;\n }\n\n Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n\n Timestamp start = ...;\n Duration duration = ...;\n Timestamp end = ...;\n\n end.seconds = start.seconds + duration.seconds;\n end.nanos = start.nanos + duration.nanos;\n\n if (end.nanos < 0) {\n end.seconds -= 1;\n end.nanos += 1000000000;\n } else if (end.nanos >= 1000000000) {\n end.seconds += 1;\n end.nanos -= 1000000000;\n }\n\n Example 3: Compute Duration from datetime.timedelta in Python.\n\n td = datetime.timedelta(days=3, minutes=10)\n duration = Duration()\n duration.FromTimedelta(td)\n\n # JSON Mapping\n\n In JSON format, the Duration type is encoded as a string rather than an\n object, where the string ends in the suffix \"s\" (indicating seconds) and\n is preceded by the number of seconds, with nanoseconds expressed as\n fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n microsecond should be expressed in JSON format as \"3.000001s\".","title":"google.protobuf.Duration"},{"type":"null"}],"title":"directory_provider_refresh_timeout","description":"Per-attempt timeout for a single directory refresh cycle."},"blobStorage":{"oneOf":[{"type":"object","properties":{"bucketUri":{"type":["string","null"],"title":"bucket_uri","description":"URI of the object-storage bucket (e.g. \"s3://my-bucket\",\n \"gs://my-bucket\"). Empty disables blob storage."},"managedPrefix":{"type":["string","null"],"title":"managed_prefix","description":"Optional path prefix within the bucket where Pomerium stores managed\n objects, isolating them from other tenants of the same bucket."}},"title":"BlobStorageSettings","additionalProperties":false,"description":"BlobStorageSettings configures the object-storage backend Pomerium uses\n for large artifacts such as session recordings."},{"type":"null"}],"title":"blob_storage","description":"Object-storage backend Pomerium uses for large artifacts (session\n recordings, exports). Empty disables blob storage."},"autoApplyChangesets":{"type":["boolean","null"],"title":"auto_apply_changesets","description":"auto_apply_changesets controls whether or not changesets are automatically\n applied or require an adminstrator to apply them. This setting is\n currently only used in Pomerium Zero."},"allowUpgrades":{"oneOf":[{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},{"type":"null"}],"title":"allow_upgrades","description":"Allows HTTP upgrade requests to be forwarded upstream."},"envoyDynamicExtensions":{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"},"title":"values","description":"The string values held by this list."}},"title":"StringList","additionalProperties":false,"description":"Wrapper for a list of strings, used so map-valued Settings fields can\n hold repeated string values."},"sessionRecordingConcurrency":{"type":["integer","null"],"title":"session_recording_concurrency","description":"Tunes the maximum number of worker threads that envoy allocates for session recording\n uploading"},"normalizePath":{"type":["boolean","null"],"title":"normalize_path","description":"Should paths be normalized according to RFC 3986 before any processing of\n requests by HTTP filters or routing? Defaults to true."},"mergeSlashes":{"type":["boolean","null"],"title":"merge_slashes","description":"Determines if adjacent slashes in the path are merged into one before any\n processing of requests by HTTP filters or routing. Defaults to true."},"pathWithEscapedSlashesAction":{"oneOf":[{"type":"string","title":"PathWithEscapedSlashesAction","enum":["PATH_WITH_ESCAPED_SLASHES_ACTION_UNKNOWN","PATH_WITH_ESCAPED_SLASHES_ACTION_KEEP_UNCHANGED","PATH_WITH_ESCAPED_SLASHES_ACTION_REJECT_REQUEST","PATH_WITH_ESCAPED_SLASHES_ACTION_UNESCAPE_AND_REDIRECT","PATH_WITH_ESCAPED_SLASHES_ACTION_UNESCAPE_AND_FORWARD"],"description":"PathWithEscapedSlashesAction determines the action for request that contain\n %2F, %2f, %5C or %5c sequences in the URI path."},{"type":"null"}],"title":"path_with_escaped_slashes_action","description":"Action to take when request URL path contains escaped slash sequences\n (%2F, %2f, %5C and %5c). Defaults to rejecting requests."},"headersWithUnderscoresAction":{"oneOf":[{"type":"string","title":"HeadersWithUnderscoresAction","enum":["HEADERS_WITH_UNDERSCORES_ACTION_UNKNOWN","HEADERS_WITH_UNDERSCORES_ACTION_ALLOW","HEADERS_WITH_UNDERSCORES_ACTION_REJECT_REQUEST","HEADERS_WITH_UNDERSCORES_ACTION_DROP_HEADER"],"description":"Action to take when Envoy receives client request with header names containing underscore characters."},{"type":"null"}],"title":"headers_with_underscores_action","description":"Action to take when a client request with a header name containing\n underscore characters is received. Defaults to rejecting the request."},"createdAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true},"modifiedAt":{"type":"string","examples":["2023-01-15T01:30:15.01Z","2024-12-25T12:00:00Z"],"format":"date-time","description":"A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A ProtoJSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a ProtoJSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.","title":"google.protobuf.Timestamp","readOnly":true}},"title":"Settings","additionalProperties":false,"description":"Global Pomerium configuration settings."}},"title":"UpdateSettingsResponse","additionalProperties":false}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","examples":["not_found"],"enum":["canceled","unknown","invalid_argument","deadline_exceeded","not_found","already_exists","permission_denied","resource_exhausted","failed_precondition","aborted","out_of_range","unimplemented","internal","unavailable","data_loss","unauthenticated"],"description":"The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."},"details":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field."},"value":{"type":"string","format":"binary","description":"The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field."},"debug":{"oneOf":[{"type":"object","title":"Any","additionalProperties":true,"description":"Detailed error information."}],"discriminator":{"propertyName":"type"},"title":"Debug","description":"Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic."}},"additionalProperties":true,"description":"Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.","title":"connect.error_details.Any"},"description":"A list of messages that carry the error details. There is no limit on the number of messages."}},"title":"Connect Error","additionalProperties":true,"description":"Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation"}}}}}} \ No newline at end of file diff --git a/content/docs/api/pomerium-config-config-service-update-settings.api.mdx b/content/docs/api/pomerium-config-config-service-update-settings.api.mdx new file mode 100644 index 000000000..55e0c9488 --- /dev/null +++ b/content/docs/api/pomerium-config-config-service-update-settings.api.mdx @@ -0,0 +1,69 @@ +--- +id: pomerium-config-config-service-update-settings +title: "UpdateSettings" +description: "Updates existing settings" +sidebar_label: "UpdateSettings" +hide_title: true +hide_table_of_contents: true +api: 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 +sidebar_class_name: "post api-method" +info_path: docs/api/pomerium-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +Updates existing settings + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/docs/api/sidebar.ts b/content/docs/api/sidebar.ts new file mode 100644 index 000000000..7836892dc --- /dev/null +++ b/content/docs/api/sidebar.ts @@ -0,0 +1,336 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +const sidebar: SidebarsConfig = { + apisidebar: [ + { + type: "doc", + id: "docs/api/pomerium-api", + }, + { + type: "category", + label: "pomerium.config.ConfigService", + items: [ + { + type: "doc", + id: "docs/api/pomerium-config-config-service-create-key-pair", + label: "CreateKeyPair", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-create-policy", + label: "CreatePolicy", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-create-route", + label: "CreateRoute", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-create-service-account", + label: "CreateServiceAccount", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-delete-key-pair", + label: "DeleteKeyPair", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-delete-policy", + label: "DeletePolicy", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-delete-route", + label: "DeleteRoute", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-delete-service-account", + label: "DeleteServiceAccount", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-get-key-pair", + label: "GetKeyPair", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-get-policy", + label: "GetPolicy", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-get-route", + label: "GetRoute", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-get-server-info", + label: "GetServerInfo", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-get-service-account", + label: "GetServiceAccount", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-get-settings", + label: "GetSettings", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-list-available-log-fields", + label: "ListAvailableLogFields", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-list-key-pairs", + label: "ListKeyPairs", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-list-policies", + label: "ListPolicies", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-list-routes", + label: "ListRoutes", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-list-service-accounts", + label: "ListServiceAccounts", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-list-settings", + label: "ListSettings", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-update-key-pair", + label: "UpdateKeyPair", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-update-policy", + label: "UpdatePolicy", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-update-route", + label: "UpdateRoute", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-update-service-account", + label: "UpdateServiceAccount", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-update-settings", + label: "UpdateSettings", + className: "api-method post", + }, + ], + }, + { + type: "category", + label: "KeyPair", + items: [ + { + type: "doc", + id: "docs/api/pomerium-config-config-service-create-key-pair", + label: "CreateKeyPair", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-delete-key-pair", + label: "DeleteKeyPair", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-get-key-pair", + label: "GetKeyPair", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-list-key-pairs", + label: "ListKeyPairs", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-update-key-pair", + label: "UpdateKeyPair", + className: "api-method post", + }, + ], + }, + { + type: "category", + label: "Policy", + items: [ + { + type: "doc", + id: "docs/api/pomerium-config-config-service-create-policy", + label: "CreatePolicy", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-delete-policy", + label: "DeletePolicy", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-get-policy", + label: "GetPolicy", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-list-policies", + label: "ListPolicies", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-update-policy", + label: "UpdatePolicy", + className: "api-method post", + }, + ], + }, + { + type: "category", + label: "Route", + items: [ + { + type: "doc", + id: "docs/api/pomerium-config-config-service-create-route", + label: "CreateRoute", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-delete-route", + label: "DeleteRoute", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-get-route", + label: "GetRoute", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-list-routes", + label: "ListRoutes", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-update-route", + label: "UpdateRoute", + className: "api-method post", + }, + ], + }, + { + type: "category", + label: "ServiceAccount", + items: [ + { + type: "doc", + id: "docs/api/pomerium-config-config-service-create-service-account", + label: "CreateServiceAccount", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-delete-service-account", + label: "DeleteServiceAccount", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-get-service-account", + label: "GetServiceAccount", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-list-service-accounts", + label: "ListServiceAccounts", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-update-service-account", + label: "UpdateServiceAccount", + className: "api-method post", + }, + ], + }, + { + type: "category", + label: "Settings", + items: [ + { + type: "doc", + id: "docs/api/pomerium-config-config-service-get-settings", + label: "GetSettings", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-list-settings", + label: "ListSettings", + className: "api-method post", + }, + { + type: "doc", + id: "docs/api/pomerium-config-config-service-update-settings", + label: "UpdateSettings", + className: "api-method post", + }, + ], + }, + ], +}; + +export default sidebar.apisidebar; diff --git a/content/docs/internals/management-api-zero.md b/content/docs/internals/management-api-zero.md index bd84f1b0d..55162ea7d 100644 --- a/content/docs/internals/management-api-zero.md +++ b/content/docs/internals/management-api-zero.md @@ -12,7 +12,7 @@ This guide walks you through creating your first route and policy with the Pomer :::tip -Throughout this guide, you can refer to either the [**Zero API reference**](/docs/api) or the Zero API playground at `https://console.pomerium.app/openapi`. +Throughout this guide, you can refer to either the [**API reference**](/category/api) or the Zero API playground at `https://console.pomerium.app/openapi`. ::: diff --git a/cspell.json b/cspell.json index 597215896..78c5906a4 100644 --- a/cspell.json +++ b/cspell.json @@ -7,11 +7,13 @@ "k8s", "examples", "docusaurus.config.js", + "docusaurus.config.ts", "package.json", "sidebars.js", "static/_redirects", "_headers", "content/docs/capabilities/img/ssh/", + "content/docs/api/", "static/sitemap.xml" ], "language": "en-US", diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 45b9b3530..fd7addf4e 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -1,6 +1,9 @@ +/// // @ts-check // Note: type annotations allow type checking and IDEs autocompletion +import type * as Preset from '@docusaurus/preset-classic'; import {Config} from '@docusaurus/types'; +import type {Options as OpenApiPluginOptions} from 'docusaurus-plugin-openapi-docs'; const dotenv = require('dotenv'); const webpack = require('webpack'); @@ -24,7 +27,7 @@ const config: Config = { onBrokenMarkdownLinks: 'throw', }, }, - themes: ['@docusaurus/theme-mermaid'], + themes: ['@docusaurus/theme-mermaid', 'docusaurus-theme-openapi-docs'], customFields: { xgridKey: process.env.XGRID_KEY, @@ -44,12 +47,13 @@ const config: Config = { presets: [ [ - '@docusaurus/preset-classic', + 'classic', { docs: { path: 'content', routeBasePath: '/', sidebarPath: require.resolve('./sidebars.js'), + docItemComponent: '@theme/ApiItem', editUrl: 'https://github.com/pomerium/documentation/tree/main', admonitions: { keywords: [ @@ -80,18 +84,7 @@ const config: Config = { // Keep the docs sitemap restricted to canonical docs routes. ignorePatterns: ['/', '/docs/examples/**', '/examples/**'], }, - }, - ], - [ - 'redocusaurus', - { - specs: [ - { - spec: 'https://console.pomerium.app/openapi.yaml', - route: '/docs/api/', - }, - ], - }, + } satisfies Preset.Options, ], ], @@ -108,6 +101,29 @@ const config: Config = { defaultMode: 'light', // The color mode when user first visits the site. type: 'light' | 'dark' . Default is 'light'. respectPrefersColorScheme: true, // If true, respects the user's OS-level color scheme preference. Default is false. }, + languageTabs: [ + { + highlight: 'bash', + language: 'curl', + logoClass: 'curl', + }, + { + highlight: 'python', + language: 'python', + logoClass: 'python', + }, + { + highlight: 'go', + language: 'go', + logoClass: 'go', + }, + { + highlight: 'java', + language: 'java', + logoClass: 'java', + variant: 'unirest', + }, + ], navbar: { title: '', logo: { @@ -292,6 +308,23 @@ const config: Config = { ], require.resolve('docusaurus-plugin-image-zoom'), + [ + 'docusaurus-plugin-openapi-docs', + { + id: 'api', + docsPluginId: 'classic', + config: { + api: { + specPath: + 'https://raw.githubusercontent.com/pomerium/pomerium/main/pkg/grpc/config/config.openapi.yaml', + outputDir: 'content/docs/api', + sidebarOptions: { + groupPathsBy: 'tag', + }, + } satisfies OpenApiPluginOptions, + }, + }, + ], ], }; diff --git a/package.json b/package.json index 012d2006b..a4aaefbc5 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,8 @@ "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", "clear": "docusaurus clear", + "generate": "npm run generate:api-docs", + "generate:api-docs": "docusaurus gen-api-docs api", "serve": "docusaurus serve", "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", @@ -24,8 +26,9 @@ }, "dependencies": { "@docusaurus/core": "^3.10.0", + "@docusaurus/plugin-content-docs": "^3.10.1", "@docusaurus/preset-classic": "^3.10.0", - "@docusaurus/theme-common": "^3.8.1", + "@docusaurus/theme-common": "^3.10.1", "@docusaurus/theme-mermaid": "^3.10.0", "@docusaurus/types": "^3.9.2", "@emotion/react": "^11.14.0", @@ -38,7 +41,9 @@ "clsx": "^2.1.1", "docusaurus-gtm-plugin": "^0.0.2", "docusaurus-plugin-image-zoom": "^3.0.1", + "docusaurus-plugin-openapi-docs": "^5.0.2", "docusaurus-pushfeedback": "^1.0.5", + "docusaurus-theme-openapi-docs": "^5.0.2", "dotenv": "^17.4.2", "lodash": "^4.18.1", "mdx-mermaid": "^2.0.3", @@ -79,11 +84,19 @@ "prettier-plugin-sort-json": "^4.2.0", "typescript": "^6.0.3" }, + "overrides": { + "mdx-mermaid": { + "unist-util-visit": "$unist-util-visit" + } + }, "resolutions": { "diff": ">=5.2.2", "dompurify": ">=3.3.2", + "fast-uri": ">=3.1.2", "fast-xml-parser": ">=5.5.7", - "lodash-es": ">=4.18.0", + "lodash": ">=4.18.1", + "lodash-es": ">=4.18.1", + "path-to-regexp": "^0.1.13", "picomatch": ">=2.3.2", "postcss": ">=8.5.10", "qs": ">=6.14.1", diff --git a/sidebars.js b/sidebars.js index ef5aebe93..803e1413a 100644 --- a/sidebars.js +++ b/sidebars.js @@ -1,3 +1,5 @@ +import apiSidebar from './content/docs/api/sidebar'; + /** * @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { @@ -127,6 +129,16 @@ const sidebars = { }, items: [{type: 'autogenerated', dirName: 'docs/reference'}], }, + { + type: 'category', + label: 'API', + link: { + type: 'generated-index', + }, + items: apiSidebar.filter( + (item) => item.label !== 'pomerium.config.ConfigService', + ), + }, ], guides: [ { diff --git a/src/css/custom.css b/src/css/custom.css index 805f5652f..158d5c61c 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -234,12 +234,12 @@ td > .theme-code-block:last-child { margin-bottom: 0; } -.tabs-container { +.theme-tabs-container { border-radius: 8px; box-shadow: 0 0 2px #aaa; padding: 16px; } -.tabs-container .tabs { +.theme-tabs-container .tabs { margin: -12px -12px 0; } diff --git a/yarn.lock b/yarn.lock index a685613a8..4e88b8a21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,15 +2,15 @@ # yarn lockfile v1 -"@algolia/abtesting@1.15.0": - version "1.15.0" - resolved "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.15.0.tgz" - integrity sha512-D1QZ8dQx5zC9yrxNao9ER9bojmmzUdL1i2P9waIRiwnZ5fI26YswcCd6VHR/Q4W3PASfVf2My4YQ2FhGGDewTQ== +"@algolia/abtesting@1.21.0": + version "1.21.0" + resolved "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.21.0.tgz" + integrity sha512-kGvHfBa9oQCvZh0YXeguSToBD9GNJ+gzUZQ9KPTg+KSsM36obYcsKPoX0NnlJtPflHXu7RkMaIi44xs9meR6Zw== dependencies: - "@algolia/client-common" "5.49.0" - "@algolia/requester-browser-xhr" "5.49.0" - "@algolia/requester-fetch" "5.49.0" - "@algolia/requester-node-http" "5.49.0" + "@algolia/client-common" "5.55.0" + "@algolia/requester-browser-xhr" "5.55.0" + "@algolia/requester-fetch" "5.55.0" + "@algolia/requester-node-http" "5.55.0" "@algolia/autocomplete-core@1.19.2": version "1.19.2" @@ -22,7 +22,7 @@ "@algolia/autocomplete-core@^1.19.2": version "1.19.8" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.8.tgz#7c84c771d28643fb00d09026c05013fb97aeea23" + resolved "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.8.tgz" integrity sha512-3YEorYg44niXcm7gkft3nXYItHd44e8tmh4D33CTszPgP0QWkaLEaFywiNyJBo7UL/mqObA/G9RYuU7R8tN1IA== dependencies: "@algolia/autocomplete-plugin-algolia-insights" "1.19.8" @@ -37,7 +37,7 @@ "@algolia/autocomplete-plugin-algolia-insights@1.19.8": version "1.19.8" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.8.tgz#f60d21edbe2a42e6d4e2215430733e3f51641471" + resolved "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.8.tgz" integrity sha512-ZvJWO8ZZJDpc1LNM2TTBdmQsZBLMR4rU5iNR2OYvEeFBiaf/0ESnRSSLQbryarJY4SVxtoz6A2ZtDMNM+iQEAA== dependencies: "@algolia/autocomplete-shared" "1.19.8" @@ -49,129 +49,129 @@ "@algolia/autocomplete-shared@1.19.8": version "1.19.8" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.8.tgz#5d723d8bdb448efbb1b0e1c7ff94cc18e5b1dc0e" + resolved "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.8.tgz" integrity sha512-h5hf2t8ejF6vlOgvLaZzQbWs5SyH2z4PAWygNAvvD/2RI29hdQ54ldUGwqVuj9Srs+n8XUKTPUqb7fvhBhQrnQ== -"@algolia/client-abtesting@5.49.0": - version "5.49.0" - resolved "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.49.0.tgz" - integrity sha512-Q1MSRhh4Du9WeLIl1S9O+BDUMaL01uuQtmzCyEzOBtu1xBDr3wvqrTJtfEceEkA5/Nw1BdGSHa6sDT3xTAF90A== - dependencies: - "@algolia/client-common" "5.49.0" - "@algolia/requester-browser-xhr" "5.49.0" - "@algolia/requester-fetch" "5.49.0" - "@algolia/requester-node-http" "5.49.0" - -"@algolia/client-analytics@5.49.0": - version "5.49.0" - resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.49.0.tgz" - integrity sha512-v50elhC80oyQw+8o8BwM+VvPuOo36+3W8VCfR4hsHoafQtGbMtP63U5eNcUydbVsM0py3JLoBaL1yKBK4L01sg== - dependencies: - "@algolia/client-common" "5.49.0" - "@algolia/requester-browser-xhr" "5.49.0" - "@algolia/requester-fetch" "5.49.0" - "@algolia/requester-node-http" "5.49.0" - -"@algolia/client-common@5.49.0": - version "5.49.0" - resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.49.0.tgz" - integrity sha512-BDmVDtpDvymfLE5YQ2cPnfWJUVTDJqwpJa03Fsb7yJFJmbeKsUOGsnRkYsTbdzf0FfcvyvBB5zdcbrAIL249bg== - -"@algolia/client-insights@5.49.0": - version "5.49.0" - resolved "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.49.0.tgz" - integrity sha512-lDCXsnZDx7zQ5GzSi1EL3l07EbksjrdpMgixFRCdi2QqeBe42HIQJfPPqdWtwrAXjORRopsPx2z+gGYJP/79Uw== - dependencies: - "@algolia/client-common" "5.49.0" - "@algolia/requester-browser-xhr" "5.49.0" - "@algolia/requester-fetch" "5.49.0" - "@algolia/requester-node-http" "5.49.0" - -"@algolia/client-personalization@5.49.0": - version "5.49.0" - resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.49.0.tgz" - integrity sha512-5k/KB+DsnesNKvMUEwTKSzExOf5zYbiPg7DVO7g1Y/+bhMb3wmxp9RFwfqwPfmoRTjptqvwhR6a0593tWVkmAw== - dependencies: - "@algolia/client-common" "5.49.0" - "@algolia/requester-browser-xhr" "5.49.0" - "@algolia/requester-fetch" "5.49.0" - "@algolia/requester-node-http" "5.49.0" - -"@algolia/client-query-suggestions@5.49.0": - version "5.49.0" - resolved "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.49.0.tgz" - integrity sha512-pjHNcrdjn7p3RQ5Ql1Baiwfdn9bkS+z4gqONJJP8kuZFqYP8Olthy4G7fl5bCB29UjdUj5EWlaElQKCtPluCtQ== - dependencies: - "@algolia/client-common" "5.49.0" - "@algolia/requester-browser-xhr" "5.49.0" - "@algolia/requester-fetch" "5.49.0" - "@algolia/requester-node-http" "5.49.0" - -"@algolia/client-search@5.49.0": - version "5.49.0" - resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.49.0.tgz" - integrity sha512-uGv2P3lcviuaZy8ZOAyN60cZdhOVyjXwaDC27a1qdp3Pb5Azn+lLSJwkHU4TNRpphHmIei9HZuUxwQroujdPjw== - dependencies: - "@algolia/client-common" "5.49.0" - "@algolia/requester-browser-xhr" "5.49.0" - "@algolia/requester-fetch" "5.49.0" - "@algolia/requester-node-http" "5.49.0" +"@algolia/client-abtesting@5.55.0": + version "5.55.0" + resolved "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.55.0.tgz" + integrity sha512-Zt2GjIm7vsaf7K23tk5JmtcVNc38G9p0C2L2Lrm06miyLE/NL2etHtHInvuLc1DjxTp7Y2nId4X/tzwo372K8Q== + dependencies: + "@algolia/client-common" "5.55.0" + "@algolia/requester-browser-xhr" "5.55.0" + "@algolia/requester-fetch" "5.55.0" + "@algolia/requester-node-http" "5.55.0" + +"@algolia/client-analytics@5.55.0": + version "5.55.0" + resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.55.0.tgz" + integrity sha512-7BueMuWYg/KBA2EX9zsQ+3OAleEyrJcB+SV5Al/9pLjMQq5mXB/8M5HaUPqZwN812g5kLzj9j43VThlZgWq0hg== + dependencies: + "@algolia/client-common" "5.55.0" + "@algolia/requester-browser-xhr" "5.55.0" + "@algolia/requester-fetch" "5.55.0" + "@algolia/requester-node-http" "5.55.0" + +"@algolia/client-common@5.55.0": + version "5.55.0" + resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.0.tgz" + integrity sha512-pJZIyhvUrs+B7c5Lw0iP5yP/NsqJMda7pKRYbfG4KtfGIVSMcAalZhdqL5UX8Z9DOC4KxO9tKV5RDeVjZU0VfQ== + +"@algolia/client-insights@5.55.0": + version "5.55.0" + resolved "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.55.0.tgz" + integrity sha512-RydkKDhx0GWTYuw0ndTXHGM8hD8hgwftKE65FfnJZb5bPc9CevOqv3qNPUQiviAwkqT9hQNH31uDGeV3yZkgfA== + dependencies: + "@algolia/client-common" "5.55.0" + "@algolia/requester-browser-xhr" "5.55.0" + "@algolia/requester-fetch" "5.55.0" + "@algolia/requester-node-http" "5.55.0" + +"@algolia/client-personalization@5.55.0": + version "5.55.0" + resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.55.0.tgz" + integrity sha512-XiS7gdFq/COWiwdWXZ8+RHuewfEo03TkGESk44zU8zTc/Z6R8fm4DNmV52swJKkeB2N9iC7NKpgpM22OOkcgTw== + dependencies: + "@algolia/client-common" "5.55.0" + "@algolia/requester-browser-xhr" "5.55.0" + "@algolia/requester-fetch" "5.55.0" + "@algolia/requester-node-http" "5.55.0" + +"@algolia/client-query-suggestions@5.55.0": + version "5.55.0" + resolved "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.55.0.tgz" + integrity sha512-LBEJ/q+hn1nJ0aYg5IcWgLNCPjWHTahWmpHNx1qUZMho+9CyWM6LaEnhac45UHjQm/j0m374HP685VrpL133lA== + dependencies: + "@algolia/client-common" "5.55.0" + "@algolia/requester-browser-xhr" "5.55.0" + "@algolia/requester-fetch" "5.55.0" + "@algolia/requester-node-http" "5.55.0" + +"@algolia/client-search@5.55.0": + version "5.55.0" + resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.55.0.tgz" + integrity sha512-2/9jUXKH4IcdU5qxH6cbDH46ZBe46G7xr+MrcHwgEXZcUfdAvUgLSH53MAWuMgxvw0G5yoqiWMifHc62Os0fiQ== + dependencies: + "@algolia/client-common" "5.55.0" + "@algolia/requester-browser-xhr" "5.55.0" + "@algolia/requester-fetch" "5.55.0" + "@algolia/requester-node-http" "5.55.0" "@algolia/events@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz" integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== -"@algolia/ingestion@1.49.0": - version "1.49.0" - resolved "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.49.0.tgz" - integrity sha512-sH10mftYlmvfGbvAgTtHYbCIstmNUdiAkX//0NAyBcJRB6NnZmNsdLxdFGbE8ZqlGXzoe0zcUIau+DxKpXtqCw== +"@algolia/ingestion@1.55.0": + version "1.55.0" + resolved "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.55.0.tgz" + integrity sha512-80tKsQgxXWo+jK0v4YGCHqyTEXawhAKYyr3kOdN51ElfRqUFjZNPVhZk6vRiqSqXfvrH85ytacT3cbJR6+qolA== dependencies: - "@algolia/client-common" "5.49.0" - "@algolia/requester-browser-xhr" "5.49.0" - "@algolia/requester-fetch" "5.49.0" - "@algolia/requester-node-http" "5.49.0" + "@algolia/client-common" "5.55.0" + "@algolia/requester-browser-xhr" "5.55.0" + "@algolia/requester-fetch" "5.55.0" + "@algolia/requester-node-http" "5.55.0" -"@algolia/monitoring@1.49.0": - version "1.49.0" - resolved "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.49.0.tgz" - integrity sha512-RqhGcVVxLpK+lA0GZKywlQIXsI704flc12nv/hOdrwiuk/Uyhxs46KLM4ngip7wutU+7t0PYZWiVayrqBPN/ZQ== +"@algolia/monitoring@1.55.0": + version "1.55.0" + resolved "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.55.0.tgz" + integrity sha512-4UjmAL8ywGW4rCfK6Qmgw3wIjbrO2wl2s4Eq56JTiN40L2t0XTv0HZkYAmr6nfeiXO0he/2crvZRX6SATSepag== dependencies: - "@algolia/client-common" "5.49.0" - "@algolia/requester-browser-xhr" "5.49.0" - "@algolia/requester-fetch" "5.49.0" - "@algolia/requester-node-http" "5.49.0" + "@algolia/client-common" "5.55.0" + "@algolia/requester-browser-xhr" "5.55.0" + "@algolia/requester-fetch" "5.55.0" + "@algolia/requester-node-http" "5.55.0" -"@algolia/recommend@5.49.0": - version "5.49.0" - resolved "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.49.0.tgz" - integrity sha512-kg8omGRvmIPhhqtUqSIpS3regFKWuoWh3WqyUhGk27N4T7q8I++8TsDYsV8vK7oBEzw706m2vUBtN5fw2fDjmw== +"@algolia/recommend@5.55.0": + version "5.55.0" + resolved "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.55.0.tgz" + integrity sha512-LMpJPtIkfDsHIx5Ga+baNr22ntYbY+e2wT7MSIc/FjAnu9wnBFhx1H/GfhmP/c5/IvbThDX+3ilxPRjSfCI8aA== dependencies: - "@algolia/client-common" "5.49.0" - "@algolia/requester-browser-xhr" "5.49.0" - "@algolia/requester-fetch" "5.49.0" - "@algolia/requester-node-http" "5.49.0" + "@algolia/client-common" "5.55.0" + "@algolia/requester-browser-xhr" "5.55.0" + "@algolia/requester-fetch" "5.55.0" + "@algolia/requester-node-http" "5.55.0" -"@algolia/requester-browser-xhr@5.49.0": - version "5.49.0" - resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.49.0.tgz" - integrity sha512-BaZ6NTI9VdSbDcsMucdKhTuFFxv6B+3dAZZBozX12fKopYsELh7dBLfZwm8evDCIicmNjIjobi4VNnNshrCSuw== +"@algolia/requester-browser-xhr@5.55.0": + version "5.55.0" + resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.0.tgz" + integrity sha512-tDymJ7nFOAoUuecma3usK6o94dp8m4HYFDGh4ByYQXWkv14cpmDn+nWdylmcZO0Qvco107vqDo4+Anksnl8w1Q== dependencies: - "@algolia/client-common" "5.49.0" + "@algolia/client-common" "5.55.0" -"@algolia/requester-fetch@5.49.0": - version "5.49.0" - resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.49.0.tgz" - integrity sha512-2nxISxS5xO5DLAj6QzMImgJv6CqpZhJVkhcTFULESR/k4IpbkJTEHmViVTxw9MlrU8B5GfwHevFd7vKL3a7MXQ== +"@algolia/requester-fetch@5.55.0": + version "5.55.0" + resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.55.0.tgz" + integrity sha512-6IDSB5o5dkDPQ4LdOW0Yuw/qy5MdWlO2xDHgPVZgW4YDjbxvnX5PAiV7/WWZdWyVObScZZnnHpPbiqfYs/zBLg== dependencies: - "@algolia/client-common" "5.49.0" + "@algolia/client-common" "5.55.0" -"@algolia/requester-node-http@5.49.0": - version "5.49.0" - resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.49.0.tgz" - integrity sha512-S/B94C6piEUXGpN3y5ysmNKMEqdfNVAXYY+FxivEAV5IGJjbEuLZfT8zPPZUWGw9vh6lgP80Hye2G5aVBNIa8Q== +"@algolia/requester-node-http@5.55.0": + version "5.55.0" + resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.0.tgz" + integrity sha512-Yyyne4l//vDSdg4MhYJkaVne+KEPi833eCj3/T/87ernTwrvP6j9biXXZELsN8sLI/f2ndV/vugDIy2jdJQB6g== dependencies: - "@algolia/client-common" "5.49.0" + "@algolia/client-common" "5.55.0" "@antfu/install-pkg@^1.1.0": version "1.1.0" @@ -181,34 +181,41 @@ package-manager-detector "^1.3.0" tinyexec "^1.0.1" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz" - integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== +"@apidevtools/json-schema-ref-parser@^15.3.3": + version "15.3.6" + resolved "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-15.3.6.tgz" + integrity sha512-oPFDSviRrreUmCZn09LCD4S9QQa6j7zfEwBM1pkGa/kXY0O4sXsEXn4emLP/Tt6tik2+BtgwKk2eldAeOWZ2Rw== + dependencies: + js-yaml "^4.2.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz" + integrity sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw== dependencies: - "@babel/helper-validator-identifier" "^7.28.5" + "@babel/helper-validator-identifier" "^7.29.7" js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.28.6", "@babel/compat-data@^7.29.0": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz" - integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== +"@babel/compat-data@^7.28.6", "@babel/compat-data@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz" + integrity sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg== "@babel/core@^7.21.3", "@babel/core@^7.25.9": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz" - integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== - dependencies: - "@babel/code-frame" "^7.29.0" - "@babel/generator" "^7.29.0" - "@babel/helper-compilation-targets" "^7.28.6" - "@babel/helper-module-transforms" "^7.28.6" - "@babel/helpers" "^7.28.6" - "@babel/parser" "^7.29.0" - "@babel/template" "^7.28.6" - "@babel/traverse" "^7.29.0" - "@babel/types" "^7.29.0" + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz" + integrity sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helpers" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/template" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" @@ -216,61 +223,61 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.25.9", "@babel/generator@^7.28.0", "@babel/generator@^7.29.0": - version "7.29.1" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz" - integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== +"@babel/generator@^7.25.9", "@babel/generator@^7.28.0", "@babel/generator@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz" + integrity sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ== dependencies: - "@babel/parser" "^7.29.0" - "@babel/types" "^7.29.0" + "@babel/parser" "^7.29.7" + "@babel/types" "^7.29.7" "@jridgewell/gen-mapping" "^0.3.12" "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" -"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": - version "7.27.3" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz" - integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== +"@babel/helper-annotate-as-pure@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz" + integrity sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw== dependencies: - "@babel/types" "^7.27.3" + "@babel/types" "^7.29.7" -"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz" - integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA== +"@babel/helper-compilation-targets@^7.28.6", "@babel/helper-compilation-targets@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz" + integrity sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g== dependencies: - "@babel/compat-data" "^7.28.6" - "@babel/helper-validator-option" "^7.27.1" + "@babel/compat-data" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz" - integrity sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-member-expression-to-functions" "^7.28.5" - "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/helper-replace-supers" "^7.28.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/traverse" "^7.28.6" +"@babel/helper-create-class-features-plugin@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz" + integrity sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-member-expression-to-functions" "^7.29.7" + "@babel/helper-optimise-call-expression" "^7.29.7" + "@babel/helper-replace-supers" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + "@babel/traverse" "^7.29.7" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1", "@babel/helper-create-regexp-features-plugin@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz" - integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz" + integrity sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-annotate-as-pure" "^7.29.7" regexpu-core "^6.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.5", "@babel/helper-define-polyfill-provider@^0.6.6": - version "0.6.6" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz" - integrity sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA== +"@babel/helper-define-polyfill-provider@^0.6.5", "@babel/helper-define-polyfill-provider@^0.6.8": + version "0.6.8" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz" + integrity sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA== dependencies: "@babel/helper-compilation-targets" "^7.28.6" "@babel/helper-plugin-utils" "^7.28.6" @@ -278,151 +285,159 @@ lodash.debounce "^4.0.8" resolve "^1.22.11" -"@babel/helper-globals@^7.28.0": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz" - integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== +"@babel/helper-globals@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz" + integrity sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA== + +"@babel/helper-member-expression-to-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz" + integrity sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg== + dependencies: + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz" + integrity sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g== + dependencies: + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/helper-module-transforms@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz" + integrity sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg== + dependencies: + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/traverse" "^7.29.7" -"@babel/helper-member-expression-to-functions@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz" - integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== - dependencies: - "@babel/traverse" "^7.28.5" - "@babel/types" "^7.28.5" +"@babel/helper-optimise-call-expression@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz" + integrity sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong== + dependencies: + "@babel/types" "^7.29.7" -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz" - integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== - dependencies: - "@babel/traverse" "^7.28.6" - "@babel/types" "^7.28.6" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.28.6", "@babel/helper-plugin-utils@^7.29.7", "@babel/helper-plugin-utils@^7.8.0": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz" + integrity sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw== -"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz" - integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== +"@babel/helper-remap-async-to-generator@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz" + integrity sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og== + dependencies: + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-wrap-function" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/helper-replace-supers@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz" + integrity sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ== dependencies: - "@babel/helper-module-imports" "^7.28.6" - "@babel/helper-validator-identifier" "^7.28.5" - "@babel/traverse" "^7.28.6" + "@babel/helper-member-expression-to-functions" "^7.29.7" + "@babel/helper-optimise-call-expression" "^7.29.7" + "@babel/traverse" "^7.29.7" -"@babel/helper-optimise-call-expression@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz" - integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== +"@babel/helper-skip-transparent-expression-wrappers@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz" + integrity sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ== dependencies: - "@babel/types" "^7.27.1" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.28.6", "@babel/helper-plugin-utils@^7.8.0": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz" - integrity sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug== +"@babel/helper-string-parser@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz" + integrity sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw== -"@babel/helper-remap-async-to-generator@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz" - integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-wrap-function" "^7.27.1" - "@babel/traverse" "^7.27.1" +"@babel/helper-validator-identifier@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz" + integrity sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== -"@babel/helper-replace-supers@^7.27.1", "@babel/helper-replace-supers@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz" - integrity sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.28.5" - "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/traverse" "^7.28.6" +"@babel/helper-validator-option@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz" + integrity sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw== -"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz" - integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== +"@babel/helper-wrap-function@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz" + integrity sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw== dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-string-parser@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" - integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== - -"@babel/helper-validator-identifier@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz" - integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + "@babel/template" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" -"@babel/helper-validator-option@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz" - integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== - -"@babel/helper-wrap-function@^7.27.1": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz" - integrity sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ== +"@babel/helpers@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz" + integrity sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg== dependencies: - "@babel/template" "^7.28.6" - "@babel/traverse" "^7.28.6" - "@babel/types" "^7.28.6" + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.7" -"@babel/helpers@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz" - integrity sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw== +"@babel/parser@^7.28.0", "@babel/parser@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz" + integrity sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg== dependencies: - "@babel/template" "^7.28.6" - "@babel/types" "^7.28.6" - -"@babel/parser@^7.28.0", "@babel/parser@^7.28.6", "@babel/parser@^7.29.0": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz" - integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== + "@babel/types" "^7.29.7" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz" + integrity sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w== dependencies: - "@babel/types" "^7.29.0" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz" - integrity sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q== + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz" + integrity sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.5" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz" + integrity sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz" - integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== +"@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz" + integrity sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz" - integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz" + integrity sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + "@babel/plugin-transform-optional-chaining" "^7.29.7" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz" - integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz" + integrity sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/plugin-transform-optional-chaining" "^7.27.1" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz" - integrity sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g== - dependencies: - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/traverse" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -436,33 +451,33 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-import-assertions@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz" - integrity sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw== +"@babel/plugin-syntax-import-assertions@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz" + integrity sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-syntax-import-attributes@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz" - integrity sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw== +"@babel/plugin-syntax-import-attributes@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz" + integrity sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-syntax-jsx@^7.27.1", "@babel/plugin-syntax-jsx@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz" - integrity sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w== +"@babel/plugin-syntax-jsx@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz" + integrity sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-syntax-typescript@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz" - integrity sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A== +"@babel/plugin-syntax-typescript@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz" + integrity sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -472,535 +487,536 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz" - integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== +"@babel/plugin-transform-arrow-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz" + integrity sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-async-generator-functions@^7.29.0": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz" - integrity sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w== +"@babel/plugin-transform-async-generator-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz" + integrity sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/helper-remap-async-to-generator" "^7.27.1" - "@babel/traverse" "^7.29.0" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-remap-async-to-generator" "^7.29.7" + "@babel/traverse" "^7.29.7" -"@babel/plugin-transform-async-to-generator@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz" - integrity sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g== +"@babel/plugin-transform-async-to-generator@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz" + integrity sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w== dependencies: - "@babel/helper-module-imports" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-remap-async-to-generator" "^7.29.7" -"@babel/plugin-transform-block-scoped-functions@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz" - integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== +"@babel/plugin-transform-block-scoped-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz" + integrity sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-block-scoping@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz" - integrity sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw== +"@babel/plugin-transform-block-scoping@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz" + integrity sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-class-properties@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz" - integrity sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw== +"@babel/plugin-transform-class-properties@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz" + integrity sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-class-static-block@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz" - integrity sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ== +"@babel/plugin-transform-class-static-block@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz" + integrity sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A== dependencies: - "@babel/helper-create-class-features-plugin" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-classes@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz" - integrity sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q== +"@babel/plugin-transform-classes@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz" + integrity sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-compilation-targets" "^7.28.6" - "@babel/helper-globals" "^7.28.0" - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/helper-replace-supers" "^7.28.6" - "@babel/traverse" "^7.28.6" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-globals" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-replace-supers" "^7.29.7" + "@babel/traverse" "^7.29.7" -"@babel/plugin-transform-computed-properties@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz" - integrity sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ== +"@babel/plugin-transform-computed-properties@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz" + integrity sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/template" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/template" "^7.29.7" -"@babel/plugin-transform-destructuring@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz" - integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== +"@babel/plugin-transform-destructuring@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz" + integrity sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.5" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" -"@babel/plugin-transform-dotall-regex@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz" - integrity sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg== +"@babel/plugin-transform-dotall-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz" + integrity sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.28.5" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-duplicate-keys@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz" - integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== +"@babel/plugin-transform-duplicate-keys@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz" + integrity sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.29.0": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz" - integrity sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz" + integrity sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.28.5" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-dynamic-import@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz" - integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== +"@babel/plugin-transform-dynamic-import@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz" + integrity sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-explicit-resource-management@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz" - integrity sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg== +"@babel/plugin-transform-explicit-resource-management@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz" + integrity sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/plugin-transform-destructuring" "^7.28.5" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/plugin-transform-destructuring" "^7.29.7" -"@babel/plugin-transform-exponentiation-operator@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz" - integrity sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw== +"@babel/plugin-transform-exponentiation-operator@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz" + integrity sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-export-namespace-from@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz" - integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== +"@babel/plugin-transform-export-namespace-from@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz" + integrity sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-for-of@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz" - integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== +"@babel/plugin-transform-for-of@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz" + integrity sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" -"@babel/plugin-transform-function-name@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz" - integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== +"@babel/plugin-transform-function-name@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz" + integrity sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg== dependencies: - "@babel/helper-compilation-targets" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.27.1" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" -"@babel/plugin-transform-json-strings@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz" - integrity sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw== +"@babel/plugin-transform-json-strings@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz" + integrity sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz" - integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== +"@babel/plugin-transform-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz" + integrity sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-logical-assignment-operators@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz" - integrity sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A== +"@babel/plugin-transform-logical-assignment-operators@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz" + integrity sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-member-expression-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz" - integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== +"@babel/plugin-transform-member-expression-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz" + integrity sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-modules-amd@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz" - integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== +"@babel/plugin-transform-modules-amd@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz" + integrity sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew== dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-modules-commonjs@^7.27.1", "@babel/plugin-transform-modules-commonjs@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz" - integrity sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA== +"@babel/plugin-transform-modules-commonjs@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz" + integrity sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ== dependencies: - "@babel/helper-module-transforms" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-modules-systemjs@^7.29.0": - version "7.29.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.4.tgz#f621105da99919c15cf4bde6fcc7346ef95e7b20" - integrity sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w== +"@babel/plugin-transform-modules-systemjs@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz" + integrity sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ== dependencies: - "@babel/helper-module-transforms" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/helper-validator-identifier" "^7.28.5" - "@babel/traverse" "^7.29.0" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/traverse" "^7.29.7" -"@babel/plugin-transform-modules-umd@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz" - integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== +"@babel/plugin-transform-modules-umd@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz" + integrity sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA== dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.29.0": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz" - integrity sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz" + integrity sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.28.5" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-new-target@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz" - integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== +"@babel/plugin-transform-new-target@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz" + integrity sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-nullish-coalescing-operator@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz" - integrity sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz" + integrity sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-numeric-separator@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz" - integrity sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w== +"@babel/plugin-transform-numeric-separator@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz" + integrity sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-object-rest-spread@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz" - integrity sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA== +"@babel/plugin-transform-object-rest-spread@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz" + integrity sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A== dependencies: - "@babel/helper-compilation-targets" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/plugin-transform-destructuring" "^7.28.5" - "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/traverse" "^7.28.6" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/plugin-transform-destructuring" "^7.29.7" + "@babel/plugin-transform-parameters" "^7.29.7" + "@babel/traverse" "^7.29.7" -"@babel/plugin-transform-object-super@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz" - integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== +"@babel/plugin-transform-object-super@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz" + integrity sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-replace-supers" "^7.29.7" -"@babel/plugin-transform-optional-catch-binding@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz" - integrity sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ== +"@babel/plugin-transform-optional-catch-binding@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz" + integrity sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz" - integrity sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w== +"@babel/plugin-transform-optional-chaining@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz" + integrity sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" -"@babel/plugin-transform-parameters@^7.27.7": - version "7.27.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz" - integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== +"@babel/plugin-transform-parameters@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz" + integrity sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-private-methods@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz" - integrity sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg== +"@babel/plugin-transform-private-methods@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz" + integrity sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug== dependencies: - "@babel/helper-create-class-features-plugin" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-private-property-in-object@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz" - integrity sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA== +"@babel/plugin-transform-private-property-in-object@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz" + integrity sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-create-class-features-plugin" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-property-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz" - integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== +"@babel/plugin-transform-property-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz" + integrity sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz" - integrity sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug== + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.29.7.tgz" + integrity sha512-J0wGhKan+rIiE2OhfhRptySLrJ6SjQYM6b6N1FMlhyhCcw1Mig8vQjWchyB+bgHGDvaWo6Diu6CLRMra2uMtmg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-react-display-name@^7.28.0": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz" - integrity sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA== +"@babel/plugin-transform-react-display-name@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.29.7.tgz" + integrity sha512-+1wdDMGNb4UPeY3Q4L5yLiYe6TXPXubs4NjrgRFw13hPRLJfEMw2Q5OXkee6/IfdqePIeW4Jjwe3aBh7SdKz4Q== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-react-jsx-development@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz" - integrity sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q== +"@babel/plugin-transform-react-jsx-development@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.29.7.tgz" + integrity sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g== dependencies: - "@babel/plugin-transform-react-jsx" "^7.27.1" + "@babel/plugin-transform-react-jsx" "^7.29.7" -"@babel/plugin-transform-react-jsx@^7.27.1": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz" - integrity sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow== +"@babel/plugin-transform-react-jsx@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.29.7.tgz" + integrity sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-module-imports" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/plugin-syntax-jsx" "^7.28.6" - "@babel/types" "^7.28.6" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/plugin-syntax-jsx" "^7.29.7" + "@babel/types" "^7.29.7" -"@babel/plugin-transform-react-pure-annotations@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz" - integrity sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA== +"@babel/plugin-transform-react-pure-annotations@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.29.7.tgz" + integrity sha512-H5E+HBgDpr6Q5t+Aj11tL7XkIui1jhbIoArVQnqjgXo5/3YxkN7ZEBcWF4RQlB0T4rrxJQbXS6kiFV6B7XTqUA== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-regenerator@^7.29.0": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz" - integrity sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog== +"@babel/plugin-transform-regenerator@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz" + integrity sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-regexp-modifiers@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz" - integrity sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg== +"@babel/plugin-transform-regexp-modifiers@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz" + integrity sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.28.5" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-reserved-words@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz" - integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== +"@babel/plugin-transform-reserved-words@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz" + integrity sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-runtime@^7.25.9": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz" - integrity sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w== + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.7.tgz" + integrity sha512-xmAscdE/AsqRW7vutbPNoUmu/nF5SrLKPs7aoJgEjo35lLKA/Bc0i2rMv/hr1+Y0o1bQCiVtith3u2vdgRL39Q== dependencies: - "@babel/helper-module-imports" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" babel-plugin-polyfill-corejs2 "^0.4.14" babel-plugin-polyfill-corejs3 "^0.13.0" babel-plugin-polyfill-regenerator "^0.6.5" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz" - integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== +"@babel/plugin-transform-shorthand-properties@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz" + integrity sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-spread@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz" - integrity sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA== +"@babel/plugin-transform-spread@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz" + integrity sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ== dependencies: - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" -"@babel/plugin-transform-sticky-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz" - integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== +"@babel/plugin-transform-sticky-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz" + integrity sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-template-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz" - integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== +"@babel/plugin-transform-template-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz" + integrity sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-typeof-symbol@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz" - integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== +"@babel/plugin-transform-typeof-symbol@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz" + integrity sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-typescript@^7.28.5": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz" - integrity sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw== +"@babel/plugin-transform-typescript@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz" + integrity sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-create-class-features-plugin" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/plugin-syntax-typescript" "^7.28.6" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + "@babel/plugin-syntax-typescript" "^7.29.7" -"@babel/plugin-transform-unicode-escapes@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz" - integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== +"@babel/plugin-transform-unicode-escapes@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz" + integrity sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-unicode-property-regex@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz" - integrity sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A== +"@babel/plugin-transform-unicode-property-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz" + integrity sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.28.5" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-unicode-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz" - integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== +"@babel/plugin-transform-unicode-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz" + integrity sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-unicode-sets-regex@^7.28.6": - version "7.28.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz" - integrity sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q== +"@babel/plugin-transform-unicode-sets-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz" + integrity sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.28.5" - "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/preset-env@^7.20.2", "@babel/preset-env@^7.25.9": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz" - integrity sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w== - dependencies: - "@babel/compat-data" "^7.29.0" - "@babel/helper-compilation-targets" "^7.28.6" - "@babel/helper-plugin-utils" "^7.28.6" - "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.6" + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz" + integrity sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA== + dependencies: + "@babel/compat-data" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.29.7" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.29.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.29.7" + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array" "^7.29.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.29.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.29.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.28.6" - "@babel/plugin-syntax-import-attributes" "^7.28.6" + "@babel/plugin-syntax-import-assertions" "^7.29.7" + "@babel/plugin-syntax-import-attributes" "^7.29.7" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.27.1" - "@babel/plugin-transform-async-generator-functions" "^7.29.0" - "@babel/plugin-transform-async-to-generator" "^7.28.6" - "@babel/plugin-transform-block-scoped-functions" "^7.27.1" - "@babel/plugin-transform-block-scoping" "^7.28.6" - "@babel/plugin-transform-class-properties" "^7.28.6" - "@babel/plugin-transform-class-static-block" "^7.28.6" - "@babel/plugin-transform-classes" "^7.28.6" - "@babel/plugin-transform-computed-properties" "^7.28.6" - "@babel/plugin-transform-destructuring" "^7.28.5" - "@babel/plugin-transform-dotall-regex" "^7.28.6" - "@babel/plugin-transform-duplicate-keys" "^7.27.1" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.29.0" - "@babel/plugin-transform-dynamic-import" "^7.27.1" - "@babel/plugin-transform-explicit-resource-management" "^7.28.6" - "@babel/plugin-transform-exponentiation-operator" "^7.28.6" - "@babel/plugin-transform-export-namespace-from" "^7.27.1" - "@babel/plugin-transform-for-of" "^7.27.1" - "@babel/plugin-transform-function-name" "^7.27.1" - "@babel/plugin-transform-json-strings" "^7.28.6" - "@babel/plugin-transform-literals" "^7.27.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.28.6" - "@babel/plugin-transform-member-expression-literals" "^7.27.1" - "@babel/plugin-transform-modules-amd" "^7.27.1" - "@babel/plugin-transform-modules-commonjs" "^7.28.6" - "@babel/plugin-transform-modules-systemjs" "^7.29.0" - "@babel/plugin-transform-modules-umd" "^7.27.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.29.0" - "@babel/plugin-transform-new-target" "^7.27.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.28.6" - "@babel/plugin-transform-numeric-separator" "^7.28.6" - "@babel/plugin-transform-object-rest-spread" "^7.28.6" - "@babel/plugin-transform-object-super" "^7.27.1" - "@babel/plugin-transform-optional-catch-binding" "^7.28.6" - "@babel/plugin-transform-optional-chaining" "^7.28.6" - "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/plugin-transform-private-methods" "^7.28.6" - "@babel/plugin-transform-private-property-in-object" "^7.28.6" - "@babel/plugin-transform-property-literals" "^7.27.1" - "@babel/plugin-transform-regenerator" "^7.29.0" - "@babel/plugin-transform-regexp-modifiers" "^7.28.6" - "@babel/plugin-transform-reserved-words" "^7.27.1" - "@babel/plugin-transform-shorthand-properties" "^7.27.1" - "@babel/plugin-transform-spread" "^7.28.6" - "@babel/plugin-transform-sticky-regex" "^7.27.1" - "@babel/plugin-transform-template-literals" "^7.27.1" - "@babel/plugin-transform-typeof-symbol" "^7.27.1" - "@babel/plugin-transform-unicode-escapes" "^7.27.1" - "@babel/plugin-transform-unicode-property-regex" "^7.28.6" - "@babel/plugin-transform-unicode-regex" "^7.27.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.28.6" + "@babel/plugin-transform-arrow-functions" "^7.29.7" + "@babel/plugin-transform-async-generator-functions" "^7.29.7" + "@babel/plugin-transform-async-to-generator" "^7.29.7" + "@babel/plugin-transform-block-scoped-functions" "^7.29.7" + "@babel/plugin-transform-block-scoping" "^7.29.7" + "@babel/plugin-transform-class-properties" "^7.29.7" + "@babel/plugin-transform-class-static-block" "^7.29.7" + "@babel/plugin-transform-classes" "^7.29.7" + "@babel/plugin-transform-computed-properties" "^7.29.7" + "@babel/plugin-transform-destructuring" "^7.29.7" + "@babel/plugin-transform-dotall-regex" "^7.29.7" + "@babel/plugin-transform-duplicate-keys" "^7.29.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.29.7" + "@babel/plugin-transform-dynamic-import" "^7.29.7" + "@babel/plugin-transform-explicit-resource-management" "^7.29.7" + "@babel/plugin-transform-exponentiation-operator" "^7.29.7" + "@babel/plugin-transform-export-namespace-from" "^7.29.7" + "@babel/plugin-transform-for-of" "^7.29.7" + "@babel/plugin-transform-function-name" "^7.29.7" + "@babel/plugin-transform-json-strings" "^7.29.7" + "@babel/plugin-transform-literals" "^7.29.7" + "@babel/plugin-transform-logical-assignment-operators" "^7.29.7" + "@babel/plugin-transform-member-expression-literals" "^7.29.7" + "@babel/plugin-transform-modules-amd" "^7.29.7" + "@babel/plugin-transform-modules-commonjs" "^7.29.7" + "@babel/plugin-transform-modules-systemjs" "^7.29.7" + "@babel/plugin-transform-modules-umd" "^7.29.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.29.7" + "@babel/plugin-transform-new-target" "^7.29.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.29.7" + "@babel/plugin-transform-numeric-separator" "^7.29.7" + "@babel/plugin-transform-object-rest-spread" "^7.29.7" + "@babel/plugin-transform-object-super" "^7.29.7" + "@babel/plugin-transform-optional-catch-binding" "^7.29.7" + "@babel/plugin-transform-optional-chaining" "^7.29.7" + "@babel/plugin-transform-parameters" "^7.29.7" + "@babel/plugin-transform-private-methods" "^7.29.7" + "@babel/plugin-transform-private-property-in-object" "^7.29.7" + "@babel/plugin-transform-property-literals" "^7.29.7" + "@babel/plugin-transform-regenerator" "^7.29.7" + "@babel/plugin-transform-regexp-modifiers" "^7.29.7" + "@babel/plugin-transform-reserved-words" "^7.29.7" + "@babel/plugin-transform-shorthand-properties" "^7.29.7" + "@babel/plugin-transform-spread" "^7.29.7" + "@babel/plugin-transform-sticky-regex" "^7.29.7" + "@babel/plugin-transform-template-literals" "^7.29.7" + "@babel/plugin-transform-typeof-symbol" "^7.29.7" + "@babel/plugin-transform-unicode-escapes" "^7.29.7" + "@babel/plugin-transform-unicode-property-regex" "^7.29.7" + "@babel/plugin-transform-unicode-regex" "^7.29.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.29.7" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.15" babel-plugin-polyfill-corejs3 "^0.14.0" @@ -1018,109 +1034,82 @@ esutils "^2.0.2" "@babel/preset-react@^7.18.6", "@babel/preset-react@^7.25.9": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz" - integrity sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ== + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.29.7.tgz" + integrity sha512-C+PV1TFUPTmBQGoPBL8j2QmLpZ117YTCwxIZeJOM96GbYMFSc7/pOXU5lVykwnZxyTqQxRsvoRk6f2FktZgGHA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-transform-react-display-name" "^7.28.0" - "@babel/plugin-transform-react-jsx" "^7.27.1" - "@babel/plugin-transform-react-jsx-development" "^7.27.1" - "@babel/plugin-transform-react-pure-annotations" "^7.27.1" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + "@babel/plugin-transform-react-display-name" "^7.29.7" + "@babel/plugin-transform-react-jsx" "^7.29.7" + "@babel/plugin-transform-react-jsx-development" "^7.29.7" + "@babel/plugin-transform-react-pure-annotations" "^7.29.7" "@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.25.9": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz" - integrity sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-syntax-jsx" "^7.27.1" - "@babel/plugin-transform-modules-commonjs" "^7.27.1" - "@babel/plugin-transform-typescript" "^7.28.5" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.25.7", "@babel/runtime@^7.25.9", "@babel/runtime@^7.26.0", "@babel/runtime@^7.28.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.29.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e" - integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g== - -"@babel/template@^7.28.6": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.29.7.tgz" + integrity sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + "@babel/plugin-syntax-jsx" "^7.29.7" + "@babel/plugin-transform-modules-commonjs" "^7.29.7" + "@babel/plugin-transform-typescript" "^7.29.7" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.25.7", "@babel/runtime@^7.25.9", "@babel/runtime@^7.26.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.28.6" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz" - integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== - dependencies: - "@babel/code-frame" "^7.28.6" - "@babel/parser" "^7.28.6" - "@babel/types" "^7.28.6" - -"@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz" - integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== - dependencies: - "@babel/code-frame" "^7.29.0" - "@babel/generator" "^7.29.0" - "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.29.0" - "@babel/template" "^7.28.6" - "@babel/types" "^7.29.0" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz" + integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA== + +"@babel/template@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz" + integrity sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.28.0", "@babel/traverse@^7.29.7": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz" + integrity sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.7" + "@babel/helper-globals" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.7" debug "^4.3.1" -"@babel/types@^7.21.3", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.0", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.29.0", "@babel/types@^7.4.4": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz" - integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== +"@babel/types@^7.21.3", "@babel/types@^7.28.0", "@babel/types@^7.29.7", "@babel/types@^7.4.4": + version "7.29.7" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz" + integrity sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA== dependencies: - "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.28.5" + "@babel/helper-string-parser" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" "@braintree/sanitize-url@^7.1.1": version "7.1.2" resolved "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz" integrity sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA== -"@chevrotain/cst-dts-gen@11.1.1": - version "11.1.1" - resolved "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.1.1.tgz" - integrity sha512-fRHyv6/f542qQqiRGalrfJl/evD39mAvbJLCekPazhiextEatq1Jx1K/i9gSd5NNO0ds03ek0Cbo/4uVKmOBcw== - dependencies: - "@chevrotain/gast" "11.1.1" - "@chevrotain/types" "11.1.1" - lodash-es "4.17.23" - -"@chevrotain/gast@11.1.1": - version "11.1.1" - resolved "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.1.1.tgz" - integrity sha512-Ko/5vPEYy1vn5CbCjjvnSO4U7GgxyGm+dfUZZJIWTlQFkXkyym0jFYrWEU10hyCjrA7rQtiHtBr0EaZqvHFZvg== - dependencies: - "@chevrotain/types" "11.1.1" - lodash-es "4.17.23" - -"@chevrotain/regexp-to-ast@11.1.1": - version "11.1.1" - resolved "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.1.1.tgz" - integrity sha512-ctRw1OKSXkOrR8VTvOxrQ5USEc4sNrfwXHa1NuTcR7wre4YbjPcKw+82C2uylg/TEwFRgwLmbhlln4qkmDyteg== - -"@chevrotain/types@11.1.1": - version "11.1.1" - resolved "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.1.tgz" - integrity sha512-wb2ToxG8LkgPYnKe9FH8oGn3TMCBdnwiuNC5l5y+CtlaVRbCytU0kbVsk6CGrqTL4ZN4ksJa0TXOYbxpbthtqw== - -"@chevrotain/utils@11.1.1": - version "11.1.1" - resolved "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.1.1.tgz" - integrity sha512-71eTYMzYXYSFPrbg/ZwftSaSDld7UYlS8OQa3lNnn9jzNtpFbaReRRyghzqS7rI3CDaorqpPJJcXGHK+FE1TVQ== +"@chevrotain/types@~11.1.1": + version "11.1.2" + resolved "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz" + integrity sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw== "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cspell/cspell-bundled-dicts@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-10.0.0.tgz#44c00f96b919b04d4385c41c9574e5bd22caae7f" - integrity sha512-ci410HEkng2582oOjlRHQtlGXwh+rUC/mVcN9dObLHpKhvPgzn2S6vT56pARstxxZpcCUG/oLhn3dCqdJlVzmA== +"@cspell/cspell-bundled-dicts@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-10.0.1.tgz" + integrity sha512-WvkSDNX4Uyyj/ZgbPO6L38iFNMfK1EqsH1FteRiI2qLz6QZMXRFrIt12OqiWIplzZDDaVpBH9FCJOPJll0fjCQ== dependencies: "@cspell/dict-ada" "^4.1.1" "@cspell/dict-al" "^1.1.1" @@ -1182,373 +1171,373 @@ "@cspell/dict-vue" "^3.0.5" "@cspell/dict-zig" "^1.0.0" -"@cspell/cspell-json-reporter@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/cspell-json-reporter/-/cspell-json-reporter-10.0.0.tgz#0169f87dd25952762f2ee99797d9417d5aef967c" - integrity sha512-hq5dui2ngYMZKbBauX7K1tkqlu81sX/uaCO49ZJLPjeZsE1auZLtHehDLfAr/ZXoj/dLYeQMSKiaJyE+qLVPHA== +"@cspell/cspell-json-reporter@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-10.0.1.tgz" + integrity sha512-/nes1RGILec3WCBcoMOd0byNTBtnJuPaVz/+ZzqYkLtY7x58VMcBG5kyP6hPyN8cIwjRADE/SR43gwdXuqk/FA== dependencies: - "@cspell/cspell-types" "10.0.0" + "@cspell/cspell-types" "10.0.1" -"@cspell/cspell-performance-monitor@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/cspell-performance-monitor/-/cspell-performance-monitor-10.0.0.tgz#ca27f9d07c86e00b6bfdf7407103ce77b4bf412e" - integrity sha512-2vMh2pLt2dg/ArYvWjMP4v9HCm0pRhONsEJyc8oHdZyOYvX7trixX894I0M39+VBf3yWtPCEgYRh1UDXNIZRig== +"@cspell/cspell-performance-monitor@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/cspell-performance-monitor/-/cspell-performance-monitor-10.0.1.tgz" + integrity sha512-9tVcHXwRnbazUv4WSG0h3MqV4+LgmLNgSALAQUflPPW0EMxTf7C4Dmv9cgxJyCEQrdnVKCr58nPPaahhz9LJUg== -"@cspell/cspell-pipe@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-10.0.0.tgz#1b3a659f783eab1cf659ed7b50c0125db6b604ed" - integrity sha512-qcgHhQvtEX8LSwIVsWrdUgiGim52lN3jT+ghlkdp72v+nBcGKsS2frEKTmbGLug+xcqppkzs6Q6VmsFp1MGtfA== +"@cspell/cspell-pipe@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-10.0.1.tgz" + integrity sha512-HPeXMD9AZ3V/qPkvQaPcak+C7cJ2z7JTHN8smd6J8L2aThLRky2cHc2OyeaHPSHB7WA47b4z2n5u5nawZhv5VQ== -"@cspell/cspell-resolver@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/cspell-resolver/-/cspell-resolver-10.0.0.tgz#c172ccfde1be4adfbbe7adc5c9f568934fbcb33b" - integrity sha512-8H+IUDB7SmrpcRugQ5f55qG81ZShk6nQRk+natLz41TEY98D8/LCmjHEkh/vhDPph9pVJmNUp7JcM2E1UHEa2g== +"@cspell/cspell-resolver@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-10.0.1.tgz" + integrity sha512-PIzkZHD1fGUQx1XteK2d1iQ0Mzq/maYcoB4jkvAiiR6WqP3MWYNKFdI9z+R5pOq5KgMfW+5Ig1q0oSR6h8irlA== dependencies: global-directory "^5.0.0" -"@cspell/cspell-service-bus@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/cspell-service-bus/-/cspell-service-bus-10.0.0.tgz#215462b9c4f3b5127cd9064e8ddbf1a1c2f3a028" - integrity sha512-V7eigqg/TOoKwNK4Q18wr9KGxA8U5SFcoWVS8RyAxv4mQ+yNKHhvHEbRBifjPbQDer66afOrclb2UbqkIy2SOw== +"@cspell/cspell-service-bus@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-10.0.1.tgz" + integrity sha512-y6NcIGP2IdXaBL4PVH8vxsr7K27wzz3Ech87UtUtrDSXAiVEOvXgAIknEOUVp59rTlUE8Rn4IRURC6f/hgMyfw== -"@cspell/cspell-types@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-10.0.0.tgz#c5391f9ca8bf9e4e5362ba67fe223d34694e34b3" - integrity sha512-IQA++Idqb8fZzkCbHq3+T+9yG9WpeaBxomOrG2KcR/Pj0CgnovzuApYKL2cc35UWLePboKinMeqEPiweFpHVug== +"@cspell/cspell-types@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-10.0.1.tgz" + integrity sha512-kLgLShnWADDVreKC63pBrWkcvxgZzFIfO34Jhx/SWfuOIA3cD8AXT+HjyuLfoGJ7mUb58hv2kUziKzEy4INb1w== -"@cspell/cspell-worker@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/cspell-worker/-/cspell-worker-10.0.0.tgz#b691937786d0df8608b4f7b994020a3556c7df41" - integrity sha512-V5bjMldNksilnja3fu8muQmkW5/guyua1yNVOhoE2r7othSvjuDlGMl8g2bQSrWjp+UXu0dP/BEZ6JC/IfNwTA== +"@cspell/cspell-worker@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/cspell-worker/-/cspell-worker-10.0.1.tgz" + integrity sha512-L2bJerfuYOls2wEknm8FmynLtj/G7O4UqX9I/HznRggEW6i2yZIxagDetpVDNowpyavNHJ3SJtUFiyMiZc16Sw== dependencies: - cspell-lib "10.0.0" + cspell-lib "10.0.1" "@cspell/dict-ada@^4.1.1": version "4.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-ada/-/dict-ada-4.1.1.tgz#78c0c9916e8c96cd38908c02b0c4979f9622c650" + resolved "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.1.1.tgz" integrity sha512-E+0YW9RhZod/9Qy2gxfNZiHJjCYFlCdI69br1eviQQWB8yOTJX0JHXLs79kOYhSW0kINPVUdvddEBe6Lu6CjGQ== "@cspell/dict-al@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-al/-/dict-al-1.1.1.tgz#d6581e7801daa0f4e7512d3431e7f00c1e7d53e1" + resolved "https://registry.npmjs.org/@cspell/dict-al/-/dict-al-1.1.1.tgz" integrity sha512-sD8GCaZetgQL4+MaJLXqbzWcRjfKVp8x+px3HuCaaiATAAtvjwUQ5/Iubiqwfd1boIh2Y1/3EgM3TLQ7Q8e0wQ== "@cspell/dict-aws@^4.0.17": version "4.0.17" - resolved "https://registry.yarnpkg.com/@cspell/dict-aws/-/dict-aws-4.0.17.tgz#73dba92ce69868babe114d6e436a5e4dd45b6c6c" + resolved "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.17.tgz" integrity sha512-ORcblTWcdlGjIbWrgKF+8CNEBQiLVKdUOFoTn0KPNkAYnFcdPP0muT4892h7H4Xafh3j72wqB4/loQ6Nti9E/w== "@cspell/dict-bash@^4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-bash/-/dict-bash-4.2.2.tgz#44250d9f64067cf20a8d76dc885963c6902c6e21" - integrity sha512-kyWbwtX3TsCf5l49gGQIZkRLaB/P8g73GDRm41Zu8Mv51kjl2H7Au0TsEvHv7jzcsRLS6aUYaZv6Zsvk1fOz+Q== + version "4.2.3" + resolved "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.3.tgz" + integrity sha512-ljUZoKHbDqw5Sx0qpL2qTUlmkmr+vhZH/sCNrNaBZKTbdgiswErSnIF1jRbGmEitJNxHRHWsuZyVgnTGfVO1Yw== dependencies: - "@cspell/dict-shell" "1.1.2" + "@cspell/dict-shell" "1.2.0" "@cspell/dict-companies@^3.2.11": version "3.2.11" - resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-3.2.11.tgz#491f9e199826a253b874cde8c28ef623e47f3865" + resolved "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.11.tgz" integrity sha512-0cmafbcz2pTHXLd59eLR1gvDvN6aWAOM0+cIL4LLF9GX9yB2iKDNrKsvs4tJRqutoaTdwNFBbV0FYv+6iCtebQ== "@cspell/dict-cpp@^7.0.2": version "7.0.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-cpp/-/dict-cpp-7.0.2.tgz#bbedeb669e56956f2da7e0977a3a1ad4dc660f83" + resolved "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-7.0.2.tgz" integrity sha512-dfbeERiVNeqmo/npivdR6rDiBCqZi3QtjH2Z0HFcXwpdj6i97dX1xaKyK2GUsO/p4u1TOv63Dmj5Vm48haDpuA== "@cspell/dict-cryptocurrencies@^5.0.5": version "5.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.5.tgz#843a6ac45216227f5436c442a8683c1571e57160" + resolved "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.5.tgz" integrity sha512-R68hYYF/rtlE6T/dsObStzN5QZw+0aQBinAXuWCVqwdS7YZo0X33vGMfChkHaiCo3Z2+bkegqHlqxZF4TD3rUA== "@cspell/dict-csharp@^4.0.8": version "4.0.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-csharp/-/dict-csharp-4.0.8.tgz#27f6d5873f4dde77c03c78bb7d3c51bc8d8d78c1" + resolved "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.8.tgz" integrity sha512-qmk45pKFHSxckl5mSlbHxmDitSsGMlk/XzFgt7emeTJWLNSTUK//MbYAkBNRtfzB4uD7pAFiKgpKgtJrTMRnrQ== "@cspell/dict-css@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-css/-/dict-css-4.1.1.tgz#4e34bd6e49d5d25c2d26a5689937455c10f77e65" - integrity sha512-y/Vgo6qY08e1t9OqR56qjoFLBCpi4QfWMf2qzD1l9omRZwvSMQGRPz4x0bxkkkU4oocMAeztjzCsmLew//c/8w== + version "4.1.2" + resolved "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.1.2.tgz" + integrity sha512-+ylGoKdwZ2sVOCOnU2Eq5wDZx+RaVX3HoKyNHGGsFvhSw6IidQ6tH/mAPKBDofViHJoWCPNlklE0lTr6MDG3QA== "@cspell/dict-dart@^2.3.2": version "2.3.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-dart/-/dict-dart-2.3.2.tgz#aae782dcf6c673857945b9bbe03beeaa79649222" + resolved "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.2.tgz" integrity sha512-sUiLW56t9gfZcu8iR/5EUg+KYyRD83Cjl3yjDEA2ApVuJvK1HhX+vn4e4k4YfjpUQMag8XO2AaRhARE09+/rqw== -"@cspell/dict-data-science@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@cspell/dict-data-science/-/dict-data-science-2.0.13.tgz#234e399bd7af8cd6c1be6054be7b65aed6974479" - integrity sha512-l1HMEhBJkPmw4I2YGVu2eBSKM89K9pVF+N6qIr5Uo5H3O979jVodtuwP8I7LyPrJnC6nz28oxeGRCLh9xC5CVA== +"@cspell/dict-data-science@^2.0.13", "@cspell/dict-data-science@^2.0.14": + version "2.0.14" + resolved "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.14.tgz" + integrity sha512-jl6Ds4u5u5JT+yY30pWQpAbdCHfy3lCcNkLbpL/AZKoUaLEoXbaYsps9xQtvD7DyaiXxiLZkdH2yHHXtoFtZyg== "@cspell/dict-django@^4.1.6": version "4.1.6" - resolved "https://registry.yarnpkg.com/@cspell/dict-django/-/dict-django-4.1.6.tgz#a92408ba8971ca3df3c602b9e3750a14be69a8f6" + resolved "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.6.tgz" integrity sha512-SdbSFDGy9ulETqNz15oWv2+kpWLlk8DJYd573xhIkeRdcXOjskRuxjSZPKfW7O3NxN/KEf3gm3IevVOiNuFS+w== "@cspell/dict-docker@^1.1.17": version "1.1.17" - resolved "https://registry.yarnpkg.com/@cspell/dict-docker/-/dict-docker-1.1.17.tgz#8674b3613dfa9c7d2922f6ec29ff845cb16e6650" + resolved "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.17.tgz" integrity sha512-OcnVTIpHIYYKhztNTyK8ShAnXTfnqs43hVH6p0py0wlcwRIXe5uj4f12n7zPf2CeBI7JAlPjEsV0Rlf4hbz/xQ== "@cspell/dict-dotnet@^5.0.13": version "5.0.13" - resolved "https://registry.yarnpkg.com/@cspell/dict-dotnet/-/dict-dotnet-5.0.13.tgz#c75b4cdba79462398c4098739e699ea4144c85e5" + resolved "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.13.tgz" integrity sha512-xPp7jMnFpOri7tzmqmm/dXMolXz1t2bhNqxYkOyMqXhvs08oc7BFs+EsbDY0X7hqiISgeFZGNqn0dOCr+ncPYw== "@cspell/dict-elixir@^4.0.8": version "4.0.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-elixir/-/dict-elixir-4.0.8.tgz#c1b2a30d0fc654a001f718f196beb60c01e0e1f6" + resolved "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.8.tgz" integrity sha512-CyfphrbMyl4Ms55Vzuj+mNmd693HjBFr9hvU+B2YbFEZprE5AG+EXLYTMRWrXbpds4AuZcvN3deM2XVB80BN/Q== "@cspell/dict-en-common-misspellings@^2.1.12": version "2.1.12" - resolved "https://registry.yarnpkg.com/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.12.tgz#5e15fdbdd65d6624518cb2812d0cc2c445faada8" + resolved "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.12.tgz" integrity sha512-14Eu6QGqyksqOd4fYPuRb58lK1Va7FQK9XxFsRKnZU8LhL3N+kj7YKDW+7aIaAN/0WGEqslGP6lGbQzNti8Akw== "@cspell/dict-en-gb-mit@^3.1.22": - version "3.1.22" - resolved "https://registry.yarnpkg.com/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.22.tgz#ffce49686571eb543f18fc715213cb5f1e28f6ac" - integrity sha512-xE5Vg6gGdMkZ1Ep6z9SJMMioGkkT1GbxS5Mm0U3Ey1/H68P0G7cJcyiVr1CARxFbLqKE4QUpoV1o6jz1Z5Yl9Q== + version "3.1.24" + resolved "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.24.tgz" + integrity sha512-Oowb/Uzkh7OmDRdCcETzMc9imEb4IpLlHJXoYjX8A8DS2X/54gqSjI915JFB8hKtFjBko5OM0BLQ+6cZhFEMmQ== "@cspell/dict-en_us@^4.4.33": - version "4.4.33" - resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-4.4.33.tgz#dc53fd409dec9360134c33581793abf30cfc8ead" - integrity sha512-zWftVqfUStDA37wO1ZNDN1qMJOfcxELa8ucHW8W8wBAZY3TK5Nb6deLogCK/IJi/Qljf30dwwuqqv84Qqle9Tw== + version "4.4.35" + resolved "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.35.tgz" + integrity sha512-xWpxBCc/FzzMMo/A+0qwARVaIIhR0Ql8yhhv4rvsvg+GfQF+LG9yzg2GwTM5N2rjvzmM3nKuR9zxFZq2I6fJSg== "@cspell/dict-filetypes@^3.0.18": version "3.0.18" - resolved "https://registry.yarnpkg.com/@cspell/dict-filetypes/-/dict-filetypes-3.0.18.tgz#b798a5321d8a4a254a9998920db4b91491e51ebf" + resolved "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.18.tgz" integrity sha512-yU7RKD/x1IWmDLzWeiItMwgV+6bUcU/af23uS0+uGiFUbsY1qWV/D4rxlAAO6Z7no3J2z8aZOkYIOvUrJq0Rcw== "@cspell/dict-flutter@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-flutter/-/dict-flutter-1.1.1.tgz#fab57cf189a8012e870d2e1f21526b18345038d7" + resolved "https://registry.npmjs.org/@cspell/dict-flutter/-/dict-flutter-1.1.1.tgz" integrity sha512-UlOzRcH2tNbFhZmHJN48Za/2/MEdRHl2BMkCWZBYs+30b91mWvBfzaN4IJQU7dUZtowKayVIF9FzvLZtZokc5A== "@cspell/dict-fonts@^4.0.6": version "4.0.6" - resolved "https://registry.yarnpkg.com/@cspell/dict-fonts/-/dict-fonts-4.0.6.tgz#efdda213b4c876053aea51bafc7cd882c6379563" + resolved "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.6.tgz" integrity sha512-aR/0csY01dNb0A1tw/UmN9rKgHruUxsYsvXu6YlSBJFu60s26SKr/k1o4LavpHTQ+lznlYMqAvuxGkE4Flliqw== "@cspell/dict-fsharp@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-fsharp/-/dict-fsharp-1.1.1.tgz#46414a8177b1c3373f1edb156df446088147cc22" + resolved "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.1.1.tgz" integrity sha512-imhs0u87wEA4/cYjgzS0tAyaJpwG7vwtC8UyMFbwpmtw+/bgss+osNfyqhYRyS/ehVCWL17Ewx2UPkexjKyaBA== "@cspell/dict-fullstack@^3.2.9": version "3.2.9" - resolved "https://registry.yarnpkg.com/@cspell/dict-fullstack/-/dict-fullstack-3.2.9.tgz#e8baf9382b6006921684c9408dcad2c1de5ae4bc" + resolved "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.9.tgz" integrity sha512-diZX+usW5aZ4/b2T0QM/H/Wl9aNMbdODa1Jq0ReBr/jazmNeWjd+PyqeVgzd1joEaHY+SAnjrf/i9CwKd2ZtWQ== "@cspell/dict-gaming-terms@^1.1.2": version "1.1.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.2.tgz#459aa470b43eacbd3cbf7b32bd5bbb259cb78812" + resolved "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.2.tgz" integrity sha512-9XnOvaoTBscq0xuD6KTEIkk9hhdfBkkvJAIsvw3JMcnp1214OCGW8+kako5RqQ2vTZR3Tnf3pc57o7VgkM0q1Q== "@cspell/dict-git@^3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-git/-/dict-git-3.1.0.tgz#7ac48114425c74e0a1c00f154138cf81b04f250b" + resolved "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.1.0.tgz" integrity sha512-KEt9zGkxqGy2q1nwH4CbyqTSv5nadpn8BAlDnzlRcnL0Xb3LX9xTgSGShKvzb0bw35lHoYyLWN2ZKAqbC4pgGQ== "@cspell/dict-golang@^6.0.26": version "6.0.26" - resolved "https://registry.yarnpkg.com/@cspell/dict-golang/-/dict-golang-6.0.26.tgz#8d0a6f09ade1c489a92b594475bba2b6020b6d28" + resolved "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.26.tgz" integrity sha512-YKA7Xm5KeOd14v5SQ4ll6afe9VSy3a2DWM7L9uBq4u3lXToRBQ1W5PRa+/Q9udd+DTURyVVnQ+7b9cnOlNxaRg== "@cspell/dict-google@^1.0.9": version "1.0.9" - resolved "https://registry.yarnpkg.com/@cspell/dict-google/-/dict-google-1.0.9.tgz#5bf72aecf2ae8289bd2427245ca13ee77b39399c" + resolved "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.9.tgz" integrity sha512-biL65POqialY0i4g6crj7pR6JnBkbsPovB2WDYkj3H4TuC/QXv7Pu5pdPxeUJA6TSCHI7T5twsO4VSVyRxD9CA== "@cspell/dict-haskell@^4.0.6": version "4.0.6" - resolved "https://registry.yarnpkg.com/@cspell/dict-haskell/-/dict-haskell-4.0.6.tgz#881436f944a6901cff8fab1af776277ca96f1b8c" + resolved "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.6.tgz" integrity sha512-ib8SA5qgftExpYNjWhpYIgvDsZ/0wvKKxSP+kuSkkak520iPvTJumEpIE+qPcmJQo4NzdKMN8nEfaeci4OcFAQ== "@cspell/dict-html-symbol-entities@^4.0.5": version "4.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.5.tgz#cbdd8c133c7d649d32e10f48b58bd4a9304b5cb6" + resolved "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.5.tgz" integrity sha512-429alTD4cE0FIwpMucvSN35Ld87HCyuM8mF731KU5Rm4Je2SG6hmVx7nkBsLyrmH3sQukTcr1GaiZsiEg8svPA== "@cspell/dict-html@^4.0.15": version "4.0.15" - resolved "https://registry.yarnpkg.com/@cspell/dict-html/-/dict-html-4.0.15.tgz#4ccd850cff30cc65b2eb372d8b96ec9a55afd177" + resolved "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.15.tgz" integrity sha512-GJYnYKoD9fmo2OI0aySEGZOjThnx3upSUvV7mmqUu8oG+mGgzqm82P/f7OqsuvTaInZZwZbo+PwJQd/yHcyFIw== "@cspell/dict-java@^5.0.12": version "5.0.12" - resolved "https://registry.yarnpkg.com/@cspell/dict-java/-/dict-java-5.0.12.tgz#869ab27a972c7c0854a7a4854b770c4cf941fb8b" + resolved "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.12.tgz" integrity sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A== "@cspell/dict-julia@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-julia/-/dict-julia-1.1.1.tgz#78601c0e9397c2cba1aecfcc01dcc0654c5d2b9a" + resolved "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.1.1.tgz" integrity sha512-WylJR9TQ2cgwd5BWEOfdO3zvDB+L7kYFm0I9u0s9jKHWQ6yKmfKeMjU9oXxTBxIufhCXm92SKwwVNAC7gjv+yA== "@cspell/dict-k8s@^1.0.12": version "1.0.12" - resolved "https://registry.yarnpkg.com/@cspell/dict-k8s/-/dict-k8s-1.0.12.tgz#f4dd4e780fd698af8b9e3ac9106d10c35a96df18" + resolved "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.12.tgz" integrity sha512-2LcllTWgaTfYC7DmkMPOn9GsBWsA4DZdlun4po8s2ysTP7CPEnZc1ZfK6pZ2eI4TsZemlUQQ+NZxMe9/QutQxg== "@cspell/dict-kotlin@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-kotlin/-/dict-kotlin-1.1.1.tgz#830d7b3d33685c0998ef5b922b0d7779f6669706" + resolved "https://registry.npmjs.org/@cspell/dict-kotlin/-/dict-kotlin-1.1.1.tgz" integrity sha512-J3NzzfgmxRvEeOe3qUXnSJQCd38i/dpF9/t3quuWh6gXM+krsAXP75dY1CzDmS8mrJAlBdVBeAW5eAZTD8g86Q== "@cspell/dict-latex@^5.1.0": version "5.1.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-latex/-/dict-latex-5.1.0.tgz#c607cfb349ea73378ab5ae79592d389a3cc47c3e" + resolved "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-5.1.0.tgz" integrity sha512-qxT4guhysyBt0gzoliXYEBYinkAdEtR2M7goRaUH0a7ltCsoqqAeEV8aXYRIdZGcV77gYSobvu3jJL038tlPAw== "@cspell/dict-lorem-ipsum@^4.0.5": version "4.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.5.tgz#0321cef57b09387ea3dbae1ecd52123da9ec810f" + resolved "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.5.tgz" integrity sha512-9a4TJYRcPWPBKkQAJ/whCu4uCAEgv/O2xAaZEI0n4y1/l18Yyx8pBKoIX5QuVXjjmKEkK7hi5SxyIsH7pFEK9Q== "@cspell/dict-lua@^4.0.8": version "4.0.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-lua/-/dict-lua-4.0.8.tgz#0bb1683212cdac2acb60483bd5c8970d62a41972" + resolved "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.8.tgz" integrity sha512-N4PkgNDMu9JVsRu7JBS/3E/dvfItRgk9w5ga2dKq+JupP2Y3lojNaAVFhXISh4Y0a6qXDn2clA6nvnavQ/jjLA== "@cspell/dict-makefile@^1.0.5": version "1.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-makefile/-/dict-makefile-1.0.5.tgz#fe6e7df2360ff694ef41c90a0d4b422e81f560ef" + resolved "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.5.tgz" integrity sha512-4vrVt7bGiK8Rx98tfRbYo42Xo2IstJkAF4tLLDMNQLkQ86msDlYSKG1ZCk8Abg+EdNcFAjNhXIiNO+w4KflGAQ== "@cspell/dict-markdown@^2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@cspell/dict-markdown/-/dict-markdown-2.0.16.tgz#2e3a80ed2e3953ee5e3429660bbe550b87ae260a" - integrity sha512-976RRqKv6cwhrxdFCQP2DdnBVB86BF57oQtPHy4Zbf4jF/i2Oy29MCrxirnOBalS1W6KQeto7NdfDXRAwkK4PQ== + version "2.0.17" + resolved "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.17.tgz" + integrity sha512-H8bAxih6U8NOnSPL7R8My+tqjaB4tmnJTjERuz4zYqmf+cH+5xshX3UVgKlwWFcyjsYfv/zEDuRdMctQv1q6HQ== "@cspell/dict-monkeyc@^1.0.12": version "1.0.12" - resolved "https://registry.yarnpkg.com/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.12.tgz#76d4127d19d861acfb047a24fdc841b781416ef4" + resolved "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.12.tgz" integrity sha512-MN7Vs11TdP5mbdNFQP5x2Ac8zOBm97ARg6zM5Sb53YQt/eMvXOMvrep7+/+8NJXs0jkp70bBzjqU4APcqBFNAw== "@cspell/dict-node@^5.0.9": version "5.0.9" - resolved "https://registry.yarnpkg.com/@cspell/dict-node/-/dict-node-5.0.9.tgz#ca894e62b85deaf2f55e9d9c86fdbb260ba923eb" + resolved "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.9.tgz" integrity sha512-hO+ga+uYZ/WA4OtiMEyKt5rDUlUyu3nXMf8KVEeqq2msYvAPdldKBGH7lGONg6R/rPhv53Rb+0Y1SLdoK1+7wQ== "@cspell/dict-npm@^5.2.38": - version "5.2.38" - resolved "https://registry.yarnpkg.com/@cspell/dict-npm/-/dict-npm-5.2.38.tgz#ae9a1fec024fb83a523acfd71a7358a3d64a157a" - integrity sha512-21ucGRPYYhr91C2cDBoMPTrcIOStQv33xOqJB0JLoC5LAs2Sfj9EoPGhGb+gIFVHz6Ia7JQWE2SJsOVFJD1wmg== + version "5.2.41" + resolved "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.41.tgz" + integrity sha512-To3xsfRmMBYVXtWVEdUgV35M9a/JZ54dSuoY6m6D3uHKKL3I326Wmy4xifZ3PU8MQaWhyEH7zbIcUEtKwTQMcA== "@cspell/dict-php@^4.1.1": version "4.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-php/-/dict-php-4.1.1.tgz#39117cde87706f843a0476c56b807c16d71a9e4b" + resolved "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.1.1.tgz" integrity sha512-EXelI+4AftmdIGtA8HL8kr4WlUE11OqCSVlnIgZekmTkEGSZdYnkFdiJ5IANSALtlQ1mghKjz+OFqVs6yowgWA== "@cspell/dict-powershell@^5.0.15": version "5.0.15" - resolved "https://registry.yarnpkg.com/@cspell/dict-powershell/-/dict-powershell-5.0.15.tgz#4ad8b6a741c96508f7b5acbcda2a15978be351c6" + resolved "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.15.tgz" integrity sha512-l4S5PAcvCFcVDMJShrYD0X6Huv9dcsQPlsVsBGbH38wvuN7gS7+GxZFAjTNxDmTY1wrNi1cCatSg6Pu2BW4rgg== "@cspell/dict-public-licenses@^2.0.16": version "2.0.16" - resolved "https://registry.yarnpkg.com/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.16.tgz#8eb3c467c24526460543a24edf55a979a4f34f39" + resolved "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.16.tgz" integrity sha512-EQRrPvEOmwhwWezV+W7LjXbIBjiy6y/shrET6Qcpnk3XANTzfvWflf9PnJ5kId/oKWvihFy0za0AV1JHd03pSQ== "@cspell/dict-python@^4.2.26": - version "4.2.26" - resolved "https://registry.yarnpkg.com/@cspell/dict-python/-/dict-python-4.2.26.tgz#d724f3f75115dd5a83b13ca80695da483e6c6f92" - integrity sha512-hbjN6BjlSgZOG2dA2DtvYNGBM5Aq0i0dHaZjMOI9K/9vRicVvKbcCiBSSrR3b+jwjhQL5ff7HwG5xFaaci0GQA== + version "4.2.27" + resolved "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.27.tgz" + integrity sha512-Rj6xQgYS4X6ienjgAZF+njA0GRY4oSPouJWv0vfikCTn6EWlfk0V6Dy1HP3Migj1O+IC2NmespgVq+BZNSp8OA== dependencies: - "@cspell/dict-data-science" "^2.0.13" + "@cspell/dict-data-science" "^2.0.14" "@cspell/dict-r@^2.1.1": version "2.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-r/-/dict-r-2.1.1.tgz#ace8d66799cae4148411bb6483d9c8a8a3c8a50f" + resolved "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.1.1.tgz" integrity sha512-71Ka+yKfG4ZHEMEmDxc6+blFkeTTvgKbKAbwiwQAuKl3zpqs1Y0vUtwW2N4b3LgmSPhV3ODVY0y4m5ofqDuKMw== "@cspell/dict-ruby@^5.1.1": version "5.1.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-ruby/-/dict-ruby-5.1.1.tgz#73c5c48cb20402b1ba5589b08c904b11e2f12ccb" + resolved "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.1.1.tgz" integrity sha512-LHrp84oEV6q1ZxPPyj4z+FdKyq1XAKYPtmGptrd+uwHbrF/Ns5+fy6gtSi7pS+uc0zk3JdO9w/tPK+8N1/7WUA== "@cspell/dict-rust@^4.1.2": version "4.1.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-rust/-/dict-rust-4.1.2.tgz#6a151e72dc3be916c040111bba7358401ba57e15" + resolved "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.1.2.tgz" integrity sha512-O1FHrumYcO+HZti3dHfBPUdnDFkI+nbYK3pxYmiM1sr+G0ebOd6qchmswS0Wsc6ZdEVNiPYJY/gZQR6jfW3uOg== "@cspell/dict-scala@^5.0.9": version "5.0.9" - resolved "https://registry.yarnpkg.com/@cspell/dict-scala/-/dict-scala-5.0.9.tgz#181d6b9cad0596bec2f8df198a79576f97112b6e" + resolved "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.9.tgz" integrity sha512-AjVcVAELgllybr1zk93CJ5wSUNu/Zb5kIubymR/GAYkMyBdYFCZ3Zbwn4Zz8GJlFFAbazABGOu0JPVbeY59vGg== -"@cspell/dict-shell@1.1.2", "@cspell/dict-shell@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-shell/-/dict-shell-1.1.2.tgz#33634372214d3a3466b409e94392f6aaee6a0e9b" - integrity sha512-WqOUvnwcHK1X61wAfwyXq04cn7KYyskg90j4lLg3sGGKMW9Sq13hs91pqrjC44Q+lQLgCobrTkMDw9Wyl9nRFA== +"@cspell/dict-shell@1.2.0", "@cspell/dict-shell@^1.1.2": + version "1.2.0" + resolved "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.2.0.tgz" + integrity sha512-PVctvT22lJ49niMiakO8xieY7ELCAzjSqhejWR7bAMb5AZ9F4WDEs+XdGMnoVHWeXq7K5rcepLPmEJb+37zzIw== "@cspell/dict-software-terms@^5.2.2": version "5.2.2" - resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-5.2.2.tgz#8e0c61fe3305e2d5ffb89101c4f639ada7af3530" + resolved "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.2.2.tgz" integrity sha512-0CaYd6TAsKtEoA7tNswm1iptEblTzEe3UG8beG2cpSTHk7afWIVMtJLgXDv0f/Li67Lf3Z1Jf3JeXR7GsJ2TRw== "@cspell/dict-sql@^2.2.1": version "2.2.1" - resolved "https://registry.yarnpkg.com/@cspell/dict-sql/-/dict-sql-2.2.1.tgz#7dd2f1da1c32d3837c98986ab65727bb94332597" + resolved "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.1.tgz" integrity sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg== "@cspell/dict-svelte@^1.0.7": version "1.0.7" - resolved "https://registry.yarnpkg.com/@cspell/dict-svelte/-/dict-svelte-1.0.7.tgz#c2d9edabc34052b56f6b19754672d392caa315e0" + resolved "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.7.tgz" integrity sha512-hGZsGqP0WdzKkdpeVLBivRuSNzOTvN036EBmpOwxH+FTY2DuUH7ecW+cSaMwOgmq5JFSdTcbTNFlNC8HN8lhaQ== "@cspell/dict-swift@^2.0.6": version "2.0.6" - resolved "https://registry.yarnpkg.com/@cspell/dict-swift/-/dict-swift-2.0.6.tgz#bd2f7684b6fbf287fe82c4ebc0736bb38170bd2c" + resolved "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.6.tgz" integrity sha512-PnpNbrIbex2aqU1kMgwEKvCzgbkHtj3dlFLPMqW1vSniop7YxaDTtvTUO4zA++ugYAEL+UK8vYrBwDPTjjvSnA== "@cspell/dict-terraform@^1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-terraform/-/dict-terraform-1.1.3.tgz#ccd45bd1e4a4ae69cdf8f8649a881c63b7295c66" + resolved "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.1.3.tgz" integrity sha512-gr6wxCydwSFyyBKhBA2xkENXtVFToheqYYGFvlMZXWjviynXmh+NK/JTvTCk/VHk3+lzbO9EEQKee6VjrAUSbA== "@cspell/dict-typescript@^3.2.3": version "3.2.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz#cf90e8248d6e5749daaa49bff460060b77d12301" + resolved "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz" integrity sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg== "@cspell/dict-vue@^3.0.5": version "3.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-vue/-/dict-vue-3.0.5.tgz#e915b6a004d0352f5c27a2e4583c42dba62b6ce0" + resolved "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.5.tgz" integrity sha512-Mqutb8jbM+kIcywuPQCCaK5qQHTdaByoEO2J9LKFy3sqAdiBogNkrplqUK0HyyRFgCfbJUgjz3N85iCMcWH0JA== "@cspell/dict-zig@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dict-zig/-/dict-zig-1.0.0.tgz#f75fef19f2fdad6f5bc4d02b95b8bec824e82ab9" + resolved "https://registry.npmjs.org/@cspell/dict-zig/-/dict-zig-1.0.0.tgz" integrity sha512-XibBIxBlVosU06+M6uHWkFeT0/pW5WajDRYdXG2CgHnq85b0TI/Ks0FuBJykmsgi2CAD3Qtx8UHFEtl/DSFnAQ== -"@cspell/dynamic-import@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/dynamic-import/-/dynamic-import-10.0.0.tgz#11971636fb577482bd214637321bcde66c044ba9" - integrity sha512-fMqu/5Ma1Q5ZCR/Par+Q4pvaTKmx5pKZzQmkwld2hNounVdk2OaIPM9MzpNn6I1mLk5J+wTnIZmfcWNAzNP9aQ== +"@cspell/dynamic-import@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-10.0.1.tgz" + integrity sha512-mP1gdq00aIcH8HxNMqnH11X6BKxLcneDtFgl/ecjIKnaGKwi44m8AndP5Kr4ODaYdl8UUw9O3dJh7KaQXnLHZQ== dependencies: - "@cspell/url" "10.0.0" + "@cspell/url" "10.0.1" import-meta-resolve "^4.2.0" -"@cspell/filetypes@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/filetypes/-/filetypes-10.0.0.tgz#a94070517b2926643900a9d5ef3fa178129cd87e" - integrity sha512-UP57j9yrDtlCHpFxc/eGho1m8DP5olfu9KRWwd5fiqL9nMSE2rUJtPzQyvqmDwO5bVZt3B+fTVdo4gxuiqw25A== +"@cspell/filetypes@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-10.0.1.tgz" + integrity sha512-Z5S35giU5IW49fBBq6BksUbE8PC4IYPfaKuwl5Nl9jkf/OkAKiBmCowKX45NzRUQInwK/GSqqIUifrNeI6LdLw== -"@cspell/rpc@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/rpc/-/rpc-10.0.0.tgz#be38a76f5a7afd365efa5ac310a4c65bd1bdbb83" - integrity sha512-QrpOZMwz2pAjvl6Hky2PauYoMpLCASn3osjn7uKUbgFV70sahyj6tmx4rRgRX7vHu2WQLZev+YsuO4EujiBDOg== +"@cspell/rpc@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/rpc/-/rpc-10.0.1.tgz" + integrity sha512-axSRKv3zEAmBm66iD/FV/MPmE4/Yf7c3PZiwTW894Yd3iEhtn3KPKeTrqQ2/tDrhB1Z2qTsap/Hue0MK4o5WXg== -"@cspell/strong-weak-map@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/strong-weak-map/-/strong-weak-map-10.0.0.tgz#113f26f189ddcf4cfa29e2e406ba2e32b66b90b9" - integrity sha512-JRsato0s2IjYdsng+AGL6oAqgZVQgih5aWKdmxs21H6EdhMaoFDmRE5kXm/RT5a6OMdtnzQM9DqeToqBChWIOQ== +"@cspell/strong-weak-map@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-10.0.1.tgz" + integrity sha512-lenN1DVyPi8nJLSMSJJ670ddTjyiruLueuSZO1qLcxBqUhgxDt/mALu9N/1m6WdOVcg6m/5cLiZVg2KOo2UzRw== -"@cspell/url@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@cspell/url/-/url-10.0.0.tgz#bb152ddec5a9e823bd63712ce1bd6ba3ee7d6bae" - integrity sha512-q+0pHQ8DbqjemyaOn/mTtBRbCuKDqhnsVbZ6J9zkTsxPgMpccjy0s5oLXwomfrrxMRBH+UcbERwtUmE+SbnoIQ== +"@cspell/url@10.0.1": + version "10.0.1" + resolved "https://registry.npmjs.org/@cspell/url/-/url-10.0.1.tgz" + integrity sha512-abYYgI29wJhWIfWTYrYuzRYDcHQUQ1N5ylnhxYn1NJnIQMqUWGLbDmt12JABtZ+R6h6UNatQrS7rhP86etvJyQ== "@csstools/cascade-layer-name-parser@^2.0.5": version "2.0.5" @@ -1949,29 +1938,29 @@ resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@docsearch/core@4.6.2": - version "4.6.2" - resolved "https://registry.yarnpkg.com/@docsearch/core/-/core-4.6.2.tgz#0a6fdc13b1eb12153cb19316f911479b67f7bd58" - integrity sha512-/S0e6Dj7Zcm8m9Rru49YEX49dhU11be68c+S/BCyN8zQsTTgkKzXlhRbVL5mV6lOLC2+ZRRryaTdcm070Ug2oA== +"@docsearch/core@4.6.3": + version "4.6.3" + resolved "https://registry.npmjs.org/@docsearch/core/-/core-4.6.3.tgz" + integrity sha512-rUOujwIpxJRgD7+kicVsI3D5sqBvdiRTquzWBpTEXZs8ZXfGbfzpus5HqumaNYTppN2HvH8E2yNuRwYdHJeOlA== -"@docsearch/css@4.6.2": - version "4.6.2" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.6.2.tgz#986776619dccbf798176c75e858cc22f5e710bb4" - integrity sha512-fH/cn8BjEEdM2nJdjNMHIvOVYupG6AIDtFVDgIZrNzdCSj4KXr9kd+hsehqsNGYjpUjObeKYKvgy/IwCb1jZYQ== +"@docsearch/css@4.6.3": + version "4.6.3" + resolved "https://registry.npmjs.org/@docsearch/css/-/css-4.6.3.tgz" + integrity sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ== "@docsearch/react@^3.9.0 || ^4.3.2": - version "4.6.2" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-4.6.2.tgz#e6c65fb87fb943eefaa936debe6d31bb51b25056" - integrity sha512-/BbtGFtqVOGwZx0dw/UfhN/0/DmMQYnulY4iv0tPRhC2JCXv0ka/+izwt3Jzo1ZxXS/2eMvv9zHsBJOK1I9f/w== + version "4.6.3" + resolved "https://registry.npmjs.org/@docsearch/react/-/react-4.6.3.tgz" + integrity sha512-Bg2wdDsoQVlNCcEKuEJAU04tvHCqgx8rIu+uIoM4pRtcx3TBKJuXutJik3LTA8LRc9YEyHkrYUrmcC0D7BYf+g== dependencies: "@algolia/autocomplete-core" "1.19.2" - "@docsearch/core" "4.6.2" - "@docsearch/css" "4.6.2" + "@docsearch/core" "4.6.3" + "@docsearch/css" "4.6.3" -"@docusaurus/babel@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.10.0.tgz#819819f107233dfcf50b59cd51158f23fb04878a" - integrity sha512-mqCJhCZNZUDg0zgDEaPTM4DnRsisa24HdqTy/qn/MQlbwhTb4WVaZg6ZyX6yIVKqTz8fS1hBMgM+98z+BeJJDg== +"@docusaurus/babel@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.10.1.tgz" + integrity sha512-DZzFO1K3v/GoEt1fx1DiYHF4en+PuhtQf1AkQJa5zu3CoeKSpr5cpQRUlz3jr0m44wyzmSXu9bVpfir+N4+8bg== dependencies: "@babel/core" "^7.25.9" "@babel/generator" "^7.25.9" @@ -1982,23 +1971,23 @@ "@babel/preset-typescript" "^7.25.9" "@babel/runtime" "^7.25.9" "@babel/traverse" "^7.25.9" - "@docusaurus/logger" "3.10.0" - "@docusaurus/utils" "3.10.0" + "@docusaurus/logger" "3.10.1" + "@docusaurus/utils" "3.10.1" babel-plugin-dynamic-import-node "^2.3.3" fs-extra "^11.1.1" tslib "^2.6.0" -"@docusaurus/bundler@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.10.0.tgz#878c4c46bfa3434671ea37a43da184238a6aae26" - integrity sha512-iONUGZGgp+lAkw/cJZH6irONcF4p8+278IsdRlq8lYhxGjkoNUs0w7F4gVXBYSNChq5KG5/JleTSsdJySShxow== +"@docusaurus/bundler@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.10.1.tgz" + integrity sha512-HIqQPvbqnnQRe4NsBd1774KRarjXqS6wHsWELtyuSs1gCfvixJO2jUGH/OEBtr1Gvzpw+ze5CjGMvSJ8UE1KUw== dependencies: "@babel/core" "^7.25.9" - "@docusaurus/babel" "3.10.0" - "@docusaurus/cssnano-preset" "3.10.0" - "@docusaurus/logger" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils" "3.10.0" + "@docusaurus/babel" "3.10.1" + "@docusaurus/cssnano-preset" "3.10.1" + "@docusaurus/logger" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils" "3.10.1" babel-loader "^9.2.1" clean-css "^5.3.3" copy-webpack-plugin "^11.0.0" @@ -2016,20 +2005,20 @@ tslib "^2.6.0" url-loader "^4.1.1" webpack "^5.95.0" - webpackbar "^6.0.1" - -"@docusaurus/core@3.10.0", "@docusaurus/core@^3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.10.0.tgz#642e71a0209d62c3f5ef275ed9d74a881f40df39" - integrity sha512-mgLdQsO8xppnQZc3LPi+Mf+PkPeyxJeIx11AXAq/14fsaMefInQiMEZUUmrc7J+956G/f7MwE7tn8KZgi3iRcA== - dependencies: - "@docusaurus/babel" "3.10.0" - "@docusaurus/bundler" "3.10.0" - "@docusaurus/logger" "3.10.0" - "@docusaurus/mdx-loader" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-common" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" + webpackbar "^7.0.0" + +"@docusaurus/core@3.10.1", "@docusaurus/core@^3.10.0": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/core/-/core-3.10.1.tgz" + integrity sha512-3pf2fXXw0eVk8WnC3T4LIigRDupcpvngpKo9Vy7mYyBhuddc0klDUuZAIfzMoK6z05pdlk6EFC/vBSX43+1O5w== + dependencies: + "@docusaurus/babel" "3.10.1" + "@docusaurus/bundler" "3.10.1" + "@docusaurus/logger" "3.10.1" + "@docusaurus/mdx-loader" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-common" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" boxen "^6.2.1" chalk "^4.1.2" chokidar "^3.5.3" @@ -2066,32 +2055,32 @@ webpack-dev-server "^5.2.2" webpack-merge "^6.0.1" -"@docusaurus/cssnano-preset@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.10.0.tgz#be1b435c33df09d743473d3fadda67b4568dfae3" - integrity sha512-qzSshTO1DB3TYW+dPUal5KHM7XPc5YQfzF3Kdb2NDACJUyGbNcFtw3tGkCJlYwhNCRKbZcmwraKUS1i5dcHdGg== +"@docusaurus/cssnano-preset@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.10.1.tgz" + integrity sha512-eNfHGcTKCSq6xmcavAkX3RRclHaE2xRCMParlDXLdXVP01/a2e/jKXMj/0ULnLFQSNwwuI62L0Ge8J+nZsR7UQ== dependencies: cssnano-preset-advanced "^6.1.2" postcss "^8.5.4" postcss-sort-media-queries "^5.2.0" tslib "^2.6.0" -"@docusaurus/logger@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.10.0.tgz#2bacbd004dd78e3da926dbe8f6fa9a930856575d" - integrity sha512-9jrZzFuBH1LDRlZ7cznAhCLmAZ3HSDqgwdrSSZdGHq9SPUOQgXXu8mnxe2ZRB9NS1PCpMTIOVUqDtZPIhMafZg== +"@docusaurus/logger@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.10.1.tgz" + integrity sha512-oPjNFnfJsRCkePVjkGrxWGq4MvJKRQT0r9jOP0eRBTZ7Wr9FAbzdP/Gjs0I2Ss6YRkPoEgygKG112OkE6skvJw== dependencies: chalk "^4.1.2" tslib "^2.6.0" -"@docusaurus/mdx-loader@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.10.0.tgz#1d4b050d751389ecf38dee48bcb61e53df8ffb82" - integrity sha512-mQQV97080AH4PYNs087l202NMDqRopZA4mg5W76ZZyTFrmWhJ3mHg+8A+drJVENxw5/Q+wHMHLgsx+9z1nEs0A== +"@docusaurus/mdx-loader@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.10.1.tgz" + integrity sha512-GRmeb/wQ+iXRrFwcHBfgQhrJxGElgCsoTWZYDhccjsZVne1p8MK/EpQVIloXttz76TCe78kKD5AEG9n1xc1oxQ== dependencies: - "@docusaurus/logger" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" + "@docusaurus/logger" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" "@mdx-js/mdx" "^3.0.0" "@slorber/remark-comment" "^1.0.0" escape-html "^1.0.3" @@ -2114,12 +2103,12 @@ vfile "^6.0.1" webpack "^5.88.1" -"@docusaurus/module-type-aliases@3.10.0", "@docusaurus/module-type-aliases@^3.9.2": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.10.0.tgz#749928f104d563f11f046bf0c9ab6489a470c7c8" - integrity sha512-/1O0Zg8w3DFrYX/I6Fbss7OJrtZw1QoyjDhegiFNHVi9A9Y0gQ3jUAytVxF6ywpAWpLyLxch8nN8H/V3XfzdJQ== +"@docusaurus/module-type-aliases@3.10.1", "@docusaurus/module-type-aliases@^3.9.2": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.10.1.tgz" + integrity sha512-YoOZKUdGlp8xSYhuAkGdSo5Ydkbq4V4eK3sD8v0a2hloxCWdQbNBhkc+Ko9QyjpESc0BYcIGM5iHVAy5hdFV6w== dependencies: - "@docusaurus/types" "3.10.0" + "@docusaurus/types" "3.10.1" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -2127,19 +2116,19 @@ react-helmet-async "npm:@slorber/react-helmet-async@1.3.0" react-loadable "npm:@docusaurus/react-loadable@6.0.0" -"@docusaurus/plugin-content-blog@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.10.0.tgz#10095291b637440847854ecb2c8afcd8746debd7" - integrity sha512-RuTz68DhB7CL96QO5UsFbciD7GPYq6QV+YMfF9V0+N4ZgLhJIBgpVAr8GobrKF6NRe5cyWWETU5z5T834piG9g== - dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/logger" "3.10.0" - "@docusaurus/mdx-loader" "3.10.0" - "@docusaurus/theme-common" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-common" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" +"@docusaurus/plugin-content-blog@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.10.1.tgz" + integrity sha512-mmkgE6Q2+K74tnkou7tXlpDLvoCU/qkSa2GSQ3XUiHWvcebCoDQzS670RR3tO8PmaWlIyWWISYWzZLuMfxunRA== + dependencies: + "@docusaurus/core" "3.10.1" + "@docusaurus/logger" "3.10.1" + "@docusaurus/mdx-loader" "3.10.1" + "@docusaurus/theme-common" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-common" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" cheerio "1.0.0-rc.12" combine-promises "^1.1.0" feed "^4.2.2" @@ -2152,20 +2141,20 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-docs@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.10.0.tgz#9c4ea1d5a405340f28c281d2e4586c695a7c65a5" - integrity sha512-9BjHhf15ct8Z7TThTC0xRndKDVvMKmVsAGAN7W9FpNRzfMdScOGcXtLmcCWtJGvAezjOJIm6CxOYCy3Io5+RnQ== - dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/logger" "3.10.0" - "@docusaurus/mdx-loader" "3.10.0" - "@docusaurus/module-type-aliases" "3.10.0" - "@docusaurus/theme-common" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-common" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" +"@docusaurus/plugin-content-docs@3.10.1", "@docusaurus/plugin-content-docs@^3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.10.1.tgz" + integrity sha512-2jRVrtzjf8LClGTHQlwlwuD3wQXRx3WEoF7XUarJ8Ou+0onV+SLtejsyfY9JLpfUh9hPhXM4pbBGkyAY4Bi3HQ== + dependencies: + "@docusaurus/core" "3.10.1" + "@docusaurus/logger" "3.10.1" + "@docusaurus/mdx-loader" "3.10.1" + "@docusaurus/module-type-aliases" "3.10.1" + "@docusaurus/theme-common" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-common" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" "@types/react-router-config" "^5.0.7" combine-promises "^1.1.0" fs-extra "^11.1.1" @@ -2176,142 +2165,142 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-pages@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.10.0.tgz#7670cbb3c849f434949f542bfdfded1580a13165" - integrity sha512-5amX8kEJI+nIGtuLVjYk59Y5utEJ3CHETFOPEE4cooIRLA4xM4iBsA6zFgu4ljcopeYwvBzFEWf5g2I6Yb9SkA== - dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/mdx-loader" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" +"@docusaurus/plugin-content-pages@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.10.1.tgz" + integrity sha512-huJpaRPMl42nsFwuCXvV8bVDj2MazuwRJIUylI/RSlmZeJssVoZXeCjVf1y+1Drtpa9SKcdGn8yoJ76IRJijtw== + dependencies: + "@docusaurus/core" "3.10.1" + "@docusaurus/mdx-loader" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" fs-extra "^11.1.1" tslib "^2.6.0" webpack "^5.88.1" -"@docusaurus/plugin-css-cascade-layers@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.10.0.tgz#71e318d842be95f92be6c3dca00ceea4971d0edb" - integrity sha512-6q1vtt5FJcg5osgkHeM1euErECNqEZ5Z1j69yiNx2luEBIso+nxCkS9nqj8w+MK5X7rvKEToGhFfOFWncs51pQ== +"@docusaurus/plugin-css-cascade-layers@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.10.1.tgz" + integrity sha512-r//fn+MNHkE1wCof8T29VAQezt1enGCpsFxoziBbvLgBM4JfXN2P3rxrBaavHmvLvm7lYkpJeitcDthwnmWCTw== dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" + "@docusaurus/core" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" tslib "^2.6.0" -"@docusaurus/plugin-debug@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.10.0.tgz#e77f924604e1e09d5d90fe0bdf23a3be8ea3307e" - integrity sha512-XcljKN+G+nmmK69uQA1d9BlYU3ZftG3T3zpK8/7Hf/wrOlV7TA4Ampdrdwkg0jElKdKAoSnPhCO0/U3bQGsVQQ== +"@docusaurus/plugin-debug@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.10.1.tgz" + integrity sha512-9KqOpKNfAyqGZykRb9LhIT/vyRF6sm/ykhjj/39JvaJahDS+jZJE0Z1Wfz9q3DUNDTMNN0Q7u/kk4rKKU+IJuA== dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils" "3.10.0" + "@docusaurus/core" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils" "3.10.1" fs-extra "^11.1.1" react-json-view-lite "^2.3.0" tslib "^2.6.0" -"@docusaurus/plugin-google-analytics@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.10.0.tgz#22c7e976fe4d970c7cd1c73c9723d9a5786c6e37" - integrity sha512-hTEoodatpBZnUat5nFExbuTGA1lhWGy7vZGuTew5Q3QDtGKFpSJLYmZJhdTjvCFwv1+qQ67hgAVlKdJOB8TXow== +"@docusaurus/plugin-google-analytics@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.10.1.tgz" + integrity sha512-8o0P1KtmgdYQHH+oInitPpRWI0Of5XednAX4+DMhQNSmGSRNrsEEHg1ebv35m9AgRClfAytCJ5jA9KvcASTyuA== dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" + "@docusaurus/core" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" tslib "^2.6.0" -"@docusaurus/plugin-google-gtag@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.10.0.tgz#c38a2ba638257851cc845b934506b80c08d47f96" - integrity sha512-iB/Zzjv/eelJRbdULZqzWCbgMgJ7ht4ONVjXtN3+BI/muil6S87gQ1OJyPwlXD+ELdKkitC7bWv5eJdYOZLhrQ== +"@docusaurus/plugin-google-gtag@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.10.1.tgz" + integrity sha512-pu3xIUo5o/zCMLfUY9BO5KOwSH0zIsAGyFRPvXHayFSA5XIhCU/SFuB0g0ZNjFn9niZLCaNvoeAuOGFJZq0fdw== dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" + "@docusaurus/core" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" "@types/gtag.js" "^0.0.20" tslib "^2.6.0" -"@docusaurus/plugin-google-tag-manager@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.10.0.tgz#5469c923cc1ad4608399d0b17e5fcacd8e030d56" - integrity sha512-FEjZxqKgLHa+Wez/EgKxRwvArNCWIScfyEQD95rot7jkxp6nonjI5XIbGfO/iYhM5Qinwe8aIEQHP2KZtpqVuA== +"@docusaurus/plugin-google-tag-manager@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.10.1.tgz" + integrity sha512-f6fyGHiCm7kJHBtAisGQS5oNBnpnMTYQZxDXeVrnw/3zWU+LMA22pr6UHGYkBKDbN+qPC5QHG3NuOfzQLq3+Lw== dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" + "@docusaurus/core" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" tslib "^2.6.0" -"@docusaurus/plugin-sitemap@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.10.0.tgz#35d59d46803f279f22aa64fc1bd18c048f12662b" - integrity sha512-DVTSLjB97hIjmayGnGcBfognCeI7ZuUKgEnU7Oz81JYqXtVg94mVTthDjq3QHTylYNeCUbkaW8VF0FDLcc8pPw== - dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/logger" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-common" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" +"@docusaurus/plugin-sitemap@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.10.1.tgz" + integrity sha512-C26MbmmqgdjkDq1htaZ3aD7LzEDKFWXfpyQpt0EOUThuq5nV77zDaedV20yHcVo9p+3ey9aZ4pbHA0D3QcZTzg== + dependencies: + "@docusaurus/core" "3.10.1" + "@docusaurus/logger" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-common" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" fs-extra "^11.1.1" sitemap "^7.1.1" tslib "^2.6.0" -"@docusaurus/plugin-svgr@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.10.0.tgz#8ada2e6dd8318d20206a9b044fc091a5794ba3f0" - integrity sha512-lNljBESaETZqVBMPqkrGchr+UPT1eZzEPLmJhz8I76BxbjqgsUnRvrq6lQJ9sYjgmgX52KB7kkgczqd2yzoswQ== +"@docusaurus/plugin-svgr@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.10.1.tgz" + integrity sha512-6SFxsmjWFkVLDmBUvFK6i72QjUwqyQFe4Ovz+SUJophJjOyVG3ZZG5IQpBC/kX/Gfv1yWeU9nWauH6F6Q7QX/Q== dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" + "@docusaurus/core" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" "@svgr/core" "8.1.0" "@svgr/webpack" "^8.1.0" tslib "^2.6.0" webpack "^5.88.1" "@docusaurus/preset-classic@^3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.10.0.tgz#74b6facdaf568bcd41ec90cae9aebb7ca0ac8619" - integrity sha512-kw/Ye02Hc6xP1OdTswy8yxQEHg0fdPpyWAQRxr5b2x3h7LlG2Zgbb5BDFROnXDDMpUxB7YejlocJIE5HIEfpNA== - dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/plugin-content-blog" "3.10.0" - "@docusaurus/plugin-content-docs" "3.10.0" - "@docusaurus/plugin-content-pages" "3.10.0" - "@docusaurus/plugin-css-cascade-layers" "3.10.0" - "@docusaurus/plugin-debug" "3.10.0" - "@docusaurus/plugin-google-analytics" "3.10.0" - "@docusaurus/plugin-google-gtag" "3.10.0" - "@docusaurus/plugin-google-tag-manager" "3.10.0" - "@docusaurus/plugin-sitemap" "3.10.0" - "@docusaurus/plugin-svgr" "3.10.0" - "@docusaurus/theme-classic" "3.10.0" - "@docusaurus/theme-common" "3.10.0" - "@docusaurus/theme-search-algolia" "3.10.0" - "@docusaurus/types" "3.10.0" - -"@docusaurus/theme-classic@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.10.0.tgz#d937915c691189f27ced649c822994d839ea565b" - integrity sha512-9msCAsRdN+UG+RwPwCFb0uKy4tGoPh5YfBozXeGUtIeAgsMdn6f3G/oY861luZ3t8S2ET8S9Y/1GnpJAGWytww== - dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/logger" "3.10.0" - "@docusaurus/mdx-loader" "3.10.0" - "@docusaurus/module-type-aliases" "3.10.0" - "@docusaurus/plugin-content-blog" "3.10.0" - "@docusaurus/plugin-content-docs" "3.10.0" - "@docusaurus/plugin-content-pages" "3.10.0" - "@docusaurus/theme-common" "3.10.0" - "@docusaurus/theme-translations" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-common" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.10.1.tgz" + integrity sha512-YO/FL8v1zmbxoTso6mjMz/RDjhaTJxb1UpFFTDdY5847LLDCeyYiYlrhyTbgN1RIN3xnkLKZ9Lj1x8hUzI4JOg== + dependencies: + "@docusaurus/core" "3.10.1" + "@docusaurus/plugin-content-blog" "3.10.1" + "@docusaurus/plugin-content-docs" "3.10.1" + "@docusaurus/plugin-content-pages" "3.10.1" + "@docusaurus/plugin-css-cascade-layers" "3.10.1" + "@docusaurus/plugin-debug" "3.10.1" + "@docusaurus/plugin-google-analytics" "3.10.1" + "@docusaurus/plugin-google-gtag" "3.10.1" + "@docusaurus/plugin-google-tag-manager" "3.10.1" + "@docusaurus/plugin-sitemap" "3.10.1" + "@docusaurus/plugin-svgr" "3.10.1" + "@docusaurus/theme-classic" "3.10.1" + "@docusaurus/theme-common" "3.10.1" + "@docusaurus/theme-search-algolia" "3.10.1" + "@docusaurus/types" "3.10.1" + +"@docusaurus/theme-classic@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.10.1.tgz" + integrity sha512-VU1RK0qb2pab0si4r7HFK37cYco8VzqLj3u1PspVipSr/z/GPVKHO4/HXbnePqHoWDk8urjyGSeatH0NIMBM1A== + dependencies: + "@docusaurus/core" "3.10.1" + "@docusaurus/logger" "3.10.1" + "@docusaurus/mdx-loader" "3.10.1" + "@docusaurus/module-type-aliases" "3.10.1" + "@docusaurus/plugin-content-blog" "3.10.1" + "@docusaurus/plugin-content-docs" "3.10.1" + "@docusaurus/plugin-content-pages" "3.10.1" + "@docusaurus/theme-common" "3.10.1" + "@docusaurus/theme-translations" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-common" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" "@mdx-js/react" "^3.0.0" clsx "^2.0.0" copy-text-to-clipboard "^3.2.0" @@ -2326,15 +2315,15 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-common@3.10.0", "@docusaurus/theme-common@^3.8.1": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.10.0.tgz#70b419ccfdf62f092299354a72d1692e81be597d" - integrity sha512-Dkp1YXKn16ByCJAdIjbDIOpVb4Z66MsVD694/ilX1vAAHaVEMrVsf/NPd9VgreyFx08rJ9GqV1MtzsbTcU73Kg== +"@docusaurus/theme-common@3.10.1", "@docusaurus/theme-common@^3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.10.1.tgz" + integrity sha512-0YtmIeoNo1fIw65LO8+/1dPgmDV86UmhMkow37gzjytuiCSQm9xob6PJy0L4kuQEMTLfUOGvkXvZr7GPrHquMA== dependencies: - "@docusaurus/mdx-loader" "3.10.0" - "@docusaurus/module-type-aliases" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-common" "3.10.0" + "@docusaurus/mdx-loader" "3.10.1" + "@docusaurus/module-type-aliases" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-common" "3.10.1" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -2345,32 +2334,32 @@ utility-types "^3.10.0" "@docusaurus/theme-mermaid@^3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-mermaid/-/theme-mermaid-3.10.0.tgz#6581ccf16d27e4c02fe8c7cf15488862f27be9c8" - integrity sha512-Y2xrlwhIJ80oOZIO3PXL6A7J869splfcMI87E3NKpYsy3zJxOyV+BP1QMtGi59ajKgU868HPuyyn6J+6BZGOBg== - dependencies: - "@docusaurus/core" "3.10.0" - "@docusaurus/module-type-aliases" "3.10.0" - "@docusaurus/theme-common" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.10.1.tgz" + integrity sha512-2gxpmln8Pc4EN1oWzshQEx2HTs67jk14v7MmgqGs8ZU7Nm8oihg+fTouof2u4vN8DtB3Fln4cDJu4UprSX1S3Q== + dependencies: + "@docusaurus/core" "3.10.1" + "@docusaurus/module-type-aliases" "3.10.1" + "@docusaurus/theme-common" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" mermaid ">=11.6.0" tslib "^2.6.0" -"@docusaurus/theme-search-algolia@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.10.0.tgz#0ff57fe58db6abde8f5ad2877e459cd2fa6e7464" - integrity sha512-f5FPKI08e3JRG63vR/o4qeuUVHUHzFzM0nnF+AkB67soAZgNsKJRf2qmUZvlQkGwlV+QFkKe4D0ANMh1jToU3g== +"@docusaurus/theme-search-algolia@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.10.1.tgz" + integrity sha512-OTaARARVZj2GvkJQjB+1jOIxntRaXea+G+fMsNqrZBAU1O1vJKDW22R7kECOHW27oJCLFN9HKaZeRrfAUyviug== dependencies: "@algolia/autocomplete-core" "^1.19.2" "@docsearch/react" "^3.9.0 || ^4.3.2" - "@docusaurus/core" "3.10.0" - "@docusaurus/logger" "3.10.0" - "@docusaurus/plugin-content-docs" "3.10.0" - "@docusaurus/theme-common" "3.10.0" - "@docusaurus/theme-translations" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-validation" "3.10.0" + "@docusaurus/core" "3.10.1" + "@docusaurus/logger" "3.10.1" + "@docusaurus/plugin-content-docs" "3.10.1" + "@docusaurus/theme-common" "3.10.1" + "@docusaurus/theme-translations" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-validation" "3.10.1" algoliasearch "^5.37.0" algoliasearch-helper "^3.26.0" clsx "^2.0.0" @@ -2380,23 +2369,23 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.10.0.tgz#8fdc23d29bd7f907db49c36cf65e2123d96be300" - integrity sha512-L9IbFLwTc5+XdgH45iQYufLn0SVZd6BUNelDbKIFlH+E4hhjuj/XHWAFMX/w2K59rfy8wak9McOaei7BSUfRPA== +"@docusaurus/theme-translations@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.10.1.tgz" + integrity sha512-cLMyaKivjBVWKMJuWqyFVVgtqe8DPJNPkog0bn8W1MDVAKcPdxRFycBfC1We1RaNp7Rdk513bmtW78RR6OBxBw== dependencies: fs-extra "^11.1.1" tslib "^2.6.0" "@docusaurus/tsconfig@^3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.10.0.tgz#f40a57248828f0503a5f355cf30aa59941c9baaa" - integrity sha512-TXdC3WXuPrdQAexLvjUJfnYf3YKEgEqAs5nK0Q88pRBCW7t7oN4ILvWYb3A5Z1wlSXyXGWW/mCUmLEhdWsjnDQ== + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.10.1.tgz" + integrity sha512-rYvB7yqkdqWIpAbDzQljGfM4cDBkLTbhmagZBEcsyj6oPUsz47lmW2pYdN1j+7sGFgltbAmQH62xfbrij4Eh6Q== -"@docusaurus/types@3.10.0", "@docusaurus/types@^3.9.2": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.10.0.tgz#a69232bba74b738fcf4671fd5f0f079366dd3d13" - integrity sha512-F0dOt3FOoO20rRaFK7whGFQZ3ggyrWEdQc/c8/UiRuzhtg4y1w9FspXH5zpCT07uMnJKBPGh+qNazbNlCQqvSw== +"@docusaurus/types@3.10.1", "@docusaurus/types@^3.9.2": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.1.tgz" + integrity sha512-XYMK8k1szDCFMw2V+Xyen0g7Kee1sP3dtFnl7vkGkZOkeAJ/oPDQPL8iz4HBKOo/cwU8QeV6onVjMqtP+tFzsw== dependencies: "@mdx-js/mdx" "^3.0.0" "@types/history" "^4.7.11" @@ -2409,36 +2398,36 @@ webpack "^5.95.0" webpack-merge "^5.9.0" -"@docusaurus/utils-common@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.10.0.tgz#2a6dc76b312664fca7234d33607c085318ff1ae3" - integrity sha512-JyL7sb9QVDgYvudIS81Dv0lsWm7le0vGZSDwsztxWam1SPBqrnkvBy9UYL/amh6pbybkyYTd3CMTkO24oMlCSw== +"@docusaurus/utils-common@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.10.1.tgz" + integrity sha512-5mFSgEADtnFxFH7RLw02QA5MpU5JVUCj0MPeIvi/aF4Fi45tQRIuTwXoXDqJ+1VfQJuYJGz3SI63wmGz4HvXzA== dependencies: - "@docusaurus/types" "3.10.0" + "@docusaurus/types" "3.10.1" tslib "^2.6.0" -"@docusaurus/utils-validation@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.10.0.tgz#a2418d7f31980d991fd3a1f39c8aad8820b36812" - integrity sha512-c+6n2+ZPOJtWWc8Bb/EYdpSDfjYEScdCu9fB/SNjOmSCf1IdVnGf2T53o0tsz0gDRtCL90tifTL0JE/oMuP1Mw== +"@docusaurus/utils-validation@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.10.1.tgz" + integrity sha512-cRv1X69jwaWv47waglllgZVWzeBFLhl53XT/XED/83BerVBTC5FTP8WTcVl8Z6sZOegDSwitu/wpCSPCDOT6lg== dependencies: - "@docusaurus/logger" "3.10.0" - "@docusaurus/utils" "3.10.0" - "@docusaurus/utils-common" "3.10.0" + "@docusaurus/logger" "3.10.1" + "@docusaurus/utils" "3.10.1" + "@docusaurus/utils-common" "3.10.1" fs-extra "^11.2.0" joi "^17.9.2" js-yaml "^4.1.0" lodash "^4.17.21" tslib "^2.6.0" -"@docusaurus/utils@3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.10.0.tgz#ea7d7b0d325b60f728decc00bb3908d00ef86faf" - integrity sha512-T3B0WTigsIthe0D4LQa2k+7bJY+c3WS+Wq2JhcznOSpn1lSN64yNtHQXboCj3QnUs1EuAZszQG1SHKu5w5ZrlA== +"@docusaurus/utils@3.10.1": + version "3.10.1" + resolved "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.10.1.tgz" + integrity sha512-3ojeJry9xBYdJO6qoyyzqeJFSJBVx2mXhyDzSdjwL2+URFQMf+h25gG38iswGImicK0ELjTd1EL2xzk8hf3QPw== dependencies: - "@docusaurus/logger" "3.10.0" - "@docusaurus/types" "3.10.0" - "@docusaurus/utils-common" "3.10.0" + "@docusaurus/logger" "3.10.1" + "@docusaurus/types" "3.10.1" + "@docusaurus/utils-common" "3.10.1" escape-string-regexp "^4.0.0" execa "^5.1.1" file-loader "^6.2.0" @@ -2570,6 +2559,11 @@ resolved "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz" integrity sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw== +"@faker-js/faker@5.5.3": + version "5.5.3" + resolved "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz" + integrity sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw== + "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" @@ -2582,6 +2576,11 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@hookform/error-message@^2.0.1": + version "2.0.1" + resolved "https://registry.npmjs.org/@hookform/error-message/-/error-message-2.0.1.tgz" + integrity sha512-U410sAr92xgxT1idlu9WWOVjndxLdgPUHEB8Schr27C9eh7/xUnITWpCMF93s+lGiG++D4JnbSnrb5A21AdSNg== + "@iconify/types@^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz" @@ -2615,7 +2614,7 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz" integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== @@ -2855,40 +2854,40 @@ "@mdx-js/react@^3.0.0", "@mdx-js/react@^3.1.1": version "3.1.1" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.1.1.tgz#24bda7fffceb2fe256f954482123cda1be5f5fef" + resolved "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz" integrity sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw== dependencies: "@types/mdx" "^2.0.0" -"@mermaid-js/parser@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@mermaid-js/parser/-/parser-1.1.0.tgz#8f96c35ddab34a1b12af58f2c59f5abb7d4743fc" - integrity sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw== +"@mermaid-js/parser@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.1.1.tgz" + integrity sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw== dependencies: - langium "^4.0.0" + "@chevrotain/types" "~11.1.1" -"@mui/core-downloads-tracker@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-6.5.0.tgz#e9f7049d7e7bb1ee05839f7a0ce813755f137432" - integrity sha512-LGb8t8i6M2ZtS3Drn3GbTI1DVhDY6FJ9crEey2lZ0aN2EMZo8IZBZj9wRf4vqbZHaWjsYgtbOnJw5V8UWbmK2Q== +"@mui/core-downloads-tracker@^6.3.0": + version "6.3.0" + resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.3.0.tgz" + integrity sha512-/d8NwSuC3rMwCjswmGB3oXC4sdDuhIUJ8inVQAxGrADJhf0eq/kmy+foFKvpYhHl2siOZR+MLdFttw6/Bzqtqg== "@mui/icons-material@^6.3.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-6.5.0.tgz#26bfa7c8574cc4e57c2f2835bfd6b1efa7f310fa" - integrity sha512-VPuPqXqbBPlcVSA0BmnoE4knW4/xG6Thazo8vCLWkOKusko6DtwFV6B665MMWJ9j0KFohTIf3yx2zYtYacvG1g== + version "6.3.0" + resolved "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.3.0.tgz" + integrity sha512-3uWws6DveDn5KxCS34p+sUNMxehuclQY6OmoJeJJ+Sfg9L7LGBpksY/nX5ywKAqickTZnn+sQyVcp963ep9jvw== dependencies: "@babel/runtime" "^7.26.0" "@mui/material@^6.3.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-6.5.0.tgz#c7eccfe260030433c51b7aec17574bae4504cacc" - integrity sha512-yjvtXoFcrPLGtgKRxFaH6OQPtcLPhkloC0BML6rBG5UeldR0nPULR/2E2BfXdo5JNV7j7lOzrrLX2Qf/iSidow== + version "6.3.0" + resolved "https://registry.npmjs.org/@mui/material/-/material-6.3.0.tgz" + integrity sha512-qhlTFyRMxfoVPxUtA5e8IvqxP0dWo2Ij7cvot7Orag+etUlZH+3UwD8gZGt+3irOoy7Ms3UNBflYjwEikUXtAQ== dependencies: "@babel/runtime" "^7.26.0" - "@mui/core-downloads-tracker" "^6.5.0" - "@mui/system" "^6.5.0" - "@mui/types" "~7.2.24" - "@mui/utils" "^6.4.9" + "@mui/core-downloads-tracker" "^6.3.0" + "@mui/system" "^6.3.0" + "@mui/types" "^7.2.20" + "@mui/utils" "^6.3.0" "@popperjs/core" "^2.11.8" "@types/react-transition-group" "^4.4.12" clsx "^2.1.1" @@ -2897,19 +2896,19 @@ react-is "^19.0.0" react-transition-group "^4.4.5" -"@mui/private-theming@^6.4.9": - version "6.4.9" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-6.4.9.tgz#0c1d65a638a1740aad0eb715d79e76471abe8175" - integrity sha512-LktcVmI5X17/Q5SkwjCcdOLBzt1hXuc14jYa7NPShog0GBDCDvKtcnP0V7a2s6EiVRlv7BzbWEJzH6+l/zaCxw== +"@mui/private-theming@^6.3.0": + version "6.3.0" + resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.3.0.tgz" + integrity sha512-tdS8jvqMokltNTXg6ioRCCbVdDmZUJZa/T9VtTnX2Lwww3FTgCakst9tWLZSxm1fEE9Xp0m7onZJmgeUmWQYVw== dependencies: "@babel/runtime" "^7.26.0" - "@mui/utils" "^6.4.9" + "@mui/utils" "^6.3.0" prop-types "^15.8.1" -"@mui/styled-engine@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-6.5.0.tgz#cf9b3e706517f5f2989df92d2aea0d2917a77c8a" - integrity sha512-8woC2zAqF4qUDSPIBZ8v3sakj+WgweolpyM/FXf8jAx6FMls+IE4Y8VDZc+zS805J7PRz31vz73n2SovKGaYgw== +"@mui/styled-engine@^6.3.0": + version "6.3.0" + resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.3.0.tgz" + integrity sha512-iWA6eyiPkO07AlHxRUvI7dwVRSc+84zV54kLmjUms67GJeOWVuXlu8ZO+UhCnwJxHacghxnabsMEqet5PYQmHg== dependencies: "@babel/runtime" "^7.26.0" "@emotion/cache" "^11.13.5" @@ -2918,110 +2917,89 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-6.5.0.tgz#52751ac4e3a546f53bc34fd2ef2731c28a824b92" - integrity sha512-XcbBYxDS+h/lgsoGe78ExXFZXtuIlSBpn/KsZq8PtZcIkUNJInkuDqcLd2rVBQrDC1u+rvVovdaWPf2FHKJf3w== +"@mui/system@^6.3.0": + version "6.3.0" + resolved "https://registry.npmjs.org/@mui/system/-/system-6.3.0.tgz" + integrity sha512-L+8hUHMNlfReKSqcnVslFrVhoNfz/jw7Fe9NfDE85R3KarvZ4O3MU9daF/lZeqEAvnYxEilkkTfDwQ7qCgJdFg== dependencies: "@babel/runtime" "^7.26.0" - "@mui/private-theming" "^6.4.9" - "@mui/styled-engine" "^6.5.0" - "@mui/types" "~7.2.24" - "@mui/utils" "^6.4.9" + "@mui/private-theming" "^6.3.0" + "@mui/styled-engine" "^6.3.0" + "@mui/types" "^7.2.20" + "@mui/utils" "^6.3.0" clsx "^2.1.1" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.4.12": - version "7.4.12" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.4.12.tgz#e4eba37a7506419ea5c5e0604322ba82b271bf46" - integrity sha512-iKNAF2u9PzSIj40CjvKJWxFXJo122jXVdrmdh0hMYd+FR+NuJMkr/L88XwWLCRiJ5P1j+uyac25+Kp6YC4hu6w== - dependencies: - "@babel/runtime" "^7.28.6" +"@mui/types@^7.2.20": + version "7.2.20" + resolved "https://registry.npmjs.org/@mui/types/-/types-7.2.20.tgz" + integrity sha512-straFHD7L8v05l/N5vcWk+y7eL9JF0C2mtph/y4BPm3gn2Eh61dDwDB65pa8DLss3WJfDXYC7Kx5yjP0EmXpgw== -"@mui/types@~7.2.24": - version "7.2.24" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.24.tgz#5eff63129d9c29d80bbf2d2e561bd0690314dec2" - integrity sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw== - -"@mui/utils@^5.16.6 || ^6.0.0 || ^7.0.0": - version "7.3.10" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-7.3.10.tgz#b74050131ca9022c0815d16f54f1a6d757ab343d" - integrity sha512-7y2eIfy0h7JPz+Yy4pS+wgV68d46PuuxDqKBN4Q8VlPQSsCAGwroMCV6xWyc7g9dvEp8ZNFsknc59GHWO+r6Ow== - dependencies: - "@babel/runtime" "^7.28.6" - "@mui/types" "^7.4.12" - "@types/prop-types" "^15.7.15" - clsx "^2.1.1" - prop-types "^15.8.1" - react-is "^19.2.3" - -"@mui/utils@^6.4.9": - version "6.4.9" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-6.4.9.tgz#b0df01daa254c7c32a1a30b30a5179e19ef071a7" - integrity sha512-Y12Q9hbK9g+ZY0T3Rxrx9m2m10gaphDuUMgWxyV5kNJevVxXYCLclYUCC9vXaIk1/NdNDTcW2Yfr2OGvNFNmHg== +"@mui/utils@^5.16.6 || ^6.0.0", "@mui/utils@^6.3.0": + version "6.3.0" + resolved "https://registry.npmjs.org/@mui/utils/-/utils-6.3.0.tgz" + integrity sha512-MkDBF08OPVwXhAjedyMykRojgvmf0y/jxkBWjystpfI/pasyTYrfdv4jic6s7j3y2+a+SJzS9qrD6X8ZYj/8AQ== dependencies: "@babel/runtime" "^7.26.0" - "@mui/types" "~7.2.24" + "@mui/types" "^7.2.20" "@types/prop-types" "^15.7.14" clsx "^2.1.1" prop-types "^15.8.1" react-is "^19.0.0" "@mui/x-data-grid-pro@^7.23.5": - version "7.29.12" - resolved "https://registry.yarnpkg.com/@mui/x-data-grid-pro/-/x-data-grid-pro-7.29.12.tgz#54163074687eb607f8eb9958d01f2317ee0253ac" - integrity sha512-HoBaqJYqxaVZCkv3NK1qdca0Sv2er6L2Wrt51gyfMBBuM+liSpQ0L4HqX42bzIst+ScAoBpBAn6ILm9RQ0rqLw== + version "7.23.5" + resolved "https://registry.npmjs.org/@mui/x-data-grid-pro/-/x-data-grid-pro-7.23.5.tgz" + integrity sha512-6IdUiCSxTD9Xwc89EqvMzzafWiC8/yamf+F1O13TIqkLh5CAENEd7Kd3Exk8yqiLtTOfhrKgvY08DJXgDlKnWQ== dependencies: "@babel/runtime" "^7.25.7" - "@mui/utils" "^5.16.6 || ^6.0.0 || ^7.0.0" - "@mui/x-data-grid" "7.29.12" - "@mui/x-internals" "7.29.0" - "@mui/x-license" "7.29.1" + "@mui/utils" "^5.16.6 || ^6.0.0" + "@mui/x-data-grid" "7.23.5" + "@mui/x-internals" "7.23.5" + "@mui/x-license" "7.23.5" "@types/format-util" "^1.0.4" clsx "^2.1.1" prop-types "^15.8.1" reselect "^5.1.1" -"@mui/x-data-grid@7.29.12", "@mui/x-data-grid@^7.23.5": - version "7.29.12" - resolved "https://registry.yarnpkg.com/@mui/x-data-grid/-/x-data-grid-7.29.12.tgz#a083213decd52f6a986c8290e3ba0176905d545e" - integrity sha512-MaEC7ubr/je8jVWjdRU7LxBXAzlOZwFEdNdvlDUJIYkRa3TRCQ1HsY8Gd8Od0jnlnMYn9M4BrEfOrq9VRnt4bw== +"@mui/x-data-grid@7.23.5", "@mui/x-data-grid@^7.23.5": + version "7.23.5" + resolved "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.23.5.tgz" + integrity sha512-JmwdfaegpwO9Ei3PYCKy1FFip9AcdMGzZ0VTqzWE93pvDBVGxs/MZKT0g/8PYHJ6yzA5sBHHBxFN8sKfs7kVsg== dependencies: "@babel/runtime" "^7.25.7" - "@mui/utils" "^5.16.6 || ^6.0.0 || ^7.0.0" - "@mui/x-internals" "7.29.0" + "@mui/utils" "^5.16.6 || ^6.0.0" + "@mui/x-internals" "7.23.5" clsx "^2.1.1" prop-types "^15.8.1" reselect "^5.1.1" - use-sync-external-store "^1.0.0" -"@mui/x-internals@7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@mui/x-internals/-/x-internals-7.29.0.tgz#1f353b697ed1bf5594ac549556ade2e6841f4bf5" - integrity sha512-+Gk6VTZIFD70XreWvdXBwKd8GZ2FlSCuecQFzm6znwqXg1ZsndavrhG9tkxpxo2fM1Zf7Tk8+HcOO0hCbhTQFA== +"@mui/x-internals@7.23.5": + version "7.23.5" + resolved "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.23.5.tgz" + integrity sha512-PS6p9qL7otbQ2edSF83GgTicssE0Q84Ta+X/5tSwoCnToEKClka1Wc/cXlsjhRVLmoqz8uTqaiNcZAgnyQWNYQ== dependencies: "@babel/runtime" "^7.25.7" - "@mui/utils" "^5.16.6 || ^6.0.0 || ^7.0.0" + "@mui/utils" "^5.16.6 || ^6.0.0" -"@mui/x-license@7.29.1": - version "7.29.1" - resolved "https://registry.yarnpkg.com/@mui/x-license/-/x-license-7.29.1.tgz#712e251ee60641c01d2cb1bf37fbe5fe175cb826" - integrity sha512-+6D4/2IVal8Gfzu7iZS0ZJgL5cMes0gES+uK9D8I4rlMjPQ779N/rXYMe42mGQZbZuRpoqwSq6VLQx3Gr3SkLQ== +"@mui/x-license@7.23.5": + version "7.23.5" + resolved "https://registry.npmjs.org/@mui/x-license/-/x-license-7.23.5.tgz" + integrity sha512-4jGm/XMjeQPnnK8TmH5Y/5JAM9cDh0FzaHSw2oP5X+vJxleVnmfpHOaP2iyJrE3FCDAkhP+ozJ3pgZncqWXQpA== dependencies: "@babel/runtime" "^7.25.7" - "@mui/utils" "^5.16.6 || ^6.0.0 || ^7.0.0" - "@mui/x-internals" "7.29.0" + "@mui/utils" "^5.16.6 || ^6.0.0" "@noble/hashes@1.4.0": version "1.4.0" resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== -"@nodable/entities@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@nodable/entities/-/entities-2.1.0.tgz#f543e5c6446720d4cf9e498a83019dd159973bc2" - integrity sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA== +"@nodable/entities@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@nodable/entities/-/entities-2.2.0.tgz#a1d45a992b022591b1c2b03a77935c939375b642" + integrity sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -3044,6 +3022,95 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@parcel/watcher-android-arm64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz#5f32e0dba356f4ac9a11068d2a5c134ca3ba6564" + integrity sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A== + +"@parcel/watcher-darwin-arm64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz#88d3e720b59b1eceffce98dac46d7c40e8be5e8e" + integrity sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA== + +"@parcel/watcher-darwin-x64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz#bf05d76a78bc15974f15ec3671848698b0838063" + integrity sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg== + +"@parcel/watcher-freebsd-x64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz#8bc26e9848e7303ac82922a5ae1b1ef1bdb48a53" + integrity sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng== + +"@parcel/watcher-linux-arm-glibc@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz#1328fee1deb0c2d7865079ef53a2ba4cc2f8b40a" + integrity sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ== + +"@parcel/watcher-linux-arm-musl@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz#bad0f45cb3e2157746db8b9d22db6a125711f152" + integrity sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg== + +"@parcel/watcher-linux-arm64-glibc@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz#b75913fbd501d9523c5f35d420957bf7d0204809" + integrity sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA== + +"@parcel/watcher-linux-arm64-musl@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz#da5621a6a576070c8c0de60dea8b46dc9c3827d4" + integrity sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA== + +"@parcel/watcher-linux-x64-glibc@2.5.6": + version "2.5.6" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz" + integrity sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ== + +"@parcel/watcher-linux-x64-musl@2.5.6": + version "2.5.6" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz" + integrity sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg== + +"@parcel/watcher-win32-arm64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz#caae3d3c7583ca0a7171e6bd142c34d20ea1691e" + integrity sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q== + +"@parcel/watcher-win32-ia32@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz#9ac922550896dfe47bfc5ae3be4f1bcaf8155d6d" + integrity sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g== + +"@parcel/watcher-win32-x64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz#73fdafba2e21c448f0e456bbe13178d8fe11739d" + integrity sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw== + +"@parcel/watcher@^2.4.1": + version "2.5.6" + resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz" + integrity sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ== + dependencies: + detect-libc "^2.0.3" + is-glob "^4.0.3" + node-addon-api "^7.0.0" + picomatch "^4.0.3" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.6" + "@parcel/watcher-darwin-arm64" "2.5.6" + "@parcel/watcher-darwin-x64" "2.5.6" + "@parcel/watcher-freebsd-x64" "2.5.6" + "@parcel/watcher-linux-arm-glibc" "2.5.6" + "@parcel/watcher-linux-arm-musl" "2.5.6" + "@parcel/watcher-linux-arm64-glibc" "2.5.6" + "@parcel/watcher-linux-arm64-musl" "2.5.6" + "@parcel/watcher-linux-x64-glibc" "2.5.6" + "@parcel/watcher-linux-x64-musl" "2.5.6" + "@parcel/watcher-win32-arm64" "2.5.6" + "@parcel/watcher-win32-ia32" "2.5.6" + "@parcel/watcher-win32-x64" "2.5.6" + "@peculiar/asn1-cms@^2.6.0", "@peculiar/asn1-cms@^2.6.1": version "2.6.1" resolved "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz" @@ -3212,16 +3279,23 @@ unbzip2-stream "^1.4.3" yargs "^17.7.2" -"@redocly/ajv@^8.11.0": - version "8.17.4" - resolved "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.17.4.tgz" - integrity sha512-BieiCML/IgP6x99HZByJSt7fJE4ipgzO7KAFss92Bs+PEI35BhY7vGIysFXLT+YmS7nHtQjZjhOQyPPEf7xGHA== +"@redocly/ajv@^8.11.0", "@redocly/ajv@^8.18.1": + version "8.18.3" + resolved "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.18.3.tgz" + integrity sha512-l42u0of3hY98sN2A+M4qTX1O/KrpgGH32Hu9kP2GtHyD5Dfqq86PKFLe5dwaD8DEnNmlOlll2BAmeEtf0DaySg== dependencies: fast-deep-equal "^3.1.3" fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" +"@redocly/config@^0.49.0": + version "0.49.0" + resolved "https://registry.npmjs.org/@redocly/config/-/config-0.49.0.tgz" + integrity sha512-OI/rpEffX3fKUuy+OuBHPRspRI/S30b9aiqxfZLMpSWZzDncEGPxSEP1O2LrBVshnDX4hLjVjLvCZ4YT85+1rw== + dependencies: + json-schema-to-ts "2.7.2" + "@redocly/config@^0.6.0": version "0.6.3" resolved "https://registry.npmjs.org/@redocly/config/-/config-0.6.3.tgz" @@ -3244,6 +3318,34 @@ pluralize "^8.0.0" yaml-ast-parser "0.0.43" +"@redocly/openapi-core@^2.25.2": + version "2.33.2" + resolved "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-2.33.2.tgz" + integrity sha512-gAxXAbvDxHyDJNQr7U11AUdBTPV4C9I4sDBdvKWpM3b7wctBUMvmEMwp9e1wiTxWpbmACA2V6P5nvtZryvIQsw== + dependencies: + "@redocly/ajv" "^8.18.1" + "@redocly/config" "^0.49.0" + ajv "npm:@redocly/ajv@8.18.1" + ajv-formats "^3.0.1" + colorette "^1.2.0" + js-levenshtein "^1.1.6" + js-yaml "^4.2.0" + picomatch "^4.0.4" + pluralize "^8.0.0" + yaml-ast-parser "0.0.43" + +"@reduxjs/toolkit@^2.8.2": + version "2.12.0" + resolved "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.12.0.tgz" + integrity sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw== + dependencies: + "@standard-schema/spec" "^1.0.0" + "@standard-schema/utils" "^0.3.0" + immer "^11.0.0" + redux "^5.0.1" + redux-thunk "^3.1.0" + reselect "^5.1.0" + "@sideway/address@^4.1.5": version "4.1.5" resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz" @@ -3285,6 +3387,16 @@ micromark-util-character "^1.1.0" micromark-util-symbol "^1.0.1" +"@standard-schema/spec@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz" + integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== + +"@standard-schema/utils@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz" + integrity sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g== + "@svgr/babel-plugin-add-jsx-attribute@8.0.0": version "8.0.0" resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz" @@ -3405,7 +3517,7 @@ "@trivago/prettier-plugin-sort-imports@^6.0.2": version "6.0.2" - resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-6.0.2.tgz#b30948c4d22a84f00ae9133bcabd0603de3c0261" + resolved "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-6.0.2.tgz" integrity sha512-3DgfkukFyC/sE/VuYjaUUWoFfuVjPK55vOFDsxD56XXynFMCZDYFogH2l/hDfOsQAm1myoU/1xByJ3tWqtulXA== dependencies: "@babel/generator" "^7.28.0" @@ -3671,22 +3783,6 @@ dependencies: "@types/ms" "*" -"@types/eslint-scope@^3.7.7": - version "3.7.7" - resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "9.6.1" - resolved "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz" - integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - "@types/estree-jsx@^1.0.0": version "1.0.5" resolved "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz" @@ -3700,9 +3796,9 @@ integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/estree@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" - integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + version "1.0.9" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" + integrity sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.33": version "4.19.8" @@ -3726,7 +3822,7 @@ "@types/format-util@^1.0.4": version "1.0.4" - resolved "https://registry.yarnpkg.com/@types/format-util/-/format-util-1.0.4.tgz#c4e3b556735149fdf047898a5b9c04650491509b" + resolved "https://registry.npmjs.org/@types/format-util/-/format-util-1.0.4.tgz" integrity sha512-xrCYOdHh5zA3LUrn6CvspYwlzSWxPso11Lx32WnAG6KvLCRecKZ/Rh21PLXUkzUFsQmrGcx/traJAFjR6dVS5Q== "@types/geojson@*": @@ -3736,7 +3832,7 @@ "@types/gtag.js@^0.0.20": version "0.0.20" - resolved "https://registry.yarnpkg.com/@types/gtag.js/-/gtag.js-0.0.20.tgz#e47edabb4ed5ecac90a079275958e6c929d7c08a" + resolved "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.20.tgz" integrity sha512-wwAbk3SA2QeU67unN7zPxjEHmPmlXwZXZvQEpbEUQuMCRGgKyE1m6XDuTUA9b6pCGb/GqJmdfMOY5LuDjJSbbg== "@types/hast@^2.0.0": @@ -3799,14 +3895,14 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.15", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/lodash@^4.17.24": version "4.17.24" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.24.tgz#4ae334fc62c0e915ca8ed8e35dcc6d4eeb29215f" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz" integrity sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ== "@types/mdast@^3.0.0": @@ -3860,16 +3956,11 @@ resolved "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz" integrity sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ== -"@types/prop-types@*": +"@types/prop-types@*", "@types/prop-types@^15.7.14": version "15.7.14" resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz" integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== -"@types/prop-types@^15.7.14", "@types/prop-types@^15.7.15": - version "15.7.15" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" - integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== - "@types/qs@*": version "6.14.0" resolved "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz" @@ -3989,6 +4080,11 @@ resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz" integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== +"@types/use-sync-external-store@^0.0.6": + version "0.0.6" + resolved "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz" + integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg== + "@types/ws@^8.5.10": version "8.18.1" resolved "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz" @@ -4022,7 +4118,7 @@ "@upsetjs/venn.js@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@upsetjs/venn.js/-/venn.js-2.0.0.tgz#3be192038cdda927aa4f8b22ab51af82abf47f34" + resolved "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz" integrity sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw== optionalDependencies: d3-selection "^3.0.0" @@ -4184,11 +4280,16 @@ acorn-walk@^8.0.0: dependencies: acorn "^8.11.0" -acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.15.0, acorn@^8.16.0, acorn@^8.8.2: +acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.15.0, acorn@^8.8.2: version "8.16.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz" integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== +acorn@^8.16.0: + version "8.17.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.17.0.tgz#1785adb84faf8d8add10369b93826fc2bd08f1fe" + integrity sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg== + address@^1.0.1: version "1.2.2" resolved "https://registry.npmjs.org/address/-/address-1.2.2.tgz" @@ -4207,13 +4308,25 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-formats@^2.1.1: +ajv-draft-04@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz" + integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== + +ajv-formats@2.1.1, ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" @@ -4227,19 +4340,29 @@ ajv-keywords@^5.1.0: fast-deep-equal "^3.1.3" ajv@^6.12.5: - version "6.14.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" - integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== + version "6.15.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.15.0.tgz#07e982c74626167aa7a2495c53817892d7139492" + integrity sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.9.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" - integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== +ajv@^8.0.0, ajv@^8.11.0, ajv@^8.9.0: + version "8.20.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.20.0.tgz#304b3636add88ba7d936760dd50ece006dea95f9" + integrity sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +"ajv@npm:@redocly/ajv@8.18.1": + version "8.18.1" + resolved "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.18.1.tgz" + integrity sha512-Ifm/pP/tul1qmAecpbVxCBluVE32rKfjf8gYXH4xI2gCv9mRWFhJMHzkPDM4TXlxwPQYIFegymlsy8lXz7optA== dependencies: fast-deep-equal "^3.1.3" fast-uri "^3.0.1" @@ -4247,31 +4370,38 @@ ajv@^8.0.0, ajv@^8.9.0: require-from-string "^2.0.2" algoliasearch-helper@^3.26.0: - version "3.27.1" - resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.27.1.tgz" - integrity sha512-XXGr02Cz285vLbqM6vPfb39xqV1ptpFr1xn9mqaW+nUvYTvFTdKgYTC/Cg1VzgRTQqNkq9+LlUVv8cfCeOoKig== + version "3.29.1" + resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.29.1.tgz" + integrity sha512-6ck2YFudF2Pje7szQoPBiRFTGfd+1I+0I/WfLPGn0bj1kvrFoOQmNyedNiDxTk3/r4IfSLDYk+RA4G7u8H6+yA== dependencies: "@algolia/events" "^4.0.1" algoliasearch@^5.37.0: - version "5.49.0" - resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.49.0.tgz" - integrity sha512-Tse7vx7WOvbU+kpq/L3BrBhSWTPbtMa59zIEhMn+Z2NoxZlpcCRUDCRxQ7kDFs1T3CHxDgvb+mDuILiBBpBaAA== - dependencies: - "@algolia/abtesting" "1.15.0" - "@algolia/client-abtesting" "5.49.0" - "@algolia/client-analytics" "5.49.0" - "@algolia/client-common" "5.49.0" - "@algolia/client-insights" "5.49.0" - "@algolia/client-personalization" "5.49.0" - "@algolia/client-query-suggestions" "5.49.0" - "@algolia/client-search" "5.49.0" - "@algolia/ingestion" "1.49.0" - "@algolia/monitoring" "1.49.0" - "@algolia/recommend" "5.49.0" - "@algolia/requester-browser-xhr" "5.49.0" - "@algolia/requester-fetch" "5.49.0" - "@algolia/requester-node-http" "5.49.0" + version "5.55.0" + resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.55.0.tgz" + integrity sha512-af+rI+tUVeS9KWHPAZQHIHPOIC3StPRR6IwQu2nz1aQoTL6Gs5Ty3KsHCgbXMHOpoh9QqSjq8F3KJ8xmaCZSBA== + dependencies: + "@algolia/abtesting" "1.21.0" + "@algolia/client-abtesting" "5.55.0" + "@algolia/client-analytics" "5.55.0" + "@algolia/client-common" "5.55.0" + "@algolia/client-insights" "5.55.0" + "@algolia/client-personalization" "5.55.0" + "@algolia/client-query-suggestions" "5.55.0" + "@algolia/client-search" "5.55.0" + "@algolia/ingestion" "1.55.0" + "@algolia/monitoring" "1.55.0" + "@algolia/recommend" "5.55.0" + "@algolia/requester-browser-xhr" "5.55.0" + "@algolia/requester-fetch" "5.55.0" + "@algolia/requester-node-http" "5.55.0" + +allof-merge@^0.6.6: + version "0.6.8" + resolved "https://registry.npmjs.org/allof-merge/-/allof-merge-0.6.8.tgz" + integrity sha512-RJrHVDqITsU1kjE2L7s1hy4AYZSTlO1m9jTleYhVCEOfOpbbygRGfcEgrp+bW3oX/PcMUwVkt6MSJyXoyI6lRA== + dependencies: + json-crawl "^0.5.3" ansi-align@^3.0.1: version "3.0.1" @@ -4280,13 +4410,6 @@ ansi-align@^3.0.1: dependencies: string-width "^4.1.0" -ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" @@ -4297,9 +4420,14 @@ ansi-regex@^5.0.1: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1, ansi-regex@^6.2.2: +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +ansi-regex@^6.2.2: version "6.2.2" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz" integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== ansi-styles@^4.0.0, ansi-styles@^4.1.0: @@ -4314,6 +4442,16 @@ ansi-styles@^6.1.0: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +ansis@^3.2.0: + version "3.17.0" + resolved "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz" + integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" @@ -4322,6 +4460,11 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +anynum@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/anynum/-/anynum-1.0.0.tgz#afe3f3a78c6621fbdf1e107154fac01eef711cc5" + integrity sha512-xjR9/zBVnUOP6ztMIIgShjsxui80nQUQH+5xJnvrYLs+90bF25/KJqaAi8mk+B4RDtX1Nspi6fmp4YTEts8SfA== + arg@^5.0.0: version "5.0.2" resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" @@ -4346,7 +4489,7 @@ array-flatten@1.1.1: array-timsort@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926" + resolved "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz" integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== array-union@^2.1.0: @@ -4375,13 +4518,18 @@ astring@^1.8.0: resolved "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz" integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg== +async@3.2.6, async@^3.2.2: + version "3.2.6" + resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + autoprefixer@^10.4.19, autoprefixer@^10.4.23: - version "10.4.24" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz" - integrity sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw== + version "10.5.0" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz" + integrity sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong== dependencies: - browserslist "^4.28.1" - caniuse-lite "^1.0.30001766" + browserslist "^4.28.2" + caniuse-lite "^1.0.30001787" fraction.js "^5.3.4" picocolors "^1.1.1" postcss-value-parser "^4.2.0" @@ -4416,12 +4564,12 @@ babel-plugin-macros@^3.1.0: resolve "^1.19.0" babel-plugin-polyfill-corejs2@^0.4.14, babel-plugin-polyfill-corejs2@^0.4.15: - version "0.4.15" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz" - integrity sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw== + version "0.4.17" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz" + integrity sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w== dependencies: "@babel/compat-data" "^7.28.6" - "@babel/helper-define-polyfill-provider" "^0.6.6" + "@babel/helper-define-polyfill-provider" "^0.6.8" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.13.0: @@ -4433,19 +4581,19 @@ babel-plugin-polyfill-corejs3@^0.13.0: core-js-compat "^3.43.0" babel-plugin-polyfill-corejs3@^0.14.0: - version "0.14.0" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz" - integrity sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ== + version "0.14.2" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz" + integrity sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.6" + "@babel/helper-define-polyfill-provider" "^0.6.8" core-js-compat "^3.48.0" babel-plugin-polyfill-regenerator@^0.6.5, babel-plugin-polyfill-regenerator@^0.6.6: - version "0.6.6" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz" - integrity sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A== + version "0.6.8" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz" + integrity sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.6" + "@babel/helper-define-polyfill-provider" "^0.6.8" bail@^2.0.0: version "2.0.2" @@ -4457,19 +4605,14 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -bare-events@^2.2.0: - version "2.5.0" - resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz" - integrity sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A== - -bare-events@^2.5.4, bare-events@^2.7.0: +bare-events@^2.2.0, bare-events@^2.5.4, bare-events@^2.7.0: version "2.8.2" - resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.8.2.tgz#7b3e10bd8e1fc80daf38bb516921678f566ab89f" + resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz" integrity sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ== bare-fs@^4.0.1: version "4.5.4" - resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.5.4.tgz#15d6c23eadefbdba48219c501a140ffc167469cf" + resolved "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.4.tgz" integrity sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA== dependencies: bare-events "^2.5.4" @@ -4480,19 +4623,19 @@ bare-fs@^4.0.1: bare-os@^3.0.1: version "3.7.0" - resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-3.7.0.tgz#23c60064e53400db1550ef4b2987fdc42ee399b2" + resolved "https://registry.npmjs.org/bare-os/-/bare-os-3.7.0.tgz" integrity sha512-64Rcwj8qlnTZU8Ps6JJEdSmxBEUGgI7g8l+lMtsJLl4IsfTcHMTfJ188u2iGV6P6YPRZrtv72B2kjn+hp+Yv3g== bare-path@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-3.0.0.tgz#b59d18130ba52a6af9276db3e96a2e3d3ea52178" + resolved "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz" integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw== dependencies: bare-os "^3.0.1" bare-stream@^2.6.4: version "2.8.0" - resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.8.0.tgz#3ac6141a65d097fd2bf6e472c848c5d800d47df9" + resolved "https://registry.npmjs.org/bare-stream/-/bare-stream-2.8.0.tgz" integrity sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA== dependencies: streamx "^2.21.0" @@ -4500,7 +4643,7 @@ bare-stream@^2.6.4: bare-url@^2.2.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/bare-url/-/bare-url-2.3.2.tgz#4aef382efa662b2180a6fe4ca07a71b39bdf7ca3" + resolved "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz" integrity sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw== dependencies: bare-path "^3.0.0" @@ -4510,10 +4653,10 @@ base64-js@^1.3.1: resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -baseline-browser-mapping@^2.9.0: - version "2.10.0" - resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz" - integrity sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA== +baseline-browser-mapping@^2.10.12: + version "2.10.37" + resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.37.tgz" + integrity sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig== basic-ftp@^5.0.2: version "5.3.1" @@ -4595,17 +4738,17 @@ boxen@^7.0.0: wrap-ansi "^8.1.0" brace-expansion@^1.1.7: - version "1.1.13" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.13.tgz#d37875c01dc9eff988dd49d112a57cb67b54efe6" - integrity sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w== + version "1.1.15" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz" + integrity sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" brace-expansion@^2.0.1, brace-expansion@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.3.tgz#0493338bdd58e319b1039c67cf7ee439892c01d9" - integrity sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA== + version "2.0.2" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" @@ -4616,16 +4759,16 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.28.1: - version "4.28.1" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz" - integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== +browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.28.1, browserslist@^4.28.2: + version "4.28.2" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz" + integrity sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg== dependencies: - baseline-browser-mapping "^2.9.0" - caniuse-lite "^1.0.30001759" - electron-to-chromium "^1.5.263" - node-releases "^2.0.27" - update-browserslist-db "^1.2.0" + baseline-browser-mapping "^2.10.12" + caniuse-lite "^1.0.30001782" + electron-to-chromium "^1.5.328" + node-releases "^2.0.36" + update-browserslist-db "^1.2.3" buffer-crc32@~0.2.3: version "0.2.13" @@ -4645,6 +4788,14 @@ buffer@^5.2.1: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + bundle-name@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz" @@ -4685,7 +4836,7 @@ cacheable-request@^10.2.8: normalize-url "^8.0.0" responselike "^3.0.0" -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== @@ -4694,13 +4845,13 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- function-bind "^1.1.2" call-bind@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + version "1.0.9" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz" + integrity sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ== dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + get-intrinsic "^1.3.0" set-function-length "^1.2.2" call-bound@^1.0.2, call-bound@^1.0.3: @@ -4754,10 +4905,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001766: - version "1.0.30001770" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz" - integrity sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001782, caniuse-lite@^1.0.30001787: + version "1.0.30001799" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz" + integrity sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw== ccount@^2.0.0: version "2.0.1" @@ -4766,7 +4917,7 @@ ccount@^2.0.0: chalk-template@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-1.1.2.tgz#88ff13e75a333d232304e13abc48c5b5be15f1ce" + resolved "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.2.tgz" integrity sha512-2bxTP2yUH7AJj/VAXfcA+4IcWGdQ87HwBANLt5XxGTeomo8yG0y95N1um9i5StvhT/Bl0/2cARA5v1PpPXUxUA== dependencies: chalk "^5.2.0" @@ -4779,9 +4930,14 @@ chalk@^4.0.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.1, chalk@^5.2.0, chalk@^5.6.2: +chalk@^5.0.1, chalk@^5.2.0: + version "5.4.1" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz" + integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== + +chalk@^5.6.2: version "5.6.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz" integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== char-regex@^1.0.2: @@ -4809,6 +4965,11 @@ character-reference-invalid@^2.0.0: resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz" integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== +charset@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz" + integrity sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg== + cheerio-select@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" @@ -4834,25 +4995,6 @@ cheerio@1.0.0-rc.12: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" -chevrotain-allstar@~0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz" - integrity sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw== - dependencies: - lodash-es "^4.17.21" - -chevrotain@~11.1.1: - version "11.1.1" - resolved "https://registry.npmjs.org/chevrotain/-/chevrotain-11.1.1.tgz" - integrity sha512-f0yv5CPKaFxfsPTBzX7vGuim4oIC1/gcS7LUGdBSwl2dU6+FON6LVUksdOo1qJjoUvXNn45urgh8C+0a24pACQ== - dependencies: - "@chevrotain/cst-dts-gen" "11.1.1" - "@chevrotain/gast" "11.1.1" - "@chevrotain/regexp-to-ast" "11.1.1" - "@chevrotain/types" "11.1.1" - "@chevrotain/utils" "11.1.1" - lodash-es "4.17.23" - chokidar@^3.5.3, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" @@ -4868,6 +5010,13 @@ chokidar@^3.5.3, chokidar@^3.6.0: optionalDependencies: fsevents "~2.3.2" +chokidar@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz" + integrity sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw== + dependencies: + readdirp "^5.0.0" + chrome-trace-event@^1.0.2: version "1.0.4" resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz" @@ -4988,6 +5137,11 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== +commander@2.20.3, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@7, commander@^7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" @@ -5000,13 +5154,13 @@ commander@^10.0.0: commander@^14.0.3: version "14.0.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + resolved "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz" integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== commander@^5.1.0: version "5.1.0" @@ -5018,10 +5172,10 @@ commander@^8.3.0: resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -comment-json@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-4.6.2.tgz#235d8a908e211855b0068248a794afddb87670af" - integrity sha512-R2rze/hDX30uul4NZoIZ76ImSJLFxn/1/ZxtKC1L77y2X1k+yYu1joKbAtMA2Fg3hZrTOiw0I5mwVMo0cf250w== +comment-json@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/comment-json/-/comment-json-5.0.0.tgz" + integrity sha512-uiqLcOiVDJtBP8WGkZHEP+FZIhTzP1dxvn59EfoYUi9gqupjrBWVQkO2atDrbnKPwLeotFYDsuNb26uBMqB+hw== dependencies: array-timsort "^1.0.3" esprima "^4.0.1" @@ -5051,6 +5205,25 @@ compression@^1.8.1: safe-buffer "5.2.1" vary "~1.1.2" +compute-gcd@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz" + integrity sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg== + dependencies: + validate.io-array "^1.0.3" + validate.io-function "^1.0.2" + validate.io-integer-array "^1.0.0" + +compute-lcm@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz" + integrity sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ== + dependencies: + compute-gcd "^1.2.1" + validate.io-array "^1.0.3" + validate.io-function "^1.0.2" + validate.io-integer-array "^1.0.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" @@ -5129,7 +5302,7 @@ cookie@~0.7.1: copy-text-to-clipboard@^3.2.0: version "3.2.2" - resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz#99bc79db3f2d355ec33a08d573aff6804491ddb9" + resolved "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz" integrity sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A== copy-webpack-plugin@^11.0.0: @@ -5145,9 +5318,9 @@ copy-webpack-plugin@^11.0.0: serialize-javascript "^6.0.0" core-js-compat@^3.43.0, core-js-compat@^3.48.0: - version "3.48.0" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz" - integrity sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q== + version "3.49.0" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz" + integrity sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA== dependencies: browserslist "^4.28.1" @@ -5215,6 +5388,11 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + crypto-random-string@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz" @@ -5222,81 +5400,81 @@ crypto-random-string@^4.0.0: dependencies: type-fest "^1.0.1" -cspell-config-lib@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/cspell-config-lib/-/cspell-config-lib-10.0.0.tgz#3e698d56b5ecbafbd1c949f717d5615cef837529" - integrity sha512-HWK7SRnJ3N/kOThw/uzmXmQYCzBxu58Jkq2hHyte1voDl118BeNFoaNRWMpYdHbBi3kCj8gaZu8wGtm+Zmdhxw== +cspell-config-lib@10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-10.0.1.tgz" + integrity sha512-hMpo/0j6k7pbiqrLDOLJKD2IGP9XwhjKf2miiM6p84Xeo4nyuFZaxxDCQ68R851HSYFrrdltgpoipMbj1h2Tnw== dependencies: - "@cspell/cspell-types" "10.0.0" - comment-json "^4.6.2" + "@cspell/cspell-types" "10.0.1" + comment-json "^5.0.0" smol-toml "^1.6.1" - yaml "^2.8.3" + yaml "^2.9.0" -cspell-dictionary@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/cspell-dictionary/-/cspell-dictionary-10.0.0.tgz#1031ccffae2be13b9649a5c17db324b6e93fac1a" - integrity sha512-KubSoEAJO+77KPSSWjoLCz0+MIWVNq3joGTSyxucAZrBSJD64Y1O4BHHr1aj6XHIZwXhWWNScQlrQR3OcIulng== +cspell-dictionary@10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-10.0.1.tgz" + integrity sha512-3cZ659vgsZWkzGQJR/sNqGDVt/OnvTSieLKI76V++4t1bHJfochb9ZrrwsuMsb1VPGiyqClUP1/O6WrefF/FVg== dependencies: - "@cspell/cspell-performance-monitor" "10.0.0" - "@cspell/cspell-pipe" "10.0.0" - "@cspell/cspell-types" "10.0.0" - cspell-trie-lib "10.0.0" + "@cspell/cspell-performance-monitor" "10.0.1" + "@cspell/cspell-pipe" "10.0.1" + "@cspell/cspell-types" "10.0.1" + cspell-trie-lib "10.0.1" fast-equals "^6.0.0" -cspell-gitignore@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-10.0.0.tgz#c28495fda9d191989b5f5c53c3857c619bdc5628" - integrity sha512-55XLH9Y52eR7QgyV28Uaw8V9cN1YZ3PQIyrN9YBR4ndQNBKJxO9+jX1nwSspwnccCZiE/N+GGxFzRBb75JDSCw== +cspell-gitignore@10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-10.0.1.tgz" + integrity sha512-wN23U61Mx6qPJN3CesOmBU9vnbJ0jQm/ylK0iaVui3CcnO7Zzl5qLu5mPHUzGQGm8yso6qjyxqo16Ho7LpZGOQ== dependencies: - "@cspell/url" "10.0.0" - cspell-glob "10.0.0" - cspell-io "10.0.0" + "@cspell/url" "10.0.1" + cspell-glob "10.0.1" + cspell-io "10.0.1" -cspell-glob@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-10.0.0.tgz#c3c7716011a04fbc2d3cd06846fbbb57cc3617ec" - integrity sha512-bXS35fMcA9X7GEkfnWBfoPd/vTnxxfXW+YHt6tWxu5fejfs00qUbjWp1oLC9FxRaXWxIkfsYp2mi1k1jYl4RVw== +cspell-glob@10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/cspell-glob/-/cspell-glob-10.0.1.tgz" + integrity sha512-7bII9J3aSSpZDwhx7w+zfQXbMxHZQ3be0ilUp5bHrsjz6o07v/NqOHMGcwKdPn1sw2dxDz9sv057xE5pqXnSdw== dependencies: - "@cspell/url" "10.0.0" + "@cspell/url" "10.0.1" picomatch "^4.0.4" -cspell-grammar@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/cspell-grammar/-/cspell-grammar-10.0.0.tgz#1c4f757dd2c0f2226d26c63a940e1bee1092fa57" - integrity sha512-49udtYzkcCYEIDJbFOb4IwiAJebOYZnYvG6o6Ep19Tq0Xwjk7i4vxUprNiFNDCWFbcbJRPE9cpwQUVwp5WFGLw== +cspell-grammar@10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-10.0.1.tgz" + integrity sha512-xC9AFYmaI9wsO//a7S5tdDGKGJVD5UEEsTg+Up2fi7lPfXIryisYmV6tePNL1SEg0idYss4ja8LUZ3Mib09BjQ== dependencies: - "@cspell/cspell-pipe" "10.0.0" - "@cspell/cspell-types" "10.0.0" + "@cspell/cspell-pipe" "10.0.1" + "@cspell/cspell-types" "10.0.1" -cspell-io@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-10.0.0.tgz#daf589f30d593f69e5ce2113c895366194e931ea" - integrity sha512-NQCAUhx9DwKApxPuFl7EK1K1XSaQEAPld45yjjwv93xF8rJkEGkgzOwjbqafwAD20eKYv1a7oj/9EC0S5jETSw== +cspell-io@10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/cspell-io/-/cspell-io-10.0.1.tgz" + integrity sha512-8C2ka07faxflnaqEBO3pektS21XViE/SEHT7F5ZD1ou7FyMR5u3xawTBJSczClfsxLt/WYeztBYrpmGAjmjksw== dependencies: - "@cspell/cspell-service-bus" "10.0.0" - "@cspell/url" "10.0.0" + "@cspell/cspell-service-bus" "10.0.1" + "@cspell/url" "10.0.1" -cspell-lib@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-10.0.0.tgz#10dc60c5060c38f7d9c2ba24cca3181b99610956" - integrity sha512-PowW6JEjuv/F2aFEirZvBxpzHdchOnpsUJbeIcFcai0++taLTbHQObROBEBf7e0S8DnHpVD5TZkqrTME5e44wg== - dependencies: - "@cspell/cspell-bundled-dicts" "10.0.0" - "@cspell/cspell-performance-monitor" "10.0.0" - "@cspell/cspell-pipe" "10.0.0" - "@cspell/cspell-resolver" "10.0.0" - "@cspell/cspell-types" "10.0.0" - "@cspell/dynamic-import" "10.0.0" - "@cspell/filetypes" "10.0.0" - "@cspell/rpc" "10.0.0" - "@cspell/strong-weak-map" "10.0.0" - "@cspell/url" "10.0.0" - cspell-config-lib "10.0.0" - cspell-dictionary "10.0.0" - cspell-glob "10.0.0" - cspell-grammar "10.0.0" - cspell-io "10.0.0" - cspell-trie-lib "10.0.0" +cspell-lib@10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/cspell-lib/-/cspell-lib-10.0.1.tgz" + integrity sha512-RpsIPiLzc4/YMW8BMRKpyJ81x439qjYWcqgdKeXnMkbKM88J9PexzutfFf/4v97v96KzfNitEzMpbI0uj8OeUg== + dependencies: + "@cspell/cspell-bundled-dicts" "10.0.1" + "@cspell/cspell-performance-monitor" "10.0.1" + "@cspell/cspell-pipe" "10.0.1" + "@cspell/cspell-resolver" "10.0.1" + "@cspell/cspell-types" "10.0.1" + "@cspell/dynamic-import" "10.0.1" + "@cspell/filetypes" "10.0.1" + "@cspell/rpc" "10.0.1" + "@cspell/strong-weak-map" "10.0.1" + "@cspell/url" "10.0.1" + cspell-config-lib "10.0.1" + cspell-dictionary "10.0.1" + cspell-glob "10.0.1" + cspell-grammar "10.0.1" + cspell-io "10.0.1" + cspell-trie-lib "10.0.1" env-paths "^4.0.0" gensequence "^8.0.8" import-fresh "^4.0.0" @@ -5305,37 +5483,37 @@ cspell-lib@10.0.0: vscode-uri "^3.1.0" xdg-basedir "^5.1.0" -cspell-trie-lib@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-10.0.0.tgz#545ef69c8393403d2e2130a0d893bd165c48c098" - integrity sha512-R8qrMx10E/bm3Lecslwxn9XYo5NzSRK1rtandEX5n9UmEYHoBXjZELkg5+TOnV8VgrVaJSK57XtcGrbKp/4kSg== +cspell-trie-lib@10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-10.0.1.tgz" + integrity sha512-BFvhalSkRQFjKrZ//FKK7fRGrZFpifnxB5AwCkzsIsBZqicsfafcQ1xP21qpb0QqyV/IomjNgviG+tRJs+0rMw== cspell@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/cspell/-/cspell-10.0.0.tgz#952b1204f98f5cb64b56de1c4217d1baf17209d7" - integrity sha512-R25gsSR1SLlcGyw48fwJwp0PjXrVdl7RDO/Dm5+s4DvC1uQSlyiUxsr/8ZtbyC/MPeUJFQN9B4luqLlSm0WelQ== - dependencies: - "@cspell/cspell-json-reporter" "10.0.0" - "@cspell/cspell-performance-monitor" "10.0.0" - "@cspell/cspell-pipe" "10.0.0" - "@cspell/cspell-types" "10.0.0" - "@cspell/cspell-worker" "10.0.0" - "@cspell/dynamic-import" "10.0.0" - "@cspell/url" "10.0.0" + version "10.0.1" + resolved "https://registry.npmjs.org/cspell/-/cspell-10.0.1.tgz" + integrity sha512-Gg6w/flT3fKfl3la62hfTnhtNnDQ+9mU7kUhVqw/axl/Ms4oENw0oJMkWFIoj4f6nL/SDPz7KcPXd2XbkKFNmQ== + dependencies: + "@cspell/cspell-json-reporter" "10.0.1" + "@cspell/cspell-performance-monitor" "10.0.1" + "@cspell/cspell-pipe" "10.0.1" + "@cspell/cspell-types" "10.0.1" + "@cspell/cspell-worker" "10.0.1" + "@cspell/dynamic-import" "10.0.1" + "@cspell/url" "10.0.1" ansi-regex "^6.2.2" chalk "^5.6.2" chalk-template "^1.1.2" commander "^14.0.3" - cspell-config-lib "10.0.0" - cspell-dictionary "10.0.0" - cspell-gitignore "10.0.0" - cspell-glob "10.0.0" - cspell-io "10.0.0" - cspell-lib "10.0.0" + cspell-config-lib "10.0.1" + cspell-dictionary "10.0.1" + cspell-gitignore "10.0.1" + cspell-glob "10.0.1" + cspell-io "10.0.1" + cspell-lib "10.0.1" fast-json-stable-stringify "^2.1.0" flatted "^3.4.2" - semver "^7.7.4" - tinyglobby "^0.2.15" + semver "^7.8.1" + tinyglobby "^0.2.16" css-blank-pseudo@^7.0.1: version "7.0.1" @@ -5350,9 +5528,9 @@ css-color-keywords@^1.0.0: integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== css-declaration-sorter@^7.2.0: - version "7.3.1" - resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz" - integrity sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA== + version "7.4.0" + resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz" + integrity sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw== css-has-pseudo@^7.0.3: version "7.0.3" @@ -5447,9 +5625,9 @@ css-what@^6.0.1, css-what@^6.1.0: integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssdb@^8.6.0: - version "8.7.1" - resolved "https://registry.npmjs.org/cssdb/-/cssdb-8.7.1.tgz" - integrity sha512-+F6LKx48RrdGOtE4DT5jz7Uo+VeyKXpK797FAevIkzjV8bMHz6xTO5F7gNDcRCHmPgD5jj2g6QCsY9zmVrh38A== + version "8.9.0" + resolved "https://registry.npmjs.org/cssdb/-/cssdb-8.9.0.tgz" + integrity sha512-J8jOU/hLjaXcO1LldOLraJSQpfLXRKof0I7mtbRyOy2AAXgqst0x9rlgi2qXeD6d0ou3ZLqcPAMqYVbpCbrxEw== cssesc@^3.0.0: version "3.0.0" @@ -5545,9 +5723,9 @@ cytoscape-fcose@^2.2.0: cose-base "^2.2.0" cytoscape@^3.33.1: - version "3.33.2" - resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.33.2.tgz#3a58906b4002b7c237f54dfc9b971983757da791" - integrity sha512-sj4HXd3DokGhzZAdjDejGvTPLqlt84vNFN8m7bGsOzDY5DyVcxIb2ejIXat2Iy7HxWhdT/N1oKyheJ5YdpsGuw== + version "3.33.1" + resolved "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz" + integrity sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ== "d3-array@1 - 2": version "2.12.1" @@ -5822,7 +6000,7 @@ d3@^7.9.0: dagre-d3-es@7.0.14: version "7.0.14" - resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz#1272276e26457cf3b97dac569f8f0531ec33c377" + resolved "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz" integrity sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg== dependencies: d3 "^7.9.0" @@ -5834,9 +6012,9 @@ data-uri-to-buffer@^6.0.2: integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== dayjs@^1.11.19: - version "1.11.20" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.20.tgz#88d919fd639dc991415da5f4cb6f1b6650811938" - integrity sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ== + version "1.11.19" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz" + integrity sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw== debounce@^1.2.1: version "1.2.1" @@ -5942,9 +6120,9 @@ degenerator@^5.0.0: esprima "^4.0.1" delaunator@5: - version "5.0.1" - resolved "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz" - integrity sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw== + version "5.1.0" + resolved "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz" + integrity sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ== dependencies: robust-predicates "^3.0.2" @@ -5968,11 +6146,23 @@ destroy@1.2.0, destroy@~1.2.0: resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== +detect-package-manager@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-3.0.2.tgz" + integrity sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ== + dependencies: + execa "^5.1.1" + detect-port@^1.5.1: version "1.6.1" resolved "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz" @@ -5994,9 +6184,9 @@ devtools-protocol@0.0.1312386: integrity sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA== diff@>=5.2.2, diff@^5.0.0: - version "8.0.4" - resolved "https://registry.yarnpkg.com/diff/-/diff-8.0.4.tgz#4f5baf3188b9b2431117b962eb20ba330fadf696" - integrity sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw== + version "9.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-9.0.0.tgz#297c31cd7c280f13dfe335791ec2063bd4a73a6f" + integrity sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw== dir-glob@^3.0.1: version "3.0.1" @@ -6019,12 +6209,33 @@ docusaurus-gtm-plugin@^0.0.2: docusaurus-plugin-image-zoom@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/docusaurus-plugin-image-zoom/-/docusaurus-plugin-image-zoom-3.0.1.tgz#76095fdc288b58d351d19bf902bd3c0a3113ec09" + resolved "https://registry.npmjs.org/docusaurus-plugin-image-zoom/-/docusaurus-plugin-image-zoom-3.0.1.tgz" integrity sha512-mQrqA99VpoMQJNbi02qkWAMVNC4+kwc6zLLMNzraHAJlwn+HrlUmZSEDcTwgn+H4herYNxHKxveE2WsYy73eGw== dependencies: medium-zoom "^1.1.0" validate-peer-dependencies "^2.2.0" +docusaurus-plugin-openapi-docs@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/docusaurus-plugin-openapi-docs/-/docusaurus-plugin-openapi-docs-5.0.2.tgz" + integrity sha512-WCC2m6PpylXZfNga+ScelTG0a7jUGtbB9+AmbR9lUj93FPryTs8VHTMJ3fKtO0senJTWgOU3MDvZw0v+mE3ztA== + dependencies: + "@apidevtools/json-schema-ref-parser" "^15.3.3" + "@redocly/openapi-core" "^2.25.2" + allof-merge "^0.6.6" + chalk "^5.6.2" + clsx "^2.1.1" + fs-extra "^11.3.0" + json-pointer "^0.6.2" + json5 "^2.2.3" + lodash "^4.17.21" + mustache "^4.2.0" + openapi-to-postmanv2 "^6.0.0" + postman-collection "^5.0.2" + slugify "^1.6.6" + swagger2openapi "^7.0.8" + xml-formatter "^3.6.6" + docusaurus-plugin-redoc@2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/docusaurus-plugin-redoc/-/docusaurus-plugin-redoc-2.5.0.tgz" @@ -6038,6 +6249,40 @@ docusaurus-pushfeedback@^1.0.5: resolved "https://registry.npmjs.org/docusaurus-pushfeedback/-/docusaurus-pushfeedback-1.0.9.tgz" integrity sha512-StGUlkRUHwYiswxBK06FtfwgTE2xDVwEoxFnIF6yifb/85rjrBo6GlmZLxnESekSrjH33RxIM3VBJQAPe7yuNg== +docusaurus-theme-openapi-docs@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/docusaurus-theme-openapi-docs/-/docusaurus-theme-openapi-docs-5.0.2.tgz" + integrity sha512-BD6WhbunR6kXqtoUUDlhxO4HlCNM2nYENGr/TbiTEknkgXYKQz+FEIhY4Hyz5GSLpuhPih0CDuNl7Xkfpcz0Yw== + dependencies: + "@hookform/error-message" "^2.0.1" + "@reduxjs/toolkit" "^2.8.2" + allof-merge "^0.6.6" + buffer "^6.0.3" + clsx "^2.1.1" + copy-text-to-clipboard "^3.2.0" + crypto-js "^4.2.0" + file-saver "^2.0.5" + lodash "^4.17.21" + pako "^2.1.0" + path-browserify "^1.0.1" + postman-code-generators "^2.0.0" + postman-collection "^5.0.2" + prism-react-renderer "^2.4.1" + process "^0.11.10" + react-hook-form "^7.59.0" + react-live "^4.1.8" + react-magic-dropzone "^1.0.1" + react-markdown "^10.1.0" + react-modal "^3.16.3" + react-redux "^9.2.0" + rehype-raw "^7.0.0" + remark-gfm "4.0.1" + sass "^1.89.2" + sass-loader "^16.0.5" + unist-util-visit "^5.0.0" + url "^0.11.4" + xml-formatter "^3.6.6" + docusaurus-theme-redoc@2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/docusaurus-theme-redoc/-/docusaurus-theme-redoc-2.5.0.tgz" @@ -6105,9 +6350,9 @@ domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" dompurify@>=3.3.2, dompurify@^3.0.6, dompurify@^3.3.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.2.tgz#f0ff81be682c485505097ba8195a058d8f575218" - integrity sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA== + version "3.4.10" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.10.tgz#96704295b4d8aeefcc8c7a90caa579b0ad69e46a" + integrity sha512-0xzNv0e7oYC6yyuOGZIABPM4qtg3QxLFniDNPP4ZP90wR8Yq3zgwpRbrNiT4N3IKqDbbYFEJLV+JWEs19aZ//w== optionalDependencies: "@types/trusted-types" "^2.0.7" @@ -6146,7 +6391,7 @@ dot-prop@^6.0.1: dotenv@^17.4.2: version "17.4.2" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.4.2.tgz#c07e54a746e11eba021dd9e1047ced5afdc1c034" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz" integrity sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw== dunder-proto@^1.0.1: @@ -6173,10 +6418,10 @@ ee-first@1.1.1: resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.263: - version "1.5.286" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz" - integrity sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A== +electron-to-chromium@^1.5.328: + version "1.5.374" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.374.tgz" + integrity sha512-HCF5i7izveksHSGqa7mhDh6tr3Uz9Dar2RAjwuh69bw3QGPVObjQIgLwQWeO/Rxp9/r0KdboKy9RbpQDl97fjg== emoji-regex@^8.0.0: version "8.0.0" @@ -6215,13 +6460,13 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.20.0: - version "5.20.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz#eeeb3966bea62c348c40a0cc9e7912e2557d0be0" - integrity sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA== +enhanced-resolve@^5.22.0: + version "5.24.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.24.0.tgz#cf14b9768a774cb6a5087220c0dc6e55df6ec35a" + integrity sha512-SkE2t82KlkkxQRVMVLAGKxLfORGQfrkx5dkj+vlgXRVNEdPc4eZcR+J/Fvj8C+yKSFH5L0q3NFlyufOVQnCcYQ== dependencies: graceful-fs "^4.2.4" - tapable "^2.3.0" + tapable "^2.3.3" entities@^2.0.0: version "2.2.0" @@ -6240,7 +6485,7 @@ env-paths@^2.2.1: env-paths@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-4.0.0.tgz#d0bb1f84a81d2542581bf7b7e8085d0683b39097" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-4.0.0.tgz" integrity sha512-pxP8eL2SwwaTRi/KHYwLYXinDs7gL3jxFcBYmEdYfZmZXbaVDvdppd0XBU8qVz03rDfKZMXg1omHCbsJjZrMsw== dependencies: is-safe-filename "^0.1.0" @@ -6262,10 +6507,10 @@ es-errors@^1.3.0: resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-module-lexer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" - integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== +es-module-lexer@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.1.0.tgz#1dfcbb5ea3bbfb63f28e1fc3676c3676d1c9624c" + integrity sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" @@ -6274,6 +6519,11 @@ es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: dependencies: es-errors "^1.3.0" +es-toolkit@^1.45.1: + version "1.47.1" + resolved "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.47.1.tgz" + integrity sha512-5RAqEwf4P4E17p+W75KLOWw/nOvKZzSQpxM32IpI2KZLaVonjTrZ0Ai5ghMaVI9eKC2p8eoQgcBdkEDgzFk6+Q== + es6-promise@^3.2.1: version "3.3.1" resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz" @@ -6314,11 +6564,6 @@ escape-html@^1.0.3, escape-html@~1.0.3: resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" @@ -6495,7 +6740,7 @@ eventemitter3@^5.0.1: events-universal@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/events-universal/-/events-universal-1.0.1.tgz#b56a84fd611b6610e0a2d0f09f80fdf931e2dfe6" + resolved "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz" integrity sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw== dependencies: bare-events "^2.7.0" @@ -6520,6 +6765,11 @@ execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +exenv@^1.2.0: + version "1.2.2" + resolved "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz" + integrity sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw== + express@^4.22.1: version "4.22.1" resolved "https://registry.npmjs.org/express/-/express-4.22.1.tgz" @@ -6587,7 +6837,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: fast-equals@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-6.0.0.tgz#719dedd2e126668b857b5e9d24e112e4acb2649a" + resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-6.0.0.tgz" integrity sha512-PFhhIGgdM79r5Uztdj9Zb6Tt1zKafqVfdMGwVca1z5z6fbX7DmsySSuJd8HiP6I1j505DCS83cLxo5rmSNeVEA== fast-fifo@^1.2.0, fast-fifo@^1.3.2: @@ -6608,7 +6858,7 @@ fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-safe-stringify@^2.0.7: @@ -6616,12 +6866,12 @@ fast-safe-stringify@^2.0.7: resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== -fast-uri@^3.0.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.2.tgz#8af3d4fc9d3e71b11572cc2673b514a7d1a8c8ec" - integrity sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ== +fast-uri@>=3.1.2, fast-uri@^3.0.1: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-4.0.0.tgz#604091cf5d17247f25f7d79feff5543a9a67f4f2" + integrity sha512-l90y339r2DkZs/ldcWQXcwTjkbp/NbuJDGYoQ3awBgaT3GXOFkm3OkVpz6Z86TywYcya0eVP2r1kTV90f3krGQ== -fast-xml-builder@^1.1.5: +fast-xml-builder@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz#abd2363145a7625d9789ad96da375fabe3cff28c" integrity sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q== @@ -6630,14 +6880,16 @@ fast-xml-builder@^1.1.5: xml-naming "^0.1.0" fast-xml-parser@>=5.5.7, fast-xml-parser@^5.3.4: - version "5.7.2" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz#fecd0b054c6c132fc03dab994a413da781e0eb9f" - integrity sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w== + version "5.9.0" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.9.0.tgz#25d54dbb841ad630e8810b343a6ce76d6044c04d" + integrity sha512-duBuXbyIhEeNO4GjFuVqr0nF047oNwr18aum+zJyqo0MUG/n7Afgs3Qv3D6VN3ONedUKxiuFlPiMGIa0Z11chA== dependencies: - "@nodable/entities" "^2.1.0" - fast-xml-builder "^1.1.5" + "@nodable/entities" "^2.2.0" + fast-xml-builder "^1.2.0" + is-unsafe "^1.0.1" path-expression-matcher "^1.5.0" - strnum "^2.2.3" + strnum "^2.4.0" + xml-naming "^0.1.0" fastq@^1.6.0: version "1.20.1" @@ -6669,7 +6921,7 @@ fd-slicer@~1.1.0: fdir@^6.5.0: version "6.5.0" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz" integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== feed@^4.2.2: @@ -6679,13 +6931,6 @@ feed@^4.2.2: dependencies: xml-js "^1.6.11" -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - file-loader@^6.2.0: version "6.2.0" resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" @@ -6694,6 +6939,16 @@ file-loader@^6.2.0: loader-utils "^2.0.0" schema-utils "^3.0.0" +file-saver@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz" + integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== + +file-type@3.9.0: + version "3.9.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" + integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== + fill-range@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" @@ -6742,13 +6997,13 @@ flat@^5.0.2: flatted@^3.4.2: version "3.4.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz" integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== follow-redirects@^1.0.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc" - integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== + version "1.15.11" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== foreach@^2.0.4: version "2.0.6" @@ -6780,18 +7035,23 @@ fresh@~0.5.2: resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-extra@^11.1.1, fs-extra@^11.2.0: - version "11.2.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== +fs-extra@^11.1.1, fs-extra@^11.2.0, fs-extra@^11.3.0: + version "11.3.5" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz" + integrity sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: @@ -6801,7 +7061,7 @@ function-bind@^1.1.2: gensequence@^8.0.8: version "8.0.8" - resolved "https://registry.yarnpkg.com/gensequence/-/gensequence-8.0.8.tgz#381a46bef4b1c26f6aff2b291ce9cd417d363fb1" + resolved "https://registry.npmjs.org/gensequence/-/gensequence-8.0.8.tgz" integrity sha512-omMVniXEXpdx/vKxGnPRoO2394Otlze28TyxECbFVyoSpZ9H3EO7lemjcB12OpQJzRW4e5tt/dL1rOxry6aMHg== gensync@^1.0.0-beta.2: @@ -6893,9 +7153,21 @@ glob-to-regexp@^0.4.1: resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== +glob@^7.0.0: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-directory@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/global-directory/-/global-directory-5.0.0.tgz#0f66a94212acd0f81ee838d0a991e88d1c2836cf" + resolved "https://registry.npmjs.org/global-directory/-/global-directory-5.0.0.tgz" integrity sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w== dependencies: ini "6.0.0" @@ -6962,6 +7234,13 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +graphlib@2.1.8: + version "2.1.8" + resolved "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz" + integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== + dependencies: + lodash "^4.17.15" + gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" @@ -7270,6 +7549,11 @@ html-tags@^3.3.1: resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz" integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== +html-url-attributes@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz" + integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ== + html-void-elements@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz" @@ -7371,6 +7655,11 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" +http-reasons@0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/http-reasons/-/http-reasons-0.1.0.tgz" + integrity sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ== + http2-client@^1.2.5: version "1.3.5" resolved "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz" @@ -7402,7 +7691,7 @@ hyperdyperid@^1.2.0: resolved "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz" integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== -iconv-lite@0.6: +iconv-lite@0.6, iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -7421,7 +7710,7 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -7436,6 +7725,16 @@ image-size@^2.0.2: resolved "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz" integrity sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w== +immer@^11.0.0: + version "11.1.8" + resolved "https://registry.npmjs.org/immer/-/immer-11.1.8.tgz" + integrity sha512-/tbkHMW7y10Lx6i1crLjD4/OhNkRG+Fo7byZHtah0547nIeXYcpIXaUh0IAQY6gO5459qpGGYapcEOHtFXkIuA== + +immutable@^5.1.5: + version "5.1.6" + resolved "https://registry.npmjs.org/immutable/-/immutable-5.1.6.tgz" + integrity sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ== + import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" @@ -7446,7 +7745,7 @@ import-fresh@^3.2.1, import-fresh@^3.3.0: import-fresh@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-4.0.0.tgz#07057d6f3b6d9bf19b8f287c8d73b43da5f9f289" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-4.0.0.tgz" integrity sha512-Fpi660c7VPDM3fPKYovStd9IP1CPOikf6v/dGxJJMmHPcwYQIMJ4W7kO1avBYEpMqkCh+Dx3Ln6H7VYqgztLjw== import-lazy@^4.0.0: @@ -7456,7 +7755,7 @@ import-lazy@^4.0.0: import-meta-resolve@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz#08cb85b5bd37ecc8eb1e0f670dc2767002d43734" + resolved "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz" integrity sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg== imurmurhash@^0.1.4: @@ -7474,7 +7773,15 @@ infima@0.2.0-alpha.45: resolved "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz" integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw== -inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4: +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -7486,7 +7793,7 @@ ini@2.0.0: ini@6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-6.0.0.tgz#efc7642b276f6a37d22fdf56ef50889d7146bf30" + resolved "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz" integrity sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ== ini@^1.3.4, ini@~1.3.0: @@ -7514,6 +7821,11 @@ internmap@^1.0.0: resolved "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz" integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + invariant@^2.2.4: version "2.2.4" resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" @@ -7694,7 +8006,7 @@ is-regexp@^1.0.0: is-safe-filename@^0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/is-safe-filename/-/is-safe-filename-0.1.1.tgz#fb22eead097c614c47aa674de5d79a1648a53e66" + resolved "https://registry.npmjs.org/is-safe-filename/-/is-safe-filename-0.1.1.tgz" integrity sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g== is-stream@^2.0.0: @@ -7707,6 +8019,11 @@ is-typedarray@^1.0.0: resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== +is-unsafe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-unsafe/-/is-unsafe-1.0.1.tgz#ce89b55dec0034364f5beda41e10481efa8fa317" + integrity sha512-CLK2+VdgERgD96EYm5lUQssZYlRg2tkZnbsxZoacmSiRxiFJ4Nk4SzjCl+Ur+v3kXIY9dTIdb3IH22y1mZ56LA== + is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" @@ -7726,11 +8043,6 @@ is-yarn-global@^0.4.0: resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz" integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" @@ -7748,7 +8060,7 @@ isobject@^3.0.1: javascript-natural-sort@^0.7.1: version "0.7.1" - resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + resolved "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz" integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== jest-util@^29.7.0: @@ -7808,6 +8120,13 @@ js-levenshtein@^1.1.6: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + js-yaml@^3.13.1: version "3.14.2" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz" @@ -7816,10 +8135,10 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0, js-yaml@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz" - integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== +js-yaml@^4.1.0, js-yaml@^4.1.1, js-yaml@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz" + integrity sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw== dependencies: argparse "^2.0.1" @@ -7838,7 +8157,12 @@ json-buffer@3.0.1: resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-crawl@^0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/json-crawl/-/json-crawl-0.5.3.tgz" + integrity sha512-BEjjCw8c7SxzNK4orhlWD5cXQh8vCk2LqDr4WgQq4CV+5dvopeYwt1Tskg67SuSLKvoFH5g0yuYtg7rcfKV6YA== + +json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -7850,9 +8174,34 @@ json-pointer@0.6.2, json-pointer@^0.6.2: dependencies: foreach "^2.0.4" +json-schema-compare@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz" + integrity sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ== + dependencies: + lodash "^4.17.4" + +json-schema-merge-allof@0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz" + integrity sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w== + dependencies: + compute-lcm "^1.1.2" + json-schema-compare "^0.2.2" + lodash "^4.17.20" + +json-schema-to-ts@2.7.2: + version "2.7.2" + resolved "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-2.7.2.tgz" + integrity sha512-R1JfqKqbBR4qE8UyBR56Ms30LL62/nlhoz+1UkfI/VE7p54Awu919FZ6ZUPG8zIa3XB65usPJgr1ONVncUGSaQ== + dependencies: + "@babel/runtime" "^7.18.3" + "@types/json-schema" "^7.0.9" + ts-algebra "^1.2.0" + json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: @@ -7882,9 +8231,9 @@ jsonp@^0.2.1: debug "^2.1.3" katex@^0.16.25: - version "0.16.45" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.45.tgz#ba60d39c54746b6b8d39ce0e7f6eace07143149c" - integrity sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA== + version "0.16.28" + resolved "https://registry.npmjs.org/katex/-/katex-0.16.28.tgz" + integrity sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg== dependencies: commander "^8.3.0" @@ -7915,17 +8264,6 @@ kleur@^4.0.3: resolved "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== -langium@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/langium/-/langium-4.2.1.tgz" - integrity sha512-zu9QWmjpzJcomzdJQAHgDVhLGq5bLosVak1KVa40NzQHXfqr4eAHupvnPOVXEoLkg6Ocefvf/93d//SB7du4YQ== - dependencies: - chevrotain "~11.1.1" - chevrotain-allstar "~0.3.1" - vscode-languageserver "~9.0.1" - vscode-languageserver-textdocument "~1.0.11" - vscode-uri "~3.1.0" - latest-version@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz" @@ -7966,10 +8304,15 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -loader-runner@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" - integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== +liquid-json@0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/liquid-json/-/liquid-json-0.3.1.tgz" + integrity sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ== + +loader-runner@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.2.tgz#9913d3a15971f8f635915e601fb5c9d495d918e9" + integrity sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w== loader-utils@^2.0.0: version "2.0.4" @@ -7987,7 +8330,7 @@ locate-path@^7.1.0: dependencies: p-locate "^6.0.0" -lodash-es@4.17.23, lodash-es@>=4.18.0, lodash-es@^4.17.21, lodash-es@^4.17.23: +lodash-es@>=4.18.1, lodash-es@^4.17.21: version "4.18.1" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.18.1.tgz#b962eeb80d9d983a900bf342961fb7418ca10b1d" integrity sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A== @@ -8012,7 +8355,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.20, lodash@^4.17.21, lodash@^4.18.1: +lodash@4.17.21, lodash@4.17.23, lodash@>=4.18.1, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.18.1: version "4.18.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== @@ -8068,13 +8411,6 @@ markdown-extensions@^2.0.0: resolved "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz" integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== -markdown-table@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz" - integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== - dependencies: - repeat-string "^1.0.0" - markdown-table@^3.0.0: version "3.0.4" resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz" @@ -8442,7 +8778,7 @@ media-typer@0.3.0: medium-zoom@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/medium-zoom/-/medium-zoom-1.1.0.tgz#6efb6bbda861a02064ee71a2617a8dc4381ecc71" + resolved "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz" integrity sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ== memfs@^4.43.1: @@ -8481,13 +8817,13 @@ merge2@^1.3.0, merge2@^1.4.1: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== mermaid@>=11.6.0, mermaid@^11.14.0: - version "11.14.0" - resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-11.14.0.tgz#ce81b22bc10f3117ef7737406ef2d10ee1741769" - integrity sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g== + version "11.15.0" + resolved "https://registry.npmjs.org/mermaid/-/mermaid-11.15.0.tgz" + integrity sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw== dependencies: "@braintree/sanitize-url" "^7.1.1" "@iconify/utils" "^3.0.2" - "@mermaid-js/parser" "^1.1.0" + "@mermaid-js/parser" "^1.1.1" "@types/d3" "^7.4.3" "@upsetjs/venn.js" "^2.0.0" cytoscape "^3.33.1" @@ -8498,14 +8834,14 @@ mermaid@>=11.6.0, mermaid@^11.14.0: dagre-d3-es "7.0.14" dayjs "^1.11.19" dompurify "^3.3.1" + es-toolkit "^1.45.1" katex "^0.16.25" khroma "^2.1.0" - lodash-es "^4.17.23" marked "^16.3.0" roughjs "^4.6.6" stylis "^4.3.6" ts-dedent "^2.2.0" - uuid "^11.1.0" + uuid "^11.1.0 || ^12 || ^13 || ^14.0.0" methods@~1.1.2: version "1.1.2" @@ -9215,6 +9551,13 @@ mime-db@~1.33.0: resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== +mime-format@2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/mime-format/-/mime-format-2.0.2.tgz" + integrity sha512-Y5ERWVcyh3sby9Fx2U5F1yatiTFjNsqF5NltihTWI9QgNtr5o3dbCZdcKa1l2wyfhnwwoP9HGNxga7LqZLA6gw== + dependencies: + charset "^1.0.0" + mime-types@2.1.18: version "2.1.18" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" @@ -9241,6 +9584,11 @@ mime@1.6.0: resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" @@ -9257,9 +9605,9 @@ mimic-response@^4.0.0: integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== mini-css-extract-plugin@^2.9.2: - version "2.10.0" - resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.0.tgz" - integrity sha512-540P2c5dYnJlyJxTaSloliZexv8rji6rY8FhQN+WF/82iHQfA23j/xtJx97L+mXOML27EqksSek/g4eK7jaL3g== + version "2.10.2" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.2.tgz" + integrity sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" @@ -9269,9 +9617,9 @@ minimalistic-assert@^1.0.0: resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@3.1.5: +minimatch@3.1.5, minimatch@^3.1.1: version "3.1.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz" integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== dependencies: brace-expansion "^1.1.7" @@ -9285,7 +9633,7 @@ minimatch@^5.0.1: minimatch@^9.0.0: version "9.0.9" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz" integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== dependencies: brace-expansion "^2.0.2" @@ -9357,10 +9705,24 @@ multicast-dns@^7.2.5: dns-packet "^5.2.2" thunky "^1.0.2" -nanoid@^3.3.11: - version "3.3.11" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz" - integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== +mustache@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.12: + version "3.3.12" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.12.tgz#ab3d912e217a6d0a514f00a72a16543a28982c05" + integrity sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ== negotiator@0.6.3: version "0.6.3" @@ -9377,6 +9739,11 @@ neo-async@^2.6.2: resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +neotraverse@0.6.15: + version "0.6.15" + resolved "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.15.tgz" + integrity sha512-HZpdkco+JeXq0G+WWpMJ4NsX3pqb5O7eR9uGz3FfoFt+LYzU8iRWp49nJtud6hsDoywM8tIrDo3gjgmOqJA8LA== + netmask@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz" @@ -9390,6 +9757,11 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + node-emoji@^2.1.0: version "2.2.0" resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz" @@ -9421,10 +9793,10 @@ node-readfiles@^0.2.0: dependencies: es6-promise "^3.2.1" -node-releases@^2.0.27: - version "2.0.27" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz" - integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== +node-releases@^2.0.36: + version "2.0.47" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz" + integrity sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -9479,6 +9851,18 @@ oas-linter@^3.2.2: should "^13.2.1" yaml "^1.10.0" +oas-resolver-browser@2.5.6: + version "2.5.6" + resolved "https://registry.npmjs.org/oas-resolver-browser/-/oas-resolver-browser-2.5.6.tgz" + integrity sha512-Jw5elT/kwUJrnGaVuRWe1D7hmnYWB8rfDDjBnpQ+RYY/dzAewGXeTexXzt4fGEo6PUE4eqKqPWF79MZxxvMppA== + dependencies: + node-fetch-h2 "^2.3.0" + oas-kit-common "^1.0.8" + path-browserify "^1.0.1" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + oas-resolver@^2.5.6: version "2.5.6" resolved "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz" @@ -9509,11 +9893,16 @@ oas-validator@^5.0.8: should "^13.2.1" yaml "^1.10.0" -object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +object-hash@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + object-inspect@^1.13.3: version "1.13.4" resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" @@ -9553,7 +9942,7 @@ on-headers@~1.1.0: resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz" integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== -once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -9595,6 +9984,35 @@ openapi-sampler@^1.5.0: fast-xml-parser "^5.3.4" json-pointer "0.6.2" +openapi-to-postmanv2@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/openapi-to-postmanv2/-/openapi-to-postmanv2-6.1.0.tgz" + integrity sha512-qJ/SYQT0+oNxuOgd492cocXTNPowIgXV2EhifOUzlLt5STKWW3LSoddDqZUhSK9JsMLmdU3D7xbX/xRFqtho2w== + dependencies: + ajv "^8.11.0" + ajv-draft-04 "1.0.0" + ajv-formats "2.1.1" + async "3.2.6" + commander "2.20.3" + graphlib "2.1.8" + js-yaml "4.1.0" + json-pointer "0.6.2" + json-schema-merge-allof "0.8.1" + lodash "4.17.21" + neotraverse "0.6.15" + oas-resolver-browser "2.5.6" + object-hash "3.0.0" + openapi-types "^12.1.3" + path-browserify "1.0.1" + postman-collection "^5.0.0" + swagger2openapi "7.0.8" + yaml "1.10.2" + +openapi-types@^12.1.3: + version "12.1.3" + resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz" + integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw== + opener@^1.5.2: version "1.5.2" resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" @@ -9692,6 +10110,11 @@ package-manager-detector@^1.3.0: resolved "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz" integrity sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA== +pako@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz" + integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== + param-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" @@ -9722,7 +10145,7 @@ parse-entities@^4.0.0: parse-imports-exports@^0.2.4: version "0.2.4" - resolved "https://registry.yarnpkg.com/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz#e3fb3b5e264cfb55c25b5dfcbe7f410f8dc4e7af" + resolved "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz" integrity sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ== dependencies: parse-statements "1.0.11" @@ -9744,7 +10167,7 @@ parse-numeric-range@^1.3.0: parse-statements@1.0.11: version "1.0.11" - resolved "https://registry.yarnpkg.com/parse-statements/-/parse-statements-1.0.11.tgz#8787c5d383ae5746568571614be72b0689584344" + resolved "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz" integrity sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA== parse5-htmlparser2-tree-adapter@^7.0.0: @@ -9775,7 +10198,7 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" -path-browserify@^1.0.1: +path-browserify@1.0.1, path-browserify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== @@ -9795,6 +10218,11 @@ path-expression-matcher@^1.5.0: resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz#3b98545dc88ffebb593e2d8458d0929da9275f4a" integrity sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ== +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + path-is-inside@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" @@ -9812,29 +10240,17 @@ path-parse@^1.0.7: path-root-regex@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + resolved "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== path-root@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + resolved "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== dependencies: path-root-regex "^0.1.0" -path-to-regexp@3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz" - integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== - -path-to-regexp@^1.7.0: - version "1.9.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz" - integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== - dependencies: - isarray "0.0.1" - -path-to-regexp@~0.1.12: +path-to-regexp@3.3.0, path-to-regexp@^0.1.13, path-to-regexp@^1.7.0, path-to-regexp@~0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.13.tgz#9b22ec16bc3ab88d05a0c7e369869421401ab17d" integrity sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA== @@ -9864,11 +10280,16 @@ picocolors@^1.0.0, picocolors@^1.1.1: resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@>=2.3.2, picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1, picomatch@^4.0.4: +picomatch@>=2.3.2, picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1, picomatch@^4.0.3, picomatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== +pirates@^4.0.1: + version "4.0.7" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== + pkg-dir@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz" @@ -10435,17 +10856,17 @@ postcss-selector-not@^8.0.1: postcss-selector-parser "^7.0.0" postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: - version "6.1.2" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + version "6.1.4" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz" + integrity sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" postcss-selector-parser@^7.0.0: - version "7.1.1" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz" - integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== + version "7.1.4" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz" + integrity sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -10483,23 +10904,58 @@ postcss-zindex@^6.0.2: integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== postcss@8.4.49, postcss@>=8.5.10, postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33, postcss@^8.4.45, postcss@^8.5.4: - version "8.5.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.14.tgz#a66c2d7808fadf69ebb5b84a03f8bafd76c4919c" - integrity sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg== + version "8.5.15" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.15.tgz#d1eaf677a324e9ec02196da2d3fecf4a0b9a735c" + integrity sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A== dependencies: - nanoid "^3.3.11" + nanoid "^3.3.12" picocolors "^1.1.1" source-map-js "^1.2.1" +postman-code-generators@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/postman-code-generators/-/postman-code-generators-2.1.1.tgz" + integrity sha512-+egQK1Jf9a92QP23vRTKcDLOthIQmI7WI4czEsZq/wgguLMnVHJ26KlT8AVtpAdVw28hqUbHwicerYxRWCfjoA== + dependencies: + async "^3.2.2" + detect-package-manager "^3.0.2" + lodash "^4.17.21" + postman-collection "^5.0.0" + shelljs "^0.8.5" + +postman-collection@^5.0.0, postman-collection@^5.0.2: + version "5.3.0" + resolved "https://registry.npmjs.org/postman-collection/-/postman-collection-5.3.0.tgz" + integrity sha512-PMa5vRheqDFfS1bkRg8WBidWxunRA80sT5YNLP27YC5+ycyfiLMCwPnqQd1zfvxkGk04Pr9UronWmmgsbpsVyQ== + dependencies: + "@faker-js/faker" "5.5.3" + file-type "3.9.0" + http-reasons "0.1.0" + iconv-lite "0.6.3" + liquid-json "0.3.1" + lodash "4.17.23" + mime "3.0.0" + mime-format "2.0.2" + postman-url-encoder "3.0.8" + semver "7.7.1" + uuid "8.3.2" + +postman-url-encoder@3.0.8: + version "3.0.8" + resolved "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.8.tgz" + integrity sha512-EOgUMBazo7JNP4TDrd64TsooCiWzzo4143Ws8E8WYGEpn2PKpq+S4XRTDhuRTYHm3VKOpUZs7ZYZq7zSDuesqA== + dependencies: + punycode "^2.3.1" + prettier-plugin-sort-json@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/prettier-plugin-sort-json/-/prettier-plugin-sort-json-4.2.0.tgz" integrity sha512-jK1w3/7otTvHtv1eoLji2U9mEoOGeyl7QQQ/afLnjht1YtRLSUUk8o0rIIC/HUVXhoGPCFe4SVZbRGYjjUVgvA== prettier@^3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.3.tgz#560f2de55bf01b4c0503bc629d5df99b9a1d09b0" - integrity sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw== + version "3.8.4" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.8.4.tgz" + integrity sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q== pretty-error@^4.0.0: version "4.0.0" @@ -10514,7 +10970,7 @@ pretty-time@^1.1.0: resolved "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz" integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== -prism-react-renderer@^2.3.0, prism-react-renderer@^2.4.1: +prism-react-renderer@^2.3.0, prism-react-renderer@^2.4.0, prism-react-renderer@^2.4.1: version "2.4.1" resolved "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz" integrity sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig== @@ -10532,6 +10988,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + progress@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" @@ -10604,9 +11065,14 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0: +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0, punycode@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pupa@^3.1.0: @@ -10649,10 +11115,10 @@ pvutils@^1.1.3: resolved "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz" integrity sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA== -qs@>=6.14.1, qs@~6.14.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.0.tgz#db8fd5d1b1d2d6b5b33adaf87429805f1909e7b3" - integrity sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ== +qs@>=6.14.1, qs@^6.12.3, qs@~6.14.0: + version "6.15.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.2.tgz#fd55426d710403ddccc45e0f9eab16db7727ece9" + integrity sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw== dependencies: side-channel "^1.1.0" @@ -10710,9 +11176,9 @@ rc@1.2.8: strip-json-comments "~2.0.1" react-dom@^19.2.5: - version "19.2.5" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.5.tgz#b8768b10837d0b8e9ca5b9e2d58dff3d880ea25e" - integrity sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag== + version "19.2.7" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz" + integrity sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ== dependencies: scheduler "^0.27.0" @@ -10723,8 +11189,8 @@ react-fast-compare@^3.2.0: "react-helmet-async@npm:@slorber/react-helmet-async@1.3.0": version "1.3.0" - resolved "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz" - integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== + resolved "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz" + integrity sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A== dependencies: "@babel/runtime" "^7.12.5" invariant "^2.2.4" @@ -10732,24 +11198,43 @@ react-fast-compare@^3.2.0: react-fast-compare "^3.2.0" shallowequal "^1.1.0" +react-hook-form@^7.59.0: + version "7.79.0" + resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.79.0.tgz" + integrity sha512-mhYp/MTmXvzYX6AJcJVko0rktoIhhmRnEouObj4wF5i/tCttgJvnp1+9wRkpITZjDTqpo4IOSJqu0dBlPlV/Lw== + react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^19.0.0, react-is@^19.2.3: - version "19.2.5" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.2.5.tgz#7e7b54143e9313fed787b23fd4295d5a23872ad9" - integrity sha512-Dn0t8IQhCmeIT3wu+Apm1/YVsJXsGWi6k4sPdnBIdqMVtHtv0IGi6dcpNpNkNac0zB2uUAqNX3MHzN8c+z2rwQ== +react-is@^19.0.0: + version "19.0.0" + resolved "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz" + integrity sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g== react-json-view-lite@^2.3.0: version "2.5.0" resolved "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.5.0.tgz" integrity sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g== +react-lifecycles-compat@^3.0.0: + version "3.0.4" + resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-live@^4.1.8: + version "4.1.8" + resolved "https://registry.npmjs.org/react-live/-/react-live-4.1.8.tgz" + integrity sha512-B2SgNqwPuS2ekqj4lcxi5TibEcjWkdVyYykBEUBshPAPDQ527x2zPEZg560n8egNtAjUpwXFQm7pcXV65aAYmg== + dependencies: + prism-react-renderer "^2.4.0" + sucrase "^3.35.0" + use-editable "^2.3.3" + react-loadable-ssr-addon-v5-slorber@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz#bb3791bf481222c63a5bc6b96ee23f68cb5614b9" + resolved "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz" integrity sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ== dependencies: "@babel/runtime" "^7.10.3" @@ -10761,6 +11246,11 @@ react-loadable-ssr-addon-v5-slorber@^1.0.3: dependencies: "@types/react" "*" +react-magic-dropzone@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/react-magic-dropzone/-/react-magic-dropzone-1.0.1.tgz" + integrity sha512-0BIROPARmXHpk4AS3eWBOsewxoM5ndk2psYP/JmbCq8tz3uR2LIV1XiroZ9PKrmDRMctpW+TvsBCtWasuS8vFA== + react-mailchimp-subscribe@^2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/react-mailchimp-subscribe/-/react-mailchimp-subscribe-2.1.3.tgz" @@ -10770,6 +11260,41 @@ react-mailchimp-subscribe@^2.1.3: prop-types "^15.5.10" to-querystring "^1.0.4" +react-markdown@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz" + integrity sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + hast-util-to-jsx-runtime "^2.0.0" + html-url-attributes "^3.0.0" + mdast-util-to-hast "^13.0.0" + remark-parse "^11.0.0" + remark-rehype "^11.0.0" + unified "^11.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +react-modal@^3.16.3: + version "3.16.3" + resolved "https://registry.npmjs.org/react-modal/-/react-modal-3.16.3.tgz" + integrity sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw== + dependencies: + exenv "^1.2.0" + prop-types "^15.7.2" + react-lifecycles-compat "^3.0.0" + warning "^4.0.3" + +react-redux@^9.2.0: + version "9.3.0" + resolved "https://registry.npmjs.org/react-redux/-/react-redux-9.3.0.tgz" + integrity sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g== + dependencies: + "@types/use-sync-external-store" "^0.0.6" + use-sync-external-store "^1.4.0" + react-router-config@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz" @@ -10824,9 +11349,9 @@ react-transition-group@^4.4.5: prop-types "^15.6.2" react@^19.2.5: - version "19.2.5" - resolved "https://registry.yarnpkg.com/react/-/react-19.2.5.tgz#c888ab8b8ef33e2597fae8bdb2d77edbdb42858b" - integrity sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA== + version "19.2.7" + resolved "https://registry.npmjs.org/react/-/react-19.2.7.tgz" + integrity sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ== readable-stream@^2.0.1: version "2.3.8" @@ -10850,6 +11375,11 @@ readable-stream@^3.0.6: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz" + integrity sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -10857,6 +11387,13 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + recma-build-jsx@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz" @@ -10932,6 +11469,16 @@ redocusaurus@^2.5.0: docusaurus-plugin-redoc "2.5.0" docusaurus-theme-redoc "2.5.0" +redux-thunk@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz" + integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw== + +redux@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz" + integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== + reflect-metadata@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz" @@ -10986,9 +11533,9 @@ regjsgen@^0.8.0: integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== regjsparser@^0.13.0: - version "0.13.0" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz" - integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q== + version "0.13.2" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz" + integrity sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ== dependencies: jsesc "~3.1.0" @@ -11046,7 +11593,7 @@ remark-frontmatter@^5.0.0: micromark-extension-frontmatter "^2.0.0" unified "^11.0.0" -remark-gfm@^4.0.0: +remark-gfm@4.0.1, remark-gfm@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz" integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== @@ -11060,7 +11607,7 @@ remark-gfm@^4.0.0: remark-mdx@^3.0.0, remark-mdx@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.1.1.tgz#047f97038bc7ec387aebb4b0a4fe23779999d845" + resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz" integrity sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg== dependencies: mdast-util-mdx "^3.0.0" @@ -11117,11 +11664,6 @@ renderkid@^3.0.0: lodash "^4.17.21" strip-ansi "^6.0.1" -repeat-string@^1.0.0: - version "1.6.1" - resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" @@ -11142,7 +11684,7 @@ requires-port@^1.0.0: resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^5.1.1: +reselect@^5.1.0, reselect@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz" integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== @@ -11159,12 +11701,12 @@ resolve-from@^4.0.0: resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-package-path@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-4.0.3.tgz#31dab6897236ea6613c72b83658d88898a9040aa" + resolved "https://registry.npmjs.org/resolve-package-path/-/resolve-package-path-4.0.3.tgz" integrity sha512-SRpNAPW4kewOaNUt8VPqhJ0UMxawMwzJD8V7m1cJfdSTK9ieZwS6K7Dabsm4bmLFM96Z5Y/UznrpG5kt1im8yA== dependencies: path-root "^0.1.1" @@ -11174,7 +11716,7 @@ resolve-pathname@^3.0.0: resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== -resolve@^1.19.0, resolve@^1.22.11: +resolve@^1.1.6, resolve@^1.19.0, resolve@^1.22.11: version "1.22.11" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz" integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== @@ -11201,9 +11743,9 @@ reusify@^1.0.4: integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== robust-predicates@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz" - integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== + version "3.0.3" + resolved "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz" + integrity sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA== roughjs@^4.6.6: version "4.6.6" @@ -11264,14 +11806,27 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4: - version "1.4.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz" - integrity sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw== +sass-loader@^16.0.5: + version "16.0.8" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.8.tgz" + integrity sha512-hcov4ZwZJIGbEuyNr9EmiTmZueyrxSToE6GOzoZnq5JM7ecRO7ttyvilPn+VmRsqiP16+VYZzVnGZj/hzZgKBA== + dependencies: + neo-async "^2.6.2" -sax@^1.5.0: +sass@^1.89.2: + version "1.101.0" + resolved "https://registry.npmjs.org/sass/-/sass-1.101.0.tgz" + integrity sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw== + dependencies: + chokidar "^5.0.0" + immutable "^5.1.5" + source-map-js ">=0.6.2 <2.0.0" + optionalDependencies: + "@parcel/watcher" "^2.4.1" + +sax@^1.2.4, sax@^1.5.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.6.0.tgz#da59637629307b97e7c4cb28e080a7bc38560d5b" + resolved "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz" integrity sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA== scheduler@^0.27.0: @@ -11341,16 +11896,31 @@ semver-diff@^4.0.0: dependencies: semver "^7.3.5" +semver@7.7.1: + version "7.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + semver@^6.3.1: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.4, semver@^7.6.3, semver@^7.7.4: +semver@^7.3.5, semver@^7.3.7, semver@^7.5.4, semver@^7.6.3: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@^7.3.8: version "7.7.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz" integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== +semver@^7.8.1: + version "7.8.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz" + integrity sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA== + send@~0.19.0, send@~0.19.1: version "0.19.2" resolved "https://registry.npmjs.org/send/-/send-0.19.2.tgz" @@ -11377,7 +11947,7 @@ serialize-javascript@>=6.0.3, serialize-javascript@^6.0.0, serialize-javascript@ serve-handler@^6.1.7: version "6.1.7" - resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.7.tgz#e9bb864e87ee71e8dab874cde44d146b77e3fb78" + resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz" integrity sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg== dependencies: bytes "3.0.0" @@ -11457,6 +12027,15 @@ shell-quote@^1.8.3: resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz" integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + should-equal@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz" @@ -11561,9 +12140,9 @@ sisteransi@^1.0.5: integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== sitemap@^7.1.1: - version "7.1.2" - resolved "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz" - integrity sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw== + version "7.1.3" + resolved "https://registry.npmjs.org/sitemap/-/sitemap-7.1.3.tgz" + integrity sha512-tAjEd+wt/YwnEbfNB2ht51ybBJxbEWwe5ki/Z//Wh0rpBFTCUSj46GnxUKEWzhfuJTsee8x3lybHxFgUMig2hw== dependencies: "@types/node" "^17.0.5" "@types/sax" "^1.2.1" @@ -11587,6 +12166,11 @@ slash@^4.0.0: resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +slugify@^1.6.6: + version "1.6.9" + resolved "https://registry.npmjs.org/slugify/-/slugify-1.6.9.tgz" + integrity sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg== + slugify@~1.4.7: version "1.4.7" resolved "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz" @@ -11599,7 +12183,7 @@ smart-buffer@^4.2.0: smol-toml@^1.6.1: version "1.6.1" - resolved "https://registry.yarnpkg.com/smol-toml/-/smol-toml-1.6.1.tgz#4fceb5f7c4b86c2544024ef686e12ff0983465be" + resolved "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz" integrity sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg== snake-case@^3.0.4: @@ -11641,7 +12225,7 @@ sort-css-media-queries@2.2.0: resolved "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz" integrity sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA== -source-map-js@^1.0.1, source-map-js@^1.2.1: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== @@ -11734,7 +12318,7 @@ stickyfill@^1.1.1: streamx@^2.12.5: version "2.23.0" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.23.0.tgz#7d0f3d00d4a6c5de5728aecd6422b4008d66fd0b" + resolved "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz" integrity sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg== dependencies: events-universal "^1.0.0" @@ -11835,10 +12419,12 @@ strip-json-comments@~2.0.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strnum@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.2.3.tgz#0119fce02749a11bb126a4d686ac5dbdf6e57586" - integrity sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg== +strnum@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.4.0.tgz#304881c3299b017855f1934a4ce85bfb60b1ca2a" + integrity sha512-sHrVyWWdq28RbhjuJdZsA1SnGRJV6NiXbk6AXBxDOsgAcA+lmpUZCYjOdLBxkXMwis6RRe7dlZt4VlIWFVzkmg== + dependencies: + anynum "^1.0.0" style-to-js@^1.0.0: version "1.1.21" @@ -11894,6 +12480,19 @@ stylis@4.3.6, stylis@^4.3.6: resolved "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz" integrity sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ== +sucrase@^3.35.0: + version "3.35.1" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz" + integrity sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + tinyglobby "^0.2.11" + ts-interface-checker "^0.1.9" + supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" @@ -11920,7 +12519,7 @@ svg-parser@^2.0.4: svgo@^3.0.2, svgo@^3.2.0: version "3.3.3" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.3.tgz#8246aee0b08791fde3b0ed22b5661b471fadf58e" + resolved "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz" integrity sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng== dependencies: commander "^7.2.0" @@ -11931,7 +12530,7 @@ svgo@^3.0.2, svgo@^3.2.0: picocolors "^1.0.0" sax "^1.5.0" -swagger2openapi@^7.0.8: +swagger2openapi@7.0.8, swagger2openapi@^7.0.8: version "7.0.8" resolved "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz" integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g== @@ -11953,14 +12552,14 @@ tapable@^2.0.0, tapable@^2.2.1: resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tapable@^2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.2.tgz#86755feabad08d82a26b891db044808c6ad00f15" - integrity sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA== +tapable@^2.3.0, tapable@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.3.tgz#5da7c9992c46038221267985ab28421a8879f160" + integrity sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A== tar-fs@^3.0.6: version "3.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.1.1.tgz#4f164e59fb60f103d472360731e8c6bb4a7fe9ef" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz" integrity sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg== dependencies: pump "^3.0.0" @@ -11980,30 +12579,30 @@ tar-stream@^3.1.5: teex@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/teex/-/teex-1.0.1.tgz#b8fa7245ef8e8effa8078281946c85ab780a0b12" + resolved "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz" integrity sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg== dependencies: streamx "^2.12.5" -terser-webpack-plugin@^5.3.17: - version "5.4.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz#95fc4cf4437e587be11ecf37d08636089174d76b" - integrity sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g== +terser-webpack-plugin@^5.3.9: + version "5.3.11" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz" + integrity sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ== dependencies: "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" schema-utils "^4.3.0" + serialize-javascript "^6.0.2" terser "^5.31.1" -terser-webpack-plugin@^5.3.9: - version "5.3.11" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz" - integrity sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ== +terser-webpack-plugin@^5.5.0: + version "5.6.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz#47bc41bd8b8fab8383b62ec763b7394829097e7b" + integrity sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ== dependencies: "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" schema-utils "^4.3.0" - serialize-javascript "^6.0.2" terser "^5.31.1" terser@^5.10.0, terser@^5.15.1, terser@^5.31.1: @@ -12023,6 +12622,20 @@ text-decoder@^1.1.0: dependencies: b4a "^1.6.4" +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + thingies@^2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz" @@ -12053,10 +12666,10 @@ tinyexec@^1.0.1: resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz" integrity sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== -tinyglobby@^0.2.15: - version "0.2.16" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.16.tgz#1c3b7eb953fce42b226bc5a1ee06428281aff3d6" - integrity sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg== +tinyglobby@^0.2.11, tinyglobby@^0.2.16: + version "0.2.17" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz" + integrity sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g== dependencies: fdir "^6.5.0" picomatch "^4.0.4" @@ -12108,11 +12721,21 @@ trough@^2.0.0: resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz" integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== +ts-algebra@^1.2.0: + version "1.2.2" + resolved "https://registry.npmjs.org/ts-algebra/-/ts-algebra-1.2.2.tgz" + integrity sha512-kloPhf1hq3JbCPOTYoOWDKxebWjNb2o/LKnNfkWhxVVisFFmMJPPdJeGoGmM+iRLyoXAR61e08Pb+vUXINg8aA== + ts-dedent@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz" integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + tslib@2.8.1, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.6.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" @@ -12130,11 +12753,6 @@ tsyringe@^4.10.0: dependencies: tslib "^1.9.3" -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - type-fest@^1.0.1: version "1.4.0" resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" @@ -12162,7 +12780,7 @@ typedarray-to-buffer@^3.1.5: typescript@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-6.0.3.tgz#90251dc007916e972786cb94d74d15b185577d21" + resolved "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz" integrity sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw== ufo@^1.6.1: @@ -12339,7 +12957,7 @@ unpipe@~1.0.0: resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.2.0: +update-browserslist-db@^1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz" integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== @@ -12369,7 +12987,7 @@ update-notifier@^6.0.2: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" @@ -12388,14 +13006,27 @@ url-template@^2.0.8: resolved "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz" integrity sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw== +url@^0.11.4: + version "0.11.4" + resolved "https://registry.npmjs.org/url/-/url-0.11.4.tgz" + integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== + dependencies: + punycode "^1.4.1" + qs "^6.12.3" + urlpattern-polyfill@10.0.0: version "10.0.0" resolved "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz" integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== -use-sync-external-store@^1.0.0, use-sync-external-store@^1.4.0: +use-editable@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/use-editable/-/use-editable-2.3.3.tgz" + integrity sha512-7wVD2JbfAFJ3DK0vITvXBdpd9JAz5BcKAAolsnLBuBn6UDDwBGuCIAGvR3yA2BNKm578vAMVHFCWaOcA+BhhiA== + +use-sync-external-store@^1.4.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz#b174bfa65cb2b526732d9f2ac0a408027876f32d" + resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz" integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: @@ -12418,16 +13049,16 @@ utils-merge@1.0.1: resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz" - integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== - -uuid@^8.3.2: +uuid@8.3.2, uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +"uuid@^11.1.0 || ^12 || ^13 || ^14.0.0": + version "11.1.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz" + integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== + uvu@^0.5.0: version "0.5.6" resolved "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz" @@ -12440,12 +13071,42 @@ uvu@^0.5.0: validate-peer-dependencies@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/validate-peer-dependencies/-/validate-peer-dependencies-2.2.0.tgz#47b8ff008f66a66fc5d8699123844522c1d874f4" + resolved "https://registry.npmjs.org/validate-peer-dependencies/-/validate-peer-dependencies-2.2.0.tgz" integrity sha512-8X1OWlERjiUY6P6tdeU9E0EwO8RA3bahoOVG7ulOZT5MqgNDUO/BQoVjYiHPcNe+v8glsboZRIw9iToMAA2zAA== dependencies: resolve-package-path "^4.0.3" semver "^7.3.8" +validate.io-array@^1.0.3: + version "1.0.6" + resolved "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz" + integrity sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg== + +validate.io-function@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz" + integrity sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ== + +validate.io-integer-array@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz" + integrity sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA== + dependencies: + validate.io-array "^1.0.3" + validate.io-integer "^1.0.4" + +validate.io-integer@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz" + integrity sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ== + dependencies: + validate.io-number "^1.0.3" + +validate.io-number@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz" + integrity sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg== + value-equal@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz" @@ -12506,47 +13167,28 @@ vfile@^6.0.0, vfile@^6.0.1: "@types/unist" "^3.0.0" vfile-message "^4.0.0" -vscode-jsonrpc@8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz" - integrity sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA== - -vscode-languageserver-protocol@3.17.5: - version "3.17.5" - resolved "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz" - integrity sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg== - dependencies: - vscode-jsonrpc "8.2.0" - vscode-languageserver-types "3.17.5" - -vscode-languageserver-textdocument@^1.0.12, vscode-languageserver-textdocument@~1.0.11: +vscode-languageserver-textdocument@^1.0.12: version "1.0.12" resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz" integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA== -vscode-languageserver-types@3.17.5: - version "3.17.5" - resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz" - integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg== - -vscode-languageserver@~9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz" - integrity sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g== - dependencies: - vscode-languageserver-protocol "3.17.5" - -vscode-uri@^3.1.0, vscode-uri@~3.1.0: +vscode-uri@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz" integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ== +warning@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + watchpack@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" - integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg== + version "2.5.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.2.tgz#e12e82d84674266fc1c6dbfe38891b92ff0522ec" + integrity sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg== dependencies: - glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" wbuf@^1.1.0, wbuf@^1.7.3: @@ -12597,9 +13239,9 @@ webpack-dev-middleware@^7.4.2: schema-utils "^4.0.0" webpack-dev-server@>=5.2.1, webpack-dev-server@^5.2.2: - version "5.2.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz#7f36a78be7ac88833fd87757edee31469a9e47d3" - integrity sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ== + version "5.2.5" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.5.tgz#648fceaac6a5736b0935e5c1e55d6aa1d0626119" + integrity sha512-4wZtCquSuv9CKX8oybo+mqxtxZqWz47uM1Ch94lxowBztOhWCbhqvRbfC/mODOwxgV2brY+JGZpHq58/SuVFYg== dependencies: "@types/bonjour" "^3.5.13" "@types/connect-history-api-fallback" "^1.5.4" @@ -12648,17 +13290,16 @@ webpack-merge@^6.0.1: flat "^5.0.2" wildcard "^2.0.1" -webpack-sources@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891" - integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== +webpack-sources@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.5.0.tgz#87bf7f5801a4e985b1f1c92b64b9620a02f76d08" + integrity sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ== webpack@>=5.104.1, webpack@^5.88.1, webpack@^5.95.0: - version "5.105.4" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.4.tgz#1b77fcd55a985ac7ca9de80a746caffa38220169" - integrity sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw== + version "5.107.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.107.2.tgz#dea14dcb177b46b29de15f952f7303691ee2b596" + integrity sha512-v7RhXaJbpMlV0D7hC7lb2EbnxkoeUqf9qhKr6lozx3Q48pmFrqqNRmZFUEGmi7pSwm6fCQ2H1IjvCkHqdpVdjQ== dependencies: - "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" "@types/json-schema" "^7.0.15" "@webassemblyjs/ast" "^1.14.1" @@ -12668,35 +13309,30 @@ webpack@>=5.104.1, webpack@^5.88.1, webpack@^5.95.0: acorn-import-phases "^1.0.3" browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.20.0" - es-module-lexer "^2.0.0" + enhanced-resolve "^5.22.0" + es-module-lexer "^2.1.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.11" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.3.1" - mime-types "^2.1.27" + loader-runner "^4.3.2" + mime-db "^1.54.0" neo-async "^2.6.2" schema-utils "^4.3.3" tapable "^2.3.0" - terser-webpack-plugin "^5.3.17" + terser-webpack-plugin "^5.5.0" watchpack "^2.5.1" - webpack-sources "^3.3.4" + webpack-sources "^3.5.0" -webpackbar@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz" - integrity sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q== +webpackbar@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/webpackbar/-/webpackbar-7.0.0.tgz" + integrity sha512-aS9soqSO2iCHgqHoCrj4LbfGQUboDCYJPSFOAchEK+9psIjNrfSWW4Y0YEz67MKURNvMmfo0ycOg9d/+OOf9/Q== dependencies: - ansi-escapes "^4.3.2" - chalk "^4.1.2" + ansis "^3.2.0" consola "^3.2.3" - figures "^3.2.0" - markdown-table "^2.0.0" pretty-time "^1.1.0" std-env "^3.7.0" - wrap-ansi "^7.0.0" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -12794,6 +13430,13 @@ xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz" integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== +xml-formatter@^3.6.6: + version "3.7.0" + resolved "https://registry.npmjs.org/xml-formatter/-/xml-formatter-3.7.0.tgz" + integrity sha512-+8qTc3zv2UcJ1v9IsSIce37Dl4MQG14Cp7tWrwmy202UaI1wqRukw5QMX1JHsV+DX64yw77EgGsj2s5wGvuMbQ== + dependencies: + xml-parser-xo "^4.1.5" + xml-js@^1.6.11: version "1.6.11" resolved "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz" @@ -12806,6 +13449,11 @@ xml-naming@^0.1.0: resolved "https://registry.yarnpkg.com/xml-naming/-/xml-naming-0.1.0.tgz#8ab7106c5b8d23caa2fabac1cadf17136379fbd8" integrity sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw== +xml-parser-xo@^4.1.5: + version "4.1.6" + resolved "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-4.1.6.tgz" + integrity sha512-mXbSNSM+rIwndoxSwmFa83bOdeP8G/cOGr7XvxA67X7ebCzoAuVez9JYDCDub3zRDNBZxIbfjuXLSsamr7NfwQ== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" @@ -12821,10 +13469,10 @@ yaml-ast-parser@0.0.43: resolved "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz" integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== -yaml@>=1.10.3, yaml@^1.10.0, yaml@^2.8.3: - version "2.8.3" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.3.tgz#a0d6bd2efb3dd03c59370223701834e60409bd7d" - integrity sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg== +yaml@1.10.2, yaml@>=1.10.3, yaml@^1.10.0, yaml@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.9.0.tgz#78274afd93598a1dfdd6130df6a566defcbf9aa4" + integrity sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA== yargs-parser@^21.1.1: version "21.1.1"