diff --git a/.github/styles/kong/auto-ignore.txt b/.github/styles/kong/auto-ignore.txt index 468e3207335e..91db1141fba5 100644 --- a/.github/styles/kong/auto-ignore.txt +++ b/.github/styles/kong/auto-ignore.txt @@ -36,10 +36,12 @@ ingress_controller_fallback_configuration_push_duration_milliseconds ingress_controller_fallback_configuration_push_last ingress_controller_fallback_translation_broken_resource_count ingress_controller_fallback_translation_count +ingress_controller_fallback_translation_duration_milliseconds ingress_controller_processed_config_snapshot_cache_hit ingress_controller_processed_config_snapshot_cache_miss ingress_controller_translation_broken_resource_count ingress_controller_translation_count +ingress_controller_translation_duration_milliseconds inlineString involvedObject kuma @@ -103,4 +105,4 @@ KongClusterPlugin KongConsumer Rekor Sigstore -Hasura \ No newline at end of file +Hasura diff --git a/Gemfile.lock b/Gemfile.lock index c420edf60d9b..1bd4b9d0f2de 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -125,7 +125,7 @@ GEM mini_mime (1.1.5) mini_portile2 (2.8.7) minitest (5.25.1) - nio4r (2.7.0) + nio4r (2.7.3) nokogiri (1.16.7) mini_portile2 (~> 2.8.2) racc (~> 1.4) @@ -140,7 +140,7 @@ GEM coderay (~> 1.1) method_source (~> 1.0) public_suffix (5.0.4) - puma (6.4.2) + puma (6.4.3) nio4r (~> 2.0) racc (1.8.1) rack (3.0.9.1) @@ -210,7 +210,7 @@ GEM dry-cli (>= 0.7, < 2) rack-proxy (~> 0.6, >= 0.6.1) zeitwerk (~> 2.2) - webrick (1.8.1) + webrick (1.8.2) xpath (3.2.0) nokogiri (~> 1.8) zeitwerk (2.6.12) diff --git a/api-specs/Gateway-EE/3.6/kong-ee-3.6.yaml b/api-specs/Gateway-EE/3.6/kong-ee-3.6.yaml index e7e83a5315e2..a5c5ed30c93e 100644 --- a/api-specs/Gateway-EE/3.6/kong-ee-3.6.yaml +++ b/api-specs/Gateway-EE/3.6/kong-ee-3.6.yaml @@ -15192,6 +15192,198 @@ paths: fips_disabled: value: {"active": false, "version": "unknown"} summary: FIPS mode is disabled or not supported. This may be the default state or result from a license configuration that does not enable FIPS mode. + '/clustering/data-planes': + get: + summary: Retrieve connected data planes + description: > + Retrieve a list of all data planes connected to the control plane. This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlanes + responses: + '200': + description: A list of connected data planes. + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + type: object + properties: + ip: + type: string + description: The IP address of the data plane. + updated_at: + type: integer + description: Unix timestamp of the last update. + config_hash: + type: string + description: The hash of the current configuration on the data plane. + sync_status: + type: string + description: The sync status of the data plane. + version: + type: string + description: The version of Kong running on the data plane. + id: + type: string + description: Unique identifier of the data plane. + hostname: + type: string + description: The hostname of the data plane. + ttl: + type: integer + description: Time-to-live for the connection. + last_seen: + type: integer + description: Unix timestamp when the data plane was last seen by the control plane. + labels: + type: object + description: Metadata labels attached to the data plane. + properties: + deployment: + type: string + description: The deployment name. + region: + type: string + description: The region of the data plane. + cert_details: + type: object + properties: + expiry_timestamp: + type: integer + description: Timestamp for when the certificate expires. + '400': + description: Kong is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong is configured to run as a control plane for the cluster. + tags: + - clustering + + '/clustering/status': + get: + summary: Retrieve the status of connected data planes + description: > + Retrieve a status report for all data planes connected to the control plane. It includes information like the config hash, hostname, IP address, and last seen timestamp. + This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlaneStatus + responses: + '200': + description: The status of all connected data planes. + headers: + Deprecation: + description: > + Indicates that the endpoint may be deprecated in the future. + schema: + type: string + content: + application/json: + schema: + type: object + additionalProperties: + type: object + properties: + config_hash: + type: string + description: Hash of the configuration running on the data plane. + hostname: + type: string + description: Hostname of the data plane. + ip: + type: string + description: The IP address of the data plane. + last_seen: + type: integer + description: Unix timestamp of the last interaction between the data plane and control plane. + '400': + description: Kong is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong is configured to run as a control plane for the cluster. + tags: + - clustering + '/cache/{key}': + get: + summary: Get cache value by key + description: > + Retrieve the cached value for a specific key. This endpoint probes both `kong.cache` and `kong.core_cache`. + If the key exists, it returns the associated value and TTL. If not found, it returns a 404. + operationId: getCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to retrieve. + schema: + type: string + responses: + '200': + description: Cached value found. + content: + application/json: + schema: + type: object + properties: + ttl: + type: integer + description: Time-to-live (TTL) of the cached entry. + message: + type: string + description: Cached value or a message. + '404': + description: Cache key not found. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: Not found + tags: + - cache + delete: + summary: Invalidate cache by key + description: > + Invalidate the cache for a specific key in both `kong.cache` and `kong.core_cache`. + operationId: deleteCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to invalidate. + schema: + type: string + responses: + '204': + description: Cache invalidated successfully. + tags: + - cache + + '/cache': + delete: + summary: Purge all cache entries + description: > + Purge all cache entries in both `kong.cache` and `kong.core_cache`. + operationId: purgeAllCache + responses: + '204': + description: All cache entries purged successfully. + tags: + - cache + servers: - description: Default Admin API URL @@ -15359,4 +15551,10 @@ tags:

Event hooks do not work with Konnect yet.

- name: Event-hooks \ No newline at end of file + name: Event-hooks + - description: | + Retrieve information about the status of data planes when Kong Gateway is running in hybrid mode. + name: clustering + - description: | + Querying and managing cache entries. + name: cache \ No newline at end of file diff --git a/api-specs/Gateway-EE/3.7/kong-ee-3.7.yaml b/api-specs/Gateway-EE/3.7/kong-ee-3.7.yaml index 1d261aff5e92..8eb973f8bf23 100644 --- a/api-specs/Gateway-EE/3.7/kong-ee-3.7.yaml +++ b/api-specs/Gateway-EE/3.7/kong-ee-3.7.yaml @@ -15382,6 +15382,197 @@ paths: summary: Associate a role with a group tags: - Workspaces + '/clustering/data-planes': + get: + summary: Retrieve connected data planes + description: > + Retrieve a list of all data planes connected to the control plane. This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlanes + responses: + '200': + description: A list of connected data planes. + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + type: object + properties: + ip: + type: string + description: The IP address of the data plane. + updated_at: + type: integer + description: Unix timestamp of the last update. + config_hash: + type: string + description: The hash of the current configuration on the data plane. + sync_status: + type: string + description: The sync status of the data plane. + version: + type: string + description: The version of Kong running on the data plane. + id: + type: string + description: Unique identifier of the data plane. + hostname: + type: string + description: The hostname of the data plane. + ttl: + type: integer + description: Time-to-live for the connection. + last_seen: + type: integer + description: Unix timestamp when the data plane was last seen by the control plane. + labels: + type: object + description: Metadata labels attached to the data plane. + properties: + deployment: + type: string + description: The deployment name. + region: + type: string + description: The region of the data plane. + cert_details: + type: object + properties: + expiry_timestamp: + type: integer + description: Timestamp for when the certificate expires. + '400': + description: Kong is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong Gateway is running as a control plane for the cluster. + tags: + - clustering + + '/clustering/status': + get: + summary: Retrieve the status of connected data planes + description: > + Retrieve a status report for all data planes connected to the control plane. It includes information like the config hash, hostname, IP address, and last seen timestamp. + This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlaneStatus + responses: + '200': + description: The status of all connected data planes. + headers: + Deprecation: + description: > + Indicates that the endpoint may be deprecated in the future. + schema: + type: string + content: + application/json: + schema: + type: object + additionalProperties: + type: object + properties: + config_hash: + type: string + description: Hash of the configuration running on the data plane. + hostname: + type: string + description: Hostname of the data plane. + ip: + type: string + description: The IP address of the data plane. + last_seen: + type: integer + description: Unix timestamp of the last interaction between the data plane and control plane. + '400': + description: Kong is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong is running as a control plane for the cluster. + tags: + - clustering + '/cache/{key}': + get: + summary: Get cache value by key + description: > + Retrieve the cached value for a specific key. This endpoint probes both `kong.cache` and `kong.core_cache`. + If the key exists, it returns the associated value and TTL. If not found, it returns a 404. + operationId: getCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to retrieve. + schema: + type: string + responses: + '200': + description: Cached value found. + content: + application/json: + schema: + type: object + properties: + ttl: + type: integer + description: Time-to-live (TTL) of the cached entry. + message: + type: string + description: Cached value or a message. + '404': + description: Cache key not found. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: Not found + tags: + - cache + delete: + summary: Invalidate cache by key + description: > + Invalidate the cache for a specific key in both `kong.cache` and `kong.core_cache`. + operationId: deleteCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to invalidate. + schema: + type: string + responses: + '204': + description: Cache invalidated successfully. + tags: + - cache + + '/cache': + delete: + summary: Purge all cache entries + description: > + Purge all cache entries in both `kong.cache` and `kong.core_cache`. + operationId: purgeAllCache + responses: + '204': + description: All cache entries purged successfully. + tags: + - cache servers: - description: Default Admin API URL @@ -15553,4 +15744,10 @@ tags:

Event hooks do not work with Konnect yet.

- name: Event-hooks \ No newline at end of file + name: Event-hooks + - description: | + Retrieve information about the status of data planes when Kong Gateway is running in hybrid mode. + name: clustering + - description: | + Querying and managing cache entries. + name: cache \ No newline at end of file diff --git a/api-specs/Gateway-EE/latest/kong-ee.yaml b/api-specs/Gateway-EE/latest/kong-ee.yaml index bf143cdb1ece..02469b5bc721 100644 --- a/api-specs/Gateway-EE/latest/kong-ee.yaml +++ b/api-specs/Gateway-EE/latest/kong-ee.yaml @@ -15921,6 +15921,197 @@ paths: summary: Associate a role with a group tags: - Workspaces + '/clustering/data-planes': + get: + summary: Retrieve connected data planes + description: > + Retrieve a list of all data planes connected to the control plane. This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlanes + responses: + '200': + description: A list of connected data planes. + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + type: object + properties: + ip: + type: string + description: The IP address of the data plane. + updated_at: + type: integer + description: Unix timestamp of the last update. + config_hash: + type: string + description: The hash of the current configuration on the data plane. + sync_status: + type: string + description: The sync status of the data plane. + version: + type: string + description: The version of Kong running on the data plane. + id: + type: string + description: Unique identifier of the data plane. + hostname: + type: string + description: The hostname of the data plane. + ttl: + type: integer + description: Time-to-live for the connection. + last_seen: + type: integer + description: Unix timestamp when the data plane was last seen by the control plane. + labels: + type: object + description: Metadata labels attached to the data plane. + properties: + deployment: + type: string + description: The deployment name. + region: + type: string + description: The region of the data plane. + cert_details: + type: object + properties: + expiry_timestamp: + type: integer + description: Timestamp for when the certificate expires. + '400': + description: Kong Gatewat is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong is running as a control plane for the cluster. + tags: + - clustering + + '/clustering/status': + get: + summary: Retrieve the status of connected data planes + description: > + Retrieve a status report for all data planes connected to the control plane. It includes information like the config hash, hostname, IP address, and last seen timestamp. + This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlaneStatus + responses: + '200': + description: The status of all connected data planes. + headers: + Deprecation: + description: > + Indicates that the endpoint may be deprecated in the future. + schema: + type: string + content: + application/json: + schema: + type: object + additionalProperties: + type: object + properties: + config_hash: + type: string + description: Hash of the configuration running on the data plane. + hostname: + type: string + description: Hostname of the data plane. + ip: + type: string + description: The IP address of the data plane. + last_seen: + type: integer + description: Unix timestamp of the last interaction between the data plane and control plane. + '400': + description: Kong Gatewat is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong is running as a control plane for the cluster. + tags: + - clustering + '/cache/{key}': + get: + summary: Get cache value by key + description: > + Retrieve the cached value for a specific key. This endpoint probes both `kong.cache` and `kong.core_cache`. + If the key exists, it returns the associated value and TTL. If not found, it returns a 404. + operationId: getCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to retrieve. + schema: + type: string + responses: + '200': + description: Cached value found. + content: + application/json: + schema: + type: object + properties: + ttl: + type: integer + description: Time-to-live (TTL) of the cached entry. + message: + type: string + description: Cached value or a message. + '404': + description: Cache key not found. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: Not found + tags: + - cache + delete: + summary: Invalidate cache by key + description: > + Invalidate the cache for a specific key in both `kong.cache` and `kong.core_cache`. + operationId: deleteCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to invalidate. + schema: + type: string + responses: + '204': + description: Cache invalidated successfully. + tags: + - cache + + '/cache': + delete: + summary: Purge all cache entries + description: > + Purge all cache entries in both `kong.cache` and `kong.core_cache`. + operationId: purgeAllCache + responses: + '204': + description: All cache entries purged successfully. + tags: + - cache servers: - description: Default Admin API URL @@ -16101,4 +16292,10 @@ tags:

Event hooks do not work with Konnect yet.

- name: Event-hooks \ No newline at end of file + name: Event-hooks + - description: | + Retrieve information about the status of data planes when Kong Gateway is running in hybrid mode. + name: clustering + - description: | + Querying and managing cache entries. + name: cache \ No newline at end of file diff --git a/api-specs/Gateway-OSS/3.6/kong-oss-3.6.yaml b/api-specs/Gateway-OSS/3.6/kong-oss-3.6.yaml index 55f3dd5d009a..3e2271a90baa 100644 --- a/api-specs/Gateway-OSS/3.6/kong-oss-3.6.yaml +++ b/api-specs/Gateway-OSS/3.6/kong-oss-3.6.yaml @@ -7370,6 +7370,197 @@ paths: description: No vault named operationId: get-schemas-vaults-vault_name description: Retrieve the schema of a vault. + '/clustering/data-planes': + get: + summary: Retrieve connected data planes + description: > + Retrieve a list of all data planes connected to the control plane. This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlanes + responses: + '200': + description: A list of connected data planes. + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + type: object + properties: + ip: + type: string + description: The IP address of the data plane. + updated_at: + type: integer + description: Unix timestamp of the last update. + config_hash: + type: string + description: The hash of the current configuration on the data plane. + sync_status: + type: string + description: The sync status of the data plane. + version: + type: string + description: The version of Kong running on the data plane. + id: + type: string + description: Unique identifier of the data plane. + hostname: + type: string + description: The hostname of the data plane. + ttl: + type: integer + description: Time-to-live for the connection. + last_seen: + type: integer + description: Unix timestamp when the data plane was last seen by the control plane. + labels: + type: object + description: Metadata labels attached to the data plane. + properties: + deployment: + type: string + description: The deployment name. + region: + type: string + description: The region of the data plane. + cert_details: + type: object + properties: + expiry_timestamp: + type: integer + description: Timestamp for when the certificate expires. + '400': + description: Kong is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong is running as a control plane for the cluster. + tags: + - clustering + + '/clustering/status': + get: + summary: Retrieve the status of connected data planes + description: > + Retrieve a status report for all data planes connected to the control plane. It includes information like the config hash, hostname, IP address, and last seen timestamp. + This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlaneStatus + responses: + '200': + description: The status of all connected data planes. + headers: + Deprecation: + description: > + Indicates that the endpoint may be deprecated in the future. + schema: + type: string + content: + application/json: + schema: + type: object + additionalProperties: + type: object + properties: + config_hash: + type: string + description: Hash of the configuration running on the data plane. + hostname: + type: string + description: Hostname of the data plane. + ip: + type: string + description: The IP address of the data plane. + last_seen: + type: integer + description: Unix timestamp of the last interaction between the data plane and control plane. + '400': + description: Kong is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong is running as a control plane for the cluster. + tags: + - clustering + '/cache/{key}': + get: + summary: Get cache value by key + description: > + Retrieve the cached value for a specific key. This endpoint probes both `kong.cache` and `kong.core_cache`. + If the key exists, it returns the associated value and TTL. If not found, it returns a 404. + operationId: getCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to retrieve. + schema: + type: string + responses: + '200': + description: Cached value found. + content: + application/json: + schema: + type: object + properties: + ttl: + type: integer + description: Time-to-live (TTL) of the cached entry. + message: + type: string + description: Cached value or a message. + '404': + description: Cache key not found. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: Not found + tags: + - cache + delete: + summary: Invalidate cache by key + description: > + Invalidate the cache for a specific key in both `kong.cache` and `kong.core_cache`. + operationId: deleteCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to invalidate. + schema: + type: string + responses: + '204': + description: Cache invalidated successfully. + tags: + - cache + + '/cache': + delete: + summary: Purge all cache entries + description: > + Purge all cache entries in both `kong.cache` and `kong.core_cache`. + operationId: purgeAllCache + responses: + '204': + description: All cache entries purged successfully. + tags: + - cache servers: - description: Default Admin API URL url: '{protocol}://{hostname}:{port}{path}' @@ -7484,4 +7675,10 @@ tags: Tags are strings associated to entities in Kong Gateway. Tags can contain almost all UTF-8 characters, with the following exceptions: `,`,`/`, and non-printable ASCII (for example, the space character).

Most core entities can be tagged via the tags attribute upon creation or modification. - name: Tags \ No newline at end of file + name: Tags + - description: | + Retrieve information about the status of data planes when Kong Gateway is running in hybrid mode. + name: clustering + - description: | + Querying and managing cache entries. + name: cache \ No newline at end of file diff --git a/api-specs/Gateway-OSS/3.7/kong-oss-3.7.yaml b/api-specs/Gateway-OSS/3.7/kong-oss-3.7.yaml index dc16a78475ff..122e7e78ac82 100644 --- a/api-specs/Gateway-OSS/3.7/kong-oss-3.7.yaml +++ b/api-specs/Gateway-OSS/3.7/kong-oss-3.7.yaml @@ -7280,7 +7280,7 @@ paths: '401': $ref: '#/components/responses/HTTP401Error' description: | - Change the log level of all Control Plane nodes deployed in Hybrid (CP/DP) cluster. + Change the log level of all control plane nodes deployed in a hybrid (CP/DP) cluster. See the [NGINX docs](http://nginx.org/en/docs/ngx_core_module.html#error_log) for a list of accepted values. @@ -7718,6 +7718,197 @@ paths: Delete filter chain associated to a specific service. tags: - filter-chains + '/clustering/data-planes': + get: + summary: Retrieve connected data planes + description: > + Retrieve a list of all data planes connected to the control plane. This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlanes + responses: + '200': + description: A list of connected data planes. + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + type: object + properties: + ip: + type: string + description: The IP address of the data plane. + updated_at: + type: integer + description: Unix timestamp of the last update. + config_hash: + type: string + description: The hash of the current configuration on the data plane. + sync_status: + type: string + description: The sync status of the data plane. + version: + type: string + description: The version of Kong running on the data plane. + id: + type: string + description: Unique identifier of the data plane. + hostname: + type: string + description: The hostname of the data plane. + ttl: + type: integer + description: Time-to-live for the connection. + last_seen: + type: integer + description: Unix timestamp when the data plane was last seen by the control plane. + labels: + type: object + description: Metadata labels attached to the data plane. + properties: + deployment: + type: string + description: The deployment name. + region: + type: string + description: The region of the data plane. + cert_details: + type: object + properties: + expiry_timestamp: + type: integer + description: Timestamp for when the certificate expires. + '400': + description: Kong is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong is running as a control plane for the cluster. + tags: + - clustering + + '/clustering/status': + get: + summary: Retrieve the status of connected data planes + description: > + Retrieve a status report for all data planes connected to the control plane. It includes information like the config hash, hostname, IP address, and last seen timestamp. + This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlaneStatus + responses: + '200': + description: The status of all connected data planes. + headers: + Deprecation: + description: > + Indicates that the endpoint may be deprecated in the future. + schema: + type: string + content: + application/json: + schema: + type: object + additionalProperties: + type: object + properties: + config_hash: + type: string + description: Hash of the configuration running on the data plane. + hostname: + type: string + description: Hostname of the data plane. + ip: + type: string + description: The IP address of the data plane. + last_seen: + type: integer + description: Unix timestamp of the last interaction between the data plane and control plane. + '400': + description: Kong Gateway is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong is running as a control plane for the cluster. + tags: + - clustering + '/cache/{key}': + get: + summary: Get cache value by key + description: > + Retrieve the cached value for a specific key. This endpoint probes both `kong.cache` and `kong.core_cache`. + If the key exists, it returns the associated value and TTL. If not found, it returns a 404. + operationId: getCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to retrieve. + schema: + type: string + responses: + '200': + description: Cached value found. + content: + application/json: + schema: + type: object + properties: + ttl: + type: integer + description: Time-to-live (TTL) of the cached entry. + message: + type: string + description: Cached value or a message. + '404': + description: Cache key not found. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: Not found + tags: + - cache + delete: + summary: Invalidate cache by key + description: > + Invalidate the cache for a specific key in both `kong.cache` and `kong.core_cache`. + operationId: deleteCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to invalidate. + schema: + type: string + responses: + '204': + description: Cache invalidated successfully. + tags: + - cache + + '/cache': + delete: + summary: Purge all cache entries + description: > + Purge all cache entries in both `kong.cache` and `kong.core_cache`. + operationId: purgeAllCache + responses: + '204': + description: All cache entries purged successfully. + tags: + - cache servers: - description: Default Admin API URL url: '{protocol}://{hostname}:{port}{path}' @@ -7833,3 +8024,9 @@ tags:

Most core entities can be tagged via the tags attribute upon creation or modification. name: Tags + - description: | + Retreieve information about the status of data planes when Kong Gateway is configured in hybrid mode. + name: clustering + - description: | + Querying and managing cache entries. + name: cache diff --git a/api-specs/Gateway-OSS/latest/kong-oss.yaml b/api-specs/Gateway-OSS/latest/kong-oss.yaml index 6aa5a0fcb0c9..0a914d473fe2 100644 --- a/api-specs/Gateway-OSS/latest/kong-oss.yaml +++ b/api-specs/Gateway-OSS/latest/kong-oss.yaml @@ -7331,7 +7331,7 @@ paths: '401': $ref: '#/components/responses/HTTP401Error' description: | - Change the log level of all Control Plane nodes deployed in Hybrid (CP/DP) cluster. + Change the log level of all control plane nodes deployed in a hybrid (CP/DP) cluster. See the [NGINX docs](http://nginx.org/en/docs/ngx_core_module.html#error_log) for a list of accepted values. @@ -7769,6 +7769,197 @@ paths: Delete filter chain associated to a specific service. tags: - filter-chains + '/clustering/data-planes': + get: + summary: Retrieve connected data planes + description: > + Retrieve a list of all data planes connected to the control plane. This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlanes + responses: + '200': + description: A list of connected data planes. + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + type: object + properties: + ip: + type: string + description: The IP address of the data plane. + updated_at: + type: integer + description: Unix timestamp of the last update. + config_hash: + type: string + description: The hash of the current configuration on the data plane. + sync_status: + type: string + description: The sync status of the data plane. + version: + type: string + description: The version of Kong running on the data plane. + id: + type: string + description: Unique identifier of the data plane. + hostname: + type: string + description: The hostname of the data plane. + ttl: + type: integer + description: Time-to-live for the connection. + last_seen: + type: integer + description: Unix timestamp when the data plane was last seen by the control plane. + labels: + type: object + description: Metadata labels attached to the data plane. + properties: + deployment: + type: string + description: The deployment name. + region: + type: string + description: The region of the data plane. + cert_details: + type: object + properties: + expiry_timestamp: + type: integer + description: Timestamp for when the certificate expires. + '400': + description: Kong is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong is running as a control plane for the cluster. + tags: + - clustering + + '/clustering/status': + get: + summary: Retrieve the status of connected data planes + description: > + Retrieve a status report for all data planes connected to the control plane. It includes information like the config hash, hostname, IP address, and last seen timestamp. + This endpoint is only accessible when Kong Gateway is running in hybrid mode. + operationId: getDataPlaneStatus + responses: + '200': + description: The status of all connected data planes. + headers: + Deprecation: + description: > + Indicates that the endpoint may be deprecated in the future. + schema: + type: string + content: + application/json: + schema: + type: object + additionalProperties: + type: object + properties: + config_hash: + type: string + description: Hash of the configuration running on the data plane. + hostname: + type: string + description: Hostname of the data plane. + ip: + type: string + description: The IP address of the data plane. + last_seen: + type: integer + description: Unix timestamp of the last interaction between the data plane and control plane. + '400': + description: Kong is not running as a control plane. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This endpoint is only available when Kong is running as a control plane for the cluster. + tags: + - clustering + '/cache/{key}': + get: + summary: Get cache value by key + description: > + Retrieve the cached value for a specific key. This endpoint probes both `kong.cache` and `kong.core_cache`. + If the key exists, it returns the associated value and TTL. If not found, it returns a 404. + operationId: getCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to retrieve. + schema: + type: string + responses: + '200': + description: Cached value found. + content: + application/json: + schema: + type: object + properties: + ttl: + type: integer + description: Time-to-live (TTL) of the cached entry. + message: + type: string + description: Cached value or a message. + '404': + description: Cache key not found. + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: Not found + tags: + - cache + delete: + summary: Invalidate cache by key + description: > + Invalidate the cache for a specific key in both `kong.cache` and `kong.core_cache`. + operationId: deleteCacheByKey + parameters: + - name: key + in: path + required: true + description: The cache key to invalidate. + schema: + type: string + responses: + '204': + description: Cache invalidated successfully. + tags: + - cache + + '/cache': + delete: + summary: Purge all cache entries + description: > + Purge all cache entries in both `kong.cache` and `kong.core_cache`. + operationId: purgeAllCache + responses: + '204': + description: All cache entries purged successfully. + tags: + - cache servers: - description: Default Admin API URL url: '{protocol}://{hostname}:{port}{path}' @@ -7884,3 +8075,9 @@ tags:

Most core entities can be tagged via the tags attribute upon creation or modification. name: Tags + - description: | + Retreieve information about the status of data planes when Kong Gateway is configured in hybrid mode. + name: clustering + - description: | + Querying and managing cache entries. + name: cache diff --git a/app/_data/docs_nav_kic_3.3.x.yml b/app/_data/docs_nav_kic_3.3.x.yml index 3bc623fe90f8..7b7d5eefc3c8 100644 --- a/app/_data/docs_nav_kic_3.3.x.yml +++ b/app/_data/docs_nav_kic_3.3.x.yml @@ -219,3 +219,5 @@ items: url: /reference/ingress-to-gateway-migration - text: Required Permissions for Installation url: /reference/required-permissions + - text: Categories of Failures + url: /reference/failure-modes diff --git a/app/_data/docs_nav_konnect.yml b/app/_data/docs_nav_konnect.yml index 4c18b7527bc2..347fcb628c58 100644 --- a/app/_data/docs_nav_konnect.yml +++ b/app/_data/docs_nav_konnect.yml @@ -41,7 +41,15 @@ - text: Overview url: /gateway-manager/ - text: Dedicated Cloud Gateways - url: /gateway-manager/dedicated-cloud-gateways/ + items: + - text: Overview + url: /gateway-manager/dedicated-cloud-gateways/ + - text: Provision a Dedicated Cloud Gateway + url: /gateway-manager/dedicated-cloud-gateways/provision-cloud-gateway/ + - text: Transit Gateways + url: /gateway-manager/dedicated-cloud-gateways/transit-gateways + - text: Azure VNET Peering + url: /gateway-manager/dedicated-cloud-gateways/azure-peering - text: Data Plane Nodes items: - text: Installation Options @@ -58,12 +66,6 @@ url: /gateway-manager/data-plane-nodes/parameter-reference/ - text: Using Custom DP Labels url: /gateway-manager/data-plane-nodes/custom-dp-labels - - text: Transit Gateways - url: /gateway-manager/data-plane-nodes/transit-gateways - - text: Azure VNET Peering - url: /gateway-manager/data-plane-nodes/azure-peering - - text: Provision a Dedicated Cloud Gateway - url: /gateway-manager/provision-cloud-gateway/ - text: Control Plane Groups items: - text: Overview @@ -108,6 +110,7 @@ - text: Troubleshooting url: /gateway-manager/troubleshoot/ + - title: Mesh Manager icon: /assets/images/icons/konnect/icn-mesh-manager-nav.svg items: diff --git a/app/_data/kong_versions.yml b/app/_data/kong_versions.yml index 8efb125bafec..5637a7d4761a 100644 --- a/app/_data/kong_versions.yml +++ b/app/_data/kong_versions.yml @@ -29,7 +29,7 @@ pcre: "8.45" lua_doc: true - release: "2.8.x" - ee-version: "2.8.4.12" + ee-version: "2.8.4.13" ce-version: "2.8.5" edition: "gateway" luarocks_version: "2.5.1-0" @@ -277,13 +277,13 @@ - release: "1.38.x" version: "1.38.1" edition: "deck" - latest: true - release: "1.39.x" - version: "1.39.0" + version: "1.39.6" edition: "deck" - release: "1.40.x" - version: "1.40.0" + version: "1.40.2" edition: "deck" + latest: true - release: "1.41.x" version: "1.41.0" edition: "deck" diff --git a/app/_hub/kong-inc/acl/how-to/_consumer-groups.md.md b/app/_hub/kong-inc/acl/how-to/_consumer-groups.md.md index 88ab93a3f449..0ecfa0e48a3e 100644 --- a/app/_hub/kong-inc/acl/how-to/_consumer-groups.md.md +++ b/app/_hub/kong-inc/acl/how-to/_consumer-groups.md.md @@ -99,6 +99,7 @@ formats: - konnect - yaml - kubernetes + - terraform {% endplugin_example %} @@ -119,5 +120,6 @@ formats: - konnect - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/ai-azure-content-safety/how-to/_index.md b/app/_hub/kong-inc/ai-azure-content-safety/how-to/_index.md index a4156d41b1f4..7903bdb252da 100644 --- a/app/_hub/kong-inc/ai-azure-content-safety/how-to/_index.md +++ b/app/_hub/kong-inc/ai-azure-content-safety/how-to/_index.md @@ -93,6 +93,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} @@ -199,6 +200,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/ai-proxy-advanced/how-to/_cloud-provider-authentication.md b/app/_hub/kong-inc/ai-proxy-advanced/how-to/_cloud-provider-authentication.md index 9833c951b352..07c404d7a688 100644 --- a/app/_hub/kong-inc/ai-proxy-advanced/how-to/_cloud-provider-authentication.md +++ b/app/_hub/kong-inc/ai-proxy-advanced/how-to/_cloud-provider-authentication.md @@ -87,6 +87,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} @@ -118,6 +119,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} @@ -151,6 +153,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} @@ -191,5 +194,6 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} \ No newline at end of file diff --git a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_anthropic.md b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_anthropic.md index 652ccd9cfc95..876a0ee830ab 100644 --- a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_anthropic.md +++ b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_anthropic.md @@ -53,6 +53,7 @@ formats: - konnect - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_azure.md b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_azure.md index 43088918dfcc..df5e3d6bf822 100644 --- a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_azure.md +++ b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_azure.md @@ -64,6 +64,7 @@ formats: - konnect - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_cohere.md b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_cohere.md index 6cef82d662d3..4ee33a5b4286 100644 --- a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_cohere.md +++ b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_cohere.md @@ -51,6 +51,7 @@ formats: - konnect - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_llama2.md b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_llama2.md index 69261d3c7d6d..3548e41c38af 100644 --- a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_llama2.md +++ b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_llama2.md @@ -99,6 +99,7 @@ formats: - konnect - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_mistral.md b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_mistral.md index ff71b974df5a..24743c78d150 100644 --- a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_mistral.md +++ b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_mistral.md @@ -90,6 +90,7 @@ formats: - konnect - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_openai.md b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_openai.md index c986e9802606..43356bbfa2a0 100644 --- a/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_openai.md +++ b/app/_hub/kong-inc/ai-proxy-advanced/how-to/llm-provider-integration-guides/_openai.md @@ -51,6 +51,7 @@ formats: - konnect - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/ai-proxy/how-to/_cloud-provider-authentication.md b/app/_hub/kong-inc/ai-proxy/how-to/_cloud-provider-authentication.md index e4036546cba3..d287d5700fe1 100644 --- a/app/_hub/kong-inc/ai-proxy/how-to/_cloud-provider-authentication.md +++ b/app/_hub/kong-inc/ai-proxy/how-to/_cloud-provider-authentication.md @@ -87,6 +87,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} @@ -118,6 +119,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} @@ -151,6 +153,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} @@ -191,5 +194,6 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} \ No newline at end of file diff --git a/app/_hub/kong-inc/ai-semantic-cache/how-to/llm-provider-integration-guides/_mistral.md b/app/_hub/kong-inc/ai-semantic-cache/how-to/llm-provider-integration-guides/_mistral.md index 467554f21c46..3139990425ac 100644 --- a/app/_hub/kong-inc/ai-semantic-cache/how-to/llm-provider-integration-guides/_mistral.md +++ b/app/_hub/kong-inc/ai-semantic-cache/how-to/llm-provider-integration-guides/_mistral.md @@ -8,59 +8,61 @@ title: Set up AI Semantic Cache with Mistral * Mistral's API key * [Redis configured as a vector database](https://redis.io/docs/latest/develop/get-started/vector-database/) * [Redis configured as a cache](https://redis.io/docs/latest/operate/oss_and_stack/management/config/#configuring-redis-as-a-cache) -* You need a service to contain the route for the LLM provider. Create a service **first**: +* A service and a route for the LLM provider. You need a service to contain the route for the LLM provider. Create a service **first**: ```sh curl -X POST http://localhost:8001/services \ --data "name=ai-semantic-cache" \ --data "url=http://localhost:32000" ``` Remember that the upstream URL can point anywhere empty, as it won’t be used by the plugin. + + Then, create a route: + ```sh + curl -X POST http://localhost:8001/services/ai-semantic-cache/routes \ + --data "name=mistral-semantic-cache" \ + --data "paths[]=~/mistral-semantic-cache$" + ``` + -## Steps -1. Create a route: -```sh -curl -X POST http://localhost:8001/services/ai-semantic-cache/routes \ - --data "name=mistral-semantic-cache" \ - --data "paths[]=~/mistral-semantic-cache$" -``` + +{% plugin_example %} +title: Mistral Example +plugin: kong-inc/ai-semantic-cache +name: ai-semantic-cache +config: + embeddings: + auth: + header_name: Authorization + header_value: Bearer MISTRAL_API_KEY + model: + provider: mistral + name: mistral-embed + options: + upstream_url: https://api.mistral.ai/v1/embeddings + vectordb: + dimensions: 1024 + distance_metric: cosine + strategy: redis + threshold: 0.1 + redis: + host: redis-stack.redis.svc.cluster.local + port: 6379 +targets: + - route +formats: + - curl + - konnect + - yaml + - kubernetes + - terraform +{% endplugin_example %} + -1. Set the AI Semantic Cache plugin. This uses Mistral's API Key explicitly, but you can use an environment variable instead if you want. -```sh -curl -s -X POST http://localhost:8001/routes/mistral-semantic-cache/plugins \ - --header 'Content-Type: application/json' \ - --header 'accept: application/json' \ - --data '{ - "name": "ai-semantic-cache", - "instance_name": "ai-semantic-cache", - "config": { - "embeddings": { - "auth": { - "header_name": "Authorization", - "header_value": "Bearer MISTRAL_API_KEY" - }, - "model": { - "provider": "mistral", - "name": "mistral-embed", - "options": { - "upstream_url": "https://api.mistral.ai/v1/embeddings" - } - } - }, - "vectordb": { - "dimensions": 1024, - "distance_metric": "cosine", - "strategy": "redis", - "threshold": 0.1, - "redis": { - "host": "redis-stack.redis.svc.cluster.local", - "port": 6379 - } - } - } - }' -``` This configures the following: -* `embeddings.model.name`: The AI model to use for generating embeddings. This example is configured with `mistral-embed` because it's the only option available for Mistral AI. +* `embeddings.auth.header_value`: The API key for Mistral. This uses Mistral's API Key explicitly, but you can use an environment variable instead if you want. +* `model.provider`: The model provider you want to use. In this example, Mistral. +* `model.name`: The AI model to use for generating embeddings. This example is configured with `mistral-embed` because it's the only option available for Mistral AI. +* `model.options.upstream_url`: The upstream URL for the LLM provider. * `vectordb.dimensions`: The dimensionality for the vectors. This configuration uses `1024` since it's the [example Mistral uses in their documentation](https://docs.mistral.ai/capabilities/embeddings/#mistral-embed-api). * `vectordb.distance_metric`: The distance metric to use for vectors. This example uses `cosine`. * `vectordb.strategy`: Defines the vector database, in this case, Redis. diff --git a/app/_hub/kong-inc/ai-semantic-cache/how-to/llm-provider-integration-guides/_openai.md b/app/_hub/kong-inc/ai-semantic-cache/how-to/llm-provider-integration-guides/_openai.md index 8954c0819a2a..f8c10fafe797 100644 --- a/app/_hub/kong-inc/ai-semantic-cache/how-to/llm-provider-integration-guides/_openai.md +++ b/app/_hub/kong-inc/ai-semantic-cache/how-to/llm-provider-integration-guides/_openai.md @@ -8,7 +8,7 @@ title: Set up AI Semantic Cache with OpenAI * OpenAI account and subscription * [Redis configured as a vector database](https://redis.io/docs/latest/develop/get-started/vector-database/) * [Redis configured as a cache](https://redis.io/docs/latest/operate/oss_and_stack/management/config/#configuring-redis-as-a-cache) -* You need a service to contain the route for the LLM provider. Create a service **first**: +* A service and a route for the LLM provider. You need a service to contain the route for the LLM provider. Create a service **first**: ```sh curl -X POST http://localhost:8001/services \ --data "name=ai-semantic-cache" \ @@ -16,51 +16,52 @@ title: Set up AI Semantic Cache with OpenAI ``` Remember that the upstream URL can point anywhere empty, as it won’t be used by the plugin. -## Steps -1. Create a route: -```sh -curl -X POST http://localhost:8001/services/ai-semantic-cache/routes \ + Then, create a route: + ```sh + curl -X POST http://localhost:8001/services/ai-semantic-cache/routes \ --data "name=openai-semantic-cache" \ --data "paths[]=~/openai-semantic-cache$" -``` + ``` + + +{% plugin_example %} +title: OpenAI Example +plugin: kong-inc/ai-semantic-cache +name: ai-semantic-cache +config: + embeddings: + auth: + header_name: Authorization + header_value: Bearer OPENAI_API_KEY + model: + provider: openai + name: text-embedding-3-large + options: + upstream_url: https://api.openai.com/v1/embeddings + vectordb: + dimensions: 3072 + distance_metric: cosine + strategy: redis + threshold: 0.1 + redis: + host: redis-stack.redis.svc.cluster.local + port: 6379 +targets: + - route +formats: + - curl + - konnect + - yaml + - kubernetes + - terraform +{% endplugin_example %} + -1. Set the AI Semantic Cache plugin. This uses Mistral's API Key explicitly, but you can use an environment variable instead if you want. -```sh -curl -s -X POST http://localhost:8001/routes/openai-semantic-cache/plugins \ - --header 'Content-Type: application/json' \ - --header 'accept: application/json' \ - --data '{ - "name": "ai-semantic-cache", - "instance_name": "ai-semantic-cache", - "config": { - "embeddings": { - "auth": { - "header_name": "Authorization", - "header_value": "Bearer OPENAI_API_KEY" - }, - "model": { - "provider": "openai", - "name": "text-embedding-3-large", - "options": { - "upstream_url": "https://api.openai.com/v1/embeddings" - } - } - }, - "vectordb": { - "dimensions": 3072, - "distance_metric": "cosine", - "strategy": "redis", - "threshold": 0.1, - "redis": { - "host": "redis-stack.redis.svc.cluster.local", - "port": 6379 - } - } - } - }' -``` This configures the following: -* `embeddings.model.name`: The AI model to use for generating embeddings. This example is configured with `text-embedding-3-large`, but you can also choose `text-embedding-3-small` for OpenAI. +* `embeddings.auth.header_value`: The API key for OpenAI. This uses OpenAI's API Key explicitly, but you can use an environment variable instead if you want. +* `model.provider`: The model provider you want to use. In this example, OpenAI. +* `model.name`: The AI model to use for generating embeddings. This example is configured with `text-embedding-3-large`, but you can also choose `text-embedding-3-small` for OpenAI. +* `model.options.upstream_url`: The upstream URL for the LLM provider. * `vectordb.dimensions`: The dimensionality for the vectors. Since this example uses `text-embedding-3-large`, OpenAI uses `3072` as the [default embedding dimension](https://platform.openai.com/docs/guides/embeddings/how-to-get-embeddings). * `vectordb.distance_metric`: The distance metric to use for vectors. This example uses `cosine` because [OpenAI recommends it](https://platform.openai.com/docs/guides/embeddings/which-distance-function-should-i-use). * `vectordb.strategy`: Defines the vector database, in this case, Redis. @@ -68,7 +69,8 @@ This configures the following: * `vectordb.redis.host`: The host of your vector database. * `vectordb.redis.port`: The port to use for your vector database. * `config.embeddings.name`: The AI model to use for generating embeddings. This example is configured with `text-embedding-3-large`, but you can also choose `text-embedding-3-small` for OpenAI. -The `threshold` parameter defines the similarity between for accepting semantic search results. + +This uses OpenAI's API Key explicitly, but you can use an environment variable instead if you want. ## More information * *Redis Documentation:* [Vectors](https://redis.io/docs/latest/develop/interact/search-and-query/advanced-concepts/vectors/) - Learn how to use vector fields and perform vector searches in Redis diff --git a/app/_hub/kong-inc/app-dynamics/overview/_index.md b/app/_hub/kong-inc/app-dynamics/overview/_index.md index 16227744c5df..03c39d8e7315 100644 --- a/app/_hub/kong-inc/app-dynamics/overview/_index.md +++ b/app/_hub/kong-inc/app-dynamics/overview/_index.md @@ -83,15 +83,15 @@ for more information about the configuration parameters. | `KONG_APPD_CONTROLLER_HTTP_PROXY_USERNAME` | Username to use to identify to proxy. This value is a string that is never shown in logs. This value can be specified as a vault reference.| String | | | `KONG_APPD_CONTROLLER_HTTP_PROXY_PASSWORD` | Password to use to identify to proxy. This value is a string that is never shown in logs. This value can be specified as a vault reference.| String | | {% if_version eq:3.4.x %} -| `KONG_CONTROLLER_CERTIFICATE_FILE` | Path to a self-signed certificate file. For example, `/etc/kong/certs/ca-certs.pem`.

_Available starting in {{site.base_gateway}} 3.4.3.3_ | String | | -| `KONG_CONTROLLER_CERTIFICATE_DIR` | Path to a certificate directory. For example, `/etc/kong/certs/`.

_Available starting in {{site.base_gateway}} 3.4.3.3_ | String | | +| `KONG_APPD_CONTROLLER_CERTIFICATE_FILE` | Path to a self-signed certificate file. For example, `/etc/kong/certs/ca-certs.pem`.

_Available starting in {{site.base_gateway}} 3.4.3.3_ | String | | +| `KONG_APPD_CONTROLLER_CERTIFICATE_DIR` | Path to a certificate directory. For example, `/etc/kong/certs/`.

_Available starting in {{site.base_gateway}} 3.4.3.3_ | String | | {% endif_version %} {% if_version gte:3.6.x %} -| `KONG_CONTROLLER_CERTIFICATE_FILE` | Path to a self-signed certificate file. For example, `/etc/kong/certs/ca-certs.pem`. | String | | -| `KONG_CONTROLLER_CERTIFICATE_DIR` | Path to a certificate directory. For example, `/etc/kong/certs/`. | String | | +| `KONG_APPD_CONTROLLER_CERTIFICATE_FILE` | Path to a self-signed certificate file. For example, `/etc/kong/certs/ca-certs.pem`. | String | | +| `KONG_APPD_CONTROLLER_CERTIFICATE_DIR` | Path to a certificate directory. For example, `/etc/kong/certs/`. | String | | {% endif_version %} {% if_version gte:3.8.x %} -| `KONG_ANALYTICS_ENABLE` | Enable or disable Analytics Agent reporting. When disabled (default), Analytics-related logging messages are suppressed. | Boolean | `false` | +| `KONG_APPD_ANALYTICS_ENABLE` | Enable or disable Analytics Agent reporting. When disabled (default), Analytics-related logging messages are suppressed. | Boolean | `false` | {% endif_version %} #### Possible values for the `KONG_APPD_LOGGING_LEVEL` parameter diff --git a/app/_hub/kong-inc/file-log/overview/_index.md b/app/_hub/kong-inc/file-log/overview/_index.md index 9d3829d3540d..6155cde38cb2 100644 --- a/app/_hub/kong-inc/file-log/overview/_index.md +++ b/app/_hub/kong-inc/file-log/overview/_index.md @@ -13,7 +13,7 @@ to physical files on slow (spinning) disks. {% include /md/plugins-hub/log-format.md %} -### JSON object considerations +### Log format definitions {% include /md/plugins-hub/json-object-log.md %} @@ -21,7 +21,7 @@ to physical files on slow (spinning) disks. {% include /md/plugins-hub/kong-process-errors.md %} -## Custom Fields by Lua +## Custom fields by Lua {% include /md/plugins-hub/log_custom_fields_by_lua.md %} diff --git a/app/_hub/kong-inc/http-log/how-to/_splunk.md b/app/_hub/kong-inc/http-log/how-to/_splunk.md index 30afc06d28de..d849d23f9db8 100644 --- a/app/_hub/kong-inc/http-log/how-to/_splunk.md +++ b/app/_hub/kong-inc/http-log/how-to/_splunk.md @@ -42,6 +42,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} {% endif_version %} diff --git a/app/_hub/kong-inc/kafka-log/overview/_index.md b/app/_hub/kong-inc/kafka-log/overview/_index.md index 708ef7918e8c..7f3e5358ae39 100644 --- a/app/_hub/kong-inc/kafka-log/overview/_index.md +++ b/app/_hub/kong-inc/kafka-log/overview/_index.md @@ -136,7 +136,7 @@ This plugin supports the following authentication mechanisms: [Read more on how to create, renew, and revoke delegation tokens.](https://docs.confluent.io/platform/current/kafka/authentication_sasl/authentication_sasl_delegation.html#authentication-using-delegation-tokens) {% if_version gte:3.4.x %} -## Custom Fields by Lua +## Custom fields by Lua {% include /md/plugins-hub/log_custom_fields_by_lua.md %} diff --git a/app/_hub/kong-inc/loggly/overview/_index.md b/app/_hub/kong-inc/loggly/overview/_index.md index 3d34c898ca0a..cbbed5d17826 100644 --- a/app/_hub/kong-inc/loggly/overview/_index.md +++ b/app/_hub/kong-inc/loggly/overview/_index.md @@ -14,7 +14,7 @@ logging level severity the same as or lower than the set `config.log_level` for {% include /md/plugins-hub/log-format.md %} -### JSON object considerations +### Log format definitions {% include /md/plugins-hub/json-object-log.md %} @@ -22,6 +22,6 @@ logging level severity the same as or lower than the set `config.log_level` for {% include /md/plugins-hub/kong-process-errors.md %} -## Custom Fields by Lua +## Custom fields by Lua {% include /md/plugins-hub/log_custom_fields_by_lua.md %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/_demonstrating-proof-of-possession.md b/app/_hub/kong-inc/openid-connect/how-to/_demonstrating-proof-of-possession.md index 8b94d2ae3802..1ede44c07822 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/_demonstrating-proof-of-possession.md +++ b/app/_hub/kong-inc/openid-connect/how-to/_demonstrating-proof-of-possession.md @@ -98,6 +98,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authentication/_authorization-code-flow.md b/app/_hub/kong-inc/openid-connect/how-to/authentication/_authorization-code-flow.md index d712b61447a7..b86e901748db 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authentication/_authorization-code-flow.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authentication/_authorization-code-flow.md @@ -112,6 +112,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authentication/_client-credentials.md b/app/_hub/kong-inc/openid-connect/how-to/authentication/_client-credentials.md index 78cbfd2a45f6..d268300c0c0d 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authentication/_client-credentials.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authentication/_client-credentials.md @@ -81,6 +81,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authentication/_introspection.md b/app/_hub/kong-inc/openid-connect/how-to/authentication/_introspection.md index 694c183f8b03..e936c3e90ef6 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authentication/_introspection.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authentication/_introspection.md @@ -84,6 +84,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authentication/_jwt-access-token.md b/app/_hub/kong-inc/openid-connect/how-to/authentication/_jwt-access-token.md index 46a9d1608e98..aa47fb46d430 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authentication/_jwt-access-token.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authentication/_jwt-access-token.md @@ -79,6 +79,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} @@ -109,6 +110,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authentication/_kong-oauth-token.md b/app/_hub/kong-inc/openid-connect/how-to/authentication/_kong-oauth-token.md index ad8ae40c4ae5..657fcae54d97 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authentication/_kong-oauth-token.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authentication/_kong-oauth-token.md @@ -117,6 +117,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authentication/_password-grant.md b/app/_hub/kong-inc/openid-connect/how-to/authentication/_password-grant.md index 4323a0aa46dc..bcb83b6e1cc3 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authentication/_password-grant.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authentication/_password-grant.md @@ -79,6 +79,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authentication/_refresh-token.md b/app/_hub/kong-inc/openid-connect/how-to/authentication/_refresh-token.md index bea75c8e34d2..08c07f165b63 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authentication/_refresh-token.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authentication/_refresh-token.md @@ -87,6 +87,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authentication/_session.md b/app/_hub/kong-inc/openid-connect/how-to/authentication/_session.md index 4deff5aa2803..aaee2f8fb403 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authentication/_session.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authentication/_session.md @@ -75,6 +75,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authentication/_user-info.md b/app/_hub/kong-inc/openid-connect/how-to/authentication/_user-info.md index 6ae098d58c6e..eeb0e9f6d58e 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authentication/_user-info.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authentication/_user-info.md @@ -84,6 +84,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authorization/_acl.md b/app/_hub/kong-inc/openid-connect/how-to/authorization/_acl.md index f499b4bbfcd8..860b57890bd7 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authorization/_acl.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authorization/_acl.md @@ -42,6 +42,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} @@ -85,6 +86,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} @@ -115,6 +117,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authorization/_claims.md b/app/_hub/kong-inc/openid-connect/how-to/authorization/_claims.md index 2ec7331ad3f6..0c62e747fdaf 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authorization/_claims.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authorization/_claims.md @@ -58,6 +58,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/authorization/_consumer.md b/app/_hub/kong-inc/openid-connect/how-to/authorization/_consumer.md index 38a78ff65c9f..c6616f88d285 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/authorization/_consumer.md +++ b/app/_hub/kong-inc/openid-connect/how-to/authorization/_consumer.md @@ -64,6 +64,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/openid-connect/how-to/client-authentication/_mtls.md b/app/_hub/kong-inc/openid-connect/how-to/client-authentication/_mtls.md index 8e45135b62f5..05bf9050b39e 100644 --- a/app/_hub/kong-inc/openid-connect/how-to/client-authentication/_mtls.md +++ b/app/_hub/kong-inc/openid-connect/how-to/client-authentication/_mtls.md @@ -92,6 +92,7 @@ formats: - curl - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/opentelemetry/how-to/_dynatrace.md b/app/_hub/kong-inc/opentelemetry/how-to/_dynatrace.md index 1a0d3d9b7bc1..bd178bf92dfa 100644 --- a/app/_hub/kong-inc/opentelemetry/how-to/_dynatrace.md +++ b/app/_hub/kong-inc/opentelemetry/how-to/_dynatrace.md @@ -45,6 +45,7 @@ formats: - konnect - yaml - kubernetes + - terraform {% endplugin_example %} diff --git a/app/_hub/kong-inc/opentelemetry/how-to/_getting-started.md b/app/_hub/kong-inc/opentelemetry/how-to/_getting-started.md index f53a1efa5089..017192ba8267 100644 --- a/app/_hub/kong-inc/opentelemetry/how-to/_getting-started.md +++ b/app/_hub/kong-inc/opentelemetry/how-to/_getting-started.md @@ -155,6 +155,7 @@ formats: - konnect - yaml - kubernetes + - terraform {% endplugin_example %} {% endif_version %} diff --git a/app/_hub/kong-inc/request-transformer/how-to/_templates.md b/app/_hub/kong-inc/request-transformer/how-to/_templates.md index 1bc50032adfe..0292fb26e014 100644 --- a/app/_hub/kong-inc/request-transformer/how-to/_templates.md +++ b/app/_hub/kong-inc/request-transformer/how-to/_templates.md @@ -9,10 +9,11 @@ You can use any of the current request headers, query parameters, and captured U groups as templates to populate supported configuration fields. | Request Parameter | Template -| ------------- | ----------- -| header | `$(headers.)`, `$(headers[""])` or `$(headers[""])`) -| querystring | `$(query_params.)` or `$(query_params[""])`) -| captured URIs | `$(uri_captures.)` or `$(uri_captures[""])`) +| -------------- | ----------- +| header | `$(headers.)`, `$(headers[""])` or `$(headers[""])` +| querystring | `$(query_params.)` or `$(query_params[""])` +| captured URIs | `$(uri_captures.)` or `$(uri_captures[""])` +| shared variables | `$(shared.)` or `$(shared[""])`) To escape a template, wrap it inside quotes and pass inside another template. For example: diff --git a/app/_hub/kong-inc/syslog/overview/_index.md b/app/_hub/kong-inc/syslog/overview/_index.md index 32c74ea125f0..5cac6b439aa6 100644 --- a/app/_hub/kong-inc/syslog/overview/_index.md +++ b/app/_hub/kong-inc/syslog/overview/_index.md @@ -14,7 +14,7 @@ logging level severity the same as or lower than the set `config.log_level` for {% include /md/plugins-hub/log-format.md %} -### JSON object considerations +### Log format definitions {% include /md/plugins-hub/json-object-log.md %} @@ -22,7 +22,7 @@ logging level severity the same as or lower than the set `config.log_level` for {% include /md/plugins-hub/kong-process-errors.md %} -## Custom Fields by Lua +## Custom fields by Lua {% include /md/plugins-hub/log_custom_fields_by_lua.md %} diff --git a/app/_hub/kong-inc/tcp-log/overview/_index.md b/app/_hub/kong-inc/tcp-log/overview/_index.md index 947843f527f2..f6aa529f3cc7 100644 --- a/app/_hub/kong-inc/tcp-log/overview/_index.md +++ b/app/_hub/kong-inc/tcp-log/overview/_index.md @@ -8,7 +8,7 @@ Log request and response data to a TCP server. {% include /md/plugins-hub/log-format.md %} -### JSON object considerations +### Log format definitions {% include /md/plugins-hub/json-object-log.md %} @@ -16,7 +16,7 @@ Log request and response data to a TCP server. {% include /md/plugins-hub/kong-process-errors.md %} -## Custom Fields by Lua +## Custom fields by Lua {% include /md/plugins-hub/log_custom_fields_by_lua.md %} diff --git a/app/_hub/kong-inc/udp-log/overview/_index.md b/app/_hub/kong-inc/udp-log/overview/_index.md index fa99d33dbba1..d6e89bbb87c4 100644 --- a/app/_hub/kong-inc/udp-log/overview/_index.md +++ b/app/_hub/kong-inc/udp-log/overview/_index.md @@ -8,7 +8,7 @@ Log request and response data to an UDP server. {% include /md/plugins-hub/log-format.md %} -### JSON object considerations +### Log format definitions {% include /md/plugins-hub/json-object-log.md %} @@ -16,7 +16,7 @@ Log request and response data to an UDP server. {% include /md/plugins-hub/kong-process-errors.md %} -## Custom Fields by Lua +## Custom fields by Lua {% include /md/plugins-hub/log_custom_fields_by_lua.md %} diff --git a/app/_includes/docs-sidebar.html b/app/_includes/docs-sidebar.html index 093f98d05d19..439ded99f763 100644 --- a/app/_includes/docs-sidebar.html +++ b/app/_includes/docs-sidebar.html @@ -30,6 +30,9 @@ +
  • + Kong AI Gateway +
  • Plugin Hub
  • diff --git a/app/_includes/md/konnect/konnect-architecture.md b/app/_includes/md/konnect/konnect-architecture.md index 80be9ae4a7f8..f2f994d23c73 100644 --- a/app/_includes/md/konnect/konnect-architecture.md +++ b/app/_includes/md/konnect/konnect-architecture.md @@ -8,4 +8,4 @@ to manage all service configurations. You can use one or more of the following c The control plane propagates those configurations to the data plane group, which is composed of data plane nodes (and in the case of {{site.mesh_product_name}} proxies). The individual nodes can be running either on-premise, in -cloud-hosted environments, or fully managed by {{site.konnect_product_name}} with [Dedicated Cloud Gateways](/konnect/gateway-manager/dedicated-cloud-gateways). Each data plane node retains the configuration in-memory, ensuring efficient and reliable service management across deployment models. \ No newline at end of file +cloud-hosted environments, or fully managed by {{site.konnect_product_name}} with [Dedicated Cloud Gateways](/konnect/gateway-manager/dedicated-cloud-gateways/). Each data plane node retains the configuration in-memory, ensuring efficient and reliable service management across deployment models. \ No newline at end of file diff --git a/app/_includes/md/plugins-hub/json-object-log.md b/app/_includes/md/plugins-hub/json-object-log.md index 0f890ca61bad..e63352a2c904 100644 --- a/app/_includes/md/plugins-hub/json-object-log.md +++ b/app/_includes/md/plugins-hub/json-object-log.md @@ -5,7 +5,7 @@ * `request`: Properties about the request sent by the client. * `response`: Properties about the response sent to the client. * `latencies`: Latency data. -{% if_version gte:3.7.x %} +{%- if_version gte:3.7.x %} * `kong`: The internal {{site.base_gateway}} latency, in milliseconds, that it takes to process the request. * For requests that are proxied to an upstream, it is equivalent to the `X-Kong-Proxy-Latency` [response header](/gateway/latest/reference/configuration/#headers). * For requests that generate a response within {{ site.base_gateway }} (typically the result of an error or a plugin-generated response), it is equivalent to the `X-Kong-Response-Latency` [response header](/gateway/latest/reference/configuration/#headers). @@ -13,8 +13,8 @@ * `proxy`: The time in milliseconds that it took for the upstream to process the request. In other words, it's the time elapsed between transferring the request to the final service and when {{site.base_gateway}} starts receiving the response. * `receive`: The time in milliseconds that it took to receive and process the response (headers and body) from the upstream. -{% endif_version %} -{% if_version lte:3.6.x %} +{%- endif_version %} +{%- if_version lte:3.6.x %} * `kong`: The internal {{site.base_gateway}} latency, in milliseconds, that it takes to process the request. It varies based on the actual processing flow. Generally, it consists of three parts: * The time it took to find the right upstream. * The time it took to receive the whole response from upstream. @@ -22,7 +22,7 @@ * `request`: The time in milliseconds that has elapsed between when the first bytes were read from the client and the last byte was sent to the client. This is useful for detecting slow clients. * `proxy`: The time in milliseconds that it took for the upstream to process the request. In other words, it's the time elapsed between transferring the request to the final service and when {{site.base_gateway}} starts receiving the response. -{% endif_version %} +{%- endif_version %} * `tries`: a list of iterations made by the load balancer for this request. * `balancer_start`: A Unix timestamp for when the balancer started. * `ip`: The IP address of the contacted balancer. @@ -30,12 +30,16 @@ * `balancer_latency`: The latency of the balancer expressed in milliseconds. * `client_ip`: The original client IP address. * `workspace`: The UUID of the workspace associated with this request. -{% if_version gte:3.4.x %} +{%- if_version gte:3.4.x %} * `workspace_name`: The name of the workspace associated with this request. -{% endif_version %} +{%- endif_version %} * `upstream_uri`: The URI, including query parameters, for the configured upstream. * `authenticated_entity`: Properties about the authenticated credential (if an authentication plugin has been enabled). * `consumer`: The authenticated consumer (if an authentication plugin has been enabled). * `started_at`: The unix timestamp of when the request has started to be processed. +{%- if_version gte:3.6.x %} +* `source`: Indicates whether the response is generated by `kong` or `upstream`. +* `upstream_status`: The status code received from the upstream in the response. +{%- endif_version %} Log plugins enabled on services and routes contain information about the service or route. diff --git a/app/_includes/md/plugins-hub/log-format.md b/app/_includes/md/plugins-hub/log-format.md index 4c718326833e..17fed1ce33b3 100644 --- a/app/_includes/md/plugins-hub/log-format.md +++ b/app/_includes/md/plugins-hub/log-format.md @@ -1,206 +1,115 @@ - + Every request is logged separately in a JSON object, separated by a new line `\n`, with the following format: -{% if_version lte:3.3.x %} ```json { - "service": { - "host": "httpbin.org", - "created_at": 1614232642, - "connect_timeout": 60000, - "id": "167290ee-c682-4ebf-bdea-e49a3ac5e260", - "protocol": "http", - "read_timeout": 60000, - "port": 80, - "path": "/anything", - "updated_at": 1614232642, - "write_timeout": 60000, - "retries": 5, - "ws_id": "54baa5a9-23d6-41e0-9c9a-02434b010b25" - }, - "route": { - "id": "78f79740-c410-4fd9-a998-d0a60a99dc9b", - "paths": [ - "/log" - ], - "protocols": [ - "http" - ], - "strip_path": true, - "created_at": 1614232648, - "ws_id": "54baa5a9-23d6-41e0-9c9a-02434b010b25", - "request_buffering": true, - "updated_at": 1614232648, - "preserve_host": false, - "regex_priority": 0, - "response_buffering": true, - "https_redirect_status_code": 426, - "path_handling": "v0", - "service": { - "id": "167290ee-c682-4ebf-bdea-e49a3ac5e260" - } - }, - "request": { - "querystring": {}, - "size": 138, - "uri": "/log", - "url": "http://localhost:8000/log", - "headers": { - "host": "localhost:8000", - "accept-encoding": "gzip, deflate", - "user-agent": "HTTPie/2.4.0", - "accept": "*/*", - "connection": "keep-alive" + "response": { + "size": 9982, + "headers": { + "access-control-allow-origin": "*", + "content-length": "9593", + "date": "Thu, 19 Sep 2024 22:10:39 GMT", + "content-type": "text/html; charset=utf-8", + "via": "1.1 kong/3.8.0.0-enterprise-edition", + "connection": "close", + "server": "gunicorn/19.9.0", + "access-control-allow-credentials": "true", + "x-kong-upstream-latency": "171", + "x-kong-proxy-latency": "1", + {%- if_version gte:3.5.x %} + "x-kong-request-id": "2f6946328ffc4946b8c9120704a4a155" + {%- endif_version %} + }, + "status": 200 }, - "method": "GET" - }, - "response": { - "headers": { - "content-type": "application/json", - "date": "Thu, 25 Feb 2021 05:57:48 GMT", - "connection": "close", - "access-control-allow-credentials": "true", - "content-length": "503", - "server": "gunicorn/19.9.0", - "via": "kong/2.2.1.0-enterprise-edition", - "x-kong-proxy-latency": "57", - "x-kong-upstream-latency": "457", - "access-control-allow-origin": "*" + "route": { + "updated_at": 1726782477, + "tags": [], + "response_buffering": true, + "path_handling": "v0", + "protocols": [ + "http", + "https" + ], + "service": { + "id": "fb4eecf8-dec2-40ef-b779-16de7e2384c7" + }, + "https_redirect_status_code": 426, + "regex_priority": 0, + "name": "example_route", + "id": "0f1a4101-3327-4274-b1e4-484a4ab0c030", + "strip_path": true, + "preserve_host": false, + "created_at": 1726782477, + "request_buffering": true, + "ws_id": "f381e34e-5c25-4e65-b91b-3c0a86cfc393", + "paths": [ + "/example-route" + ] }, - "status": 200, - "size": 827 - }, - "latencies": { - "request": 515, - "kong": 58, - "proxy": 457 - }, - "tries": [ - { - "balancer_latency": 0, - "port": 80, - "balancer_start": 1614232668399, - "ip": "18.211.130.98" - } - ], - "client_ip": "192.168.144.1", - "workspace": "54baa5a9-23d6-41e0-9c9a-02434b010b25", - "upstream_uri": "/anything", - "authenticated_entity": { - "id": "c62c1455-9b1d-4f2d-8797-509ba83b8ae8" - }, - "consumer": { - "id": "ae974d6c-0f8a-4dc5-b701-fa0aa38592bd", - "created_at": 1674035962, - "username_lower": "foo", - "username": "foo", - "type": 0 - }, - "started_at": 1614232668342 -} -``` -{% endif_version %} - - -{% if_version gte:3.4.x %} -```json -{ - "service": { - "host": "httpbin.org", - "created_at": 1614232642, - "connect_timeout": 60000, - "id": "167290ee-c682-4ebf-bdea-e49a3ac5e260", - "protocol": "http", - "read_timeout": 60000, - "port": 80, - "path": "/anything", - "updated_at": 1614232642, - "write_timeout": 60000, - "retries": 5, - "ws_id": "54baa5a9-23d6-41e0-9c9a-02434b010b25" - }, - "route": { - "id": "78f79740-c410-4fd9-a998-d0a60a99dc9b", - "paths": [ - "/log" - ], - "protocols": [ - "http" + "workspace": "f381e34e-5c25-4e65-b91b-3c0a86cfc393", + {%- if_version gte:3.4.x %} + "workspace_name": "default", + {%- endif_version %} + "tries": [ + { + "balancer_start": 1726783839539, + "balancer_start_ns": 1.7267838395395e+18, + "ip": "34.237.204.224", + "balancer_latency": 0, + "port": 80, + "balancer_latency_ns": 27904 + } ], - "strip_path": true, - "created_at": 1614232648, - "ws_id": "54baa5a9-23d6-41e0-9c9a-02434b010b25", - "request_buffering": true, - "updated_at": 1614232648, - "preserve_host": false, - "regex_priority": 0, - "response_buffering": true, - "https_redirect_status_code": 426, - "path_handling": "v0", - "service": { - "id": "167290ee-c682-4ebf-bdea-e49a3ac5e260" - } - }, - "request": { - "querystring": {}, - "size": 138, - "uri": "/log", - "url": "http://localhost:8000/log", - "headers": { - "host": "localhost:8000", - "accept-encoding": "gzip, deflate", - "user-agent": "HTTPie/2.4.0", - "accept": "*/*", - "connection": "keep-alive" + "client_ip": "192.168.65.1", + "request": { + {%- if_version gte:3.5.x %} + "id": "2f6946328ffc4946b8c9120704a4a155", + {%- endif_version %} + "headers": { + "accept": "*/*", + "user-agent": "HTTPie/3.2.3", + "host": "localhost:8000", + "connection": "keep-alive", + "accept-encoding": "gzip, deflate" + }, + "uri": "/example-route", + "size": 139, + "method": "GET", + "querystring": {}, + "url": "http://localhost:8000/example-route" }, - "method": "GET" - }, - "response": { - "headers": { - "content-type": "application/json", - "date": "Thu, 25 Feb 2021 05:57:48 GMT", - "connection": "close", - "access-control-allow-credentials": "true", - "content-length": "503", - "server": "gunicorn/19.9.0", - "via": "kong/2.2.1.0-enterprise-edition", - "x-kong-proxy-latency": "57", - "x-kong-upstream-latency": "457", - "access-control-allow-origin": "*" + {%- if_version gte:3.6.x %} + "upstream_uri": "/", + {%- endif_version %} + "started_at": 1726783839538, + {%- if_version gte:3.6.x %} + "source": "upstream", + {%- endif_version %} + "upstream_status": "200", + "latencies": { + "kong": 1, + "proxy": 171, + "request": 173, + {%- if_version gte:3.7.x %} + "receive": 1 + {%- endif_version %} }, - "status": 200, - "size": 827 - }, - "latencies": { - "request": 515, - "kong": 58, - "proxy": 457 - }, - "tries": [ - { - "balancer_latency": 0, - "port": 80, - "balancer_start": 1614232668399, - "ip": "18.211.130.98" + "service": { + "write_timeout": 60000, + "read_timeout": 60000, + "updated_at": 1726782459, + "host": "httpbin.org", + "name": "example_service", + "id": "fb4eecf8-dec2-40ef-b779-16de7e2384c7", + "port": 80, + "enabled": true, + "created_at": 1726782459, + "protocol": "http", + "ws_id": "f381e34e-5c25-4e65-b91b-3c0a86cfc393", + "connect_timeout": 60000, + "retries": 5 } - ], - "client_ip": "192.168.144.1", - "workspace": "54baa5a9-23d6-41e0-9c9a-02434b010b25", - "workspace_name": "default", - "upstream_uri": "/anything", - "authenticated_entity": { - "id": "c62c1455-9b1d-4f2d-8797-509ba83b8ae8" - }, - "consumer": { - "id": "ae974d6c-0f8a-4dc5-b701-fa0aa38592bd", - "created_at": 1674035962, - "username_lower": "foo", - "username": "foo", - "type": 0 - }, - "started_at": 1614232668342 } -``` -{% endif_version %} +``` \ No newline at end of file diff --git a/app/_plugins/blocks/plugin_example.rb b/app/_plugins/blocks/plugin_example.rb index 0c347d16d62a..041cf9f949c5 100644 --- a/app/_plugins/blocks/plugin_example.rb +++ b/app/_plugins/blocks/plugin_example.rb @@ -19,7 +19,9 @@ # formats: # - curl # - yaml +# - konnect # - kubernetes +# - terraform # {% endplugin_example %} module Jekyll diff --git a/app/_redirects b/app/_redirects index 227e290ef03f..15f9602964d5 100644 --- a/app/_redirects +++ b/app/_redirects @@ -22,6 +22,14 @@ ###################################################################### + +## DCG seperate section + + +/konnect/gateway-manager/data-plane-nodes/azure-peering/ /konnect/gateway-manager/dedicated-cloud-gateways/azure-peering/ +/konnect/gateway-manager/data-plane-nodes/transit-gateways/ /konnect/gateway-manager/dedicated-cloud-gateways/transit-gateways/ +/konnect/gateway-manager/provision-cloud-gateway/ /konnect/gateway-manager/dedicated-cloud-gateways/provision-cloud-gateway/ +/konnect/gateway-manager/dedicated-cloud-gateways/ /konnect/gateway-manager/dedicated-cloud-gateways/ ## Saml SSO /konnect/org-management/oidc-idp/ /konnect/org-management/sso/ @@ -108,6 +116,8 @@ /konnect/dev-portal/access-and-approval/azure/ /konnect/dev-portal/access-and-approval/sso/ /konnect/dev-portal/access-and-approval/manage-app-reg-requests/ /konnect/dev-portal/access-and-approval/manage-app-connections/ /konnect/dev-portal/access-and-approval/auto-approve-devs-apps/ /konnect/dev-portal/create-dev-portal/ +/konnect/dev-portal/access-and-approval/manage-teams /konnect/dev-portal/access-and-approval/manage-teams/#enable-portal-rbac +/konnect/api/portal-auth/portal-rbac-guide/ /konnect/dev-portal/access-and-approval/manage-teams/#enable-portal-rbac # API markdown doc deprecation diff --git a/app/_src/.repos/kuma b/app/_src/.repos/kuma index 5cc8863312e3..10e28f49cef7 160000 --- a/app/_src/.repos/kuma +++ b/app/_src/.repos/kuma @@ -1 +1 @@ -Subproject commit 5cc8863312e36745d28c0629caf9848d383fc34c +Subproject commit 10e28f49cef79cd4d94b74daefac0f1aedfc993d diff --git a/app/_src/deck/guides/konnect.md b/app/_src/deck/guides/konnect.md index 42f03d70449f..2393a3224be2 100644 --- a/app/_src/deck/guides/konnect.md +++ b/app/_src/deck/guides/konnect.md @@ -13,7 +13,7 @@ You _cannot_ use decK to publish content to the Dev Portal, manage application r ## {{site.konnect_short_name}} flags -You can use decK commands such as `ping`, `diff`, or `sync` with `--konnect` flags to interact with {{site.konnect_short_name}}. +You can use decK commands such as `ping`, `diff`, or `sync` with `--konnect-*` flags to interact with {{site.konnect_short_name}}. If you don't pass a {{site.konnect_short_name}} flag to decK, decK looks for a local {{site.base_gateway}} instance instead. diff --git a/app/_src/deck/reference/deck_file_kong2tf.md b/app/_src/deck/reference/deck_file_kong2tf.md index aec650b282c1..49323c5c07e6 100644 --- a/app/_src/deck/reference/deck_file_kong2tf.md +++ b/app/_src/deck/reference/deck_file_kong2tf.md @@ -7,8 +7,7 @@ content_type: reference The `kong2tf` subcommand transforms Kong's configuration files, written in the decK format, into Terraform resources. This tool serves as a bridge for deploying API configurations from decK files directly to {{site.konnect_product_name}}, facilitating integration into the final stages of an APIOps pipeline. Essentially, `kong2tf` translates the desired API configurations into a format that Terraform can deploy, ensuring that the API's intended state is accurately reflected in the {{site.konnect_short_name}} environment. -Let's see an example of how the following decK state file is converted to Ingress API Kubernetes -manifests and Gateway API Kubernetes manifests. +Let's see an example of how the following decK state file is converted to Terraform resources. {% navtabs %} {% navtab decK state file %} diff --git a/app/_src/gateway/production/debug-request.md b/app/_src/gateway/production/debug-request.md index eaa08d4a2440..bfd581f6788a 100644 --- a/app/_src/gateway/production/debug-request.md +++ b/app/_src/gateway/production/debug-request.md @@ -13,6 +13,9 @@ Request debugging provides the following insights: {:.note} > **Note:** This feature is meant for live debugging. The JSON schema of the header containing the timing should never be considered static and is always subject to change. +{:.warning} +> **Warning:** Debug requests originating from loopback addresses are not secured by `X-Kong-Request-Debug-Token`. Deploying {{site.base_gateway}} behind other proxies will be dangerous for exposing the debug interface to the public without any authentication. + ## Enable request debugging Request debugging is enabled by default and has the following configurations in [`kong.conf`](/gateway/{{page.release}}/reference/configuration/): @@ -57,7 +60,7 @@ If the `X-Kong-Request-Debug-Log` header is set to true, timing information will ### X-Kong-Request-Debug-Token header -The `X-Kong-Request-Debug-Token` is a token for authenticating the client and making the debug request to prevent abuse. Debug requests originating from loopback addresses don't require this header. +The `X-Kong-Request-Debug-Token` is a token for authenticating the client and making the debug request to prevent abuse. **Debug requests originating from loopback addresses don't require this header.** {% if_version gte:3.5.x %} ### X-Kong-Request-Id header diff --git a/app/_src/kubernetes-ingress-controller/guides/requests/rewrite-annotation.md b/app/_src/kubernetes-ingress-controller/guides/requests/rewrite-annotation.md index e92a4f0bd162..486e613d272f 100644 --- a/app/_src/kubernetes-ingress-controller/guides/requests/rewrite-annotation.md +++ b/app/_src/kubernetes-ingress-controller/guides/requests/rewrite-annotation.md @@ -9,7 +9,13 @@ purpose: | The annotation can be used on `Ingress` and `HTTPRoute` resources, and configures a [request-transformer](/hub/kong-inc/request-transformer/) plugin within Kong when added to a route. -This definition creates a route that matches the path `/users/(\w+)` and rewrites it to `/requests/users_svc/$1` before sending the request upstream. +This definition creates a route that matches the path `/users/(\w+)` and rewrites it to `/requests/users_svc/$1` before sending the request upstream. + +## Prerequisite + +The `RewriteURIs` [feature gate](/kubernetes-ingress-controller/{{page.release}}/reference/feature-gates/) must be enabled. + +## Rewriting the path {% include /md/kic/http-test-routing-resource.md release=page.release path='/users/(\w+)' name='user' service='users' port='80' skip_host=true route_type='RegularExpression' no_results=true annotation_rewrite="/requests/users_svc/$1" %} diff --git a/app/_src/kubernetes-ingress-controller/production/observability/prometheus.md b/app/_src/kubernetes-ingress-controller/production/observability/prometheus.md index 85e5a8565d74..7d35ac574f12 100644 --- a/app/_src/kubernetes-ingress-controller/production/observability/prometheus.md +++ b/app/_src/kubernetes-ingress-controller/production/observability/prometheus.md @@ -39,6 +39,19 @@ This metric provides these labels: This metric provides the `success` label. `success` logs the status of configuration updates. If `success` is `false`, an unrecoverable error occurred. If `success` is `true`, the translation succeeded with no errors. +{% if_version gte:3.3.x %} + +### ingress_controller_translation_duration_milliseconds + +`ingress_controller_translation_duration_milliseconds` (type: `histogram`) is the amount of time, in milliseconds, that +it takes to translate the Kubernetes state to the {{site.base_gateway}} state. + +This metric provides the `success` label: + +* `success` logs the status of the translation. If `success` is `false`, an unrecoverable error occurs. If `success` is `true`, the translation succeeded without errors. + +{% endif_version %} + ### ingress_controller_configuration_push_duration_milliseconds `ingress_controller_configuration_push_duration_milliseconds` (type: `histogram`) is the amount of time, in milliseconds, that it takes to push the configuration to {{site.base_gateway}}. @@ -84,6 +97,19 @@ This metric provides the `success` label: * `success` logs the status of the translation. If `success` is `false`, an unrecoverable error occurs. If `success` is `true`, the translation succeeded without errors. +{% if_version gte:3.3.x %} + +### ingress_controller_fallback_translation_duration_milliseconds + +`ingress_controller_fallback_translation_duration_milliseconds` (type: `histogram`) provides the amount of time, in milliseconds, +that it takes to translate the Kubernetes state to the {{site.base_gateway}} state in fallback mode. + +This metric provides the `success` label: + +* `success` logs the status of the translation. If `success` is `false`, an unrecoverable error occurs. If `success` is `true`, the translation succeeded without errors. + +{% endif_version %} + ### ingress_controller_fallback_translation_broken_resource_count `ingress_controller_fallback_translation_broken_resource_count` (type: `gauge`) provides the number of resources that the controller cannot successfully translate to Kong configuration in fallback mode. diff --git a/app/_src/kubernetes-ingress-controller/reference/failure-modes.md b/app/_src/kubernetes-ingress-controller/reference/failure-modes.md new file mode 100644 index 000000000000..42eb3c4c9cb5 --- /dev/null +++ b/app/_src/kubernetes-ingress-controller/reference/failure-modes.md @@ -0,0 +1,107 @@ +--- +title: Failure Modes and Processing in KIC +type: reference +--- + +This reference describes the different types of {{site.kic_product_name}} failure modes and how it processes them. + +When you run {{site.kic_product_name}}, you can encounter the following failures: + +| Error Example | Failure Mode | +|-----------------------------------|-----------------------------------------| +| `Reconciler error` in logs | [Errors in reconciling Kubernetes resources](#errors-in-reconciling-kubernetes-resources) | +| Non-existent service referenced by an `Ingress`.
    Example: `Ingress` with a non-existent backend service | [Failures in translating configuration](#failures-in-translating-configuration) | +| {{site.base_gateway}} rejected configuration
    Example: `Ingress` with invalid regex in the path | [Failures in applying configuration to {{site.base_gateway}}](#failures-in-applying-configuration-to-kong-gateway) | +| Errors when sending configuration to {{site.konnect_product_name}}
    Example: Failed request logs | [Failures in uploading configuration to {{site.konnect_short_name}}](#failures-in-uploading-configuration-to-konnect) | + +{{site.kic_product_name}} uses different methods to process each failure type, and creates error logs or other evidence, like Prometheus metrics and Kubernetes events, so you can observe and track the failures. + + +## Errors in reconciling Kubernetes resources + +When the controllers reconciling a specific kind of Kubernetes resource run into errors in reconciling the resource, a `Reconciler error` log line is recorded and the resource is re-queued for another round of reconciliation. + +Thee Prometheus metric `controller_runtime_reconcile_errors_total` stores the total number of reconcile errors per controller from the start of {{site.kic_product_name}}. Search for the `Reconciler error` keyword in the {{site.kic_product_name}} container logs to see detailed errors. + +## Failures in translating configuration + +When {{site.kic_product_name}} finds Kubernetes resources that can't be correctly translated to {{site.base_gateway}} configuration (for example, an `Ingress` is using a non-existent `Service` as its backend), a translation failure is generated with the namespace and name of the objects causing the failure. + +The Kubernetes objects causing translation failures are not translated to {{site.base_gateway}} configuration in the translation process. +You can use Kubernetes events and Prometheus metrics to observe the translation failures. +If {{site.kic_product_name}} is integrated with {{site.konnect_product_name}}, it will report that a translation error happened in the uploading node status. + +{{site.kic_product_name}} collects all translation failures and generates a Kubernetes `Event` with the `Warning` type and the `KongConfigurationTranslationFailed` reason for each causing object in a translation failure. Prometheus metrics could also reflect the statistics of translation failures: +* `ingress_controller_translation_broken_resource_count` is the number of translation failures that happened in the latest translation +* `ingress_controller_translation_count` with the `success=false` label is the total number of translation procedures where translation failures happened + +You can use `kubectl get events -n --field-selector reason="KongConfigurationTranslationFailed"` to fetch events generated for translation failures. For example, if an `Ingress` named `ing-1` in the namespace `test` used a non-existent `Service` as its backend, you could get the event with the following command: + +```bash +kubectl get events -n test --field-selector reason="KongConfigurationTranslationFailed" + +LAST SEEN TYPE REASON OBJECT MESSAGE +18m Warning KongConfigurationTranslationFailed ingress/ing-1 failed to resolve Kubernetes Service for backend: failed to fetch Service test/httpbin-deployment-1: Service test/httpbin-deployment-1 not found +``` + +## Failures in applying configuration to {{site.base_gateway}} + +When {{site.kic_product_name}} fails to apply translated {{site.base_gateway}} configuration to {{site.base_gateway}}, {{site.kic_product_name}} will try to recover from the failure and record the failure into logs, Kubernetes events, and Prometheus metrics. +Recovery usually fails because the translated configuration is rejected by {{site.base_gateway}}. + +If {{site.kic_product_name}} fails to apply the translated configuration, it then tries to apply the last successful {{site.base_gateway}} configuration to new instances of {{site.base_gateway}} to attempt a best effort at making them available. +If the `FallbackConfiguration` feature gate is enabled, {{site.kic_product_name}} discovers the Kubernetes objects that caused the invalid configuration, and tries to build a fallback configuration from valid objects and parts of the last valid configuration that are built from the broken objects. See [fallback configuration][fallback configuration] for more information. + +### Debugging configuration failures + +You can observe failures in applying configuration from Kubernetes events and Prometheus metrics: +* {{site.kic_product_name}} generates an event with the `Warning` type and the `KongConfigurationApplyFailed` reason attached to the pod itself when it fails to apply the configuration. +* For each object that causes the invalid configuration, {{site.kic_product_name}} generates a `Warning` event type and the `KongConfigurationApplyFailed` reason attached to the object. +* The Prometheus metric `ingress_controller_configuration_push_count` with the `success=false` label shows the total number of failures from applying the configuration by reason and URL of {{site.base_gateway}} admin API. +* The Prometheus metric `ingress_controller_configuration_push_broken_resource_count` reflects the number of Kubernetes resources that caused the error in the last configuration push. + +If the CLI flag `--dump-config` is enabled, then the `/debug/config/raw-error` endpoint is enabled on the debug server port of {{site.kic_product_name}}, which will fetch the raw error returned from {{site.base_gateway}} if applying the configuration fails. + +For example, let's say you create an `Ingress` with the `ImplementationSpecific` path type and an invalid regex in `Path` (which can only be only be done when the validating webhook is disabled, otherwise it will be rejected by the webhook): + +```yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + konghq.com/strip-path: "true" + name: ingress-invalid-regex + namespace: default +spec: + ingressClassName: kong + rules: + - http: + paths: + - backend: + service: + name: httpbin-deployment + port: + number: 80 + path: /~^^/a$ + pathType: ImplementationSpecific +``` + +You can get the Kubernetes events: + +```bash +kubectl get events --all-namespaces --field-selector reason=KongConfigurationApplyFailed +NAMESPACE LAST SEEN TYPE REASON OBJECT MESSAGE +default 2m9s Warning KongConfigurationApplyFailed ingress/ingress-invalid-regex invalid paths.1: should start with: / (fixed path) or ~/ (regex path) +kong 15s Warning KongConfigurationApplyFailed pod/kong-controller-779cb796f4-7q7c2 failed to apply Kong configuration to https://10.244.1.43:8444: HTTP status 400 (message: "failed posting new config to /config") +``` + +Both the events attached to the invalid ingress and attached to the {{site.kic_product_name}} pod are recorded. + +## Failures in uploading configuration to {{site.konnect_short_name}} + +When {{site.kic_product_name}} is integrated with {{site.konnect_short_name}} and it fails to send configuration to {{site.konnect_short_name}}, it generates error logs for failed requests, records the failures to Prometheus metrics, and updates the node status of itself in {{site.konnect_short_name}}: + +* {{site.kic_product_name}} parses errors returned from {{site.konnect_short_name}} when uploading the configuration fails. It logs a line at the error level for each {{site.base_gateway}} entity that failed to create/update/delete, with the message `Failed to send request to Konnect`. +* The Prometheus metrics `ingress_controller_configuration_push_count` and `ingress_controller_configuration_push_duration_milliseconds_bucket` can also reflect configuration upload failures to {{site.konnect_short_name}}, where the `dataplane` label is the URL of {{site.konnect_short_name}} and `success=false` APIs. + +[fallback configuration]: /kubernetes-ingress-controller/{{page.release}}/guides/high-availability/fallback-config \ No newline at end of file diff --git a/app/assets/mesh/dev/raw/crds/kuma.io_meshexternalservices.yaml b/app/assets/mesh/dev/raw/crds/kuma.io_meshexternalservices.yaml index 4350612fcc06..72ea5655eabd 100644 --- a/app/assets/mesh/dev/raw/crds/kuma.io_meshexternalservices.yaml +++ b/app/assets/mesh/dev/raw/crds/kuma.io_meshexternalservices.yaml @@ -59,6 +59,7 @@ spec: type: integer required: - address + - port type: object type: array extension: diff --git a/app/assets/mesh/dev/raw/crds/kuma.io_meshmultizoneservices.yaml b/app/assets/mesh/dev/raw/crds/kuma.io_meshmultizoneservices.yaml index 380548283cec..7bb02ef79c52 100644 --- a/app/assets/mesh/dev/raw/crds/kuma.io_meshmultizoneservices.yaml +++ b/app/assets/mesh/dev/raw/crds/kuma.io_meshmultizoneservices.yaml @@ -54,11 +54,6 @@ spec: port: format: int32 type: integer - targetPort: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true required: - port type: object diff --git a/app/assets/mesh/dev/raw/crds/kuma.io_meshtlses.yaml b/app/assets/mesh/dev/raw/crds/kuma.io_meshtlses.yaml index 82c2d1e92e91..4ddbfffcb1e8 100644 --- a/app/assets/mesh/dev/raw/crds/kuma.io_meshtlses.yaml +++ b/app/assets/mesh/dev/raw/crds/kuma.io_meshtlses.yaml @@ -58,9 +58,8 @@ spec: 'targetRef' properties: mode: - description: |- - Mode defines the behavior of inbound listeners with regard to traffic encryption. - Default: Strict. + description: Mode defines the behavior of inbound listeners + with regard to traffic encryption. enum: - Permissive - Strict diff --git a/app/contributing/kong-plugins.md b/app/contributing/kong-plugins.md index 5fe2871995aa..10557b2a5a57 100644 --- a/app/contributing/kong-plugins.md +++ b/app/contributing/kong-plugins.md @@ -92,6 +92,102 @@ If you have any diagrams or screenshots that you want to add to your plugin docu > *Figure 1: Diagram showing an OAuth2 authentication flow with Keycloak.* ``` +## Adding plugin examples + +You can use `plugin_example` to easily define and format examples using the plugin. + +The example accepts all plugin config, and you can configure it to output any combination of targets and formats that you need. + +Possible targets: +* `service` +* `route` +* `consumer` +* `consumer_group` +* `global` + +Possible formats: +* `curl` +* `konnect` +* `yaml` +* `kubernetes` +* `terrafrom` + +Here's an example of how to format `plugin_example` using OpenAI and AI Semantic Cache: + + +{% raw %} +``` +{% plugin_example %} +title: OpenAI Example +plugin: kong-inc/ai-semantic-cache +name: ai-semantic-cache +config: + embeddings: + auth: + header_name: Authorization + header_value: Bearer OPENAI_API_KEY + model: + provider: openai + name: text-embedding-3-large + options: + upstream_url: https://api.openai.com/v1/embeddings + vectordb: + dimensions: 3072 + distance_metric: cosine + strategy: redis + threshold: 0.1 + redis: + host: redis-stack.redis.svc.cluster.local + port: 6379 +targets: + - route +formats: + - curl + - konnect + - yaml + - kubernetes + - terraform +{% endplugin_example %} +``` +{% endraw %} + + +And here's how that example would render: + + +{% plugin_example %} +title: OpenAI Example +plugin: kong-inc/ai-semantic-cache +name: ai-semantic-cache +config: + embeddings: + auth: + header_name: Authorization + header_value: Bearer OPENAI_API_KEY + model: + provider: openai + name: text-embedding-3-large + options: + upstream_url: https://api.openai.com/v1/embeddings + vectordb: + dimensions: 3072 + distance_metric: cosine + strategy: redis + threshold: 0.1 + redis: + host: redis-stack.redis.svc.cluster.local + port: 6379 +targets: + - route +formats: + - curl + - konnect + - yaml + - kubernetes + - terraform +{% endplugin_example %} + + ## Test and submit plugin 1. Run the docs site locally per the instructions in diff --git a/app/contributing/style-guide.md b/app/contributing/style-guide.md index f5099d3866e8..afd65c8f2213 100644 --- a/app/contributing/style-guide.md +++ b/app/contributing/style-guide.md @@ -291,7 +291,7 @@ In many cases, a link is enough, often as part of a step or a group of prerequis * [Add Developer Teams from Identity Providers](/konnect/dev-portal/access-and-approval/add-teams/) * **Include third-party instructions with integrations**: Provide instructions that involve switching between products, and include links to the official third-party documentation when possible. For example: - * [How to configure Transit Gateways](/konnect/gateway-manager/data-plane-nodes/transit-gateways/) + * [How to configure Transit Gateways](/konnect/gateway-manager/dedicated-cloud-gateways/transit-gateways/) ### Pitfalls to avoid diff --git a/app/gateway/changelog.md b/app/gateway/changelog.md index cd551f8e77c5..1a66df33c11e 100644 --- a/app/gateway/changelog.md +++ b/app/gateway/changelog.md @@ -5967,6 +5967,27 @@ openid-connect * Bumped `lodash` for Dev Portal from 4.17.11 to 4.17.21 * Bumped `lodash` for Kong Manager from 4.17.15 to 4.17.21 + +## 2.8.4.13 +**Release Date** 2024/09/20 + +### Breaking Changes + +#### Dependencies + +* Fixed RPM relocation by setting the default prefix to `/`, and added a symbolic + link for `resty` to handle missing `/usr/local/bin` in `PATH`. + +### Fixes +#### Core + +* Fixed an issue where `luarocks-admin` was not available in `/usr/local/bin`. + +#### Plugins + +* [**Rate Limiting Advanced**](/hub/kong-inc/rate-limiting-advanced/) (`rate-limiting-advanced`) + * Fixed an issue where the sync timer could stop working due to a race condition. + ## 2.8.4.12 **Release Date** 2024/07/29 diff --git a/app/konnect/api/portal-auth/portal-rbac-guide.md b/app/konnect/api/portal-auth/portal-rbac-guide.md deleted file mode 100644 index 73562e0229db..000000000000 --- a/app/konnect/api/portal-auth/portal-rbac-guide.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: Portal RBAC Setup -content-type: tutorial ---- - -## Overview - -A common scenario for a Dev Portal is to restrict developers' ability to view or request access to specific services based on their permissions. - -{{site.konnect_short_name}} Dev Portal enables administrators to define Role-Based Access Control (RBAC) for teams of developers through the Konnect API. - -Portal RBAC supports two different roles for API products that can be applied to a team of developers: - -* API Viewer: provides read access to the documentation associated with an API product. -* API Consumer: can register applications to consume versions of an API product. - -You can use the API to create a team, assign a role to the team, and finally, add developers to the team. - -## Enable RBAC in portal - -Portal RBAC is deny-by-default which means that if you haven't configured teams and roles for your developers, then enabling the capability will prevent them from seeing any services in the portal. - -We recommend setting up your teams and permissions before enabling RBAC which will allow for a seamless transition: developers see what they're supposed to, instead of nothing at all. - -RBAC is disabled by default in the {{site.konnect_short_name}} portal. To enable RBAC, you must make a `PATCH` request to the portal configuration endpoint. The following example shows how to enable RBAC in the portal. For more details on how to create your personal access token, see the [authentication documentation](/konnect/api/#authentication). - -```bash -curl --request PATCH \ - --url https://.api.konghq.com/konnect-api/api/portals/{portal-id} \ - --header 'Authorization: Bearer ' \ - --header 'Content-Type: application/json' \ - --data '{ - "rbac_enabled": true - }' -``` - -{:.note} -> The `portal-id` can be found in {{site.konnect_short_name}} within the **Dev Portal** section. - -## Setup RBAC - -### Create a Team - -To create a team, you must make a POST request to the teams endpoint. The following example shows how to create a team. - -```bash -curl --request POST \ - --url https://.api.konghq.com/v2/portals/{portal-id}/teams \ - --header 'Authorization: Bearer ' \ - --header 'Content-Type: application/json' \ - --data '{ - "name": "IDM - Developers Team", - "description": "The Identity Management (IDM) team." - }' -``` - -You can verify that the team has been created by making a GET request to the teams endpoint. - -```bash -curl --request GET \ - --url https://.api.konghq.com/v2/portals/{portal-id}/teams \ - --header 'Authorization: Bearer ' -``` - -### Assign a Role to a Team - -Once you have defined a team, the next step is to assign one or more roles to the team. - -To get a list of the available roles, make a `GET` request to the roles endpoint. The following example shows how to get a list of the available roles. - -```bash -curl --request GET \ - --url https://.api.konghq.com/v2/portal-roles \ - --header 'Authorization: Bearer ' -``` - -Available roles are limited to managing access to API products. In the future, we may expand the types of access that can be managed. The current list of available service roles are: - -* "API Consumer" -* "API Viewer" - -Assigning a role to a team requires a few pieces of information: - -* The entity type (e.g. `services`) -* The role to be applied (e.g. `API Consumer` or `API Viewer`) -* The entity id (e.g. `5b349722-dfb4-4e78-937c-41526164fa1a`) -* The region of the entity (e.g. `us` or `eu`) - -To assign a role to a team, you must make a POST request to the team roles endpoint. The following example shows how to assign the `API Viewer` role to the team created in the previous section for a particular service with id of `5b349722-dfb4-4e78-937c-41526164fa1a`. - -```bash -curl --request POST \ - --url https://.api.konghq.com/v2/portals/{portal-id}/teams//assigned-roles \ - --header 'Authorization: Bearer ' \ - --header 'Content-Type: application/json' \ - --data '{ - "role_name": "API Viewer", - "entity_id": "5b349722-dfb4-4e78-937c-41526164fa1a", - "entity_type_name": "Services", - "entity_region": "us" -}' -``` - -Each role mapping created has a unique ID that can be used later for removing that role permission. - -```json -{ - "id": "8a368199-258e-4e55-81e7-346bbf9c182a", - "role_name": "API Viewer", - "entity_region": "us", - "entity_type_name": "Services", - "entity_id": "a2df2d4d-127e-4625-b26d-92cbd4a3b930" -} -``` - -To remove a role from a team, you must make a `DELETE` request to the team roles endpoint. The following example shows how to remove the RBAC role from the team created in the previous section. - -```bash -curl --request DELETE \ - --url https://.api.konghq.com/v2/portals/{portal-id}/teams/{team-id}/assigned-roles/{role-id} \ - --header 'Authorization: Bearer ' -``` - -### Add a Developer to a Team - -Once a team has been created with one or more RBAC roles, you need to add developers to the team. - -Every developer in your portal has a unique ID that can be used for management operations. - -You can make a `GET` request to the developers endpoint to retrieve all the information about individual developers who have registered to the Dev Portal. The following example shows how to make the request. - -```bash -curl --request GET \ - --url https://.api.konghq.com/v2/portals/{portal-id}/developers \ - --header 'Authorization: Bearer ' -``` - -To add a developer to a team, you make a POST request to the team members endpoint with the unique ID of the developer you want to add. The following example shows how to add a developer to a team. - -```bash -curl --request POST \ - --url https://.api.konghq.com/v2/portals/{portal-id}/teams//developers \ - --header 'Authorization: Bearer ' \ - --header 'Content-Type: application/json' \ - --data '{ - "id": "" -}' -``` - -### Remove a Developer from a Team - -To remove a developer from a team, you must make a `DELETE` request to the team members endpoint with the unique ID of the developer you want to remove. The following example shows how to add a developer to a team. - -```bash -curl --request DELETE \ - --url https://.api.konghq.com/v2/portals/{portal-id}/teams/{team-id}/developers/{developer-id} \ - --header 'Authorization: Bearer ' \ - --header 'Content-Type: application/json' -``` - -## More information -[Portal RBAC API documentation](/konnect/api/portal-rbac/v2/) diff --git a/app/konnect/gateway-manager/data-plane-nodes/azure-peering.md b/app/konnect/gateway-manager/dedicated-cloud-gateways/azure-peering.md similarity index 100% rename from app/konnect/gateway-manager/data-plane-nodes/azure-peering.md rename to app/konnect/gateway-manager/dedicated-cloud-gateways/azure-peering.md diff --git a/app/konnect/gateway-manager/dedicated-cloud-gateways.md b/app/konnect/gateway-manager/dedicated-cloud-gateways/index.md similarity index 95% rename from app/konnect/gateway-manager/dedicated-cloud-gateways.md rename to app/konnect/gateway-manager/dedicated-cloud-gateways/index.md index fa9eafac0d35..781076c5619b 100644 --- a/app/konnect/gateway-manager/dedicated-cloud-gateways.md +++ b/app/konnect/gateway-manager/dedicated-cloud-gateways/index.md @@ -43,7 +43,7 @@ Dedicated Cloud Gateways support public and private networking on AWS. * **Public networking:** Easy access to services and APIs, but low security. We recommend only using this option for testing. * **Private networking:** A secure way to expose your APIs to the internet. -You can set up private networking for Dedicated Cloud Gateways with [AWS Transit Gateways](/konnect/gateway-manager/data-plane-nodes/transit-gateways/). +You can set up private networking for Dedicated Cloud Gateways with [AWS Transit Gateways](/konnect/gateway-manager/dedicated-cloud-gateways/transit-gateways/). ## Plugin considerations for Dedicated Cloud Gateways There are some limitations for plugins with Dedicated Cloud Gateways: @@ -57,7 +57,7 @@ This includes [Data Plane Resilience](/gateway/latest/kong-enterprise/cp-outage- * [Networking and Peering information](/konnect/network-resiliency/#how-does-network-peering-work-with-dedicated-cloud-gateway-nodes) * [Supported regions](/konnect/geo/#dedicated-cloud-gateways) -* [Transit Gateways](/konnect/gateway-manager/data-plane-nodes/transit-gateways/) +* [Transit Gateways](/konnect/gateway-manager/dedicated-cloud-gateways/transit-gateways/) * [How to upgrade data planes](/konnect/gateway-manager/data-plane-nodes/upgrade/) * [Custom Domains](/konnect/reference/custom-dns/) * [Cloud Gateways API](/konnect/api/cloud-gateways/latest/) \ No newline at end of file diff --git a/app/konnect/gateway-manager/provision-cloud-gateway.md b/app/konnect/gateway-manager/dedicated-cloud-gateways/provision-cloud-gateway.md similarity index 100% rename from app/konnect/gateway-manager/provision-cloud-gateway.md rename to app/konnect/gateway-manager/dedicated-cloud-gateways/provision-cloud-gateway.md diff --git a/app/konnect/gateway-manager/data-plane-nodes/transit-gateways.md b/app/konnect/gateway-manager/dedicated-cloud-gateways/transit-gateways.md similarity index 100% rename from app/konnect/gateway-manager/data-plane-nodes/transit-gateways.md rename to app/konnect/gateway-manager/dedicated-cloud-gateways/transit-gateways.md diff --git a/app/konnect/gateway-manager/kic.md b/app/konnect/gateway-manager/kic.md index b13f2238d70b..29e9231d446d 100644 --- a/app/konnect/gateway-manager/kic.md +++ b/app/konnect/gateway-manager/kic.md @@ -54,6 +54,11 @@ Item | Description **Summary** | This section displays the traffic and error rate of your KIC data plane node. **Analytics** | Analytics data for the KIC data plane node. You can configure the analytics options using the [**Analytics tool**](/konnect/analytics/). +### Optimize performance of synchronizing configuration + +When your environment has many `KongConsumer`s, they can slow down your configuration synchronization with {{site.konnect_short_name}}. {{site.kic_product_name}} 3.3 and later provides a `--disable-consumer-sync` flag to disable synchronizing consumers with {{site.konnect_short_name}}. You can enable this flag to make the synchronization faster. See [{{site.kic_product_name}} CLI arguments](/kubernetes-ingress-controller/latest/reference/cli-arguments/) for more details. + + ## KIC analytics compatibility The following table describes which {{site.base_gateway}} versions are compatible with the KIC analytics feature in {{site.konnect_short_name}}: diff --git a/app/konnect/getting-started/index.md b/app/konnect/getting-started/index.md index 7e6de0a9eabf..df1060ddc687 100644 --- a/app/konnect/getting-started/index.md +++ b/app/konnect/getting-started/index.md @@ -58,7 +58,7 @@ These gateways provide: You can run Dedicated Cloud Gateways in [autopilot mode](/konnect/gateway-manager/dedicated-cloud-gateways/#autopilot-mode) to streamline the management of your API gateway resources by automatically adjusting to traffic and volume. This mode ensures that your infrastructure is prepared to handle traffic as it arrives, scaling resources to maintain consistent performance without manual intervention. -Dedicated Cloud Gateways also support [private networking](/konnect/gateway-manager/data-plane-nodes/transit-gateways). +Dedicated Cloud Gateways also support [private networking](/konnect/gateway-manager/dedicated-cloud-gateways/transit-gateways). Integration with [AWS Transit Gateway](https://aws.amazon.com/transit-gateway/), allows you to connect your networks in a way that supports your organization's security requirements, enabling your {{site.konnect_short_name}}-powered API infrastructure to interact with your internal networks and cloud resources securely. diff --git a/changelog.md b/changelog.md index d719fee42bec..1bf7be230b6d 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,64 @@ +## Week 38 + +### [Fix: Logging plugins log format + descriptions](https://github.com/Kong/docs.konghq.com/pull/7948) (2024-09-20) + +The log format example and descriptions were missing some changes from 3.6, and had incorrectly tagged versions. +Tested this out via the File Log plugin and compared the output to any log serializer [changelog entries](https://docs.konghq.com/gateway/changelog/). + +"JSON object considerations" was also a strange title that didn't describe the contents, which are just descriptions of each log item, so updated that to be clearer. + +Issue reported on Slack. + +#### Modified + +- https://docs.konghq.com/hub/kong-inc/file-log/overview/ +- https://docs.konghq.com/hub/kong-inc/kafka-log/overview/ +- https://docs.konghq.com/hub/kong-inc/loggly/overview/ +- https://docs.konghq.com/hub/kong-inc/syslog/overview/ +- https://docs.konghq.com/hub/kong-inc/tcp-log/overview/ +- https://docs.konghq.com/hub/kong-inc/udp-log/overview/ + + +### [Fix: Add missing `_APPD` to env variables](https://github.com/Kong/docs.konghq.com/pull/7945) (2024-09-20) + +Some of the newer parameters for the AppDynamics plugin are missing the `_APPD` section of the prefix. They should all be `KONG_APPD_*`. + +#### Modified + +- https://docs.konghq.com/hub/kong-inc/app-dynamics/overview/ + + +### [fix: Convert to AI Semantic Cache LLM examples to `plugin_example`](https://github.com/Kong/docs.konghq.com/pull/7932) (2024-09-19) + +Converting the LLM examples to use `plugin_example` instead for better consistency. + +DOCU-4060 + +#### Modified + +- https://docs.konghq.com/hub/kong-inc/ai-semantic-cache/how-to/llm-provider-integration-guides/ +- https://docs.konghq.com/hub/kong-inc/ai-semantic-cache/how-to/llm-provider-integration-guides/ +- https://docs.konghq.com/contributing/kong-plugins + + +### [Fix: AppD plugin missing info + broken collapsible note](https://github.com/Kong/docs.konghq.com/pull/7921) (2024-09-16) + +* Documenting the ARM64 limitation for the C/C++ AppD SDK +* Fixing the collapsible note + +https://konghq.atlassian.net/browse/DOCU-4061 + +Collapsible note with broken styling: https://docs.konghq.com/hub/kong-inc/app-dynamics/ + +![Screenshot 2024-09-12 at 1 35 15 PM](https://github.com/user-attachments/assets/7bb1e367-76eb-4ae8-ba36-fcc54b4954a4) + +#### Modified + +- https://docs.konghq.com/hub/kong-inc/app-dynamics/overview/ + ## Week 37 ### [Update: 3.8 known issue for JSON threat protection plugin](https://github.com/Kong/docs.konghq.com/pull/7924) (2024-09-13) diff --git a/docs/templates/partner-plugin-template/_metadata.yml b/docs/templates/partner-plugin-template/_metadata/_index.yml similarity index 100% rename from docs/templates/partner-plugin-template/_metadata.yml rename to docs/templates/partner-plugin-template/_metadata/_index.yml diff --git a/package-lock.json b/package-lock.json index 710af6132b2b..94356959122b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,13 +26,13 @@ "@rollup/plugin-inject": "^5.0.3", "@vitejs/plugin-vue": "^5.0.0", "broken-link-checker": "0.7.8", - "browser-sync": "3.0.2", + "browser-sync": "3.0.3", "cheerio": "1.0.0", "fancy-log": "2.0.0", "jest": "29.7.0", "less": "^4.1.3", "lodash": "4.17.21", - "netlify-cli": "17.35.0", + "netlify-cli": "17.36.2", "node-fetch": "2.7.0", "postcss-custom-properties": "^14.0.0", "prettier": "3.3.3", @@ -3388,7 +3388,6 @@ "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -3991,13 +3990,13 @@ } }, "node_modules/browser-sync": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.2.tgz", - "integrity": "sha512-PC9c7aWJFVR4IFySrJxOqLwB9ENn3/TaXCXtAa0SzLwocLN3qMjN+IatbjvtCX92BjNXsY6YWg9Eb7F3Wy255g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz", + "integrity": "sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==", "dev": true, "dependencies": { - "browser-sync-client": "^3.0.2", - "browser-sync-ui": "^3.0.2", + "browser-sync-client": "^3.0.3", + "browser-sync-ui": "^3.0.3", "bs-recipes": "1.3.4", "chalk": "4.1.2", "chokidar": "^3.5.1", @@ -4011,15 +4010,15 @@ "fs-extra": "3.0.1", "http-proxy": "^1.18.1", "immutable": "^3", - "micromatch": "^4.0.2", + "micromatch": "^4.0.8", "opn": "5.3.0", "portscanner": "2.2.0", "raw-body": "^2.3.2", "resp-modifier": "6.0.2", "rx": "4.1.0", - "send": "0.16.2", - "serve-index": "1.9.1", - "serve-static": "1.13.2", + "send": "^0.19.0", + "serve-index": "^1.9.1", + "serve-static": "^1.16.2", "server-destroy": "1.0.1", "socket.io": "^4.4.1", "ua-parser-js": "^1.0.33", @@ -4033,9 +4032,9 @@ } }, "node_modules/browser-sync-client": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.2.tgz", - "integrity": "sha512-tBWdfn9L0wd2Pjuz/NWHtNEKthVb1Y67vg8/qyGNtCqetNz5lkDkFnrsx5UhPNPYUO8vci50IWC/BhYaQskDiQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.3.tgz", + "integrity": "sha512-TOEXaMgYNjBYIcmX5zDlOdjEqCeCN/d7opf/fuyUD/hhGVCfP54iQIDhENCi012AqzYZm3BvuFl57vbwSTwkSQ==", "dev": true, "dependencies": { "etag": "1.8.1", @@ -4047,9 +4046,9 @@ } }, "node_modules/browser-sync-ui": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.2.tgz", - "integrity": "sha512-V3FwWAI+abVbFLTyJjXJlCMBwjc3GXf/BPGfwO2fMFACWbIGW9/4SrBOFYEOOtqzCjQE0Di+U3VIb7eES4omNA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.3.tgz", + "integrity": "sha512-FcGWo5lP5VodPY6O/f4pXQy5FFh4JK0f2/fTBsp0Lx1NtyBWs/IfPPJbW8m1ujTW/2r07oUXKTF2LYZlCZktjw==", "dev": true, "dependencies": { "async-each-series": "0.1.1", @@ -4562,7 +4561,6 @@ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } @@ -4868,11 +4866,14 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, - "license": "MIT" + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/detect-libc": { "version": "2.0.3", @@ -5136,25 +5137,25 @@ } }, "node_modules/engine.io-client": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz", - "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz", + "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", "ws": "~8.17.1", - "xmlhttprequest-ssl": "~2.0.0" + "xmlhttprequest-ssl": "~2.1.1" } }, "node_modules/engine.io-client/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -5165,6 +5166,12 @@ } } }, + "node_modules/engine.io-client/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/engine.io-parser": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", @@ -5415,9 +5422,8 @@ "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5799,9 +5805,8 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7922,13 +7927,15 @@ } }, "node_modules/mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT", "bin": { "mime": "cli.js" + }, + "engines": { + "node": ">=4" } }, "node_modules/mime-db": { @@ -8011,8 +8018,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/mkdirp": { "version": "3.0.1", @@ -8159,24 +8165,23 @@ } }, "node_modules/netlify-cli": { - "version": "17.35.0", - "resolved": "https://registry.npmjs.org/netlify-cli/-/netlify-cli-17.35.0.tgz", - "integrity": "sha512-ftVu3mmGVDyfjtAXQeQ+IODmKmqRzAMZHQI2U1kNWXxipPIig2DUfK3ZhBR20o2vH6aO9l4x8XXAlqBQFruMdQ==", + "version": "17.36.2", + "resolved": "https://registry.npmjs.org/netlify-cli/-/netlify-cli-17.36.2.tgz", + "integrity": "sha512-kDrsnNSYT3ZWwJNlcpqRPCAz28ahxwZ2Mo/pntNQqScN+MKcVEwia+Twy6FCPakotVJ9nQFquU85jU4mqaXgUw==", "dev": true, "hasInstallScript": true, "hasShrinkwrap": true, - "license": "MIT", "dependencies": { "@bugsnag/js": "7.25.0", "@fastify/static": "7.0.4", - "@netlify/blobs": "8.0.0", - "@netlify/build": "29.54.0", - "@netlify/build-info": "7.14.1", + "@netlify/blobs": "8.0.1", + "@netlify/build": "29.54.4", + "@netlify/build-info": "7.14.3", "@netlify/config": "20.19.0", "@netlify/edge-bundler": "12.2.3", "@netlify/edge-functions": "2.9.0", "@netlify/local-functions-proxy": "1.1.1", - "@netlify/zip-it-and-ship-it": "9.38.0", + "@netlify/zip-it-and-ship-it": "9.39.2", "@octokit/rest": "20.1.1", "@opentelemetry/api": "1.8.0", "ansi-escapes": "7.0.0", @@ -8205,7 +8210,7 @@ "envinfo": "7.13.0", "etag": "1.8.1", "execa": "5.1.1", - "express": "4.19.2", + "express": "4.20.0", "express-logging": "1.1.1", "extract-zip": "2.0.1", "fastest-levenshtein": "1.0.16", @@ -8404,9 +8409,9 @@ } }, "node_modules/netlify-cli/node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.24.8", @@ -9337,18 +9342,18 @@ "dev": true }, "node_modules/netlify-cli/node_modules/@netlify/blobs": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-8.0.0.tgz", - "integrity": "sha512-p9DdRSPvDuFhl9PYODWRo5QYWB4Du/lX5gbZNmwmtw+xfcaIpPD3lWs8I1OwHcpVgbay0Ik4JfCT75ZiPylKgA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-8.0.1.tgz", + "integrity": "sha512-IrZHVqillU0x12eDbsap4Ba6poi+4IdVCYjZa+tA0eD95TaSbSqfw1zNkO27MiKw0pOjPB6+RXFK4pdfOs/qUQ==", "dev": true, "engines": { "node": "^14.16.0 || >=16.0.0" } }, "node_modules/netlify-cli/node_modules/@netlify/build": { - "version": "29.54.0", - "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.54.0.tgz", - "integrity": "sha512-bRq3uecHqYXgZVT1TxAsSkvk3iiS04RDHVr+REpYt30mW1/AkCvmniYQz7ump+0+Ys9Kp24UPNo3zk4R1l/NqA==", + "version": "29.54.4", + "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.54.4.tgz", + "integrity": "sha512-fblSp3ic7reMyIr11L9TKQhT550HihL11xMounQshQ/dnkv8t9Ch0kWNqEhwyxsc3r/jiEdX9Ywd1xi6wm4qJw==", "dev": true, "dependencies": { "@bugsnag/js": "^7.0.0", @@ -9357,12 +9362,12 @@ "@netlify/config": "^20.19.0", "@netlify/edge-bundler": "12.2.3", "@netlify/framework-info": "^9.8.13", - "@netlify/functions-utils": "^5.2.79", + "@netlify/functions-utils": "^5.2.83", "@netlify/git-utils": "^5.1.1", "@netlify/opentelemetry-utils": "^1.2.1", "@netlify/plugins-list": "^6.80.0", "@netlify/run-utils": "^5.1.1", - "@netlify/zip-it-and-ship-it": "9.38.0", + "@netlify/zip-it-and-ship-it": "9.39.2", "@sindresorhus/slugify": "^2.0.0", "ansi-escapes": "^6.0.0", "chalk": "^5.0.0", @@ -9427,9 +9432,9 @@ } }, "node_modules/netlify-cli/node_modules/@netlify/build-info": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@netlify/build-info/-/build-info-7.14.1.tgz", - "integrity": "sha512-0FhHK8+v80pDt0hkN4s5+sFUL5OF8bVU4bqwqDx04NiSQ/jOUSwCZ70F5MHkbvjuqf4RoP0vVKqrvIB3EP0wyA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@netlify/build-info/-/build-info-7.14.3.tgz", + "integrity": "sha512-HUYHll4I/5aus/mmmiALOWuYwjvSGLD+KxHROBTNVO5D9i1HNXbIvYCtInBYX+xwoXCwqQuXWwHXTAfusXT3Sw==", "dev": true, "dependencies": { "@bugsnag/js": "^7.20.0", @@ -9532,9 +9537,9 @@ } }, "node_modules/netlify-cli/node_modules/@netlify/build-info/node_modules/yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", "dev": true, "bin": { "yaml": "bin.mjs" @@ -11000,12 +11005,12 @@ } }, "node_modules/netlify-cli/node_modules/@netlify/functions-utils": { - "version": "5.2.79", - "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.2.79.tgz", - "integrity": "sha512-lpHlxN1LmRo/ah6thRQ2IeOYpXmRh5Eh3bZE/gSlCsKT4uOCwBQFI5lVXVXS2ZpNiGPydYgIzCblF18/w2drFg==", + "version": "5.2.83", + "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.2.83.tgz", + "integrity": "sha512-ZWItQ4yaVN/15tXTOFv+mOjcS8aEygGS/GGNOUIT+FZsWc5IKFKslr7WsVlwwixoPCDCMSwZtaLuX+FbPVFo1w==", "dev": true, "dependencies": { - "@netlify/zip-it-and-ship-it": "9.38.0", + "@netlify/zip-it-and-ship-it": "9.39.2", "cpy": "^9.0.0", "path-exists": "^5.0.0" }, @@ -11495,15 +11500,15 @@ } }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.38.0.tgz", - "integrity": "sha512-xQK4O0rhAbzboKod/Dw7EwzwDKLki8ui+zTpA8iS5RtLMRtRUPI8P+aSScafwrt3HL3NHmNe8Pdd+0RYSTGQDQ==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.39.2.tgz", + "integrity": "sha512-vTEUxRIXsxnDDHnycw8wYmx5IhZp0J5s1d5ZZevnjOI9ozHoP4DKEU6EMnGyioQxyVwYRJOZjbY1fOL+ZEU7Rg==", "dev": true, "dependencies": { "@babel/parser": "^7.22.5", - "@babel/types": "7.25.2", + "@babel/types": "7.25.6", "@netlify/binary-info": "^1.0.0", - "@netlify/serverless-functions-api": "^1.22.0", + "@netlify/serverless-functions-api": "^1.23.1", "@vercel/nft": "^0.27.1", "archiver": "^7.0.0", "common-path-prefix": "^3.0.0", @@ -11543,9 +11548,9 @@ } }, "node_modules/netlify-cli/node_modules/@netlify/zip-it-and-ship-it/node_modules/@netlify/serverless-functions-api": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.22.0.tgz", - "integrity": "sha512-vv8fWCOIadSvdmR+8UYopdyHO/gOysl+8IBOxUUB0B3y7nnLOiBniE1JBeBR3y7gI/q/cnibBF2RhR3W04Wo/A==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.23.1.tgz", + "integrity": "sha512-o0WjLdMbPeE5DT9uazGOFI6pWDPF85BsCaO0iGAkXCti6tvxPM19NtsBfy9wVSYXUUIXip2jwZBT6sL8YpXMRQ==", "dev": true, "dependencies": { "@netlify/node-cookies": "^0.1.0", @@ -12185,8 +12190,6 @@ }, "node_modules/netlify-cli/node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/napi-wasm/-/napi-wasm-1.1.0.tgz", - "integrity": "sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg==", "dev": true, "inBundle": true, "license": "MIT" @@ -13708,70 +13711,6 @@ "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", "dev": true }, - "node_modules/netlify-cli/node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/netlify-cli/node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/netlify-cli/node_modules/body-parser/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify-cli/node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify-cli/node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/netlify-cli/node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -13995,13 +13934,19 @@ } }, "node_modules/netlify-cli/node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15279,6 +15224,23 @@ "node": ">=10" } }, + "node_modules/netlify-cli/node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/netlify-cli/node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -15761,6 +15723,27 @@ "stackframe": "^1.3.4" } }, + "node_modules/netlify-cli/node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/netlify-cli/node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/netlify-cli/node_modules/es-module-lexer": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", @@ -15974,37 +15957,37 @@ } }, "node_modules/netlify-cli/node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.20.0.tgz", + "integrity": "sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "1.2.0", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.0", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -16027,6 +16010,45 @@ "node": ">= 0.10.26" } }, + "node_modules/netlify-cli/node_modules/express/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/netlify-cli/node_modules/express/node_modules/body-parser/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/netlify-cli/node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -16036,6 +16058,12 @@ "ms": "2.0.0" } }, + "node_modules/netlify-cli/node_modules/express/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, "node_modules/netlify-cli/node_modules/express/node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -16045,6 +16073,15 @@ "node": ">= 0.8" } }, + "node_modules/netlify-cli/node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/netlify-cli/node_modules/express/node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -16061,10 +16098,19 @@ "node": ">= 0.8" } }, - "node_modules/netlify-cli/node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/netlify-cli/node_modules/express/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify-cli/node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", "dev": true }, "node_modules/netlify-cli/node_modules/express/node_modules/safe-buffer": { @@ -16087,48 +16133,129 @@ } ] }, - "node_modules/netlify-cli/node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "node_modules/netlify-cli/node_modules/express/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "dependencies": { - "mime-db": "^1.28.0" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/netlify-cli/node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "node_modules/netlify-cli/node_modules/express/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/netlify-cli/node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/netlify-cli/node_modules/express/node_modules/serve-static": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.0.tgz", + "integrity": "sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==", "dev": true, "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" }, "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/netlify-cli/node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "node_modules/netlify-cli/node_modules/express/node_modules/serve-static/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify-cli/node_modules/express/node_modules/serve-static/node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/netlify-cli/node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify-cli/node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/netlify-cli/node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/netlify-cli/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "dependencies": { @@ -16716,9 +16843,9 @@ "dev": true }, "node_modules/netlify-cli/node_modules/find-my-way": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.0.tgz", - "integrity": "sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", + "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", @@ -17048,14 +17175,19 @@ } }, "node_modules/netlify-cli/node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17233,6 +17365,18 @@ "node": ">=0.6.0" } }, + "node_modules/netlify-cli/node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/netlify-cli/node_modules/got": { "version": "12.6.1", "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", @@ -17311,6 +17455,30 @@ "node": ">=8" } }, + "node_modules/netlify-cli/node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify-cli/node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/netlify-cli/node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -17384,6 +17552,18 @@ "node": ">=8" } }, + "node_modules/netlify-cli/node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/netlify-cli/node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -19524,12 +19704,6 @@ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", "dev": true }, - "node_modules/netlify-cli/node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, "node_modules/netlify-cli/node_modules/merge-options": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", @@ -19588,12 +19762,12 @@ "dev": true }, "node_modules/netlify-cli/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -20286,10 +20460,13 @@ } }, "node_modules/netlify-cli/node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -20851,12 +21028,6 @@ "node": "14 || >=16.14" } }, - "node_modules/netlify-cli/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, "node_modules/netlify-cli/node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -20892,9 +21063,9 @@ "dev": true }, "node_modules/netlify-cli/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", "dev": true }, "node_modules/netlify-cli/node_modules/picomatch": { @@ -20921,9 +21092,9 @@ } }, "node_modules/netlify-cli/node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "dev": true, "funding": [ { @@ -20941,8 +21112,8 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -21962,85 +22133,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify-cli/node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/netlify-cli/node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/netlify-cli/node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/netlify-cli/node_modules/send/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify-cli/node_modules/send/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify-cli/node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/netlify-cli/node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -22053,6 +22145,23 @@ "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==", "dev": true }, + "node_modules/netlify-cli/node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/netlify-cli/node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -22141,14 +22250,18 @@ } }, "node_modules/netlify-cli/node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22288,9 +22401,9 @@ } }, "node_modules/netlify-cli/node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "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==", "dev": true, "engines": { "node": ">=0.10.0" @@ -25082,7 +25195,6 @@ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -25683,36 +25795,101 @@ } }, "node_modules/send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/send/node_modules/ms": { + "node_modules/send/node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } }, "node_modules/serialize-error": { "version": "8.1.0", @@ -25759,27 +25936,34 @@ } }, "node_modules/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, - "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/set-function-length": { "version": "1.2.2", @@ -25974,14 +26158,14 @@ } }, "node_modules/socket.io-client": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz", - "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz", + "integrity": "sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.5.2", + "engine.io-client": "~6.6.1", "socket.io-parser": "~4.2.4" }, "engines": { @@ -25989,13 +26173,12 @@ } }, "node_modules/socket.io-client/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -26006,6 +26189,12 @@ } } }, + "node_modules/socket.io-client/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/socket.io-parser": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", @@ -26186,7 +26375,6 @@ "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "commander": "^2.2.0", "limiter": "^1.0.5" @@ -27471,9 +27659,9 @@ } }, "node_modules/xmlhttprequest-ssl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", - "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz", + "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==", "dev": true, "engines": { "node": ">=0.4.0" diff --git a/package.json b/package.json index 023a44fde506..92de7f856138 100644 --- a/package.json +++ b/package.json @@ -24,13 +24,13 @@ "@rollup/plugin-inject": "^5.0.3", "@vitejs/plugin-vue": "^5.0.0", "broken-link-checker": "0.7.8", - "browser-sync": "3.0.2", + "browser-sync": "3.0.3", "cheerio": "1.0.0", "fancy-log": "2.0.0", "jest": "29.7.0", "less": "^4.1.3", "lodash": "4.17.21", - "netlify-cli": "17.35.0", + "netlify-cli": "17.36.2", "node-fetch": "2.7.0", "postcss-custom-properties": "^14.0.0", "prettier": "3.3.3", diff --git a/pdf-generation/package-lock.json b/pdf-generation/package-lock.json index 3f3bde308fcd..1626f639e2dc 100644 --- a/pdf-generation/package-lock.json +++ b/pdf-generation/package-lock.json @@ -479,9 +479,9 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } @@ -521,7 +521,7 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "1.0.5", @@ -582,7 +582,7 @@ "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } @@ -656,7 +656,7 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } @@ -1262,9 +1262,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -1295,7 +1295,15 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } }, "node_modules/send/node_modules/ms": { "version": "2.1.3", @@ -1303,14 +1311,14 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serve-static": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.0.tgz", - "integrity": "sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -1988,9 +1996,9 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, "end-of-stream": { "version": "1.4.4", @@ -2021,7 +2029,7 @@ "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { "version": "1.0.5", @@ -2057,7 +2065,7 @@ "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "extract-zip": { "version": "2.0.1", @@ -2114,7 +2122,7 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "fs-extra": { "version": "11.2.0", @@ -2535,9 +2543,9 @@ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -2565,10 +2573,15 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2577,14 +2590,14 @@ } }, "serve-static": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.0.tgz", - "integrity": "sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" } }, "setprototypeof": {