diff --git a/doc/config/_default/config.toml b/doc/config/_default/config.toml index f9b664067e..9549800906 100644 --- a/doc/config/_default/config.toml +++ b/doc/config/_default/config.toml @@ -24,7 +24,7 @@ pygmentsUseClasses = true github_repository = "https://github.com/TheThingsIndustries/lorawan-stack-docs" github_repository_edit = "https://github.com/TheThingsIndustries/lorawan-stack-docs/blob/master/doc/content" tts_github_repository = "https://github.com/TheThingsNetwork/lorawan-stack" - version = "3.30.2" + version = "3.32.0" [markup] [markup.goldmark] diff --git a/doc/content/api/concepts/auth/_index.md b/doc/content/api/concepts/auth/_index.md index af1f7a9419..0ff0af2060 100644 --- a/doc/content/api/concepts/auth/_index.md +++ b/doc/content/api/concepts/auth/_index.md @@ -58,10 +58,9 @@ In this section we explain how to create a _user API key_, which can be used to {{< tabs/tab "Console" >}} -In the users dropdown on the right side, select the **Personal API Keys** option and select **+Add API Key**. +In the **User settings** dropdown on the left-hand sidebar, select the **API Keys** option and select **+ Add API Key**. {{< figure src="personal-api-keys.png" alt="Personal API key" >}} -{{< figure src="add-api-key-button.png" alt="Add API key" >}} Choose an optional expiry date and choose the required rights. {{< figure src="application-rights.png" alt="Selectable rights" >}} diff --git a/doc/content/api/concepts/auth/add-api-key-button.png b/doc/content/api/concepts/auth/add-api-key-button.png deleted file mode 100644 index c9c9d3b396..0000000000 Binary files a/doc/content/api/concepts/auth/add-api-key-button.png and /dev/null differ diff --git a/doc/content/api/concepts/auth/application-rights.png b/doc/content/api/concepts/auth/application-rights.png index 156a1c5d5a..7471c849df 100644 Binary files a/doc/content/api/concepts/auth/application-rights.png and b/doc/content/api/concepts/auth/application-rights.png differ diff --git a/doc/content/api/concepts/auth/copy-api-key.png b/doc/content/api/concepts/auth/copy-api-key.png index 07888e3b49..3ffa23dd8c 100644 Binary files a/doc/content/api/concepts/auth/copy-api-key.png and b/doc/content/api/concepts/auth/copy-api-key.png differ diff --git a/doc/content/api/concepts/auth/oauth-access-tokens/_index.md b/doc/content/api/concepts/auth/oauth-access-tokens/_index.md index 229f767cb3..6c29ea2536 100644 --- a/doc/content/api/concepts/auth/oauth-access-tokens/_index.md +++ b/doc/content/api/concepts/auth/oauth-access-tokens/_index.md @@ -22,7 +22,9 @@ To register OAuth client you can use {{% tts %}} [Console]({{< ref "/the-things- {{< tabs/tab "Console" >}} -To register an OAuth client using the Console, first navigate to `https:///oauth` in your web browser to log into your Account App. When logged in, switch to the **OAuth Clients** tab on the top menu and click the **Add OAuth Client** button. +To register an OAuth client using the Console, click the **User settings** dropdown in the left-hand sidebar and select **OAuth clients**. Then click **+ Add OAuth client** in the top-right. + +{{< figure src="oauth-client.png" alt="OAuth client" >}} Enter the **OAuth Client ID**, **Name** and **Description** for your OAuth client. You can also add the **Redirect URLs** against which authorization requests will be checked, and **Logout redirect URLs** agains which client initiated requests are checked. diff --git a/doc/content/api/concepts/auth/oauth-access-tokens/create-oauth-client.png b/doc/content/api/concepts/auth/oauth-access-tokens/create-oauth-client.png index d67b87bddc..88ef9785ff 100644 Binary files a/doc/content/api/concepts/auth/oauth-access-tokens/create-oauth-client.png and b/doc/content/api/concepts/auth/oauth-access-tokens/create-oauth-client.png differ diff --git a/doc/content/api/concepts/auth/oauth-access-tokens/grant-rights-for-oauth-client.png b/doc/content/api/concepts/auth/oauth-access-tokens/grant-rights-for-oauth-client.png index b5fe3a9b55..e2188ddb8e 100644 Binary files a/doc/content/api/concepts/auth/oauth-access-tokens/grant-rights-for-oauth-client.png and b/doc/content/api/concepts/auth/oauth-access-tokens/grant-rights-for-oauth-client.png differ diff --git a/doc/content/api/concepts/auth/oauth-access-tokens/oauth-client.png b/doc/content/api/concepts/auth/oauth-access-tokens/oauth-client.png new file mode 100644 index 0000000000..84856c8f31 Binary files /dev/null and b/doc/content/api/concepts/auth/oauth-access-tokens/oauth-client.png differ diff --git a/doc/content/api/concepts/auth/personal-api-keys.png b/doc/content/api/concepts/auth/personal-api-keys.png index dc52643f19..3ae0ca3155 100644 Binary files a/doc/content/api/concepts/auth/personal-api-keys.png and b/doc/content/api/concepts/auth/personal-api-keys.png differ diff --git a/doc/content/api/concepts/auth/rights-all.png b/doc/content/api/concepts/auth/rights-all.png index cdd8bb17b1..1959cad9ce 100644 Binary files a/doc/content/api/concepts/auth/rights-all.png and b/doc/content/api/concepts/auth/rights-all.png differ diff --git a/doc/content/api/reference/grpc/end_device.md b/doc/content/api/reference/grpc/end_device.md index 47363943fc..a8faba26e1 100644 --- a/doc/content/api/reference/grpc/end_device.md +++ b/doc/content/api/reference/grpc/end_device.md @@ -355,6 +355,8 @@ See the [EndDevice message](#message:EndDevice) and its sub-messages for additio {{< proto/message message="ListEndDevicesRequest" >}} +{{< proto/message message="ListEndDevicesRequest.Filter" >}} + {{< proto/message message="Location" >}} {{< proto/message message="LoRaAllianceProfileIdentifiers" >}} diff --git a/doc/content/api/reference/grpc/gateway.md b/doc/content/api/reference/grpc/gateway.md index 67146da21b..6943950fa4 100644 --- a/doc/content/api/reference/grpc/gateway.md +++ b/doc/content/api/reference/grpc/gateway.md @@ -146,6 +146,8 @@ The Gateway Server exposes the list of available frequency plans with the `Confi {{< proto/message message="ListGatewaysRequest" >}} +{{< proto/message message="ListGatewaysRequest.Filter" >}} + {{< proto/message message="Location" >}} {{< proto/message message="OrganizationOrUserIdentifiers" >}} diff --git a/doc/content/api/reference/grpc/gateway_server.md b/doc/content/api/reference/grpc/gateway_server.md index febae5280b..21ebf68e64 100644 --- a/doc/content/api/reference/grpc/gateway_server.md +++ b/doc/content/api/reference/grpc/gateway_server.md @@ -14,10 +14,6 @@ List of Gateway Server APIs. {{< proto/method service="Gs" method="BatchGetGatewayConnectionStats" >}} -## The `GatewayConfigurator` service - -{{< proto/method service="GatewayConfigurator" method="PullConfiguration" >}} - ## The `GatewayConfigurationService` service {{< proto/method service="GatewayConfigurationService" method="GetGatewayConfiguration" >}} diff --git a/doc/content/api/reference/grpc/tenant.md b/doc/content/api/reference/grpc/tenant.md index dace9d573c..6364ac9d64 100644 --- a/doc/content/api/reference/grpc/tenant.md +++ b/doc/content/api/reference/grpc/tenant.md @@ -110,6 +110,10 @@ Unlike the other services, the tenant services do **not** accept API keys or OAu {{< proto/message package="tti.lorawan.v3" message="Configuration.Cluster.ApplicationServer.Webhooks.Queue" >}} +{{< proto/message package="tti.lorawan.v3" message="Configuration.Cluster.GatewayServer" >}} + +{{< proto/message package="tti.lorawan.v3" message="Configuration.Cluster.GatewayServer.MTLSAuthentication" >}} + {{< proto/message package="tti.lorawan.v3" message="Configuration.Cluster.IdentityServer" >}} {{< proto/message package="tti.lorawan.v3" message="Configuration.Cluster.IdentityServer.UserRegistration" >}} diff --git a/doc/content/devices/adding-devices/_index.md b/doc/content/devices/adding-devices/_index.md index c765674f4c..d20825e9d6 100644 --- a/doc/content/devices/adding-devices/_index.md +++ b/doc/content/devices/adding-devices/_index.md @@ -21,7 +21,7 @@ This guide assumes that your device is in the [LoRaWAN® Device Repository](http To create a device, first open the application you wish to add the device in. Go to **End devices** in the left menu and click on **+Register end device** to reach the end device registration page. -{{< figure src="application-overview.png" alt="Application overview" >}} +{{< figure src="application-end-devices.png" alt="Application overview" >}} You will be presented with options to easily onboard your device using its QR code (if you have it), and to register your end device from the [LoRaWAN® Device Repository](https://github.com/TheThingsNetwork/lorawan-devices/) or manually. @@ -83,7 +83,7 @@ For LoRaWAN version 1.0.x devices, you will see an **AppKey** field, and for LoR {{< /tabs/container >}} -Finally, the console pre-fills **End device ID** in the format `eui-{Device EUI}` by default. You can edit this field and give the device a unique identifier. See [ID and EUI constraints]({{< ref "reference/id-eui-constraints" >}}) for guidelines about choosing a unique ID. +Finally, enter an **End device ID**. Advisable is doing it in the format `eui-{Device EUI}`. You can edit this field and give the device a unique identifier. See [ID and EUI constraints]({{< ref "reference/id-eui-constraints" >}}) for guidelines about choosing a unique ID. Now verify that all the fields are filled and click the **Register end device** button to create the end device. diff --git a/doc/content/devices/adding-devices/adding-devices-in-bulk/import-end-devices.png b/doc/content/devices/adding-devices/adding-devices-in-bulk/import-end-devices.png index eee8dca8ec..633d5dd76a 100644 Binary files a/doc/content/devices/adding-devices/adding-devices-in-bulk/import-end-devices.png and b/doc/content/devices/adding-devices/adding-devices-in-bulk/import-end-devices.png differ diff --git a/doc/content/devices/adding-devices/adding-devices-in-bulk/operation-finished.png b/doc/content/devices/adding-devices/adding-devices-in-bulk/operation-finished.png index 22a6a923b6..53c58bbc3f 100644 Binary files a/doc/content/devices/adding-devices/adding-devices-in-bulk/operation-finished.png and b/doc/content/devices/adding-devices/adding-devices-in-bulk/operation-finished.png differ diff --git a/doc/content/devices/adding-devices/adding-devices-in-bulk/successful-import copy.png b/doc/content/devices/adding-devices/adding-devices-in-bulk/successful-import copy.png deleted file mode 100644 index 31f81ff7a6..0000000000 Binary files a/doc/content/devices/adding-devices/adding-devices-in-bulk/successful-import copy.png and /dev/null differ diff --git a/doc/content/devices/adding-devices/adding-devices-in-bulk/successful-import.png b/doc/content/devices/adding-devices/adding-devices-in-bulk/successful-import.png index 4b14bc504f..a27ab6f5fe 100644 Binary files a/doc/content/devices/adding-devices/adding-devices-in-bulk/successful-import.png and b/doc/content/devices/adding-devices/adding-devices-in-bulk/successful-import.png differ diff --git a/doc/content/devices/adding-devices/adding-devices-in-bulk/upload-file.png b/doc/content/devices/adding-devices/adding-devices-in-bulk/upload-file.png index 6dd3e33204..b819dc5267 100644 Binary files a/doc/content/devices/adding-devices/adding-devices-in-bulk/upload-file.png and b/doc/content/devices/adding-devices/adding-devices-in-bulk/upload-file.png differ diff --git a/doc/content/devices/adding-devices/application-end-devices.png b/doc/content/devices/adding-devices/application-end-devices.png new file mode 100644 index 0000000000..22cb9328c4 Binary files /dev/null and b/doc/content/devices/adding-devices/application-end-devices.png differ diff --git a/doc/content/devices/adding-devices/application-overview.png b/doc/content/devices/adding-devices/application-overview.png deleted file mode 100644 index 0edf055368..0000000000 Binary files a/doc/content/devices/adding-devices/application-overview.png and /dev/null differ diff --git a/doc/content/devices/adding-devices/device-id.png b/doc/content/devices/adding-devices/device-id.png deleted file mode 100644 index 3522178d61..0000000000 Binary files a/doc/content/devices/adding-devices/device-id.png and /dev/null differ diff --git a/doc/content/devices/adding-devices/device-repo-settings.png b/doc/content/devices/adding-devices/device-repo-settings.png deleted file mode 100644 index 7137f8d675..0000000000 Binary files a/doc/content/devices/adding-devices/device-repo-settings.png and /dev/null differ diff --git a/doc/content/devices/adding-devices/device-repo.png b/doc/content/devices/adding-devices/device-repo.png index f194b69c84..2f68e7683e 100644 Binary files a/doc/content/devices/adding-devices/device-repo.png and b/doc/content/devices/adding-devices/device-repo.png differ diff --git a/doc/content/devices/adding-devices/fp-non-qr.png b/doc/content/devices/adding-devices/fp-non-qr.png index f6d33816cb..19ff065af2 100644 Binary files a/doc/content/devices/adding-devices/fp-non-qr.png and b/doc/content/devices/adding-devices/fp-non-qr.png differ diff --git a/doc/content/devices/adding-devices/fp.png b/doc/content/devices/adding-devices/fp.png index d69d641753..67d658665b 100644 Binary files a/doc/content/devices/adding-devices/fp.png and b/doc/content/devices/adding-devices/fp.png differ diff --git a/doc/content/devices/adding-devices/manual/_index.md b/doc/content/devices/adding-devices/manual/_index.md index da06f4178d..1678066356 100644 --- a/doc/content/devices/adding-devices/manual/_index.md +++ b/doc/content/devices/adding-devices/manual/_index.md @@ -26,4 +26,4 @@ Choosing the incorrect LoRaWAN version can lead to complex errors. Activation ma {{< figure src="device-input-method.png" alt="ABP input method" >}} -The above fields are common for both OTAA and ABP devices. Now, based on the device you are trying to add, choose the speficic guide for OTAA or ABP below. +The above fields are common for both OTAA and ABP devices. Now, based on the device you are trying to add, choose the specific guide for OTAA or ABP below. diff --git a/doc/content/devices/adding-devices/manual/abp/abp-fields-set.png b/doc/content/devices/adding-devices/manual/abp/abp-fields-set.png index 094235c349..481bee52e5 100644 Binary files a/doc/content/devices/adding-devices/manual/abp/abp-fields-set.png and b/doc/content/devices/adding-devices/manual/abp/abp-fields-set.png differ diff --git a/doc/content/devices/adding-devices/manual/abp/abp-network-defaults.png b/doc/content/devices/adding-devices/manual/abp/abp-network-defaults.png index ddbf694990..cedbd36a6e 100644 Binary files a/doc/content/devices/adding-devices/manual/abp/abp-network-defaults.png and b/doc/content/devices/adding-devices/manual/abp/abp-network-defaults.png differ diff --git a/doc/content/devices/adding-devices/manual/abp/abp-provisioning.png b/doc/content/devices/adding-devices/manual/abp/abp-provisioning.png deleted file mode 100644 index e4e7b93b64..0000000000 Binary files a/doc/content/devices/adding-devices/manual/abp/abp-provisioning.png and /dev/null differ diff --git a/doc/content/devices/adding-devices/manual/abp/manual-network-settings-abp.png b/doc/content/devices/adding-devices/manual/abp/manual-network-settings-abp.png deleted file mode 100644 index 2238ca1813..0000000000 Binary files a/doc/content/devices/adding-devices/manual/abp/manual-network-settings-abp.png and /dev/null differ diff --git a/doc/content/devices/adding-devices/manual/device-input-method.png b/doc/content/devices/adding-devices/manual/device-input-method.png index d2d457f22c..6eb7086652 100644 Binary files a/doc/content/devices/adding-devices/manual/device-input-method.png and b/doc/content/devices/adding-devices/manual/device-input-method.png differ diff --git a/doc/content/devices/adding-devices/manual/manual.png b/doc/content/devices/adding-devices/manual/manual.png deleted file mode 100644 index 06e45750b8..0000000000 Binary files a/doc/content/devices/adding-devices/manual/manual.png and /dev/null differ diff --git a/doc/content/devices/adding-devices/manual/otaa/manual-network-settings-otaa.png b/doc/content/devices/adding-devices/manual/otaa/manual-network-settings-otaa.png index 2a11f30ee0..dcca847744 100644 Binary files a/doc/content/devices/adding-devices/manual/otaa/manual-network-settings-otaa.png and b/doc/content/devices/adding-devices/manual/otaa/manual-network-settings-otaa.png differ diff --git a/doc/content/devices/adding-devices/non-qr-all-set.png b/doc/content/devices/adding-devices/non-qr-all-set.png index d59120e427..2233c58011 100644 Binary files a/doc/content/devices/adding-devices/non-qr-all-set.png and b/doc/content/devices/adding-devices/non-qr-all-set.png differ diff --git a/doc/content/devices/adding-devices/non-qr-join-eui.png b/doc/content/devices/adding-devices/non-qr-join-eui.png index f81de45f26..d9a0c9aaf3 100644 Binary files a/doc/content/devices/adding-devices/non-qr-join-eui.png and b/doc/content/devices/adding-devices/non-qr-join-eui.png differ diff --git a/doc/content/devices/adding-devices/pre-filled-eui-data.png b/doc/content/devices/adding-devices/pre-filled-eui-data.png deleted file mode 100644 index 2725253b00..0000000000 Binary files a/doc/content/devices/adding-devices/pre-filled-eui-data.png and /dev/null differ diff --git a/doc/content/devices/adding-devices/qr-data-found.png b/doc/content/devices/adding-devices/qr-data-found.png index e204ec7826..e97f458eaf 100644 Binary files a/doc/content/devices/adding-devices/qr-data-found.png and b/doc/content/devices/adding-devices/qr-data-found.png differ diff --git a/doc/content/devices/adding-devices/register-devices-option.png b/doc/content/devices/adding-devices/register-devices-option.png index 30ab8a6540..a2b0fc6534 100644 Binary files a/doc/content/devices/adding-devices/register-devices-option.png and b/doc/content/devices/adding-devices/register-devices-option.png differ diff --git a/doc/content/devices/adding-devices/select-dr-non-qr.png b/doc/content/devices/adding-devices/select-dr-non-qr.png index dae92964a8..d3a78e9106 100644 Binary files a/doc/content/devices/adding-devices/select-dr-non-qr.png and b/doc/content/devices/adding-devices/select-dr-non-qr.png differ diff --git a/doc/content/devices/configuring-devices/device-location/_index.md b/doc/content/devices/configuring-devices/device-location/_index.md index bc89f429bf..2baf1a00d5 100644 --- a/doc/content/devices/configuring-devices/device-location/_index.md +++ b/doc/content/devices/configuring-devices/device-location/_index.md @@ -19,6 +19,8 @@ The end device location can be manually set in two ways. 1. Pinning the location on the map widget. 2. Entering the **Latitude**, **Longitude** and **Altitude** values. +Make sure you select **Save Changes** at the bottom of the page. + {{< figure src="device-location.png" alt="Gateway location" >}} {{< /tabs/tab >}} diff --git a/doc/content/devices/configuring-devices/device-location/device-location.png b/doc/content/devices/configuring-devices/device-location/device-location.png index 0214fd460e..a1191451ec 100644 Binary files a/doc/content/devices/configuring-devices/device-location/device-location.png and b/doc/content/devices/configuring-devices/device-location/device-location.png differ diff --git a/doc/content/gateways/concepts/adding-gateways/_index.md b/doc/content/gateways/concepts/adding-gateways/_index.md index ba13655b02..4485b26824 100644 --- a/doc/content/gateways/concepts/adding-gateways/_index.md +++ b/doc/content/gateways/concepts/adding-gateways/_index.md @@ -222,9 +222,9 @@ curl -H "Content-Type: application/json" -H "Authorization: Bearer $API_KEY" \ {{< tabs/tab "Console" >}} -Once you have added your gateway to {{% tts %}}, you can also set its location to be displayed on a map widget by clicking **Change location settings**. +Once you have added your gateway to {{% tts %}}, you can also set its location to be displayed on a map widget by clicking **Location** in the left-hand menu. -If you do not mind your gateway's location to be publicly displayed, check the **Publish location** box. +If you do not mind your gateway's location to be publicly displayed, check the **Share location within network** box. The gateway location can be manually set by entering the **Latitude**, **Longitude** and **Altitude** values. diff --git a/doc/content/gateways/concepts/adding-gateways/gateway-add.png b/doc/content/gateways/concepts/adding-gateways/gateway-add.png index 6f516f4c70..dc347415ae 100644 Binary files a/doc/content/gateways/concepts/adding-gateways/gateway-add.png and b/doc/content/gateways/concepts/adding-gateways/gateway-add.png differ diff --git a/doc/content/gateways/concepts/adding-gateways/gateway-api-key-created.png b/doc/content/gateways/concepts/adding-gateways/gateway-api-key-created.png index 313c19a0c2..f907de9b7f 100644 Binary files a/doc/content/gateways/concepts/adding-gateways/gateway-api-key-created.png and b/doc/content/gateways/concepts/adding-gateways/gateway-api-key-created.png differ diff --git a/doc/content/gateways/concepts/adding-gateways/gateway-api-key-creation.png b/doc/content/gateways/concepts/adding-gateways/gateway-api-key-creation.png index 574b824539..60793a6fd7 100644 Binary files a/doc/content/gateways/concepts/adding-gateways/gateway-api-key-creation.png and b/doc/content/gateways/concepts/adding-gateways/gateway-api-key-creation.png differ diff --git a/doc/content/gateways/concepts/adding-gateways/gateway-claim.png b/doc/content/gateways/concepts/adding-gateways/gateway-claim.png index 2bca130581..d27d0083b1 100644 Binary files a/doc/content/gateways/concepts/adding-gateways/gateway-claim.png and b/doc/content/gateways/concepts/adding-gateways/gateway-claim.png differ diff --git a/doc/content/gateways/concepts/adding-gateways/gateway-creation.png b/doc/content/gateways/concepts/adding-gateways/gateway-creation.png index 47c8283649..6d579883d5 100644 Binary files a/doc/content/gateways/concepts/adding-gateways/gateway-creation.png and b/doc/content/gateways/concepts/adding-gateways/gateway-creation.png differ diff --git a/doc/content/gateways/concepts/adding-gateways/gateway-location.png b/doc/content/gateways/concepts/adding-gateways/gateway-location.png index 98e4f18923..eac0fe7edd 100644 Binary files a/doc/content/gateways/concepts/adding-gateways/gateway-location.png and b/doc/content/gateways/concepts/adding-gateways/gateway-location.png differ diff --git a/doc/content/gateways/concepts/adding-gateways/gateway-overview.png b/doc/content/gateways/concepts/adding-gateways/gateway-overview.png index 62f8426697..3d2704957c 100644 Binary files a/doc/content/gateways/concepts/adding-gateways/gateway-overview.png and b/doc/content/gateways/concepts/adding-gateways/gateway-overview.png differ diff --git a/doc/content/gateways/concepts/adding-gateways/pb-forwarding.png b/doc/content/gateways/concepts/adding-gateways/pb-forwarding.png index a55a5f1ce4..b31bd539df 100644 Binary files a/doc/content/gateways/concepts/adding-gateways/pb-forwarding.png and b/doc/content/gateways/concepts/adding-gateways/pb-forwarding.png differ diff --git a/doc/content/gateways/concepts/lora-basics-station/change-lns-key-and-gs-addr.png b/doc/content/gateways/concepts/lora-basics-station/change-lns-key-and-gs-addr.png index 7aafd3ae81..d4c8b61fc3 100644 Binary files a/doc/content/gateways/concepts/lora-basics-station/change-lns-key-and-gs-addr.png and b/doc/content/gateways/concepts/lora-basics-station/change-lns-key-and-gs-addr.png differ diff --git a/doc/content/gateways/concepts/lora-basics-station/lns-key.png b/doc/content/gateways/concepts/lora-basics-station/lns-key.png index ad44e60a97..29c9db0adb 100644 Binary files a/doc/content/gateways/concepts/lora-basics-station/lns-key.png and b/doc/content/gateways/concepts/lora-basics-station/lns-key.png differ diff --git a/doc/content/gateways/concepts/lora-basics-station/target-instance-registration.png b/doc/content/gateways/concepts/lora-basics-station/target-instance-registration.png index 6ba84fdb81..10a93f0b4d 100644 Binary files a/doc/content/gateways/concepts/lora-basics-station/target-instance-registration.png and b/doc/content/gateways/concepts/lora-basics-station/target-instance-registration.png differ diff --git a/doc/content/gateways/concepts/udp/_index.md b/doc/content/gateways/concepts/udp/_index.md index 744aa7b744..1faf9085d7 100644 --- a/doc/content/gateways/concepts/udp/_index.md +++ b/doc/content/gateways/concepts/udp/_index.md @@ -25,7 +25,7 @@ An example `global_conf.json` is available in the [{{% udp-pf %}} Github reposit ## Download Configuration in the Console {#download-configuration-in-the-console} -To download a `global_conf.json` file for your gateway, open the Gateway overview page in the console. Click the **Download global_conf.json** button to download the file. +To download a `global_conf.json` file for your gateway, open the Gateway overview page in the console. Click the **Hamburger menu** in the top-right and then click **Download global_conf.json** to download the file. {{< figure src="conf.png" alt="Download global_conf.json" >}} diff --git a/doc/content/gateways/concepts/udp/conf.png b/doc/content/gateways/concepts/udp/conf.png index 776f6b04ee..ec1d405976 100644 Binary files a/doc/content/gateways/concepts/udp/conf.png and b/doc/content/gateways/concepts/udp/conf.png differ diff --git a/doc/content/getting-started/setup-first-network/ttsc-console.png b/doc/content/getting-started/setup-first-network/ttsc-console.png index f8397c68e2..a79b80158f 100644 Binary files a/doc/content/getting-started/setup-first-network/ttsc-console.png and b/doc/content/getting-started/setup-first-network/ttsc-console.png differ diff --git a/doc/content/integrations/adding-applications/api-key-created.png b/doc/content/integrations/adding-applications/api-key-created.png deleted file mode 100644 index 269e31a9f6..0000000000 Binary files a/doc/content/integrations/adding-applications/api-key-created.png and /dev/null differ diff --git a/doc/content/integrations/adding-applications/api-key-creation.png b/doc/content/integrations/adding-applications/api-key-creation.png deleted file mode 100644 index 5dedfaed60..0000000000 Binary files a/doc/content/integrations/adding-applications/api-key-creation.png and /dev/null differ diff --git a/doc/content/integrations/adding-applications/application-api-key-created.png b/doc/content/integrations/adding-applications/application-api-key-created.png index 8c5ee2a03c..472dcdbbfd 100644 Binary files a/doc/content/integrations/adding-applications/application-api-key-created.png and b/doc/content/integrations/adding-applications/application-api-key-created.png differ diff --git a/doc/content/integrations/adding-applications/application-api-key-creation.png b/doc/content/integrations/adding-applications/application-api-key-creation.png index 9497f16277..c68d172ab2 100644 Binary files a/doc/content/integrations/adding-applications/application-api-key-creation.png and b/doc/content/integrations/adding-applications/application-api-key-creation.png differ diff --git a/doc/content/integrations/adding-applications/application-creation.png b/doc/content/integrations/adding-applications/application-creation.png index 2090a40b8a..f4c9c4b4da 100644 Binary files a/doc/content/integrations/adding-applications/application-creation.png and b/doc/content/integrations/adding-applications/application-creation.png differ diff --git a/doc/content/integrations/adding-applications/application-link-creation.png b/doc/content/integrations/adding-applications/application-link-creation.png deleted file mode 100644 index bf45b31a50..0000000000 Binary files a/doc/content/integrations/adding-applications/application-link-creation.png and /dev/null differ diff --git a/doc/content/integrations/adding-applications/application-overview.png b/doc/content/integrations/adding-applications/application-overview.png index f6f319f012..9ca832563c 100644 Binary files a/doc/content/integrations/adding-applications/application-overview.png and b/doc/content/integrations/adding-applications/application-overview.png differ diff --git a/doc/content/integrations/adding-applications/skip-payload-crypto.png b/doc/content/integrations/adding-applications/skip-payload-crypto.png index 32425430b9..c6bc6adf0e 100644 Binary files a/doc/content/integrations/adding-applications/skip-payload-crypto.png and b/doc/content/integrations/adding-applications/skip-payload-crypto.png differ diff --git a/doc/content/integrations/mqtt/mqtt-integration.png b/doc/content/integrations/mqtt/mqtt-integration.png index 71300083f4..e877d656b9 100644 Binary files a/doc/content/integrations/mqtt/mqtt-integration.png and b/doc/content/integrations/mqtt/mqtt-integration.png differ diff --git a/doc/content/integrations/mqtt/mqtt-key-created.png b/doc/content/integrations/mqtt/mqtt-key-created.png index fdb0b28103..bc4fd9c624 100644 Binary files a/doc/content/integrations/mqtt/mqtt-key-created.png and b/doc/content/integrations/mqtt/mqtt-key-created.png differ diff --git a/doc/content/integrations/payload-formatters/application.png b/doc/content/integrations/payload-formatters/application.png index b290ae2a7b..682746597a 100644 Binary files a/doc/content/integrations/payload-formatters/application.png and b/doc/content/integrations/payload-formatters/application.png differ diff --git a/doc/content/integrations/payload-formatters/device.png b/doc/content/integrations/payload-formatters/device.png index 64ac2a6992..f61bf7ad95 100644 Binary files a/doc/content/integrations/payload-formatters/device.png and b/doc/content/integrations/payload-formatters/device.png differ diff --git a/doc/content/integrations/storage/enable/activate-storage-integration.png b/doc/content/integrations/storage/enable/activate-storage-integration.png index 55e8c7430e..a33972422f 100644 Binary files a/doc/content/integrations/storage/enable/activate-storage-integration.png and b/doc/content/integrations/storage/enable/activate-storage-integration.png differ diff --git a/doc/content/integrations/storage/enable/activated-storage-integration.png b/doc/content/integrations/storage/enable/activated-storage-integration.png index 145fff5bd0..37a643b435 100644 Binary files a/doc/content/integrations/storage/enable/activated-storage-integration.png and b/doc/content/integrations/storage/enable/activated-storage-integration.png differ diff --git a/doc/content/integrations/webhooks/add-webhook.png b/doc/content/integrations/webhooks/add-webhook.png index 34e0276da9..6bddff5dd9 100644 Binary files a/doc/content/integrations/webhooks/add-webhook.png and b/doc/content/integrations/webhooks/add-webhook.png differ diff --git a/doc/content/integrations/webhooks/api-key-created.png b/doc/content/integrations/webhooks/api-key-created.png index 4c24519b1a..d30e04937f 100644 Binary files a/doc/content/integrations/webhooks/api-key-created.png and b/doc/content/integrations/webhooks/api-key-created.png differ diff --git a/doc/content/integrations/webhooks/api-key-creation.png b/doc/content/integrations/webhooks/api-key-creation.png index 28779bcdbb..c6fd35bb2a 100644 Binary files a/doc/content/integrations/webhooks/api-key-creation.png and b/doc/content/integrations/webhooks/api-key-creation.png differ diff --git a/doc/content/integrations/webhooks/enabled-messages.png b/doc/content/integrations/webhooks/enabled-messages.png index 45bc41ad7a..9e7c4cf468 100644 Binary files a/doc/content/integrations/webhooks/enabled-messages.png and b/doc/content/integrations/webhooks/enabled-messages.png differ diff --git a/doc/content/integrations/webhooks/retries.md b/doc/content/integrations/webhooks/retries.md index 14fed8d4d0..9a6e5ed32e 100644 --- a/doc/content/integrations/webhooks/retries.md +++ b/doc/content/integrations/webhooks/retries.md @@ -10,7 +10,8 @@ The webhook retries feature allows webhooks to be enqueued and be retried multip -{{< note "The webhook retries feature in The Things Stack is currently in beta. Please contact support@thethingsindustries.com to evaluate this feature on your {{% tts %}} Cloud tenant." />}} +A [{{% tts %}} Cloud Plus subscription](https://www.thethingsindustries.com/stack/plans/) is required to use this feature. +If you would like to evaluate this feature on your {{% tts %}} Cloud tenant without a {{% tts %}} Cloud Plus subscription, please contact `support@thethingsindustries.com`. By default, webhook HTTP requests are tried at most once for each application uplink. This means that if the endpoint is unavailable temporarily, the HTTP requests done in this period are lost, and so is the associated traffic. @@ -20,11 +21,9 @@ Webhook queuing allows individual HTTP requests to be retried at later times, wh The webhook retries feature can be enabled on both new and existing webhooks via the Console, by ticking the **Retries** checkbox in the webhook settings: -{{< figure src="../webhook-queue-before.png" alt="Enabling webhook retries" >}} - After the checkbox has been ticked, and the webhook has been saved, future requests will be enqueued and retried on failure. -{{< figure src="../webhook-queue-after.png" alt="Webhook queueing enabled" >}} +{{< figure src="../webhook-retries.png" alt="Webhook queueing enabled" >}} ## What counts as a failed try ? diff --git a/doc/content/integrations/webhooks/tti.eu1.cloud.thethings.industries_console_.png b/doc/content/integrations/webhooks/tti.eu1.cloud.thethings.industries_console_.png deleted file mode 100644 index 336aa0048f..0000000000 Binary files a/doc/content/integrations/webhooks/tti.eu1.cloud.thethings.industries_console_.png and /dev/null differ diff --git a/doc/content/integrations/webhooks/webhook-queue-after.png b/doc/content/integrations/webhooks/webhook-queue-after.png deleted file mode 100644 index bf85e44759..0000000000 Binary files a/doc/content/integrations/webhooks/webhook-queue-after.png and /dev/null differ diff --git a/doc/content/integrations/webhooks/webhook-queue-before.png b/doc/content/integrations/webhooks/webhook-queue-before.png deleted file mode 100644 index acebaf79a5..0000000000 Binary files a/doc/content/integrations/webhooks/webhook-queue-before.png and /dev/null differ diff --git a/doc/content/integrations/webhooks/webhook-retries.png b/doc/content/integrations/webhooks/webhook-retries.png new file mode 100644 index 0000000000..76f2f95be6 Binary files /dev/null and b/doc/content/integrations/webhooks/webhook-retries.png differ diff --git a/doc/content/integrations/webhooks/webhook-screen.png b/doc/content/integrations/webhooks/webhook-screen.png deleted file mode 100644 index 7e16c80eb2..0000000000 Binary files a/doc/content/integrations/webhooks/webhook-screen.png and /dev/null differ diff --git a/doc/content/integrations/webhooks/webhook-templates.png b/doc/content/integrations/webhooks/webhook-templates.png index 129f6690eb..427c052786 100644 Binary files a/doc/content/integrations/webhooks/webhook-templates.png and b/doc/content/integrations/webhooks/webhook-templates.png differ diff --git a/doc/content/reference/components/console_overview.png b/doc/content/reference/components/console_overview.png index 41d59c68f8..a79b80158f 100644 Binary files a/doc/content/reference/components/console_overview.png and b/doc/content/reference/components/console_overview.png differ diff --git a/doc/content/the-things-stack/alerting/_index.md b/doc/content/the-things-stack/alerting/_index.md index 45712c37b9..c11cb1817a 100644 --- a/doc/content/the-things-stack/alerting/_index.md +++ b/doc/content/the-things-stack/alerting/_index.md @@ -10,4 +10,5 @@ Alerting in {{% tts %}} refers to notifications which are sent when certain cond -{{< note "Alerting in The Things Stack is currently in beta. Please contact support@thethingsindustries.com to evaluate this feature on your {{% tts %}} Cloud tenant." />}} +A [{{% tts %}} Cloud Plus subscription](https://www.thethingsindustries.com/stack/plans/) is required to use this feature. +If you would like to evaluate this feature on your {{% tts %}} Cloud tenant without a {{% tts %}} Cloud Plus subscription, please contact `support@thethingsindustries.com`. diff --git a/doc/content/the-things-stack/alerting/gateway-connectivity-outages/set-profile.png b/doc/content/the-things-stack/alerting/gateway-connectivity-outages/set-profile.png index d7a4663e8d..1b03d67951 100644 Binary files a/doc/content/the-things-stack/alerting/gateway-connectivity-outages/set-profile.png and b/doc/content/the-things-stack/alerting/gateway-connectivity-outages/set-profile.png differ diff --git a/doc/content/the-things-stack/alerting/receivers-and-profiles/_index.md b/doc/content/the-things-stack/alerting/receivers-and-profiles/_index.md index e104d362e8..14066b40ac 100644 --- a/doc/content/the-things-stack/alerting/receivers-and-profiles/_index.md +++ b/doc/content/the-things-stack/alerting/receivers-and-profiles/_index.md @@ -14,22 +14,18 @@ Alert notifications are dispatched by {{% tts %}} using _alert notification rece ## Alert Notification Receivers -Alert notification receivers represent endpoints to which {{% tts %}} sends alert notifications. An endpoint in this case can be an email address, a phone number or an URL. The receivers can be managed via the Console, using the **Alerting** section of the **Admin Panel**. - -{{< figure src="receivers-landing.png" alt="Alert Notification Receivers overview" >}} +Alert notification receivers represent endpoints to which {{% tts %}} sends alert notifications. An endpoint in this case can be an email address, a phone number or an URL. The receivers can be managed via the Console, using the **Alerting settings** section of the **Admin Panel**. By clicking on **Add an alert receiver** one can create a new alert notification receiver. Fill in the details and click on **Save changes** in order to save your newly created receiver. -{{< figure src="add-receiver.png" alt="Add Alert Notification Receiver" >}} +{{< figure src="receiver.png" alt="Add Alert Notification Receiver" >}} ## Alert Notification Profiles Once the alert notifications receivers are setup, we can create alert notification profiles. Alert notification profiles are bundles of alert notification receivers which can be attached to entities in order to dispatch alert notifications to multiple endpoints. It is also possible to set a default alert notification profile which is used for entities without an explicit profile set. -The profiles can be managed also via the Console, by switching to the the **Alert Profiles** tab in the **Alerting** section of the **Admin Panel**. - -{{< figure src="profiles-landing.png" alt="Alert Notification Profiles overview" >}} +The profiles can be managed also via the Console, by switching to the the **Alert Profiles** tab in the **Alerting settings** section of the **Admin Panel**. -By clicking on *Add an alert profile** one can create a new alert notification profile. Fill in the details and click on **Save changes** in order to save your newly created profile. It is also possible to mark this profile as the default profile in this page. +By clicking on **Add an alert profile** one can create a new alert notification profile. Fill in the details and click on **Save changes** in order to save your newly created profile. It is also possible to mark this profile as the default profile in this page. -{{< figure src="add-profile.png" alt="Add Alert Notification Profile" >}} +{{< figure src="profile.png" alt="Add Alert Notification Profile" >}} diff --git a/doc/content/the-things-stack/alerting/receivers-and-profiles/add-profile.png b/doc/content/the-things-stack/alerting/receivers-and-profiles/add-profile.png deleted file mode 100644 index 99adf672ec..0000000000 Binary files a/doc/content/the-things-stack/alerting/receivers-and-profiles/add-profile.png and /dev/null differ diff --git a/doc/content/the-things-stack/alerting/receivers-and-profiles/add-receiver.png b/doc/content/the-things-stack/alerting/receivers-and-profiles/add-receiver.png deleted file mode 100644 index fbed45258c..0000000000 Binary files a/doc/content/the-things-stack/alerting/receivers-and-profiles/add-receiver.png and /dev/null differ diff --git a/doc/content/the-things-stack/alerting/receivers-and-profiles/profile.png b/doc/content/the-things-stack/alerting/receivers-and-profiles/profile.png new file mode 100644 index 0000000000..3b915f745e Binary files /dev/null and b/doc/content/the-things-stack/alerting/receivers-and-profiles/profile.png differ diff --git a/doc/content/the-things-stack/alerting/receivers-and-profiles/profiles-landing.png b/doc/content/the-things-stack/alerting/receivers-and-profiles/profiles-landing.png deleted file mode 100644 index 71da1fdafd..0000000000 Binary files a/doc/content/the-things-stack/alerting/receivers-and-profiles/profiles-landing.png and /dev/null differ diff --git a/doc/content/the-things-stack/alerting/receivers-and-profiles/receiver.png b/doc/content/the-things-stack/alerting/receivers-and-profiles/receiver.png new file mode 100644 index 0000000000..893f96d580 Binary files /dev/null and b/doc/content/the-things-stack/alerting/receivers-and-profiles/receiver.png differ diff --git a/doc/content/the-things-stack/alerting/receivers-and-profiles/receivers-landing.png b/doc/content/the-things-stack/alerting/receivers-and-profiles/receivers-landing.png deleted file mode 100644 index 7f7fe4ebf8..0000000000 Binary files a/doc/content/the-things-stack/alerting/receivers-and-profiles/receivers-landing.png and /dev/null differ diff --git a/doc/content/the-things-stack/host/aws/ecs/changelog/index.md b/doc/content/the-things-stack/host/aws/ecs/changelog/index.md index 1b16bcb8a7..3937ab1797 100644 --- a/doc/content/the-things-stack/host/aws/ecs/changelog/index.md +++ b/doc/content/the-things-stack/host/aws/ecs/changelog/index.md @@ -2,12 +2,32 @@ title: "Template Changelog" aliases: [/getting-started/aws/ecs/changelog] --- + # Upgrading All meaningful changes to templates are documented in this file. ## Unreleased +## 3.32.0 + +- Add support for managed gateways via The Things Gateway Controller. The Gateway Configuration Server and Device Claiming Server use TLS client authentication. + - When using AWS Private CA (`CertificateAuthorityARN` in `4-2a-configuration`), the client certificate can be issued automatically. + - To specify a custom TLS client certificate, enable `EnableTTGCCustomCertificate` in `4-1-secrets` and specify the certificate and key according to the format in the description. +- Add support for gateways using The Things Industries Gateway Protocol. This requires TLS mutual authentication and TLS termination by the proxy. Make sure that `SupportProxyTLS` is enabled. This adds a new public listener (port `8889`) that is mapped to the proxy that forwards traffic to the Gateway Server (port `1889`). +- Fixed the rate-limiting profile for the `ApplicationUpStorage` service in the Application Server. +- Add default values for the default and maximum page sizes in the `ApplicationUpStorage` service in the Application Server. + +## 3.31.1 + +### Proxy + +- Add `TenantAccess` grpc service and routes. + +## 3.31.0 + +- Updated ECS AMIs to the latest versions. + ## 3.30.2 - TimescaleDB replicas are now split to a separate template. Previously replicas had an ephemeral disk that needed to be copied when the replica was re-deployed. This made some upgrades really long to complete. Now the replicas are standalone and have their own disk that can be reattached to a new instance. This change should make upgrades faster and more reliable. diff --git a/doc/content/the-things-stack/interact/console/console.png b/doc/content/the-things-stack/interact/console/console.png index 1e5c2c2a1a..a79b80158f 100644 Binary files a/doc/content/the-things-stack/interact/console/console.png and b/doc/content/the-things-stack/interact/console/console.png differ diff --git a/doc/content/the-things-stack/interact/console/login/_index.md b/doc/content/the-things-stack/interact/console/login/_index.md index 0de6d2eb23..79bd08fc81 100644 --- a/doc/content/the-things-stack/interact/console/login/_index.md +++ b/doc/content/the-things-stack/interact/console/login/_index.md @@ -13,12 +13,12 @@ On the Console landing page, click **Login with your {{% tts %}} Account** in or {{< figure src="login.png" alt="Login" >}} -If you do not have an account yet, you can register one by clicking **Create an account**, filling your details and clicking **Register**. +If you do not have an account yet, you can register one by clicking **Login using credentials** and then **Create an account**. Then fill in your details and click **Create account**. {{< figure src="register.png" alt="Create an account" >}} When you use a new account, you may not be able to continue until you have confirmed your email address or your account is approved by an admin user. -After entering your credentials and logging in, you will reach the Console overview page. +After entering your credentials and logging in, you will reach the Console Home page. {{< figure src="overview.png" alt="Overview" >}} diff --git a/doc/content/the-things-stack/interact/console/login/login.png b/doc/content/the-things-stack/interact/console/login/login.png index c648483066..e36c287952 100644 Binary files a/doc/content/the-things-stack/interact/console/login/login.png and b/doc/content/the-things-stack/interact/console/login/login.png differ diff --git a/doc/content/the-things-stack/interact/console/login/overview.png b/doc/content/the-things-stack/interact/console/login/overview.png index 834ddf732b..a79b80158f 100644 Binary files a/doc/content/the-things-stack/interact/console/login/overview.png and b/doc/content/the-things-stack/interact/console/login/overview.png differ diff --git a/doc/content/the-things-stack/interact/console/login/register.png b/doc/content/the-things-stack/interact/console/login/register.png index d057d9f63f..a42f67ec43 100644 Binary files a/doc/content/the-things-stack/interact/console/login/register.png and b/doc/content/the-things-stack/interact/console/login/register.png differ diff --git a/doc/content/the-things-stack/interact/console/personal-settings/_index.md b/doc/content/the-things-stack/interact/console/personal-settings/_index.md index 6df1291047..a177841c14 100644 --- a/doc/content/the-things-stack/interact/console/personal-settings/_index.md +++ b/doc/content/the-things-stack/interact/console/personal-settings/_index.md @@ -33,7 +33,7 @@ Click **Save changes** to save any modified info. ### Change password -To set up a new password for your account, click the **Expand** button next to the **Change password** section. +To set up a new password for your account, click **Password** in the left-hand sidebar. Type in your **Current password**, then create a **New password** and confirm it. We highly recommend you create a strong password to enhance your profile's security. @@ -51,7 +51,7 @@ In this section, we explain how to create personal API keys that grant certain r {{< tabs/tab "Console" >}} -To create a personal API key, click on your avatar in the upper right corner in the Console and select **Personal API keys**. +To create a personal API key, click on **User settings** in the left-hand sidebar and select **API keys**. Enter a **Name** for your key, set the **Expiry date**, select rights that you want to grant and then press **Create API Key**. diff --git a/doc/content/the-things-stack/interact/console/personal-settings/change-password.png b/doc/content/the-things-stack/interact/console/personal-settings/change-password.png index aa7ecd9b05..01369be8b1 100644 Binary files a/doc/content/the-things-stack/interact/console/personal-settings/change-password.png and b/doc/content/the-things-stack/interact/console/personal-settings/change-password.png differ diff --git a/doc/content/the-things-stack/interact/console/personal-settings/general-settings.png b/doc/content/the-things-stack/interact/console/personal-settings/general-settings.png index 8c9475319e..0f291b1b0b 100644 Binary files a/doc/content/the-things-stack/interact/console/personal-settings/general-settings.png and b/doc/content/the-things-stack/interact/console/personal-settings/general-settings.png differ diff --git a/doc/content/the-things-stack/interact/console/personal-settings/personal-api-key-creation.png b/doc/content/the-things-stack/interact/console/personal-settings/personal-api-key-creation.png index 40d44a56ef..036c473269 100644 Binary files a/doc/content/the-things-stack/interact/console/personal-settings/personal-api-key-creation.png and b/doc/content/the-things-stack/interact/console/personal-settings/personal-api-key-creation.png differ diff --git a/doc/content/the-things-stack/interact/console/personal-settings/profile-settings.png b/doc/content/the-things-stack/interact/console/personal-settings/profile-settings.png index a7a2a888fc..27b7ab2c49 100644 Binary files a/doc/content/the-things-stack/interact/console/personal-settings/profile-settings.png and b/doc/content/the-things-stack/interact/console/personal-settings/profile-settings.png differ diff --git a/doc/content/the-things-stack/management/purge/delete.png b/doc/content/the-things-stack/management/purge/delete.png index 7089fa2d4f..038f91a4a0 100644 Binary files a/doc/content/the-things-stack/management/purge/delete.png and b/doc/content/the-things-stack/management/purge/delete.png differ diff --git a/doc/content/the-things-stack/management/purge/purge.png b/doc/content/the-things-stack/management/purge/purge.png index ae008d0870..f9cdf77cbb 100644 Binary files a/doc/content/the-things-stack/management/purge/purge.png and b/doc/content/the-things-stack/management/purge/purge.png differ diff --git a/doc/content/the-things-stack/management/purge/restore-app.png b/doc/content/the-things-stack/management/purge/restore-app.png index 23021bfafb..4f83a7867f 100644 Binary files a/doc/content/the-things-stack/management/purge/restore-app.png and b/doc/content/the-things-stack/management/purge/restore-app.png differ diff --git a/doc/content/the-things-stack/management/sso/login-screen.png b/doc/content/the-things-stack/management/sso/login-screen.png index 64538c30a9..2c876b57d9 100644 Binary files a/doc/content/the-things-stack/management/sso/login-screen.png and b/doc/content/the-things-stack/management/sso/login-screen.png differ diff --git a/doc/content/the-things-stack/management/user-management/org/_index.md b/doc/content/the-things-stack/management/user-management/org/_index.md index 691c1f8534..c00906e4c4 100644 --- a/doc/content/the-things-stack/management/user-management/org/_index.md +++ b/doc/content/the-things-stack/management/user-management/org/_index.md @@ -24,7 +24,7 @@ To manage organizations, click the **Organizations** tab in the top menu. {{< figure src="orgs.png" alt="Organizations" >}} -To add an organization, click **Add organization**. +To add an organization, click **Create organization**. {{< figure src="add-org.png" alt="Add organization" >}} @@ -34,7 +34,9 @@ Use the left hand menu in your organization's settings to add or remove collabor ### Create Organization API Key -When a user is a member of an organization which is a collaborator for an entity, the user's rights are the intersection of the user's rights in the organization and the organization's rights on the entity. To grant rights to your organization, navigate to **API Keys** on the left hand menu of your organization's settings and select **Add API Key**. +When a user is a member of an organization which is a collaborator for an entity, the user's rights are the intersection of the user's rights in the organization and the organization's rights on the entity. To grant rights to your organization, navigate to **API Keys** on the top hand menu of your organization's settings and select **Add API Key**. + +{{< figure src="organization-api-keys.png" alt="Application API Key" >}} Enter a **Name** for your key, set the **Expiry date**, select rights that you want to grant and then press **Create API Key**. diff --git a/doc/content/the-things-stack/management/user-management/org/add-org.png b/doc/content/the-things-stack/management/user-management/org/add-org.png index cf20827caf..9b08a54cf8 100644 Binary files a/doc/content/the-things-stack/management/user-management/org/add-org.png and b/doc/content/the-things-stack/management/user-management/org/add-org.png differ diff --git a/doc/content/the-things-stack/management/user-management/org/organization-api-key-creation.png b/doc/content/the-things-stack/management/user-management/org/organization-api-key-creation.png index 87e83aa205..3ac675d4f5 100644 Binary files a/doc/content/the-things-stack/management/user-management/org/organization-api-key-creation.png and b/doc/content/the-things-stack/management/user-management/org/organization-api-key-creation.png differ diff --git a/doc/content/the-things-stack/management/user-management/org/organization-api-keys.png b/doc/content/the-things-stack/management/user-management/org/organization-api-keys.png new file mode 100644 index 0000000000..9f35ba684a Binary files /dev/null and b/doc/content/the-things-stack/management/user-management/org/organization-api-keys.png differ diff --git a/doc/content/the-things-stack/management/user-management/org/orgs.png b/doc/content/the-things-stack/management/user-management/org/orgs.png index 23d4cd4078..45ab42c15d 100644 Binary files a/doc/content/the-things-stack/management/user-management/org/orgs.png and b/doc/content/the-things-stack/management/user-management/org/orgs.png differ diff --git a/doc/content/the-things-stack/management/user-management/rights/collaborators.png b/doc/content/the-things-stack/management/user-management/rights/collaborators.png index 56baaf569f..026b570eb3 100644 Binary files a/doc/content/the-things-stack/management/user-management/rights/collaborators.png and b/doc/content/the-things-stack/management/user-management/rights/collaborators.png differ diff --git a/doc/content/the-things-stack/management/user-management/rights/rights.png b/doc/content/the-things-stack/management/user-management/rights/rights.png index ca5dc0dcf3..b268ea3180 100644 Binary files a/doc/content/the-things-stack/management/user-management/rights/rights.png and b/doc/content/the-things-stack/management/user-management/rights/rights.png differ diff --git a/doc/content/the-things-stack/migrating/migration-tool/export-from-firefly.md b/doc/content/the-things-stack/migrating/migration-tool/export-from-firefly.md index 4c4c23e660..cdb14da3f6 100644 --- a/doc/content/the-things-stack/migrating/migration-tool/export-from-firefly.md +++ b/doc/content/the-things-stack/migrating/migration-tool/export-from-firefly.md @@ -11,6 +11,7 @@ This section contains instructions on how to configure migration tool and use it ### Before you begin +- Using the actual JoinEUI of the end devices is mandatory when registering them on {{% tts %}}. Since Firefly does not store the JoinEUI of the device, users need to obtain this information separately, such as from the device manufacturer. - The export process will halt if any error occurs. - Use the `--invalidate-keys` option to invalidate the root and/or session keys of the devices on the Firefly server. This is necessary to prevent both networks from communicating with the same device. The last byte of the keys will be incremented by 0x01. This enables an easy rollback if necessary. Setting this flag to false (default) would result in a "dry run", where the devices are exported but they will still be able to communicate with the Firefly server. @@ -20,13 +21,13 @@ Configure with environment variables, or command-line arguments. See `ttn-lw-migrate firefly {device|application} --help` for more details. -The following example shows how to set options via environment variables. +The following example shows how to set options via environment variables. These are example values. Please use actual ones based on your case. ```bash $ export FIREFLY_HOST=example.com # Host of the Firefly API $ export FIREFLY_API_KEY=abcdefgh # Firefly API Key $ export APP_ID=my-test-app # Application ID for the exported devices -$ export JOIN_EUI=1111111111111111 # JoinEUI for the exported devices +$ export JOIN_EUI=1111111111111111 # JoinEUI for the exported devices. $ export FREQUENCY_PLAN_ID=EU_863_870 # Frequency Plan ID for the exported devices $ export MAC_VERSION=1.0.2b # LoRaWAN MAC version for the exported devices ``` @@ -60,6 +61,8 @@ FF11111111111134 ABCD111111111100 ``` +Please note that all these devices should have the same JoinEUI. + And then export with: ```bash diff --git a/doc/content/the-things-stack/packet-broker/configure/_index.md b/doc/content/the-things-stack/packet-broker/configure/_index.md index eb800910c7..e5ca0ab882 100644 --- a/doc/content/the-things-stack/packet-broker/configure/_index.md +++ b/doc/content/the-things-stack/packet-broker/configure/_index.md @@ -39,7 +39,7 @@ Packet Broker can be configured using either the Console or the CLI. {{< tabs/tab "Console" >}} -To configure Packet Broker, click the **Packet Broker** button in the top right menu. +To configure Packet Broker, click on **Admin panel** in the left-hand menu and select **Packet Broker**. {{< figure src="pb-menu.png" alt="Packet Broker Menu Button" >}} diff --git a/doc/content/the-things-stack/packet-broker/configure/default-policy.png b/doc/content/the-things-stack/packet-broker/configure/default-policy.png index 16c7a2e4e7..6728c5dfba 100644 Binary files a/doc/content/the-things-stack/packet-broker/configure/default-policy.png and b/doc/content/the-things-stack/packet-broker/configure/default-policy.png differ diff --git a/doc/content/the-things-stack/packet-broker/configure/pb-config.png b/doc/content/the-things-stack/packet-broker/configure/pb-config.png deleted file mode 100644 index 32252e20c0..0000000000 Binary files a/doc/content/the-things-stack/packet-broker/configure/pb-config.png and /dev/null differ diff --git a/doc/content/the-things-stack/packet-broker/configure/pb-custom.png b/doc/content/the-things-stack/packet-broker/configure/pb-custom.png index d9910fe4db..bbcca855d0 100644 Binary files a/doc/content/the-things-stack/packet-broker/configure/pb-custom.png and b/doc/content/the-things-stack/packet-broker/configure/pb-custom.png differ diff --git a/doc/content/the-things-stack/packet-broker/configure/pb-gw-visibility.png b/doc/content/the-things-stack/packet-broker/configure/pb-gw-visibility.png index 2cdf303ecc..53f2a41032 100644 Binary files a/doc/content/the-things-stack/packet-broker/configure/pb-gw-visibility.png and b/doc/content/the-things-stack/packet-broker/configure/pb-gw-visibility.png differ diff --git a/doc/content/the-things-stack/packet-broker/configure/pb-menu.png b/doc/content/the-things-stack/packet-broker/configure/pb-menu.png index 36c6059684..bccca840a1 100644 Binary files a/doc/content/the-things-stack/packet-broker/configure/pb-menu.png and b/doc/content/the-things-stack/packet-broker/configure/pb-menu.png differ diff --git a/doc/content/the-things-stack/packet-broker/configure/pb-networks.png b/doc/content/the-things-stack/packet-broker/configure/pb-networks.png index e946bb5feb..b136157d59 100644 Binary files a/doc/content/the-things-stack/packet-broker/configure/pb-networks.png and b/doc/content/the-things-stack/packet-broker/configure/pb-networks.png differ diff --git a/doc/content/the-things-stack/packet-broker/status-location-public.png b/doc/content/the-things-stack/packet-broker/status-location-public.png index 6952d40208..682f69e6b6 100644 Binary files a/doc/content/the-things-stack/packet-broker/status-location-public.png and b/doc/content/the-things-stack/packet-broker/status-location-public.png differ diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_end-devices_list.md b/doc/content/ttn-lw-cli/ttn-lw-cli_end-devices_list.md index af0f0a5f2f..48968d0ba4 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_end-devices_list.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_end-devices_list.md @@ -24,6 +24,7 @@ ttn-lw-cli end-devices list [application-id] [flags] --claim-authentication-code.valid-to select the claim_authentication_code.valid_to field --claim-authentication-code.value select the claim_authentication_code.value field --description select the description field + --filter.updated-since updated_at filter the updated_at field by this timestamp (YYYY-MM-DDTHH:MM:SSZ) -h, --help help for list --join-server-address select the join_server_address field --last-seen-at select the last_seen_at field diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_claim.md b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_claim.md index dd72b79aa5..d3961ab8fc 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_claim.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_claim.md @@ -39,9 +39,8 @@ ttn-lw-cli gateways claim [gateway-eui] [flags] --gateway-id string -h, --help help for claim --organization-id string - --target-cups-trust-local-file string (optional) Target CUPS trust in PEM format (local file name) - --target-cups-uri string --target-frequency-plan-id string + --target-frequency-plan-ids string --target-gateway-id string gateway ID for the claimed gateway --target-gateway-server-address string --user-id string @@ -87,7 +86,5 @@ ttn-lw-cli gateways claim [gateway-eui] [flags] ### SEE ALSO * [ttn-lw-cli gateways]({{< relref "ttn-lw-cli_gateways" >}}) - Gateway commands -* [ttn-lw-cli gateways claim authorize]({{< relref "ttn-lw-cli_gateways_claim_authorize" >}}) - Authorize a gateway for claiming (EXPERIMENTAL) * [ttn-lw-cli gateways claim info]({{< relref "ttn-lw-cli_gateways_claim_info" >}}) - Check if claiming is supported for the EUI (EXPERIMENTAL) -* [ttn-lw-cli gateways claim unauthorize]({{< relref "ttn-lw-cli_gateways_claim_unauthorize" >}}) - Unauthorize a gateway for claiming (EXPERIMENTAL) diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_create.md b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_create.md index 7617d9285d..0eaa77c0d2 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_create.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_create.md @@ -63,6 +63,7 @@ ttn-lw-cli gateways create [gateway-id] [flags] --version-ids.firmware-version string --version-ids.hardware-version string --version-ids.model-id string + --version-ids.runtime-version string ``` ### Options inherited from parent commands diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_get.md b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_get.md index 0bccb95370..9bd0f70db3 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_get.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_get.md @@ -70,6 +70,7 @@ ttn-lw-cli gateways get [gateway-id] [flags] --version-ids.firmware-version select the version_ids.firmware_version field --version-ids.hardware-version select the version_ids.hardware_version field --version-ids.model-id select the version_ids.model_id field + --version-ids.runtime-version select the version_ids.runtime_version field ``` ### Options inherited from parent commands diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_list.md b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_list.md index fe52e1648f..2aa8726b8a 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_list.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_list.md @@ -39,6 +39,7 @@ ttn-lw-cli gateways list [flags] --downlink-path-constraint select the downlink_path_constraint field --enforce-duty-cycle select the enforce_duty_cycle field --field-mask strings + --filter.updated-since updated_at filter the updated_at field by this timestamp (YYYY-MM-DDTHH:MM:SSZ) --frequency-plan-id select the frequency_plan_id field --frequency-plan-ids select the frequency_plan_ids field --gateway-server-address select the gateway_server_address field @@ -75,6 +76,7 @@ ttn-lw-cli gateways list [flags] --version-ids.firmware-version select the version_ids.firmware_version field --version-ids.hardware-version select the version_ids.hardware_version field --version-ids.model-id select the version_ids.model_id field + --version-ids.runtime-version select the version_ids.runtime_version field ``` ### Options inherited from parent commands diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_search.md b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_search.md index d8e274438b..e91cde8da0 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_search.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_search.md @@ -79,6 +79,7 @@ ttn-lw-cli gateways search [flags] --version-ids.firmware-version select the version_ids.firmware_version field --version-ids.hardware-version select the version_ids.hardware_version field --version-ids.model-id select the version_ids.model_id field + --version-ids.runtime-version select the version_ids.runtime_version field ``` ### Options inherited from parent commands diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_set.md b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_set.md index 164a8cd85b..cd857a0bf8 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_set.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_set.md @@ -64,6 +64,7 @@ ttn-lw-cli gateways set [gateway-id] [flags] --version-ids.firmware-version string --version-ids.hardware-version string --version-ids.model-id string + --version-ids.runtime-version string ``` ### Options inherited from parent commands diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_create.md b/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_create.md index 0c0620d4e2..6d58f20fae 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_create.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_create.md @@ -25,6 +25,7 @@ ttn-lw-cli tenants create [tenant-id] [flags] --billing.provider.stripe.subscription-item-id string --configuration.default-cluster.ars.routing.enabled --configuration.default-cluster.as.webhooks.queue.enabled + --configuration.default-cluster.gs.mtls-authentication.client-ca-pool bytesBase64 --configuration.default-cluster.is.admin-rights.all --configuration.default-cluster.is.email.network.branding-base-url string --configuration.default-cluster.is.end-device-picture.disable-upload diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_get.md b/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_get.md index 80e454636e..7635e728bd 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_get.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_get.md @@ -39,6 +39,9 @@ ttn-lw-cli tenants get [tenant-id] [flags] --configuration.default-cluster.as.webhooks select the configuration.default_cluster.as.webhooks field and all allowed sub-fields --configuration.default-cluster.as.webhooks.queue select the configuration.default_cluster.as.webhooks.queue field and all allowed sub-fields --configuration.default-cluster.as.webhooks.queue.enabled select the configuration.default_cluster.as.webhooks.queue.enabled field + --configuration.default-cluster.gs select the configuration.default_cluster.gs field and all allowed sub-fields + --configuration.default-cluster.gs.mtls-authentication select the configuration.default_cluster.gs.mtls_authentication field and all allowed sub-fields + --configuration.default-cluster.gs.mtls-authentication.client-ca-pool select the configuration.default_cluster.gs.mtls_authentication.client_ca_pool field --configuration.default-cluster.is select the configuration.default_cluster.is field and all allowed sub-fields --configuration.default-cluster.is.admin-rights select the configuration.default_cluster.is.admin_rights field and all allowed sub-fields --configuration.default-cluster.is.admin-rights.all select the configuration.default_cluster.is.admin_rights.all field diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_list.md b/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_list.md index aa7d92b025..7593472b07 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_list.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_list.md @@ -39,6 +39,9 @@ ttn-lw-cli tenants list [flags] --configuration.default-cluster.as.webhooks select the configuration.default_cluster.as.webhooks field and all allowed sub-fields --configuration.default-cluster.as.webhooks.queue select the configuration.default_cluster.as.webhooks.queue field and all allowed sub-fields --configuration.default-cluster.as.webhooks.queue.enabled select the configuration.default_cluster.as.webhooks.queue.enabled field + --configuration.default-cluster.gs select the configuration.default_cluster.gs field and all allowed sub-fields + --configuration.default-cluster.gs.mtls-authentication select the configuration.default_cluster.gs.mtls_authentication field and all allowed sub-fields + --configuration.default-cluster.gs.mtls-authentication.client-ca-pool select the configuration.default_cluster.gs.mtls_authentication.client_ca_pool field --configuration.default-cluster.is select the configuration.default_cluster.is field and all allowed sub-fields --configuration.default-cluster.is.admin-rights select the configuration.default_cluster.is.admin_rights field and all allowed sub-fields --configuration.default-cluster.is.admin-rights.all select the configuration.default_cluster.is.admin_rights.all field diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_search.md b/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_search.md index a31b0da7cb..df4051db46 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_search.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_search.md @@ -40,6 +40,9 @@ ttn-lw-cli tenants search [flags] --configuration.default-cluster.as.webhooks select the configuration.default_cluster.as.webhooks field and all allowed sub-fields --configuration.default-cluster.as.webhooks.queue select the configuration.default_cluster.as.webhooks.queue field and all allowed sub-fields --configuration.default-cluster.as.webhooks.queue.enabled select the configuration.default_cluster.as.webhooks.queue.enabled field + --configuration.default-cluster.gs select the configuration.default_cluster.gs field and all allowed sub-fields + --configuration.default-cluster.gs.mtls-authentication select the configuration.default_cluster.gs.mtls_authentication field and all allowed sub-fields + --configuration.default-cluster.gs.mtls-authentication.client-ca-pool select the configuration.default_cluster.gs.mtls_authentication.client_ca_pool field --configuration.default-cluster.is select the configuration.default_cluster.is field and all allowed sub-fields --configuration.default-cluster.is.admin-rights select the configuration.default_cluster.is.admin_rights field and all allowed sub-fields --configuration.default-cluster.is.admin-rights.all select the configuration.default_cluster.is.admin_rights.all field diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_update.md b/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_update.md index d88a6d767c..8d5251aa30 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_update.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_tenants_update.md @@ -25,6 +25,7 @@ ttn-lw-cli tenants update [tenant-id] [flags] --billing.provider.stripe.subscription-item-id string --configuration.default-cluster.ars.routing.enabled --configuration.default-cluster.as.webhooks.queue.enabled + --configuration.default-cluster.gs.mtls-authentication.client-ca-pool bytesBase64 --configuration.default-cluster.is.admin-rights.all --configuration.default-cluster.is.email.network.branding-base-url string --configuration.default-cluster.is.end-device-picture.disable-upload diff --git a/doc/content/whats-new/3.31.1.md b/doc/content/whats-new/3.31.1.md new file mode 100644 index 0000000000..10eb55d4df --- /dev/null +++ b/doc/content/whats-new/3.31.1.md @@ -0,0 +1,18 @@ +--- +date: 2024-08-05T09:19:00Z +title: "3.31.1" +featured: + { + added: + [ + The Things Stack Cloud Plus subscription now includes gateway outage alerting and webhook retry features., + ], + changed: + [Gateway ID and device ID are not autogenerated and prefilled anymore.], + fixed: [], + } +--- + +### Changed + +- Gateway ID and device ID are not autogenerated and prefilled anymore. diff --git a/doc/content/whats-new/3.32.0.md b/doc/content/whats-new/3.32.0.md new file mode 100644 index 0000000000..3bbd28dfb6 --- /dev/null +++ b/doc/content/whats-new/3.32.0.md @@ -0,0 +1,72 @@ +--- +date: 2024-09-09T14:11:11Z +title: "3.32.0" +featured: + { + added: [Newly redesigned The Things Stack Console], + changed: + [ + Enforce `NOT NULL` constraint on Network Operations Center's `end_device_data_uplink` hypertable, + ], + fixed: [Fix unhandled video stream in QR code scanner], + } +--- + +### Added + +- Newly redesigned The Things Stack Console. The most notable changes are as follows: + - New look and feel + - New sidebar-based navigation and structure + - Top entities are automatically stored and displayed for faster access + - More useful panels in the overviews of gateways, applications and end devices + - Quick search feature to search globally for any entity + - New event overlay for better in-context event examination + - Notifications can now be viewed from within the Console +- Support for managed gateways and claiming through The Things Gateway Controller. +- Support for The Things Industries gateway protocol. This is adds a new pair of ports to Gateway Server: `1889` for Envoy or Traefik terminated TLS mutual authentication, and `8889` for The Things Stack terminated TLS mutual authentication. +- Option to filter the output of the `List` RPCs for end devices and gateways based on when they were updated. + - `ListGatewaysRequest` and `ListEndDevicesRequest` RPCs have a new `Filter` field that supports an `updated_since` timestamp. +- Preparation for universal rights assigned to users. + - This requires a database schema migration (`ttn-lw-stack is-db migrate`). + +### Changed + +- Enforce `NOT NULL` constraint on Network Operations Center's `end_device_data_uplink` hypertable. + - This requires a Network Operations Center migration (`tti-lw-stack noc-db migrate`). + +### Deprecated + +- Experimental RPCs `AuthorizeGateway` and `UnauthorizeGateway` of the Gateway Claiming Server (GCLS). +- `CUPSRedirection` field of `ClaimGatewayRequest`. + +### Removed + +- `authorize` and `unauthorize` sub-commands of the gateway `claim` command. + +### Fixed + +- Fixed an issue where an downlink message was scheduled by the Application Layer Clock Synchronization (ALCS) implementation when there is no answer to send (i.e. `AnsRequired` is not set and the difference with what the end device reports falls within the threshold). +- Fix unhandled video stream in QR code scanner +- Recreate Network Operations Center's `gateway_end_device_uplink_statistics_1h` aggregate with a proper time bucket. + - This requires a Network Operations Center migration (`tti-lw-stack noc-db migrate`). + - Decreases aggregate's total data size to be less than 10% of the previous size. + - To generate data for the new table, run the following command: + - `CALL refresh_continuous_aggregate('gateway_end_device_uplink_statistics_1h', NOW() - interval '30d', null);` + - Deployments that have retention period for the hypertable `gateway_end_device_uplink` shorter than 30 days will see a loss of data in the migration. Specifically the data loss happens in the period between ['30d', retention_period). + - Grafana graphs will be impacted but slowly replenished by the new aggregate. +- The Network Operation Center no longer returns an incorrect amount of active Gateways, End-devices and Applications on the bigger bucket intervals. + - This requires a Network Operations Center migration (`tti-lw-stack noc-db migrate`). + - To generate data for the new aggregates, run the following commands: + - `CALL refresh_continuous_aggregate('active_gateways_1h', NOW() - interval '30d', null);` + - `CALL refresh_continuous_aggregate('active_gateways_1d', NOW() - interval '30d', null);` + - `CALL refresh_continuous_aggregate('active_end_devices_1h', NOW() - interval '30d', null);` + - `CALL refresh_continuous_aggregate('active_end_devices_1d', NOW() - interval '30d', null);` + - `CALL refresh_continuous_aggregate('active_applications_1h', NOW() - interval '30d', null);` + - `CALL refresh_continuous_aggregate('active_applications_1d', NOW() - interval '30d', null);` + - `CALL refresh_continuous_aggregate('active_gateway_count_1d', NOW() - interval '30d', null);` + - `CALL refresh_continuous_aggregate('active_gateway_count_1w', NOW() - interval '30d', null);` + - `CALL refresh_continuous_aggregate('active_end_device_count_1d', NOW() - interval '30d', null);` + - `CALL refresh_continuous_aggregate('active_end_device_count_1w', NOW() - interval '30d', null);` + - `CALL refresh_continuous_aggregate('active_application_count_1d', NOW() - interval '30d', null);` + - `CALL refresh_continuous_aggregate('active_application_count_1w', NOW() - interval '30d', null);` +- Network Operations Center no longer returns only the last three days of data of gateways' connection events. diff --git a/doc/data/api/tti.lorawan.v3/messages/ApplicationEventForwardCount.yml b/doc/data/api/tti.lorawan.v3/messages/ApplicationEventForwardCount.yml new file mode 100644 index 0000000000..50832e49af --- /dev/null +++ b/doc/data/api/tti.lorawan.v3/messages/ApplicationEventForwardCount.yml @@ -0,0 +1,16 @@ +name: ApplicationEventForwardCount +fields: +- name: time + message: + package: google.protobuf + name: Timestamp + rules: + required: true + default: "0001-01-01T00:00:00Z" +- name: count + comment: Application Server forwarded events count per event name. + map_key: + type: string + map_value: + type: uint64 + default: {} diff --git a/doc/data/api/tti.lorawan.v3/messages/ApplicationEventsForwardCount.yml b/doc/data/api/tti.lorawan.v3/messages/ApplicationEventsForwardCount.yml new file mode 100644 index 0000000000..e649b93dd0 --- /dev/null +++ b/doc/data/api/tti.lorawan.v3/messages/ApplicationEventsForwardCount.yml @@ -0,0 +1,7 @@ +name: ApplicationEventsForwardCount +fields: +- name: event_forward_count + repeated: + message: + name: ApplicationEventForwardCount + default: [] diff --git a/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureByStatusCodeCount.yml b/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureByStatusCodeCount.yml new file mode 100644 index 0000000000..b702e799a3 --- /dev/null +++ b/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureByStatusCodeCount.yml @@ -0,0 +1,15 @@ +name: ApplicationWebhookFailureByStatusCodeCount +fields: +- name: time + message: + package: google.protobuf + name: Timestamp + rules: + required: true + default: "0001-01-01T00:00:00Z" +- name: totals + map_key: + type: uint32 + map_value: + type: uint64 + default: {} diff --git a/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureCount.yml b/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureCount.yml new file mode 100644 index 0000000000..6b894f3a8c --- /dev/null +++ b/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureCount.yml @@ -0,0 +1,12 @@ +name: ApplicationWebhookFailureCount +fields: +- name: time + message: + package: google.protobuf + name: Timestamp + rules: + required: true + default: "0001-01-01T00:00:00Z" +- name: total + type: uint64 + default: 0 diff --git a/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureToForwardRatio.yml b/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureToForwardRatio.yml new file mode 100644 index 0000000000..3c1ed4c722 --- /dev/null +++ b/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureToForwardRatio.yml @@ -0,0 +1,5 @@ +name: ApplicationWebhookFailureToForwardRatio +fields: +- name: webhook_failure_to_forward_ratio + type: float + default: 0 diff --git a/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailuresByStatusCodeCount.yml b/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailuresByStatusCodeCount.yml new file mode 100644 index 0000000000..91bb53404e --- /dev/null +++ b/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailuresByStatusCodeCount.yml @@ -0,0 +1,7 @@ +name: ApplicationWebhookFailuresByStatusCodeCount +fields: +- name: counts + repeated: + message: + name: ApplicationWebhookFailureByStatusCodeCount + default: [] diff --git a/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailuresCount.yml b/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailuresCount.yml new file mode 100644 index 0000000000..301b9b7c21 --- /dev/null +++ b/doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailuresCount.yml @@ -0,0 +1,7 @@ +name: ApplicationWebhookFailuresCount +fields: +- name: webhook_failure + repeated: + message: + name: ApplicationWebhookFailureCount + default: [] diff --git a/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.GatewayServer.MTLSAuthentication.yml b/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.GatewayServer.MTLSAuthentication.yml new file mode 100644 index 0000000000..69e3a39386 --- /dev/null +++ b/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.GatewayServer.MTLSAuthentication.yml @@ -0,0 +1,7 @@ +name: Configuration.Cluster.GatewayServer.MTLSAuthentication +fields: +- name: client_ca_pool + comment: PEM encoded pool of X.509 root certificates to trust for verifying the + presented TLS client certificate. + type: bytes + default: "" diff --git a/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.GatewayServer.yml b/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.GatewayServer.yml new file mode 100644 index 0000000000..1d5831bb71 --- /dev/null +++ b/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.GatewayServer.yml @@ -0,0 +1,6 @@ +name: Configuration.Cluster.GatewayServer +fields: +- name: mtls_authentication + message: + name: Configuration.Cluster.GatewayServer.MTLSAuthentication + default: {} diff --git a/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.yml b/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.yml index 305efab1b5..c2841a7d73 100644 --- a/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.yml +++ b/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.yml @@ -9,6 +9,11 @@ fields: message: name: Configuration.Cluster.IdentityServer default: {} +- name: gs + comment: Gateway Server configuration. + message: + name: Configuration.Cluster.GatewayServer + default: {} - name: ns message: name: Configuration.Cluster.NetworkServer diff --git a/doc/data/api/tti.lorawan.v3/messages/ResendAdminValidationRequest.yml b/doc/data/api/tti.lorawan.v3/messages/ResendAdminValidationRequest.yml new file mode 100644 index 0000000000..453af9af97 --- /dev/null +++ b/doc/data/api/tti.lorawan.v3/messages/ResendAdminValidationRequest.yml @@ -0,0 +1,8 @@ +name: ResendAdminValidationRequest +fields: +- name: tenant_ids + message: + name: TenantIdentifiers + rules: + required: true + default: {} diff --git a/doc/data/api/tti.lorawan.v3/services/Noc.yml b/doc/data/api/tti.lorawan.v3/services/Noc.yml index 7ce0446ba4..46de60ec7a 100644 --- a/doc/data/api/tti.lorawan.v3/services/Noc.yml +++ b/doc/data/api/tti.lorawan.v3/services/Noc.yml @@ -201,6 +201,42 @@ methods: http: - method: POST path: /noc/application/{application_ids.application_id}/data_rates/packet-count + QueryApplicationEventForwardCount: + name: QueryApplicationEventForwardCount + input: + name: ApplicationTimeBucketQuery + output: + name: ApplicationEventsForwardCount + http: + - method: POST + path: /noc/application/{application_ids.application_id}/events/forward + QueryApplicationWebhookFailure: + name: QueryApplicationWebhookFailure + input: + name: ApplicationTimeBucketQuery + output: + name: ApplicationWebhookFailuresCount + http: + - method: POST + path: /noc/application/{application_ids.application_id}/events/webhook/failure + QueryApplicationWebhookFailureTopFive: + name: QueryApplicationWebhookFailureTopFive + input: + name: ApplicationTimeBucketQuery + output: + name: ApplicationWebhookFailuresByStatusCodeCount + http: + - method: POST + path: /noc/application/{application_ids.application_id}/events/webhook/failure/top-five + QueryApplicationWebhookFailureToForwardRatio: + name: QueryApplicationWebhookFailureToForwardRatio + input: + name: ApplicationTimeWindowQuery + output: + name: ApplicationWebhookFailureToForwardRatio + http: + - method: POST + path: /noc/application/{application_ids.application_id}/events/webhook/failure/ratio QueryEndDevicesActive: name: QueryEndDevicesActive input: diff --git a/doc/data/api/tti.lorawan.v3/services/TenantAccess.yml b/doc/data/api/tti.lorawan.v3/services/TenantAccess.yml new file mode 100644 index 0000000000..bf630b06dd --- /dev/null +++ b/doc/data/api/tti.lorawan.v3/services/TenantAccess.yml @@ -0,0 +1,12 @@ +name: TenantAccess +methods: + ResendAdminValidation: + name: ResendAdminValidation + input: + name: ResendAdminValidationRequest + output: + package: google.protobuf + name: Empty + http: + - method: POST + path: /tenants/{tenant_ids.tenant_id}/resend-admin-validation diff --git a/doc/data/api/ttn.lorawan.v3/enums/ManagedGatewayNetworkInterfaceStatus.yml b/doc/data/api/ttn.lorawan.v3/enums/ManagedGatewayNetworkInterfaceStatus.yml new file mode 100644 index 0000000000..1ed48cd00d --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/enums/ManagedGatewayNetworkInterfaceStatus.yml @@ -0,0 +1,10 @@ +name: ManagedGatewayNetworkInterfaceStatus +values: +- name: MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED + value: 0 +- name: MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN + value: 1 +- name: MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP + value: 2 +- name: MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED + value: 3 diff --git a/doc/data/api/ttn.lorawan.v3/enums/ManagedGatewayNetworkInterfaceType.yml b/doc/data/api/ttn.lorawan.v3/enums/ManagedGatewayNetworkInterfaceType.yml new file mode 100644 index 0000000000..1dc71fb4d0 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/enums/ManagedGatewayNetworkInterfaceType.yml @@ -0,0 +1,10 @@ +name: ManagedGatewayNetworkInterfaceType +values: +- name: MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED + value: 0 +- name: MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_CELLULAR + value: 1 +- name: MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_WIFI + value: 2 +- name: MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_ETHERNET + value: 3 diff --git a/doc/data/api/ttn.lorawan.v3/messages/ApplicationDownlink.yml b/doc/data/api/ttn.lorawan.v3/messages/ApplicationDownlink.yml index 372945edc9..ab540d36d7 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/ApplicationDownlink.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/ApplicationDownlink.yml @@ -22,6 +22,8 @@ fields: The payload is encrypted if the skip_payload_crypto field of the EndDevice is true. type: bytes + rules: + max_len: 255 default: "" - name: decoded_payload comment: |- diff --git a/doc/data/api/ttn.lorawan.v3/messages/CUPSRedirection.yml b/doc/data/api/ttn.lorawan.v3/messages/CUPSRedirection.yml index 7dc15425b9..02c4ef1b75 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/CUPSRedirection.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/CUPSRedirection.yml @@ -1,4 +1,6 @@ name: CUPSRedirection +comment: 'DEPRECATED: This message is deprecated and will be removed in a future version + of The Things Stack.' fields: - name: target_cups_uri comment: CUPS URI for LoRa Basics Station CUPS redirection. diff --git a/doc/data/api/ttn.lorawan.v3/messages/ClaimGatewayRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/ClaimGatewayRequest.yml index de70b2ea4a..c8c9e8a46a 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/ClaimGatewayRequest.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/ClaimGatewayRequest.yml @@ -32,7 +32,9 @@ fields: pattern: ^(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*(?:[A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])(?::[0-9]{1,5})?$|^$ default: "" - name: cups_redirection - comment: Parameters to set CUPS redirection for the gateway. + comment: |- + Parameters to set CUPS redirection for the gateway. + DEPRECATED: This field is deprecated and will be removed in a future version of The Things Stack. message: name: CUPSRedirection default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/CreateManagedGatewayEthernetProfileRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/CreateManagedGatewayEthernetProfileRequest.yml new file mode 100644 index 0000000000..de2212d87d --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/CreateManagedGatewayEthernetProfileRequest.yml @@ -0,0 +1,14 @@ +name: CreateManagedGatewayEthernetProfileRequest +fields: +- name: profile + message: + name: ManagedGatewayEthernetProfile + rules: + required: true + default: {} +- name: collaborator + message: + name: OrganizationOrUserIdentifiers + rules: + required: true + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/CreateManagedGatewayWiFiProfileRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/CreateManagedGatewayWiFiProfileRequest.yml new file mode 100644 index 0000000000..e46a07aaf7 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/CreateManagedGatewayWiFiProfileRequest.yml @@ -0,0 +1,14 @@ +name: CreateManagedGatewayWiFiProfileRequest +fields: +- name: profile + message: + name: ManagedGatewayWiFiProfile + rules: + required: true + default: {} +- name: collaborator + message: + name: OrganizationOrUserIdentifiers + rules: + required: true + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/DeleteManagedGatewayEthernetProfileRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/DeleteManagedGatewayEthernetProfileRequest.yml new file mode 100644 index 0000000000..d807bd5d00 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/DeleteManagedGatewayEthernetProfileRequest.yml @@ -0,0 +1,13 @@ +name: DeleteManagedGatewayEthernetProfileRequest +fields: +- name: collaborator + message: + name: OrganizationOrUserIdentifiers + rules: + required: true + default: {} +- name: profile_id + type: string + rules: + uuid: true + default: "" diff --git a/doc/data/api/ttn.lorawan.v3/messages/DeleteManagedGatewayWiFiProfileRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/DeleteManagedGatewayWiFiProfileRequest.yml new file mode 100644 index 0000000000..9c866bf486 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/DeleteManagedGatewayWiFiProfileRequest.yml @@ -0,0 +1,13 @@ +name: DeleteManagedGatewayWiFiProfileRequest +fields: +- name: collaborator + message: + name: OrganizationOrUserIdentifiers + rules: + required: true + default: {} +- name: profile_id + type: string + rules: + uuid: true + default: "" diff --git a/doc/data/api/tti.lorawan.v3/messages/GatewayToken.Payload.yml b/doc/data/api/ttn.lorawan.v3/messages/GatewayToken.Payload.yml similarity index 83% rename from doc/data/api/tti.lorawan.v3/messages/GatewayToken.Payload.yml rename to doc/data/api/ttn.lorawan.v3/messages/GatewayToken.Payload.yml index 74d6a8eb2e..a198f2aebb 100644 --- a/doc/data/api/tti.lorawan.v3/messages/GatewayToken.Payload.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/GatewayToken.Payload.yml @@ -2,12 +2,10 @@ name: GatewayToken.Payload fields: - name: gateway_ids message: - package: ttn.lorawan.v3 name: GatewayIdentifiers default: {} - name: rights message: - package: ttn.lorawan.v3 name: Rights default: {} - name: created_at diff --git a/doc/data/api/tti.lorawan.v3/messages/GatewayToken.yml b/doc/data/api/ttn.lorawan.v3/messages/GatewayToken.yml similarity index 100% rename from doc/data/api/tti.lorawan.v3/messages/GatewayToken.yml rename to doc/data/api/ttn.lorawan.v3/messages/GatewayToken.yml diff --git a/doc/data/api/ttn.lorawan.v3/messages/GatewayVersionIdentifiers.yml b/doc/data/api/ttn.lorawan.v3/messages/GatewayVersionIdentifiers.yml index 82da551577..95ffcd51d5 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/GatewayVersionIdentifiers.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/GatewayVersionIdentifiers.yml @@ -25,3 +25,8 @@ fields: rules: max_len: 32 default: "" +- name: runtime_version + type: string + rules: + max_len: 32 + default: "" diff --git a/doc/data/api/ttn.lorawan.v3/messages/GetInfoByGatewayEUIResponse.yml b/doc/data/api/ttn.lorawan.v3/messages/GetInfoByGatewayEUIResponse.yml index fe210cbe8f..066338e4d9 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/GetInfoByGatewayEUIResponse.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/GetInfoByGatewayEUIResponse.yml @@ -9,3 +9,9 @@ fields: - name: supports_claiming type: bool default: false +- name: is_managed + comment: |- + Indicates whether the gateway is a managed gateway. + If true, when the gateway is successfully claimed, it can be managed with ManagedGatewayConfigurationService. + type: bool + default: false diff --git a/doc/data/api/ttn.lorawan.v3/messages/GetManagedGatewayEthernetProfileRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/GetManagedGatewayEthernetProfileRequest.yml new file mode 100644 index 0000000000..90bce1539b --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/GetManagedGatewayEthernetProfileRequest.yml @@ -0,0 +1,19 @@ +name: GetManagedGatewayEthernetProfileRequest +fields: +- name: collaborator + message: + name: OrganizationOrUserIdentifiers + rules: + required: true + default: {} +- name: profile_id + type: string + rules: + uuid: true + default: "" +- name: field_mask + comment: The names of the gateway fields that should be returned. + message: + package: google.protobuf + name: FieldMask + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/GetManagedGatewayWiFiProfileRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/GetManagedGatewayWiFiProfileRequest.yml new file mode 100644 index 0000000000..de1cd90807 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/GetManagedGatewayWiFiProfileRequest.yml @@ -0,0 +1,19 @@ +name: GetManagedGatewayWiFiProfileRequest +fields: +- name: collaborator + message: + name: OrganizationOrUserIdentifiers + rules: + required: true + default: {} +- name: profile_id + type: string + rules: + uuid: true + default: "" +- name: field_mask + comment: The names of the gateway fields that should be returned. + message: + package: google.protobuf + name: FieldMask + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.TenantRegistration.ContactInfoValidation.yml b/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.TenantRegistration.ContactInfoValidation.yml new file mode 100644 index 0000000000..aee8a29290 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.TenantRegistration.ContactInfoValidation.yml @@ -0,0 +1,7 @@ +name: IsConfiguration.TenantRegistration.ContactInfoValidation +fields: +- name: token_ttl + message: + package: google.protobuf + name: Duration + default: 0s diff --git a/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.TenantRegistration.yml b/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.TenantRegistration.yml new file mode 100644 index 0000000000..96ab8d2737 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.TenantRegistration.yml @@ -0,0 +1,6 @@ +name: IsConfiguration.TenantRegistration +fields: +- name: contact_info_validation + message: + name: IsConfiguration.TenantRegistration.ContactInfoValidation + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.yml b/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.yml index 8e716682d1..d2e8f85254 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.yml @@ -48,3 +48,7 @@ fields: message: name: IsConfiguration.CollaboratorRights default: {} +- name: tenant_registration + message: + name: IsConfiguration.TenantRegistration + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/ListEndDevicesRequest.Filter.yml b/doc/data/api/ttn.lorawan.v3/messages/ListEndDevicesRequest.Filter.yml new file mode 100644 index 0000000000..85f652eec4 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ListEndDevicesRequest.Filter.yml @@ -0,0 +1,14 @@ +name: ListEndDevicesRequest.Filter +comment: Filter end devices by fields. +fields: +- name: updated_since + message: + package: google.protobuf + name: Timestamp + rules: + lt_now: true + default: "0001-01-01T00:00:00Z" +oneofs: +- name: field + field_names: + - updated_since diff --git a/doc/data/api/ttn.lorawan.v3/messages/ListEndDevicesRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/ListEndDevicesRequest.yml index 3dbbf24683..ef38d66344 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/ListEndDevicesRequest.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/ListEndDevicesRequest.yml @@ -45,3 +45,8 @@ fields: comment: Page number for pagination. 0 is interpreted as 1. type: uint32 default: 0 +- name: filters + repeated: + message: + name: ListEndDevicesRequest.Filter + default: [] diff --git a/doc/data/api/ttn.lorawan.v3/messages/ListGatewaysRequest.Filter.yml b/doc/data/api/ttn.lorawan.v3/messages/ListGatewaysRequest.Filter.yml new file mode 100644 index 0000000000..1d465a038d --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ListGatewaysRequest.Filter.yml @@ -0,0 +1,14 @@ +name: ListGatewaysRequest.Filter +comment: Filter gateways by fields. +fields: +- name: updated_since + message: + package: google.protobuf + name: Timestamp + rules: + lt_now: true + default: "0001-01-01T00:00:00Z" +oneofs: +- name: field + field_names: + - updated_since diff --git a/doc/data/api/ttn.lorawan.v3/messages/ListGatewaysRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/ListGatewaysRequest.yml index c57e5a6037..e95dde40f9 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/ListGatewaysRequest.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/ListGatewaysRequest.yml @@ -45,3 +45,8 @@ fields: comment: Only return recently deleted gateways. type: bool default: false +- name: filters + repeated: + message: + name: ListGatewaysRequest.Filter + default: [] diff --git a/doc/data/api/ttn.lorawan.v3/messages/ListManagedGatewayEthernetProfilesRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/ListManagedGatewayEthernetProfilesRequest.yml new file mode 100644 index 0000000000..b9fe1bf8da --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ListManagedGatewayEthernetProfilesRequest.yml @@ -0,0 +1,24 @@ +name: ListManagedGatewayEthernetProfilesRequest +fields: +- name: collaborator + message: + name: OrganizationOrUserIdentifiers + rules: + required: true + default: {} +- name: field_mask + comment: The names of the gateway fields that should be returned. + message: + package: google.protobuf + name: FieldMask + default: {} +- name: limit + comment: Limit the number of results per page. + type: uint32 + rules: + lte: 1000 + default: 0 +- name: page + comment: Page number for pagination. 0 is interpreted as 1. + type: uint32 + default: 0 diff --git a/doc/data/api/ttn.lorawan.v3/messages/ListManagedGatewayWiFiProfilesRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/ListManagedGatewayWiFiProfilesRequest.yml new file mode 100644 index 0000000000..c5490184fb --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ListManagedGatewayWiFiProfilesRequest.yml @@ -0,0 +1,24 @@ +name: ListManagedGatewayWiFiProfilesRequest +fields: +- name: collaborator + message: + name: OrganizationOrUserIdentifiers + rules: + required: true + default: {} +- name: field_mask + comment: The names of the gateway fields that should be returned. + message: + package: google.protobuf + name: FieldMask + default: {} +- name: limit + comment: Limit the number of results per page. + type: uint32 + rules: + lte: 1000 + default: 0 +- name: page + comment: Page number for pagination. 0 is interpreted as 1. + type: uint32 + default: 0 diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGateway.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGateway.yml new file mode 100644 index 0000000000..4b40da7596 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGateway.yml @@ -0,0 +1,48 @@ +name: ManagedGateway +fields: +- name: ids + message: + name: GatewayIdentifiers + rules: + required: true + default: {} +- name: version_ids + message: + name: GatewayVersionIdentifiers + default: {} +- name: cellular_imei + type: string + rules: + pattern: ^[0-9]{15}$ + ignore_empty: true + default: "" +- name: cellular_imsi + type: string + rules: + pattern: ^[0-9]{15}$ + ignore_empty: true + default: "" +- name: wifi_mac_address + type: bytes + rules: + len: 6 + ignore_empty: true + default: "" +- name: ethernet_mac_address + type: bytes + rules: + len: 6 + ignore_empty: true + default: "" +- name: wifi_profile_id + type: string + rules: + uuid: true + ignore_empty: true + default: "" +- name: ethernet_profile_id + type: string + rules: + uuid: true + ignore_empty: true + default: "" diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayCellularBackhaul.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayCellularBackhaul.yml new file mode 100644 index 0000000000..d567b6c9b5 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayCellularBackhaul.yml @@ -0,0 +1,16 @@ +name: ManagedGatewayCellularBackhaul +fields: +- name: network_interface + message: + name: ManagedGatewayNetworkInterfaceInfo + default: {} +- name: operator + type: string + rules: + max_len: 32 + default: "" +- name: rssi + message: + package: google.protobuf + name: FloatValue + default: null diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayControllerConnection.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayControllerConnection.yml new file mode 100644 index 0000000000..93bff8e944 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayControllerConnection.yml @@ -0,0 +1,8 @@ +name: ManagedGatewayControllerConnection +fields: +- name: network_interface_type + enum: + name: ManagedGatewayNetworkInterfaceType + rules: + defined_only: true + default: MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEthernetBackhaul.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEthernetBackhaul.yml new file mode 100644 index 0000000000..93adbe3e31 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEthernetBackhaul.yml @@ -0,0 +1,6 @@ +name: ManagedGatewayEthernetBackhaul +fields: +- name: network_interface + message: + name: ManagedGatewayNetworkInterfaceInfo + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEthernetProfile.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEthernetProfile.yml new file mode 100644 index 0000000000..72852469e8 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEthernetProfile.yml @@ -0,0 +1,20 @@ +name: ManagedGatewayEthernetProfile +fields: +- name: profile_id + type: string + rules: + uuid: true + ignore_empty: true + default: "" +- name: profile_name + type: string + rules: + max_len: 32 + default: "" +- name: shared + type: bool + default: false +- name: network_interface_addresses + message: + name: ManagedGatewayNetworkInterfaceAddresses + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEthernetProfiles.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEthernetProfiles.yml new file mode 100644 index 0000000000..b2936313fa --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEthernetProfiles.yml @@ -0,0 +1,7 @@ +name: ManagedGatewayEthernetProfiles +fields: +- name: profiles + repeated: + message: + name: ManagedGatewayEthernetProfile + default: [] diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEventData.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEventData.yml new file mode 100644 index 0000000000..a4b0c6c982 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayEventData.yml @@ -0,0 +1,45 @@ +name: ManagedGatewayEventData +fields: +- name: entity + message: + name: ManagedGateway + default: {} +- name: location + message: + name: Location + default: {} +- name: system_status + message: + name: ManagedGatewaySystemStatus + default: {} +- name: controller_connection + message: + name: ManagedGatewayControllerConnection + default: {} +- name: gateway_server_connection + message: + name: ManagedGatewayGatewayServerConnection + default: {} +- name: cellular_backhaul + message: + name: ManagedGatewayCellularBackhaul + default: {} +- name: wifi_backhaul + message: + name: ManagedGatewayWiFiBackhaul + default: {} +- name: ethernet_backhaul + message: + name: ManagedGatewayEthernetBackhaul + default: {} +oneofs: +- name: data + field_names: + - entity + - location + - system_status + - controller_connection + - gateway_server_connection + - cellular_backhaul + - wifi_backhaul + - ethernet_backhaul diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayGatewayServerConnection.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayGatewayServerConnection.yml new file mode 100644 index 0000000000..ef53c0ee7b --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayGatewayServerConnection.yml @@ -0,0 +1,11 @@ +name: ManagedGatewayGatewayServerConnection +fields: +- name: network_interface_type + enum: + name: ManagedGatewayNetworkInterfaceType + rules: + defined_only: true + default: MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED +- name: address + type: string + default: "" diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayNetworkInterfaceAddresses.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayNetworkInterfaceAddresses.yml new file mode 100644 index 0000000000..6946b32917 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayNetworkInterfaceAddresses.yml @@ -0,0 +1,30 @@ +name: ManagedGatewayNetworkInterfaceAddresses +fields: +- name: ip_addresses + rules: + max_items: 2 + repeated: + type: string + rules: + ip: true + default: [] +- name: subnet_mask + type: string + rules: + ipv4: true + ignore_empty: true + default: "" +- name: gateway + type: string + rules: + ipv4: true + ignore_empty: true + default: "" +- name: dns_servers + rules: + max_items: 2 + repeated: + type: string + rules: + ipv4: true + default: [] diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayNetworkInterfaceInfo.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayNetworkInterfaceInfo.yml new file mode 100644 index 0000000000..3d315838bd --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayNetworkInterfaceInfo.yml @@ -0,0 +1,15 @@ +name: ManagedGatewayNetworkInterfaceInfo +fields: +- name: status + enum: + name: ManagedGatewayNetworkInterfaceStatus + rules: + defined_only: true + default: MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED +- name: dhcp_enabled + type: bool + default: false +- name: addresses + message: + name: ManagedGatewayNetworkInterfaceAddresses + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewaySystemStatus.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewaySystemStatus.yml new file mode 100644 index 0000000000..27a67bc51a --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewaySystemStatus.yml @@ -0,0 +1,8 @@ +name: ManagedGatewaySystemStatus +fields: +- name: cpu_temperature + comment: CPU temperature (Celsius). + message: + package: google.protobuf + name: FloatValue + default: null diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiAccessPoint.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiAccessPoint.yml new file mode 100644 index 0000000000..69f227acbb --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiAccessPoint.yml @@ -0,0 +1,23 @@ +name: ManagedGatewayWiFiAccessPoint +fields: +- name: ssid + type: string + rules: + max_len: 32 + default: "" +- name: bssid + type: bytes + rules: + len: 6 + default: "" +- name: channel + type: uint32 + rules: + gte: 1 + default: 0 +- name: authentication_mode + type: string + default: "" +- name: rssi + type: float + default: 0 diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiAccessPoints.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiAccessPoints.yml new file mode 100644 index 0000000000..3d46c61442 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiAccessPoints.yml @@ -0,0 +1,7 @@ +name: ManagedGatewayWiFiAccessPoints +fields: +- name: access_points + repeated: + message: + name: ManagedGatewayWiFiAccessPoint + default: [] diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiBackhaul.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiBackhaul.yml new file mode 100644 index 0000000000..e49dbf7ca4 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiBackhaul.yml @@ -0,0 +1,29 @@ +name: ManagedGatewayWiFiBackhaul +fields: +- name: network_interface + message: + name: ManagedGatewayNetworkInterfaceInfo + default: {} +- name: ssid + type: string + rules: + max_len: 32 + default: "" +- name: bssid + type: bytes + rules: + len: 6 + default: "" +- name: channel + type: uint32 + rules: + gte: 1 + default: 0 +- name: authentication_mode + type: string + default: "" +- name: rssi + message: + package: google.protobuf + name: FloatValue + default: null diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiProfile.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiProfile.yml new file mode 100644 index 0000000000..af20f56215 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiProfile.yml @@ -0,0 +1,30 @@ +name: ManagedGatewayWiFiProfile +fields: +- name: profile_id + type: string + rules: + uuid: true + ignore_empty: true + default: "" +- name: profile_name + type: string + rules: + max_len: 32 + default: "" +- name: shared + type: bool + default: false +- name: ssid + type: string + rules: + max_len: 32 + default: "" +- name: password + type: string + rules: + max_len: 64 + default: "" +- name: network_interface_addresses + message: + name: ManagedGatewayNetworkInterfaceAddresses + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiProfiles.yml b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiProfiles.yml new file mode 100644 index 0000000000..1715796a6c --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/ManagedGatewayWiFiProfiles.yml @@ -0,0 +1,7 @@ +name: ManagedGatewayWiFiProfiles +fields: +- name: profiles + repeated: + message: + name: ManagedGatewayWiFiProfile + default: [] diff --git a/doc/data/api/ttn.lorawan.v3/messages/UpdateManagedGatewayEthernetProfileRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/UpdateManagedGatewayEthernetProfileRequest.yml new file mode 100644 index 0000000000..508cd924ac --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/UpdateManagedGatewayEthernetProfileRequest.yml @@ -0,0 +1,20 @@ +name: UpdateManagedGatewayEthernetProfileRequest +fields: +- name: profile + message: + name: ManagedGatewayEthernetProfile + rules: + required: true + default: {} +- name: collaborator + message: + name: OrganizationOrUserIdentifiers + rules: + required: true + default: {} +- name: field_mask + comment: The names of the gateway fields that should be updated. + message: + package: google.protobuf + name: FieldMask + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/UpdateManagedGatewayRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/UpdateManagedGatewayRequest.yml new file mode 100644 index 0000000000..841270d080 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/UpdateManagedGatewayRequest.yml @@ -0,0 +1,14 @@ +name: UpdateManagedGatewayRequest +fields: +- name: gateway + message: + name: ManagedGateway + rules: + required: true + default: {} +- name: field_mask + comment: The names of the gateway fields that should be updated. + message: + package: google.protobuf + name: FieldMask + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/UpdateManagedGatewayWiFiProfileRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/UpdateManagedGatewayWiFiProfileRequest.yml new file mode 100644 index 0000000000..ad88ea0c0c --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/UpdateManagedGatewayWiFiProfileRequest.yml @@ -0,0 +1,20 @@ +name: UpdateManagedGatewayWiFiProfileRequest +fields: +- name: profile + message: + name: ManagedGatewayWiFiProfile + rules: + required: true + default: {} +- name: collaborator + message: + name: OrganizationOrUserIdentifiers + rules: + required: true + default: {} +- name: field_mask + comment: The names of the gateway fields that should be updated. + message: + package: google.protobuf + name: FieldMask + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/services/GatewayClaimingServer.yml b/doc/data/api/ttn.lorawan.v3/services/GatewayClaimingServer.yml index a2b4e6620a..937bffb3c4 100644 --- a/doc/data/api/ttn.lorawan.v3/services/GatewayClaimingServer.yml +++ b/doc/data/api/ttn.lorawan.v3/services/GatewayClaimingServer.yml @@ -12,9 +12,35 @@ methods: http: - method: POST path: /gcls/claim + Unclaim: + name: Unclaim + comment: |- + Unclaims the gateway. + EUI provided in the request are ignored and the end device is looked up by the gateway ID. + input: + name: GatewayIdentifiers + output: + package: google.protobuf + name: Empty + http: + - method: DELETE + path: /gcls/claim/{gateway_id} + GetInfoByGatewayEUI: + name: GetInfoByGatewayEUI + comment: Return whether claiming is available for a given gateway EUI. + input: + name: GetInfoByGatewayEUIRequest + output: + name: GetInfoByGatewayEUIResponse + http: + - method: POST + path: /gcls/claim/info AuthorizeGateway: name: AuthorizeGateway - comment: AuthorizeGateway allows a gateway to be claimed. + comment: |- + AuthorizeGateway allows a gateway to be claimed. + DEPRECATED: Authorizing gateways for claiming is no longer supported and will be removed in a future version of The + Things Stack. input: name: AuthorizeGatewayRequest output: @@ -25,7 +51,10 @@ methods: path: /gcls/gateways/{gateway_ids.gateway_id}/authorize UnauthorizeGateway: name: UnauthorizeGateway - comment: UnauthorizeGateway prevents a gateway from being claimed. + comment: |- + UnauthorizeGateway prevents a gateway from being claimed. + DEPRECATED: Unauthorizing (locking) gateways for claiming is no longer supported and will be removed in a future + version of The Things Stack. input: name: GatewayIdentifiers output: @@ -34,13 +63,3 @@ methods: http: - method: DELETE path: /gcls/gateways/{gateway_id}/authorize - GetInfoByGatewayEUI: - name: GetInfoByGatewayEUI - comment: Return whether claiming is available for a given gateway EUI. - input: - name: GetInfoByGatewayEUIRequest - output: - name: GetInfoByGatewayEUIResponse - http: - - method: POST - path: /gcls/claim/info diff --git a/doc/data/api/ttn.lorawan.v3/services/GatewayConfigurator.yml b/doc/data/api/ttn.lorawan.v3/services/GatewayConfigurator.yml deleted file mode 100644 index 8e46293620..0000000000 --- a/doc/data/api/ttn.lorawan.v3/services/GatewayConfigurator.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: GatewayConfigurator -comment: The GatewayConfigurator service is used to fetch gateway configuration. -methods: - PullConfiguration: - name: PullConfiguration - input: - name: PullGatewayConfigurationRequest - output: - name: Gateway - stream: true diff --git a/doc/data/api/ttn.lorawan.v3/services/ManagedGatewayConfigurationService.yml b/doc/data/api/ttn.lorawan.v3/services/ManagedGatewayConfigurationService.yml new file mode 100644 index 0000000000..f049f79dda --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/services/ManagedGatewayConfigurationService.yml @@ -0,0 +1,39 @@ +name: ManagedGatewayConfigurationService +methods: + Get: + name: Get + input: + name: GetGatewayRequest + output: + name: ManagedGateway + http: + - method: GET + path: /gcs/gateways/managed/{gateway_ids.gateway_id} + Update: + name: Update + input: + name: UpdateManagedGatewayRequest + output: + name: ManagedGateway + http: + - method: PUT + path: /gcs/gateways/managed/{gateway.ids.gateway_id} + StreamEvents: + name: StreamEvents + input: + name: GatewayIdentifiers + output: + name: ManagedGatewayEventData + stream: true + http: + - method: POST + path: /gcs/gateways/managed/{gateway_id}/events + ScanWiFiAccessPoints: + name: ScanWiFiAccessPoints + input: + name: GatewayIdentifiers + output: + name: ManagedGatewayWiFiAccessPoints + http: + - method: POST + path: /gcs/gateways/managed/{gateway_id}/wifi/scan diff --git a/doc/data/api/ttn.lorawan.v3/services/ManagedGatewayEthernetProfileConfigurationService.yml b/doc/data/api/ttn.lorawan.v3/services/ManagedGatewayEthernetProfileConfigurationService.yml new file mode 100644 index 0000000000..b40988063c --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/services/ManagedGatewayEthernetProfileConfigurationService.yml @@ -0,0 +1,68 @@ +name: ManagedGatewayEthernetProfileConfigurationService +methods: + Create: + name: Create + input: + name: CreateManagedGatewayEthernetProfileRequest + output: + name: ManagedGatewayEthernetProfile + http: + - method: "" + path: "" + - method: POST + path: /gcs/gateways/profiles/ethernet/organizations/{collaborator.organization_ids.organization_id} + - method: POST + path: /gcs/gateways/profiles/ethernet/users/{collaborator.user_ids.user_id} + Update: + name: Update + input: + name: UpdateManagedGatewayEthernetProfileRequest + output: + name: ManagedGatewayEthernetProfile + http: + - method: "" + path: "" + - method: PUT + path: /gcs/gateways/profiles/ethernet/organizations/{collaborator.organization_ids.organization_id}/{profile.profile_id} + - method: PUT + path: /gcs/gateways/profiles/ethernet/users/{collaborator.user_ids.user_id}/{profile.profile_id} + List: + name: List + input: + name: ListManagedGatewayEthernetProfilesRequest + output: + name: ManagedGatewayEthernetProfiles + http: + - method: "" + path: "" + - method: GET + path: /gcs/gateways/profiles/ethernet/organizations/{collaborator.organization_ids.organization_id} + - method: GET + path: /gcs/gateways/profiles/ethernet/users/{collaborator.user_ids.user_id} + Get: + name: Get + input: + name: GetManagedGatewayEthernetProfileRequest + output: + name: ManagedGatewayEthernetProfile + http: + - method: "" + path: "" + - method: GET + path: /gcs/gateways/profiles/ethernet/organizations/{collaborator.organization_ids.organization_id}/{profile_id} + - method: GET + path: /gcs/gateways/profiles/ethernet/users/{collaborator.user_ids.user_id}/{profile_id} + Delete: + name: Delete + input: + name: DeleteManagedGatewayEthernetProfileRequest + output: + package: google.protobuf + name: Empty + http: + - method: "" + path: "" + - method: DELETE + path: /gcs/gateways/profiles/ethernet/organizations/{collaborator.organization_ids.organization_id}/{profile_id} + - method: DELETE + path: /gcs/gateways/profiles/ethernet/users/{collaborator.user_ids.user_id}/{profile_id} diff --git a/doc/data/api/ttn.lorawan.v3/services/ManagedGatewayWiFiProfileConfigurationService.yml b/doc/data/api/ttn.lorawan.v3/services/ManagedGatewayWiFiProfileConfigurationService.yml new file mode 100644 index 0000000000..b99379b899 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/services/ManagedGatewayWiFiProfileConfigurationService.yml @@ -0,0 +1,68 @@ +name: ManagedGatewayWiFiProfileConfigurationService +methods: + Create: + name: Create + input: + name: CreateManagedGatewayWiFiProfileRequest + output: + name: ManagedGatewayWiFiProfile + http: + - method: "" + path: "" + - method: POST + path: /gcs/gateways/profiles/wifi/organizations/{collaborator.organization_ids.organization_id} + - method: POST + path: /gcs/gateways/profiles/wifi/users/{collaborator.user_ids.user_id} + Update: + name: Update + input: + name: UpdateManagedGatewayWiFiProfileRequest + output: + name: ManagedGatewayWiFiProfile + http: + - method: "" + path: "" + - method: PUT + path: /gcs/gateways/profiles/wifi/organizations/{collaborator.organization_ids.organization_id}/{profile.profile_id} + - method: PUT + path: /gcs/gateways/profiles/wifi/users/{collaborator.user_ids.user_id}/{profile.profile_id} + List: + name: List + input: + name: ListManagedGatewayWiFiProfilesRequest + output: + name: ManagedGatewayWiFiProfiles + http: + - method: "" + path: "" + - method: GET + path: /gcs/gateways/profiles/wifi/organizations/{collaborator.organization_ids.organization_id} + - method: GET + path: /gcs/gateways/profiles/wifi/users/{collaborator.user_ids.user_id} + Get: + name: Get + input: + name: GetManagedGatewayWiFiProfileRequest + output: + name: ManagedGatewayWiFiProfile + http: + - method: "" + path: "" + - method: GET + path: /gcs/gateways/profiles/wifi/organizations/{collaborator.organization_ids.organization_id}/{profile_id} + - method: GET + path: /gcs/gateways/profiles/wifi/users/{collaborator.user_ids.user_id}/{profile_id} + Delete: + name: Delete + input: + name: DeleteManagedGatewayWiFiProfileRequest + output: + package: google.protobuf + name: Empty + http: + - method: "" + path: "" + - method: DELETE + path: /gcs/gateways/profiles/wifi/organizations/{collaborator.organization_ids.organization_id}/{profile_id} + - method: DELETE + path: /gcs/gateways/profiles/wifi/users/{collaborator.user_ids.user_id}/{profile_id} diff --git a/doc/data/api/tts.swagger.json b/doc/data/api/tts.swagger.json index 00e494a5fd..314fb8e340 100644 --- a/doc/data/api/tts.swagger.json +++ b/doc/data/api/tts.swagger.json @@ -8,7 +8,7 @@ "swagger": "2.0", "info": { "title": "The Things Stack for LoRaWAN® OpenAPI 2.0 Reference", - "version": "v3.30.2" + "version": "v3.32.0" }, "paths": { "/alerts/notifications/profiles": { @@ -166257,7 +166257,54 @@ "format": "date-time" }, "last_failed_attempt_details": { - "$ref": "#/definitions/v3ErrorDetails" + "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", + "type": "object", + "properties": { + "attributes": { + "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", + "type": "object" + }, + "cause": { + "description": "The error that caused this error.", + "$ref": "#/definitions/v3ErrorDetails" + }, + "code": { + "description": "The status code of the error.", + "type": "integer", + "format": "int64" + }, + "correlation_id": { + "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", + "type": "string" + }, + "details": { + "description": "The details of the error.", + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message_format": { + "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", + "type": "string" + }, + "name": { + "description": "Name of the error.", + "type": "string" + }, + "namespace": { + "description": "Namespace of the error (typically the package name in The Things Stack).", + "type": "string" + } + } } } } @@ -166715,7 +166762,54 @@ "format": "date-time" }, "last_failed_attempt_details": { - "$ref": "#/definitions/v3ErrorDetails" + "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", + "type": "object", + "properties": { + "attributes": { + "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", + "type": "object" + }, + "cause": { + "description": "The error that caused this error.", + "$ref": "#/definitions/v3ErrorDetails" + }, + "code": { + "description": "The status code of the error.", + "type": "integer", + "format": "int64" + }, + "correlation_id": { + "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", + "type": "string" + }, + "details": { + "description": "The details of the error.", + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message_format": { + "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", + "type": "string" + }, + "name": { + "description": "Name of the error.", + "type": "string" + }, + "namespace": { + "description": "Namespace of the error (typically the package name in The Things Stack).", + "type": "string" + } + } } } } @@ -227153,54 +227247,7 @@ "description": "End devices that could not be unclaimed.\nThe key is the device ID.", "type": "object", "additionalProperties": { - "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", - "type": "object", - "properties": { - "attributes": { - "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", - "type": "object" - }, - "cause": { - "description": "The error that caused this error.", - "$ref": "#/definitions/v3ErrorDetails" - }, - "code": { - "description": "The status code of the error.", - "type": "integer", - "format": "int64" - }, - "correlation_id": { - "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", - "type": "string" - }, - "details": { - "description": "The details of the error.", - "type": "array", - "items": { - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", - "type": "object", - "properties": { - "@type": { - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", - "type": "string" - } - }, - "additionalProperties": {} - } - }, - "message_format": { - "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", - "type": "string" - }, - "name": { - "description": "Name of the error.", - "type": "string" - }, - "namespace": { - "description": "Namespace of the error (typically the package name in The Things Stack).", - "type": "string" - } - } + "$ref": "#/definitions/v3ErrorDetails" } } } @@ -241208,6 +241255,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -241813,6 +241863,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -242193,6 +242246,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -242631,6 +242687,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -245046,6 +245105,7 @@ } }, "cups_redirection": { + "description": "DEPRECATED: This message is deprecated and will be removed in a future version of The Things Stack.", "type": "object", "properties": { "auth_token": { @@ -245194,6 +245254,10 @@ "format": "string", "example": "70B3D57ED000ABCD" }, + "is_managed": { + "description": "Indicates whether the gateway is a managed gateway.\nIf true, when the gateway is successfully claimed, it can be managed with ManagedGatewayConfigurationService.", + "type": "boolean" + }, "supports_claiming": { "type": "boolean" } @@ -245232,43 +245296,27 @@ } } }, - "/gcls/gateways/{gateway_ids.gateway_id}/authorize": { - "post": { + "/gcls/claim/{gateway_id}": { + "delete": { + "description": "EUI provided in the request are ignored and the end device is looked up by the gateway ID.", "tags": [ "GatewayClaimingServer" ], - "summary": "AuthorizeGateway allows a gateway to be claimed.", - "operationId": "GatewayClaimingServer_AuthorizeGateway", + "summary": "Unclaims the gateway.", + "operationId": "GatewayClaimingServer_Unclaim", "parameters": [ { "type": "string", - "name": "gateway_ids.gateway_id", + "name": "gateway_id", "in": "path", "required": true }, { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "api_key": { - "type": "string" - }, - "gateway_ids": { - "type": "object", - "properties": { - "eui": { - "description": "Secondary identifier, which can only be used in specific requests.", - "type": "string", - "format": "string", - "example": "70B3D57ED000ABCD" - } - } - } - } - } + "type": "string", + "format": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "eui", + "in": "query" } ], "responses": { @@ -245310,116 +245358,51 @@ } } }, - "/gcls/gateways/{gateway_id}/authorize": { - "delete": { + "/gcls/gateways/{gateway_ids.gateway_id}/authorize": { + "post": { + "description": "DEPRECATED: Authorizing gateways for claiming is no longer supported and will be removed in a future version of The\nThings Stack.", "tags": [ "GatewayClaimingServer" ], - "summary": "UnauthorizeGateway prevents a gateway from being claimed.", - "operationId": "GatewayClaimingServer_UnauthorizeGateway", + "summary": "AuthorizeGateway allows a gateway to be claimed.", + "operationId": "GatewayClaimingServer_AuthorizeGateway", "parameters": [ { "type": "string", - "name": "gateway_id", + "name": "gateway_ids.gateway_id", "in": "path", "required": true }, { - "type": "string", - "format": "string", - "description": "Secondary identifier, which can only be used in specific requests.", - "name": "eui", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object" - } - }, - "default": { - "description": "An unexpected error response.", + "name": "body", + "in": "body", + "required": true, "schema": { "type": "object", "properties": { - "code": { - "type": "integer", - "format": "int32" + "api_key": { + "type": "string" }, - "details": { - "type": "array", - "items": { - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", - "type": "object", - "properties": { - "@type": { - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", - "type": "string" - } - }, - "additionalProperties": {} + "gateway_ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } } - }, - "message": { - "type": "string" } } } } - } - } - }, - "/gcs/gateways/configuration/{gateway_ids.gateway_id}/{format}/{filename}": { - "get": { - "tags": [ - "GatewayConfigurationService" - ], - "operationId": "GatewayConfigurationService_GetGatewayConfiguration", - "parameters": [ - { - "type": "string", - "name": "gateway_ids.gateway_id", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "format", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "filename", - "in": "path", - "required": true - }, - { - "type": "string", - "format": "string", - "description": "Secondary identifier, which can only be used in specific requests.", - "name": "gateway_ids.eui", - "in": "query" - }, - { - "type": "string", - "name": "type", - "in": "query" - } ], "responses": { "200": { "description": "A successful response.", "schema": { - "type": "object", - "properties": { - "contents": { - "type": "string", - "format": "byte" - } - } + "type": "object" } }, "default": { @@ -245454,34 +245437,18 @@ } } }, - "/gcs/gateways/configuration/{gateway_ids.gateway_id}/{format}/{type}/{filename}": { - "get": { + "/gcls/gateways/{gateway_id}/authorize": { + "delete": { + "description": "DEPRECATED: Unauthorizing (locking) gateways for claiming is no longer supported and will be removed in a future\nversion of The Things Stack.", "tags": [ - "GatewayConfigurationService" + "GatewayClaimingServer" ], - "operationId": "GatewayConfigurationService_GetGatewayConfiguration2", + "summary": "UnauthorizeGateway prevents a gateway from being claimed.", + "operationId": "GatewayClaimingServer_UnauthorizeGateway", "parameters": [ { "type": "string", - "name": "gateway_ids.gateway_id", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "format", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "type", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "filename", + "name": "gateway_id", "in": "path", "required": true }, @@ -245489,7 +245456,7 @@ "type": "string", "format": "string", "description": "Secondary identifier, which can only be used in specific requests.", - "name": "gateway_ids.eui", + "name": "eui", "in": "query" } ], @@ -245497,13 +245464,3977 @@ "200": { "description": "A successful response.", "schema": { - "type": "object", - "properties": { - "contents": { - "type": "string", - "format": "byte" - } - } + "type": "object" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/configuration/{gateway_ids.gateway_id}/{format}/{filename}": { + "get": { + "tags": [ + "GatewayConfigurationService" + ], + "operationId": "GatewayConfigurationService_GetGatewayConfiguration", + "parameters": [ + { + "type": "string", + "name": "gateway_ids.gateway_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "format", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "filename", + "in": "path", + "required": true + }, + { + "type": "string", + "format": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "gateway_ids.eui", + "in": "query" + }, + { + "type": "string", + "name": "type", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "contents": { + "type": "string", + "format": "byte" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/configuration/{gateway_ids.gateway_id}/{format}/{type}/{filename}": { + "get": { + "tags": [ + "GatewayConfigurationService" + ], + "operationId": "GatewayConfigurationService_GetGatewayConfiguration2", + "parameters": [ + { + "type": "string", + "name": "gateway_ids.gateway_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "format", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "type", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "filename", + "in": "path", + "required": true + }, + { + "type": "string", + "format": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "gateway_ids.eui", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "contents": { + "type": "string", + "format": "byte" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/managed/{gateway.ids.gateway_id}": { + "put": { + "tags": [ + "ManagedGatewayConfigurationService" + ], + "operationId": "ManagedGatewayConfigurationService_Update", + "parameters": [ + { + "type": "string", + "name": "gateway.ids.gateway_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "field_mask": { + "description": "The names of the gateway fields that should be updated.", + "type": "string" + }, + "gateway": { + "type": "object", + "properties": { + "cellular_imei": { + "type": "string" + }, + "cellular_imsi": { + "type": "string" + }, + "ethernet_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "ethernet_profile_id": { + "type": "string" + }, + "ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + }, + "version_ids": { + "description": "Identifies an end device model with version information.", + "type": "object", + "properties": { + "brand_id": { + "type": "string" + }, + "firmware_version": { + "type": "string" + }, + "hardware_version": { + "type": "string" + }, + "model_id": { + "type": "string" + }, + "runtime_version": { + "type": "string" + } + } + }, + "wifi_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "wifi_profile_id": { + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "cellular_imei": { + "type": "string" + }, + "cellular_imsi": { + "type": "string" + }, + "ethernet_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "ethernet_profile_id": { + "type": "string" + }, + "ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "version_ids": { + "description": "Identifies an end device model with version information.", + "type": "object", + "properties": { + "brand_id": { + "type": "string" + }, + "firmware_version": { + "type": "string" + }, + "hardware_version": { + "type": "string" + }, + "model_id": { + "type": "string" + }, + "runtime_version": { + "type": "string" + } + } + }, + "wifi_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "wifi_profile_id": { + "type": "string" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/managed/{gateway_ids.gateway_id}": { + "get": { + "tags": [ + "ManagedGatewayConfigurationService" + ], + "operationId": "ManagedGatewayConfigurationService_Get", + "parameters": [ + { + "type": "string", + "name": "gateway_ids.gateway_id", + "in": "path", + "required": true + }, + { + "type": "string", + "format": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "gateway_ids.eui", + "in": "query" + }, + { + "type": "string", + "description": "The names of the gateway fields that should be returned.", + "name": "field_mask", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "cellular_imei": { + "type": "string" + }, + "cellular_imsi": { + "type": "string" + }, + "ethernet_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "ethernet_profile_id": { + "type": "string" + }, + "ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "version_ids": { + "description": "Identifies an end device model with version information.", + "type": "object", + "properties": { + "brand_id": { + "type": "string" + }, + "firmware_version": { + "type": "string" + }, + "hardware_version": { + "type": "string" + }, + "model_id": { + "type": "string" + }, + "runtime_version": { + "type": "string" + } + } + }, + "wifi_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "wifi_profile_id": { + "type": "string" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/managed/{gateway_id}/events": { + "post": { + "tags": [ + "ManagedGatewayConfigurationService" + ], + "operationId": "ManagedGatewayConfigurationService_StreamEvents", + "parameters": [ + { + "type": "string", + "name": "gateway_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "title": "Stream result of v3ManagedGatewayEventData", + "properties": { + "error": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + }, + "result": { + "type": "object", + "properties": { + "cellular_backhaul": { + "type": "object", + "properties": { + "network_interface": { + "type": "object", + "properties": { + "addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "dhcp_enabled": { + "type": "boolean" + }, + "status": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED" + ] + } + } + }, + "operator": { + "type": "string" + }, + "rssi": { + "type": "number", + "format": "float" + } + } + }, + "controller_connection": { + "type": "object", + "properties": { + "network_interface_type": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_CELLULAR", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_WIFI", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_ETHERNET" + ] + } + } + }, + "entity": { + "type": "object", + "properties": { + "cellular_imei": { + "type": "string" + }, + "cellular_imsi": { + "type": "string" + }, + "ethernet_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "ethernet_profile_id": { + "type": "string" + }, + "ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "version_ids": { + "description": "Identifies an end device model with version information.", + "type": "object", + "properties": { + "brand_id": { + "type": "string" + }, + "firmware_version": { + "type": "string" + }, + "hardware_version": { + "type": "string" + }, + "model_id": { + "type": "string" + }, + "runtime_version": { + "type": "string" + } + } + }, + "wifi_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "wifi_profile_id": { + "type": "string" + } + } + }, + "ethernet_backhaul": { + "type": "object", + "properties": { + "network_interface": { + "type": "object", + "properties": { + "addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "dhcp_enabled": { + "type": "boolean" + }, + "status": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED" + ] + } + } + } + } + }, + "gateway_server_connection": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "network_interface_type": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_CELLULAR", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_WIFI", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_ETHERNET" + ] + } + } + }, + "location": { + "type": "object", + "properties": { + "accuracy": { + "description": "The accuracy of the location (meters).", + "type": "integer", + "format": "int32" + }, + "altitude": { + "description": "The altitude (meters), where 0 is the mean sea level.", + "type": "integer", + "format": "int32" + }, + "latitude": { + "description": "The North–South position (degrees; -90 to +90), where 0 is the equator, North pole is positive, South pole is negative.", + "type": "number", + "format": "double" + }, + "longitude": { + "description": "The East-West position (degrees; -180 to +180), where 0 is the Prime Meridian (Greenwich), East is positive , West is negative.", + "type": "number", + "format": "double" + }, + "source": { + "description": " - SOURCE_UNKNOWN: The source of the location is not known or not set.\n - SOURCE_GPS: The location is determined by GPS.\n - SOURCE_REGISTRY: The location is set in and updated from a registry.\n - SOURCE_IP_GEOLOCATION: The location is estimated with IP geolocation.\n - SOURCE_WIFI_RSSI_GEOLOCATION: The location is estimated with WiFi RSSI geolocation.\n - SOURCE_BT_RSSI_GEOLOCATION: The location is estimated with BT/BLE RSSI geolocation.\n - SOURCE_LORA_RSSI_GEOLOCATION: The location is estimated with LoRa RSSI geolocation.\n - SOURCE_LORA_TDOA_GEOLOCATION: The location is estimated with LoRa TDOA geolocation.\n - SOURCE_COMBINED_GEOLOCATION: The location is estimated by a combination of geolocation sources.\n\nMore estimation methods can be added.", + "type": "string", + "default": "SOURCE_UNKNOWN", + "enum": [ + "SOURCE_UNKNOWN", + "SOURCE_GPS", + "SOURCE_REGISTRY", + "SOURCE_IP_GEOLOCATION", + "SOURCE_WIFI_RSSI_GEOLOCATION", + "SOURCE_BT_RSSI_GEOLOCATION", + "SOURCE_LORA_RSSI_GEOLOCATION", + "SOURCE_LORA_TDOA_GEOLOCATION", + "SOURCE_COMBINED_GEOLOCATION" + ] + } + } + }, + "system_status": { + "type": "object", + "properties": { + "cpu_temperature": { + "description": "CPU temperature (Celsius).", + "type": "number", + "format": "float" + } + } + }, + "wifi_backhaul": { + "type": "object", + "properties": { + "authentication_mode": { + "type": "string" + }, + "bssid": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "channel": { + "type": "integer", + "format": "int64" + }, + "network_interface": { + "type": "object", + "properties": { + "addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "dhcp_enabled": { + "type": "boolean" + }, + "status": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED" + ] + } + } + }, + "rssi": { + "type": "number", + "format": "float" + }, + "ssid": { + "type": "string" + } + } + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/managed/{gateway_id}/wifi/scan": { + "post": { + "tags": [ + "ManagedGatewayConfigurationService" + ], + "operationId": "ManagedGatewayConfigurationService_ScanWiFiAccessPoints", + "parameters": [ + { + "type": "string", + "name": "gateway_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "access_points": { + "type": "array", + "items": { + "type": "object", + "properties": { + "authentication_mode": { + "type": "string" + }, + "bssid": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "channel": { + "type": "integer", + "format": "int64" + }, + "rssi": { + "type": "number", + "format": "float" + }, + "ssid": { + "type": "string" + } + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/ethernet/organizations/{collaborator.organization_ids.organization_id}": { + "get": { + "tags": [ + "ManagedGatewayEthernetProfileConfigurationService" + ], + "operationId": "ManagedGatewayEthernetProfileConfigurationService_List", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + }, + { + "type": "string", + "description": "The names of the gateway fields that should be returned.", + "name": "field_mask", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "Limit the number of results per page.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "Page number for pagination. 0 is interpreted as 1.", + "name": "page", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "profiles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + }, + "post": { + "tags": [ + "ManagedGatewayEthernetProfileConfigurationService" + ], + "operationId": "ManagedGatewayEthernetProfileConfigurationService_Create", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/ethernet/organizations/{collaborator.organization_ids.organization_id}/{profile.profile_id}": { + "put": { + "tags": [ + "ManagedGatewayEthernetProfileConfigurationService" + ], + "operationId": "ManagedGatewayEthernetProfileConfigurationService_Update", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile.profile_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "field_mask": { + "description": "The names of the gateway fields that should be updated.", + "type": "string" + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/ethernet/organizations/{collaborator.organization_ids.organization_id}/{profile_id}": { + "get": { + "tags": [ + "ManagedGatewayEthernetProfileConfigurationService" + ], + "operationId": "ManagedGatewayEthernetProfileConfigurationService_Get", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + }, + { + "type": "string", + "description": "The names of the gateway fields that should be returned.", + "name": "field_mask", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + }, + "delete": { + "tags": [ + "ManagedGatewayEthernetProfileConfigurationService" + ], + "operationId": "ManagedGatewayEthernetProfileConfigurationService_Delete", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/ethernet/users/{collaborator.user_ids.user_id}": { + "get": { + "tags": [ + "ManagedGatewayEthernetProfileConfigurationService" + ], + "operationId": "ManagedGatewayEthernetProfileConfigurationService_List2", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + }, + { + "type": "string", + "description": "The names of the gateway fields that should be returned.", + "name": "field_mask", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "Limit the number of results per page.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "Page number for pagination. 0 is interpreted as 1.", + "name": "page", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "profiles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + }, + "post": { + "tags": [ + "ManagedGatewayEthernetProfileConfigurationService" + ], + "operationId": "ManagedGatewayEthernetProfileConfigurationService_Create2", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/ethernet/users/{collaborator.user_ids.user_id}/{profile.profile_id}": { + "put": { + "tags": [ + "ManagedGatewayEthernetProfileConfigurationService" + ], + "operationId": "ManagedGatewayEthernetProfileConfigurationService_Update2", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile.profile_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "field_mask": { + "description": "The names of the gateway fields that should be updated.", + "type": "string" + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/ethernet/users/{collaborator.user_ids.user_id}/{profile_id}": { + "get": { + "tags": [ + "ManagedGatewayEthernetProfileConfigurationService" + ], + "operationId": "ManagedGatewayEthernetProfileConfigurationService_Get2", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + }, + { + "type": "string", + "description": "The names of the gateway fields that should be returned.", + "name": "field_mask", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + }, + "delete": { + "tags": [ + "ManagedGatewayEthernetProfileConfigurationService" + ], + "operationId": "ManagedGatewayEthernetProfileConfigurationService_Delete2", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/wifi/organizations/{collaborator.organization_ids.organization_id}": { + "get": { + "tags": [ + "ManagedGatewayWiFiProfileConfigurationService" + ], + "operationId": "ManagedGatewayWiFiProfileConfigurationService_List", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + }, + { + "type": "string", + "description": "The names of the gateway fields that should be returned.", + "name": "field_mask", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "Limit the number of results per page.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "Page number for pagination. 0 is interpreted as 1.", + "name": "page", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "profiles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + }, + "post": { + "tags": [ + "ManagedGatewayWiFiProfileConfigurationService" + ], + "operationId": "ManagedGatewayWiFiProfileConfigurationService_Create", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/wifi/organizations/{collaborator.organization_ids.organization_id}/{profile.profile_id}": { + "put": { + "tags": [ + "ManagedGatewayWiFiProfileConfigurationService" + ], + "operationId": "ManagedGatewayWiFiProfileConfigurationService_Update", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile.profile_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "field_mask": { + "description": "The names of the gateway fields that should be updated.", + "type": "string" + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/wifi/organizations/{collaborator.organization_ids.organization_id}/{profile_id}": { + "get": { + "tags": [ + "ManagedGatewayWiFiProfileConfigurationService" + ], + "operationId": "ManagedGatewayWiFiProfileConfigurationService_Get", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + }, + { + "type": "string", + "description": "The names of the gateway fields that should be returned.", + "name": "field_mask", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + }, + "delete": { + "tags": [ + "ManagedGatewayWiFiProfileConfigurationService" + ], + "operationId": "ManagedGatewayWiFiProfileConfigurationService_Delete", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/wifi/users/{collaborator.user_ids.user_id}": { + "get": { + "tags": [ + "ManagedGatewayWiFiProfileConfigurationService" + ], + "operationId": "ManagedGatewayWiFiProfileConfigurationService_List2", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + }, + { + "type": "string", + "description": "The names of the gateway fields that should be returned.", + "name": "field_mask", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "Limit the number of results per page.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "Page number for pagination. 0 is interpreted as 1.", + "name": "page", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "profiles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + }, + "post": { + "tags": [ + "ManagedGatewayWiFiProfileConfigurationService" + ], + "operationId": "ManagedGatewayWiFiProfileConfigurationService_Create2", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/wifi/users/{collaborator.user_ids.user_id}/{profile.profile_id}": { + "put": { + "tags": [ + "ManagedGatewayWiFiProfileConfigurationService" + ], + "operationId": "ManagedGatewayWiFiProfileConfigurationService_Update2", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile.profile_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "field_mask": { + "description": "The names of the gateway fields that should be updated.", + "type": "string" + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/gcs/gateways/profiles/wifi/users/{collaborator.user_ids.user_id}/{profile_id}": { + "get": { + "tags": [ + "ManagedGatewayWiFiProfileConfigurationService" + ], + "operationId": "ManagedGatewayWiFiProfileConfigurationService_Get2", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + }, + { + "type": "string", + "description": "The names of the gateway fields that should be returned.", + "name": "field_mask", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + }, + "delete": { + "tags": [ + "ManagedGatewayWiFiProfileConfigurationService" + ], + "operationId": "ManagedGatewayWiFiProfileConfigurationService_Delete2", + "parameters": [ + { + "type": "string", + "description": "This ID shares namespace with organization IDs.", + "name": "collaborator.user_ids.user_id", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "profile_id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "This ID shares namespace with user IDs.", + "name": "collaborator.organization_ids.organization_id", + "in": "query" + }, + { + "type": "string", + "description": "Secondary identifier, which can only be used in specific requests.", + "name": "collaborator.user_ids.email", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object" } }, "default": { @@ -246584,6 +250515,19 @@ } } }, + "tenant_registration": { + "type": "object", + "properties": { + "contact_info_validation": { + "type": "object", + "properties": { + "token_ttl": { + "type": "string" + } + } + } + } + }, "user_limits": { "type": "object", "properties": { @@ -321393,12 +325337,341 @@ } } }, - "/noc/application/{application_ids.application_id}/end_devices/active-metrics": { + "/noc/application/{application_ids.application_id}/end_devices/active-metrics": { + "post": { + "tags": [ + "Noc" + ], + "operationId": "Noc_QueryApplicationEndDevicesActiveMetrics", + "parameters": [ + { + "type": "string", + "name": "application_ids.application_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "Request for application data in a specific time window.", + "type": "object", + "properties": { + "application_ids": { + "type": "object" + }, + "time_window": { + "description": "Request for data in a specific time window.", + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "description": "Identifiers of active end devices.", + "type": "object", + "properties": { + "end_device_ids": { + "type": "array", + "items": { + "type": "object", + "properties": { + "application_ids": { + "type": "object", + "properties": { + "application_id": { + "type": "string" + } + } + }, + "dev_addr": { + "description": "The LoRaWAN DevAddr.", + "type": "string", + "format": "string", + "example": "2600ABCD" + }, + "dev_eui": { + "description": "The LoRaWAN DevEUI.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "device_id": { + "type": "string" + }, + "join_eui": { + "description": "The LoRaWAN JoinEUI (AppEUI until LoRaWAN 1.0.3 end devices).", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/noc/application/{application_ids.application_id}/events/forward": { + "post": { + "tags": [ + "Noc" + ], + "operationId": "Noc_QueryApplicationEventForwardCount", + "parameters": [ + { + "type": "string", + "name": "application_ids.application_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "Request for end device data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "application_ids": { + "type": "object" + }, + "time_bucket": { + "description": "Request for data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "bucket_interval": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "event_forward_count": { + "type": "array", + "items": { + "type": "object", + "properties": { + "count": { + "description": "Application Server forwarded events count per event name.", + "type": "object", + "additionalProperties": { + "type": "string", + "format": "uint64" + } + }, + "time": { + "type": "string", + "format": "date-time" + } + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/noc/application/{application_ids.application_id}/events/webhook/failure": { + "post": { + "tags": [ + "Noc" + ], + "operationId": "Noc_QueryApplicationWebhookFailure", + "parameters": [ + { + "type": "string", + "name": "application_ids.application_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "Request for end device data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "application_ids": { + "type": "object" + }, + "time_bucket": { + "description": "Request for data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "bucket_interval": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "webhook_failure": { + "type": "array", + "items": { + "type": "object", + "properties": { + "time": { + "type": "string", + "format": "date-time" + }, + "total": { + "type": "string", + "format": "uint64" + } + } + } + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/noc/application/{application_ids.application_id}/events/webhook/failure/ratio": { "post": { "tags": [ "Noc" ], - "operationId": "Noc_QueryApplicationEndDevicesActiveMetrics", + "operationId": "Noc_QueryApplicationWebhookFailureToForwardRatio", "parameters": [ { "type": "string", @@ -321439,42 +325712,113 @@ "200": { "description": "A successful response.", "schema": { - "description": "Identifiers of active end devices.", "type": "object", "properties": { - "end_device_ids": { + "webhook_failure_to_forward_ratio": { + "type": "number", + "format": "float" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { "type": "array", "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", "type": "object", "properties": { - "application_ids": { - "type": "object", - "properties": { - "application_id": { - "type": "string" - } - } - }, - "dev_addr": { - "description": "The LoRaWAN DevAddr.", - "type": "string", - "format": "string", - "example": "2600ABCD" - }, - "dev_eui": { - "description": "The LoRaWAN DevEUI.", - "type": "string", - "format": "string", - "example": "70B3D57ED000ABCD" - }, - "device_id": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", "type": "string" - }, - "join_eui": { - "description": "The LoRaWAN JoinEUI (AppEUI until LoRaWAN 1.0.3 end devices).", + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, + "/noc/application/{application_ids.application_id}/events/webhook/failure/top-five": { + "post": { + "tags": [ + "Noc" + ], + "operationId": "Noc_QueryApplicationWebhookFailureTopFive", + "parameters": [ + { + "type": "string", + "name": "application_ids.application_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "Request for end device data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "application_ids": { + "type": "object" + }, + "time_bucket": { + "description": "Request for data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "bucket_interval": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": { + "counts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "time": { "type": "string", - "format": "string", - "example": "70B3D57ED000ABCD" + "format": "date-time" + }, + "totals": { + "type": "object", + "additionalProperties": { + "type": "string", + "format": "uint64" + } } } } @@ -405247,6 +409591,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -405700,6 +410047,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -406080,6 +410430,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -462354,6 +466707,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -462862,6 +467218,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -463149,6 +467520,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -464193,6 +468579,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -464480,6 +468881,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -465318,6 +469734,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -465605,6 +470036,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -466089,6 +470535,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -466376,6 +470837,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -467031,6 +471507,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -467318,6 +471809,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -467797,6 +472303,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -468084,6 +472605,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -468616,6 +473152,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -468903,6 +473454,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -469394,6 +473960,72 @@ } } }, + "/tenants/{tenant_ids.tenant_id}/resend-admin-validation": { + "post": { + "tags": [ + "TenantAccess" + ], + "operationId": "TenantAccess_ResendAdminValidation", + "parameters": [ + { + "type": "string", + "name": "tenant_ids.tenant_id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "tenant_ids": { + "type": "object" + } + } + } + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "details": { + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message": { + "type": "string" + } + } + } + } + } + } + }, "/tenants/{tenant_id}": { "delete": { "tags": [ @@ -472629,6 +477261,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -473082,6 +477717,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -473462,6 +478100,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -483585,6 +488226,21 @@ } } }, + "ClusterGatewayServer": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "ClusterIdentityServer": { "type": "object", "properties": { @@ -484171,6 +488827,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -485167,6 +489838,16 @@ } } }, + "GatewayServerMTLSAuthentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + }, "GenerateEndDeviceQRCodeRequestImage": { "type": "object", "properties": { @@ -485290,6 +489971,27 @@ } } }, + "IsConfigurationTenantRegistration": { + "type": "object", + "properties": { + "contact_info_validation": { + "type": "object", + "properties": { + "token_ttl": { + "type": "string" + } + } + } + } + }, + "IsConfigurationTenantRegistrationContactInfoValidation": { + "type": "object", + "properties": { + "token_ttl": { + "type": "string" + } + } + }, "JsEndDeviceRegistryProvisionBody": { "type": "object", "properties": { @@ -487575,6 +492277,28 @@ "EXACTLY_ONCE" ] }, + "ManagedGatewayConfigurationServiceScanWiFiAccessPointsBody": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + }, + "ManagedGatewayConfigurationServiceStreamEventsBody": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + }, "MeteringDataTenantMeteringData": { "type": "object", "properties": { @@ -487748,6 +492472,32 @@ } } }, + "NocQueryApplicationEventForwardCountBody": { + "description": "Request for end device data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "application_ids": { + "type": "object" + }, + "time_bucket": { + "description": "Request for data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "bucket_interval": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + }, "NocQueryApplicationGatewaysSeenBody": { "description": "Request for application data in a specific time window.", "type": "object", @@ -487794,6 +492544,81 @@ } } }, + "NocQueryApplicationWebhookFailureBody": { + "description": "Request for end device data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "application_ids": { + "type": "object" + }, + "time_bucket": { + "description": "Request for data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "bucket_interval": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "NocQueryApplicationWebhookFailureToForwardRatioBody": { + "description": "Request for application data in a specific time window.", + "type": "object", + "properties": { + "application_ids": { + "type": "object" + }, + "time_window": { + "description": "Request for data in a specific time window.", + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "NocQueryApplicationWebhookFailureTopFiveBody": { + "description": "Request for end device data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "application_ids": { + "type": "object" + }, + "time_bucket": { + "description": "Request for data using aggregates by time buckets with a specified interval.", + "type": "object", + "properties": { + "bucket_interval": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + }, "NocQueryEndDeviceChannelsLoRaPerformanceBody": { "description": "Request for end device data using aggregates by time buckets with a specified interval.", "type": "object", @@ -489575,6 +494400,14 @@ } } }, + "TenantAccessResendAdminValidationBody": { + "type": "object", + "properties": { + "tenant_ids": { + "type": "object" + } + } + }, "TrafficRatesTimeBucketsDirection": { "type": "object", "properties": { @@ -489839,6 +494672,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -490126,6 +494974,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -495572,6 +500435,48 @@ } } }, + "v3ApplicationEventForwardCount": { + "type": "object", + "properties": { + "count": { + "description": "Application Server forwarded events count per event name.", + "type": "object", + "additionalProperties": { + "type": "string", + "format": "uint64" + } + }, + "time": { + "type": "string", + "format": "date-time" + } + } + }, + "v3ApplicationEventsForwardCount": { + "type": "object", + "properties": { + "event_forward_count": { + "type": "array", + "items": { + "type": "object", + "properties": { + "count": { + "description": "Application Server forwarded events count per event name.", + "type": "object", + "additionalProperties": { + "type": "string", + "format": "uint64" + } + }, + "time": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, "v3ApplicationGatewaysSeen": { "type": "object", "properties": { @@ -500857,6 +505762,89 @@ } } }, + "v3ApplicationWebhookFailureByStatusCodeCount": { + "type": "object", + "properties": { + "time": { + "type": "string", + "format": "date-time" + }, + "totals": { + "type": "object", + "additionalProperties": { + "type": "string", + "format": "uint64" + } + } + } + }, + "v3ApplicationWebhookFailureCount": { + "type": "object", + "properties": { + "time": { + "type": "string", + "format": "date-time" + }, + "total": { + "type": "string", + "format": "uint64" + } + } + }, + "v3ApplicationWebhookFailureToForwardRatio": { + "type": "object", + "properties": { + "webhook_failure_to_forward_ratio": { + "type": "number", + "format": "float" + } + } + }, + "v3ApplicationWebhookFailuresByStatusCodeCount": { + "type": "object", + "properties": { + "counts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "time": { + "type": "string", + "format": "date-time" + }, + "totals": { + "type": "object", + "additionalProperties": { + "type": "string", + "format": "uint64" + } + } + } + } + } + } + }, + "v3ApplicationWebhookFailuresCount": { + "type": "object", + "properties": { + "webhook_failure": { + "type": "array", + "items": { + "type": "object", + "properties": { + "time": { + "type": "string", + "format": "date-time" + }, + "total": { + "type": "string", + "format": "uint64" + } + } + } + } + } + }, "v3ApplicationWebhookFormats": { "type": "object", "properties": { @@ -501033,7 +506021,54 @@ "format": "date-time" }, "last_failed_attempt_details": { - "$ref": "#/definitions/v3ErrorDetails" + "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", + "type": "object", + "properties": { + "attributes": { + "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", + "type": "object" + }, + "cause": { + "description": "The error that caused this error.", + "$ref": "#/definitions/v3ErrorDetails" + }, + "code": { + "description": "The status code of the error.", + "type": "integer", + "format": "int64" + }, + "correlation_id": { + "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", + "type": "string" + }, + "details": { + "description": "The details of the error.", + "type": "array", + "items": { + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", + "type": "object", + "properties": { + "@type": { + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", + "type": "string" + } + }, + "additionalProperties": {} + } + }, + "message_format": { + "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", + "type": "string" + }, + "name": { + "description": "Name of the error.", + "type": "string" + }, + "namespace": { + "description": "Namespace of the error (typically the package name in The Things Stack).", + "type": "string" + } + } } } } @@ -516128,54 +521163,7 @@ "description": "End devices that could not be unclaimed.\nThe key is the device ID.", "type": "object", "additionalProperties": { - "description": "Error details that are communicated over gRPC (and HTTP) APIs.\nThe messages (for translation) are stored as \"error:\u003cnamespace\u003e:\u003cname\u003e\".", - "type": "object", - "properties": { - "attributes": { - "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", - "type": "object" - }, - "cause": { - "description": "The error that caused this error.", - "$ref": "#/definitions/v3ErrorDetails" - }, - "code": { - "description": "The status code of the error.", - "type": "integer", - "format": "int64" - }, - "correlation_id": { - "description": "The correlation ID of the error can be used to correlate the error to stack\ntraces the network may (or may not) store about recent errors.", - "type": "string" - }, - "details": { - "description": "The details of the error.", - "type": "array", - "items": { - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }", - "type": "object", - "properties": { - "@type": { - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.", - "type": "string" - } - }, - "additionalProperties": {} - } - }, - "message_format": { - "description": "The default (fallback) message format that should be used for the error.\nThis is also used if the client does not have a translation for the error.", - "type": "string" - }, - "name": { - "description": "Name of the error.", - "type": "string" - }, - "namespace": { - "description": "Namespace of the error (typically the package name in The Things Stack).", - "type": "string" - } - } + "$ref": "#/definitions/v3ErrorDetails" } } } @@ -516271,6 +521259,7 @@ ] }, "v3CUPSRedirection": { + "description": "DEPRECATED: This message is deprecated and will be removed in a future version of The Things Stack.", "type": "object", "properties": { "auth_token": { @@ -516552,6 +521541,7 @@ } }, "cups_redirection": { + "description": "DEPRECATED: This message is deprecated and will be removed in a future version of The Things Stack.", "type": "object", "properties": { "auth_token": { @@ -519396,6 +524386,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -519683,6 +524688,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -584594,6 +589614,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -586488,6 +591511,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -586869,6 +591895,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -587062,6 +592091,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } }, @@ -587438,6 +592470,9 @@ }, "model_id": { "type": "string" + }, + "runtime_version": { + "type": "string" } } } @@ -600122,6 +605157,10 @@ "format": "string", "example": "70B3D57ED000ABCD" }, + "is_managed": { + "description": "Indicates whether the gateway is a managed gateway.\nIf true, when the gateway is successfully claimed, it can be managed with ManagedGatewayConfigurationService.", + "type": "boolean" + }, "supports_claiming": { "type": "boolean" } @@ -600301,6 +605340,19 @@ } } }, + "tenant_registration": { + "type": "object", + "properties": { + "contact_info_validation": { + "type": "object", + "properties": { + "token_ttl": { + "type": "string" + } + } + } + } + }, "user_limits": { "type": "object", "properties": { @@ -601026,6 +606078,19 @@ } } }, + "tenant_registration": { + "type": "object", + "properties": { + "contact_info_validation": { + "type": "object", + "properties": { + "token_ttl": { + "type": "string" + } + } + } + } + }, "user_limits": { "type": "object", "properties": { @@ -614809,6 +619874,16 @@ } } }, + "v3ListEndDevicesRequestFilter": { + "description": "Filter end devices by fields.", + "type": "object", + "properties": { + "updated_since": { + "type": "string", + "format": "date-time" + } + } + }, "v3ListFrequencyPlansResponse": { "type": "object", "properties": { @@ -614840,6 +619915,16 @@ } } }, + "v3ListGatewaysRequestFilter": { + "description": "Filter gateways by fields.", + "type": "object", + "properties": { + "updated_since": { + "type": "string", + "format": "date-time" + } + } + }, "v3ListNotificationsResponse": { "type": "object", "properties": { @@ -623995,6 +629080,1476 @@ "LORAWAN_R1" ] }, + "v3ManagedGateway": { + "type": "object", + "properties": { + "cellular_imei": { + "type": "string" + }, + "cellular_imsi": { + "type": "string" + }, + "ethernet_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "ethernet_profile_id": { + "type": "string" + }, + "ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "version_ids": { + "description": "Identifies an end device model with version information.", + "type": "object", + "properties": { + "brand_id": { + "type": "string" + }, + "firmware_version": { + "type": "string" + }, + "hardware_version": { + "type": "string" + }, + "model_id": { + "type": "string" + }, + "runtime_version": { + "type": "string" + } + } + }, + "wifi_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "wifi_profile_id": { + "type": "string" + } + } + }, + "v3ManagedGatewayCellularBackhaul": { + "type": "object", + "properties": { + "network_interface": { + "type": "object", + "properties": { + "addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "dhcp_enabled": { + "type": "boolean" + }, + "status": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED" + ] + } + } + }, + "operator": { + "type": "string" + }, + "rssi": { + "type": "number", + "format": "float" + } + } + }, + "v3ManagedGatewayConfigurationServiceUpdateBody": { + "type": "object", + "properties": { + "field_mask": { + "description": "The names of the gateway fields that should be updated.", + "type": "string" + }, + "gateway": { + "type": "object", + "properties": { + "cellular_imei": { + "type": "string" + }, + "cellular_imsi": { + "type": "string" + }, + "ethernet_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "ethernet_profile_id": { + "type": "string" + }, + "ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + }, + "version_ids": { + "description": "Identifies an end device model with version information.", + "type": "object", + "properties": { + "brand_id": { + "type": "string" + }, + "firmware_version": { + "type": "string" + }, + "hardware_version": { + "type": "string" + }, + "model_id": { + "type": "string" + }, + "runtime_version": { + "type": "string" + } + } + }, + "wifi_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "wifi_profile_id": { + "type": "string" + } + } + } + } + }, + "v3ManagedGatewayControllerConnection": { + "type": "object", + "properties": { + "network_interface_type": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_CELLULAR", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_WIFI", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_ETHERNET" + ] + } + } + }, + "v3ManagedGatewayEthernetBackhaul": { + "type": "object", + "properties": { + "network_interface": { + "type": "object", + "properties": { + "addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "dhcp_enabled": { + "type": "boolean" + }, + "status": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED" + ] + } + } + } + } + }, + "v3ManagedGatewayEthernetProfile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + }, + "v3ManagedGatewayEthernetProfileConfigurationServiceCreateBody": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + } + }, + "v3ManagedGatewayEthernetProfileConfigurationServiceUpdateBody": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "field_mask": { + "description": "The names of the gateway fields that should be updated.", + "type": "string" + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + } + }, + "v3ManagedGatewayEthernetProfiles": { + "type": "object", + "properties": { + "profiles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + } + } + } + } + } + }, + "v3ManagedGatewayEventData": { + "type": "object", + "properties": { + "cellular_backhaul": { + "type": "object", + "properties": { + "network_interface": { + "type": "object", + "properties": { + "addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "dhcp_enabled": { + "type": "boolean" + }, + "status": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED" + ] + } + } + }, + "operator": { + "type": "string" + }, + "rssi": { + "type": "number", + "format": "float" + } + } + }, + "controller_connection": { + "type": "object", + "properties": { + "network_interface_type": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_CELLULAR", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_WIFI", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_ETHERNET" + ] + } + } + }, + "entity": { + "type": "object", + "properties": { + "cellular_imei": { + "type": "string" + }, + "cellular_imsi": { + "type": "string" + }, + "ethernet_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "ethernet_profile_id": { + "type": "string" + }, + "ids": { + "type": "object", + "properties": { + "eui": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + }, + "gateway_id": { + "type": "string" + } + } + }, + "version_ids": { + "description": "Identifies an end device model with version information.", + "type": "object", + "properties": { + "brand_id": { + "type": "string" + }, + "firmware_version": { + "type": "string" + }, + "hardware_version": { + "type": "string" + }, + "model_id": { + "type": "string" + }, + "runtime_version": { + "type": "string" + } + } + }, + "wifi_mac_address": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "wifi_profile_id": { + "type": "string" + } + } + }, + "ethernet_backhaul": { + "type": "object", + "properties": { + "network_interface": { + "type": "object", + "properties": { + "addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "dhcp_enabled": { + "type": "boolean" + }, + "status": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED" + ] + } + } + } + } + }, + "gateway_server_connection": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "network_interface_type": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_CELLULAR", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_WIFI", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_ETHERNET" + ] + } + } + }, + "location": { + "type": "object", + "properties": { + "accuracy": { + "description": "The accuracy of the location (meters).", + "type": "integer", + "format": "int32" + }, + "altitude": { + "description": "The altitude (meters), where 0 is the mean sea level.", + "type": "integer", + "format": "int32" + }, + "latitude": { + "description": "The North–South position (degrees; -90 to +90), where 0 is the equator, North pole is positive, South pole is negative.", + "type": "number", + "format": "double" + }, + "longitude": { + "description": "The East-West position (degrees; -180 to +180), where 0 is the Prime Meridian (Greenwich), East is positive , West is negative.", + "type": "number", + "format": "double" + }, + "source": { + "description": " - SOURCE_UNKNOWN: The source of the location is not known or not set.\n - SOURCE_GPS: The location is determined by GPS.\n - SOURCE_REGISTRY: The location is set in and updated from a registry.\n - SOURCE_IP_GEOLOCATION: The location is estimated with IP geolocation.\n - SOURCE_WIFI_RSSI_GEOLOCATION: The location is estimated with WiFi RSSI geolocation.\n - SOURCE_BT_RSSI_GEOLOCATION: The location is estimated with BT/BLE RSSI geolocation.\n - SOURCE_LORA_RSSI_GEOLOCATION: The location is estimated with LoRa RSSI geolocation.\n - SOURCE_LORA_TDOA_GEOLOCATION: The location is estimated with LoRa TDOA geolocation.\n - SOURCE_COMBINED_GEOLOCATION: The location is estimated by a combination of geolocation sources.\n\nMore estimation methods can be added.", + "type": "string", + "default": "SOURCE_UNKNOWN", + "enum": [ + "SOURCE_UNKNOWN", + "SOURCE_GPS", + "SOURCE_REGISTRY", + "SOURCE_IP_GEOLOCATION", + "SOURCE_WIFI_RSSI_GEOLOCATION", + "SOURCE_BT_RSSI_GEOLOCATION", + "SOURCE_LORA_RSSI_GEOLOCATION", + "SOURCE_LORA_TDOA_GEOLOCATION", + "SOURCE_COMBINED_GEOLOCATION" + ] + } + } + }, + "system_status": { + "type": "object", + "properties": { + "cpu_temperature": { + "description": "CPU temperature (Celsius).", + "type": "number", + "format": "float" + } + } + }, + "wifi_backhaul": { + "type": "object", + "properties": { + "authentication_mode": { + "type": "string" + }, + "bssid": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "channel": { + "type": "integer", + "format": "int64" + }, + "network_interface": { + "type": "object", + "properties": { + "addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "dhcp_enabled": { + "type": "boolean" + }, + "status": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED" + ] + } + } + }, + "rssi": { + "type": "number", + "format": "float" + }, + "ssid": { + "type": "string" + } + } + } + } + }, + "v3ManagedGatewayGatewayServerConnection": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "network_interface_type": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_CELLULAR", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_WIFI", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_ETHERNET" + ] + } + } + }, + "v3ManagedGatewayNetworkInterfaceAddresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "v3ManagedGatewayNetworkInterfaceInfo": { + "type": "object", + "properties": { + "addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "dhcp_enabled": { + "type": "boolean" + }, + "status": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED" + ] + } + } + }, + "v3ManagedGatewayNetworkInterfaceStatus": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED" + ] + }, + "v3ManagedGatewayNetworkInterfaceType": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_CELLULAR", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_WIFI", + "MANAGED_GATEWAY_NETWORK_INTERFACE_TYPE_ETHERNET" + ] + }, + "v3ManagedGatewaySystemStatus": { + "type": "object", + "properties": { + "cpu_temperature": { + "description": "CPU temperature (Celsius).", + "type": "number", + "format": "float" + } + } + }, + "v3ManagedGatewayWiFiAccessPoint": { + "type": "object", + "properties": { + "authentication_mode": { + "type": "string" + }, + "bssid": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "channel": { + "type": "integer", + "format": "int64" + }, + "rssi": { + "type": "number", + "format": "float" + }, + "ssid": { + "type": "string" + } + } + }, + "v3ManagedGatewayWiFiAccessPoints": { + "type": "object", + "properties": { + "access_points": { + "type": "array", + "items": { + "type": "object", + "properties": { + "authentication_mode": { + "type": "string" + }, + "bssid": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "channel": { + "type": "integer", + "format": "int64" + }, + "rssi": { + "type": "number", + "format": "float" + }, + "ssid": { + "type": "string" + } + } + } + } + } + }, + "v3ManagedGatewayWiFiBackhaul": { + "type": "object", + "properties": { + "authentication_mode": { + "type": "string" + }, + "bssid": { + "type": "string", + "format": "string", + "example": "EC656E000100" + }, + "channel": { + "type": "integer", + "format": "int64" + }, + "network_interface": { + "type": "object", + "properties": { + "addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "dhcp_enabled": { + "type": "boolean" + }, + "status": { + "type": "string", + "default": "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "enum": [ + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UNSPECIFIED", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_DOWN", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_UP", + "MANAGED_GATEWAY_NETWORK_INTERFACE_STATUS_FAILED" + ] + } + } + }, + "rssi": { + "type": "number", + "format": "float" + }, + "ssid": { + "type": "string" + } + } + }, + "v3ManagedGatewayWiFiProfile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + }, + "v3ManagedGatewayWiFiProfileConfigurationServiceCreateBody": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + } + }, + "v3ManagedGatewayWiFiProfileConfigurationServiceUpdateBody": { + "type": "object", + "properties": { + "collaborator": { + "description": "OrganizationOrUserIdentifiers contains either organization or user identifiers.", + "type": "object", + "properties": { + "organization_ids": { + "type": "object", + "properties": { + "organization_id": { + "description": "This ID shares namespace with user IDs.", + "type": "string" + } + } + }, + "user_ids": { + "type": "object", + "properties": { + "email": { + "description": "Secondary identifier, which can only be used in specific requests.", + "type": "string" + } + } + } + } + }, + "field_mask": { + "description": "The names of the gateway fields that should be updated.", + "type": "string" + }, + "profile": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + } + }, + "v3ManagedGatewayWiFiProfiles": { + "type": "object", + "properties": { + "profiles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "network_interface_addresses": { + "type": "object", + "properties": { + "dns_servers": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "192.0.2.1" + ] + }, + "gateway": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + }, + "ip_addresses": { + "type": "string", + "items": { + "type": "string", + "format": "string" + }, + "example": [ + "192.0.2.0", + "2001:db8::1" + ] + }, + "subnet_mask": { + "type": "string", + "format": "string", + "example": "192.0.2.0" + } + } + }, + "password": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "profile_name": { + "type": "string" + }, + "shared": { + "type": "boolean" + }, + "ssid": { + "type": "string" + } + } + } + } + } + }, "v3MessagePayloadDecoder": { "type": "object", "properties": { @@ -654216,6 +660771,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -654503,6 +661073,21 @@ } } }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, "is": { "type": "object", "properties": { @@ -655027,1054 +661612,1114 @@ } } }, - "is": { + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, + "is": { + "type": "object", + "properties": { + "admin_rights": { + "type": "object", + "properties": { + "all": { + "type": "boolean" + } + } + }, + "application_limits": { + "type": "object", + "properties": { + "end_devices": { + "type": "string", + "format": "uint64" + } + } + }, + "email": { + "type": "object", + "properties": { + "network": { + "type": "object", + "properties": { + "branding_base_url": { + "type": "string" + } + } + } + } + }, + "end_device_picture": { + "type": "object", + "properties": { + "disable_upload": { + "type": "boolean" + } + } + }, + "organization_limits": { + "type": "object", + "properties": { + "applications": { + "type": "string", + "format": "uint64" + }, + "clients": { + "type": "string", + "format": "uint64" + }, + "gateways": { + "type": "string", + "format": "uint64" + } + } + }, + "profile_picture": { + "type": "object", + "properties": { + "disable_upload": { + "type": "boolean" + }, + "use_gravatar": { + "type": "boolean" + } + } + }, + "user_limits": { + "type": "object", + "properties": { + "applications": { + "type": "string", + "format": "uint64" + }, + "clients": { + "type": "string", + "format": "uint64" + }, + "gateways": { + "type": "string", + "format": "uint64" + }, + "organizations": { + "type": "string", + "format": "uint64" + } + } + }, + "user_login": { + "type": "object", + "properties": { + "disable_credentials_login": { + "type": "boolean" + } + } + }, + "user_registration": { + "type": "object", + "properties": { + "admin_approval": { + "type": "object", + "properties": { + "required": { + "type": "boolean" + } + } + }, + "contact_info_validation": { + "type": "object", + "properties": { + "required": { + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + }, + "invitation": { + "type": "object", + "properties": { + "required": { + "type": "boolean" + }, + "token_ttl": { + "type": "string" + } + } + }, + "password_requirements": { + "type": "object", + "properties": { + "max_length": { + "type": "integer", + "format": "int64" + }, + "min_digits": { + "type": "integer", + "format": "int64" + }, + "min_length": { + "type": "integer", + "format": "int64" + }, + "min_special": { + "type": "integer", + "format": "int64" + }, + "min_uppercase": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "user_rights": { + "type": "object", + "properties": { + "create_applications": { + "type": "boolean" + }, + "create_clients": { + "type": "boolean" + }, + "create_gateways": { + "type": "boolean" + }, + "create_organizations": { + "type": "boolean" + }, + "update_name": { + "type": "boolean" + }, + "update_primary_email_address": { + "type": "boolean" + } + } + } + } + }, + "js": { + "type": "object", + "properties": { + "join_eui_prefixes": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + }, + "example": [ + "70B3D57ED0000000/56" + ] + } + } + }, + "noc": { + "type": "object", + "properties": { + "access": { + "type": "object", + "properties": { + "extended": { + "type": "boolean" + } + } + } + } + }, + "ns": { + "type": "object", + "properties": { + "cooldown_window": { + "type": "string" + }, + "deduplication_window": { + "type": "string" + }, + "dev_addr_prefixes": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + }, + "example": [ + "2600AB00/24" + ] + }, + "net_id": { + "type": "string", + "format": "string", + "example": "000013" + }, + "ns_id": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + }, + "ui": { + "type": "object", + "properties": { + "branding_base_url": { + "type": "string" + } + } + } + } + } + }, + "default_cluster": { + "type": "object", + "properties": { + "ars": { + "type": "object", + "properties": { + "routing": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + } + } + }, + "as": { + "type": "object", + "properties": { + "webhooks": { + "type": "object", + "properties": { + "queue": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + } + } + } + } + }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, + "is": { + "type": "object", + "properties": { + "admin_rights": { + "type": "object", + "properties": { + "all": { + "type": "boolean" + } + } + }, + "application_limits": { + "type": "object", + "properties": { + "end_devices": { + "type": "string", + "format": "uint64" + } + } + }, + "email": { + "type": "object", + "properties": { + "network": { + "type": "object", + "properties": { + "branding_base_url": { + "type": "string" + } + } + } + } + }, + "end_device_picture": { + "type": "object", + "properties": { + "disable_upload": { + "type": "boolean" + } + } + }, + "organization_limits": { + "type": "object", + "properties": { + "applications": { + "type": "string", + "format": "uint64" + }, + "clients": { + "type": "string", + "format": "uint64" + }, + "gateways": { + "type": "string", + "format": "uint64" + } + } + }, + "profile_picture": { + "type": "object", + "properties": { + "disable_upload": { + "type": "boolean" + }, + "use_gravatar": { + "type": "boolean" + } + } + }, + "user_limits": { + "type": "object", + "properties": { + "applications": { + "type": "string", + "format": "uint64" + }, + "clients": { + "type": "string", + "format": "uint64" + }, + "gateways": { + "type": "string", + "format": "uint64" + }, + "organizations": { + "type": "string", + "format": "uint64" + } + } + }, + "user_login": { + "type": "object", + "properties": { + "disable_credentials_login": { + "type": "boolean" + } + } + }, + "user_registration": { + "type": "object", + "properties": { + "admin_approval": { + "type": "object", + "properties": { + "required": { + "type": "boolean" + } + } + }, + "contact_info_validation": { + "type": "object", + "properties": { + "required": { + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + }, + "invitation": { + "type": "object", + "properties": { + "required": { + "type": "boolean" + }, + "token_ttl": { + "type": "string" + } + } + }, + "password_requirements": { + "type": "object", + "properties": { + "max_length": { + "type": "integer", + "format": "int64" + }, + "min_digits": { + "type": "integer", + "format": "int64" + }, + "min_length": { + "type": "integer", + "format": "int64" + }, + "min_special": { + "type": "integer", + "format": "int64" + }, + "min_uppercase": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "user_rights": { + "type": "object", + "properties": { + "create_applications": { + "type": "boolean" + }, + "create_clients": { + "type": "boolean" + }, + "create_gateways": { + "type": "boolean" + }, + "create_organizations": { + "type": "boolean" + }, + "update_name": { + "type": "boolean" + }, + "update_primary_email_address": { + "type": "boolean" + } + } + } + } + }, + "js": { + "type": "object", + "properties": { + "join_eui_prefixes": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + }, + "example": [ + "70B3D57ED0000000/56" + ] + } + } + }, + "noc": { + "type": "object", + "properties": { + "access": { + "type": "object", + "properties": { + "extended": { + "type": "boolean" + } + } + } + } + }, + "ns": { + "type": "object", + "properties": { + "cooldown_window": { + "type": "string" + }, + "deduplication_window": { + "type": "string" + }, + "dev_addr_prefixes": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + }, + "example": [ + "2600AB00/24" + ] + }, + "net_id": { + "type": "string", + "format": "string", + "example": "000013" + }, + "ns_id": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + }, + "ui": { + "type": "object", + "properties": { + "branding_base_url": { + "type": "string" + } + } + } + } + }, + "pb": { + "type": "object", + "properties": { + "listed": { + "description": "Indicates whether the Home Network is publicly listed.", + "type": "boolean" + } + } + } + } + }, + "contact_info": { + "type": "array", + "items": { + "type": "object", + "properties": { + "contact_method": { + "type": "string", + "default": "CONTACT_METHOD_OTHER", + "enum": [ + "CONTACT_METHOD_OTHER", + "CONTACT_METHOD_EMAIL", + "CONTACT_METHOD_PHONE" + ] + }, + "contact_type": { + "type": "string", + "default": "CONTACT_TYPE_OTHER", + "enum": [ + "CONTACT_TYPE_OTHER", + "CONTACT_TYPE_ABUSE", + "CONTACT_TYPE_BILLING", + "CONTACT_TYPE_TECHNICAL" + ] + }, + "public": { + "type": "boolean" + }, + "validated_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "string" + } + } + } + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "ids": { + "type": "object" + }, + "max_applications": { + "description": "If set, restricts the maximum number of applications that can be created.", + "type": "string", + "format": "uint64" + }, + "max_clients": { + "description": "If set, restricts the maximum number of clients that can be created.", + "type": "string", + "format": "uint64" + }, + "max_end_devices": { + "description": "If set, restricts the maximum number of end_devices that can be created.", + "type": "string", + "format": "uint64" + }, + "max_gateways": { + "description": "If set, restricts the maximum number of gateways that can be created.", + "type": "string", + "format": "uint64" + }, + "max_organizations": { + "description": "If set, restricts the maximum number of organizations that can be created.", + "type": "string", + "format": "uint64" + }, + "max_users": { + "description": "If set, restricts the maximum number of users that can be created.", + "type": "string", + "format": "uint64" + }, + "name": { + "type": "string" + }, + "state": { + "description": "State enum defines states that an entity can be in.\n\n - STATE_REQUESTED: Denotes that the entity has been requested and is pending review by an admin.\n - STATE_APPROVED: Denotes that the entity has been reviewed and approved by an admin.\n - STATE_REJECTED: Denotes that the entity has been reviewed and rejected by an admin.\n - STATE_FLAGGED: Denotes that the entity has been flagged and is pending review by an admin.\n - STATE_SUSPENDED: Denotes that the entity has been reviewed and suspended by an admin.", + "type": "string", + "default": "STATE_REQUESTED", + "enum": [ + "STATE_REQUESTED", + "STATE_APPROVED", + "STATE_REJECTED", + "STATE_FLAGGED", + "STATE_SUSPENDED" + ] + }, + "state_description": { + "description": "A description for the state field.\nThis field can only be modified by admins, and should typically only be updated\nwhen also updating `state`.", + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v3Tenants": { + "type": "object", + "properties": { + "tenants": { + "type": "array", + "items": { + "description": "Tenant is the message that defines a Tenant in the network.", + "type": "object", + "properties": { + "attributes": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "billing": { + "type": "object", + "properties": { + "aws_saas_marketplace": { + "type": "object", + "properties": { + "customer_identifier": { + "type": "string" + }, + "product_code": { + "type": "string" + } + } + }, + "counting": { + "type": "object", + "properties": { + "end_devices": { + "type": "string", + "default": "ALL", + "enum": [ + "ALL", + "ONLY_ACTIVATED" + ] + } + } + }, + "stripe": { + "type": "object", + "properties": { + "customer_id": { + "type": "string" + }, + "plan_id": { + "type": "string" + }, + "subscription_id": { + "type": "string" + }, + "subscription_item_id": { + "type": "string" + } + } + } + } + }, + "billing_identifiers": { + "type": "object", + "properties": { + "billing_id": { + "type": "string" + } + } + }, + "capabilities": { + "type": "object" + }, + "configuration": { + "type": "object", + "properties": { + "clusters": { + "description": "Configuration per cluster (by ID).", + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "ars": { + "type": "object", + "properties": { + "routing": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + } + } + }, + "as": { + "type": "object", + "properties": { + "webhooks": { + "type": "object", + "properties": { + "queue": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + } + } + } + } + }, + "gs": { + "type": "object", + "properties": { + "mtls_authentication": { + "type": "object", + "properties": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", + "type": "string", + "format": "byte" + } + } + } + } + }, + "is": { + "type": "object", + "properties": { + "admin_rights": { + "type": "object", + "properties": { + "all": { + "type": "boolean" + } + } + }, + "application_limits": { + "type": "object", + "properties": { + "end_devices": { + "type": "string", + "format": "uint64" + } + } + }, + "email": { + "type": "object", + "properties": { + "network": { + "type": "object", + "properties": { + "branding_base_url": { + "type": "string" + } + } + } + } + }, + "end_device_picture": { + "type": "object", + "properties": { + "disable_upload": { + "type": "boolean" + } + } + }, + "organization_limits": { + "type": "object", + "properties": { + "applications": { + "type": "string", + "format": "uint64" + }, + "clients": { + "type": "string", + "format": "uint64" + }, + "gateways": { + "type": "string", + "format": "uint64" + } + } + }, + "profile_picture": { + "type": "object", + "properties": { + "disable_upload": { + "type": "boolean" + }, + "use_gravatar": { + "type": "boolean" + } + } + }, + "user_limits": { + "type": "object", + "properties": { + "applications": { + "type": "string", + "format": "uint64" + }, + "clients": { + "type": "string", + "format": "uint64" + }, + "gateways": { + "type": "string", + "format": "uint64" + }, + "organizations": { + "type": "string", + "format": "uint64" + } + } + }, + "user_login": { + "type": "object", + "properties": { + "disable_credentials_login": { + "type": "boolean" + } + } + }, + "user_registration": { + "type": "object", + "properties": { + "admin_approval": { + "type": "object", + "properties": { + "required": { + "type": "boolean" + } + } + }, + "contact_info_validation": { + "type": "object", + "properties": { + "required": { + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + }, + "invitation": { + "type": "object", + "properties": { + "required": { + "type": "boolean" + }, + "token_ttl": { + "type": "string" + } + } + }, + "password_requirements": { + "type": "object", + "properties": { + "max_length": { + "type": "integer", + "format": "int64" + }, + "min_digits": { + "type": "integer", + "format": "int64" + }, + "min_length": { + "type": "integer", + "format": "int64" + }, + "min_special": { + "type": "integer", + "format": "int64" + }, + "min_uppercase": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "user_rights": { + "type": "object", + "properties": { + "create_applications": { + "type": "boolean" + }, + "create_clients": { + "type": "boolean" + }, + "create_gateways": { + "type": "boolean" + }, + "create_organizations": { + "type": "boolean" + }, + "update_name": { + "type": "boolean" + }, + "update_primary_email_address": { + "type": "boolean" + } + } + } + } + }, + "js": { + "type": "object", + "properties": { + "join_eui_prefixes": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + }, + "example": [ + "70B3D57ED0000000/56" + ] + } + } + }, + "noc": { + "type": "object", + "properties": { + "access": { + "type": "object", + "properties": { + "extended": { + "type": "boolean" + } + } + } + } + }, + "ns": { + "type": "object", + "properties": { + "cooldown_window": { + "type": "string" + }, + "deduplication_window": { + "type": "string" + }, + "dev_addr_prefixes": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + }, + "example": [ + "2600AB00/24" + ] + }, + "net_id": { + "type": "string", + "format": "string", + "example": "000013" + }, + "ns_id": { + "type": "string", + "format": "string", + "example": "70B3D57ED000ABCD" + } + } + }, + "ui": { + "type": "object", + "properties": { + "branding_base_url": { + "type": "string" + } + } + } + } + } + }, + "default_cluster": { + "type": "object", + "properties": { + "ars": { + "type": "object", + "properties": { + "routing": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + } + } + }, + "as": { + "type": "object", + "properties": { + "webhooks": { + "type": "object", + "properties": { + "queue": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + } + } + } + } + }, + "gs": { "type": "object", "properties": { - "admin_rights": { - "type": "object", - "properties": { - "all": { - "type": "boolean" - } - } - }, - "application_limits": { - "type": "object", - "properties": { - "end_devices": { - "type": "string", - "format": "uint64" - } - } - }, - "email": { - "type": "object", - "properties": { - "network": { - "type": "object", - "properties": { - "branding_base_url": { - "type": "string" - } - } - } - } - }, - "end_device_picture": { - "type": "object", - "properties": { - "disable_upload": { - "type": "boolean" - } - } - }, - "organization_limits": { - "type": "object", - "properties": { - "applications": { - "type": "string", - "format": "uint64" - }, - "clients": { - "type": "string", - "format": "uint64" - }, - "gateways": { - "type": "string", - "format": "uint64" - } - } - }, - "profile_picture": { - "type": "object", - "properties": { - "disable_upload": { - "type": "boolean" - }, - "use_gravatar": { - "type": "boolean" - } - } - }, - "user_limits": { + "mtls_authentication": { "type": "object", "properties": { - "applications": { - "type": "string", - "format": "uint64" - }, - "clients": { - "type": "string", - "format": "uint64" - }, - "gateways": { - "type": "string", - "format": "uint64" - }, - "organizations": { - "type": "string", - "format": "uint64" - } - } - }, - "user_login": { - "type": "object", - "properties": { - "disable_credentials_login": { - "type": "boolean" - } - } - }, - "user_registration": { - "type": "object", - "properties": { - "admin_approval": { - "type": "object", - "properties": { - "required": { - "type": "boolean" - } - } - }, - "contact_info_validation": { - "type": "object", - "properties": { - "required": { - "type": "boolean" - } - } - }, - "enabled": { - "type": "boolean" - }, - "invitation": { - "type": "object", - "properties": { - "required": { - "type": "boolean" - }, - "token_ttl": { - "type": "string" - } - } - }, - "password_requirements": { - "type": "object", - "properties": { - "max_length": { - "type": "integer", - "format": "int64" - }, - "min_digits": { - "type": "integer", - "format": "int64" - }, - "min_length": { - "type": "integer", - "format": "int64" - }, - "min_special": { - "type": "integer", - "format": "int64" - }, - "min_uppercase": { - "type": "integer", - "format": "int64" - } - } - } - } - }, - "user_rights": { - "type": "object", - "properties": { - "create_applications": { - "type": "boolean" - }, - "create_clients": { - "type": "boolean" - }, - "create_gateways": { - "type": "boolean" - }, - "create_organizations": { - "type": "boolean" - }, - "update_name": { - "type": "boolean" - }, - "update_primary_email_address": { - "type": "boolean" - } - } - } - } - }, - "js": { - "type": "object", - "properties": { - "join_eui_prefixes": { - "type": "array", - "items": { - "type": "string", - "format": "byte" - }, - "example": [ - "70B3D57ED0000000/56" - ] - } - } - }, - "noc": { - "type": "object", - "properties": { - "access": { - "type": "object", - "properties": { - "extended": { - "type": "boolean" - } - } - } - } - }, - "ns": { - "type": "object", - "properties": { - "cooldown_window": { - "type": "string" - }, - "deduplication_window": { - "type": "string" - }, - "dev_addr_prefixes": { - "type": "array", - "items": { - "type": "string", - "format": "byte" - }, - "example": [ - "2600AB00/24" - ] - }, - "net_id": { - "type": "string", - "format": "string", - "example": "000013" - }, - "ns_id": { - "type": "string", - "format": "string", - "example": "70B3D57ED000ABCD" - } - } - }, - "ui": { - "type": "object", - "properties": { - "branding_base_url": { - "type": "string" - } - } - } - } - } - }, - "default_cluster": { - "type": "object", - "properties": { - "ars": { - "type": "object", - "properties": { - "routing": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - } - } - }, - "as": { - "type": "object", - "properties": { - "webhooks": { - "type": "object", - "properties": { - "queue": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - } - } - } - } - }, - "is": { - "type": "object", - "properties": { - "admin_rights": { - "type": "object", - "properties": { - "all": { - "type": "boolean" - } - } - }, - "application_limits": { - "type": "object", - "properties": { - "end_devices": { - "type": "string", - "format": "uint64" - } - } - }, - "email": { - "type": "object", - "properties": { - "network": { - "type": "object", - "properties": { - "branding_base_url": { - "type": "string" - } - } - } - } - }, - "end_device_picture": { - "type": "object", - "properties": { - "disable_upload": { - "type": "boolean" - } - } - }, - "organization_limits": { - "type": "object", - "properties": { - "applications": { - "type": "string", - "format": "uint64" - }, - "clients": { - "type": "string", - "format": "uint64" - }, - "gateways": { - "type": "string", - "format": "uint64" - } - } - }, - "profile_picture": { - "type": "object", - "properties": { - "disable_upload": { - "type": "boolean" - }, - "use_gravatar": { - "type": "boolean" - } - } - }, - "user_limits": { - "type": "object", - "properties": { - "applications": { - "type": "string", - "format": "uint64" - }, - "clients": { - "type": "string", - "format": "uint64" - }, - "gateways": { - "type": "string", - "format": "uint64" - }, - "organizations": { - "type": "string", - "format": "uint64" - } - } - }, - "user_login": { - "type": "object", - "properties": { - "disable_credentials_login": { - "type": "boolean" - } - } - }, - "user_registration": { - "type": "object", - "properties": { - "admin_approval": { - "type": "object", - "properties": { - "required": { - "type": "boolean" - } - } - }, - "contact_info_validation": { - "type": "object", - "properties": { - "required": { - "type": "boolean" - } - } - }, - "enabled": { - "type": "boolean" - }, - "invitation": { - "type": "object", - "properties": { - "required": { - "type": "boolean" - }, - "token_ttl": { - "type": "string" - } - } - }, - "password_requirements": { - "type": "object", - "properties": { - "max_length": { - "type": "integer", - "format": "int64" - }, - "min_digits": { - "type": "integer", - "format": "int64" - }, - "min_length": { - "type": "integer", - "format": "int64" - }, - "min_special": { - "type": "integer", - "format": "int64" - }, - "min_uppercase": { - "type": "integer", - "format": "int64" - } - } - } - } - }, - "user_rights": { - "type": "object", - "properties": { - "create_applications": { - "type": "boolean" - }, - "create_clients": { - "type": "boolean" - }, - "create_gateways": { - "type": "boolean" - }, - "create_organizations": { - "type": "boolean" - }, - "update_name": { - "type": "boolean" - }, - "update_primary_email_address": { - "type": "boolean" - } - } - } - } - }, - "js": { - "type": "object", - "properties": { - "join_eui_prefixes": { - "type": "array", - "items": { - "type": "string", - "format": "byte" - }, - "example": [ - "70B3D57ED0000000/56" - ] - } - } - }, - "noc": { - "type": "object", - "properties": { - "access": { - "type": "object", - "properties": { - "extended": { - "type": "boolean" - } - } - } - } - }, - "ns": { - "type": "object", - "properties": { - "cooldown_window": { - "type": "string" - }, - "deduplication_window": { - "type": "string" - }, - "dev_addr_prefixes": { - "type": "array", - "items": { - "type": "string", - "format": "byte" - }, - "example": [ - "2600AB00/24" - ] - }, - "net_id": { - "type": "string", - "format": "string", - "example": "000013" - }, - "ns_id": { - "type": "string", - "format": "string", - "example": "70B3D57ED000ABCD" - } - } - }, - "ui": { - "type": "object", - "properties": { - "branding_base_url": { - "type": "string" - } - } - } - } - }, - "pb": { - "type": "object", - "properties": { - "listed": { - "description": "Indicates whether the Home Network is publicly listed.", - "type": "boolean" - } - } - } - } - }, - "contact_info": { - "type": "array", - "items": { - "type": "object", - "properties": { - "contact_method": { - "type": "string", - "default": "CONTACT_METHOD_OTHER", - "enum": [ - "CONTACT_METHOD_OTHER", - "CONTACT_METHOD_EMAIL", - "CONTACT_METHOD_PHONE" - ] - }, - "contact_type": { - "type": "string", - "default": "CONTACT_TYPE_OTHER", - "enum": [ - "CONTACT_TYPE_OTHER", - "CONTACT_TYPE_ABUSE", - "CONTACT_TYPE_BILLING", - "CONTACT_TYPE_TECHNICAL" - ] - }, - "public": { - "type": "boolean" - }, - "validated_at": { - "type": "string", - "format": "date-time" - }, - "value": { - "type": "string" - } - } - } - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "description": { - "type": "string" - }, - "ids": { - "type": "object" - }, - "max_applications": { - "description": "If set, restricts the maximum number of applications that can be created.", - "type": "string", - "format": "uint64" - }, - "max_clients": { - "description": "If set, restricts the maximum number of clients that can be created.", - "type": "string", - "format": "uint64" - }, - "max_end_devices": { - "description": "If set, restricts the maximum number of end_devices that can be created.", - "type": "string", - "format": "uint64" - }, - "max_gateways": { - "description": "If set, restricts the maximum number of gateways that can be created.", - "type": "string", - "format": "uint64" - }, - "max_organizations": { - "description": "If set, restricts the maximum number of organizations that can be created.", - "type": "string", - "format": "uint64" - }, - "max_users": { - "description": "If set, restricts the maximum number of users that can be created.", - "type": "string", - "format": "uint64" - }, - "name": { - "type": "string" - }, - "state": { - "description": "State enum defines states that an entity can be in.\n\n - STATE_REQUESTED: Denotes that the entity has been requested and is pending review by an admin.\n - STATE_APPROVED: Denotes that the entity has been reviewed and approved by an admin.\n - STATE_REJECTED: Denotes that the entity has been reviewed and rejected by an admin.\n - STATE_FLAGGED: Denotes that the entity has been flagged and is pending review by an admin.\n - STATE_SUSPENDED: Denotes that the entity has been reviewed and suspended by an admin.", - "type": "string", - "default": "STATE_REQUESTED", - "enum": [ - "STATE_REQUESTED", - "STATE_APPROVED", - "STATE_REJECTED", - "STATE_FLAGGED", - "STATE_SUSPENDED" - ] - }, - "state_description": { - "description": "A description for the state field.\nThis field can only be modified by admins, and should typically only be updated\nwhen also updating `state`.", - "type": "string" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - } - } - } - }, - "v3Tenants": { - "type": "object", - "properties": { - "tenants": { - "type": "array", - "items": { - "description": "Tenant is the message that defines a Tenant in the network.", - "type": "object", - "properties": { - "attributes": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "billing": { - "type": "object", - "properties": { - "aws_saas_marketplace": { - "type": "object", - "properties": { - "customer_identifier": { - "type": "string" - }, - "product_code": { - "type": "string" - } - } - }, - "counting": { - "type": "object", - "properties": { - "end_devices": { - "type": "string", - "default": "ALL", - "enum": [ - "ALL", - "ONLY_ACTIVATED" - ] - } - } - }, - "stripe": { - "type": "object", - "properties": { - "customer_id": { - "type": "string" - }, - "plan_id": { - "type": "string" - }, - "subscription_id": { - "type": "string" - }, - "subscription_item_id": { - "type": "string" - } - } - } - } - }, - "billing_identifiers": { - "type": "object", - "properties": { - "billing_id": { - "type": "string" - } - } - }, - "capabilities": { - "type": "object" - }, - "configuration": { - "type": "object", - "properties": { - "clusters": { - "description": "Configuration per cluster (by ID).", - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "ars": { - "type": "object", - "properties": { - "routing": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - } - } - }, - "as": { - "type": "object", - "properties": { - "webhooks": { - "type": "object", - "properties": { - "queue": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - } - } - } - } - }, - "is": { - "type": "object", - "properties": { - "admin_rights": { - "type": "object", - "properties": { - "all": { - "type": "boolean" - } - } - }, - "application_limits": { - "type": "object", - "properties": { - "end_devices": { - "type": "string", - "format": "uint64" - } - } - }, - "email": { - "type": "object", - "properties": { - "network": { - "type": "object", - "properties": { - "branding_base_url": { - "type": "string" - } - } - } - } - }, - "end_device_picture": { - "type": "object", - "properties": { - "disable_upload": { - "type": "boolean" - } - } - }, - "organization_limits": { - "type": "object", - "properties": { - "applications": { - "type": "string", - "format": "uint64" - }, - "clients": { - "type": "string", - "format": "uint64" - }, - "gateways": { - "type": "string", - "format": "uint64" - } - } - }, - "profile_picture": { - "type": "object", - "properties": { - "disable_upload": { - "type": "boolean" - }, - "use_gravatar": { - "type": "boolean" - } - } - }, - "user_limits": { - "type": "object", - "properties": { - "applications": { - "type": "string", - "format": "uint64" - }, - "clients": { - "type": "string", - "format": "uint64" - }, - "gateways": { - "type": "string", - "format": "uint64" - }, - "organizations": { - "type": "string", - "format": "uint64" - } - } - }, - "user_login": { - "type": "object", - "properties": { - "disable_credentials_login": { - "type": "boolean" - } - } - }, - "user_registration": { - "type": "object", - "properties": { - "admin_approval": { - "type": "object", - "properties": { - "required": { - "type": "boolean" - } - } - }, - "contact_info_validation": { - "type": "object", - "properties": { - "required": { - "type": "boolean" - } - } - }, - "enabled": { - "type": "boolean" - }, - "invitation": { - "type": "object", - "properties": { - "required": { - "type": "boolean" - }, - "token_ttl": { - "type": "string" - } - } - }, - "password_requirements": { - "type": "object", - "properties": { - "max_length": { - "type": "integer", - "format": "int64" - }, - "min_digits": { - "type": "integer", - "format": "int64" - }, - "min_length": { - "type": "integer", - "format": "int64" - }, - "min_special": { - "type": "integer", - "format": "int64" - }, - "min_uppercase": { - "type": "integer", - "format": "int64" - } - } - } - } - }, - "user_rights": { - "type": "object", - "properties": { - "create_applications": { - "type": "boolean" - }, - "create_clients": { - "type": "boolean" - }, - "create_gateways": { - "type": "boolean" - }, - "create_organizations": { - "type": "boolean" - }, - "update_name": { - "type": "boolean" - }, - "update_primary_email_address": { - "type": "boolean" - } - } - } - } - }, - "js": { - "type": "object", - "properties": { - "join_eui_prefixes": { - "type": "array", - "items": { + "client_ca_pool": { + "description": "PEM encoded pool of X.509 root certificates to trust for verifying the presented TLS client certificate.", "type": "string", "format": "byte" - }, - "example": [ - "70B3D57ED0000000/56" - ] - } - } - }, - "noc": { - "type": "object", - "properties": { - "access": { - "type": "object", - "properties": { - "extended": { - "type": "boolean" - } - } - } - } - }, - "ns": { - "type": "object", - "properties": { - "cooldown_window": { - "type": "string" - }, - "deduplication_window": { - "type": "string" - }, - "dev_addr_prefixes": { - "type": "array", - "items": { - "type": "string", - "format": "byte" - }, - "example": [ - "2600AB00/24" - ] - }, - "net_id": { - "type": "string", - "format": "string", - "example": "000013" - }, - "ns_id": { - "type": "string", - "format": "string", - "example": "70B3D57ED000ABCD" - } - } - }, - "ui": { - "type": "object", - "properties": { - "branding_base_url": { - "type": "string" - } - } - } - } - } - }, - "default_cluster": { - "type": "object", - "properties": { - "ars": { - "type": "object", - "properties": { - "routing": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - } - } - }, - "as": { - "type": "object", - "properties": { - "webhooks": { - "type": "object", - "properties": { - "queue": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } } } } @@ -659547,6 +666192,10 @@ "description": "Manage tenants as a tenant administrator.", "name": "TenantRegistry" }, + { + "description": "Manage access to tenants.", + "name": "TenantAccess" + }, { "description": "Report metering data to external billing services.", "name": "Tbs" @@ -659655,6 +666304,18 @@ "description": "Fetch configuration for gateways.", "name": "GatewayConfigurationService" }, + { + "description": "Configure managed gateways.", + "name": "ManagedGatewayConfigurationService" + }, + { + "description": "Configure WiFi profiles for managed gateways.", + "name": "ManagedGatewayWiFiProfileConfigurationService" + }, + { + "description": "Configure Ethernet profiles for managed gateways.", + "name": "ManagedGatewayEthernetProfileConfigurationService" + }, { "description": "Manage gateways.", "name": "GatewayRegistry" @@ -659663,10 +666324,6 @@ "description": "Manage access to gateways.", "name": "GatewayAccess" }, - { - "description": "Fetch gateway configuration.", - "name": "GatewayConfigurator" - }, { "description": "Manage access to batches of gateways.", "name": "GatewayBatchAccess" diff --git a/doc/data/commands/ttn-lw-cli.json b/doc/data/commands/ttn-lw-cli.json index b925ff4c17..79c0b06a7c 100644 --- a/doc/data/commands/ttn-lw-cli.json +++ b/doc/data/commands/ttn-lw-cli.json @@ -613,17 +613,9 @@ "short": "Claim a gateway (EXPERIMENTAL)", "path": "ttn-lw-cli gateways claim", "subCommands": { - "authorize": { - "short": "Authorize a gateway for claiming (EXPERIMENTAL)", - "path": "ttn-lw-cli gateways claim authorize" - }, "info": { "short": "Check if claiming is supported for the EUI (EXPERIMENTAL)", "path": "ttn-lw-cli gateways claim info" - }, - "unauthorize": { - "short": "Unauthorize a gateway for claiming (EXPERIMENTAL)", - "path": "ttn-lw-cli gateways claim unauthorize" } } }, diff --git a/doc/data/frequency-plans.yml b/doc/data/frequency-plans.yml index acccd015a1..ef10d2a810 100644 --- a/doc/data/frequency-plans.yml +++ b/doc/data/frequency-plans.yml @@ -3,7 +3,68 @@ name: Europe 863-870 MHz (SF12 for RX2) description: Default frequency plan for Europe base-frequency: 868 - country-codes: [al, ad, ao, at, bh, be, ba, bw, bg, cg, hr, cy, cz, dk, ee, sz, fi, fr, gr, hu, is, ie, it, lv, ls, li, lt, lu, mg, mw, mt, mu, md, me, mz, na, nl, mk, ph, pl, pt, ro, ru, sa, rs, sc, sk, si, za, es, se, ch, tz, tr, ae, gb, va, zm, zw] + country-codes: + [ + al, + ad, + ao, + at, + bh, + be, + ba, + bw, + bg, + cg, + hr, + cy, + cz, + dk, + ee, + sz, + fi, + fr, + gr, + hu, + is, + ie, + it, + lv, + ls, + li, + lt, + lu, + mg, + mw, + mt, + mu, + md, + me, + mz, + na, + nl, + mk, + ph, + pl, + pt, + ro, + ru, + sa, + rs, + sc, + sk, + si, + za, + es, + se, + ch, + tz, + tr, + ae, + gb, + va, + zm, + zw, + ] file: EU_863_870.yml - id: EU_863_870_TTN @@ -12,7 +73,68 @@ description: TTN Community Network frequency plan for Europe, using SF9 for RX2 base-frequency: 868 base-id: EU_863_870 - country-codes: [al, ad, ao, at, bh, be, ba, bw, bg, cg, hr, cy, cz, dk, ee, sz, fi, fr, gr, hu, is, ie, it, lv, ls, li, lt, lu, mg, mw, mt, mu, md, me, mz, na, nl, mk, ph, pl, pt, ro, ru, sa, rs, sc, sk, si, za, es, se, ch, tz, tr, ae, gb, va, zm, zw] + country-codes: + [ + al, + ad, + ao, + at, + bh, + be, + ba, + bw, + bg, + cg, + hr, + cy, + cz, + dk, + ee, + sz, + fi, + fr, + gr, + hu, + is, + ie, + it, + lv, + ls, + li, + lt, + lu, + mg, + mw, + mt, + mu, + md, + me, + mz, + na, + nl, + mk, + ph, + pl, + pt, + ro, + ru, + sa, + rs, + sc, + sk, + si, + za, + es, + se, + ch, + tz, + tr, + ae, + gb, + va, + zm, + zw, + ] file: EU_863_870_TTN.yml - id: EU_863_870_ROAMING_DRAFT @@ -21,9 +143,140 @@ description: European 6 channel plan used by major operators to support LoRaWAN Passive Roaming base-frequency: 868 base-id: EU_863_870 - country-codes: [al, ad, ao, at, bh, be, ba, bw, bg, cg, hr, cy, cz, dk, ee, sz, fi, fr, gr, hu, is, ie, it, lv, ls, li, lt, lu, mg, mw, mt, mu, md, me, mz, na, nl, mk, ph, pl, pt, ro, ru, sa, rs, sc, sk, si, za, es, se, ch, tz, tr, ae, gb, va, zm, zw] + country-codes: + [ + al, + ad, + ao, + at, + bh, + be, + ba, + bw, + bg, + cg, + hr, + cy, + cz, + dk, + ee, + sz, + fi, + fr, + gr, + hu, + is, + ie, + it, + lv, + ls, + li, + lt, + lu, + mg, + mw, + mt, + mu, + md, + me, + mz, + na, + nl, + mk, + ph, + pl, + pt, + ro, + ru, + sa, + rs, + sc, + sk, + si, + za, + es, + se, + ch, + tz, + tr, + ae, + gb, + va, + zm, + zw, + ] file: EU_863_870_ROAMING_DRAFT.yml +- id: EU_868_1 + band-id: EU_863_870 + name: Europe 868.1 MHz + description: Single channel frequency plan for Europe (experimental) + base-frequency: 868 + base-id: EU_863_870 + country-codes: + [ + al, + ad, + ao, + at, + bh, + be, + ba, + bw, + bg, + cg, + hr, + cy, + cz, + dk, + ee, + sz, + fi, + fr, + gr, + hu, + is, + ie, + it, + lv, + ls, + li, + lt, + lu, + mg, + mw, + mt, + mu, + md, + me, + mz, + na, + nl, + mk, + ph, + pl, + pt, + ro, + ru, + sa, + rs, + sc, + sk, + si, + za, + es, + se, + ch, + tz, + tr, + ae, + gb, + va, + zm, + zw, + ] + file: EU_868_1.yml + - id: EU_433 band-id: EU_433 name: Europe 433 MHz (ITU region 1) @@ -176,7 +429,7 @@ file: CN_470_510_FSB_11.yml - id: AS_920_923 - band-id: AS_920_923 + band-id: AS_923 name: Asia 920-923 MHz description: TTN Community Network frequency plan for Asian countries, using frequencies ≤ 923 MHz base-frequency: 915 @@ -184,7 +437,7 @@ file: AS_920_923.yml - id: AS_920_923_LBT - band-id: AS_920_923 + band-id: AS_923 name: Asia 920-923 MHz with LBT description: TTN Community Network frequency plan for Asian countries, using frequencies ≤ 923 MHz with listen-before-talk base-frequency: 915 @@ -193,7 +446,7 @@ file: lbt_80_over_128.yml - id: AS_920_923_TTN_JP_1 - band-id: AS_920_923 + band-id: AS_923 name: Japan 920-923 MHz with LBT (channels 31-38) description: Frequency plan for Japan, using continuous frequencies up to 923.4MHz with LBT. base-frequency: 915 @@ -201,7 +454,7 @@ file: AS_920_923_TTN_JP_1.yml - id: AS_920_923_TTN_JP_1_LAND_MOBILE - band-id: AS_920_923 + band-id: AS_923 name: Japan 920-923 MHz with LBT (channels 31-38), Max EIRP 27 dBm description: | Frequency plan for Japanese land mobile station, using continuous frequencies up to 923.4MHz with MAX EIRP 27 dBm and LBT. @@ -212,7 +465,7 @@ file: AS_920_923_TTN_JP_1_LAND_MOBILE.yml - id: AS_920_923_TTN_JP_2 - band-id: AS_920_923 + band-id: AS_923 name: Japan 920-923 MHz with LBT (channels 24-27 and 35-38) description: Frequency plan for Japan, using top and bottom frequencies ≤ 923.4 MHz with LBT. base-frequency: 915 @@ -220,7 +473,7 @@ file: AS_920_923_TTN_JP_2.yml - id: AS_920_923_TTN_JP_3 - band-id: AS_920_923 + band-id: AS_923 name: Japan 920-923 MHz with LBT (channels 24-31) description: Frequency plan for Japan (16 channels), using continuous frequencies from 920.6 MHz, expected to be used with AS_920_923_TTN_JP_1. base-frequency: 915 @@ -228,7 +481,7 @@ file: AS_920_923_TTN_JP_3.yml - id: AS_920_923_TTN_JP_3_LAND_MOBILE - band-id: AS_920_923 + band-id: AS_923 name: Japan 920-923 MHz with LBT (channels 24-31), Max EIRP 27 dBm description: | Frequency plan for Japanese land mobile station (16 channels), using continuous frequencies from 920.6 MHz with MAX EIRP 27 dBm and LBT, expected to be used with AS_920_923_TTN_JP_1. @@ -331,7 +584,7 @@ file: enable_dwell_time_400ms.yml - id: AS_923_925 - band-id: AS_923_925 + band-id: AS_923 name: Asia 923-925 MHz description: TTN Community Network frequency plan for Asian countries, using frequencies ≥ 923 MHz base-frequency: 915 @@ -339,7 +592,7 @@ file: AS_923_925.yml - id: AS_923_925_LBT - band-id: AS_923_925 + band-id: AS_923 name: Asia 923-925 MHz with LBT description: TTN Community Network frequency plan for Asian countries, using frequencies ≥ 923 MHz with listen-before-talk base-frequency: 915 @@ -348,7 +601,7 @@ file: lbt_80_over_128.yml - id: AS_920_923_TTN_AU - band-id: AS_923_925 + band-id: AS_923 name: Asia 920-923 MHz (used by TTN Australia) description: TTN Community Network frequency plan for Asia 920-923 MHz in Australia base-frequency: 915 @@ -357,7 +610,7 @@ file: AS_920_923_TTN_AU.yml - id: AS_923_925_TTN_AU - band-id: AS_923_925 + band-id: AS_923 name: Asia 923-925 MHz (used by TTN Australia - secondary channels) description: TTN Community Network frequency plan for Asia 923-925 MHz in Australia. Secondary channels for 16 channel gateways. base-frequency: 915 @@ -652,3 +905,36 @@ zw, ] file: ISM_2400_3CH_DRAFT2.yml + +- id: IL_917_920_TTN + band-id: AS_923_4 + name: Israel 917-920 MHz (channels 1-4 and 11-14) + description: TTN Community Network frequency plan for Israel using channels 1 to 4 and 11 to 14. + base-frequency: 915 + country-codes: [il] + file: IL_917_920_TTN.yml + +- id: IL_917_920_TTN_2 + band-id: AS_923_4 + name: Israel 917-920 MHz (channels 1-7 and 9) + description: TTN Community Network frequency plan for Israel using channels 1 to 7 and channel 9. + base-frequency: 915 + country-codes: [il] + file: IL_917_920_TTN_2.yml + +- id: SG_920_923_TTN + band-id: AS_923 + name: Singapore 920-923 MHz + description: TTN Community Network frequency plan for Singapore + base-frequency: 915 + base-id: AS_920_923 + country-codes: [sg] + file: SG_920_923_TTN.yml + +- id: UZ_923_1 + band-id: AS_923 + name: Uzbekistan 915-928 MHz with only default channels + description: Compatibility frequency plan for Uzbekistan with common channels in the 926.2-926.8 MHz sub-band + base-frequency: 915 + country-codes: [uz] + file: UZ_923_1.yml