From f1aebcb8a14c79982926c4bf25edd175a3f1acaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nejra=20Selimovi=C4=87?= Date: Fri, 3 Nov 2023 10:27:22 +0100 Subject: [PATCH] doc: Add v3.28.0 release docs (#1206) * doc: Add v3.28.0 release docs * doc: Add new services to IS API docs --- doc/config/_default/config.toml | 2 +- doc/content/reference/api/identity_server.md | 12 ++++ .../host/aws/ecs/changelog/index.md | 12 ++++ .../ttn-lw-cli_applications_storage_get.md | 2 + ...-lw-cli_authentication-providers_create.md | 1 + ...ttn-lw-cli_authentication-providers_get.md | 1 + ...tn-lw-cli_authentication-providers_list.md | 1 + ...-lw-cli_authentication-providers_update.md | 1 + .../ttn-lw-cli_end-devices_storage_get.md | 2 + doc/content/ttn-lw-cli/ttn-lw-cli_gateways.md | 1 + .../ttn-lw-cli_gateways_batch-delete.md | 60 +++++++++++++++++ .../ttn-lw-cli_simulate_application-uplink.md | 67 ++++++++++++------- .../ttn-lw-cli/ttn-lw-cli_tenants_create.md | 2 + .../ttn-lw-cli/ttn-lw-cli_tenants_get.md | 2 + .../ttn-lw-cli/ttn-lw-cli_tenants_list.md | 2 + .../ttn-lw-cli/ttn-lw-cli_tenants_search.md | 2 + .../ttn-lw-cli/ttn-lw-cli_tenants_update.md | 2 + doc/content/whats-new/3.28.0.md | 51 ++++++++++++++ .../messages/AuthenticationProvider.yml | 15 +++++ .../Configuration.Cluster.NetworkServer.yml | 12 ++++ .../messages/Configuration.Cluster.yml | 4 +- .../ttn.lorawan.v3/messages/ApplicationUp.yml | 4 +- .../messages/AssertGatewayRightsRequest.yml | 16 +++++ .../messages/BandDescription.yml | 10 +++ .../messages/BatchDeleteGatewaysRequest.yml | 10 +++ .../messages/ContactInfoValidation.yml | 5 ++ .../messages/GatewayIdentifiersList.yml | 7 ++ ...UserRegistration.ContactInfoValidation.yml | 11 +++ .../messages/NetworkIdentifiers.yml | 7 ++ .../PacketBrokerAgentCompoundUplinkToken.yml | 12 ++++ .../PacketBrokerAgentEncryptedPayload.yml | 8 +++ .../PacketBrokerAgentGatewayUplinkToken.yml | 8 +++ .../messages/PacketBrokerAgentUplinkToken.yml | 11 +++ .../ttn.lorawan.v3/services/GatewayAccess.yml | 2 +- .../services/GatewayBatchAccess.yml | 19 ++++++ .../services/GatewayBatchRegistry.yml | 19 ++++++ doc/data/api/ttn.lorawan.v3/services/Gs.yml | 7 +- doc/data/commands/ttn-lw-cli.json | 4 ++ 38 files changed, 383 insertions(+), 31 deletions(-) create mode 100644 doc/content/ttn-lw-cli/ttn-lw-cli_gateways_batch-delete.md create mode 100644 doc/content/whats-new/3.28.0.md create mode 100644 doc/data/api/ttn.lorawan.v3/messages/AssertGatewayRightsRequest.yml create mode 100644 doc/data/api/ttn.lorawan.v3/messages/BatchDeleteGatewaysRequest.yml create mode 100644 doc/data/api/ttn.lorawan.v3/messages/GatewayIdentifiersList.yml create mode 100644 doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentCompoundUplinkToken.yml create mode 100644 doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentEncryptedPayload.yml create mode 100644 doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentGatewayUplinkToken.yml create mode 100644 doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentUplinkToken.yml create mode 100644 doc/data/api/ttn.lorawan.v3/services/GatewayBatchAccess.yml create mode 100644 doc/data/api/ttn.lorawan.v3/services/GatewayBatchRegistry.yml diff --git a/doc/config/_default/config.toml b/doc/config/_default/config.toml index 022a43710d..d3edf7765a 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.27.2" + version = "3.28.0" [markup] [markup.goldmark] diff --git a/doc/content/reference/api/identity_server.md b/doc/content/reference/api/identity_server.md index fd0d60a7a5..084a9e6ab6 100644 --- a/doc/content/reference/api/identity_server.md +++ b/doc/content/reference/api/identity_server.md @@ -43,8 +43,18 @@ description: "" {{< proto/method service="OAuthAuthorizationRegistry" method="DeleteToken" >}} +## The `GatewayBatchAccess` service + +{{< proto/method service="GatewayBatchAccess" method="AssertRights" >}} + +## The `GatewayBatchRegistry` service + +{{< proto/method service="GatewayBatchRegistry" method="Delete" >}} + ## Messages +{{< proto/message message="AssertGatewayRightsRequest" >}} + {{< proto/message package="tti.lorawan.v3" message="AuthenticationProvider" >}} {{< proto/message package="tti.lorawan.v3" message="AuthenticationProvider.Configuration" >}} @@ -53,6 +63,8 @@ description: "" {{< proto/message package="tti.lorawan.v3" message="AuthenticationProviders" >}} +{{< proto/message message="BatchDeleteGatewaysRequest" >}} + {{< proto/message package="tti.lorawan.v3" message="CreateAuthenticationProviderRequest" >}} {{< proto/message message="ContactInfo" >}} 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 72d207b83e..cdcb56f164 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 @@ -9,6 +9,18 @@ All meaningful changes to templates are documented in this file. ## Unreleased +## 3.28.0 + +### `2-3-db-redis` + +- The `r7g` family of machines is now available for hosting. + +### `4-2a-configuration` + +- Add `EventsBatchingEnabled`, `EventsBatchingTargetSize`, `EventsBatchingDelay` parameters. +- Add correlation IDs ignored methods to the gRPC server configuration. +- Add Identity Server NS-ID configuration. + ## 3.27.2 ### `5-4-ecs-services` diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_applications_storage_get.md b/doc/content/ttn-lw-cli/ttn-lw-cli_applications_storage_get.md index 70c4386e63..7488a15f2f 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_applications_storage_get.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_applications_storage_get.md @@ -162,6 +162,7 @@ ttn-lw-cli applications storage get [application-id] [flags] --up.uplink-message.network-ids.cluster-address select the up.uplink_message.network_ids.cluster_address field --up.uplink-message.network-ids.cluster-id select the up.uplink_message.network_ids.cluster_id field --up.uplink-message.network-ids.net-id select the up.uplink_message.network_ids.net_id field + --up.uplink-message.network-ids.ns-id select the up.uplink_message.network_ids.ns_id field --up.uplink-message.network-ids.tenant-address select the up.uplink_message.network_ids.tenant_address field --up.uplink-message.network-ids.tenant-id select the up.uplink_message.network_ids.tenant_id field --up.uplink-message.normalized-payload select the up.uplink_message.normalized_payload field @@ -207,6 +208,7 @@ ttn-lw-cli applications storage get [application-id] [flags] --up.uplink-normalized.network-ids.cluster-address select the up.uplink_normalized.network_ids.cluster_address field --up.uplink-normalized.network-ids.cluster-id select the up.uplink_normalized.network_ids.cluster_id field --up.uplink-normalized.network-ids.net-id select the up.uplink_normalized.network_ids.net_id field + --up.uplink-normalized.network-ids.ns-id select the up.uplink_normalized.network_ids.ns_id field --up.uplink-normalized.network-ids.tenant-address select the up.uplink_normalized.network_ids.tenant_address field --up.uplink-normalized.network-ids.tenant-id select the up.uplink_normalized.network_ids.tenant_id field --up.uplink-normalized.normalized-payload select the up.uplink_normalized.normalized_payload field diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_create.md b/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_create.md index 3336c996fe..c95103fc0d 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_create.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_create.md @@ -15,6 +15,7 @@ ttn-lw-cli authentication-providers create [provider-id] [flags] ``` --allow-registrations + --allowed-email-domains strings --configuration.provider.oidc.client-id string --configuration.provider.oidc.client-secret string --configuration.provider.oidc.provider-url string diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_get.md b/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_get.md index bbc0f536df..1f9db3aa63 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_get.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_get.md @@ -15,6 +15,7 @@ ttn-lw-cli authentication-providers get [provider-id] [flags] ``` --allow-registrations select the allow_registrations field + --allowed-email-domains select the allowed_email_domains field --configuration select the configuration field and all allowed sub-fields --configuration.provider.oidc select the configuration.provider.oidc field and all allowed sub-fields --configuration.provider.oidc.client-id select the configuration.provider.oidc.client_id field diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_list.md b/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_list.md index 0957275450..74ab544e8d 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_list.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_list.md @@ -15,6 +15,7 @@ ttn-lw-cli authentication-providers list [flags] ``` --allow-registrations select the allow_registrations field + --allowed-email-domains select the allowed_email_domains field --configuration select the configuration field and all allowed sub-fields --configuration.provider.oidc select the configuration.provider.oidc field and all allowed sub-fields --configuration.provider.oidc.client-id select the configuration.provider.oidc.client_id field diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_update.md b/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_update.md index acb81aac2b..629fc2e482 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_update.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_authentication-providers_update.md @@ -15,6 +15,7 @@ ttn-lw-cli authentication-providers update [provider-id] [flags] ``` --allow-registrations + --allowed-email-domains strings --configuration.provider.oidc.client-id string --configuration.provider.oidc.client-secret string --configuration.provider.oidc.provider-url string diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_end-devices_storage_get.md b/doc/content/ttn-lw-cli/ttn-lw-cli_end-devices_storage_get.md index bfdac7d159..51a1291c94 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_end-devices_storage_get.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_end-devices_storage_get.md @@ -165,6 +165,7 @@ ttn-lw-cli end-devices storage get [application-id] [device-id] [flags] --up.uplink-message.network-ids.cluster-address select the up.uplink_message.network_ids.cluster_address field --up.uplink-message.network-ids.cluster-id select the up.uplink_message.network_ids.cluster_id field --up.uplink-message.network-ids.net-id select the up.uplink_message.network_ids.net_id field + --up.uplink-message.network-ids.ns-id select the up.uplink_message.network_ids.ns_id field --up.uplink-message.network-ids.tenant-address select the up.uplink_message.network_ids.tenant_address field --up.uplink-message.network-ids.tenant-id select the up.uplink_message.network_ids.tenant_id field --up.uplink-message.normalized-payload select the up.uplink_message.normalized_payload field @@ -210,6 +211,7 @@ ttn-lw-cli end-devices storage get [application-id] [device-id] [flags] --up.uplink-normalized.network-ids.cluster-address select the up.uplink_normalized.network_ids.cluster_address field --up.uplink-normalized.network-ids.cluster-id select the up.uplink_normalized.network_ids.cluster_id field --up.uplink-normalized.network-ids.net-id select the up.uplink_normalized.network_ids.net_id field + --up.uplink-normalized.network-ids.ns-id select the up.uplink_normalized.network_ids.ns_id field --up.uplink-normalized.network-ids.tenant-address select the up.uplink_normalized.network_ids.tenant_address field --up.uplink-normalized.network-ids.tenant-id select the up.uplink_normalized.network_ids.tenant_id field --up.uplink-normalized.normalized-payload select the up.uplink_normalized.normalized_payload field diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways.md b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways.md index 0bdfce27d9..432f46adfd 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways.md @@ -54,6 +54,7 @@ Gateway commands * [ttn-lw-cli]({{< relref "ttn-lw-cli" >}}) - The Things Industries Command-line Interface * [ttn-lw-cli gateways api-keys]({{< relref "ttn-lw-cli_gateways_api-keys" >}}) - Manage gateway API keys +* [ttn-lw-cli gateways batch-delete]({{< relref "ttn-lw-cli_gateways_batch-delete" >}}) - Delete a batch of gateways (EXPERIMENTAL). * [ttn-lw-cli gateways claim]({{< relref "ttn-lw-cli_gateways_claim" >}}) - Claim a gateway (EXPERIMENTAL) * [ttn-lw-cli gateways collaborators]({{< relref "ttn-lw-cli_gateways_collaborators" >}}) - Manage gateway collaborators * [ttn-lw-cli gateways contact-info]({{< relref "ttn-lw-cli_gateways_contact-info" >}}) - Manage gateway contact info (DEPRECATED. Instead, use administrative_contact and technical_contact fields of gateway) diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_batch-delete.md b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_batch-delete.md new file mode 100644 index 0000000000..b9ef1738e7 --- /dev/null +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_gateways_batch-delete.md @@ -0,0 +1,60 @@ +--- +title: "ttn-lw-cli gateways batch-delete" +slug: ttn-lw-cli_gateways_batch-delete +--- + +## ttn-lw-cli gateways batch-delete + +Delete a batch of gateways (EXPERIMENTAL). + +``` +ttn-lw-cli gateways batch-delete [gateway-ids] [flags] +``` + +### Options + +``` + -h, --help help for batch-delete +``` + +### Options inherited from parent commands + +``` + --allow-unknown-hosts Allow sending credentials to unknown hosts + --application-server-enabled Application Server enabled (default true) + --application-server-grpc-address string Application Server address (default "localhost:8884") + --ca string CA certificate file + -c, --config strings Location of the config files (default [.ttn-lw-cli.yml,$HOME/.ttn-lw-cli.yml,$HOME/.config/.ttn-lw-cli.yml]) + --credentials-id string Credentials ID (if using multiple configurations) + --device-claiming-server-grpc-address string Device Claiming Server address (default "localhost:8884") + --device-template-converter-grpc-address string Device Template Converter address (default "localhost:8884") + --dump-requests When log level is set to debug, also dump request payload as JSON + --experimental.features strings Experimental features to activate + --gateway-server-enabled Gateway Server enabled (default true) + --gateway-server-grpc-address string Gateway Server address (default "localhost:8884") + --identity-server-grpc-address string Identity Server address (default "localhost:8884") + --input-format string Input format (default "json") + --insecure Connect without TLS + --join-server-enabled Join Server enabled (default true) + --join-server-grpc-address string Join Server address (default "localhost:8884") + --log.format string Log format to write (console, json) (default "console") + --log.level string The minimum level log messages must have to be shown (default "info") + --network-server-enabled Network Server enabled (default true) + --network-server-grpc-address string Network Server address (default "localhost:8884") + --oauth-server-address string OAuth Server address (default "https://localhost/oauth") + --output-format string Output format (default "json") + --packet-broker-agent-grpc-address string Packet Broker Agent address (default "localhost:8884") + --qr-code-generator-grpc-address string QR Code Generator address (default "localhost:8884") + --retry.default-timeout duration Default timeout between retry attempts (default 100ms) + --retry.enable-metadata Use request response metadata to dynamically calculate timeout between retry attempts (default true) + --retry.jitter float Fraction that creates a deviation of the timeout used between retry attempts + --retry.max uint Maximum amount of times that a request can be reattempted + --skip-version-check Do not perform version checks + --telemetry.enable Enables telemetry for CLI (default true) + --telemetry.target string Target to which the information will be sent to (default "https://telemetry.thethingsstack.io/collect") +``` + +### SEE ALSO + +* [ttn-lw-cli gateways]({{< relref "ttn-lw-cli_gateways" >}}) - Gateway commands + diff --git a/doc/content/ttn-lw-cli/ttn-lw-cli_simulate_application-uplink.md b/doc/content/ttn-lw-cli/ttn-lw-cli_simulate_application-uplink.md index a002d4840b..0b25511e6b 100644 --- a/doc/content/ttn-lw-cli/ttn-lw-cli_simulate_application-uplink.md +++ b/doc/content/ttn-lw-cli/ttn-lw-cli_simulate_application-uplink.md @@ -14,29 +14,50 @@ ttn-lw-cli simulate application-uplink [application-id] [device-id] [flags] ### Options ``` - --app-s-key.encrypted-key bytesHex - --app-s-key.kek-label string - --app-s-key.key 16-bytes - --application-id string - --confirmed - --consumed-airtime duration - --decoded-payload-warnings strings - --dev-eui string (hex) - --device-id string - --f-cnt uint32 - --f-port uint32 - --frm-payload bytesBase64 - -h, --help help for application-uplink - --join-eui string (hex) - --last-a-f-cnt-down uint32 - --normalized-payload-warnings strings - --received-at timestamp - --session-key-id bytesBase64 - --version-ids.band-id string - --version-ids.brand-id string - --version-ids.firmware-version string - --version-ids.hardware-version string - --version-ids.model-id string + --app-s-key.encrypted-key bytesHex + --app-s-key.kek-label string + --app-s-key.key 16-bytes + --application-id string + --confirmed + --consumed-airtime duration + --decoded-payload-warnings strings + --dev-eui string (hex) + --device-id string + --f-cnt uint32 + --f-port uint32 + --frm-payload bytesBase64 + -h, --help help for application-uplink + --join-eui string (hex) + --last-a-f-cnt-down uint32 + --network-ids.cluster-address string + --network-ids.cluster-id string + --network-ids.net-id 3-bytes + --network-ids.ns-id 8-bytes + --network-ids.tenant-address string + --network-ids.tenant-id string + --normalized-payload-warnings strings + --received-at timestamp + --session-key-id bytesBase64 + --settings.concentrator-timestamp int + --settings.data-rate.modulation.fsk.bit-rate uint32 + --settings.data-rate.modulation.lora.bandwidth uint32 + --settings.data-rate.modulation.lora.coding-rate string + --settings.data-rate.modulation.lora.spreading-factor uint32 + --settings.data-rate.modulation.lrfhss.coding-rate string + --settings.data-rate.modulation.lrfhss.modulation-type uint32 + --settings.data-rate.modulation.lrfhss.operating-channel-width uint32 + --settings.downlink.antenna-index uint32 + --settings.downlink.invert-polarization + --settings.downlink.tx-power float32 + --settings.enable-crc + --settings.frequency uint + --settings.time timestamp + --settings.timestamp uint32 + --version-ids.band-id string + --version-ids.brand-id string + --version-ids.firmware-version string + --version-ids.hardware-version string + --version-ids.model-id 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 816740b319..26fc33de1b 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 @@ -50,6 +50,8 @@ ttn-lw-cli tenants create [tenant-id] [flags] --configuration.default-cluster.ns.cooldown-window duration --configuration.default-cluster.ns.deduplication-window duration --configuration.default-cluster.ns.dev-addr-prefixes strings + --configuration.default-cluster.ns.net-id 3-bytes + --configuration.default-cluster.ns.ns-id bytesBase64 --configuration.default-cluster.ui.branding-base-url string --configuration.pb.listed --description string 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 2eebb051bf..8b2f78bc52 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 @@ -79,6 +79,8 @@ ttn-lw-cli tenants get [tenant-id] [flags] --configuration.default-cluster.ns.cooldown-window select the configuration.default_cluster.ns.cooldown_window field --configuration.default-cluster.ns.deduplication-window select the configuration.default_cluster.ns.deduplication_window field --configuration.default-cluster.ns.dev-addr-prefixes select the configuration.default_cluster.ns.dev_addr_prefixes field + --configuration.default-cluster.ns.net-id select the configuration.default_cluster.ns.net_id field + --configuration.default-cluster.ns.ns-id select the configuration.default_cluster.ns.ns_id field --configuration.default-cluster.ui select the configuration.default_cluster.ui field and all allowed sub-fields --configuration.default-cluster.ui.branding-base-url select the configuration.default_cluster.ui.branding_base_url field --configuration.pb select the configuration.pb field and all allowed sub-fields 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 22e445a44b..4b99226038 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 @@ -79,6 +79,8 @@ ttn-lw-cli tenants list [flags] --configuration.default-cluster.ns.cooldown-window select the configuration.default_cluster.ns.cooldown_window field --configuration.default-cluster.ns.deduplication-window select the configuration.default_cluster.ns.deduplication_window field --configuration.default-cluster.ns.dev-addr-prefixes select the configuration.default_cluster.ns.dev_addr_prefixes field + --configuration.default-cluster.ns.net-id select the configuration.default_cluster.ns.net_id field + --configuration.default-cluster.ns.ns-id select the configuration.default_cluster.ns.ns_id field --configuration.default-cluster.ui select the configuration.default_cluster.ui field and all allowed sub-fields --configuration.default-cluster.ui.branding-base-url select the configuration.default_cluster.ui.branding_base_url field --configuration.pb select the configuration.pb field and all allowed sub-fields 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 bc0801e82c..817101ff8e 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 @@ -80,6 +80,8 @@ ttn-lw-cli tenants search [flags] --configuration.default-cluster.ns.cooldown-window select the configuration.default_cluster.ns.cooldown_window field --configuration.default-cluster.ns.deduplication-window select the configuration.default_cluster.ns.deduplication_window field --configuration.default-cluster.ns.dev-addr-prefixes select the configuration.default_cluster.ns.dev_addr_prefixes field + --configuration.default-cluster.ns.net-id select the configuration.default_cluster.ns.net_id field + --configuration.default-cluster.ns.ns-id select the configuration.default_cluster.ns.ns_id field --configuration.default-cluster.ui select the configuration.default_cluster.ui field and all allowed sub-fields --configuration.default-cluster.ui.branding-base-url select the configuration.default_cluster.ui.branding_base_url field --configuration.pb select the configuration.pb field and all allowed sub-fields 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 4f62c00636..0678b8d559 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 @@ -50,6 +50,8 @@ ttn-lw-cli tenants update [tenant-id] [flags] --configuration.default-cluster.ns.cooldown-window duration --configuration.default-cluster.ns.deduplication-window duration --configuration.default-cluster.ns.dev-addr-prefixes strings + --configuration.default-cluster.ns.net-id 3-bytes + --configuration.default-cluster.ns.ns-id bytesBase64 --configuration.default-cluster.ui.branding-base-url string --configuration.pb.listed --description string diff --git a/doc/content/whats-new/3.28.0.md b/doc/content/whats-new/3.28.0.md new file mode 100644 index 0000000000..d9f43e7339 --- /dev/null +++ b/doc/content/whats-new/3.28.0.md @@ -0,0 +1,51 @@ +--- +date: 2023-10-31 +title: "3.28.0" +featured: { + added: ['The Network Server ID is now configurable.', 'Updated Japanese translations for the Console and backend.', 'Experimental support for exporting gateway last seen timestamp as Prometheus metric.', 'Support for setting multiple frequency plans for gateways in the Console.'], + changed: ['Network Operations Center now includes the LoRa Alliance NetIDs up to revision 81.', 'Users can now configure interval for resending an account validation email.', 'Simplified traffic-related correlation IDs.', 'Application Server Webhook health system now records failures only every retry interval while in monitor mode.'], + fixed: ['Providing fixed downlink paths using the `-class-b-c.gateways` parameter parameter.', 'Gatway registration without gateway EUI.', 'Listing deleted entities for both admin and standard users.', 'Enabling telemetry using CLI snapcraft deployment no longer generates a panic error.'] +} +--- + +### Added + +- Locations retrieved from gateway status messages are now be displayed in the gateway map in the Console, even when they are not received through a secure connection. +- The Network Server ID (NSID, EUI-64) used in LoRaWAN Backend Interfaces is now included in the application uplink message network metadata as well as in the Backend Interfaces `HomeNSAns` message that Identity Server returns to clients. The NSID is configurable via `is.network.ns-id`. +- The NetID and NSID are added to the tenant cluster configuration. This allows configuring per-tenant per-cluster NetID and NSIDs. If set, they override Identity Server's default NetID and NSID. +- It is now possible to trigger a resending of the email validation email from within the Console. The new action is part of the error screen that users see when they log into the Console without having their contact info validated yet (and the network requires validation before usage). +- Updated Japanese translations for the Console and backend. +- Experimental support for exporting the last seen timestamp of a gateway as Prometheus metrics. + - This is exported on a separate path `/alert-metrics` with separate credentials. See `http.alert-metrics`. +- `--grpc.correlation-ids-ignore-methods` configuration option, which allows certain gRPC methods to be skipped from the correlation ID middleware which adds a correlation ID with the name of the gRPC method. Methods bear the format used by `--grpc.log-ignore-methods`, such as `/ttn.lorawan.v3.GsNs/HandleUplink`. +- Option to ignore the `email_verified` field in the callback when logging in via an OIDC authorization provider that doesn't set it. + - The `allowed_email_domains` field of the authentication provider configuration should be set. The email in the callback should match this regex. + - This requires an Identity Server database migration (`ttn-lw-stack is-db migrate`). +- Support for setting multiple frequency plans for gateways from the Console. +- The `ns-db purge` command to purge unused data from the Network Server database. + +### Changed + +- Users can now request a new email for the account validation from time to time instead of once per validation, the interval between email requests is determined by `is.user-registration.contact-info-validation.retry-interval` and by default it is an hour. +- Traffic related correlation IDs have been simplified. Previously one correlation ID per component was added as traffic passed through different stack components. Now a singular correlation ID relating to the entry point of the message will be added (such as `gs:uplink:xxx` for uplinks, or `as:downlink:xxx` for downlinks), and subsequent components will no longer add any extra correlation IDs (such as `ns:uplink:xxx` or `as:up:xxx`). The uplink entry points are `pba` and `gs`, while the downlink entry points are `pba`, `ns` and `as`. +- Network Operations Center now includes the LoRa Alliance NetIDs up to revision 81. +- Network Operations Center requires the gateway uplink message's data rate to be present in the database. + - This requires a Network Operations Center migration (`tti-lw-stack noc-db migrate`). + - To aggregate existing data, refresh the materialized view with gateway uplink data rate utilization. Connect with `psql` to the TimescaleDB database and run: + ```sql + CALL refresh_continuous_aggregate('gateway_uplink_data_rate_utilization_5m', NOW() - INTERVAL '30 days', NOW()); + ``` +- Packet Broker Agent uplink tokens are now serialized in a more efficient manner. +- The Network Server now stores only the most recent uplinks tokens. +- The Application Server webhook health system now records failures only every retry interval while in monitor mode, as opposed to recording every failure. + - Monitor mode in this context refers to situations in which either `--as.webhooks.unhealthy-attempts-threshold` or `--as.webhooks.unhealthy-retry-interval` are less or equal to zero. In such situations, the Application Server will record failures but will not stop the execution of the webhooks. + - Using a retry interval of zero and a non zero attempts threshold restores the previous behavior. + +### Fixed + +- Providing fixed downlink paths to the `ttn-lw-cli devices downlink {push|replace}` commands using the `-class-b-c.gateways` parameter. The gateways IDs are comma separated, and the antenna index `i` can be provided by suffixing the ID with `:i` (i.e. `my-gateway:0` for antenna index 0). The group index `j` can be provided by suffixing the ID with `:j` (i.e. `my-gateway:0:1` for antenna index 0 and group index 1). The antenna index is mandatory if a group index is to be provided, but optional otherwise. +- Gateway registration without gateway EUI not working. +- Listing deleted entities is now fixed for both admin and standard users, which previously returned an `account_not_found` error. +- Update to an user's `PrimaryEmailAddress` via a non admin now invalidates the `PrimaryEmailAddressValidatedAt` as it was intended. +- Negative number support in Cayenne LPP. +- Fix panic in snapcraft CLI deployment, commands will no longer generate a panic error message when telemetry is enabled. diff --git a/doc/data/api/tti.lorawan.v3/messages/AuthenticationProvider.yml b/doc/data/api/tti.lorawan.v3/messages/AuthenticationProvider.yml index 93a1e0a63b..840991094b 100644 --- a/doc/data/api/tti.lorawan.v3/messages/AuthenticationProvider.yml +++ b/doc/data/api/tti.lorawan.v3/messages/AuthenticationProvider.yml @@ -28,3 +28,18 @@ fields: message: name: AuthenticationProvider.Configuration default: {} +- name: allowed_email_domains + comment: |- + Allowed email domains for this provider. + If this field is set, only emails with the specified domains will be allowed to login. + The server also skips checking the `email_verified` field of the claims token. + We highly recommend admins of such providers to not allow + users to change their email addresses with the provider due to lack of verification. + rules: + max_items: 10 + unique: true + repeated: + type: string + rules: + 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])$ + default: [] diff --git a/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.NetworkServer.yml b/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.NetworkServer.yml index 666fdb01ff..d55762147e 100644 --- a/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.NetworkServer.yml +++ b/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.NetworkServer.yml @@ -1,5 +1,17 @@ name: Configuration.Cluster.NetworkServer fields: +- name: net_id + type: bytes + rules: + len: 3 + ignore_empty: true + default: "" +- name: ns_id + type: bytes + rules: + len: 8 + ignore_empty: true + default: "" - name: dev_addr_prefixes repeated: type: bytes 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 53ef349e64..1354b32ed7 100644 --- a/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.yml +++ b/doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.yml @@ -14,12 +14,12 @@ fields: name: Configuration.Cluster.NetworkServer default: {} - name: js - comment: Join Server + comment: Join Server configuration. message: name: Configuration.Cluster.JoinServer default: {} - name: noc - comment: Network Operations Center + comment: Network Operations Center configuration. message: name: Configuration.Cluster.NetworkOperationsCenter default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/ApplicationUp.yml b/doc/data/api/ttn.lorawan.v3/messages/ApplicationUp.yml index 188cbfea6b..e9ec3c30fe 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/ApplicationUp.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/ApplicationUp.yml @@ -64,7 +64,9 @@ fields: name: ApplicationServiceData default: {} - name: simulated - comment: Signals if the message is coming from the Network Server or is simulated. + comment: |- + Signals if the message is coming from the Network Server or is simulated. + The Application Server automatically sets this field, and callers must not manually set it. type: bool default: false oneofs: diff --git a/doc/data/api/ttn.lorawan.v3/messages/AssertGatewayRightsRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/AssertGatewayRightsRequest.yml new file mode 100644 index 0000000000..2616c06690 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/AssertGatewayRightsRequest.yml @@ -0,0 +1,16 @@ +name: AssertGatewayRightsRequest +fields: +- name: gateway_ids + rules: + min_items: 1 + max_items: 20 + repeated: + message: + name: GatewayIdentifiers + default: [] +- name: required + message: + name: Rights + rules: + required: true + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/BandDescription.yml b/doc/data/api/ttn.lorawan.v3/messages/BandDescription.yml index 70ee13f193..88590bdfaf 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/BandDescription.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/BandDescription.yml @@ -97,6 +97,16 @@ fields: enum: name: DataRateIndex default: DATA_RATE_0 +- name: relay_forward_delay + message: + package: google.protobuf + name: Duration + default: 0s +- name: relay_receive_delay + message: + package: google.protobuf + name: Duration + default: 0s - name: tx_param_setup_req_support type: bool default: false diff --git a/doc/data/api/ttn.lorawan.v3/messages/BatchDeleteGatewaysRequest.yml b/doc/data/api/ttn.lorawan.v3/messages/BatchDeleteGatewaysRequest.yml new file mode 100644 index 0000000000..92b8226043 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/BatchDeleteGatewaysRequest.yml @@ -0,0 +1,10 @@ +name: BatchDeleteGatewaysRequest +fields: +- name: gateway_ids + rules: + min_items: 1 + max_items: 20 + repeated: + message: + name: GatewayIdentifiers + default: [] diff --git a/doc/data/api/ttn.lorawan.v3/messages/ContactInfoValidation.yml b/doc/data/api/ttn.lorawan.v3/messages/ContactInfoValidation.yml index b3841396de..d9a6945d7b 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/ContactInfoValidation.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/ContactInfoValidation.yml @@ -31,3 +31,8 @@ fields: package: google.protobuf name: Timestamp default: "0001-01-01T00:00:00Z" +- name: updated_at + message: + package: google.protobuf + name: Timestamp + default: "0001-01-01T00:00:00Z" diff --git a/doc/data/api/ttn.lorawan.v3/messages/GatewayIdentifiersList.yml b/doc/data/api/ttn.lorawan.v3/messages/GatewayIdentifiersList.yml new file mode 100644 index 0000000000..74bd3f0629 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/GatewayIdentifiersList.yml @@ -0,0 +1,7 @@ +name: GatewayIdentifiersList +fields: +- name: gateway_ids + repeated: + message: + name: GatewayIdentifiers + default: [] diff --git a/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.UserRegistration.ContactInfoValidation.yml b/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.UserRegistration.ContactInfoValidation.yml index a71f749ff4..43703e98ce 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.UserRegistration.ContactInfoValidation.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.UserRegistration.ContactInfoValidation.yml @@ -5,3 +5,14 @@ fields: package: google.protobuf name: BoolValue default: null +- name: token_ttl + message: + package: google.protobuf + name: Duration + default: 0s +- name: retry_interval + comment: The minimum interval between validation emails. + message: + package: google.protobuf + name: Duration + default: 0s diff --git a/doc/data/api/ttn.lorawan.v3/messages/NetworkIdentifiers.yml b/doc/data/api/ttn.lorawan.v3/messages/NetworkIdentifiers.yml index 8049d1a366..cc234269f4 100644 --- a/doc/data/api/ttn.lorawan.v3/messages/NetworkIdentifiers.yml +++ b/doc/data/api/ttn.lorawan.v3/messages/NetworkIdentifiers.yml @@ -8,6 +8,13 @@ fields: len: 3 ignore_empty: true default: "" +- name: ns_id + comment: LoRaWAN NSID (EUI-64) that uniquely identifies the Network Server instance. + type: bytes + rules: + len: 8 + ignore_empty: true + default: "" - name: tenant_id comment: Optional tenant identifier for multi-tenant deployments. type: string diff --git a/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentCompoundUplinkToken.yml b/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentCompoundUplinkToken.yml new file mode 100644 index 0000000000..f95eb31533 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentCompoundUplinkToken.yml @@ -0,0 +1,12 @@ +name: PacketBrokerAgentCompoundUplinkToken +fields: +- name: gateway + type: bytes + default: "" +- name: forwarder + type: bytes + default: "" +- name: agent + message: + name: PacketBrokerAgentUplinkToken + default: {} diff --git a/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentEncryptedPayload.yml b/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentEncryptedPayload.yml new file mode 100644 index 0000000000..0b673bf63f --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentEncryptedPayload.yml @@ -0,0 +1,8 @@ +name: PacketBrokerAgentEncryptedPayload +fields: +- name: ciphertext + type: bytes + default: "" +- name: nonce + type: bytes + default: "" diff --git a/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentGatewayUplinkToken.yml b/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentGatewayUplinkToken.yml new file mode 100644 index 0000000000..96b09f799f --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentGatewayUplinkToken.yml @@ -0,0 +1,8 @@ +name: PacketBrokerAgentGatewayUplinkToken +fields: +- name: gateway_uid + type: string + default: "" +- name: token + type: bytes + default: "" diff --git a/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentUplinkToken.yml b/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentUplinkToken.yml new file mode 100644 index 0000000000..625408bc93 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/messages/PacketBrokerAgentUplinkToken.yml @@ -0,0 +1,11 @@ +name: PacketBrokerAgentUplinkToken +fields: +- name: forwarder_net_id + type: bytes + default: "" +- name: forwarder_tenant_id + type: string + default: "" +- name: forwarder_cluster_id + type: string + default: "" diff --git a/doc/data/api/ttn.lorawan.v3/services/GatewayAccess.yml b/doc/data/api/ttn.lorawan.v3/services/GatewayAccess.yml index 69f4b781e9..063d92eb30 100644 --- a/doc/data/api/ttn.lorawan.v3/services/GatewayAccess.yml +++ b/doc/data/api/ttn.lorawan.v3/services/GatewayAccess.yml @@ -1,6 +1,6 @@ name: GatewayAccess comment: |- - The GatewayAcces service, exposed by the Identity Server, is used to manage + The GatewayAccess service, exposed by the Identity Server, is used to manage API keys and collaborators of gateways. methods: ListRights: diff --git a/doc/data/api/ttn.lorawan.v3/services/GatewayBatchAccess.yml b/doc/data/api/ttn.lorawan.v3/services/GatewayBatchAccess.yml new file mode 100644 index 0000000000..b525c6ba25 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/services/GatewayBatchAccess.yml @@ -0,0 +1,19 @@ +name: GatewayBatchAccess +comment: |- + The GatewayBatchAccess service, exposed by the Identity Server, is used to + check the rights of the caller on multiple gateways at once. + EXPERIMENTAL: This service is subject to change. +methods: + AssertRights: + name: AssertRights + comment: |- + Assert that the caller has the requested rights on all the requested gateways. + The check is successful if there are no errors. + input: + name: AssertGatewayRightsRequest + output: + package: google.protobuf + name: Empty + http: + - method: GET + path: /gateways/rights/batch diff --git a/doc/data/api/ttn.lorawan.v3/services/GatewayBatchRegistry.yml b/doc/data/api/ttn.lorawan.v3/services/GatewayBatchRegistry.yml new file mode 100644 index 0000000000..3760738f27 --- /dev/null +++ b/doc/data/api/ttn.lorawan.v3/services/GatewayBatchRegistry.yml @@ -0,0 +1,19 @@ +name: GatewayBatchRegistry +comment: |- + The GatewayBatchRegistry service, exposed by the Identity Server, is used to manage + gateway registrations in batches. +methods: + Delete: + name: Delete + comment: |- + Delete a batch of gateways. + This operation is atomic; either all gateways are deleted or none. + The caller must have delete rights on all requested gateways. + input: + name: BatchDeleteGatewaysRequest + output: + package: google.protobuf + name: Empty + http: + - method: DELETE + path: /gateways/batch diff --git a/doc/data/api/ttn.lorawan.v3/services/Gs.yml b/doc/data/api/ttn.lorawan.v3/services/Gs.yml index 097ad248ea..f00f0c844f 100644 --- a/doc/data/api/ttn.lorawan.v3/services/Gs.yml +++ b/doc/data/api/ttn.lorawan.v3/services/Gs.yml @@ -16,9 +16,10 @@ methods: name: BatchGetGatewayConnectionStats comment: |- Get statistics about gateway connections to the Gateway Server of a batch of gateways. - This is not persisted between reconnects. - Gateways that are not connected or are part of a different cluster are ignored. - It is up to the client to make sure that the gateways are in the requested cluster. + - Statistics are not persisted between reconnects. + - Gateways that are not connected or are part of a different cluster are ignored. + - The client should ensure that the requested gateways are in the requested cluster. + - The client should have the right to get the gateway connection stats on all requested gateways. input: name: BatchGetGatewayConnectionStatsRequest output: diff --git a/doc/data/commands/ttn-lw-cli.json b/doc/data/commands/ttn-lw-cli.json index 882c6cd3e3..12ea6f53de 100644 --- a/doc/data/commands/ttn-lw-cli.json +++ b/doc/data/commands/ttn-lw-cli.json @@ -577,6 +577,10 @@ } } }, + "batch-delete": { + "short": "Delete a batch of gateways (EXPERIMENTAL).", + "path": "ttn-lw-cli gateways batch-delete" + }, "claim": { "short": "Claim a gateway (EXPERIMENTAL)", "path": "ttn-lw-cli gateways claim",