From 77d5fcc3f5d4dd29d5a6bc47e1a71bfba6d9b691 Mon Sep 17 00:00:00 2001 From: The Things Bot Date: Mon, 5 Aug 2024 09:19:02 +0000 Subject: [PATCH] docs: Release v3.31.1 --- doc/config/_default/config.toml | 2 +- .../host/aws/ecs/changelog/index.md | 10 + .../ttn-lw-cli/ttn-lw-cli_tenants_create.md | 1 + .../ttn-lw-cli/ttn-lw-cli_tenants_get.md | 3 + .../ttn-lw-cli/ttn-lw-cli_tenants_list.md | 3 + .../ttn-lw-cli/ttn-lw-cli_tenants_search.md | 3 + .../ttn-lw-cli/ttn-lw-cli_tenants_update.md | 1 + doc/content/whats-new/3.31.1.md | 13 + .../messages/ApplicationEventForwardCount.yml | 16 + .../ApplicationEventsForwardCount.yml | 7 + ...icationWebhookFailureByStatusCodeCount.yml | 15 + .../ApplicationWebhookFailureCount.yml | 12 + ...pplicationWebhookFailureToForwardRatio.yml | 5 + ...cationWebhookFailuresByStatusCodeCount.yml | 7 + .../ApplicationWebhookFailuresCount.yml | 7 + ...uster.GatewayServer.MTLSAuthentication.yml | 7 + .../Configuration.Cluster.GatewayServer.yml | 6 + .../messages/Configuration.Cluster.yml | 5 + .../messages/ResendAdminValidationRequest.yml | 8 + doc/data/api/tti.lorawan.v3/services/Noc.yml | 36 + .../tti.lorawan.v3/services/TenantAccess.yml | 12 + .../messages/GatewayToken.Payload.yml | 2 - .../messages/GatewayToken.yml | 0 ...nantRegistration.ContactInfoValidation.yml | 7 + .../IsConfiguration.TenantRegistration.yml | 6 + .../messages/IsConfiguration.yml | 4 + doc/data/api/tts.swagger.json | 2203 +++++++++++++---- 27 files changed, 1902 insertions(+), 499 deletions(-) create mode 100644 doc/content/whats-new/3.31.1.md create mode 100644 doc/data/api/tti.lorawan.v3/messages/ApplicationEventForwardCount.yml create mode 100644 doc/data/api/tti.lorawan.v3/messages/ApplicationEventsForwardCount.yml create mode 100644 doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureByStatusCodeCount.yml create mode 100644 doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureCount.yml create mode 100644 doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailureToForwardRatio.yml create mode 100644 doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailuresByStatusCodeCount.yml create mode 100644 doc/data/api/tti.lorawan.v3/messages/ApplicationWebhookFailuresCount.yml create mode 100644 doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.GatewayServer.MTLSAuthentication.yml create mode 100644 doc/data/api/tti.lorawan.v3/messages/Configuration.Cluster.GatewayServer.yml create mode 100644 doc/data/api/tti.lorawan.v3/messages/ResendAdminValidationRequest.yml create mode 100644 doc/data/api/tti.lorawan.v3/services/TenantAccess.yml rename doc/data/api/{tti.lorawan.v3 => ttn.lorawan.v3}/messages/GatewayToken.Payload.yml (83%) rename doc/data/api/{tti.lorawan.v3 => ttn.lorawan.v3}/messages/GatewayToken.yml (100%) create mode 100644 doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.TenantRegistration.ContactInfoValidation.yml create mode 100644 doc/data/api/ttn.lorawan.v3/messages/IsConfiguration.TenantRegistration.yml diff --git a/doc/config/_default/config.toml b/doc/config/_default/config.toml index f9b664067e..67ce5ea968 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.31.1" [markup] [markup.goldmark] 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..c1b31b34f8 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 @@ -8,6 +8,16 @@ All meaningful changes to templates are documented in this file. ## Unreleased +## 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/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..148110880b --- /dev/null +++ b/doc/content/whats-new/3.31.1.md @@ -0,0 +1,13 @@ +--- +date: 2024-08-05T09:19:00Z +title: "3.31.1" +featured: { + added: [], + changed: [], + fixed: [] +} +--- + +### Changed + +- Gateway ID and device ID are not autogenerated and prefilled anymore. 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/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/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/tts.swagger.json b/doc/data/api/tts.swagger.json index 00e494a5fd..5ab3266170 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.31.1" }, "paths": { "/alerts/notifications/profiles": { @@ -91741,7 +91741,54 @@ } }, "error": { - "$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" + } + } } } }, @@ -157096,251 +157143,298 @@ } }, "error": { - "$ref": "#/definitions/v3ErrorDetails" - } - } - }, - "downlink_nack": { - "type": "object", - "properties": { - "class_b_c": { + "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": { - "absolute_time": { - "description": "Absolute time when the downlink message should be transmitted.\nThis requires the gateway to have GPS time synchronization.\nIf the time is in the past or if there is a scheduling conflict, the downlink message fails.\nIf null, the time is selected based on slot availability. This is recommended in class B mode.", - "type": "string", - "format": "date-time" + "attributes": { + "description": "Attributes that should be filled into the message format. Any extra attributes\ncan be displayed as error details.", + "type": "object" }, - "gateways": { - "description": "Possible gateway identifiers, antenna index, and group index to use for this downlink message.\nThe Network Server selects one of these gateways for downlink, based on connectivity, signal quality, channel utilization and an available slot.\nIf none of the gateways can be selected, the downlink message fails.\nIf empty, a gateway and antenna is selected automatically from the gateways seen in recent uplinks.\nIf group index is set, gateways will be grouped by the index for the Network Server to select one gateway per group.", - "type": "array", - "items": { - "type": "object", - "properties": { - "antenna_index": { - "type": "integer", - "format": "int64" - }, - "gateway_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" - } - } - }, - "group_index": { - "type": "integer", - "format": "int64" - } - } - } - } - } - }, - "confirmed": { - "type": "boolean" - }, - "confirmed_retry": { - "type": "object", - "properties": { - "attempt": { - "description": "The number of attempted confirmed downlink acknowledgements.", - "type": "integer", - "format": "int64" + "cause": { + "description": "The error that caused this error.", + "$ref": "#/definitions/v3ErrorDetails" }, - "max_attempts": { - "description": "The maximum number of confirmed downlink acknowledgement attempts.\nIf null, the Application Server configuration is used instead.", + "code": { + "description": "The status code of the error.", "type": "integer", "format": "int64" - } - } - }, - "correlation_ids": { - "type": "array", - "items": { - "type": "string" - } - }, - "decoded_payload": { - "description": "The decoded frame payload of the downlink message.\nWhen scheduling downlink with a message processor configured for the end device (see formatters) or application (see default_formatters),\nthis fields acts as input for the downlink encoder, and the output is set to frm_payload.\nWhen reading downlink (listing the queue, downlink message events, etc), this fields acts as output of the downlink decoder, and the input is frm_payload.", - "type": "object" - }, - "decoded_payload_warnings": { - "description": "Warnings generated by the message processor while encoding frm_payload (scheduling downlink) or decoding the frm_payload (reading downlink).", - "type": "array", - "items": { - "type": "string" - } - }, - "f_cnt": { - "type": "integer", - "format": "int64" - }, - "f_port": { - "type": "integer", - "format": "int64" - }, - "frm_payload": { - "description": "The frame payload of the downlink message.\nThe payload is encrypted if the skip_payload_crypto field of the EndDevice\nis true.", - "type": "string", - "format": "byte" - }, - "priority": { - "type": "string", - "default": "LOWEST", - "enum": [ - "LOWEST", - "LOW", - "BELOW_NORMAL", - "NORMAL", - "ABOVE_NORMAL", - "HIGH", - "HIGHEST" - ] - }, - "session_key_id": { - "description": "Join Server issued identifier for the session keys used by this downlink.", - "type": "string", - "format": "byte" - } - } - }, - "downlink_queue_invalidated": { - "type": "object", - "properties": { - "downlinks": { - "type": "array", - "items": { - "type": "object", - "properties": { - "class_b_c": { - "type": "object", - "properties": { - "absolute_time": { - "description": "Absolute time when the downlink message should be transmitted.\nThis requires the gateway to have GPS time synchronization.\nIf the time is in the past or if there is a scheduling conflict, the downlink message fails.\nIf null, the time is selected based on slot availability. This is recommended in class B mode.", - "type": "string", - "format": "date-time" - }, - "gateways": { - "description": "Possible gateway identifiers, antenna index, and group index to use for this downlink message.\nThe Network Server selects one of these gateways for downlink, based on connectivity, signal quality, channel utilization and an available slot.\nIf none of the gateways can be selected, the downlink message fails.\nIf empty, a gateway and antenna is selected automatically from the gateways seen in recent uplinks.\nIf group index is set, gateways will be grouped by the index for the Network Server to select one gateway per group.", - "type": "array", - "items": { - "type": "object", - "properties": { - "antenna_index": { - "type": "integer", - "format": "int64" - }, - "gateway_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" - } - } - }, - "group_index": { - "type": "integer", - "format": "int64" - } - } - } - } - } - }, - "confirmed": { - "type": "boolean" - }, - "confirmed_retry": { + }, + "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": { - "attempt": { - "description": "The number of attempted confirmed downlink acknowledgements.", - "type": "integer", - "format": "int64" - }, - "max_attempts": { - "description": "The maximum number of confirmed downlink acknowledgement attempts.\nIf null, the Application Server configuration is used instead.", - "type": "integer", - "format": "int64" + "@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" } - } - }, - "correlation_ids": { - "type": "array", - "items": { - "type": "string" - } - }, - "decoded_payload": { - "description": "The decoded frame payload of the downlink message.\nWhen scheduling downlink with a message processor configured for the end device (see formatters) or application (see default_formatters),\nthis fields acts as input for the downlink encoder, and the output is set to frm_payload.\nWhen reading downlink (listing the queue, downlink message events, etc), this fields acts as output of the downlink decoder, and the input is frm_payload.", - "type": "object" - }, - "decoded_payload_warnings": { - "description": "Warnings generated by the message processor while encoding frm_payload (scheduling downlink) or decoding the frm_payload (reading downlink).", - "type": "array", - "items": { - "type": "string" - } - }, - "f_cnt": { - "type": "integer", - "format": "int64" - }, - "f_port": { - "type": "integer", - "format": "int64" - }, - "frm_payload": { - "description": "The frame payload of the downlink message.\nThe payload is encrypted if the skip_payload_crypto field of the EndDevice\nis true.", - "type": "string", - "format": "byte" - }, - "priority": { - "type": "string", - "default": "LOWEST", - "enum": [ - "LOWEST", - "LOW", - "BELOW_NORMAL", - "NORMAL", - "ABOVE_NORMAL", - "HIGH", - "HIGHEST" - ] - }, - "session_key_id": { - "description": "Join Server issued identifier for the session keys used by this downlink.", - "type": "string", - "format": "byte" + }, + "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" } } - }, - "last_f_cnt_down": { - "type": "integer", - "format": "int64" - }, - "session_key_id": { - "type": "string", - "format": "byte" } } }, - "downlink_queued": { + "downlink_nack": { + "type": "object", + "properties": { + "class_b_c": { + "type": "object", + "properties": { + "absolute_time": { + "description": "Absolute time when the downlink message should be transmitted.\nThis requires the gateway to have GPS time synchronization.\nIf the time is in the past or if there is a scheduling conflict, the downlink message fails.\nIf null, the time is selected based on slot availability. This is recommended in class B mode.", + "type": "string", + "format": "date-time" + }, + "gateways": { + "description": "Possible gateway identifiers, antenna index, and group index to use for this downlink message.\nThe Network Server selects one of these gateways for downlink, based on connectivity, signal quality, channel utilization and an available slot.\nIf none of the gateways can be selected, the downlink message fails.\nIf empty, a gateway and antenna is selected automatically from the gateways seen in recent uplinks.\nIf group index is set, gateways will be grouped by the index for the Network Server to select one gateway per group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "antenna_index": { + "type": "integer", + "format": "int64" + }, + "gateway_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" + } + } + }, + "group_index": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "confirmed": { + "type": "boolean" + }, + "confirmed_retry": { + "type": "object", + "properties": { + "attempt": { + "description": "The number of attempted confirmed downlink acknowledgements.", + "type": "integer", + "format": "int64" + }, + "max_attempts": { + "description": "The maximum number of confirmed downlink acknowledgement attempts.\nIf null, the Application Server configuration is used instead.", + "type": "integer", + "format": "int64" + } + } + }, + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "decoded_payload": { + "description": "The decoded frame payload of the downlink message.\nWhen scheduling downlink with a message processor configured for the end device (see formatters) or application (see default_formatters),\nthis fields acts as input for the downlink encoder, and the output is set to frm_payload.\nWhen reading downlink (listing the queue, downlink message events, etc), this fields acts as output of the downlink decoder, and the input is frm_payload.", + "type": "object" + }, + "decoded_payload_warnings": { + "description": "Warnings generated by the message processor while encoding frm_payload (scheduling downlink) or decoding the frm_payload (reading downlink).", + "type": "array", + "items": { + "type": "string" + } + }, + "f_cnt": { + "type": "integer", + "format": "int64" + }, + "f_port": { + "type": "integer", + "format": "int64" + }, + "frm_payload": { + "description": "The frame payload of the downlink message.\nThe payload is encrypted if the skip_payload_crypto field of the EndDevice\nis true.", + "type": "string", + "format": "byte" + }, + "priority": { + "type": "string", + "default": "LOWEST", + "enum": [ + "LOWEST", + "LOW", + "BELOW_NORMAL", + "NORMAL", + "ABOVE_NORMAL", + "HIGH", + "HIGHEST" + ] + }, + "session_key_id": { + "description": "Join Server issued identifier for the session keys used by this downlink.", + "type": "string", + "format": "byte" + } + } + }, + "downlink_queue_invalidated": { + "type": "object", + "properties": { + "downlinks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "class_b_c": { + "type": "object", + "properties": { + "absolute_time": { + "description": "Absolute time when the downlink message should be transmitted.\nThis requires the gateway to have GPS time synchronization.\nIf the time is in the past or if there is a scheduling conflict, the downlink message fails.\nIf null, the time is selected based on slot availability. This is recommended in class B mode.", + "type": "string", + "format": "date-time" + }, + "gateways": { + "description": "Possible gateway identifiers, antenna index, and group index to use for this downlink message.\nThe Network Server selects one of these gateways for downlink, based on connectivity, signal quality, channel utilization and an available slot.\nIf none of the gateways can be selected, the downlink message fails.\nIf empty, a gateway and antenna is selected automatically from the gateways seen in recent uplinks.\nIf group index is set, gateways will be grouped by the index for the Network Server to select one gateway per group.", + "type": "array", + "items": { + "type": "object", + "properties": { + "antenna_index": { + "type": "integer", + "format": "int64" + }, + "gateway_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" + } + } + }, + "group_index": { + "type": "integer", + "format": "int64" + } + } + } + } + } + }, + "confirmed": { + "type": "boolean" + }, + "confirmed_retry": { + "type": "object", + "properties": { + "attempt": { + "description": "The number of attempted confirmed downlink acknowledgements.", + "type": "integer", + "format": "int64" + }, + "max_attempts": { + "description": "The maximum number of confirmed downlink acknowledgement attempts.\nIf null, the Application Server configuration is used instead.", + "type": "integer", + "format": "int64" + } + } + }, + "correlation_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "decoded_payload": { + "description": "The decoded frame payload of the downlink message.\nWhen scheduling downlink with a message processor configured for the end device (see formatters) or application (see default_formatters),\nthis fields acts as input for the downlink encoder, and the output is set to frm_payload.\nWhen reading downlink (listing the queue, downlink message events, etc), this fields acts as output of the downlink decoder, and the input is frm_payload.", + "type": "object" + }, + "decoded_payload_warnings": { + "description": "Warnings generated by the message processor while encoding frm_payload (scheduling downlink) or decoding the frm_payload (reading downlink).", + "type": "array", + "items": { + "type": "string" + } + }, + "f_cnt": { + "type": "integer", + "format": "int64" + }, + "f_port": { + "type": "integer", + "format": "int64" + }, + "frm_payload": { + "description": "The frame payload of the downlink message.\nThe payload is encrypted if the skip_payload_crypto field of the EndDevice\nis true.", + "type": "string", + "format": "byte" + }, + "priority": { + "type": "string", + "default": "LOWEST", + "enum": [ + "LOWEST", + "LOW", + "BELOW_NORMAL", + "NORMAL", + "ABOVE_NORMAL", + "HIGH", + "HIGHEST" + ] + }, + "session_key_id": { + "description": "Join Server issued identifier for the session keys used by this downlink.", + "type": "string", + "format": "byte" + } + } + } + }, + "last_f_cnt_down": { + "type": "integer", + "format": "int64" + }, + "session_key_id": { + "type": "string", + "format": "byte" + } + } + }, + "downlink_queued": { "type": "object", "properties": { "class_b_c": { @@ -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" } } } @@ -246584,6 +246631,19 @@ } } }, + "tenant_registration": { + "type": "object", + "properties": { + "contact_info_validation": { + "type": "object", + "properties": { + "token_ttl": { + "type": "string" + } + } + } + } + }, "user_limits": { "type": "object", "properties": { @@ -321514,12 +321574,12 @@ } } }, - "/noc/application/{application_ids.application_id}/gateways": { + "/noc/application/{application_ids.application_id}/events/forward": { "post": { "tags": [ "Noc" ], - "operationId": "Noc_QueryApplicationGatewaysSeen", + "operationId": "Noc_QueryApplicationEventForwardCount", "parameters": [ { "type": "string", @@ -321532,16 +321592,19 @@ "in": "body", "required": true, "schema": { - "description": "Request for application data in a specific time window.", + "description": "Request for end device data using aggregates by time buckets with a specified interval.", "type": "object", "properties": { "application_ids": { "type": "object" }, - "time_window": { - "description": "Request for data in a specific time window.", + "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" @@ -321562,32 +321625,22 @@ "schema": { "type": "object", "properties": { - "gateways": { + "event_forward_count": { "type": "array", "items": { "type": "object", "properties": { - "best_channel_rssi": { - "type": "number", - "format": "float" - }, - "gateway_id": { + "count": { + "description": "Application Server forwarded events count per event name.", "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" - } + "additionalProperties": { + "type": "string", + "format": "uint64" } }, - "packet_count": { + "time": { "type": "string", - "format": "uint64" + "format": "date-time" } } } @@ -321627,12 +321680,12 @@ } } }, - "/noc/application/{application_ids.application_id}/statistics": { + "/noc/application/{application_ids.application_id}/events/webhook/failure": { "post": { "tags": [ "Noc" ], - "operationId": "Noc_QueryApplicationStatistics", + "operationId": "Noc_QueryApplicationWebhookFailure", "parameters": [ { "type": "string", @@ -321645,16 +321698,19 @@ "in": "body", "required": true, "schema": { - "description": "Request for application data in a specific time window.", + "description": "Request for end device data using aggregates by time buckets with a specified interval.", "type": "object", "properties": { "application_ids": { "type": "object" }, - "time_window": { - "description": "Request for data in a specific time window.", + "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" @@ -321673,76 +321729,18 @@ "200": { "description": "A successful response.", "schema": { - "description": "Application end devices statistics.", "type": "object", "properties": { - "stats": { + "webhook_failure": { "type": "array", "items": { - "description": "Application end devices statistic.", "type": "object", "properties": { - "best_channel_rssi": { - "type": "number", - "format": "float" - }, - "best_gateway_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" - } - } - }, - "end_device_ids": { - "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" - } - } - }, - "last_packet_error_rate": { - "type": "number", - "format": "float" - }, - "last_seen": { + "time": { "type": "string", "format": "date-time" }, - "packet_count": { + "total": { "type": "string", "format": "uint64" } @@ -321784,32 +321782,43 @@ } } }, - "/noc/applications/active": { + "/noc/application/{application_ids.application_id}/events/webhook/failure/ratio": { "post": { "tags": [ "Noc" ], - "operationId": "Noc_QueryApplicationsActive", + "operationId": "Noc_QueryApplicationWebhookFailureToForwardRatio", "parameters": [ { - "description": "Request for data using aggregates by time buckets with a specified interval.", + "type": "string", + "name": "application_ids.application_id", + "in": "path", + "required": true + }, + { "name": "body", "in": "body", "required": true, "schema": { - "description": "Request for data using aggregates by time buckets with a specified interval.", + "description": "Request for application data in a specific time window.", "type": "object", "properties": { - "bucket_interval": { - "type": "string" - }, - "from": { - "type": "string", - "format": "date-time" + "application_ids": { + "type": "object" }, - "to": { - "type": "string", - "format": "date-time" + "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" + } + } } } } @@ -321819,59 +321828,11 @@ "200": { "description": "A successful response.", "schema": { - "description": "Number of entities connected.", "type": "object", "properties": { - "daily_buckets": { - "type": "array", - "items": { - "description": "Number of entities connected in a time bucket.", - "type": "object", - "properties": { - "count": { - "type": "integer", - "format": "int64" - }, - "time": { - "type": "string", - "format": "date-time" - } - } - } - }, - "hourly_buckets": { - "type": "array", - "items": { - "description": "Number of entities connected in a time bucket.", - "type": "object", - "properties": { - "count": { - "type": "integer", - "format": "int64" - }, - "time": { - "type": "string", - "format": "date-time" - } - } - } - }, - "weekly_buckets": { - "type": "array", - "items": { - "description": "Number of entities connected in a time bucket.", - "type": "object", - "properties": { - "count": { - "type": "integer", - "format": "int64" - }, - "time": { - "type": "string", - "format": "date-time" - } - } - } + "webhook_failure_to_forward_ratio": { + "type": "number", + "format": "float" } } } @@ -321908,29 +321869,46 @@ } } }, - "/noc/applications/active-metrics": { + "/noc/application/{application_ids.application_id}/events/webhook/failure/top-five": { "post": { "tags": [ "Noc" ], - "operationId": "Noc_QueryApplicationsActiveMetrics", + "operationId": "Noc_QueryApplicationWebhookFailureTopFive", "parameters": [ { - "description": "Request for data in a specific time window.", + "type": "string", + "name": "application_ids.application_id", + "in": "path", + "required": true + }, + { "name": "body", "in": "body", "required": true, "schema": { - "description": "Request for data in a specific time window.", + "description": "Request for end device data using aggregates by time buckets with a specified interval.", "type": "object", "properties": { - "from": { - "type": "string", - "format": "date-time" + "application_ids": { + "type": "object" }, - "to": { - "type": "string", - "format": "date-time" + "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" + } + } } } } @@ -321940,16 +321918,498 @@ "200": { "description": "A successful response.", "schema": { - "description": "Identifiers of active applications.", "type": "object", "properties": { - "application_ids": { + "counts": { "type": "array", "items": { "type": "object", "properties": { - "application_id": { - "type": "string" + "time": { + "type": "string", + "format": "date-time" + }, + "totals": { + "type": "object", + "additionalProperties": { + "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}/gateways": { + "post": { + "tags": [ + "Noc" + ], + "operationId": "Noc_QueryApplicationGatewaysSeen", + "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": { + "type": "object", + "properties": { + "gateways": { + "type": "array", + "items": { + "type": "object", + "properties": { + "best_channel_rssi": { + "type": "number", + "format": "float" + }, + "gateway_id": { + "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" + } + } + }, + "packet_count": { + "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}/statistics": { + "post": { + "tags": [ + "Noc" + ], + "operationId": "Noc_QueryApplicationStatistics", + "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": "Application end devices statistics.", + "type": "object", + "properties": { + "stats": { + "type": "array", + "items": { + "description": "Application end devices statistic.", + "type": "object", + "properties": { + "best_channel_rssi": { + "type": "number", + "format": "float" + }, + "best_gateway_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" + } + } + }, + "end_device_ids": { + "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" + } + } + }, + "last_packet_error_rate": { + "type": "number", + "format": "float" + }, + "last_seen": { + "type": "string", + "format": "date-time" + }, + "packet_count": { + "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/applications/active": { + "post": { + "tags": [ + "Noc" + ], + "operationId": "Noc_QueryApplicationsActive", + "parameters": [ + { + "description": "Request for data using aggregates by time buckets with a specified interval.", + "name": "body", + "in": "body", + "required": true, + "schema": { + "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": { + "description": "Number of entities connected.", + "type": "object", + "properties": { + "daily_buckets": { + "type": "array", + "items": { + "description": "Number of entities connected in a time bucket.", + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int64" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + } + }, + "hourly_buckets": { + "type": "array", + "items": { + "description": "Number of entities connected in a time bucket.", + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int64" + }, + "time": { + "type": "string", + "format": "date-time" + } + } + } + }, + "weekly_buckets": { + "type": "array", + "items": { + "description": "Number of entities connected in a time bucket.", + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int64" + }, + "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/applications/active-metrics": { + "post": { + "tags": [ + "Noc" + ], + "operationId": "Noc_QueryApplicationsActiveMetrics", + "parameters": [ + { + "description": "Request for data in a specific time window.", + "name": "body", + "in": "body", + "required": true, + "schema": { + "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 applications.", + "type": "object", + "properties": { + "application_ids": { + "type": "array", + "items": { + "type": "object", + "properties": { + "application_id": { + "type": "string" } } } @@ -462862,6 +463322,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 +463624,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 +464683,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 +464985,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 +465838,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 +466140,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 +466639,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 +466941,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 +467611,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 +467913,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 +468407,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 +468709,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 +469256,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 +469558,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 +470064,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": [ @@ -483585,6 +484321,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 +484922,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 +485933,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 +486066,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": { @@ -487748,6 +488545,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 +488617,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 +490473,14 @@ } } }, + "TenantAccessResendAdminValidationBody": { + "type": "object", + "properties": { + "tenant_ids": { + "type": "object" + } + } + }, "TrafficRatesTimeBucketsDirection": { "type": "object", "properties": { @@ -489839,6 +490745,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 +491047,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 +496508,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": { @@ -497809,7 +498787,54 @@ } }, "error": { - "$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" + } + } } } }, @@ -500857,6 +501882,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": { @@ -516128,54 +517236,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" } } } @@ -519396,6 +520457,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 +520759,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": { @@ -600301,6 +601392,19 @@ } } }, + "tenant_registration": { + "type": "object", + "properties": { + "contact_info_validation": { + "type": "object", + "properties": { + "token_ttl": { + "type": "string" + } + } + } + } + }, "user_limits": { "type": "object", "properties": { @@ -601026,6 +602130,19 @@ } } }, + "tenant_registration": { + "type": "object", + "properties": { + "contact_info_validation": { + "type": "object", + "properties": { + "token_ttl": { + "type": "string" + } + } + } + } + }, "user_limits": { "type": "object", "properties": { @@ -654216,6 +655333,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 +655635,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,6 +656174,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": { @@ -655314,6 +656476,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": { @@ -655793,6 +656970,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": { @@ -656080,6 +657272,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": { @@ -659547,6 +660754,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"