Compare commits

...

56 Commits

Author SHA1 Message Date
8c875c3bf1 Bump version to 4.7.0 2024-03-13 10:44:21 +00:00
c815c6be88 Update Rust + dev env. 2024-03-13 09:44:29 +00:00
5f72db234f Updated docker-compose to docker compose (#377) 2024-03-12 11:27:27 +00:00
34ca1c2d6b Hide change password on oAuth2 login. 2024-03-05 10:06:08 +00:00
519f53940e Bump version to 4.7.0-test.4 2024-02-27 16:48:40 +00:00
f816ca469b Update generated api code. 2024-02-27 16:34:31 +00:00
098f8db4c6 Migrate device-sessions from Redis to PostgreSQL.
This migrates the device-sessions from Redis into PostgreSQL. This fixes
a performance issue in case the same DevAddr is reused many times
(e.g. devices rejoining very often or a NetID with small DevAddr space).

There were two issues:

The Redis key containing the DevAddr -> DevEUIs mapping could contain
DevEUIs that no longer used the DevAddr. This mapping would only expire
from the Redis database after none of the devices would use the DevAddr
for more than the configured device_session_ttl.

The other issue with the previous approach was that on for example a
Type 7 NetID, a single DevAddr could be re-used multiple times. As each
device-session could be stored on a different Redis Cluster instance,
there was no option to retrieve all device-sessions at once. Thus a high
re-usage of a single DevAddr would cause an increase in Redis queries.

Both issues are solved by moving the device-session into PostgreSQL
as the DevAddr is a column of the device record and thus filtering on
this DevAddr would always result in the devices using that DevAddr, as
well all device-sessions for a DevAddr can be retrieved by a single
query.

Note that to migrate the device-sessions, you must run:

chirpstack -c path/to/config migrate-device-sessions-to-postgres

A nice side-effect is that a PostgreSQL backup / restore will also
restore the device connectivity.

Closes #362 and #74.
2024-02-27 16:17:15 +00:00
fc30a3b7e5 Add OIDC CustomClaims struct.
This is needed when custom claims are returned that are not used by
ChirpStack, but might be used during user registration.
2024-02-22 13:38:29 +00:00
d599e7a276 Add js context to get_activation api method. 2024-02-06 13:16:26 +00:00
8cde64c4b7 Save metrics in one pipelined Redis query.
This saves the metrics in one pipelined Redis query, rather than one
query per aggregation level. This saves 2 queries per save.
2024-01-31 12:11:54 +00:00
b65faf7b98 Merge deduplication_put and _locked queries.
This merges the deduplication_put and deduplication_locked Redis queries
into a single pipelined query. Simulating 400 uplinks / seconds through
3 gateways (thus 1200 messages / second), and an artificial TCP latency
of 5ms between ChirpStack <> Redis, this reduces the
storage_redis_conn_get_duration_seconds_sum metric by about 50%.

What we are trying to solve here is that under high (simulated) load, we
exhaust the Redis connection pool. This situation gets worse when there
is a significant latency between ChirpStack <> Redis, because the query
takes longer to complete and is reserved from the pool for a longer
time. The result can be that during the de-duplication process, the key
containing the uplink set has already expired before the
deduplicate_collect function is able to get a Redis connection from the
pool.

This query merge is a quick win, because each uplink can be received by
N gateways, thus this merge saves N Redis queries per uplink.
2024-01-31 11:06:03 +00:00
9de86ffdec Track pg and redis get conn metrics.
This data is useful when debugging connection-pool size related issues.
E.g. when more connections are requested than the connection pool allows
then this will result in a longer wait time.
2024-01-31 09:54:00 +00:00
107fbfa7bb Fix setting dev_addr field on ABP activate. 2024-01-25 11:23:33 +00:00
4ce886b21d Bump unsafe-libyaml from 0.2.9 to 0.2.10 (#341)
Bumps [unsafe-libyaml](https://github.com/dtolnay/unsafe-libyaml) from 0.2.9 to 0.2.10.
- [Release notes](https://github.com/dtolnay/unsafe-libyaml/releases)
- [Commits](https://github.com/dtolnay/unsafe-libyaml/compare/0.2.9...0.2.10)

---
updated-dependencies:
- dependency-name: unsafe-libyaml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-12 15:55:03 +00:00
a1c3431719 Bump follow-redirects from 1.15.3 to 1.15.4 in /ui (#353)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.3 to 1.15.4.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.3...v1.15.4)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-12 15:54:33 +00:00
be26e60111 Bump version to 4.7.0-test.3 2024-01-12 09:19:50 +00:00
2e104dc6ef Fix OIDC and oAuth2 logout redirect.
This regression was introduced when implementing the oAuth2 auth
backend. As we are redirecting to an external URL, we should not use
`navigate`.
2024-01-12 09:03:05 +00:00
e1334f647d Bump version to 4.7.0-test.2 2024-01-11 15:42:16 +00:00
769d590fb2 Remove cargo-bitbake dev-dependency.
We no longer need this and it breaks the build as it requires OpenSSL.
2024-01-11 15:26:13 +00:00
cc47958839 Bump version to 4.7.0-test.1 2024-01-11 12:48:18 +00:00
3b7ab175b4 Fix device activation not setting the device class for LoRaWAN 1.0 on ABP. (#344) 2024-01-11 12:39:15 +00:00
f248379259 Fix Chirpstack overwriting user updates by OIDC user provisioning callback (#343)
Co-authored-by: Orne Brocaar <info@brocaar.com>
2024-01-11 12:28:49 +00:00
e379e8738c ui: Fix black bg in jsontree after update. 2023-12-20 13:24:33 +00:00
9f67b9c221 Implement direct redirect for OIDC and OAuth login. 2023-12-19 14:31:21 +00:00
9198d7d51b Implement Clerk as authentication backend (OAuth2). 2023-12-19 13:49:16 +00:00
f45d12519c Update deadpool-redis dependency.
This deprecates the deadpool-redis-cluster crate in favor of the
deadpool-redis crate with cluster feature.
2023-12-18 10:04:05 +00:00
fcd0ef2ca5 Update rcgen dependency. 2023-12-18 09:56:23 +00:00
c62f2b6474 Immediately return PG conn after use.
Same as the previous commit, this will returns the PG connection back to
the pool after usage, avoiding the risk that we are holding the conn
longer than needed.
2023-12-12 11:22:15 +00:00
fccf762c39 Immediately return Redis conn after use.
Before the Redis connection would be returned once variable c went out
of scope, in most cases at the return of the function. This would mean
that during the execution of the remaining code within the function,
the Redis connection would be reserved.

With this change, the Redis connection is immediately returned to the
pool after usage.
2023-12-12 11:02:29 +00:00
f57aa32f23 ui: Update dependencies. 2023-12-11 16:14:13 +00:00
fb29d7f58d Update rdkafka dependency. 2023-12-11 11:37:12 +00:00
f0987af114 Update prometheus-client. 2023-12-11 11:33:19 +00:00
691cee7beb Upgrade jsonwebtoken dependency.
Since v9 setting the audience is mandatory.
2023-12-11 11:23:52 +00:00
0ff05a9285 Update dependencies (cargo update). 2023-12-11 11:10:06 +00:00
2774c51ea2 Refactor client-cert generator to use rustls/rcgen.
This refactors the last bit of code that depends on the OpenSSL C
library. Note that the openssl-probe does not depend on OpenSSL, it only
tries to detect the CA certificate directory on the host system.
2023-12-11 10:55:36 +00:00
fe98673bbb Fix uncommited configuration change. 2023-12-11 10:55:36 +00:00
a0d4e80720 Fix remaining blocking code after async Redis refactor.
This code still used channel.blocking_send(..) and sleep from std::time.
As async anonymous functions are not (yet) supported, this moves the
stream handling into a separate async function.
2023-12-11 10:55:36 +00:00
53a570b0b0 Update httpmock (dev dep) to 0.7.0-rc.1.
This version removes the isahc depencency, which causes openssl to be
added as a dependency. Version 0.7 makes this dependency optional.
2023-12-11 10:55:36 +00:00
5108f4451c Implement MQTT shared-subscription for gw backend. 2023-12-11 10:55:36 +00:00
5b6d037469 Refactor gateway MQTT backend to use rumqttc. 2023-12-11 10:55:36 +00:00
ed06de231e Refactor getting PostgreSQL ca certs. 2023-12-11 10:55:36 +00:00
17f0d8c495 Refactor MQTT integration to use rumqttc. 2023-12-11 10:55:36 +00:00
345d0d8462 Refactor code to use async redis. 2023-12-11 10:55:36 +00:00
8e2eda3d5b Refactor code to use diesel-async.
This still depends on unreleased diesel and diesel-async code. As soon
as new diesel and diesel-async code has been released, we can remove
the [patch.crates-io] from Cargo.toml.
2023-12-11 10:55:35 +00:00
3f57609981 Update code examples. 2023-12-07 09:43:57 +00:00
8e3f2aa3d2 Bump chirpstack_integration version. 2023-12-07 09:22:19 +00:00
f647949c05 Bump version to 4.6.0 2023-12-07 09:13:36 +00:00
20e28407d0 Bump version to 4.6.0-test.4 2023-11-28 13:01:40 +00:00
1a153b01f4 Change v4_migrate default to false.
This flag helps to migrate from v3 to v4 and adds a compatibility layer
to support ChirpStack Gateway Bridge v3.14+. The plan was to default
this to false in an earlier release, but this change never happened.
2023-11-27 09:09:37 +00:00
1b0deedb64 ui: Update dependencies. 2023-11-23 15:54:00 +00:00
20ab51052d Update dependencies. 2023-11-23 15:27:20 +00:00
8797df2e05 Return err if ThingsBoardAccessToken is missing.
Before this would default to an empty string, which would return in an
invalid URL.

Fixes #277.
2023-11-23 15:14:40 +00:00
687d0b1c62 Add assume_email_verified option for OIDC.
Fixes #302.
2023-11-23 15:05:27 +00:00
0f9674ec0a Change log from warn > debug.
This was changed from error to warn, but a debug is better as there is
not really something to warn the user about and with many devices
this might become very noisy.
2023-11-23 13:25:06 +00:00
8e6079ec9c Fix sending empty downlink to Relay (adr_ack_req=true).
In case a Relay would send an uplink with adr_ack_req=true, this would
not result in an empty downlink in case there is no downlink to relay
back to the relay end-device.
2023-11-23 13:10:10 +00:00
3538145e3d Add allow roaming option to device-profile. 2023-11-23 08:53:47 +00:00
286 changed files with 19573 additions and 15141 deletions

View File

@ -32,7 +32,7 @@ jobs:
key: ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.lock') }}
-
name: Start dependency services
run: docker-compose up -d
run: docker compose up -d
-
name: Build UI
run: make build-ui

1985
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -13,3 +13,10 @@ members = [
opt-level = 'z'
lto = true
codegen-units = 1
[patch.crates-io]
# Remove if diesel > 2.1.4
diesel = { git = "https://github.com/diesel-rs/diesel.git", rev = "566dcccc6df6adb6ceddef8df5e1806e2a065c40" }
# Remove if diesel-async > 0.4.1
diesel-async = { git = "https://github.com/weiznich/diesel_async.git", rev = "017ebe2fb7a2709ab5db92148dea5ce812a35e09" }

View File

@ -9,7 +9,6 @@ dev-dependencies:
cargo install cross --version 0.2.5
cargo install diesel_cli --version 2.1.0 --no-default-features --features postgres
cargo install cargo-deb --version 1.43.1
cargo install cargo-bitbake --version 0.3.16
cargo install cargo-generate-rpm --version 0.12.1
# Set the versions
@ -19,6 +18,7 @@ version:
sed -i 's/^version.*/version = "$(VERSION)"/g' ./backend/Cargo.toml
sed -i 's/^version.*/version = "$(VERSION)"/g' ./lrwn/Cargo.toml
sed -i 's/^version.*/version = "$(VERSION)"/g' ./lrwn-filters/Cargo.toml
sed -i 's/^version.*/version = "$(VERSION)"/g' ./chirpstack-integration/Cargo.toml
sed -i 's/"version.*/"version": "$(VERSION)",/g' ./ui/package.json
sed -i 's/"version.*/"version": "$(VERSION)",/g' ./api/grpc-web/package.json
sed -i 's/"version.*/"version": "$(VERSION)",/g' ./api/js/package.json
@ -40,7 +40,7 @@ api: version
# Builds the UI.
build-ui:
docker-compose run --rm --no-deps chirpstack-ui make build
docker compose run --rm --no-deps chirpstack-ui make build
# Enter the devshell.
devshell:
@ -48,11 +48,11 @@ devshell:
# Enters the Docker devshell for ChirpStack development.
docker-devshell:
docker-compose run --rm --service-ports --name chirpstack chirpstack
docker compose run --rm --service-ports --name chirpstack chirpstack
# Enters the devshell for ChirpStack UI development.
docker-devshell-ui:
docker-compose run --rm --service-ports --name chirpstack-ui chirpstack-ui bash
docker compose run --rm --service-ports --name chirpstack-ui chirpstack-ui bash
# Runs the tests
test:

View File

@ -76,7 +76,7 @@ to be running before you can run the tests. You need to start these services
manually if you started the development shell using `nix-shell`:
```bash
docker-compose up -d
docker compose up -d
```
#### Run tests

20
api/Makefile vendored
View File

@ -1,31 +1,31 @@
.PHONY: rust grpc-web go js python md java kotlin csharp
all:
docker-compose up
docker compose up
rust:
docker-compose run --rm chirpstack-api-rust
docker compose run --rm chirpstack-api-rust
grpc-web:
docker-compose run --rm chirpstack-api-grpc-web
docker compose run --rm chirpstack-api-grpc-web
go:
docker-compose run --rm chirpstack-api-go
docker compose run --rm chirpstack-api-go
js:
docker-compose run --rm chirpstack-api-js
docker compose run --rm chirpstack-api-js
python:
docker-compose run --rm chirpstack-api-python
docker compose run --rm chirpstack-api-python
md:
docker-compose run --rm chirpstack-api-md
docker compose run --rm chirpstack-api-md
java:
docker-compose run --rm chirpstack-api-java
docker compose run --rm chirpstack-api-java
kotlin:
docker-compose run --rm chirpstack-api-kotlin
docker compose run --rm chirpstack-api-kotlin
csharp:
docker-compose run --rm chirpstack-csharp
docker compose run --rm chirpstack-csharp

View File

@ -77,99 +77,100 @@ namespace Chirpstack.Api {
"dGVEZXZpY2VSZXF1ZXN0EjAKEWRldmljZV9hY3RpdmF0aW9uGAEgASgLMhUu",
"YXBpLkRldmljZUFjdGl2YXRpb24iKgoXRGVhY3RpdmF0ZURldmljZVJlcXVl",
"c3QSDwoHZGV2X2V1aRgBIAEoCSItChpHZXREZXZpY2VBY3RpdmF0aW9uUmVx",
"dWVzdBIPCgdkZXZfZXVpGAEgASgJIk8KG0dldERldmljZUFjdGl2YXRpb25S",
"ZXNwb25zZRIwChFkZXZpY2VfYWN0aXZhdGlvbhgBIAEoCzIVLmFwaS5EZXZp",
"Y2VBY3RpdmF0aW9uIioKF0dldFJhbmRvbURldkFkZHJSZXF1ZXN0Eg8KB2Rl",
"dl9ldWkYASABKAkiLAoYR2V0UmFuZG9tRGV2QWRkclJlc3BvbnNlEhAKCGRl",
"dl9hZGRyGAEgASgJIqgBChdHZXREZXZpY2VNZXRyaWNzUmVxdWVzdBIPCgdk",
"ZXZfZXVpGAEgASgJEikKBXN0YXJ0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVm",
"LlRpbWVzdGFtcBInCgNlbmQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGlt",
"ZXN0YW1wEigKC2FnZ3JlZ2F0aW9uGAQgASgOMhMuY29tbW9uLkFnZ3JlZ2F0",
"aW9uIpMCChhHZXREZXZpY2VNZXRyaWNzUmVzcG9uc2USOwoHbWV0cmljcxgB",
"IAMoCzIqLmFwaS5HZXREZXZpY2VNZXRyaWNzUmVzcG9uc2UuTWV0cmljc0Vu",
"dHJ5EjkKBnN0YXRlcxgCIAMoCzIpLmFwaS5HZXREZXZpY2VNZXRyaWNzUmVz",
"cG9uc2UuU3RhdGVzRW50cnkaPgoMTWV0cmljc0VudHJ5EgsKA2tleRgBIAEo",
"CRIdCgV2YWx1ZRgCIAEoCzIOLmNvbW1vbi5NZXRyaWM6AjgBGj8KC1N0YXRl",
"c0VudHJ5EgsKA2tleRgBIAEoCRIfCgV2YWx1ZRgCIAEoCzIQLmFwaS5EZXZp",
"Y2VTdGF0ZToCOAEiKgoLRGV2aWNlU3RhdGUSDAoEbmFtZRgCIAEoCRINCgV2",
"YWx1ZRgDIAEoCSKsAQobR2V0RGV2aWNlTGlua01ldHJpY3NSZXF1ZXN0Eg8K",
"B2Rldl9ldWkYASABKAkSKQoFc3RhcnQYAiABKAsyGi5nb29nbGUucHJvdG9i",
"dWYuVGltZXN0YW1wEicKA2VuZBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5U",
"aW1lc3RhbXASKAoLYWdncmVnYXRpb24YBCABKA4yEy5jb21tb24uQWdncmVn",
"YXRpb24i+wEKHEdldERldmljZUxpbmtNZXRyaWNzUmVzcG9uc2USIgoKcnhf",
"cGFja2V0cxgBIAEoCzIOLmNvbW1vbi5NZXRyaWMSHwoHZ3dfcnNzaRgCIAEo",
"CzIOLmNvbW1vbi5NZXRyaWMSHgoGZ3dfc25yGAMgASgLMg4uY29tbW9uLk1l",
"dHJpYxIrChNyeF9wYWNrZXRzX3Blcl9mcmVxGAQgASgLMg4uY29tbW9uLk1l",
"dHJpYxIpChFyeF9wYWNrZXRzX3Blcl9kchgFIAEoCzIOLmNvbW1vbi5NZXRy",
"aWMSHgoGZXJyb3JzGAYgASgLMg4uY29tbW9uLk1ldHJpYyLGAQoPRGV2aWNl",
"UXVldWVJdGVtEgoKAmlkGAEgASgJEg8KB2Rldl9ldWkYAiABKAkSEQoJY29u",
"ZmlybWVkGAMgASgIEg4KBmZfcG9ydBgEIAEoDRIMCgRkYXRhGAUgASgMEicK",
"Bm9iamVjdBgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSEgoKaXNf",
"cGVuZGluZxgHIAEoCBISCgpmX2NudF9kb3duGAggASgNEhQKDGlzX2VuY3J5",
"cHRlZBgJIAEoCCJJCh1FbnF1ZXVlRGV2aWNlUXVldWVJdGVtUmVxdWVzdBIo",
"CgpxdWV1ZV9pdGVtGAEgASgLMhQuYXBpLkRldmljZVF1ZXVlSXRlbSIsCh5F",
"bnF1ZXVlRGV2aWNlUXVldWVJdGVtUmVzcG9uc2USCgoCaWQYASABKAkiKgoX",
"Rmx1c2hEZXZpY2VRdWV1ZVJlcXVlc3QSDwoHZGV2X2V1aRgBIAEoCSJBChpH",
"ZXREZXZpY2VRdWV1ZUl0ZW1zUmVxdWVzdBIPCgdkZXZfZXVpGAEgASgJEhIK",
"CmNvdW50X29ubHkYAiABKAgiWAobR2V0RGV2aWNlUXVldWVJdGVtc1Jlc3Bv",
"bnNlEhMKC3RvdGFsX2NvdW50GAEgASgNEiQKBnJlc3VsdBgCIAMoCzIULmFw",
"aS5EZXZpY2VRdWV1ZUl0ZW0iKAoVRmx1c2hEZXZOb25jZXNSZXF1ZXN0Eg8K",
"B2Rldl9ldWkYASABKAkiLwocR2V0RGV2aWNlTmV4dEZDbnREb3duUmVxdWVz",
"dBIPCgdkZXZfZXVpGAEgASgJIjMKHUdldERldmljZU5leHRGQ250RG93blJl",
"c3BvbnNlEhIKCmZfY250X2Rvd24YASABKA0y4hEKDURldmljZVNlcnZpY2US",
"UwoGQ3JlYXRlEhguYXBpLkNyZWF0ZURldmljZVJlcXVlc3QaFi5nb29nbGUu",
"cHJvdG9idWYuRW1wdHkiF4LT5JMCESIML2FwaS9kZXZpY2VzOgEqElQKA0dl",
"dBIVLmFwaS5HZXREZXZpY2VSZXF1ZXN0GhYuYXBpLkdldERldmljZVJlc3Bv",
"bnNlIh6C0+STAhgSFi9hcGkvZGV2aWNlcy97ZGV2X2V1aX0SZAoGVXBkYXRl",
"EhguYXBpLlVwZGF0ZURldmljZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu",
"RW1wdHkiKILT5JMCIhodL2FwaS9kZXZpY2VzL3tkZXZpY2UuZGV2X2V1aX06",
"ASoSWgoGRGVsZXRlEhguYXBpLkRlbGV0ZURldmljZVJlcXVlc3QaFi5nb29n",
"bGUucHJvdG9idWYuRW1wdHkiHoLT5JMCGCoWL2FwaS9kZXZpY2VzL3tkZXZf",
"ZXVpfRJPCgRMaXN0EhcuYXBpLkxpc3REZXZpY2VzUmVxdWVzdBoYLmFwaS5M",
"aXN0RGV2aWNlc1Jlc3BvbnNlIhSC0+STAg4SDC9hcGkvZGV2aWNlcxJ2CgpD",
"cmVhdGVLZXlzEhwuYXBpLkNyZWF0ZURldmljZUtleXNSZXF1ZXN0GhYuZ29v",
"Z2xlLnByb3RvYnVmLkVtcHR5IjKC0+STAiwiJy9hcGkvZGV2aWNlcy97ZGV2",
"aWNlX2tleXMuZGV2X2V1aX0va2V5czoBKhJlCgdHZXRLZXlzEhkuYXBpLkdl",
"dERldmljZUtleXNSZXF1ZXN0GhouYXBpLkdldERldmljZUtleXNSZXNwb25z",
"ZSIjgtPkkwIdEhsvYXBpL2RldmljZXMve2Rldl9ldWl9L2tleXMSdgoKVXBk",
"YXRlS2V5cxIcLmFwaS5VcGRhdGVEZXZpY2VLZXlzUmVxdWVzdBoWLmdvb2ds",
"ZS5wcm90b2J1Zi5FbXB0eSIygtPkkwIsGicvYXBpL2RldmljZXMve2Rldmlj",
"ZV9rZXlzLmRldl9ldWl9L2tleXM6ASoSZwoKRGVsZXRlS2V5cxIcLmFwaS5E",
"ZWxldGVEZXZpY2VLZXlzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0",
"eSIjgtPkkwIdKhsvYXBpL2RldmljZXMve2Rldl9ldWl9L2tleXMSbwoORmx1",
"c2hEZXZOb25jZXMSGi5hcGkuRmx1c2hEZXZOb25jZXNSZXF1ZXN0GhYuZ29v",
"Z2xlLnByb3RvYnVmLkVtcHR5IimC0+STAiMqIS9hcGkvZGV2aWNlcy97ZGV2",
"X2V1aX0vZGV2LW5vbmNlcxJ8CghBY3RpdmF0ZRIaLmFwaS5BY3RpdmF0ZURl",
"dmljZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiPILT5JMCNiIx",
"L2FwaS9kZXZpY2VzL3tkZXZpY2VfYWN0aXZhdGlvbi5kZXZfZXVpfS9hY3Rp",
"dmF0ZToBKhJtCgpEZWFjdGl2YXRlEhwuYXBpLkRlYWN0aXZhdGVEZXZpY2VS",
"dWVzdBIPCgdkZXZfZXVpGAEgASgJIocBChtHZXREZXZpY2VBY3RpdmF0aW9u",
"UmVzcG9uc2USMAoRZGV2aWNlX2FjdGl2YXRpb24YASABKAsyFS5hcGkuRGV2",
"aWNlQWN0aXZhdGlvbhI2ChNqb2luX3NlcnZlcl9jb250ZXh0GAIgASgLMhku",
"Y29tbW9uLkpvaW5TZXJ2ZXJDb250ZXh0IioKF0dldFJhbmRvbURldkFkZHJS",
"ZXF1ZXN0Eg8KB2Rldl9ldWkYASABKAkiLAoYR2V0UmFuZG9tRGV2QWRkclJl",
"c3BvbnNlEhAKCGRldl9hZGRyGAEgASgJIqgBChdHZXREZXZpY2VNZXRyaWNz",
"UmVxdWVzdBIPCgdkZXZfZXVpGAEgASgJEikKBXN0YXJ0GAIgASgLMhouZ29v",
"Z2xlLnByb3RvYnVmLlRpbWVzdGFtcBInCgNlbmQYAyABKAsyGi5nb29nbGUu",
"cHJvdG9idWYuVGltZXN0YW1wEigKC2FnZ3JlZ2F0aW9uGAQgASgOMhMuY29t",
"bW9uLkFnZ3JlZ2F0aW9uIpMCChhHZXREZXZpY2VNZXRyaWNzUmVzcG9uc2US",
"OwoHbWV0cmljcxgBIAMoCzIqLmFwaS5HZXREZXZpY2VNZXRyaWNzUmVzcG9u",
"c2UuTWV0cmljc0VudHJ5EjkKBnN0YXRlcxgCIAMoCzIpLmFwaS5HZXREZXZp",
"Y2VNZXRyaWNzUmVzcG9uc2UuU3RhdGVzRW50cnkaPgoMTWV0cmljc0VudHJ5",
"EgsKA2tleRgBIAEoCRIdCgV2YWx1ZRgCIAEoCzIOLmNvbW1vbi5NZXRyaWM6",
"AjgBGj8KC1N0YXRlc0VudHJ5EgsKA2tleRgBIAEoCRIfCgV2YWx1ZRgCIAEo",
"CzIQLmFwaS5EZXZpY2VTdGF0ZToCOAEiKgoLRGV2aWNlU3RhdGUSDAoEbmFt",
"ZRgCIAEoCRINCgV2YWx1ZRgDIAEoCSKsAQobR2V0RGV2aWNlTGlua01ldHJp",
"Y3NSZXF1ZXN0Eg8KB2Rldl9ldWkYASABKAkSKQoFc3RhcnQYAiABKAsyGi5n",
"b29nbGUucHJvdG9idWYuVGltZXN0YW1wEicKA2VuZBgDIAEoCzIaLmdvb2ds",
"ZS5wcm90b2J1Zi5UaW1lc3RhbXASKAoLYWdncmVnYXRpb24YBCABKA4yEy5j",
"b21tb24uQWdncmVnYXRpb24i+wEKHEdldERldmljZUxpbmtNZXRyaWNzUmVz",
"cG9uc2USIgoKcnhfcGFja2V0cxgBIAEoCzIOLmNvbW1vbi5NZXRyaWMSHwoH",
"Z3dfcnNzaRgCIAEoCzIOLmNvbW1vbi5NZXRyaWMSHgoGZ3dfc25yGAMgASgL",
"Mg4uY29tbW9uLk1ldHJpYxIrChNyeF9wYWNrZXRzX3Blcl9mcmVxGAQgASgL",
"Mg4uY29tbW9uLk1ldHJpYxIpChFyeF9wYWNrZXRzX3Blcl9kchgFIAEoCzIO",
"LmNvbW1vbi5NZXRyaWMSHgoGZXJyb3JzGAYgASgLMg4uY29tbW9uLk1ldHJp",
"YyLGAQoPRGV2aWNlUXVldWVJdGVtEgoKAmlkGAEgASgJEg8KB2Rldl9ldWkY",
"AiABKAkSEQoJY29uZmlybWVkGAMgASgIEg4KBmZfcG9ydBgEIAEoDRIMCgRk",
"YXRhGAUgASgMEicKBm9iamVjdBgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5T",
"dHJ1Y3QSEgoKaXNfcGVuZGluZxgHIAEoCBISCgpmX2NudF9kb3duGAggASgN",
"EhQKDGlzX2VuY3J5cHRlZBgJIAEoCCJJCh1FbnF1ZXVlRGV2aWNlUXVldWVJ",
"dGVtUmVxdWVzdBIoCgpxdWV1ZV9pdGVtGAEgASgLMhQuYXBpLkRldmljZVF1",
"ZXVlSXRlbSIsCh5FbnF1ZXVlRGV2aWNlUXVldWVJdGVtUmVzcG9uc2USCgoC",
"aWQYASABKAkiKgoXRmx1c2hEZXZpY2VRdWV1ZVJlcXVlc3QSDwoHZGV2X2V1",
"aRgBIAEoCSJBChpHZXREZXZpY2VRdWV1ZUl0ZW1zUmVxdWVzdBIPCgdkZXZf",
"ZXVpGAEgASgJEhIKCmNvdW50X29ubHkYAiABKAgiWAobR2V0RGV2aWNlUXVl",
"dWVJdGVtc1Jlc3BvbnNlEhMKC3RvdGFsX2NvdW50GAEgASgNEiQKBnJlc3Vs",
"dBgCIAMoCzIULmFwaS5EZXZpY2VRdWV1ZUl0ZW0iKAoVRmx1c2hEZXZOb25j",
"ZXNSZXF1ZXN0Eg8KB2Rldl9ldWkYASABKAkiLwocR2V0RGV2aWNlTmV4dEZD",
"bnREb3duUmVxdWVzdBIPCgdkZXZfZXVpGAEgASgJIjMKHUdldERldmljZU5l",
"eHRGQ250RG93blJlc3BvbnNlEhIKCmZfY250X2Rvd24YASABKA0y4hEKDURl",
"dmljZVNlcnZpY2USUwoGQ3JlYXRlEhguYXBpLkNyZWF0ZURldmljZVJlcXVl",
"c3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiF4LT5JMCESIML2FwaS9kZXZp",
"Y2VzOgEqElQKA0dldBIVLmFwaS5HZXREZXZpY2VSZXF1ZXN0GhYuYXBpLkdl",
"dERldmljZVJlc3BvbnNlIh6C0+STAhgSFi9hcGkvZGV2aWNlcy97ZGV2X2V1",
"aX0SZAoGVXBkYXRlEhguYXBpLlVwZGF0ZURldmljZVJlcXVlc3QaFi5nb29n",
"bGUucHJvdG9idWYuRW1wdHkiKILT5JMCIhodL2FwaS9kZXZpY2VzL3tkZXZp",
"Y2UuZGV2X2V1aX06ASoSWgoGRGVsZXRlEhguYXBpLkRlbGV0ZURldmljZVJl",
"cXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiHoLT5JMCGCoWL2FwaS9k",
"ZXZpY2VzL3tkZXZfZXVpfRJPCgRMaXN0EhcuYXBpLkxpc3REZXZpY2VzUmVx",
"dWVzdBoYLmFwaS5MaXN0RGV2aWNlc1Jlc3BvbnNlIhSC0+STAg4SDC9hcGkv",
"ZGV2aWNlcxJ2CgpDcmVhdGVLZXlzEhwuYXBpLkNyZWF0ZURldmljZUtleXNS",
"ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjKC0+STAiwiJy9hcGkv",
"ZGV2aWNlcy97ZGV2aWNlX2tleXMuZGV2X2V1aX0va2V5czoBKhJlCgdHZXRL",
"ZXlzEhkuYXBpLkdldERldmljZUtleXNSZXF1ZXN0GhouYXBpLkdldERldmlj",
"ZUtleXNSZXNwb25zZSIjgtPkkwIdEhsvYXBpL2RldmljZXMve2Rldl9ldWl9",
"L2tleXMSdgoKVXBkYXRlS2V5cxIcLmFwaS5VcGRhdGVEZXZpY2VLZXlzUmVx",
"dWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIygtPkkwIsGicvYXBpL2Rl",
"dmljZXMve2RldmljZV9rZXlzLmRldl9ldWl9L2tleXM6ASoSZwoKRGVsZXRl",
"S2V5cxIcLmFwaS5EZWxldGVEZXZpY2VLZXlzUmVxdWVzdBoWLmdvb2dsZS5w",
"cm90b2J1Zi5FbXB0eSIjgtPkkwIdKhsvYXBpL2RldmljZXMve2Rldl9ldWl9",
"L2tleXMSbwoORmx1c2hEZXZOb25jZXMSGi5hcGkuRmx1c2hEZXZOb25jZXNS",
"ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IimC0+STAiMqIS9hcGkv",
"ZGV2aWNlcy97ZGV2X2V1aX0vYWN0aXZhdGlvbhJ9Cg1HZXRBY3RpdmF0aW9u",
"Eh8uYXBpLkdldERldmljZUFjdGl2YXRpb25SZXF1ZXN0GiAuYXBpLkdldERl",
"dmljZUFjdGl2YXRpb25SZXNwb25zZSIpgtPkkwIjEiEvYXBpL2RldmljZXMv",
"e2Rldl9ldWl9L2FjdGl2YXRpb24SgwEKEEdldFJhbmRvbURldkFkZHISHC5h",
"cGkuR2V0UmFuZG9tRGV2QWRkclJlcXVlc3QaHS5hcGkuR2V0UmFuZG9tRGV2",
"QWRkclJlc3BvbnNlIjKC0+STAiwiKi9hcGkvZGV2aWNlcy97ZGV2X2V1aX0v",
"Z2V0LXJhbmRvbS1kZXYtYWRkchJxCgpHZXRNZXRyaWNzEhwuYXBpLkdldERl",
"dmljZU1ldHJpY3NSZXF1ZXN0Gh0uYXBpLkdldERldmljZU1ldHJpY3NSZXNw",
"b25zZSImgtPkkwIgEh4vYXBpL2RldmljZXMve2Rldl9ldWl9L21ldHJpY3MS",
"ggEKDkdldExpbmtNZXRyaWNzEiAuYXBpLkdldERldmljZUxpbmtNZXRyaWNz",
"UmVxdWVzdBohLmFwaS5HZXREZXZpY2VMaW5rTWV0cmljc1Jlc3BvbnNlIiuC",
"0+STAiUSIy9hcGkvZGV2aWNlcy97ZGV2X2V1aX0vbGluay1tZXRyaWNzEoYB",
"CgdFbnF1ZXVlEiIuYXBpLkVucXVldWVEZXZpY2VRdWV1ZUl0ZW1SZXF1ZXN0",
"GiMuYXBpLkVucXVldWVEZXZpY2VRdWV1ZUl0ZW1SZXNwb25zZSIygtPkkwIs",
"IicvYXBpL2RldmljZXMve3F1ZXVlX2l0ZW0uZGV2X2V1aX0vcXVldWU6ASoS",
"aAoKRmx1c2hRdWV1ZRIcLmFwaS5GbHVzaERldmljZVF1ZXVlUmVxdWVzdBoW",
"Lmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIkgtPkkwIeKhwvYXBpL2RldmljZXMv",
"e2Rldl9ldWl9L3F1ZXVlEnMKCEdldFF1ZXVlEh8uYXBpLkdldERldmljZVF1",
"ZXVlSXRlbXNSZXF1ZXN0GiAuYXBpLkdldERldmljZVF1ZXVlSXRlbXNSZXNw",
"b25zZSIkgtPkkwIeEhwvYXBpL2RldmljZXMve2Rldl9ldWl9L3F1ZXVlEo8B",
"Cg9HZXROZXh0RkNudERvd24SIS5hcGkuR2V0RGV2aWNlTmV4dEZDbnREb3du",
"UmVxdWVzdBoiLmFwaS5HZXREZXZpY2VOZXh0RkNudERvd25SZXNwb25zZSI1",
"gtPkkwIvIiovYXBpL2RldmljZXMve2Rldl9ldWl9L2dldC1uZXh0LWYtY250",
"LWRvd246ASpCYwoRaW8uY2hpcnBzdGFjay5hcGlCC0RldmljZVByb3RvUAFa",
"LmdpdGh1Yi5jb20vY2hpcnBzdGFjay9jaGlycHN0YWNrL2FwaS9nby92NC9h",
"cGmqAg5DaGlycHN0YWNrLkFwaWIGcHJvdG8z"));
"ZGV2aWNlcy97ZGV2X2V1aX0vZGV2LW5vbmNlcxJ8CghBY3RpdmF0ZRIaLmFw",
"aS5BY3RpdmF0ZURldmljZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1w",
"dHkiPILT5JMCNiIxL2FwaS9kZXZpY2VzL3tkZXZpY2VfYWN0aXZhdGlvbi5k",
"ZXZfZXVpfS9hY3RpdmF0ZToBKhJtCgpEZWFjdGl2YXRlEhwuYXBpLkRlYWN0",
"aXZhdGVEZXZpY2VSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IimC",
"0+STAiMqIS9hcGkvZGV2aWNlcy97ZGV2X2V1aX0vYWN0aXZhdGlvbhJ9Cg1H",
"ZXRBY3RpdmF0aW9uEh8uYXBpLkdldERldmljZUFjdGl2YXRpb25SZXF1ZXN0",
"GiAuYXBpLkdldERldmljZUFjdGl2YXRpb25SZXNwb25zZSIpgtPkkwIjEiEv",
"YXBpL2RldmljZXMve2Rldl9ldWl9L2FjdGl2YXRpb24SgwEKEEdldFJhbmRv",
"bURldkFkZHISHC5hcGkuR2V0UmFuZG9tRGV2QWRkclJlcXVlc3QaHS5hcGku",
"R2V0UmFuZG9tRGV2QWRkclJlc3BvbnNlIjKC0+STAiwiKi9hcGkvZGV2aWNl",
"cy97ZGV2X2V1aX0vZ2V0LXJhbmRvbS1kZXYtYWRkchJxCgpHZXRNZXRyaWNz",
"EhwuYXBpLkdldERldmljZU1ldHJpY3NSZXF1ZXN0Gh0uYXBpLkdldERldmlj",
"ZU1ldHJpY3NSZXNwb25zZSImgtPkkwIgEh4vYXBpL2RldmljZXMve2Rldl9l",
"dWl9L21ldHJpY3MSggEKDkdldExpbmtNZXRyaWNzEiAuYXBpLkdldERldmlj",
"ZUxpbmtNZXRyaWNzUmVxdWVzdBohLmFwaS5HZXREZXZpY2VMaW5rTWV0cmlj",
"c1Jlc3BvbnNlIiuC0+STAiUSIy9hcGkvZGV2aWNlcy97ZGV2X2V1aX0vbGlu",
"ay1tZXRyaWNzEoYBCgdFbnF1ZXVlEiIuYXBpLkVucXVldWVEZXZpY2VRdWV1",
"ZUl0ZW1SZXF1ZXN0GiMuYXBpLkVucXVldWVEZXZpY2VRdWV1ZUl0ZW1SZXNw",
"b25zZSIygtPkkwIsIicvYXBpL2RldmljZXMve3F1ZXVlX2l0ZW0uZGV2X2V1",
"aX0vcXVldWU6ASoSaAoKRmx1c2hRdWV1ZRIcLmFwaS5GbHVzaERldmljZVF1",
"ZXVlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIkgtPkkwIeKhwv",
"YXBpL2RldmljZXMve2Rldl9ldWl9L3F1ZXVlEnMKCEdldFF1ZXVlEh8uYXBp",
"LkdldERldmljZVF1ZXVlSXRlbXNSZXF1ZXN0GiAuYXBpLkdldERldmljZVF1",
"ZXVlSXRlbXNSZXNwb25zZSIkgtPkkwIeEhwvYXBpL2RldmljZXMve2Rldl9l",
"dWl9L3F1ZXVlEo8BCg9HZXROZXh0RkNudERvd24SIS5hcGkuR2V0RGV2aWNl",
"TmV4dEZDbnREb3duUmVxdWVzdBoiLmFwaS5HZXREZXZpY2VOZXh0RkNudERv",
"d25SZXNwb25zZSI1gtPkkwIvIiovYXBpL2RldmljZXMve2Rldl9ldWl9L2dl",
"dC1uZXh0LWYtY250LWRvd246ASpCYwoRaW8uY2hpcnBzdGFjay5hcGlCC0Rl",
"dmljZVByb3RvUAFaLmdpdGh1Yi5jb20vY2hpcnBzdGFjay9jaGlycHN0YWNr",
"L2FwaS9nby92NC9hcGmqAg5DaGlycHN0YWNrLkFwaWIGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Chirpstack.Common.CommonReflection.Descriptor, global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.StructReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
@ -193,7 +194,7 @@ namespace Chirpstack.Api {
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.ActivateDeviceRequest), global::Chirpstack.Api.ActivateDeviceRequest.Parser, new[]{ "DeviceActivation" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeactivateDeviceRequest), global::Chirpstack.Api.DeactivateDeviceRequest.Parser, new[]{ "DevEui" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetDeviceActivationRequest), global::Chirpstack.Api.GetDeviceActivationRequest.Parser, new[]{ "DevEui" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetDeviceActivationResponse), global::Chirpstack.Api.GetDeviceActivationResponse.Parser, new[]{ "DeviceActivation" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetDeviceActivationResponse), global::Chirpstack.Api.GetDeviceActivationResponse.Parser, new[]{ "DeviceActivation", "JoinServerContext" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetRandomDevAddrRequest), global::Chirpstack.Api.GetRandomDevAddrRequest.Parser, new[]{ "DevEui" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetRandomDevAddrResponse), global::Chirpstack.Api.GetRandomDevAddrResponse.Parser, new[]{ "DevAddr" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetDeviceMetricsRequest), global::Chirpstack.Api.GetDeviceMetricsRequest.Parser, new[]{ "DevEui", "Start", "End", "Aggregation" }, null, null, null, null),
@ -5865,6 +5866,7 @@ namespace Chirpstack.Api {
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public GetDeviceActivationResponse(GetDeviceActivationResponse other) : this() {
deviceActivation_ = other.deviceActivation_ != null ? other.deviceActivation_.Clone() : null;
joinServerContext_ = other.joinServerContext_ != null ? other.joinServerContext_.Clone() : null;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@ -5889,6 +5891,24 @@ namespace Chirpstack.Api {
}
}
/// <summary>Field number for the "join_server_context" field.</summary>
public const int JoinServerContextFieldNumber = 2;
private global::Chirpstack.Common.JoinServerContext joinServerContext_;
/// <summary>
/// Join-Server context.
/// A non-empty value indicatest that ChirpStack does not have access to
/// the AppSKey and that the encryption / decryption of the payloads is
/// the responsibility of the end-application.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public global::Chirpstack.Common.JoinServerContext JoinServerContext {
get { return joinServerContext_; }
set {
joinServerContext_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
@ -5905,6 +5925,7 @@ namespace Chirpstack.Api {
return true;
}
if (!object.Equals(DeviceActivation, other.DeviceActivation)) return false;
if (!object.Equals(JoinServerContext, other.JoinServerContext)) return false;
return Equals(_unknownFields, other._unknownFields);
}
@ -5913,6 +5934,7 @@ namespace Chirpstack.Api {
public override int GetHashCode() {
int hash = 1;
if (deviceActivation_ != null) hash ^= DeviceActivation.GetHashCode();
if (joinServerContext_ != null) hash ^= JoinServerContext.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@ -5935,6 +5957,10 @@ namespace Chirpstack.Api {
output.WriteRawTag(10);
output.WriteMessage(DeviceActivation);
}
if (joinServerContext_ != null) {
output.WriteRawTag(18);
output.WriteMessage(JoinServerContext);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@ -5949,6 +5975,10 @@ namespace Chirpstack.Api {
output.WriteRawTag(10);
output.WriteMessage(DeviceActivation);
}
if (joinServerContext_ != null) {
output.WriteRawTag(18);
output.WriteMessage(JoinServerContext);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@ -5962,6 +5992,9 @@ namespace Chirpstack.Api {
if (deviceActivation_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(DeviceActivation);
}
if (joinServerContext_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(JoinServerContext);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@ -5980,6 +6013,12 @@ namespace Chirpstack.Api {
}
DeviceActivation.MergeFrom(other.DeviceActivation);
}
if (other.joinServerContext_ != null) {
if (joinServerContext_ == null) {
JoinServerContext = new global::Chirpstack.Common.JoinServerContext();
}
JoinServerContext.MergeFrom(other.JoinServerContext);
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@ -6002,6 +6041,13 @@ namespace Chirpstack.Api {
input.ReadMessage(DeviceActivation);
break;
}
case 18: {
if (joinServerContext_ == null) {
JoinServerContext = new global::Chirpstack.Common.JoinServerContext();
}
input.ReadMessage(JoinServerContext);
break;
}
}
}
#endif
@ -6024,6 +6070,13 @@ namespace Chirpstack.Api {
input.ReadMessage(DeviceActivation);
break;
}
case 18: {
if (joinServerContext_ == null) {
JoinServerContext = new global::Chirpstack.Common.JoinServerContext();
}
input.ReadMessage(JoinServerContext);
break;
}
}
}
}

View File

@ -27,7 +27,7 @@ namespace Chirpstack.Api {
"ChhhcGkvZGV2aWNlX3Byb2ZpbGUucHJvdG8SA2FwaRocZ29vZ2xlL2FwaS9h",
"bm5vdGF0aW9ucy5wcm90bxofZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5w",
"cm90bxobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvGhNjb21tb24vY29t",
"bW9uLnByb3RvIsgOCg1EZXZpY2VQcm9maWxlEgoKAmlkGAEgASgJEhEKCXRl",
"bW9uLnByb3RvIt8OCg1EZXZpY2VQcm9maWxlEgoKAmlkGAEgASgJEhEKCXRl",
"bmFudF9pZBgCIAEoCRIMCgRuYW1lGAMgASgJEhMKC2Rlc2NyaXB0aW9uGBog",
"ASgJEh4KBnJlZ2lvbhgEIAEoDjIOLmNvbW1vbi5SZWdpb24SJwoLbWFjX3Zl",
"cnNpb24YBSABKA4yEi5jb21tb24uTWFjVmVyc2lvbhI2ChNyZWdfcGFyYW1z",
@ -66,68 +66,68 @@ namespace Chirpstack.Api {
"dF9zaXplGDAgASgNEiYKHnJlbGF5X25vdGlmeV9saW1pdF9idWNrZXRfc2l6",
"ZRgxIAEoDRItCiVyZWxheV9nbG9iYWxfdXBsaW5rX2xpbWl0X2J1Y2tldF9z",
"aXplGDIgASgNEicKH3JlbGF5X292ZXJhbGxfbGltaXRfYnVja2V0X3NpemUY",
"MyABKA0aKwoJVGFnc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEo",
"CToCOAEaRQoRTWVhc3VyZW1lbnRzRW50cnkSCwoDa2V5GAEgASgJEh8KBXZh",
"bHVlGAIgASgLMhAuYXBpLk1lYXN1cmVtZW50OgI4ASI/CgtNZWFzdXJlbWVu",
"dBIMCgRuYW1lGAIgASgJEiIKBGtpbmQYAyABKA4yFC5hcGkuTWVhc3VyZW1l",
"bnRLaW5kIt0CChVEZXZpY2VQcm9maWxlTGlzdEl0ZW0SCgoCaWQYASABKAkS",
"LgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3Rh",
"bXASLgoKdXBkYXRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1l",
"c3RhbXASDAoEbmFtZRgEIAEoCRIeCgZyZWdpb24YBSABKA4yDi5jb21tb24u",
"UmVnaW9uEicKC21hY192ZXJzaW9uGAYgASgOMhIuY29tbW9uLk1hY1ZlcnNp",
"b24SNgoTcmVnX3BhcmFtc19yZXZpc2lvbhgHIAEoDjIZLmNvbW1vbi5SZWdQ",
"YXJhbXNSZXZpc2lvbhIVCg1zdXBwb3J0c19vdGFhGAggASgIEhgKEHN1cHBv",
"cnRzX2NsYXNzX2IYCSABKAgSGAoQc3VwcG9ydHNfY2xhc3NfYxgKIAEoCCJI",
"ChpDcmVhdGVEZXZpY2VQcm9maWxlUmVxdWVzdBIqCg5kZXZpY2VfcHJvZmls",
"ZRgBIAEoCzISLmFwaS5EZXZpY2VQcm9maWxlIikKG0NyZWF0ZURldmljZVBy",
"b2ZpbGVSZXNwb25zZRIKCgJpZBgBIAEoCSIlChdHZXREZXZpY2VQcm9maWxl",
"UmVxdWVzdBIKCgJpZBgBIAEoCSKmAQoYR2V0RGV2aWNlUHJvZmlsZVJlc3Bv",
"bnNlEioKDmRldmljZV9wcm9maWxlGAEgASgLMhIuYXBpLkRldmljZVByb2Zp",
"bGUSLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1l",
"c3RhbXASLgoKdXBkYXRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5U",
"aW1lc3RhbXAiSAoaVXBkYXRlRGV2aWNlUHJvZmlsZVJlcXVlc3QSKgoOZGV2",
"aWNlX3Byb2ZpbGUYASABKAsyEi5hcGkuRGV2aWNlUHJvZmlsZSIoChpEZWxl",
"dGVEZXZpY2VQcm9maWxlUmVxdWVzdBIKCgJpZBgBIAEoCSJdChlMaXN0RGV2",
"aWNlUHJvZmlsZXNSZXF1ZXN0Eg0KBWxpbWl0GAEgASgNEg4KBm9mZnNldBgC",
"IAEoDRIOCgZzZWFyY2gYAyABKAkSEQoJdGVuYW50X2lkGAQgASgJIl0KGkxp",
"c3REZXZpY2VQcm9maWxlc1Jlc3BvbnNlEhMKC3RvdGFsX2NvdW50GAEgASgN",
"EioKBnJlc3VsdBgCIAMoCzIaLmFwaS5EZXZpY2VQcm9maWxlTGlzdEl0ZW0i",
"aAomTGlzdERldmljZVByb2ZpbGVBZHJBbGdvcml0aG1zUmVzcG9uc2USEwoL",
"dG90YWxfY291bnQYASABKA0SKQoGcmVzdWx0GAIgAygLMhkuYXBpLkFkckFs",
"Z29yaXRobUxpc3RJdGVtIjAKFEFkckFsZ29yaXRobUxpc3RJdGVtEgoKAmlk",
"GAEgASgJEgwKBG5hbWUYAiABKAkqMQoMQ29kZWNSdW50aW1lEggKBE5PTkUQ",
"ABIPCgtDQVlFTk5FX0xQUBABEgYKAkpTEAIqUAoPTWVhc3VyZW1lbnRLaW5k",
"EgsKB1VOS05PV04QABILCgdDT1VOVEVSEAESDAoIQUJTT0xVVEUQAhIJCgVH",
"QVVHRRADEgoKBlNUUklORxAEKlUKDkNhZFBlcmlvZGljaXR5EgkKBVNFQ18x",
"EAASCgoGTVNfNTAwEAESCgoGTVNfMjUwEAISCgoGTVNfMTAwEAMSCQoFTVNf",
"NTAQBBIJCgVNU18yMBAFKmEKEVNlY29uZENoQWNrT2Zmc2V0EgkKBUtIWl8w",
"EAASCwoHS0haXzIwMBABEgsKB0tIWl80MDAQAhILCgdLSFpfODAwEAMSDAoI",
"S0haXzE2MDAQBBIMCghLSFpfMzIwMBAFKmwKE1JlbGF5TW9kZUFjdGl2YXRp",
"b24SFgoSRElTQUJMRV9SRUxBWV9NT0RFEAASFQoRRU5BQkxFX1JFTEFZX01P",
"REUQARILCgdEWU5BTUlDEAISGQoVRU5EX0RFVklDRV9DT05UUk9MTEVEEAMy",
"uAUKFERldmljZVByb2ZpbGVTZXJ2aWNlEmwKBkNyZWF0ZRIfLmFwaS5DcmVh",
"dGVEZXZpY2VQcm9maWxlUmVxdWVzdBogLmFwaS5DcmVhdGVEZXZpY2VQcm9m",
"aWxlUmVzcG9uc2UiH4LT5JMCGSIUL2FwaS9kZXZpY2UtcHJvZmlsZXM6ASoS",
"ZQoDR2V0EhwuYXBpLkdldERldmljZVByb2ZpbGVSZXF1ZXN0Gh0uYXBpLkdl",
"dERldmljZVByb2ZpbGVSZXNwb25zZSIhgtPkkwIbEhkvYXBpL2RldmljZS1w",
"cm9maWxlcy97aWR9EnYKBlVwZGF0ZRIfLmFwaS5VcGRhdGVEZXZpY2VQcm9m",
"aWxlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIzgtPkkwItGigv",
"YXBpL2RldmljZS1wcm9maWxlcy97ZGV2aWNlX3Byb2ZpbGUuaWR9OgEqEmQK",
"BkRlbGV0ZRIfLmFwaS5EZWxldGVEZXZpY2VQcm9maWxlUmVxdWVzdBoWLmdv",
"b2dsZS5wcm90b2J1Zi5FbXB0eSIhgtPkkwIbKhkvYXBpL2RldmljZS1wcm9m",
"aWxlcy97aWR9EmUKBExpc3QSHi5hcGkuTGlzdERldmljZVByb2ZpbGVzUmVx",
"dWVzdBofLmFwaS5MaXN0RGV2aWNlUHJvZmlsZXNSZXNwb25zZSIcgtPkkwIW",
"EhQvYXBpL2RldmljZS1wcm9maWxlcxKFAQoRTGlzdEFkckFsZ29yaXRobXMS",
"Fi5nb29nbGUucHJvdG9idWYuRW1wdHkaKy5hcGkuTGlzdERldmljZVByb2Zp",
"bGVBZHJBbGdvcml0aG1zUmVzcG9uc2UiK4LT5JMCJRIjL2FwaS9kZXZpY2Ut",
"cHJvZmlsZXMvYWRyLWFsZ29yaXRobXNCagoRaW8uY2hpcnBzdGFjay5hcGlC",
"EkRldmljZVByb2ZpbGVQcm90b1ABWi5naXRodWIuY29tL2NoaXJwc3RhY2sv",
"Y2hpcnBzdGFjay9hcGkvZ28vdjQvYXBpqgIOQ2hpcnBzdGFjay5BcGliBnBy",
"b3RvMw=="));
"MyABKA0SFQoNYWxsb3dfcm9hbWluZxg0IAEoCBorCglUYWdzRW50cnkSCwoD",
"a2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpFChFNZWFzdXJlbWVudHNF",
"bnRyeRILCgNrZXkYASABKAkSHwoFdmFsdWUYAiABKAsyEC5hcGkuTWVhc3Vy",
"ZW1lbnQ6AjgBIj8KC01lYXN1cmVtZW50EgwKBG5hbWUYAiABKAkSIgoEa2lu",
"ZBgDIAEoDjIULmFwaS5NZWFzdXJlbWVudEtpbmQi3QIKFURldmljZVByb2Zp",
"bGVMaXN0SXRlbRIKCgJpZBgBIAEoCRIuCgpjcmVhdGVkX2F0GAIgASgLMhou",
"Z29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAMgASgL",
"MhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIMCgRuYW1lGAQgASgJEh4K",
"BnJlZ2lvbhgFIAEoDjIOLmNvbW1vbi5SZWdpb24SJwoLbWFjX3ZlcnNpb24Y",
"BiABKA4yEi5jb21tb24uTWFjVmVyc2lvbhI2ChNyZWdfcGFyYW1zX3Jldmlz",
"aW9uGAcgASgOMhkuY29tbW9uLlJlZ1BhcmFtc1JldmlzaW9uEhUKDXN1cHBv",
"cnRzX290YWEYCCABKAgSGAoQc3VwcG9ydHNfY2xhc3NfYhgJIAEoCBIYChBz",
"dXBwb3J0c19jbGFzc19jGAogASgIIkgKGkNyZWF0ZURldmljZVByb2ZpbGVS",
"ZXF1ZXN0EioKDmRldmljZV9wcm9maWxlGAEgASgLMhIuYXBpLkRldmljZVBy",
"b2ZpbGUiKQobQ3JlYXRlRGV2aWNlUHJvZmlsZVJlc3BvbnNlEgoKAmlkGAEg",
"ASgJIiUKF0dldERldmljZVByb2ZpbGVSZXF1ZXN0EgoKAmlkGAEgASgJIqYB",
"ChhHZXREZXZpY2VQcm9maWxlUmVzcG9uc2USKgoOZGV2aWNlX3Byb2ZpbGUY",
"ASABKAsyEi5hcGkuRGV2aWNlUHJvZmlsZRIuCgpjcmVhdGVkX2F0GAIgASgL",
"MhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAMg",
"ASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJIChpVcGRhdGVEZXZp",
"Y2VQcm9maWxlUmVxdWVzdBIqCg5kZXZpY2VfcHJvZmlsZRgBIAEoCzISLmFw",
"aS5EZXZpY2VQcm9maWxlIigKGkRlbGV0ZURldmljZVByb2ZpbGVSZXF1ZXN0",
"EgoKAmlkGAEgASgJIl0KGUxpc3REZXZpY2VQcm9maWxlc1JlcXVlc3QSDQoF",
"bGltaXQYASABKA0SDgoGb2Zmc2V0GAIgASgNEg4KBnNlYXJjaBgDIAEoCRIR",
"Cgl0ZW5hbnRfaWQYBCABKAkiXQoaTGlzdERldmljZVByb2ZpbGVzUmVzcG9u",
"c2USEwoLdG90YWxfY291bnQYASABKA0SKgoGcmVzdWx0GAIgAygLMhouYXBp",
"LkRldmljZVByb2ZpbGVMaXN0SXRlbSJoCiZMaXN0RGV2aWNlUHJvZmlsZUFk",
"ckFsZ29yaXRobXNSZXNwb25zZRITCgt0b3RhbF9jb3VudBgBIAEoDRIpCgZy",
"ZXN1bHQYAiADKAsyGS5hcGkuQWRyQWxnb3JpdGhtTGlzdEl0ZW0iMAoUQWRy",
"QWxnb3JpdGhtTGlzdEl0ZW0SCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCSox",
"CgxDb2RlY1J1bnRpbWUSCAoETk9ORRAAEg8KC0NBWUVOTkVfTFBQEAESBgoC",
"SlMQAipQCg9NZWFzdXJlbWVudEtpbmQSCwoHVU5LTk9XThAAEgsKB0NPVU5U",
"RVIQARIMCghBQlNPTFVURRACEgkKBUdBVUdFEAMSCgoGU1RSSU5HEAQqVQoO",
"Q2FkUGVyaW9kaWNpdHkSCQoFU0VDXzEQABIKCgZNU181MDAQARIKCgZNU18y",
"NTAQAhIKCgZNU18xMDAQAxIJCgVNU181MBAEEgkKBU1TXzIwEAUqYQoRU2Vj",
"b25kQ2hBY2tPZmZzZXQSCQoFS0haXzAQABILCgdLSFpfMjAwEAESCwoHS0ha",
"XzQwMBACEgsKB0tIWl84MDAQAxIMCghLSFpfMTYwMBAEEgwKCEtIWl8zMjAw",
"EAUqbAoTUmVsYXlNb2RlQWN0aXZhdGlvbhIWChJESVNBQkxFX1JFTEFZX01P",
"REUQABIVChFFTkFCTEVfUkVMQVlfTU9ERRABEgsKB0RZTkFNSUMQAhIZChVF",
"TkRfREVWSUNFX0NPTlRST0xMRUQQAzK4BQoURGV2aWNlUHJvZmlsZVNlcnZp",
"Y2USbAoGQ3JlYXRlEh8uYXBpLkNyZWF0ZURldmljZVByb2ZpbGVSZXF1ZXN0",
"GiAuYXBpLkNyZWF0ZURldmljZVByb2ZpbGVSZXNwb25zZSIfgtPkkwIZIhQv",
"YXBpL2RldmljZS1wcm9maWxlczoBKhJlCgNHZXQSHC5hcGkuR2V0RGV2aWNl",
"UHJvZmlsZVJlcXVlc3QaHS5hcGkuR2V0RGV2aWNlUHJvZmlsZVJlc3BvbnNl",
"IiGC0+STAhsSGS9hcGkvZGV2aWNlLXByb2ZpbGVzL3tpZH0SdgoGVXBkYXRl",
"Eh8uYXBpLlVwZGF0ZURldmljZVByb2ZpbGVSZXF1ZXN0GhYuZ29vZ2xlLnBy",
"b3RvYnVmLkVtcHR5IjOC0+STAi0aKC9hcGkvZGV2aWNlLXByb2ZpbGVzL3tk",
"ZXZpY2VfcHJvZmlsZS5pZH06ASoSZAoGRGVsZXRlEh8uYXBpLkRlbGV0ZURl",
"dmljZVByb2ZpbGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiGC",
"0+STAhsqGS9hcGkvZGV2aWNlLXByb2ZpbGVzL3tpZH0SZQoETGlzdBIeLmFw",
"aS5MaXN0RGV2aWNlUHJvZmlsZXNSZXF1ZXN0Gh8uYXBpLkxpc3REZXZpY2VQ",
"cm9maWxlc1Jlc3BvbnNlIhyC0+STAhYSFC9hcGkvZGV2aWNlLXByb2ZpbGVz",
"EoUBChFMaXN0QWRyQWxnb3JpdGhtcxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0",
"eRorLmFwaS5MaXN0RGV2aWNlUHJvZmlsZUFkckFsZ29yaXRobXNSZXNwb25z",
"ZSIrgtPkkwIlEiMvYXBpL2RldmljZS1wcm9maWxlcy9hZHItYWxnb3JpdGht",
"c0JqChFpby5jaGlycHN0YWNrLmFwaUISRGV2aWNlUHJvZmlsZVByb3RvUAFa",
"LmdpdGh1Yi5jb20vY2hpcnBzdGFjay9jaGlycHN0YWNrL2FwaS9nby92NC9h",
"cGmqAg5DaGlycHN0YWNrLkFwaWIGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, global::Chirpstack.Common.CommonReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chirpstack.Api.CodecRuntime), typeof(global::Chirpstack.Api.MeasurementKind), typeof(global::Chirpstack.Api.CadPeriodicity), typeof(global::Chirpstack.Api.SecondChAckOffset), typeof(global::Chirpstack.Api.RelayModeActivation), }, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeviceProfile), global::Chirpstack.Api.DeviceProfile.Parser, new[]{ "Id", "TenantId", "Name", "Description", "Region", "MacVersion", "RegParamsRevision", "AdrAlgorithmId", "PayloadCodecRuntime", "PayloadCodecScript", "FlushQueueOnActivate", "UplinkInterval", "DeviceStatusReqInterval", "SupportsOtaa", "SupportsClassB", "SupportsClassC", "ClassBTimeout", "ClassBPingSlotNbK", "ClassBPingSlotDr", "ClassBPingSlotFreq", "ClassCTimeout", "AbpRx1Delay", "AbpRx1DrOffset", "AbpRx2Dr", "AbpRx2Freq", "Tags", "Measurements", "AutoDetectMeasurements", "RegionConfigId", "IsRelay", "IsRelayEd", "RelayEdRelayOnly", "RelayEnabled", "RelayCadPeriodicity", "RelayDefaultChannelIndex", "RelaySecondChannelFreq", "RelaySecondChannelDr", "RelaySecondChannelAckOffset", "RelayEdActivationMode", "RelayEdSmartEnableLevel", "RelayEdBackOff", "RelayEdUplinkLimitBucketSize", "RelayEdUplinkLimitReloadRate", "RelayJoinReqLimitReloadRate", "RelayNotifyLimitReloadRate", "RelayGlobalUplinkLimitReloadRate", "RelayOverallLimitReloadRate", "RelayJoinReqLimitBucketSize", "RelayNotifyLimitBucketSize", "RelayGlobalUplinkLimitBucketSize", "RelayOverallLimitBucketSize" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, }),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeviceProfile), global::Chirpstack.Api.DeviceProfile.Parser, new[]{ "Id", "TenantId", "Name", "Description", "Region", "MacVersion", "RegParamsRevision", "AdrAlgorithmId", "PayloadCodecRuntime", "PayloadCodecScript", "FlushQueueOnActivate", "UplinkInterval", "DeviceStatusReqInterval", "SupportsOtaa", "SupportsClassB", "SupportsClassC", "ClassBTimeout", "ClassBPingSlotNbK", "ClassBPingSlotDr", "ClassBPingSlotFreq", "ClassCTimeout", "AbpRx1Delay", "AbpRx1DrOffset", "AbpRx2Dr", "AbpRx2Freq", "Tags", "Measurements", "AutoDetectMeasurements", "RegionConfigId", "IsRelay", "IsRelayEd", "RelayEdRelayOnly", "RelayEnabled", "RelayCadPeriodicity", "RelayDefaultChannelIndex", "RelaySecondChannelFreq", "RelaySecondChannelDr", "RelaySecondChannelAckOffset", "RelayEdActivationMode", "RelayEdSmartEnableLevel", "RelayEdBackOff", "RelayEdUplinkLimitBucketSize", "RelayEdUplinkLimitReloadRate", "RelayJoinReqLimitReloadRate", "RelayNotifyLimitReloadRate", "RelayGlobalUplinkLimitReloadRate", "RelayOverallLimitReloadRate", "RelayJoinReqLimitBucketSize", "RelayNotifyLimitBucketSize", "RelayGlobalUplinkLimitBucketSize", "RelayOverallLimitBucketSize", "AllowRoaming" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, }),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.Measurement), global::Chirpstack.Api.Measurement.Parser, new[]{ "Name", "Kind" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeviceProfileListItem), global::Chirpstack.Api.DeviceProfileListItem.Parser, new[]{ "Id", "CreatedAt", "UpdatedAt", "Name", "Region", "MacVersion", "RegParamsRevision", "SupportsOtaa", "SupportsClassB", "SupportsClassC" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateDeviceProfileRequest), global::Chirpstack.Api.CreateDeviceProfileRequest.Parser, new[]{ "DeviceProfile" }, null, null, null, null),
@ -346,6 +346,7 @@ namespace Chirpstack.Api {
relayNotifyLimitBucketSize_ = other.relayNotifyLimitBucketSize_;
relayGlobalUplinkLimitBucketSize_ = other.relayGlobalUplinkLimitBucketSize_;
relayOverallLimitBucketSize_ = other.relayOverallLimitBucketSize_;
allowRoaming_ = other.allowRoaming_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@ -1225,6 +1226,23 @@ namespace Chirpstack.Api {
}
}
/// <summary>Field number for the "allow_roaming" field.</summary>
public const int AllowRoamingFieldNumber = 52;
private bool allowRoaming_;
/// <summary>
/// Allow roaming.
///
/// If set to true, it means that the device is allowed to use roaming.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool AllowRoaming {
get { return allowRoaming_; }
set {
allowRoaming_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
@ -1291,6 +1309,7 @@ namespace Chirpstack.Api {
if (RelayNotifyLimitBucketSize != other.RelayNotifyLimitBucketSize) return false;
if (RelayGlobalUplinkLimitBucketSize != other.RelayGlobalUplinkLimitBucketSize) return false;
if (RelayOverallLimitBucketSize != other.RelayOverallLimitBucketSize) return false;
if (AllowRoaming != other.AllowRoaming) return false;
return Equals(_unknownFields, other._unknownFields);
}
@ -1349,6 +1368,7 @@ namespace Chirpstack.Api {
if (RelayNotifyLimitBucketSize != 0) hash ^= RelayNotifyLimitBucketSize.GetHashCode();
if (RelayGlobalUplinkLimitBucketSize != 0) hash ^= RelayGlobalUplinkLimitBucketSize.GetHashCode();
if (RelayOverallLimitBucketSize != 0) hash ^= RelayOverallLimitBucketSize.GetHashCode();
if (AllowRoaming != false) hash ^= AllowRoaming.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@ -1565,6 +1585,10 @@ namespace Chirpstack.Api {
output.WriteRawTag(152, 3);
output.WriteUInt32(RelayOverallLimitBucketSize);
}
if (AllowRoaming != false) {
output.WriteRawTag(160, 3);
output.WriteBool(AllowRoaming);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@ -1773,6 +1797,10 @@ namespace Chirpstack.Api {
output.WriteRawTag(152, 3);
output.WriteUInt32(RelayOverallLimitBucketSize);
}
if (AllowRoaming != false) {
output.WriteRawTag(160, 3);
output.WriteBool(AllowRoaming);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@ -1932,6 +1960,9 @@ namespace Chirpstack.Api {
if (RelayOverallLimitBucketSize != 0) {
size += 2 + pb::CodedOutputStream.ComputeUInt32Size(RelayOverallLimitBucketSize);
}
if (AllowRoaming != false) {
size += 2 + 1;
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@ -2093,6 +2124,9 @@ namespace Chirpstack.Api {
if (other.RelayOverallLimitBucketSize != 0) {
RelayOverallLimitBucketSize = other.RelayOverallLimitBucketSize;
}
if (other.AllowRoaming != false) {
AllowRoaming = other.AllowRoaming;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@ -2312,6 +2346,10 @@ namespace Chirpstack.Api {
RelayOverallLimitBucketSize = input.ReadUInt32();
break;
}
case 416: {
AllowRoaming = input.ReadBool();
break;
}
}
}
#endif
@ -2531,6 +2569,10 @@ namespace Chirpstack.Api {
RelayOverallLimitBucketSize = input.ReadUInt32();
break;
}
case 416: {
AllowRoaming = input.ReadBool();
break;
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -77,6 +77,10 @@ namespace Chirpstack.Api {
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Chirpstack.Api.OpenIdConnectLoginResponse> __Marshaller_api_OpenIdConnectLoginResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Chirpstack.Api.OpenIdConnectLoginResponse.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Chirpstack.Api.OAuth2LoginRequest> __Marshaller_api_OAuth2LoginRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Chirpstack.Api.OAuth2LoginRequest.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Chirpstack.Api.OAuth2LoginResponse> __Marshaller_api_OAuth2LoginResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Chirpstack.Api.OAuth2LoginResponse.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Chirpstack.Api.GetDevicesSummaryRequest> __Marshaller_api_GetDevicesSummaryRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Chirpstack.Api.GetDevicesSummaryRequest.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Chirpstack.Api.GetDevicesSummaryResponse> __Marshaller_api_GetDevicesSummaryResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Chirpstack.Api.GetDevicesSummaryResponse.Parser));
@ -163,6 +167,14 @@ namespace Chirpstack.Api {
__Marshaller_api_OpenIdConnectLoginRequest,
__Marshaller_api_OpenIdConnectLoginResponse);
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Method<global::Chirpstack.Api.OAuth2LoginRequest, global::Chirpstack.Api.OAuth2LoginResponse> __Method_OAuth2Login = new grpc::Method<global::Chirpstack.Api.OAuth2LoginRequest, global::Chirpstack.Api.OAuth2LoginResponse>(
grpc::MethodType.Unary,
__ServiceName,
"OAuth2Login",
__Marshaller_api_OAuth2LoginRequest,
__Marshaller_api_OAuth2LoginResponse);
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Method<global::Chirpstack.Api.GetDevicesSummaryRequest, global::Chirpstack.Api.GetDevicesSummaryResponse> __Method_GetDevicesSummary = new grpc::Method<global::Chirpstack.Api.GetDevicesSummaryRequest, global::Chirpstack.Api.GetDevicesSummaryResponse>(
grpc::MethodType.Unary,
@ -325,6 +337,18 @@ namespace Chirpstack.Api {
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
}
/// <summary>
/// OAuth2 login.
/// </summary>
/// <param name="request">The request received from the client.</param>
/// <param name="context">The context of the server-side call handler being invoked.</param>
/// <returns>The response to send back to the client (wrapped by a task).</returns>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
public virtual global::System.Threading.Tasks.Task<global::Chirpstack.Api.OAuth2LoginResponse> OAuth2Login(global::Chirpstack.Api.OAuth2LoginRequest request, grpc::ServerCallContext context)
{
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
}
/// <summary>
/// GetDevicesSummary returns an aggregated summary of the devices.
/// </summary>
@ -826,6 +850,54 @@ namespace Chirpstack.Api {
return CallInvoker.AsyncUnaryCall(__Method_OpenIdConnectLogin, null, options, request);
}
/// <summary>
/// OAuth2 login.
/// </summary>
/// <param name="request">The request to send to the server.</param>
/// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
/// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
/// <param name="cancellationToken">An optional token for canceling the call.</param>
/// <returns>The response received from the server.</returns>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
public virtual global::Chirpstack.Api.OAuth2LoginResponse OAuth2Login(global::Chirpstack.Api.OAuth2LoginRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
{
return OAuth2Login(request, new grpc::CallOptions(headers, deadline, cancellationToken));
}
/// <summary>
/// OAuth2 login.
/// </summary>
/// <param name="request">The request to send to the server.</param>
/// <param name="options">The options for the call.</param>
/// <returns>The response received from the server.</returns>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
public virtual global::Chirpstack.Api.OAuth2LoginResponse OAuth2Login(global::Chirpstack.Api.OAuth2LoginRequest request, grpc::CallOptions options)
{
return CallInvoker.BlockingUnaryCall(__Method_OAuth2Login, null, options, request);
}
/// <summary>
/// OAuth2 login.
/// </summary>
/// <param name="request">The request to send to the server.</param>
/// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
/// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
/// <param name="cancellationToken">An optional token for canceling the call.</param>
/// <returns>The call object.</returns>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
public virtual grpc::AsyncUnaryCall<global::Chirpstack.Api.OAuth2LoginResponse> OAuth2LoginAsync(global::Chirpstack.Api.OAuth2LoginRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
{
return OAuth2LoginAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
}
/// <summary>
/// OAuth2 login.
/// </summary>
/// <param name="request">The request to send to the server.</param>
/// <param name="options">The options for the call.</param>
/// <returns>The call object.</returns>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
public virtual grpc::AsyncUnaryCall<global::Chirpstack.Api.OAuth2LoginResponse> OAuth2LoginAsync(global::Chirpstack.Api.OAuth2LoginRequest request, grpc::CallOptions options)
{
return CallInvoker.AsyncUnaryCall(__Method_OAuth2Login, null, options, request);
}
/// <summary>
/// GetDevicesSummary returns an aggregated summary of the devices.
/// </summary>
/// <param name="request">The request to send to the server.</param>
@ -1111,6 +1183,7 @@ namespace Chirpstack.Api {
.AddMethod(__Method_ListApiKeys, serviceImpl.ListApiKeys)
.AddMethod(__Method_Settings, serviceImpl.Settings)
.AddMethod(__Method_OpenIdConnectLogin, serviceImpl.OpenIdConnectLogin)
.AddMethod(__Method_OAuth2Login, serviceImpl.OAuth2Login)
.AddMethod(__Method_GetDevicesSummary, serviceImpl.GetDevicesSummary)
.AddMethod(__Method_GetGatewaysSummary, serviceImpl.GetGatewaysSummary)
.AddMethod(__Method_StreamGatewayFrames, serviceImpl.StreamGatewayFrames)
@ -1135,6 +1208,7 @@ namespace Chirpstack.Api {
serviceBinder.AddMethod(__Method_ListApiKeys, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Chirpstack.Api.ListApiKeysRequest, global::Chirpstack.Api.ListApiKeysResponse>(serviceImpl.ListApiKeys));
serviceBinder.AddMethod(__Method_Settings, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Google.Protobuf.WellKnownTypes.Empty, global::Chirpstack.Api.SettingsResponse>(serviceImpl.Settings));
serviceBinder.AddMethod(__Method_OpenIdConnectLogin, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Chirpstack.Api.OpenIdConnectLoginRequest, global::Chirpstack.Api.OpenIdConnectLoginResponse>(serviceImpl.OpenIdConnectLogin));
serviceBinder.AddMethod(__Method_OAuth2Login, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Chirpstack.Api.OAuth2LoginRequest, global::Chirpstack.Api.OAuth2LoginResponse>(serviceImpl.OAuth2Login));
serviceBinder.AddMethod(__Method_GetDevicesSummary, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Chirpstack.Api.GetDevicesSummaryRequest, global::Chirpstack.Api.GetDevicesSummaryResponse>(serviceImpl.GetDevicesSummary));
serviceBinder.AddMethod(__Method_GetGatewaysSummary, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Chirpstack.Api.GetGatewaysSummaryRequest, global::Chirpstack.Api.GetGatewaysSummaryResponse>(serviceImpl.GetGatewaysSummary));
serviceBinder.AddMethod(__Method_StreamGatewayFrames, serviceImpl == null ? null : new grpc::ServerStreamingServerMethod<global::Chirpstack.Api.StreamGatewayFramesRequest, global::Chirpstack.Api.LogItem>(serviceImpl.StreamGatewayFrames));

View File

@ -33,37 +33,40 @@ namespace Chirpstack.Common {
"ZXN0YW1wcxgCIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJwoI",
"ZGF0YXNldHMYAyADKAsyFS5jb21tb24uTWV0cmljRGF0YXNldBIgCgRraW5k",
"GAQgASgOMhIuY29tbW9uLk1ldHJpY0tpbmQiLAoNTWV0cmljRGF0YXNldBIN",
"CgVsYWJlbBgBIAEoCRIMCgRkYXRhGAIgAygCKiwKCk1vZHVsYXRpb24SCAoE",
"TE9SQRAAEgcKA0ZTSxABEgsKB0xSX0ZIU1MQAiqqAQoGUmVnaW9uEgkKBUVV",
"ODY4EAASCQoFVVM5MTUQAhIJCgVDTjc3ORADEgkKBUVVNDMzEAQSCQoFQVU5",
"MTUQBRIJCgVDTjQ3MBAGEgkKBUFTOTIzEAcSCwoHQVM5MjNfMhAMEgsKB0FT",
"OTIzXzMQDRILCgdBUzkyM180EA4SCQoFS1I5MjAQCBIJCgVJTjg2NRAJEgkK",
"BVJVODY0EAoSCwoHSVNNMjQwMBALKrMBCgVNVHlwZRIQCgxKT0lOX1JFUVVF",
"U1QQABIPCgtKT0lOX0FDQ0VQVBABEhcKE1VOQ09ORklSTUVEX0RBVEFfVVAQ",
"AhIZChVVTkNPTkZJUk1FRF9EQVRBX0RPV04QAxIVChFDT05GSVJNRURfREFU",
"QV9VUBAEEhcKE0NPTkZJUk1FRF9EQVRBX0RPV04QBRISCg5SRUpPSU5fUkVR",
"VUVTVBAGEg8KC1BST1BSSUVUQVJZEAcqfgoKTWFjVmVyc2lvbhIRCg1MT1JB",
"V0FOXzFfMF8wEAASEQoNTE9SQVdBTl8xXzBfMRABEhEKDUxPUkFXQU5fMV8w",
"XzIQAhIRCg1MT1JBV0FOXzFfMF8zEAMSEQoNTE9SQVdBTl8xXzBfNBAEEhEK",
"DUxPUkFXQU5fMV8xXzAQBSplChFSZWdQYXJhbXNSZXZpc2lvbhIFCgFBEAAS",
"BQoBQhABEg8KC1JQMDAyXzFfMF8wEAISDwoLUlAwMDJfMV8wXzEQAxIPCgtS",
"UDAwMl8xXzBfMhAEEg8KC1JQMDAyXzFfMF8zEAUqjgEKDkxvY2F0aW9uU291",
"cmNlEgsKB1VOS05PV04QABIHCgNHUFMQARIKCgZDT05GSUcQAhIVChFHRU9f",
"UkVTT0xWRVJfVERPQRADEhUKEUdFT19SRVNPTFZFUl9SU1NJEAQSFQoRR0VP",
"X1JFU09MVkVSX0dOU1MQBRIVChFHRU9fUkVTT0xWRVJfV0lGSRAGKisKC0Fn",
"Z3JlZ2F0aW9uEggKBEhPVVIQABIHCgNEQVkQARIJCgVNT05USBACKjIKCk1l",
"dHJpY0tpbmQSCwoHQ09VTlRFUhAAEgwKCEFCU09MVVRFEAESCQoFR0FVR0UQ",
"Aio0CgtEZXZpY2VDbGFzcxILCgdDTEFTU19BEAASCwoHQ0xBU1NfQhABEgsK",
"B0NMQVNTX0MQAkJpChFpby5jaGlycHN0YWNrLmFwaUILQ29tbW9uUHJvdG9Q",
"AVoxZ2l0aHViLmNvbS9jaGlycHN0YWNrL2NoaXJwc3RhY2svYXBpL2dvL3Y0",
"L2NvbW1vbqoCEUNoaXJwc3RhY2suQ29tbW9uYgZwcm90bzM="));
"CgVsYWJlbBgBIAEoCRIMCgRkYXRhGAIgAygCIlMKEUpvaW5TZXJ2ZXJDb250",
"ZXh0EhYKDnNlc3Npb25fa2V5X2lkGAEgASgJEiYKCWFwcF9zX2tleRgCIAEo",
"CzITLmNvbW1vbi5LZXlFbnZlbG9wZSosCgpNb2R1bGF0aW9uEggKBExPUkEQ",
"ABIHCgNGU0sQARILCgdMUl9GSFNTEAIqqgEKBlJlZ2lvbhIJCgVFVTg2OBAA",
"EgkKBVVTOTE1EAISCQoFQ043NzkQAxIJCgVFVTQzMxAEEgkKBUFVOTE1EAUS",
"CQoFQ040NzAQBhIJCgVBUzkyMxAHEgsKB0FTOTIzXzIQDBILCgdBUzkyM18z",
"EA0SCwoHQVM5MjNfNBAOEgkKBUtSOTIwEAgSCQoFSU44NjUQCRIJCgVSVTg2",
"NBAKEgsKB0lTTTI0MDAQCyqzAQoFTVR5cGUSEAoMSk9JTl9SRVFVRVNUEAAS",
"DwoLSk9JTl9BQ0NFUFQQARIXChNVTkNPTkZJUk1FRF9EQVRBX1VQEAISGQoV",
"VU5DT05GSVJNRURfREFUQV9ET1dOEAMSFQoRQ09ORklSTUVEX0RBVEFfVVAQ",
"BBIXChNDT05GSVJNRURfREFUQV9ET1dOEAUSEgoOUkVKT0lOX1JFUVVFU1QQ",
"BhIPCgtQUk9QUklFVEFSWRAHKn4KCk1hY1ZlcnNpb24SEQoNTE9SQVdBTl8x",
"XzBfMBAAEhEKDUxPUkFXQU5fMV8wXzEQARIRCg1MT1JBV0FOXzFfMF8yEAIS",
"EQoNTE9SQVdBTl8xXzBfMxADEhEKDUxPUkFXQU5fMV8wXzQQBBIRCg1MT1JB",
"V0FOXzFfMV8wEAUqZQoRUmVnUGFyYW1zUmV2aXNpb24SBQoBQRAAEgUKAUIQ",
"ARIPCgtSUDAwMl8xXzBfMBACEg8KC1JQMDAyXzFfMF8xEAMSDwoLUlAwMDJf",
"MV8wXzIQBBIPCgtSUDAwMl8xXzBfMxAFKo4BCg5Mb2NhdGlvblNvdXJjZRIL",
"CgdVTktOT1dOEAASBwoDR1BTEAESCgoGQ09ORklHEAISFQoRR0VPX1JFU09M",
"VkVSX1RET0EQAxIVChFHRU9fUkVTT0xWRVJfUlNTSRAEEhUKEUdFT19SRVNP",
"TFZFUl9HTlNTEAUSFQoRR0VPX1JFU09MVkVSX1dJRkkQBiorCgtBZ2dyZWdh",
"dGlvbhIICgRIT1VSEAASBwoDREFZEAESCQoFTU9OVEgQAioyCgpNZXRyaWNL",
"aW5kEgsKB0NPVU5URVIQABIMCghBQlNPTFVURRABEgkKBUdBVUdFEAIqNAoL",
"RGV2aWNlQ2xhc3MSCwoHQ0xBU1NfQRAAEgsKB0NMQVNTX0IQARILCgdDTEFT",
"U19DEAJCaQoRaW8uY2hpcnBzdGFjay5hcGlCC0NvbW1vblByb3RvUAFaMWdp",
"dGh1Yi5jb20vY2hpcnBzdGFjay9jaGlycHN0YWNrL2FwaS9nby92NC9jb21t",
"b26qAhFDaGlycHN0YWNrLkNvbW1vbmIGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chirpstack.Common.Modulation), typeof(global::Chirpstack.Common.Region), typeof(global::Chirpstack.Common.MType), typeof(global::Chirpstack.Common.MacVersion), typeof(global::Chirpstack.Common.RegParamsRevision), typeof(global::Chirpstack.Common.LocationSource), typeof(global::Chirpstack.Common.Aggregation), typeof(global::Chirpstack.Common.MetricKind), typeof(global::Chirpstack.Common.DeviceClass), }, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Common.Location), global::Chirpstack.Common.Location.Parser, new[]{ "Latitude", "Longitude", "Altitude", "Source", "Accuracy" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Common.KeyEnvelope), global::Chirpstack.Common.KeyEnvelope.Parser, new[]{ "KekLabel", "AesKey" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Common.Metric), global::Chirpstack.Common.Metric.Parser, new[]{ "Name", "Timestamps", "Datasets", "Kind" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Common.MetricDataset), global::Chirpstack.Common.MetricDataset.Parser, new[]{ "Label", "Data" }, null, null, null, null)
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Common.MetricDataset), global::Chirpstack.Common.MetricDataset.Parser, new[]{ "Label", "Data" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Common.JoinServerContext), global::Chirpstack.Common.JoinServerContext.Parser, new[]{ "SessionKeyId", "AppSKey" }, null, null, null, null)
}));
}
#endregion
@ -1375,6 +1378,250 @@ namespace Chirpstack.Common {
}
/// <summary>
/// Join-Server context.
/// </summary>
public sealed partial class JoinServerContext : pb::IMessage<JoinServerContext>
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
, pb::IBufferMessage
#endif
{
private static readonly pb::MessageParser<JoinServerContext> _parser = new pb::MessageParser<JoinServerContext>(() => new JoinServerContext());
private pb::UnknownFieldSet _unknownFields;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pb::MessageParser<JoinServerContext> Parser { get { return _parser; } }
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Chirpstack.Common.CommonReflection.Descriptor.MessageTypes[4]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
pbr::MessageDescriptor pb::IMessage.Descriptor {
get { return Descriptor; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public JoinServerContext() {
OnConstruction();
}
partial void OnConstruction();
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public JoinServerContext(JoinServerContext other) : this() {
sessionKeyId_ = other.sessionKeyId_;
appSKey_ = other.appSKey_ != null ? other.appSKey_.Clone() : null;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public JoinServerContext Clone() {
return new JoinServerContext(this);
}
/// <summary>Field number for the "session_key_id" field.</summary>
public const int SessionKeyIdFieldNumber = 1;
private string sessionKeyId_ = "";
/// <summary>
/// Session-key ID.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public string SessionKeyId {
get { return sessionKeyId_; }
set {
sessionKeyId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
/// <summary>Field number for the "app_s_key" field.</summary>
public const int AppSKeyFieldNumber = 2;
private global::Chirpstack.Common.KeyEnvelope appSKey_;
/// <summary>
/// AppSKey envelope.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public global::Chirpstack.Common.KeyEnvelope AppSKey {
get { return appSKey_; }
set {
appSKey_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
return Equals(other as JoinServerContext);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool Equals(JoinServerContext other) {
if (ReferenceEquals(other, null)) {
return false;
}
if (ReferenceEquals(other, this)) {
return true;
}
if (SessionKeyId != other.SessionKeyId) return false;
if (!object.Equals(AppSKey, other.AppSKey)) return false;
return Equals(_unknownFields, other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override int GetHashCode() {
int hash = 1;
if (SessionKeyId.Length != 0) hash ^= SessionKeyId.GetHashCode();
if (appSKey_ != null) hash ^= AppSKey.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
return hash;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override string ToString() {
return pb::JsonFormatter.ToDiagnosticString(this);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void WriteTo(pb::CodedOutputStream output) {
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
output.WriteRawMessage(this);
#else
if (SessionKeyId.Length != 0) {
output.WriteRawTag(10);
output.WriteString(SessionKeyId);
}
if (appSKey_ != null) {
output.WriteRawTag(18);
output.WriteMessage(AppSKey);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
#endif
}
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
if (SessionKeyId.Length != 0) {
output.WriteRawTag(10);
output.WriteString(SessionKeyId);
}
if (appSKey_ != null) {
output.WriteRawTag(18);
output.WriteMessage(AppSKey);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
}
#endif
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int CalculateSize() {
int size = 0;
if (SessionKeyId.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(SessionKeyId);
}
if (appSKey_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(AppSKey);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
return size;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void MergeFrom(JoinServerContext other) {
if (other == null) {
return;
}
if (other.SessionKeyId.Length != 0) {
SessionKeyId = other.SessionKeyId;
}
if (other.appSKey_ != null) {
if (appSKey_ == null) {
AppSKey = new global::Chirpstack.Common.KeyEnvelope();
}
AppSKey.MergeFrom(other.AppSKey);
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void MergeFrom(pb::CodedInputStream input) {
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
input.ReadRawMessage(this);
#else
uint tag;
while ((tag = input.ReadTag()) != 0) {
switch(tag) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
break;
case 10: {
SessionKeyId = input.ReadString();
break;
}
case 18: {
if (appSKey_ == null) {
AppSKey = new global::Chirpstack.Common.KeyEnvelope();
}
input.ReadMessage(AppSKey);
break;
}
}
}
#endif
}
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
uint tag;
while ((tag = input.ReadTag()) != 0) {
switch(tag) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
break;
case 10: {
SessionKeyId = input.ReadString();
break;
}
case 18: {
if (appSKey_ == null) {
AppSKey = new global::Chirpstack.Common.KeyEnvelope();
}
input.ReadMessage(AppSKey);
break;
}
}
}
}
#endif
}
#endregion
}

View File

@ -37,73 +37,70 @@ namespace Chirpstack.Integration {
"dHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEicwoRVXBsaW5r",
"UmVsYXlSeEluZm8SDwoHZGV2X2V1aRgBIAEoCRIRCglmcmVxdWVuY3kYAiAB",
"KA0SCgoCZHIYAyABKA0SCwoDc25yGAQgASgFEgwKBHJzc2kYBSABKAUSEwoL",
"d29yX2NoYW5uZWwYBiABKA0iUwoRSm9pblNlcnZlckNvbnRleHQSFgoOc2Vz",
"c2lvbl9rZXlfaWQYASABKAkSJgoJYXBwX3Nfa2V5GAIgASgLMhMuY29tbW9u",
"LktleUVudmVsb3BlIs0DCgtVcGxpbmtFdmVudBIYChBkZWR1cGxpY2F0aW9u",
"X2lkGAEgASgJEigKBHRpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGlt",
"ZXN0YW1wEiwKC2RldmljZV9pbmZvGAMgASgLMhcuaW50ZWdyYXRpb24uRGV2",
"aWNlSW5mbxIQCghkZXZfYWRkchgEIAEoCRILCgNhZHIYBSABKAgSCgoCZHIY",
"BiABKA0SDQoFZl9jbnQYByABKA0SDgoGZl9wb3J0GAggASgNEhEKCWNvbmZp",
"cm1lZBgJIAEoCBIMCgRkYXRhGAogASgMEicKBm9iamVjdBgLIAEoCzIXLmdv",
"b2dsZS5wcm90b2J1Zi5TdHJ1Y3QSIQoHcnhfaW5mbxgMIAMoCzIQLmd3LlVw",
"bGlua1J4SW5mbxIhCgd0eF9pbmZvGA0gASgLMhAuZ3cuVXBsaW5rVHhJbmZv",
"EjUKDXJlbGF5X3J4X2luZm8YDiABKAsyHi5pbnRlZ3JhdGlvbi5VcGxpbmtS",
"ZWxheVJ4SW5mbxI7ChNqb2luX3NlcnZlcl9jb250ZXh0GA8gASgLMh4uaW50",
"ZWdyYXRpb24uSm9pblNlcnZlckNvbnRleHQigwIKCUpvaW5FdmVudBIYChBk",
"d29yX2NoYW5uZWwYBiABKA0iyAMKC1VwbGlua0V2ZW50EhgKEGRlZHVwbGlj",
"YXRpb25faWQYASABKAkSKAoEdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1",
"Zi5UaW1lc3RhbXASLAoLZGV2aWNlX2luZm8YAyABKAsyFy5pbnRlZ3JhdGlv",
"bi5EZXZpY2VJbmZvEhAKCGRldl9hZGRyGAQgASgJEgsKA2FkchgFIAEoCBIK",
"CgJkchgGIAEoDRINCgVmX2NudBgHIAEoDRIOCgZmX3BvcnQYCCABKA0SEQoJ",
"Y29uZmlybWVkGAkgASgIEgwKBGRhdGEYCiABKAwSJwoGb2JqZWN0GAsgASgL",
"MhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIhCgdyeF9pbmZvGAwgAygLMhAu",
"Z3cuVXBsaW5rUnhJbmZvEiEKB3R4X2luZm8YDSABKAsyEC5ndy5VcGxpbmtU",
"eEluZm8SNQoNcmVsYXlfcnhfaW5mbxgOIAEoCzIeLmludGVncmF0aW9uLlVw",
"bGlua1JlbGF5UnhJbmZvEjYKE2pvaW5fc2VydmVyX2NvbnRleHQYDyABKAsy",
"GS5jb21tb24uSm9pblNlcnZlckNvbnRleHQi/gEKCUpvaW5FdmVudBIYChBk",
"ZWR1cGxpY2F0aW9uX2lkGAEgASgJEigKBHRpbWUYAiABKAsyGi5nb29nbGUu",
"cHJvdG9idWYuVGltZXN0YW1wEiwKC2RldmljZV9pbmZvGAMgASgLMhcuaW50",
"ZWdyYXRpb24uRGV2aWNlSW5mbxIQCghkZXZfYWRkchgEIAEoCRI1Cg1yZWxh",
"eV9yeF9pbmZvGAUgASgLMh4uaW50ZWdyYXRpb24uVXBsaW5rUmVsYXlSeElu",
"Zm8SOwoTam9pbl9zZXJ2ZXJfY29udGV4dBgGIAEoCzIeLmludGVncmF0aW9u",
"LkpvaW5TZXJ2ZXJDb250ZXh0Ir0BCghBY2tFdmVudBIYChBkZWR1cGxpY2F0",
"aW9uX2lkGAEgASgJEigKBHRpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYu",
"VGltZXN0YW1wEiwKC2RldmljZV9pbmZvGAMgASgLMhcuaW50ZWdyYXRpb24u",
"RGV2aWNlSW5mbxIVCg1xdWV1ZV9pdGVtX2lkGAQgASgJEhQKDGFja25vd2xl",
"ZGdlZBgFIAEoCBISCgpmX2NudF9kb3duGAYgASgNIt0BCgpUeEFja0V2ZW50",
"EhMKC2Rvd25saW5rX2lkGAEgASgNEigKBHRpbWUYAiABKAsyGi5nb29nbGUu",
"cHJvdG9idWYuVGltZXN0YW1wEiwKC2RldmljZV9pbmZvGAMgASgLMhcuaW50",
"ZWdyYXRpb24uRGV2aWNlSW5mbxIVCg1xdWV1ZV9pdGVtX2lkGAQgASgJEhIK",
"CmZfY250X2Rvd24YBSABKA0SEgoKZ2F0ZXdheV9pZBgGIAEoCRIjCgd0eF9p",
"bmZvGAcgASgLMhIuZ3cuRG93bmxpbmtUeEluZm8ipgIKCExvZ0V2ZW50EigK",
"BHRpbWUYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiwKC2Rl",
"dmljZV9pbmZvGAIgASgLMhcuaW50ZWdyYXRpb24uRGV2aWNlSW5mbxIkCgVs",
"ZXZlbBgDIAEoDjIVLmludGVncmF0aW9uLkxvZ0xldmVsEiIKBGNvZGUYBCAB",
"KA4yFC5pbnRlZ3JhdGlvbi5Mb2dDb2RlEhMKC2Rlc2NyaXB0aW9uGAUgASgJ",
"EjMKB2NvbnRleHQYBiADKAsyIi5pbnRlZ3JhdGlvbi5Mb2dFdmVudC5Db250",
"ZXh0RW50cnkaLgoMQ29udGV4dEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1",
"ZRgCIAEoCToCOAEi6AEKC1N0YXR1c0V2ZW50EhgKEGRlZHVwbGljYXRpb25f",
"aWQYASABKAkSKAoEdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1l",
"c3RhbXASLAoLZGV2aWNlX2luZm8YAyABKAsyFy5pbnRlZ3JhdGlvbi5EZXZp",
"Y2VJbmZvEg4KBm1hcmdpbhgFIAEoBRIdChVleHRlcm5hbF9wb3dlcl9zb3Vy",
"Y2UYBiABKAgSIQoZYmF0dGVyeV9sZXZlbF91bmF2YWlsYWJsZRgHIAEoCBIV",
"Cg1iYXR0ZXJ5X2xldmVsGAggASgCIqUBCg1Mb2NhdGlvbkV2ZW50EhgKEGRl",
"ZHVwbGljYXRpb25faWQYASABKAkSKAoEdGltZRgCIAEoCzIaLmdvb2dsZS5w",
"cm90b2J1Zi5UaW1lc3RhbXASLAoLZGV2aWNlX2luZm8YAyABKAsyFy5pbnRl",
"Z3JhdGlvbi5EZXZpY2VJbmZvEiIKCGxvY2F0aW9uGAQgASgLMhAuY29tbW9u",
"LkxvY2F0aW9uItsBChBJbnRlZ3JhdGlvbkV2ZW50EhgKEGRlZHVwbGljYXRp",
"b25faWQYASABKAkSKAoEdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5U",
"aW1lc3RhbXASLAoLZGV2aWNlX2luZm8YAyABKAsyFy5pbnRlZ3JhdGlvbi5E",
"ZXZpY2VJbmZvEhgKEGludGVncmF0aW9uX25hbWUYBCABKAkSEgoKZXZlbnRf",
"dHlwZRgFIAEoCRInCgZvYmplY3QYBiABKAsyFy5nb29nbGUucHJvdG9idWYu",
"U3RydWN0IogBCg9Eb3dubGlua0NvbW1hbmQSCgoCaWQYASABKAkSDwoHZGV2",
"X2V1aRgCIAEoCRIRCgljb25maXJtZWQYAyABKAgSDgoGZl9wb3J0GAQgASgN",
"EgwKBGRhdGEYBSABKAwSJwoGb2JqZWN0GAYgASgLMhcuZ29vZ2xlLnByb3Rv",
"YnVmLlN0cnVjdCosCghMb2dMZXZlbBIICgRJTkZPEAASCwoHV0FSTklORxAB",
"EgkKBUVSUk9SEAIq6gEKB0xvZ0NvZGUSCwoHVU5LTk9XThAAEhkKFURPV05M",
"SU5LX1BBWUxPQURfU0laRRABEhAKDFVQTElOS19DT0RFQxACEhIKDkRPV05M",
"SU5LX0NPREVDEAMSCAoET1RBQRAEEhYKElVQTElOS19GX0NOVF9SRVNFVBAF",
"Eg4KClVQTElOS19NSUMQBhIfChtVUExJTktfRl9DTlRfUkVUUkFOU01JU1NJ",
"T04QBxIUChBET1dOTElOS19HQVRFV0FZEAgSGAoUUkVMQVlfTkVXX0VORF9E",
"RVZJQ0UQCRIOCgpGX0NOVF9ET1dOEApCgQEKHWlvLmNoaXJwc3RhY2suYXBp",
"LmludGVncmF0aW9uQhBJbnRlZ3JhdGlvblByb3RvUAFaM2dpdGh1Yi5jb20v",
"YnJvY2Fhci9jaGlycHN0YWNrL2FwaS9nby92NC9pbnRlZ3JhdGlvbqoCFkNo",
"aXJwc3RhY2suSW50ZWdyYXRpb25iBnByb3RvMw=="));
"Zm8SNgoTam9pbl9zZXJ2ZXJfY29udGV4dBgGIAEoCzIZLmNvbW1vbi5Kb2lu",
"U2VydmVyQ29udGV4dCK9AQoIQWNrRXZlbnQSGAoQZGVkdXBsaWNhdGlvbl9p",
"ZBgBIAEoCRIoCgR0aW1lGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVz",
"dGFtcBIsCgtkZXZpY2VfaW5mbxgDIAEoCzIXLmludGVncmF0aW9uLkRldmlj",
"ZUluZm8SFQoNcXVldWVfaXRlbV9pZBgEIAEoCRIUCgxhY2tub3dsZWRnZWQY",
"BSABKAgSEgoKZl9jbnRfZG93bhgGIAEoDSLdAQoKVHhBY2tFdmVudBITCgtk",
"b3dubGlua19pZBgBIAEoDRIoCgR0aW1lGAIgASgLMhouZ29vZ2xlLnByb3Rv",
"YnVmLlRpbWVzdGFtcBIsCgtkZXZpY2VfaW5mbxgDIAEoCzIXLmludGVncmF0",
"aW9uLkRldmljZUluZm8SFQoNcXVldWVfaXRlbV9pZBgEIAEoCRISCgpmX2Nu",
"dF9kb3duGAUgASgNEhIKCmdhdGV3YXlfaWQYBiABKAkSIwoHdHhfaW5mbxgH",
"IAEoCzISLmd3LkRvd25saW5rVHhJbmZvIqYCCghMb2dFdmVudBIoCgR0aW1l",
"GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIsCgtkZXZpY2Vf",
"aW5mbxgCIAEoCzIXLmludGVncmF0aW9uLkRldmljZUluZm8SJAoFbGV2ZWwY",
"AyABKA4yFS5pbnRlZ3JhdGlvbi5Mb2dMZXZlbBIiCgRjb2RlGAQgASgOMhQu",
"aW50ZWdyYXRpb24uTG9nQ29kZRITCgtkZXNjcmlwdGlvbhgFIAEoCRIzCgdj",
"b250ZXh0GAYgAygLMiIuaW50ZWdyYXRpb24uTG9nRXZlbnQuQ29udGV4dEVu",
"dHJ5Gi4KDENvbnRleHRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiAB",
"KAk6AjgBIugBCgtTdGF0dXNFdmVudBIYChBkZWR1cGxpY2F0aW9uX2lkGAEg",
"ASgJEigKBHRpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1w",
"EiwKC2RldmljZV9pbmZvGAMgASgLMhcuaW50ZWdyYXRpb24uRGV2aWNlSW5m",
"bxIOCgZtYXJnaW4YBSABKAUSHQoVZXh0ZXJuYWxfcG93ZXJfc291cmNlGAYg",
"ASgIEiEKGWJhdHRlcnlfbGV2ZWxfdW5hdmFpbGFibGUYByABKAgSFQoNYmF0",
"dGVyeV9sZXZlbBgIIAEoAiKlAQoNTG9jYXRpb25FdmVudBIYChBkZWR1cGxp",
"Y2F0aW9uX2lkGAEgASgJEigKBHRpbWUYAiABKAsyGi5nb29nbGUucHJvdG9i",
"dWYuVGltZXN0YW1wEiwKC2RldmljZV9pbmZvGAMgASgLMhcuaW50ZWdyYXRp",
"b24uRGV2aWNlSW5mbxIiCghsb2NhdGlvbhgEIAEoCzIQLmNvbW1vbi5Mb2Nh",
"dGlvbiLbAQoQSW50ZWdyYXRpb25FdmVudBIYChBkZWR1cGxpY2F0aW9uX2lk",
"GAEgASgJEigKBHRpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0",
"YW1wEiwKC2RldmljZV9pbmZvGAMgASgLMhcuaW50ZWdyYXRpb24uRGV2aWNl",
"SW5mbxIYChBpbnRlZ3JhdGlvbl9uYW1lGAQgASgJEhIKCmV2ZW50X3R5cGUY",
"BSABKAkSJwoGb2JqZWN0GAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVj",
"dCKIAQoPRG93bmxpbmtDb21tYW5kEgoKAmlkGAEgASgJEg8KB2Rldl9ldWkY",
"AiABKAkSEQoJY29uZmlybWVkGAMgASgIEg4KBmZfcG9ydBgEIAEoDRIMCgRk",
"YXRhGAUgASgMEicKBm9iamVjdBgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5T",
"dHJ1Y3QqLAoITG9nTGV2ZWwSCAoESU5GTxAAEgsKB1dBUk5JTkcQARIJCgVF",
"UlJPUhACKuoBCgdMb2dDb2RlEgsKB1VOS05PV04QABIZChVET1dOTElOS19Q",
"QVlMT0FEX1NJWkUQARIQCgxVUExJTktfQ09ERUMQAhISCg5ET1dOTElOS19D",
"T0RFQxADEggKBE9UQUEQBBIWChJVUExJTktfRl9DTlRfUkVTRVQQBRIOCgpV",
"UExJTktfTUlDEAYSHwobVVBMSU5LX0ZfQ05UX1JFVFJBTlNNSVNTSU9OEAcS",
"FAoQRE9XTkxJTktfR0FURVdBWRAIEhgKFFJFTEFZX05FV19FTkRfREVWSUNF",
"EAkSDgoKRl9DTlRfRE9XThAKQoEBCh1pby5jaGlycHN0YWNrLmFwaS5pbnRl",
"Z3JhdGlvbkIQSW50ZWdyYXRpb25Qcm90b1ABWjNnaXRodWIuY29tL2Jyb2Nh",
"YXIvY2hpcnBzdGFjay9hcGkvZ28vdjQvaW50ZWdyYXRpb26qAhZDaGlycHN0",
"YWNrLkludGVncmF0aW9uYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Chirpstack.Common.CommonReflection.Descriptor, global::Chirpstack.Gateway.GwReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.StructReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chirpstack.Integration.LogLevel), typeof(global::Chirpstack.Integration.LogCode), }, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Integration.DeviceInfo), global::Chirpstack.Integration.DeviceInfo.Parser, new[]{ "TenantId", "TenantName", "ApplicationId", "ApplicationName", "DeviceProfileId", "DeviceProfileName", "DeviceName", "DevEui", "DeviceClassEnabled", "Tags" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Integration.UplinkRelayRxInfo), global::Chirpstack.Integration.UplinkRelayRxInfo.Parser, new[]{ "DevEui", "Frequency", "Dr", "Snr", "Rssi", "WorChannel" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Integration.JoinServerContext), global::Chirpstack.Integration.JoinServerContext.Parser, new[]{ "SessionKeyId", "AppSKey" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Integration.UplinkEvent), global::Chirpstack.Integration.UplinkEvent.Parser, new[]{ "DeduplicationId", "Time", "DeviceInfo", "DevAddr", "Adr", "Dr", "FCnt", "FPort", "Confirmed", "Data", "Object", "RxInfo", "TxInfo", "RelayRxInfo", "JoinServerContext" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Integration.JoinEvent), global::Chirpstack.Integration.JoinEvent.Parser, new[]{ "DeduplicationId", "Time", "DeviceInfo", "DevAddr", "RelayRxInfo", "JoinServerContext" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Integration.AckEvent), global::Chirpstack.Integration.AckEvent.Parser, new[]{ "DeduplicationId", "Time", "DeviceInfo", "QueueItemId", "Acknowledged", "FCntDown" }, null, null, null, null),
@ -1124,250 +1121,6 @@ namespace Chirpstack.Integration {
}
/// <summary>
/// Join-Server context.
/// </summary>
public sealed partial class JoinServerContext : pb::IMessage<JoinServerContext>
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
, pb::IBufferMessage
#endif
{
private static readonly pb::MessageParser<JoinServerContext> _parser = new pb::MessageParser<JoinServerContext>(() => new JoinServerContext());
private pb::UnknownFieldSet _unknownFields;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pb::MessageParser<JoinServerContext> Parser { get { return _parser; } }
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[2]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
pbr::MessageDescriptor pb::IMessage.Descriptor {
get { return Descriptor; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public JoinServerContext() {
OnConstruction();
}
partial void OnConstruction();
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public JoinServerContext(JoinServerContext other) : this() {
sessionKeyId_ = other.sessionKeyId_;
appSKey_ = other.appSKey_ != null ? other.appSKey_.Clone() : null;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public JoinServerContext Clone() {
return new JoinServerContext(this);
}
/// <summary>Field number for the "session_key_id" field.</summary>
public const int SessionKeyIdFieldNumber = 1;
private string sessionKeyId_ = "";
/// <summary>
/// Session-key ID.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public string SessionKeyId {
get { return sessionKeyId_; }
set {
sessionKeyId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
/// <summary>Field number for the "app_s_key" field.</summary>
public const int AppSKeyFieldNumber = 2;
private global::Chirpstack.Common.KeyEnvelope appSKey_;
/// <summary>
/// AppSKey envelope.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public global::Chirpstack.Common.KeyEnvelope AppSKey {
get { return appSKey_; }
set {
appSKey_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
return Equals(other as JoinServerContext);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool Equals(JoinServerContext other) {
if (ReferenceEquals(other, null)) {
return false;
}
if (ReferenceEquals(other, this)) {
return true;
}
if (SessionKeyId != other.SessionKeyId) return false;
if (!object.Equals(AppSKey, other.AppSKey)) return false;
return Equals(_unknownFields, other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override int GetHashCode() {
int hash = 1;
if (SessionKeyId.Length != 0) hash ^= SessionKeyId.GetHashCode();
if (appSKey_ != null) hash ^= AppSKey.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
return hash;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override string ToString() {
return pb::JsonFormatter.ToDiagnosticString(this);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void WriteTo(pb::CodedOutputStream output) {
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
output.WriteRawMessage(this);
#else
if (SessionKeyId.Length != 0) {
output.WriteRawTag(10);
output.WriteString(SessionKeyId);
}
if (appSKey_ != null) {
output.WriteRawTag(18);
output.WriteMessage(AppSKey);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
#endif
}
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
if (SessionKeyId.Length != 0) {
output.WriteRawTag(10);
output.WriteString(SessionKeyId);
}
if (appSKey_ != null) {
output.WriteRawTag(18);
output.WriteMessage(AppSKey);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
}
#endif
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int CalculateSize() {
int size = 0;
if (SessionKeyId.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(SessionKeyId);
}
if (appSKey_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(AppSKey);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
return size;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void MergeFrom(JoinServerContext other) {
if (other == null) {
return;
}
if (other.SessionKeyId.Length != 0) {
SessionKeyId = other.SessionKeyId;
}
if (other.appSKey_ != null) {
if (appSKey_ == null) {
AppSKey = new global::Chirpstack.Common.KeyEnvelope();
}
AppSKey.MergeFrom(other.AppSKey);
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void MergeFrom(pb::CodedInputStream input) {
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
input.ReadRawMessage(this);
#else
uint tag;
while ((tag = input.ReadTag()) != 0) {
switch(tag) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
break;
case 10: {
SessionKeyId = input.ReadString();
break;
}
case 18: {
if (appSKey_ == null) {
AppSKey = new global::Chirpstack.Common.KeyEnvelope();
}
input.ReadMessage(AppSKey);
break;
}
}
}
#endif
}
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
uint tag;
while ((tag = input.ReadTag()) != 0) {
switch(tag) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
break;
case 10: {
SessionKeyId = input.ReadString();
break;
}
case 18: {
if (appSKey_ == null) {
AppSKey = new global::Chirpstack.Common.KeyEnvelope();
}
input.ReadMessage(AppSKey);
break;
}
}
}
}
#endif
}
/// <summary>
/// UplinkEvent is the message sent when an uplink payload has been received.
/// </summary>
@ -1385,7 +1138,7 @@ namespace Chirpstack.Integration {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[3]; }
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[2]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -1641,7 +1394,7 @@ namespace Chirpstack.Integration {
/// <summary>Field number for the "join_server_context" field.</summary>
public const int JoinServerContextFieldNumber = 15;
private global::Chirpstack.Integration.JoinServerContext joinServerContext_;
private global::Chirpstack.Common.JoinServerContext joinServerContext_;
/// <summary>
/// Join-Server context.
/// A non-empty value indicatest that ChirpStack does not have access to
@ -1650,7 +1403,7 @@ namespace Chirpstack.Integration {
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public global::Chirpstack.Integration.JoinServerContext JoinServerContext {
public global::Chirpstack.Common.JoinServerContext JoinServerContext {
get { return joinServerContext_; }
set {
joinServerContext_ = value;
@ -1973,7 +1726,7 @@ namespace Chirpstack.Integration {
}
if (other.joinServerContext_ != null) {
if (joinServerContext_ == null) {
JoinServerContext = new global::Chirpstack.Integration.JoinServerContext();
JoinServerContext = new global::Chirpstack.Common.JoinServerContext();
}
JoinServerContext.MergeFrom(other.JoinServerContext);
}
@ -2065,7 +1818,7 @@ namespace Chirpstack.Integration {
}
case 122: {
if (joinServerContext_ == null) {
JoinServerContext = new global::Chirpstack.Integration.JoinServerContext();
JoinServerContext = new global::Chirpstack.Common.JoinServerContext();
}
input.ReadMessage(JoinServerContext);
break;
@ -2158,7 +1911,7 @@ namespace Chirpstack.Integration {
}
case 122: {
if (joinServerContext_ == null) {
JoinServerContext = new global::Chirpstack.Integration.JoinServerContext();
JoinServerContext = new global::Chirpstack.Common.JoinServerContext();
}
input.ReadMessage(JoinServerContext);
break;
@ -2188,7 +1941,7 @@ namespace Chirpstack.Integration {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[4]; }
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[3]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -2300,7 +2053,7 @@ namespace Chirpstack.Integration {
/// <summary>Field number for the "join_server_context" field.</summary>
public const int JoinServerContextFieldNumber = 6;
private global::Chirpstack.Integration.JoinServerContext joinServerContext_;
private global::Chirpstack.Common.JoinServerContext joinServerContext_;
/// <summary>
/// Join-Server context.
/// A non-empty value indicatest that ChirpStack does not have access to
@ -2309,7 +2062,7 @@ namespace Chirpstack.Integration {
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public global::Chirpstack.Integration.JoinServerContext JoinServerContext {
public global::Chirpstack.Common.JoinServerContext JoinServerContext {
get { return joinServerContext_; }
set {
joinServerContext_ = value;
@ -2492,7 +2245,7 @@ namespace Chirpstack.Integration {
}
if (other.joinServerContext_ != null) {
if (joinServerContext_ == null) {
JoinServerContext = new global::Chirpstack.Integration.JoinServerContext();
JoinServerContext = new global::Chirpstack.Common.JoinServerContext();
}
JoinServerContext.MergeFrom(other.JoinServerContext);
}
@ -2542,7 +2295,7 @@ namespace Chirpstack.Integration {
}
case 50: {
if (joinServerContext_ == null) {
JoinServerContext = new global::Chirpstack.Integration.JoinServerContext();
JoinServerContext = new global::Chirpstack.Common.JoinServerContext();
}
input.ReadMessage(JoinServerContext);
break;
@ -2593,7 +2346,7 @@ namespace Chirpstack.Integration {
}
case 50: {
if (joinServerContext_ == null) {
JoinServerContext = new global::Chirpstack.Integration.JoinServerContext();
JoinServerContext = new global::Chirpstack.Common.JoinServerContext();
}
input.ReadMessage(JoinServerContext);
break;
@ -2623,7 +2376,7 @@ namespace Chirpstack.Integration {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[5]; }
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[4]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -3038,7 +2791,7 @@ namespace Chirpstack.Integration {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[6]; }
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[5]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -3500,7 +3253,7 @@ namespace Chirpstack.Integration {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[7]; }
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[6]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -3903,7 +3656,7 @@ namespace Chirpstack.Integration {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[8]; }
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[7]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -4357,7 +4110,7 @@ namespace Chirpstack.Integration {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[9]; }
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[8]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -4701,7 +4454,7 @@ namespace Chirpstack.Integration {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[10]; }
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[9]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -5124,7 +4877,7 @@ namespace Chirpstack.Integration {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[11]; }
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[10]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]

View File

@ -1375,6 +1375,11 @@ type GetDeviceActivationResponse struct {
// Device activation object.
DeviceActivation *DeviceActivation `protobuf:"bytes,1,opt,name=device_activation,json=deviceActivation,proto3" json:"device_activation,omitempty"`
// Join-Server context.
// A non-empty value indicatest that ChirpStack does not have access to
// the AppSKey and that the encryption / decryption of the payloads is
// the responsibility of the end-application.
JoinServerContext *common.JoinServerContext `protobuf:"bytes,2,opt,name=join_server_context,json=joinServerContext,proto3" json:"join_server_context,omitempty"`
}
func (x *GetDeviceActivationResponse) Reset() {
@ -1416,6 +1421,13 @@ func (x *GetDeviceActivationResponse) GetDeviceActivation() *DeviceActivation {
return nil
}
func (x *GetDeviceActivationResponse) GetJoinServerContext() *common.JoinServerContext {
if x != nil {
return x.JoinServerContext
}
return nil
}
type GetRandomDevAddrRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -2594,291 +2606,295 @@ var file_api_device_proto_rawDesc = []byte{
0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x35, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x61, 0x0a,
0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x11,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x22, 0x32, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x44, 0x65, 0x76,
0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64,
0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65,
0x76, 0x45, 0x75, 0x69, 0x22, 0x35, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x52, 0x61, 0x6e, 0x64, 0x6f,
0x6d, 0x44, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x22, 0xc9, 0x01, 0x0a, 0x17,
0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0xac, 0x01,
0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a,
0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
0x10, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x12, 0x49, 0x0a, 0x13, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76,
0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x11, 0x6a, 0x6f, 0x69, 0x6e, 0x53,
0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x32, 0x0a, 0x17,
0x47, 0x65, 0x74, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x44, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65,
0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69,
0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61,
0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64,
0x12, 0x35, 0x0a, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41,
0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x67, 0x67, 0x72,
0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbc, 0x02, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74,
0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73,
0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x4a, 0x0a,
0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
0x24, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4b, 0x0a, 0x0b, 0x53, 0x74, 0x61,
0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x37, 0x0a, 0x0b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,
0xcd, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x6e,
0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e,
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x35, 0x0a, 0x0b, 0x61, 0x67, 0x67, 0x72,
0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e,
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
0xbf, 0x02, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x6e,
0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x2d, 0x0a, 0x0a, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65,
0x74, 0x72, 0x69, 0x63, 0x52, 0x09, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12,
0x27, 0x0a, 0x07, 0x67, 0x77, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
0x52, 0x06, 0x67, 0x77, 0x52, 0x73, 0x73, 0x69, 0x12, 0x25, 0x0a, 0x06, 0x67, 0x77, 0x5f, 0x73,
0x6e, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x05, 0x67, 0x77, 0x53, 0x6e, 0x72, 0x12,
0x3d, 0x0a, 0x13, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65,
0x72, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63,
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x10, 0x72, 0x78,
0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x12, 0x39,
0x0a, 0x11, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72,
0x5f, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x0e, 0x72, 0x78, 0x50, 0x61, 0x63,
0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x44, 0x72, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x72, 0x72,
0x6f, 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72,
0x73, 0x22, 0x94, 0x02, 0x0a, 0x0f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75,
0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x12, 0x1c,
0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x15, 0x0a, 0x06,
0x66, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x50,
0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28,
0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63,
0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74,
0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70,
0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73,
0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x5f, 0x63, 0x6e, 0x74,
0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x43, 0x6e,
0x74, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x72,
0x79, 0x70, 0x74, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x45,
0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x22, 0x54, 0x0a, 0x1d, 0x45, 0x6e, 0x71, 0x75,
0x65, 0x75, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74,
0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x0a, 0x71, 0x75, 0x65,
0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49,
0x74, 0x65, 0x6d, 0x52, 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x30,
0x0a, 0x1e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51,
0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
0x22, 0x32, 0x0a, 0x17, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51,
0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64,
0x22, 0x35, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x44, 0x65, 0x76,
0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08,
0x64, 0x65, 0x76, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
0x64, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x22, 0xc9, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x12, 0x30, 0x0a, 0x05,
0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c,
0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x35, 0x0a, 0x0b,
0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65,
0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x22, 0xbc, 0x02, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x44, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6d,
0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73,
0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x4a, 0x0a, 0x0c, 0x4d, 0x65, 0x74,
0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d,
0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4b, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x45,
0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
0x38, 0x01, 0x22, 0x37, 0x0a, 0x0b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74,
0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xcd, 0x01, 0x0a, 0x1b,
0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x74,
0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64,
0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65,
0x76, 0x45, 0x75, 0x69, 0x22, 0x54, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x12, 0x1d, 0x0a, 0x0a, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52,
0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x6c, 0x0a, 0x1b, 0x47, 0x65,
0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74,
0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a,
0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x72, 0x65,
0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d,
0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x30, 0x0a, 0x15, 0x46, 0x6c, 0x75, 0x73,
0x68, 0x44, 0x65, 0x76, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x37, 0x0a, 0x1c, 0x47, 0x65,
0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x65, 0x78, 0x74, 0x46, 0x43, 0x6e, 0x74, 0x44,
0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65,
0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76,
0x45, 0x75, 0x69, 0x22, 0x3d, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x4e, 0x65, 0x78, 0x74, 0x46, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x64, 0x6f,
0x77, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x43, 0x6e, 0x74, 0x44, 0x6f,
0x77, 0x6e, 0x32, 0xe2, 0x11, 0x0a, 0x0d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x65, 0x72,
0x76, 0x69, 0x63, 0x65, 0x12, 0x53, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x18,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x03, 0x47, 0x65, 0x74,
0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65,
0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x12,
0x64, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x28, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x1a, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x76,
0x5f, 0x65, 0x75, 0x69, 0x7d, 0x12, 0x5a, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12,
0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69,
0x76, 0x45, 0x75, 0x69, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,
0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,
0x03, 0x65, 0x6e, 0x64, 0x12, 0x35, 0x0a, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b,
0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbf, 0x02, 0x0a, 0x1c,
0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x74,
0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x0a,
0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
0x52, 0x09, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x07, 0x67,
0x77, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63,
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x67, 0x77,
0x52, 0x73, 0x73, 0x69, 0x12, 0x25, 0x0a, 0x06, 0x67, 0x77, 0x5f, 0x73, 0x6e, 0x72, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65,
0x74, 0x72, 0x69, 0x63, 0x52, 0x05, 0x67, 0x77, 0x53, 0x6e, 0x72, 0x12, 0x3d, 0x0a, 0x13, 0x72,
0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x72,
0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x10, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b,
0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x12, 0x39, 0x0a, 0x11, 0x72, 0x78,
0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x72, 0x18,
0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x0e, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73,
0x50, 0x65, 0x72, 0x44, 0x72, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18,
0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0x94, 0x02,
0x0a, 0x0f, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65,
0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
0x64, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x66, 0x5f, 0x70, 0x6f,
0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x50, 0x6f, 0x72, 0x74, 0x12,
0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64,
0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6f, 0x62,
0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69,
0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x50, 0x65, 0x6e, 0x64,
0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77,
0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77,
0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65,
0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x45, 0x6e, 0x63, 0x72, 0x79,
0x70, 0x74, 0x65, 0x64, 0x22, 0x54, 0x0a, 0x1d, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x69,
0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52,
0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x30, 0x0a, 0x1e, 0x45, 0x6e,
0x71, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65,
0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x32, 0x0a, 0x17,
0x46, 0x6c, 0x75, 0x73, 0x68, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65,
0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69,
0x22, 0x54, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65,
0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17,
0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x6c, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61,
0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65,
0x73, 0x75, 0x6c, 0x74, 0x22, 0x30, 0x0a, 0x15, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x44, 0x65, 0x76,
0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a,
0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x37, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x4e, 0x65, 0x78, 0x74, 0x46, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75,
0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22,
0x3d, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x65, 0x78, 0x74,
0x46, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x32, 0xe2,
0x11, 0x0a, 0x0d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x12, 0x53, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x17, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x12, 0x64, 0x0a, 0x06, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a,
0x01, 0x2a, 0x1a, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73,
0x2f, 0x7b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69,
0x7d, 0x12, 0x5a, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1e, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x12, 0x4f, 0x0a,
0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e,
0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x76,
0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1c, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b,
0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
0x74, 0x79, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f,
0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69,
0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x65, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79,
0x73, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d,
0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b,
0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x76, 0x0a,
0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1c, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65,
0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
0x79, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x1a, 0x27, 0x2f, 0x61,
0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d,
0x2f, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x67, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b,
0x65, 0x79, 0x73, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x1d, 0x2a, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f,
0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x6f,
0x0a, 0x0e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x44, 0x65, 0x76, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73,
0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x44, 0x65, 0x76, 0x4e,
0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x2a, 0x21, 0x2f, 0x61,
0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f,
0x65, 0x75, 0x69, 0x7d, 0x2f, 0x64, 0x65, 0x76, 0x2d, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12,
0x7c, 0x0a, 0x08, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f, 0x61, 0x70, 0x69,
0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x64, 0x65, 0x76, 0x5f,
0x65, 0x75, 0x69, 0x7d, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x6d, 0x0a,
0x0a, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
0x79, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f,
0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x2a, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69,
0x7d, 0x12, 0x4f, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x73, 0x12, 0x76, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73,
0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01,
0x2a, 0x22, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f,
0x7b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x64, 0x65, 0x76,
0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x65, 0x0a, 0x07, 0x47, 0x65,
0x74, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x6b, 0x65, 0x79,
0x73, 0x12, 0x76, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12,
0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a,
0x1a, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x5f,
0x65, 0x75, 0x69, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x67, 0x0a, 0x0a, 0x44, 0x65, 0x6c,
0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65,
0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x23, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x2a, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x6b, 0x65,
0x79, 0x73, 0x12, 0x6f, 0x0a, 0x0e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x44, 0x65, 0x76, 0x4e, 0x6f,
0x6e, 0x63, 0x65, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68,
0x44, 0x65, 0x76, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23,
0x2a, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b,
0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x64, 0x65, 0x76, 0x2d, 0x6e, 0x6f, 0x6e,
0x63, 0x65, 0x73, 0x12, 0x7c, 0x0a, 0x08, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12,
0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
0x70, 0x74, 0x79, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31,
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74,
0x65, 0x12, 0x6d, 0x0a, 0x0a, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12,
0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x2a, 0x21, 0x2f,
0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76,
0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x12, 0x7d, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x61,
0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f,
0x65, 0x75, 0x69, 0x7d, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x83, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x44, 0x65, 0x76,
0x41, 0x64, 0x64, 0x72, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61,
0x6e, 0x64, 0x6f, 0x6d, 0x44, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61, 0x6e, 0x64,
0x6f, 0x6d, 0x44, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69,
0x7d, 0x2f, 0x67, 0x65, 0x74, 0x2d, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x2d, 0x64, 0x65, 0x76,
0x2d, 0x61, 0x64, 0x64, 0x72, 0x12, 0x71, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72,
0x69, 0x63, 0x73, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64,
0x7d, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x0d,
0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x74,
0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63,
0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d,
0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74,
0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x20, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x4d,
0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x6e,
0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d,
0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x86, 0x01,
0x0a, 0x07, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x83, 0x01, 0x0a, 0x10,
0x47, 0x65, 0x74, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x44, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72,
0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d,
0x44, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x44, 0x65,
0x76, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x67, 0x65,
0x74, 0x2d, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x2d, 0x64, 0x65, 0x76, 0x2d, 0x61, 0x64, 0x64,
0x72, 0x12, 0x71, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12,
0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d,
0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74,
0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x6d, 0x65, 0x74,
0x72, 0x69, 0x63, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x6b,
0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65,
0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x74, 0x72, 0x69,
0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x4d, 0x65, 0x74,
0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x6c, 0x69, 0x6e,
0x6b, 0x2d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x86, 0x01, 0x0a, 0x07, 0x45, 0x6e,
0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x71, 0x75,
0x65, 0x75, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74,
0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65,
0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f,
0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x71, 0x75, 0x65,
0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d,
0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x68, 0x0a, 0x0a, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x51,
0x75, 0x65, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73,
0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65,
0x12, 0x73, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x1f, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75,
0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65,
0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x2f,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x69,
0x74, 0x65, 0x6d, 0x2e, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x71, 0x75, 0x65,
0x75, 0x65, 0x12, 0x68, 0x0a, 0x0a, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x51, 0x75, 0x65, 0x75, 0x65,
0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c,
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65,
0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x73, 0x0a, 0x08,
0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47,
0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65,
0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74,
0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x75,
0x65, 0x12, 0x8f, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x46, 0x43, 0x6e,
0x74, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x65, 0x78, 0x74, 0x46, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77,
0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47,
0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x65, 0x78, 0x74, 0x46, 0x43, 0x6e, 0x74,
0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f,
0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x78,
0x74, 0x46, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x65, 0x78, 0x74, 0x46, 0x43, 0x6e,
0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x65, 0x78, 0x74,
0x46, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65,
0x75, 0x69, 0x7d, 0x2f, 0x67, 0x65, 0x74, 0x2d, 0x6e, 0x65, 0x78, 0x74, 0x2d, 0x66, 0x2d, 0x63,
0x6e, 0x74, 0x2d, 0x64, 0x6f, 0x77, 0x6e, 0x42, 0x63, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68,
0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74,
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61,
0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68,
0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x33,
0x67, 0x65, 0x74, 0x2d, 0x6e, 0x65, 0x78, 0x74, 0x2d, 0x66, 0x2d, 0x63, 0x6e, 0x74, 0x2d, 0x64,
0x6f, 0x77, 0x6e, 0x42, 0x63, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73,
0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63,
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f,
0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73,
0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -2938,10 +2954,11 @@ var file_api_device_proto_goTypes = []interface{}{
nil, // 40: api.GetDeviceMetricsResponse.StatesEntry
(*timestamppb.Timestamp)(nil), // 41: google.protobuf.Timestamp
(common.DeviceClass)(0), // 42: common.DeviceClass
(common.Aggregation)(0), // 43: common.Aggregation
(*common.Metric)(nil), // 44: common.Metric
(*structpb.Struct)(nil), // 45: google.protobuf.Struct
(*emptypb.Empty)(nil), // 46: google.protobuf.Empty
(*common.JoinServerContext)(nil), // 43: common.JoinServerContext
(common.Aggregation)(0), // 44: common.Aggregation
(*common.Metric)(nil), // 45: common.Metric
(*structpb.Struct)(nil), // 46: google.protobuf.Struct
(*emptypb.Empty)(nil), // 47: google.protobuf.Empty
}
var file_api_device_proto_depIdxs = []int32{
37, // 0: api.Device.variables:type_name -> api.Device.VariablesEntry
@ -2966,70 +2983,71 @@ var file_api_device_proto_depIdxs = []int32{
3, // 19: api.UpdateDeviceKeysRequest.device_keys:type_name -> api.DeviceKeys
16, // 20: api.ActivateDeviceRequest.device_activation:type_name -> api.DeviceActivation
16, // 21: api.GetDeviceActivationResponse.device_activation:type_name -> api.DeviceActivation
41, // 22: api.GetDeviceMetricsRequest.start:type_name -> google.protobuf.Timestamp
41, // 23: api.GetDeviceMetricsRequest.end:type_name -> google.protobuf.Timestamp
43, // 24: api.GetDeviceMetricsRequest.aggregation:type_name -> common.Aggregation
39, // 25: api.GetDeviceMetricsResponse.metrics:type_name -> api.GetDeviceMetricsResponse.MetricsEntry
40, // 26: api.GetDeviceMetricsResponse.states:type_name -> api.GetDeviceMetricsResponse.StatesEntry
41, // 27: api.GetDeviceLinkMetricsRequest.start:type_name -> google.protobuf.Timestamp
41, // 28: api.GetDeviceLinkMetricsRequest.end:type_name -> google.protobuf.Timestamp
43, // 29: api.GetDeviceLinkMetricsRequest.aggregation:type_name -> common.Aggregation
44, // 30: api.GetDeviceLinkMetricsResponse.rx_packets:type_name -> common.Metric
44, // 31: api.GetDeviceLinkMetricsResponse.gw_rssi:type_name -> common.Metric
44, // 32: api.GetDeviceLinkMetricsResponse.gw_snr:type_name -> common.Metric
44, // 33: api.GetDeviceLinkMetricsResponse.rx_packets_per_freq:type_name -> common.Metric
44, // 34: api.GetDeviceLinkMetricsResponse.rx_packets_per_dr:type_name -> common.Metric
44, // 35: api.GetDeviceLinkMetricsResponse.errors:type_name -> common.Metric
45, // 36: api.DeviceQueueItem.object:type_name -> google.protobuf.Struct
28, // 37: api.EnqueueDeviceQueueItemRequest.queue_item:type_name -> api.DeviceQueueItem
28, // 38: api.GetDeviceQueueItemsResponse.result:type_name -> api.DeviceQueueItem
44, // 39: api.GetDeviceMetricsResponse.MetricsEntry.value:type_name -> common.Metric
25, // 40: api.GetDeviceMetricsResponse.StatesEntry.value:type_name -> api.DeviceState
4, // 41: api.DeviceService.Create:input_type -> api.CreateDeviceRequest
5, // 42: api.DeviceService.Get:input_type -> api.GetDeviceRequest
7, // 43: api.DeviceService.Update:input_type -> api.UpdateDeviceRequest
8, // 44: api.DeviceService.Delete:input_type -> api.DeleteDeviceRequest
9, // 45: api.DeviceService.List:input_type -> api.ListDevicesRequest
11, // 46: api.DeviceService.CreateKeys:input_type -> api.CreateDeviceKeysRequest
12, // 47: api.DeviceService.GetKeys:input_type -> api.GetDeviceKeysRequest
14, // 48: api.DeviceService.UpdateKeys:input_type -> api.UpdateDeviceKeysRequest
15, // 49: api.DeviceService.DeleteKeys:input_type -> api.DeleteDeviceKeysRequest
34, // 50: api.DeviceService.FlushDevNonces:input_type -> api.FlushDevNoncesRequest
17, // 51: api.DeviceService.Activate:input_type -> api.ActivateDeviceRequest
18, // 52: api.DeviceService.Deactivate:input_type -> api.DeactivateDeviceRequest
19, // 53: api.DeviceService.GetActivation:input_type -> api.GetDeviceActivationRequest
21, // 54: api.DeviceService.GetRandomDevAddr:input_type -> api.GetRandomDevAddrRequest
23, // 55: api.DeviceService.GetMetrics:input_type -> api.GetDeviceMetricsRequest
26, // 56: api.DeviceService.GetLinkMetrics:input_type -> api.GetDeviceLinkMetricsRequest
29, // 57: api.DeviceService.Enqueue:input_type -> api.EnqueueDeviceQueueItemRequest
31, // 58: api.DeviceService.FlushQueue:input_type -> api.FlushDeviceQueueRequest
32, // 59: api.DeviceService.GetQueue:input_type -> api.GetDeviceQueueItemsRequest
35, // 60: api.DeviceService.GetNextFCntDown:input_type -> api.GetDeviceNextFCntDownRequest
46, // 61: api.DeviceService.Create:output_type -> google.protobuf.Empty
6, // 62: api.DeviceService.Get:output_type -> api.GetDeviceResponse
46, // 63: api.DeviceService.Update:output_type -> google.protobuf.Empty
46, // 64: api.DeviceService.Delete:output_type -> google.protobuf.Empty
10, // 65: api.DeviceService.List:output_type -> api.ListDevicesResponse
46, // 66: api.DeviceService.CreateKeys:output_type -> google.protobuf.Empty
13, // 67: api.DeviceService.GetKeys:output_type -> api.GetDeviceKeysResponse
46, // 68: api.DeviceService.UpdateKeys:output_type -> google.protobuf.Empty
46, // 69: api.DeviceService.DeleteKeys:output_type -> google.protobuf.Empty
46, // 70: api.DeviceService.FlushDevNonces:output_type -> google.protobuf.Empty
46, // 71: api.DeviceService.Activate:output_type -> google.protobuf.Empty
46, // 72: api.DeviceService.Deactivate:output_type -> google.protobuf.Empty
20, // 73: api.DeviceService.GetActivation:output_type -> api.GetDeviceActivationResponse
22, // 74: api.DeviceService.GetRandomDevAddr:output_type -> api.GetRandomDevAddrResponse
24, // 75: api.DeviceService.GetMetrics:output_type -> api.GetDeviceMetricsResponse
27, // 76: api.DeviceService.GetLinkMetrics:output_type -> api.GetDeviceLinkMetricsResponse
30, // 77: api.DeviceService.Enqueue:output_type -> api.EnqueueDeviceQueueItemResponse
46, // 78: api.DeviceService.FlushQueue:output_type -> google.protobuf.Empty
33, // 79: api.DeviceService.GetQueue:output_type -> api.GetDeviceQueueItemsResponse
36, // 80: api.DeviceService.GetNextFCntDown:output_type -> api.GetDeviceNextFCntDownResponse
61, // [61:81] is the sub-list for method output_type
41, // [41:61] is the sub-list for method input_type
41, // [41:41] is the sub-list for extension type_name
41, // [41:41] is the sub-list for extension extendee
0, // [0:41] is the sub-list for field type_name
43, // 22: api.GetDeviceActivationResponse.join_server_context:type_name -> common.JoinServerContext
41, // 23: api.GetDeviceMetricsRequest.start:type_name -> google.protobuf.Timestamp
41, // 24: api.GetDeviceMetricsRequest.end:type_name -> google.protobuf.Timestamp
44, // 25: api.GetDeviceMetricsRequest.aggregation:type_name -> common.Aggregation
39, // 26: api.GetDeviceMetricsResponse.metrics:type_name -> api.GetDeviceMetricsResponse.MetricsEntry
40, // 27: api.GetDeviceMetricsResponse.states:type_name -> api.GetDeviceMetricsResponse.StatesEntry
41, // 28: api.GetDeviceLinkMetricsRequest.start:type_name -> google.protobuf.Timestamp
41, // 29: api.GetDeviceLinkMetricsRequest.end:type_name -> google.protobuf.Timestamp
44, // 30: api.GetDeviceLinkMetricsRequest.aggregation:type_name -> common.Aggregation
45, // 31: api.GetDeviceLinkMetricsResponse.rx_packets:type_name -> common.Metric
45, // 32: api.GetDeviceLinkMetricsResponse.gw_rssi:type_name -> common.Metric
45, // 33: api.GetDeviceLinkMetricsResponse.gw_snr:type_name -> common.Metric
45, // 34: api.GetDeviceLinkMetricsResponse.rx_packets_per_freq:type_name -> common.Metric
45, // 35: api.GetDeviceLinkMetricsResponse.rx_packets_per_dr:type_name -> common.Metric
45, // 36: api.GetDeviceLinkMetricsResponse.errors:type_name -> common.Metric
46, // 37: api.DeviceQueueItem.object:type_name -> google.protobuf.Struct
28, // 38: api.EnqueueDeviceQueueItemRequest.queue_item:type_name -> api.DeviceQueueItem
28, // 39: api.GetDeviceQueueItemsResponse.result:type_name -> api.DeviceQueueItem
45, // 40: api.GetDeviceMetricsResponse.MetricsEntry.value:type_name -> common.Metric
25, // 41: api.GetDeviceMetricsResponse.StatesEntry.value:type_name -> api.DeviceState
4, // 42: api.DeviceService.Create:input_type -> api.CreateDeviceRequest
5, // 43: api.DeviceService.Get:input_type -> api.GetDeviceRequest
7, // 44: api.DeviceService.Update:input_type -> api.UpdateDeviceRequest
8, // 45: api.DeviceService.Delete:input_type -> api.DeleteDeviceRequest
9, // 46: api.DeviceService.List:input_type -> api.ListDevicesRequest
11, // 47: api.DeviceService.CreateKeys:input_type -> api.CreateDeviceKeysRequest
12, // 48: api.DeviceService.GetKeys:input_type -> api.GetDeviceKeysRequest
14, // 49: api.DeviceService.UpdateKeys:input_type -> api.UpdateDeviceKeysRequest
15, // 50: api.DeviceService.DeleteKeys:input_type -> api.DeleteDeviceKeysRequest
34, // 51: api.DeviceService.FlushDevNonces:input_type -> api.FlushDevNoncesRequest
17, // 52: api.DeviceService.Activate:input_type -> api.ActivateDeviceRequest
18, // 53: api.DeviceService.Deactivate:input_type -> api.DeactivateDeviceRequest
19, // 54: api.DeviceService.GetActivation:input_type -> api.GetDeviceActivationRequest
21, // 55: api.DeviceService.GetRandomDevAddr:input_type -> api.GetRandomDevAddrRequest
23, // 56: api.DeviceService.GetMetrics:input_type -> api.GetDeviceMetricsRequest
26, // 57: api.DeviceService.GetLinkMetrics:input_type -> api.GetDeviceLinkMetricsRequest
29, // 58: api.DeviceService.Enqueue:input_type -> api.EnqueueDeviceQueueItemRequest
31, // 59: api.DeviceService.FlushQueue:input_type -> api.FlushDeviceQueueRequest
32, // 60: api.DeviceService.GetQueue:input_type -> api.GetDeviceQueueItemsRequest
35, // 61: api.DeviceService.GetNextFCntDown:input_type -> api.GetDeviceNextFCntDownRequest
47, // 62: api.DeviceService.Create:output_type -> google.protobuf.Empty
6, // 63: api.DeviceService.Get:output_type -> api.GetDeviceResponse
47, // 64: api.DeviceService.Update:output_type -> google.protobuf.Empty
47, // 65: api.DeviceService.Delete:output_type -> google.protobuf.Empty
10, // 66: api.DeviceService.List:output_type -> api.ListDevicesResponse
47, // 67: api.DeviceService.CreateKeys:output_type -> google.protobuf.Empty
13, // 68: api.DeviceService.GetKeys:output_type -> api.GetDeviceKeysResponse
47, // 69: api.DeviceService.UpdateKeys:output_type -> google.protobuf.Empty
47, // 70: api.DeviceService.DeleteKeys:output_type -> google.protobuf.Empty
47, // 71: api.DeviceService.FlushDevNonces:output_type -> google.protobuf.Empty
47, // 72: api.DeviceService.Activate:output_type -> google.protobuf.Empty
47, // 73: api.DeviceService.Deactivate:output_type -> google.protobuf.Empty
20, // 74: api.DeviceService.GetActivation:output_type -> api.GetDeviceActivationResponse
22, // 75: api.DeviceService.GetRandomDevAddr:output_type -> api.GetRandomDevAddrResponse
24, // 76: api.DeviceService.GetMetrics:output_type -> api.GetDeviceMetricsResponse
27, // 77: api.DeviceService.GetLinkMetrics:output_type -> api.GetDeviceLinkMetricsResponse
30, // 78: api.DeviceService.Enqueue:output_type -> api.EnqueueDeviceQueueItemResponse
47, // 79: api.DeviceService.FlushQueue:output_type -> google.protobuf.Empty
33, // 80: api.DeviceService.GetQueue:output_type -> api.GetDeviceQueueItemsResponse
36, // 81: api.DeviceService.GetNextFCntDown:output_type -> api.GetDeviceNextFCntDownResponse
62, // [62:82] is the sub-list for method output_type
42, // [42:62] is the sub-list for method input_type
42, // [42:42] is the sub-list for extension type_name
42, // [42:42] is the sub-list for extension extendee
0, // [0:42] is the sub-list for field type_name
}
func init() { file_api_device_proto_init() }

View File

@ -540,6 +540,10 @@ type DeviceProfile struct {
// 2 = 4
// 3 = 12
RelayOverallLimitBucketSize uint32 `protobuf:"varint,51,opt,name=relay_overall_limit_bucket_size,json=relayOverallLimitBucketSize,proto3" json:"relay_overall_limit_bucket_size,omitempty"`
// Allow roaming.
//
// If set to true, it means that the device is allowed to use roaming.
AllowRoaming bool `protobuf:"varint,52,opt,name=allow_roaming,json=allowRoaming,proto3" json:"allow_roaming,omitempty"`
}
func (x *DeviceProfile) Reset() {
@ -931,6 +935,13 @@ func (x *DeviceProfile) GetRelayOverallLimitBucketSize() uint32 {
return 0
}
func (x *DeviceProfile) GetAllowRoaming() bool {
if x != nil {
return x.AllowRoaming
}
return false
}
type Measurement struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -1681,7 +1692,7 @@ var file_api_device_profile_proto_rawDesc = []byte{
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x6f, 0x6d,
0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x22, 0xae, 0x16, 0x0a, 0x0d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x22, 0xd3, 0x16, 0x0a, 0x0d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12,
@ -1851,187 +1862,189 @@ var file_api_device_profile_proto_rawDesc = []byte{
0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x73, 0x69,
0x7a, 0x65, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x4f,
0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65,
0x74, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74,
0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x51,
0x0a, 0x11, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e,
0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75,
0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
0x01, 0x22, 0x4b, 0x0a, 0x0b, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74,
0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65,
0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xd2,
0x03, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61,
0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72,
0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x34, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c,
0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61,
0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
0x02, 0x38, 0x01, 0x1a, 0x51, 0x0a, 0x11, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65,
0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x0b, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72,
0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x6b, 0x69, 0x6e,
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65,
0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b,
0x69, 0x6e, 0x64, 0x22, 0xd2, 0x03, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a,
0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a,
0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63,
0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61,
0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61,
0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f,
0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12,
0x33, 0x0a, 0x0b, 0x6d, 0x61, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06,
0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61,
0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x56, 0x65, 0x72,
0x73, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x13, 0x72, 0x65, 0x67, 0x5f, 0x70, 0x61, 0x72, 0x61,
0x6d, 0x73, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28,
0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x50, 0x61,
0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65,
0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12,
0x23, 0x0a, 0x0d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6f, 0x74, 0x61, 0x61,
0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73,
0x4f, 0x74, 0x61, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73,
0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e,
0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x12, 0x28,
0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73,
0x5f, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72,
0x74, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x22, 0x57, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61,
0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c,
0x65, 0x22, 0x2d, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
0x22, 0x29, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x18,
0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x12,
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x69,
0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x0b, 0x6d, 0x61,
0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32,
0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x63, 0x56, 0x65, 0x72, 0x73,
0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
0x49, 0x0a, 0x13, 0x72, 0x65, 0x67, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5f, 0x72, 0x65,
0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63,
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52,
0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x67, 0x50, 0x61, 0x72, 0x61,
0x6d, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75,
0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6f, 0x74, 0x61, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28,
0x08, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4f, 0x74, 0x61, 0x61, 0x12,
0x28, 0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x73,
0x73, 0x5f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f,
0x72, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x75, 0x70,
0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x63, 0x18, 0x0a, 0x20,
0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x6c, 0x61,
0x73, 0x73, 0x43, 0x22, 0x57, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0d, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x2d, 0x0a, 0x1b,
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x29, 0x0a, 0x17, 0x47,
0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52,
0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x39,
0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01,
0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39,
0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09,
0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64,
0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74,
0x65, 0x64, 0x41, 0x74, 0x22, 0x57, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0d,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x2c, 0x0a,
0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x7e, 0x0a, 0x19, 0x4c,
0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69,
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16,
0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06,
0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68,
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1b,
0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x1a, 0x4c,
0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74,
0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a,
0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x72, 0x65,
0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69,
0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x7c,
0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61,
0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74,
0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x06, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x4c, 0x69, 0x73, 0x74,
0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3a, 0x0a, 0x14,
0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x4c, 0x69, 0x73, 0x74,
0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x2a, 0x31, 0x0a, 0x0c, 0x43, 0x6f, 0x64, 0x65,
0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45,
0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x41, 0x59, 0x45, 0x4e, 0x4e, 0x45, 0x5f, 0x4c, 0x50,
0x50, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4a, 0x53, 0x10, 0x02, 0x2a, 0x50, 0x0a, 0x0f, 0x4d,
0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b,
0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43,
0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x42, 0x53, 0x4f,
0x4c, 0x55, 0x54, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x41, 0x55, 0x47, 0x45, 0x10,
0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x2a, 0x55, 0x0a,
0x0e, 0x43, 0x61, 0x64, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, 0x79, 0x12,
0x09, 0x0a, 0x05, 0x53, 0x45, 0x43, 0x5f, 0x31, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x53,
0x5f, 0x35, 0x30, 0x30, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x32, 0x35, 0x30,
0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x31, 0x30, 0x30, 0x10, 0x03, 0x12, 0x09,
0x0a, 0x05, 0x4d, 0x53, 0x5f, 0x35, 0x30, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x53, 0x5f,
0x32, 0x30, 0x10, 0x05, 0x2a, 0x61, 0x0a, 0x11, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x43, 0x68,
0x41, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x09, 0x0a, 0x05, 0x4b, 0x48, 0x5a,
0x5f, 0x30, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x32, 0x30, 0x30, 0x10,
0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x34, 0x30, 0x30, 0x10, 0x02, 0x12, 0x0b,
0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x38, 0x30, 0x30, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x4b,
0x48, 0x5a, 0x5f, 0x31, 0x36, 0x30, 0x30, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x48, 0x5a,
0x5f, 0x33, 0x32, 0x30, 0x30, 0x10, 0x05, 0x2a, 0x6c, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x61, 0x79,
0x4d, 0x6f, 0x64, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16,
0x0a, 0x12, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x59, 0x5f,
0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45,
0x5f, 0x52, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a,
0x07, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x4e,
0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c,
0x4c, 0x45, 0x44, 0x10, 0x03, 0x32, 0xb8, 0x05, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6c,
0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43,
0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x65, 0x0a, 0x03,
0x47, 0x65, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63,
0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x57, 0x0a, 0x1a, 0x55, 0x70, 0x64,
0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x22, 0x2c, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
0x22, 0x7e, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a,
0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69,
0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73,
0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61,
0x72, 0x63, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64,
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64,
0x22, 0x71, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f,
0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12,
0x32, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x22, 0x7c, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72,
0x69, 0x74, 0x68, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a,
0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31,
0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x22, 0x3a, 0x0a, 0x14, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x2a, 0x31, 0x0a,
0x0c, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x08, 0x0a,
0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x41, 0x59, 0x45, 0x4e,
0x4e, 0x45, 0x5f, 0x4c, 0x50, 0x50, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4a, 0x53, 0x10, 0x02,
0x2a, 0x50, 0x0a, 0x0f, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4b,
0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00,
0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0c, 0x0a,
0x08, 0x41, 0x42, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x47,
0x41, 0x55, 0x47, 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47,
0x10, 0x04, 0x2a, 0x55, 0x0a, 0x0e, 0x43, 0x61, 0x64, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69,
0x63, 0x69, 0x74, 0x79, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x45, 0x43, 0x5f, 0x31, 0x10, 0x00, 0x12,
0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x35, 0x30, 0x30, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d,
0x53, 0x5f, 0x32, 0x35, 0x30, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x31, 0x30,
0x30, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x53, 0x5f, 0x35, 0x30, 0x10, 0x04, 0x12, 0x09,
0x0a, 0x05, 0x4d, 0x53, 0x5f, 0x32, 0x30, 0x10, 0x05, 0x2a, 0x61, 0x0a, 0x11, 0x53, 0x65, 0x63,
0x6f, 0x6e, 0x64, 0x43, 0x68, 0x41, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x09,
0x0a, 0x05, 0x4b, 0x48, 0x5a, 0x5f, 0x30, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a,
0x5f, 0x32, 0x30, 0x30, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x34, 0x30,
0x30, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x38, 0x30, 0x30, 0x10, 0x03,
0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x48, 0x5a, 0x5f, 0x31, 0x36, 0x30, 0x30, 0x10, 0x04, 0x12, 0x0c,
0x0a, 0x08, 0x4b, 0x48, 0x5a, 0x5f, 0x33, 0x32, 0x30, 0x30, 0x10, 0x05, 0x2a, 0x6c, 0x0a, 0x13,
0x52, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52,
0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x45,
0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45,
0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x12,
0x19, 0x0a, 0x15, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x4f,
0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x32, 0xb8, 0x05, 0x0a, 0x14, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b,
0x69, 0x64, 0x7d, 0x12, 0x76, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x01,
0x2a, 0x1a, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70,
0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f,
0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x69, 0x64, 0x7d, 0x12, 0x64, 0x0a, 0x06, 0x44,
0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65,
0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x21,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64,
0x7d, 0x12, 0x65, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c,
0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c,
0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d,
0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73,
0x74, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, 0x12, 0x16,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73,
0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x64,
0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70,
0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x73, 0x2f, 0x61, 0x64, 0x72, 0x2d, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73,
0x42, 0x6a, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74,
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61,
0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68,
0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x33,
0x73, 0x12, 0x65, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47,
0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f,
0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x76, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x33, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x1a, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x69, 0x64, 0x7d,
0x12, 0x64, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
0x70, 0x74, 0x79, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x65, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50,
0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50,
0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x85, 0x01,
0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74,
0x68, 0x6d, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2b, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25,
0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x64, 0x72, 0x2d, 0x61, 0x6c, 0x67, 0x6f, 0x72,
0x69, 0x74, 0x68, 0x6d, 0x73, 0x42, 0x6a, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x12, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69,
0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61,
0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69,
0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70,
0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (

File diff suppressed because it is too large Load Diff

View File

@ -28,6 +28,7 @@ const (
InternalService_ListApiKeys_FullMethodName = "/api.InternalService/ListApiKeys"
InternalService_Settings_FullMethodName = "/api.InternalService/Settings"
InternalService_OpenIdConnectLogin_FullMethodName = "/api.InternalService/OpenIdConnectLogin"
InternalService_OAuth2Login_FullMethodName = "/api.InternalService/OAuth2Login"
InternalService_GetDevicesSummary_FullMethodName = "/api.InternalService/GetDevicesSummary"
InternalService_GetGatewaysSummary_FullMethodName = "/api.InternalService/GetGatewaysSummary"
InternalService_StreamGatewayFrames_FullMethodName = "/api.InternalService/StreamGatewayFrames"
@ -57,6 +58,8 @@ type InternalServiceClient interface {
Settings(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*SettingsResponse, error)
// OpenId Connect login.
OpenIdConnectLogin(ctx context.Context, in *OpenIdConnectLoginRequest, opts ...grpc.CallOption) (*OpenIdConnectLoginResponse, error)
// OAuth2 login.
OAuth2Login(ctx context.Context, in *OAuth2LoginRequest, opts ...grpc.CallOption) (*OAuth2LoginResponse, error)
// GetDevicesSummary returns an aggregated summary of the devices.
GetDevicesSummary(ctx context.Context, in *GetDevicesSummaryRequest, opts ...grpc.CallOption) (*GetDevicesSummaryResponse, error)
// GetGatewaysSummary returns an aggregated summary of the gateways.
@ -153,6 +156,15 @@ func (c *internalServiceClient) OpenIdConnectLogin(ctx context.Context, in *Open
return out, nil
}
func (c *internalServiceClient) OAuth2Login(ctx context.Context, in *OAuth2LoginRequest, opts ...grpc.CallOption) (*OAuth2LoginResponse, error) {
out := new(OAuth2LoginResponse)
err := c.cc.Invoke(ctx, InternalService_OAuth2Login_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *internalServiceClient) GetDevicesSummary(ctx context.Context, in *GetDevicesSummaryRequest, opts ...grpc.CallOption) (*GetDevicesSummaryResponse, error) {
out := new(GetDevicesSummaryResponse)
err := c.cc.Invoke(ctx, InternalService_GetDevicesSummary_FullMethodName, in, out, opts...)
@ -305,6 +317,8 @@ type InternalServiceServer interface {
Settings(context.Context, *emptypb.Empty) (*SettingsResponse, error)
// OpenId Connect login.
OpenIdConnectLogin(context.Context, *OpenIdConnectLoginRequest) (*OpenIdConnectLoginResponse, error)
// OAuth2 login.
OAuth2Login(context.Context, *OAuth2LoginRequest) (*OAuth2LoginResponse, error)
// GetDevicesSummary returns an aggregated summary of the devices.
GetDevicesSummary(context.Context, *GetDevicesSummaryRequest) (*GetDevicesSummaryResponse, error)
// GetGatewaysSummary returns an aggregated summary of the gateways.
@ -350,6 +364,9 @@ func (UnimplementedInternalServiceServer) Settings(context.Context, *emptypb.Emp
func (UnimplementedInternalServiceServer) OpenIdConnectLogin(context.Context, *OpenIdConnectLoginRequest) (*OpenIdConnectLoginResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method OpenIdConnectLogin not implemented")
}
func (UnimplementedInternalServiceServer) OAuth2Login(context.Context, *OAuth2LoginRequest) (*OAuth2LoginResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method OAuth2Login not implemented")
}
func (UnimplementedInternalServiceServer) GetDevicesSummary(context.Context, *GetDevicesSummaryRequest) (*GetDevicesSummaryResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetDevicesSummary not implemented")
}
@ -528,6 +545,24 @@ func _InternalService_OpenIdConnectLogin_Handler(srv interface{}, ctx context.Co
return interceptor(ctx, in, info, handler)
}
func _InternalService_OAuth2Login_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(OAuth2LoginRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(InternalServiceServer).OAuth2Login(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: InternalService_OAuth2Login_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(InternalServiceServer).OAuth2Login(ctx, req.(*OAuth2LoginRequest))
}
return interceptor(ctx, in, info, handler)
}
func _InternalService_GetDevicesSummary_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetDevicesSummaryRequest)
if err := dec(in); err != nil {
@ -702,6 +737,10 @@ var InternalService_ServiceDesc = grpc.ServiceDesc{
MethodName: "OpenIdConnectLogin",
Handler: _InternalService_OpenIdConnectLogin_Handler,
},
{
MethodName: "OAuth2Login",
Handler: _InternalService_OAuth2Login_Handler,
},
{
MethodName: "GetDevicesSummary",
Handler: _InternalService_GetDevicesSummary_Handler,

View File

@ -856,6 +856,64 @@ func (x *MetricDataset) GetData() []float32 {
return nil
}
// Join-Server context.
type JoinServerContext struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Session-key ID.
SessionKeyId string `protobuf:"bytes,1,opt,name=session_key_id,json=sessionKeyId,proto3" json:"session_key_id,omitempty"`
// AppSKey envelope.
AppSKey *KeyEnvelope `protobuf:"bytes,2,opt,name=app_s_key,json=appSKey,proto3" json:"app_s_key,omitempty"`
}
func (x *JoinServerContext) Reset() {
*x = JoinServerContext{}
if protoimpl.UnsafeEnabled {
mi := &file_common_common_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *JoinServerContext) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*JoinServerContext) ProtoMessage() {}
func (x *JoinServerContext) ProtoReflect() protoreflect.Message {
mi := &file_common_common_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use JoinServerContext.ProtoReflect.Descriptor instead.
func (*JoinServerContext) Descriptor() ([]byte, []int) {
return file_common_common_proto_rawDescGZIP(), []int{4}
}
func (x *JoinServerContext) GetSessionKeyId() string {
if x != nil {
return x.SessionKeyId
}
return ""
}
func (x *JoinServerContext) GetAppSKey() *KeyEnvelope {
if x != nil {
return x.AppSKey
}
return nil
}
var File_common_common_proto protoreflect.FileDescriptor
var file_common_common_proto_rawDesc = []byte{
@ -893,72 +951,79 @@ var file_common_common_proto_rawDesc = []byte{
0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62,
0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12,
0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x02, 0x52, 0x04, 0x64,
0x61, 0x74, 0x61, 0x2a, 0x2c, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x4f, 0x52, 0x41, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x46,
0x53, 0x4b, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x52, 0x5f, 0x46, 0x48, 0x53, 0x53, 0x10,
0x02, 0x2a, 0xaa, 0x01, 0x0a, 0x06, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05,
0x45, 0x55, 0x38, 0x36, 0x38, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x53, 0x39, 0x31, 0x35,
0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4e, 0x37, 0x37, 0x39, 0x10, 0x03, 0x12, 0x09, 0x0a,
0x05, 0x45, 0x55, 0x34, 0x33, 0x33, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x55, 0x39, 0x31,
0x35, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4e, 0x34, 0x37, 0x30, 0x10, 0x06, 0x12, 0x09,
0x0a, 0x05, 0x41, 0x53, 0x39, 0x32, 0x33, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x53, 0x39,
0x32, 0x33, 0x5f, 0x32, 0x10, 0x0c, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x53, 0x39, 0x32, 0x33, 0x5f,
0x33, 0x10, 0x0d, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x53, 0x39, 0x32, 0x33, 0x5f, 0x34, 0x10, 0x0e,
0x12, 0x09, 0x0a, 0x05, 0x4b, 0x52, 0x39, 0x32, 0x30, 0x10, 0x08, 0x12, 0x09, 0x0a, 0x05, 0x49,
0x4e, 0x38, 0x36, 0x35, 0x10, 0x09, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x55, 0x38, 0x36, 0x34, 0x10,
0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x53, 0x4d, 0x32, 0x34, 0x30, 0x30, 0x10, 0x0b, 0x2a, 0xb3,
0x01, 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4a, 0x4f, 0x49, 0x4e,
0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4a, 0x4f,
0x49, 0x4e, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x55,
0x4e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f,
0x55, 0x50, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52,
0x4d, 0x45, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x12,
0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x44, 0x41, 0x54,
0x41, 0x5f, 0x55, 0x50, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52,
0x4d, 0x45, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x12,
0x12, 0x0a, 0x0e, 0x52, 0x45, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53,
0x54, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x52, 0x4f, 0x50, 0x52, 0x49, 0x45, 0x54, 0x41,
0x52, 0x59, 0x10, 0x07, 0x2a, 0x7e, 0x0a, 0x0a, 0x4d, 0x61, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69,
0x6f, 0x6e, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f,
0x30, 0x5f, 0x30, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x57, 0x41, 0x4e,
0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x31, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x52, 0x41,
0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x32, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x4c,
0x4f, 0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x33, 0x10, 0x03, 0x12, 0x11,
0x0a, 0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x34, 0x10,
0x04, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x31,
0x5f, 0x30, 0x10, 0x05, 0x2a, 0x65, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d,
0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x00,
0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32,
0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x30, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30,
0x32, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x31, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30,
0x30, 0x32, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x32, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50,
0x30, 0x30, 0x32, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x33, 0x10, 0x05, 0x2a, 0x8e, 0x01, 0x0a, 0x0e,
0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b,
0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47,
0x50, 0x53, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x02,
0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x52,
0x5f, 0x54, 0x44, 0x4f, 0x41, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x4f, 0x5f, 0x52,
0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x53, 0x53, 0x49, 0x10, 0x04, 0x12, 0x15,
0x0a, 0x11, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x52, 0x5f, 0x47,
0x4e, 0x53, 0x53, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53,
0x4f, 0x4c, 0x56, 0x45, 0x52, 0x5f, 0x57, 0x49, 0x46, 0x49, 0x10, 0x06, 0x2a, 0x2b, 0x0a, 0x0b,
0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x48,
0x4f, 0x55, 0x52, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x41, 0x59, 0x10, 0x01, 0x12, 0x09,
0x0a, 0x05, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x10, 0x02, 0x2a, 0x32, 0x0a, 0x0a, 0x4d, 0x65, 0x74,
0x72, 0x69, 0x63, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54,
0x45, 0x52, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x42, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45,
0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x41, 0x55, 0x47, 0x45, 0x10, 0x02, 0x2a, 0x34, 0x0a,
0x0b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x0b, 0x0a, 0x07,
0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x41, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x41,
0x53, 0x53, 0x5f, 0x42, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f,
0x43, 0x10, 0x02, 0x42, 0x69, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73,
0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63,
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f,
0x2f, 0x76, 0x34, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x69,
0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x61, 0x74, 0x61, 0x22, 0x6a, 0x0a, 0x11, 0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65,
0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x73, 0x73,
0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x2f,
0x0a, 0x09, 0x61, 0x70, 0x70, 0x5f, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x45, 0x6e,
0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x07, 0x61, 0x70, 0x70, 0x53, 0x4b, 0x65, 0x79, 0x2a,
0x2c, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a,
0x04, 0x4c, 0x4f, 0x52, 0x41, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x53, 0x4b, 0x10, 0x01,
0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x52, 0x5f, 0x46, 0x48, 0x53, 0x53, 0x10, 0x02, 0x2a, 0xaa, 0x01,
0x0a, 0x06, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x55, 0x38, 0x36,
0x38, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x53, 0x39, 0x31, 0x35, 0x10, 0x02, 0x12, 0x09,
0x0a, 0x05, 0x43, 0x4e, 0x37, 0x37, 0x39, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x55, 0x34,
0x33, 0x33, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x55, 0x39, 0x31, 0x35, 0x10, 0x05, 0x12,
0x09, 0x0a, 0x05, 0x43, 0x4e, 0x34, 0x37, 0x30, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x53,
0x39, 0x32, 0x33, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x53, 0x39, 0x32, 0x33, 0x5f, 0x32,
0x10, 0x0c, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x53, 0x39, 0x32, 0x33, 0x5f, 0x33, 0x10, 0x0d, 0x12,
0x0b, 0x0a, 0x07, 0x41, 0x53, 0x39, 0x32, 0x33, 0x5f, 0x34, 0x10, 0x0e, 0x12, 0x09, 0x0a, 0x05,
0x4b, 0x52, 0x39, 0x32, 0x30, 0x10, 0x08, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x38, 0x36, 0x35,
0x10, 0x09, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x55, 0x38, 0x36, 0x34, 0x10, 0x0a, 0x12, 0x0b, 0x0a,
0x07, 0x49, 0x53, 0x4d, 0x32, 0x34, 0x30, 0x30, 0x10, 0x0b, 0x2a, 0xb3, 0x01, 0x0a, 0x05, 0x4d,
0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x51,
0x55, 0x45, 0x53, 0x54, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x41,
0x43, 0x43, 0x45, 0x50, 0x54, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x4e, 0x43, 0x4f, 0x4e,
0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x55, 0x50, 0x10, 0x02,
0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x5f,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x43,
0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x55, 0x50,
0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x5f,
0x44, 0x41, 0x54, 0x41, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x52,
0x45, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x06, 0x12,
0x0f, 0x0a, 0x0b, 0x50, 0x52, 0x4f, 0x50, 0x52, 0x49, 0x45, 0x54, 0x41, 0x52, 0x59, 0x10, 0x07,
0x2a, 0x7e, 0x0a, 0x0a, 0x4d, 0x61, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x11,
0x0a, 0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x30, 0x10,
0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x30,
0x5f, 0x31, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f,
0x31, 0x5f, 0x30, 0x5f, 0x32, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x57,
0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x33, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f,
0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x34, 0x10, 0x04, 0x12, 0x11, 0x0a,
0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x31, 0x5f, 0x30, 0x10, 0x05,
0x2a, 0x65, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x76,
0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01,
0x42, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f, 0x31, 0x5f, 0x30,
0x5f, 0x30, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f, 0x31, 0x5f,
0x30, 0x5f, 0x31, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f, 0x31,
0x5f, 0x30, 0x5f, 0x32, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f,
0x31, 0x5f, 0x30, 0x5f, 0x33, 0x10, 0x05, 0x2a, 0x8e, 0x01, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e,
0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x50, 0x53, 0x10, 0x01,
0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11,
0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x44, 0x4f,
0x41, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c,
0x56, 0x45, 0x52, 0x5f, 0x52, 0x53, 0x53, 0x49, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45,
0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x52, 0x5f, 0x47, 0x4e, 0x53, 0x53, 0x10,
0x05, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45,
0x52, 0x5f, 0x57, 0x49, 0x46, 0x49, 0x10, 0x06, 0x2a, 0x2b, 0x0a, 0x0b, 0x41, 0x67, 0x67, 0x72,
0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x55, 0x52, 0x10,
0x00, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x41, 0x59, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x4f,
0x4e, 0x54, 0x48, 0x10, 0x02, 0x2a, 0x32, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b,
0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x00,
0x12, 0x0c, 0x0a, 0x08, 0x41, 0x42, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x10, 0x01, 0x12, 0x09,
0x0a, 0x05, 0x47, 0x41, 0x55, 0x47, 0x45, 0x10, 0x02, 0x2a, 0x34, 0x0a, 0x0b, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x41, 0x53,
0x53, 0x5f, 0x41, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x42,
0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x43, 0x10, 0x02, 0x42,
0x69, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74,
0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70,
0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f,
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
0x61, 0x63, 0x6b, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x33,
}
var (
@ -974,7 +1039,7 @@ func file_common_common_proto_rawDescGZIP() []byte {
}
var file_common_common_proto_enumTypes = make([]protoimpl.EnumInfo, 9)
var file_common_common_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_common_common_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
var file_common_common_proto_goTypes = []interface{}{
(Modulation)(0), // 0: common.Modulation
(Region)(0), // 1: common.Region
@ -989,18 +1054,20 @@ var file_common_common_proto_goTypes = []interface{}{
(*KeyEnvelope)(nil), // 10: common.KeyEnvelope
(*Metric)(nil), // 11: common.Metric
(*MetricDataset)(nil), // 12: common.MetricDataset
(*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp
(*JoinServerContext)(nil), // 13: common.JoinServerContext
(*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp
}
var file_common_common_proto_depIdxs = []int32{
5, // 0: common.Location.source:type_name -> common.LocationSource
13, // 1: common.Metric.timestamps:type_name -> google.protobuf.Timestamp
14, // 1: common.Metric.timestamps:type_name -> google.protobuf.Timestamp
12, // 2: common.Metric.datasets:type_name -> common.MetricDataset
7, // 3: common.Metric.kind:type_name -> common.MetricKind
4, // [4:4] is the sub-list for method output_type
4, // [4:4] is the sub-list for method input_type
4, // [4:4] is the sub-list for extension type_name
4, // [4:4] is the sub-list for extension extendee
0, // [0:4] is the sub-list for field type_name
10, // 4: common.JoinServerContext.app_s_key:type_name -> common.KeyEnvelope
5, // [5:5] is the sub-list for method output_type
5, // [5:5] is the sub-list for method input_type
5, // [5:5] is the sub-list for extension type_name
5, // [5:5] is the sub-list for extension extendee
0, // [0:5] is the sub-list for field type_name
}
func init() { file_common_common_proto_init() }
@ -1057,6 +1124,18 @@ func file_common_common_proto_init() {
return nil
}
}
file_common_common_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*JoinServerContext); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
@ -1064,7 +1143,7 @@ func file_common_common_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_common_common_proto_rawDesc,
NumEnums: 9,
NumMessages: 4,
NumMessages: 5,
NumExtensions: 0,
NumServices: 0,
},

View File

@ -385,64 +385,6 @@ func (x *UplinkRelayRxInfo) GetWorChannel() uint32 {
return 0
}
// Join-Server context.
type JoinServerContext struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Session-key ID.
SessionKeyId string `protobuf:"bytes,1,opt,name=session_key_id,json=sessionKeyId,proto3" json:"session_key_id,omitempty"`
// AppSKey envelope.
AppSKey *common.KeyEnvelope `protobuf:"bytes,2,opt,name=app_s_key,json=appSKey,proto3" json:"app_s_key,omitempty"`
}
func (x *JoinServerContext) Reset() {
*x = JoinServerContext{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *JoinServerContext) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*JoinServerContext) ProtoMessage() {}
func (x *JoinServerContext) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use JoinServerContext.ProtoReflect.Descriptor instead.
func (*JoinServerContext) Descriptor() ([]byte, []int) {
return file_integration_integration_proto_rawDescGZIP(), []int{2}
}
func (x *JoinServerContext) GetSessionKeyId() string {
if x != nil {
return x.SessionKeyId
}
return ""
}
func (x *JoinServerContext) GetAppSKey() *common.KeyEnvelope {
if x != nil {
return x.AppSKey
}
return nil
}
// UplinkEvent is the message sent when an uplink payload has been received.
type UplinkEvent struct {
state protoimpl.MessageState
@ -482,13 +424,13 @@ type UplinkEvent struct {
// A non-empty value indicatest that ChirpStack does not have access to
// the AppSKey and that the encryption / decryption of the payloads is
// the responsibility of the end-application.
JoinServerContext *JoinServerContext `protobuf:"bytes,15,opt,name=join_server_context,json=joinServerContext,proto3" json:"join_server_context,omitempty"`
JoinServerContext *common.JoinServerContext `protobuf:"bytes,15,opt,name=join_server_context,json=joinServerContext,proto3" json:"join_server_context,omitempty"`
}
func (x *UplinkEvent) Reset() {
*x = UplinkEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[3]
mi := &file_integration_integration_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -501,7 +443,7 @@ func (x *UplinkEvent) String() string {
func (*UplinkEvent) ProtoMessage() {}
func (x *UplinkEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[3]
mi := &file_integration_integration_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -514,7 +456,7 @@ func (x *UplinkEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UplinkEvent.ProtoReflect.Descriptor instead.
func (*UplinkEvent) Descriptor() ([]byte, []int) {
return file_integration_integration_proto_rawDescGZIP(), []int{3}
return file_integration_integration_proto_rawDescGZIP(), []int{2}
}
func (x *UplinkEvent) GetDeduplicationId() string {
@ -615,7 +557,7 @@ func (x *UplinkEvent) GetRelayRxInfo() *UplinkRelayRxInfo {
return nil
}
func (x *UplinkEvent) GetJoinServerContext() *JoinServerContext {
func (x *UplinkEvent) GetJoinServerContext() *common.JoinServerContext {
if x != nil {
return x.JoinServerContext
}
@ -643,13 +585,13 @@ type JoinEvent struct {
// A non-empty value indicatest that ChirpStack does not have access to
// the AppSKey and that the encryption / decryption of the payloads is
// the responsibility of the end-application.
JoinServerContext *JoinServerContext `protobuf:"bytes,6,opt,name=join_server_context,json=joinServerContext,proto3" json:"join_server_context,omitempty"`
JoinServerContext *common.JoinServerContext `protobuf:"bytes,6,opt,name=join_server_context,json=joinServerContext,proto3" json:"join_server_context,omitempty"`
}
func (x *JoinEvent) Reset() {
*x = JoinEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[4]
mi := &file_integration_integration_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -662,7 +604,7 @@ func (x *JoinEvent) String() string {
func (*JoinEvent) ProtoMessage() {}
func (x *JoinEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[4]
mi := &file_integration_integration_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -675,7 +617,7 @@ func (x *JoinEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use JoinEvent.ProtoReflect.Descriptor instead.
func (*JoinEvent) Descriptor() ([]byte, []int) {
return file_integration_integration_proto_rawDescGZIP(), []int{4}
return file_integration_integration_proto_rawDescGZIP(), []int{3}
}
func (x *JoinEvent) GetDeduplicationId() string {
@ -713,7 +655,7 @@ func (x *JoinEvent) GetRelayRxInfo() *UplinkRelayRxInfo {
return nil
}
func (x *JoinEvent) GetJoinServerContext() *JoinServerContext {
func (x *JoinEvent) GetJoinServerContext() *common.JoinServerContext {
if x != nil {
return x.JoinServerContext
}
@ -744,7 +686,7 @@ type AckEvent struct {
func (x *AckEvent) Reset() {
*x = AckEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[5]
mi := &file_integration_integration_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -757,7 +699,7 @@ func (x *AckEvent) String() string {
func (*AckEvent) ProtoMessage() {}
func (x *AckEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[5]
mi := &file_integration_integration_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -770,7 +712,7 @@ func (x *AckEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use AckEvent.ProtoReflect.Descriptor instead.
func (*AckEvent) Descriptor() ([]byte, []int) {
return file_integration_integration_proto_rawDescGZIP(), []int{5}
return file_integration_integration_proto_rawDescGZIP(), []int{4}
}
func (x *AckEvent) GetDeduplicationId() string {
@ -842,7 +784,7 @@ type TxAckEvent struct {
func (x *TxAckEvent) Reset() {
*x = TxAckEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[6]
mi := &file_integration_integration_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -855,7 +797,7 @@ func (x *TxAckEvent) String() string {
func (*TxAckEvent) ProtoMessage() {}
func (x *TxAckEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[6]
mi := &file_integration_integration_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -868,7 +810,7 @@ func (x *TxAckEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use TxAckEvent.ProtoReflect.Descriptor instead.
func (*TxAckEvent) Descriptor() ([]byte, []int) {
return file_integration_integration_proto_rawDescGZIP(), []int{6}
return file_integration_integration_proto_rawDescGZIP(), []int{5}
}
func (x *TxAckEvent) GetDownlinkId() uint32 {
@ -943,7 +885,7 @@ type LogEvent struct {
func (x *LogEvent) Reset() {
*x = LogEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[7]
mi := &file_integration_integration_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -956,7 +898,7 @@ func (x *LogEvent) String() string {
func (*LogEvent) ProtoMessage() {}
func (x *LogEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[7]
mi := &file_integration_integration_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -969,7 +911,7 @@ func (x *LogEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use LogEvent.ProtoReflect.Descriptor instead.
func (*LogEvent) Descriptor() ([]byte, []int) {
return file_integration_integration_proto_rawDescGZIP(), []int{7}
return file_integration_integration_proto_rawDescGZIP(), []int{6}
}
func (x *LogEvent) GetTime() *timestamppb.Timestamp {
@ -1041,7 +983,7 @@ type StatusEvent struct {
func (x *StatusEvent) Reset() {
*x = StatusEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[8]
mi := &file_integration_integration_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1054,7 +996,7 @@ func (x *StatusEvent) String() string {
func (*StatusEvent) ProtoMessage() {}
func (x *StatusEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[8]
mi := &file_integration_integration_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1067,7 +1009,7 @@ func (x *StatusEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use StatusEvent.ProtoReflect.Descriptor instead.
func (*StatusEvent) Descriptor() ([]byte, []int) {
return file_integration_integration_proto_rawDescGZIP(), []int{8}
return file_integration_integration_proto_rawDescGZIP(), []int{7}
}
func (x *StatusEvent) GetDeduplicationId() string {
@ -1138,7 +1080,7 @@ type LocationEvent struct {
func (x *LocationEvent) Reset() {
*x = LocationEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[9]
mi := &file_integration_integration_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1151,7 +1093,7 @@ func (x *LocationEvent) String() string {
func (*LocationEvent) ProtoMessage() {}
func (x *LocationEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[9]
mi := &file_integration_integration_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1164,7 +1106,7 @@ func (x *LocationEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use LocationEvent.ProtoReflect.Descriptor instead.
func (*LocationEvent) Descriptor() ([]byte, []int) {
return file_integration_integration_proto_rawDescGZIP(), []int{9}
return file_integration_integration_proto_rawDescGZIP(), []int{8}
}
func (x *LocationEvent) GetDeduplicationId() string {
@ -1220,7 +1162,7 @@ type IntegrationEvent struct {
func (x *IntegrationEvent) Reset() {
*x = IntegrationEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[10]
mi := &file_integration_integration_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1233,7 +1175,7 @@ func (x *IntegrationEvent) String() string {
func (*IntegrationEvent) ProtoMessage() {}
func (x *IntegrationEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[10]
mi := &file_integration_integration_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1246,7 +1188,7 @@ func (x *IntegrationEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use IntegrationEvent.ProtoReflect.Descriptor instead.
func (*IntegrationEvent) Descriptor() ([]byte, []int) {
return file_integration_integration_proto_rawDescGZIP(), []int{10}
return file_integration_integration_proto_rawDescGZIP(), []int{9}
}
func (x *IntegrationEvent) GetDeduplicationId() string {
@ -1318,7 +1260,7 @@ type DownlinkCommand struct {
func (x *DownlinkCommand) Reset() {
*x = DownlinkCommand{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[11]
mi := &file_integration_integration_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1331,7 +1273,7 @@ func (x *DownlinkCommand) String() string {
func (*DownlinkCommand) ProtoMessage() {}
func (x *DownlinkCommand) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[11]
mi := &file_integration_integration_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1344,7 +1286,7 @@ func (x *DownlinkCommand) ProtoReflect() protoreflect.Message {
// Deprecated: Use DownlinkCommand.ProtoReflect.Descriptor instead.
func (*DownlinkCommand) Descriptor() ([]byte, []int) {
return file_integration_integration_proto_rawDescGZIP(), []int{11}
return file_integration_integration_proto_rawDescGZIP(), []int{10}
}
func (x *DownlinkCommand) GetId() string {
@ -1441,221 +1383,214 @@ var file_integration_integration_proto_rawDesc = []byte{
0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x73, 0x69,
0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x73, 0x73, 0x69, 0x12, 0x1f, 0x0a, 0x0b,
0x77, 0x6f, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x6a, 0x0a,
0x11, 0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65,
0x78, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65,
0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73,
0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x5f,
0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f,
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65,
0x52, 0x07, 0x61, 0x70, 0x70, 0x53, 0x4b, 0x65, 0x79, 0x22, 0xd8, 0x04, 0x0a, 0x0b, 0x55, 0x70,
0x6c, 0x69, 0x6e, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x64,
0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04,
0x74, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69,
0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6e, 0x74, 0x65,
0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19,
0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x64, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x64, 0x72,
0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x64, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x64,
0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x64, 0x72, 0x12, 0x13, 0x0a, 0x05, 0x66,
0x5f, 0x63, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x66, 0x43, 0x6e, 0x74,
0x12, 0x15, 0x0a, 0x06, 0x66, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x05, 0x66, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x72, 0x6d, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75,
0x63, 0x74, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x29, 0x0a, 0x07, 0x72, 0x78,
0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77,
0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x72,
0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69,
0x0d, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0xd3, 0x04,
0x0a, 0x0b, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a,
0x10, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69,
0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
0x66, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x04,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x12, 0x10, 0x0a,
0x03, 0x61, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x64, 0x72, 0x12,
0x0e, 0x0a, 0x02, 0x64, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x64, 0x72, 0x12,
0x13, 0x0a, 0x05, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04,
0x66, 0x43, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x66, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x08,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74,
0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a,
0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x29,
0x0a, 0x07, 0x72, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66,
0x6f, 0x52, 0x06, 0x72, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x0a, 0x07, 0x74, 0x78, 0x5f,
0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e,
0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78,
0x49, 0x6e, 0x66, 0x6f, 0x12, 0x42, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x72, 0x78,
0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6e,
0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b,
0x52, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x72, 0x65, 0x6c,
0x61, 0x79, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x49, 0x0a, 0x13, 0x6a, 0x6f, 0x69, 0x6e,
0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18,
0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4a,
0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
0x52, 0x11, 0x6a, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x78, 0x74, 0x22, 0xca, 0x02, 0x0a, 0x09, 0x4a, 0x6f, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e,
0x74, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x64,
0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04,
0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x61, 0x64,
0x64, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x76, 0x41, 0x64, 0x64,
0x72, 0x12, 0x42, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x72, 0x78, 0x5f, 0x69, 0x6e,
0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x6c,
0x61, 0x79, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x52,
0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x49, 0x0a, 0x13, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65,
0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4a, 0x6f, 0x69, 0x6e,
0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x11, 0x6a,
0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
0x22, 0x85, 0x02, 0x0a, 0x08, 0x41, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a,
0x10, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69,
0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0d, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d,
0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x75, 0x65,
0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77,
0x6c, 0x65, 0x64, 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x63,
0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x5f,
0x63, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08,
0x66, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x22, 0xa5, 0x02, 0x0a, 0x0a, 0x54, 0x78, 0x41,
0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c,
0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x6f,
0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0d, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d,
0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x75, 0x65,
0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f,
0x64, 0x6f, 0x77, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x43, 0x6e, 0x74,
0x44, 0x6f, 0x77, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f,
0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
0x79, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x07,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69,
0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f,
0x12, 0x42, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x72, 0x78, 0x5f, 0x69, 0x6e, 0x66,
0x6f, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x6c, 0x61,
0x79, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x78,
0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4e, 0x0a, 0x13, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x72,
0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
0x74, 0x52, 0x11, 0x6a, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e,
0x74, 0x65, 0x78, 0x74, 0x22, 0xcf, 0x02, 0x0a, 0x09, 0x4a, 0x6f, 0x69, 0x6e, 0x45, 0x76, 0x65,
0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65,
0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a,
0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
0x22, 0xe7, 0x02, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a,
0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a,
0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01,
0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x61,
0x64, 0x64, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x76, 0x41, 0x64,
0x64, 0x72, 0x12, 0x42, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x72, 0x78, 0x5f, 0x69,
0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6e, 0x74, 0x65,
0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65,
0x6c, 0x61, 0x79, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79,
0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4e, 0x0a, 0x13, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x73,
0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x78, 0x74, 0x52, 0x11, 0x6a, 0x6f, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43,
0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x85, 0x02, 0x0a, 0x08, 0x41, 0x63, 0x6b, 0x45, 0x76,
0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64,
0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e,
0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x38,
0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0d, 0x71, 0x75, 0x65, 0x75,
0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c,
0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01,
0x28, 0x08, 0x52, 0x0c, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x64,
0x12, 0x1c, 0x0a, 0x0a, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x06,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x66, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x22, 0xa5,
0x02, 0x0a, 0x0a, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a,
0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x2e,
0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x38,
0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0d, 0x71, 0x75, 0x65, 0x75,
0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x0a,
0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x08, 0x66, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61,
0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x07, 0x74, 0x78, 0x5f,
0x69, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x77, 0x2e,
0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06,
0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xe7, 0x02, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x76,
0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74,
0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e,
0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66,
0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a,
0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x69,
0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65,
0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x28, 0x0a, 0x04, 0x63, 0x6f,
0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04,
0x63, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,
0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x43,
0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e,
0x74, 0x65, 0x78, 0x74, 0x1a, 0x3a, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45,
0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
0x22, 0xcf, 0x02, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74,
0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x64, 0x75,
0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74,
0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x17, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18,
0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x12, 0x32, 0x0a,
0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f,
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, 0x78,
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x12, 0x3a, 0x0a, 0x19, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x76,
0x65, 0x6c, 0x5f, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x07,
0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x76,
0x65, 0x6c, 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x23, 0x0a,
0x0d, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x08,
0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x76,
0x65, 0x6c, 0x22, 0xd2, 0x01, 0x0a, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45,
0x76, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f,
0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12,
0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12,
0x38, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, 0x08, 0x6c, 0x6f, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f,
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c,
0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa2, 0x02, 0x0a, 0x10, 0x49, 0x6e, 0x74, 0x65,
0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10,
0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69,
0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66,
0x6f, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x74,
0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a,
0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6f,
0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74,
0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xb4, 0x01, 0x0a,
0x0f, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x66, 0x5f, 0x70, 0x6f, 0x72,
0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12,
0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61,
0x74, 0x61, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6f, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x2a, 0x2c, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12,
0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52,
0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10,
0x02, 0x2a, 0xea, 0x01, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a,
0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x4f,
0x57, 0x4e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53,
0x49, 0x5a, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x55, 0x50, 0x4c, 0x49, 0x4e, 0x4b, 0x5f,
0x43, 0x4f, 0x44, 0x45, 0x43, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x4f, 0x57, 0x4e, 0x4c,
0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x43, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4f,
0x54, 0x41, 0x41, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x50, 0x4c, 0x49, 0x4e, 0x4b, 0x5f,
0x46, 0x5f, 0x43, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x10, 0x05, 0x12, 0x0e, 0x0a,
0x0a, 0x55, 0x50, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4d, 0x49, 0x43, 0x10, 0x06, 0x12, 0x1f, 0x0a,
0x1b, 0x55, 0x50, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x5f, 0x43, 0x4e, 0x54, 0x5f, 0x52, 0x45,
0x54, 0x52, 0x41, 0x4e, 0x53, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x07, 0x12, 0x14,
0x0a, 0x10, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57,
0x41, 0x59, 0x10, 0x08, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4e, 0x45,
0x57, 0x5f, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x10, 0x09, 0x12, 0x0e,
0x0a, 0x0a, 0x46, 0x5f, 0x43, 0x4e, 0x54, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x0a, 0x42, 0x81,
0x01, 0x0a, 0x1d, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x42, 0x10, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f,
0x74, 0x6f, 0x50, 0x01, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
0x2f, 0x62, 0x72, 0x6f, 0x63, 0x61, 0x61, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x69, 0x6e,
0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xaa, 0x02, 0x16, 0x43, 0x68, 0x69, 0x72,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c,
0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c,
0x65, 0x76, 0x65, 0x6c, 0x12, 0x28, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x14, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x2e, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x20,
0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x12, 0x3c, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x22, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x3a,
0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcf, 0x02, 0x0a, 0x0b, 0x53,
0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65,
0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,
0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f,
0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6e, 0x74,
0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49,
0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x16, 0x0a, 0x06, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52,
0x06, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72,
0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
0x50, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x62,
0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x75, 0x6e, 0x61,
0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17,
0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x55, 0x6e, 0x61, 0x76,
0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x74, 0x74, 0x65,
0x72, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c,
0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0xd2, 0x01, 0x0a,
0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x29,
0x0a, 0x10, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c,
0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49,
0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c,
0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x22, 0xa2, 0x02, 0x0a, 0x10, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c,
0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d,
0x65, 0x12, 0x38, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52,
0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x0a, 0x10, 0x69,
0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f,
0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e,
0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18,
0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06,
0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xb4, 0x01, 0x0a, 0x0f, 0x44, 0x6f, 0x77, 0x6e, 0x6c,
0x69, 0x6e, 0x6b, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65,
0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76,
0x45, 0x75, 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64,
0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65,
0x64, 0x12, 0x15, 0x0a, 0x06, 0x66, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x05, 0x66, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61,
0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x06,
0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53,
0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2a, 0x2c, 0x0a,
0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46,
0x4f, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01,
0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x2a, 0xea, 0x01, 0x0a, 0x07,
0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f,
0x57, 0x4e, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x49, 0x4e, 0x4b,
0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x01, 0x12,
0x10, 0x0a, 0x0c, 0x55, 0x50, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x43, 0x10,
0x02, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x4f,
0x44, 0x45, 0x43, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4f, 0x54, 0x41, 0x41, 0x10, 0x04, 0x12,
0x16, 0x0a, 0x12, 0x55, 0x50, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x5f, 0x43, 0x4e, 0x54, 0x5f,
0x52, 0x45, 0x53, 0x45, 0x54, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x50, 0x4c, 0x49, 0x4e,
0x4b, 0x5f, 0x4d, 0x49, 0x43, 0x10, 0x06, 0x12, 0x1f, 0x0a, 0x1b, 0x55, 0x50, 0x4c, 0x49, 0x4e,
0x4b, 0x5f, 0x46, 0x5f, 0x43, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x4d,
0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x4f, 0x57, 0x4e,
0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0x08, 0x12, 0x18,
0x0a, 0x14, 0x52, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4e, 0x45, 0x57, 0x5f, 0x45, 0x4e, 0x44, 0x5f,
0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x5f, 0x43, 0x4e,
0x54, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x0a, 0x42, 0x81, 0x01, 0x0a, 0x1d, 0x69, 0x6f, 0x2e,
0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69,
0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0x49, 0x6e, 0x74, 0x65,
0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x33,
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x72, 0x6f, 0x63, 0x61,
0x61, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0xaa, 0x02, 0x16, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -1671,72 +1606,70 @@ func file_integration_integration_proto_rawDescGZIP() []byte {
}
var file_integration_integration_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_integration_integration_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
var file_integration_integration_proto_msgTypes = make([]protoimpl.MessageInfo, 13)
var file_integration_integration_proto_goTypes = []interface{}{
(LogLevel)(0), // 0: integration.LogLevel
(LogCode)(0), // 1: integration.LogCode
(*DeviceInfo)(nil), // 2: integration.DeviceInfo
(*UplinkRelayRxInfo)(nil), // 3: integration.UplinkRelayRxInfo
(*JoinServerContext)(nil), // 4: integration.JoinServerContext
(*UplinkEvent)(nil), // 5: integration.UplinkEvent
(*JoinEvent)(nil), // 6: integration.JoinEvent
(*AckEvent)(nil), // 7: integration.AckEvent
(*TxAckEvent)(nil), // 8: integration.TxAckEvent
(*LogEvent)(nil), // 9: integration.LogEvent
(*StatusEvent)(nil), // 10: integration.StatusEvent
(*LocationEvent)(nil), // 11: integration.LocationEvent
(*IntegrationEvent)(nil), // 12: integration.IntegrationEvent
(*DownlinkCommand)(nil), // 13: integration.DownlinkCommand
nil, // 14: integration.DeviceInfo.TagsEntry
nil, // 15: integration.LogEvent.ContextEntry
(common.DeviceClass)(0), // 16: common.DeviceClass
(*common.KeyEnvelope)(nil), // 17: common.KeyEnvelope
(*timestamppb.Timestamp)(nil), // 18: google.protobuf.Timestamp
(*structpb.Struct)(nil), // 19: google.protobuf.Struct
(*gw.UplinkRxInfo)(nil), // 20: gw.UplinkRxInfo
(*gw.UplinkTxInfo)(nil), // 21: gw.UplinkTxInfo
(*gw.DownlinkTxInfo)(nil), // 22: gw.DownlinkTxInfo
(*common.Location)(nil), // 23: common.Location
(LogLevel)(0), // 0: integration.LogLevel
(LogCode)(0), // 1: integration.LogCode
(*DeviceInfo)(nil), // 2: integration.DeviceInfo
(*UplinkRelayRxInfo)(nil), // 3: integration.UplinkRelayRxInfo
(*UplinkEvent)(nil), // 4: integration.UplinkEvent
(*JoinEvent)(nil), // 5: integration.JoinEvent
(*AckEvent)(nil), // 6: integration.AckEvent
(*TxAckEvent)(nil), // 7: integration.TxAckEvent
(*LogEvent)(nil), // 8: integration.LogEvent
(*StatusEvent)(nil), // 9: integration.StatusEvent
(*LocationEvent)(nil), // 10: integration.LocationEvent
(*IntegrationEvent)(nil), // 11: integration.IntegrationEvent
(*DownlinkCommand)(nil), // 12: integration.DownlinkCommand
nil, // 13: integration.DeviceInfo.TagsEntry
nil, // 14: integration.LogEvent.ContextEntry
(common.DeviceClass)(0), // 15: common.DeviceClass
(*timestamppb.Timestamp)(nil), // 16: google.protobuf.Timestamp
(*structpb.Struct)(nil), // 17: google.protobuf.Struct
(*gw.UplinkRxInfo)(nil), // 18: gw.UplinkRxInfo
(*gw.UplinkTxInfo)(nil), // 19: gw.UplinkTxInfo
(*common.JoinServerContext)(nil), // 20: common.JoinServerContext
(*gw.DownlinkTxInfo)(nil), // 21: gw.DownlinkTxInfo
(*common.Location)(nil), // 22: common.Location
}
var file_integration_integration_proto_depIdxs = []int32{
16, // 0: integration.DeviceInfo.device_class_enabled:type_name -> common.DeviceClass
14, // 1: integration.DeviceInfo.tags:type_name -> integration.DeviceInfo.TagsEntry
17, // 2: integration.JoinServerContext.app_s_key:type_name -> common.KeyEnvelope
18, // 3: integration.UplinkEvent.time:type_name -> google.protobuf.Timestamp
2, // 4: integration.UplinkEvent.device_info:type_name -> integration.DeviceInfo
19, // 5: integration.UplinkEvent.object:type_name -> google.protobuf.Struct
20, // 6: integration.UplinkEvent.rx_info:type_name -> gw.UplinkRxInfo
21, // 7: integration.UplinkEvent.tx_info:type_name -> gw.UplinkTxInfo
3, // 8: integration.UplinkEvent.relay_rx_info:type_name -> integration.UplinkRelayRxInfo
4, // 9: integration.UplinkEvent.join_server_context:type_name -> integration.JoinServerContext
18, // 10: integration.JoinEvent.time:type_name -> google.protobuf.Timestamp
2, // 11: integration.JoinEvent.device_info:type_name -> integration.DeviceInfo
3, // 12: integration.JoinEvent.relay_rx_info:type_name -> integration.UplinkRelayRxInfo
4, // 13: integration.JoinEvent.join_server_context:type_name -> integration.JoinServerContext
18, // 14: integration.AckEvent.time:type_name -> google.protobuf.Timestamp
2, // 15: integration.AckEvent.device_info:type_name -> integration.DeviceInfo
18, // 16: integration.TxAckEvent.time:type_name -> google.protobuf.Timestamp
2, // 17: integration.TxAckEvent.device_info:type_name -> integration.DeviceInfo
22, // 18: integration.TxAckEvent.tx_info:type_name -> gw.DownlinkTxInfo
18, // 19: integration.LogEvent.time:type_name -> google.protobuf.Timestamp
2, // 20: integration.LogEvent.device_info:type_name -> integration.DeviceInfo
0, // 21: integration.LogEvent.level:type_name -> integration.LogLevel
1, // 22: integration.LogEvent.code:type_name -> integration.LogCode
15, // 23: integration.LogEvent.context:type_name -> integration.LogEvent.ContextEntry
18, // 24: integration.StatusEvent.time:type_name -> google.protobuf.Timestamp
2, // 25: integration.StatusEvent.device_info:type_name -> integration.DeviceInfo
18, // 26: integration.LocationEvent.time:type_name -> google.protobuf.Timestamp
2, // 27: integration.LocationEvent.device_info:type_name -> integration.DeviceInfo
23, // 28: integration.LocationEvent.location:type_name -> common.Location
18, // 29: integration.IntegrationEvent.time:type_name -> google.protobuf.Timestamp
2, // 30: integration.IntegrationEvent.device_info:type_name -> integration.DeviceInfo
19, // 31: integration.IntegrationEvent.object:type_name -> google.protobuf.Struct
19, // 32: integration.DownlinkCommand.object:type_name -> google.protobuf.Struct
33, // [33:33] is the sub-list for method output_type
33, // [33:33] is the sub-list for method input_type
33, // [33:33] is the sub-list for extension type_name
33, // [33:33] is the sub-list for extension extendee
0, // [0:33] is the sub-list for field type_name
15, // 0: integration.DeviceInfo.device_class_enabled:type_name -> common.DeviceClass
13, // 1: integration.DeviceInfo.tags:type_name -> integration.DeviceInfo.TagsEntry
16, // 2: integration.UplinkEvent.time:type_name -> google.protobuf.Timestamp
2, // 3: integration.UplinkEvent.device_info:type_name -> integration.DeviceInfo
17, // 4: integration.UplinkEvent.object:type_name -> google.protobuf.Struct
18, // 5: integration.UplinkEvent.rx_info:type_name -> gw.UplinkRxInfo
19, // 6: integration.UplinkEvent.tx_info:type_name -> gw.UplinkTxInfo
3, // 7: integration.UplinkEvent.relay_rx_info:type_name -> integration.UplinkRelayRxInfo
20, // 8: integration.UplinkEvent.join_server_context:type_name -> common.JoinServerContext
16, // 9: integration.JoinEvent.time:type_name -> google.protobuf.Timestamp
2, // 10: integration.JoinEvent.device_info:type_name -> integration.DeviceInfo
3, // 11: integration.JoinEvent.relay_rx_info:type_name -> integration.UplinkRelayRxInfo
20, // 12: integration.JoinEvent.join_server_context:type_name -> common.JoinServerContext
16, // 13: integration.AckEvent.time:type_name -> google.protobuf.Timestamp
2, // 14: integration.AckEvent.device_info:type_name -> integration.DeviceInfo
16, // 15: integration.TxAckEvent.time:type_name -> google.protobuf.Timestamp
2, // 16: integration.TxAckEvent.device_info:type_name -> integration.DeviceInfo
21, // 17: integration.TxAckEvent.tx_info:type_name -> gw.DownlinkTxInfo
16, // 18: integration.LogEvent.time:type_name -> google.protobuf.Timestamp
2, // 19: integration.LogEvent.device_info:type_name -> integration.DeviceInfo
0, // 20: integration.LogEvent.level:type_name -> integration.LogLevel
1, // 21: integration.LogEvent.code:type_name -> integration.LogCode
14, // 22: integration.LogEvent.context:type_name -> integration.LogEvent.ContextEntry
16, // 23: integration.StatusEvent.time:type_name -> google.protobuf.Timestamp
2, // 24: integration.StatusEvent.device_info:type_name -> integration.DeviceInfo
16, // 25: integration.LocationEvent.time:type_name -> google.protobuf.Timestamp
2, // 26: integration.LocationEvent.device_info:type_name -> integration.DeviceInfo
22, // 27: integration.LocationEvent.location:type_name -> common.Location
16, // 28: integration.IntegrationEvent.time:type_name -> google.protobuf.Timestamp
2, // 29: integration.IntegrationEvent.device_info:type_name -> integration.DeviceInfo
17, // 30: integration.IntegrationEvent.object:type_name -> google.protobuf.Struct
17, // 31: integration.DownlinkCommand.object:type_name -> google.protobuf.Struct
32, // [32:32] is the sub-list for method output_type
32, // [32:32] is the sub-list for method input_type
32, // [32:32] is the sub-list for extension type_name
32, // [32:32] is the sub-list for extension extendee
0, // [0:32] is the sub-list for field type_name
}
func init() { file_integration_integration_proto_init() }
@ -1770,18 +1703,6 @@ func file_integration_integration_proto_init() {
}
}
file_integration_integration_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*JoinServerContext); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_integration_integration_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UplinkEvent); i {
case 0:
return &v.state
@ -1793,7 +1714,7 @@ func file_integration_integration_proto_init() {
return nil
}
}
file_integration_integration_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
file_integration_integration_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*JoinEvent); i {
case 0:
return &v.state
@ -1805,7 +1726,7 @@ func file_integration_integration_proto_init() {
return nil
}
}
file_integration_integration_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
file_integration_integration_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckEvent); i {
case 0:
return &v.state
@ -1817,7 +1738,7 @@ func file_integration_integration_proto_init() {
return nil
}
}
file_integration_integration_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
file_integration_integration_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TxAckEvent); i {
case 0:
return &v.state
@ -1829,7 +1750,7 @@ func file_integration_integration_proto_init() {
return nil
}
}
file_integration_integration_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
file_integration_integration_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LogEvent); i {
case 0:
return &v.state
@ -1841,7 +1762,7 @@ func file_integration_integration_proto_init() {
return nil
}
}
file_integration_integration_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
file_integration_integration_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*StatusEvent); i {
case 0:
return &v.state
@ -1853,7 +1774,7 @@ func file_integration_integration_proto_init() {
return nil
}
}
file_integration_integration_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
file_integration_integration_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LocationEvent); i {
case 0:
return &v.state
@ -1865,7 +1786,7 @@ func file_integration_integration_proto_init() {
return nil
}
}
file_integration_integration_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
file_integration_integration_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IntegrationEvent); i {
case 0:
return &v.state
@ -1877,7 +1798,7 @@ func file_integration_integration_proto_init() {
return nil
}
}
file_integration_integration_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
file_integration_integration_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DownlinkCommand); i {
case 0:
return &v.state
@ -1896,7 +1817,7 @@ func file_integration_integration_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_integration_integration_proto_rawDesc,
NumEnums: 2,
NumMessages: 14,
NumMessages: 13,
NumExtensions: 0,
NumServices: 0,
},

View File

@ -573,6 +573,11 @@ export class GetDeviceActivationResponse extends jspb.Message {
hasDeviceActivation(): boolean;
clearDeviceActivation(): GetDeviceActivationResponse;
getJoinServerContext(): common_common_pb.JoinServerContext | undefined;
setJoinServerContext(value?: common_common_pb.JoinServerContext): GetDeviceActivationResponse;
hasJoinServerContext(): boolean;
clearJoinServerContext(): GetDeviceActivationResponse;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): GetDeviceActivationResponse.AsObject;
static toObject(includeInstance: boolean, msg: GetDeviceActivationResponse): GetDeviceActivationResponse.AsObject;
@ -584,6 +589,7 @@ export class GetDeviceActivationResponse extends jspb.Message {
export namespace GetDeviceActivationResponse {
export type AsObject = {
deviceActivation?: DeviceActivation.AsObject,
joinServerContext?: common_common_pb.JoinServerContext.AsObject,
}
}

View File

@ -5091,7 +5091,8 @@ proto.api.GetDeviceActivationResponse.prototype.toObject = function(opt_includeI
*/
proto.api.GetDeviceActivationResponse.toObject = function(includeInstance, msg) {
var f, obj = {
deviceActivation: (f = msg.getDeviceActivation()) && proto.api.DeviceActivation.toObject(includeInstance, f)
deviceActivation: (f = msg.getDeviceActivation()) && proto.api.DeviceActivation.toObject(includeInstance, f),
joinServerContext: (f = msg.getJoinServerContext()) && common_common_pb.JoinServerContext.toObject(includeInstance, f)
};
if (includeInstance) {
@ -5133,6 +5134,11 @@ proto.api.GetDeviceActivationResponse.deserializeBinaryFromReader = function(msg
reader.readMessage(value,proto.api.DeviceActivation.deserializeBinaryFromReader);
msg.setDeviceActivation(value);
break;
case 2:
var value = new common_common_pb.JoinServerContext;
reader.readMessage(value,common_common_pb.JoinServerContext.deserializeBinaryFromReader);
msg.setJoinServerContext(value);
break;
default:
reader.skipField();
break;
@ -5170,6 +5176,14 @@ proto.api.GetDeviceActivationResponse.serializeBinaryToWriter = function(message
proto.api.DeviceActivation.serializeBinaryToWriter
);
}
f = message.getJoinServerContext();
if (f != null) {
writer.writeMessage(
2,
f,
common_common_pb.JoinServerContext.serializeBinaryToWriter
);
}
};
@ -5210,6 +5224,43 @@ proto.api.GetDeviceActivationResponse.prototype.hasDeviceActivation = function()
};
/**
* optional common.JoinServerContext join_server_context = 2;
* @return {?proto.common.JoinServerContext}
*/
proto.api.GetDeviceActivationResponse.prototype.getJoinServerContext = function() {
return /** @type{?proto.common.JoinServerContext} */ (
jspb.Message.getWrapperField(this, common_common_pb.JoinServerContext, 2));
};
/**
* @param {?proto.common.JoinServerContext|undefined} value
* @return {!proto.api.GetDeviceActivationResponse} returns this
*/
proto.api.GetDeviceActivationResponse.prototype.setJoinServerContext = function(value) {
return jspb.Message.setWrapperField(this, 2, value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.api.GetDeviceActivationResponse} returns this
*/
proto.api.GetDeviceActivationResponse.prototype.clearJoinServerContext = function() {
return this.setJoinServerContext(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.api.GetDeviceActivationResponse.prototype.hasJoinServerContext = function() {
return jspb.Message.getField(this, 2) != null;
};

View File

@ -160,6 +160,9 @@ export class DeviceProfile extends jspb.Message {
getRelayOverallLimitBucketSize(): number;
setRelayOverallLimitBucketSize(value: number): DeviceProfile;
getAllowRoaming(): boolean;
setAllowRoaming(value: boolean): DeviceProfile;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): DeviceProfile.AsObject;
static toObject(includeInstance: boolean, msg: DeviceProfile): DeviceProfile.AsObject;
@ -221,6 +224,7 @@ export namespace DeviceProfile {
relayNotifyLimitBucketSize: number,
relayGlobalUplinkLimitBucketSize: number,
relayOverallLimitBucketSize: number,
allowRoaming: boolean,
}
}

View File

@ -393,7 +393,8 @@ proto.api.DeviceProfile.toObject = function(includeInstance, msg) {
relayJoinReqLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 48, 0),
relayNotifyLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 49, 0),
relayGlobalUplinkLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 50, 0),
relayOverallLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 51, 0)
relayOverallLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 51, 0),
allowRoaming: jspb.Message.getBooleanFieldWithDefault(msg, 52, false)
};
if (includeInstance) {
@ -638,6 +639,10 @@ proto.api.DeviceProfile.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayOverallLimitBucketSize(value);
break;
case 52:
var value = /** @type {boolean} */ (reader.readBool());
msg.setAllowRoaming(value);
break;
default:
reader.skipField();
break;
@ -1018,6 +1023,13 @@ proto.api.DeviceProfile.serializeBinaryToWriter = function(message, writer) {
f
);
}
f = message.getAllowRoaming();
if (f) {
writer.writeBool(
52,
f
);
}
};
@ -1947,6 +1959,24 @@ proto.api.DeviceProfile.prototype.setRelayOverallLimitBucketSize = function(valu
};
/**
* optional bool allow_roaming = 52;
* @return {boolean}
*/
proto.api.DeviceProfile.prototype.getAllowRoaming = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 52, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setAllowRoaming = function(value) {
return jspb.Message.setProto3BooleanField(this, 52, value);
};

View File

@ -65,6 +65,13 @@ export class InternalServiceClient {
response: api_internal_pb.OpenIdConnectLoginResponse) => void
): grpcWeb.ClientReadableStream<api_internal_pb.OpenIdConnectLoginResponse>;
oAuth2Login(
request: api_internal_pb.OAuth2LoginRequest,
metadata: grpcWeb.Metadata | undefined,
callback: (err: grpcWeb.RpcError,
response: api_internal_pb.OAuth2LoginResponse) => void
): grpcWeb.ClientReadableStream<api_internal_pb.OAuth2LoginResponse>;
getDevicesSummary(
request: api_internal_pb.GetDevicesSummaryRequest,
metadata: grpcWeb.Metadata | undefined,
@ -155,6 +162,11 @@ export class InternalServicePromiseClient {
metadata?: grpcWeb.Metadata
): Promise<api_internal_pb.OpenIdConnectLoginResponse>;
oAuth2Login(
request: api_internal_pb.OAuth2LoginRequest,
metadata?: grpcWeb.Metadata
): Promise<api_internal_pb.OAuth2LoginResponse>;
getDevicesSummary(
request: api_internal_pb.GetDevicesSummaryRequest,
metadata?: grpcWeb.Metadata

View File

@ -570,6 +570,67 @@ proto.api.InternalServicePromiseClient.prototype.openIdConnectLogin =
};
/**
* @const
* @type {!grpc.web.MethodDescriptor<
* !proto.api.OAuth2LoginRequest,
* !proto.api.OAuth2LoginResponse>}
*/
const methodDescriptor_InternalService_OAuth2Login = new grpc.web.MethodDescriptor(
'/api.InternalService/OAuth2Login',
grpc.web.MethodType.UNARY,
proto.api.OAuth2LoginRequest,
proto.api.OAuth2LoginResponse,
/**
* @param {!proto.api.OAuth2LoginRequest} request
* @return {!Uint8Array}
*/
function(request) {
return request.serializeBinary();
},
proto.api.OAuth2LoginResponse.deserializeBinary
);
/**
* @param {!proto.api.OAuth2LoginRequest} request The
* request proto
* @param {?Object<string, string>} metadata User defined
* call metadata
* @param {function(?grpc.web.RpcError, ?proto.api.OAuth2LoginResponse)}
* callback The callback function(error, response)
* @return {!grpc.web.ClientReadableStream<!proto.api.OAuth2LoginResponse>|undefined}
* The XHR Node Readable Stream
*/
proto.api.InternalServiceClient.prototype.oAuth2Login =
function(request, metadata, callback) {
return this.client_.rpcCall(this.hostname_ +
'/api.InternalService/OAuth2Login',
request,
metadata || {},
methodDescriptor_InternalService_OAuth2Login,
callback);
};
/**
* @param {!proto.api.OAuth2LoginRequest} request The
* request proto
* @param {?Object<string, string>=} metadata User defined
* call metadata
* @return {!Promise<!proto.api.OAuth2LoginResponse>}
* Promise that resolves to the response
*/
proto.api.InternalServicePromiseClient.prototype.oAuth2Login =
function(request, metadata) {
return this.client_.unaryCall(this.hostname_ +
'/api.InternalService/OAuth2Login',
request,
metadata || {},
methodDescriptor_InternalService_OAuth2Login);
};
/**
* @const
* @type {!grpc.web.MethodDescriptor<

View File

@ -364,6 +364,11 @@ export class SettingsResponse extends jspb.Message {
hasOpenidConnect(): boolean;
clearOpenidConnect(): SettingsResponse;
getOauth2(): OAuth2 | undefined;
setOauth2(value?: OAuth2): SettingsResponse;
hasOauth2(): boolean;
clearOauth2(): SettingsResponse;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): SettingsResponse.AsObject;
static toObject(includeInstance: boolean, msg: SettingsResponse): SettingsResponse.AsObject;
@ -375,6 +380,7 @@ export class SettingsResponse extends jspb.Message {
export namespace SettingsResponse {
export type AsObject = {
openidConnect?: OpenIdConnect.AsObject,
oauth2?: OAuth2.AsObject,
}
}
@ -391,6 +397,9 @@ export class OpenIdConnect extends jspb.Message {
getLogoutUrl(): string;
setLogoutUrl(value: string): OpenIdConnect;
getLoginRedirect(): boolean;
setLoginRedirect(value: boolean): OpenIdConnect;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): OpenIdConnect.AsObject;
static toObject(includeInstance: boolean, msg: OpenIdConnect): OpenIdConnect.AsObject;
@ -405,6 +414,41 @@ export namespace OpenIdConnect {
loginUrl: string,
loginLabel: string,
logoutUrl: string,
loginRedirect: boolean,
}
}
export class OAuth2 extends jspb.Message {
getEnabled(): boolean;
setEnabled(value: boolean): OAuth2;
getLoginUrl(): string;
setLoginUrl(value: string): OAuth2;
getLoginLabel(): string;
setLoginLabel(value: string): OAuth2;
getLogoutUrl(): string;
setLogoutUrl(value: string): OAuth2;
getLoginRedirect(): boolean;
setLoginRedirect(value: boolean): OAuth2;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): OAuth2.AsObject;
static toObject(includeInstance: boolean, msg: OAuth2): OAuth2.AsObject;
static serializeBinaryToWriter(message: OAuth2, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): OAuth2;
static deserializeBinaryFromReader(message: OAuth2, reader: jspb.BinaryReader): OAuth2;
}
export namespace OAuth2 {
export type AsObject = {
enabled: boolean,
loginUrl: string,
loginLabel: string,
logoutUrl: string,
loginRedirect: boolean,
}
}
@ -448,6 +492,46 @@ export namespace OpenIdConnectLoginResponse {
}
}
export class OAuth2LoginRequest extends jspb.Message {
getCode(): string;
setCode(value: string): OAuth2LoginRequest;
getState(): string;
setState(value: string): OAuth2LoginRequest;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): OAuth2LoginRequest.AsObject;
static toObject(includeInstance: boolean, msg: OAuth2LoginRequest): OAuth2LoginRequest.AsObject;
static serializeBinaryToWriter(message: OAuth2LoginRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): OAuth2LoginRequest;
static deserializeBinaryFromReader(message: OAuth2LoginRequest, reader: jspb.BinaryReader): OAuth2LoginRequest;
}
export namespace OAuth2LoginRequest {
export type AsObject = {
code: string,
state: string,
}
}
export class OAuth2LoginResponse extends jspb.Message {
getToken(): string;
setToken(value: string): OAuth2LoginResponse;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): OAuth2LoginResponse.AsObject;
static toObject(includeInstance: boolean, msg: OAuth2LoginResponse): OAuth2LoginResponse.AsObject;
static serializeBinaryToWriter(message: OAuth2LoginResponse, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): OAuth2LoginResponse;
static deserializeBinaryFromReader(message: OAuth2LoginResponse, reader: jspb.BinaryReader): OAuth2LoginResponse;
}
export namespace OAuth2LoginResponse {
export type AsObject = {
token: string,
}
}
export class GetDevicesSummaryRequest extends jspb.Message {
getTenantId(): string;
setTenantId(value: string): GetDevicesSummaryRequest;

View File

@ -39,6 +39,9 @@ goog.exportSymbol('proto.api.ListRegionsResponse', null, global);
goog.exportSymbol('proto.api.LogItem', null, global);
goog.exportSymbol('proto.api.LoginRequest', null, global);
goog.exportSymbol('proto.api.LoginResponse', null, global);
goog.exportSymbol('proto.api.OAuth2', null, global);
goog.exportSymbol('proto.api.OAuth2LoginRequest', null, global);
goog.exportSymbol('proto.api.OAuth2LoginResponse', null, global);
goog.exportSymbol('proto.api.OpenIdConnect', null, global);
goog.exportSymbol('proto.api.OpenIdConnectLoginRequest', null, global);
goog.exportSymbol('proto.api.OpenIdConnectLoginResponse', null, global);
@ -365,6 +368,27 @@ if (goog.DEBUG && !COMPILED) {
*/
proto.api.OpenIdConnect.displayName = 'proto.api.OpenIdConnect';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.api.OAuth2 = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.api.OAuth2, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.api.OAuth2.displayName = 'proto.api.OAuth2';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
@ -407,6 +431,48 @@ if (goog.DEBUG && !COMPILED) {
*/
proto.api.OpenIdConnectLoginResponse.displayName = 'proto.api.OpenIdConnectLoginResponse';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.api.OAuth2LoginRequest = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.api.OAuth2LoginRequest, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.api.OAuth2LoginRequest.displayName = 'proto.api.OAuth2LoginRequest';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.api.OAuth2LoginResponse = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.api.OAuth2LoginResponse, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.api.OAuth2LoginResponse.displayName = 'proto.api.OAuth2LoginResponse';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
@ -3356,7 +3422,8 @@ proto.api.SettingsResponse.prototype.toObject = function(opt_includeInstance) {
*/
proto.api.SettingsResponse.toObject = function(includeInstance, msg) {
var f, obj = {
openidConnect: (f = msg.getOpenidConnect()) && proto.api.OpenIdConnect.toObject(includeInstance, f)
openidConnect: (f = msg.getOpenidConnect()) && proto.api.OpenIdConnect.toObject(includeInstance, f),
oauth2: (f = msg.getOauth2()) && proto.api.OAuth2.toObject(includeInstance, f)
};
if (includeInstance) {
@ -3398,6 +3465,11 @@ proto.api.SettingsResponse.deserializeBinaryFromReader = function(msg, reader) {
reader.readMessage(value,proto.api.OpenIdConnect.deserializeBinaryFromReader);
msg.setOpenidConnect(value);
break;
case 2:
var value = new proto.api.OAuth2;
reader.readMessage(value,proto.api.OAuth2.deserializeBinaryFromReader);
msg.setOauth2(value);
break;
default:
reader.skipField();
break;
@ -3435,6 +3507,14 @@ proto.api.SettingsResponse.serializeBinaryToWriter = function(message, writer) {
proto.api.OpenIdConnect.serializeBinaryToWriter
);
}
f = message.getOauth2();
if (f != null) {
writer.writeMessage(
2,
f,
proto.api.OAuth2.serializeBinaryToWriter
);
}
};
@ -3475,6 +3555,43 @@ proto.api.SettingsResponse.prototype.hasOpenidConnect = function() {
};
/**
* optional OAuth2 oauth2 = 2;
* @return {?proto.api.OAuth2}
*/
proto.api.SettingsResponse.prototype.getOauth2 = function() {
return /** @type{?proto.api.OAuth2} */ (
jspb.Message.getWrapperField(this, proto.api.OAuth2, 2));
};
/**
* @param {?proto.api.OAuth2|undefined} value
* @return {!proto.api.SettingsResponse} returns this
*/
proto.api.SettingsResponse.prototype.setOauth2 = function(value) {
return jspb.Message.setWrapperField(this, 2, value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.api.SettingsResponse} returns this
*/
proto.api.SettingsResponse.prototype.clearOauth2 = function() {
return this.setOauth2(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.api.SettingsResponse.prototype.hasOauth2 = function() {
return jspb.Message.getField(this, 2) != null;
};
@ -3510,7 +3627,8 @@ proto.api.OpenIdConnect.toObject = function(includeInstance, msg) {
enabled: jspb.Message.getBooleanFieldWithDefault(msg, 1, false),
loginUrl: jspb.Message.getFieldWithDefault(msg, 2, ""),
loginLabel: jspb.Message.getFieldWithDefault(msg, 3, ""),
logoutUrl: jspb.Message.getFieldWithDefault(msg, 4, "")
logoutUrl: jspb.Message.getFieldWithDefault(msg, 4, ""),
loginRedirect: jspb.Message.getBooleanFieldWithDefault(msg, 5, false)
};
if (includeInstance) {
@ -3563,6 +3681,10 @@ proto.api.OpenIdConnect.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {string} */ (reader.readString());
msg.setLogoutUrl(value);
break;
case 5:
var value = /** @type {boolean} */ (reader.readBool());
msg.setLoginRedirect(value);
break;
default:
reader.skipField();
break;
@ -3620,6 +3742,13 @@ proto.api.OpenIdConnect.serializeBinaryToWriter = function(message, writer) {
f
);
}
f = message.getLoginRedirect();
if (f) {
writer.writeBool(
5,
f
);
}
};
@ -3695,6 +3824,274 @@ proto.api.OpenIdConnect.prototype.setLogoutUrl = function(value) {
};
/**
* optional bool login_redirect = 5;
* @return {boolean}
*/
proto.api.OpenIdConnect.prototype.getLoginRedirect = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false));
};
/**
* @param {boolean} value
* @return {!proto.api.OpenIdConnect} returns this
*/
proto.api.OpenIdConnect.prototype.setLoginRedirect = function(value) {
return jspb.Message.setProto3BooleanField(this, 5, value);
};
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.api.OAuth2.prototype.toObject = function(opt_includeInstance) {
return proto.api.OAuth2.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.api.OAuth2} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2.toObject = function(includeInstance, msg) {
var f, obj = {
enabled: jspb.Message.getBooleanFieldWithDefault(msg, 1, false),
loginUrl: jspb.Message.getFieldWithDefault(msg, 2, ""),
loginLabel: jspb.Message.getFieldWithDefault(msg, 3, ""),
logoutUrl: jspb.Message.getFieldWithDefault(msg, 4, ""),
loginRedirect: jspb.Message.getBooleanFieldWithDefault(msg, 5, false)
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.api.OAuth2}
*/
proto.api.OAuth2.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.api.OAuth2;
return proto.api.OAuth2.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.api.OAuth2} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.api.OAuth2}
*/
proto.api.OAuth2.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {boolean} */ (reader.readBool());
msg.setEnabled(value);
break;
case 2:
var value = /** @type {string} */ (reader.readString());
msg.setLoginUrl(value);
break;
case 3:
var value = /** @type {string} */ (reader.readString());
msg.setLoginLabel(value);
break;
case 4:
var value = /** @type {string} */ (reader.readString());
msg.setLogoutUrl(value);
break;
case 5:
var value = /** @type {boolean} */ (reader.readBool());
msg.setLoginRedirect(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.api.OAuth2.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.api.OAuth2.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.api.OAuth2} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getEnabled();
if (f) {
writer.writeBool(
1,
f
);
}
f = message.getLoginUrl();
if (f.length > 0) {
writer.writeString(
2,
f
);
}
f = message.getLoginLabel();
if (f.length > 0) {
writer.writeString(
3,
f
);
}
f = message.getLogoutUrl();
if (f.length > 0) {
writer.writeString(
4,
f
);
}
f = message.getLoginRedirect();
if (f) {
writer.writeBool(
5,
f
);
}
};
/**
* optional bool enabled = 1;
* @return {boolean}
*/
proto.api.OAuth2.prototype.getEnabled = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false));
};
/**
* @param {boolean} value
* @return {!proto.api.OAuth2} returns this
*/
proto.api.OAuth2.prototype.setEnabled = function(value) {
return jspb.Message.setProto3BooleanField(this, 1, value);
};
/**
* optional string login_url = 2;
* @return {string}
*/
proto.api.OAuth2.prototype.getLoginUrl = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2} returns this
*/
proto.api.OAuth2.prototype.setLoginUrl = function(value) {
return jspb.Message.setProto3StringField(this, 2, value);
};
/**
* optional string login_label = 3;
* @return {string}
*/
proto.api.OAuth2.prototype.getLoginLabel = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2} returns this
*/
proto.api.OAuth2.prototype.setLoginLabel = function(value) {
return jspb.Message.setProto3StringField(this, 3, value);
};
/**
* optional string logout_url = 4;
* @return {string}
*/
proto.api.OAuth2.prototype.getLogoutUrl = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2} returns this
*/
proto.api.OAuth2.prototype.setLogoutUrl = function(value) {
return jspb.Message.setProto3StringField(this, 4, value);
};
/**
* optional bool login_redirect = 5;
* @return {boolean}
*/
proto.api.OAuth2.prototype.getLoginRedirect = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false));
};
/**
* @param {boolean} value
* @return {!proto.api.OAuth2} returns this
*/
proto.api.OAuth2.prototype.setLoginRedirect = function(value) {
return jspb.Message.setProto3BooleanField(this, 5, value);
};
@ -3988,6 +4385,296 @@ proto.api.OpenIdConnectLoginResponse.prototype.setToken = function(value) {
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.api.OAuth2LoginRequest.prototype.toObject = function(opt_includeInstance) {
return proto.api.OAuth2LoginRequest.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.api.OAuth2LoginRequest} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2LoginRequest.toObject = function(includeInstance, msg) {
var f, obj = {
code: jspb.Message.getFieldWithDefault(msg, 1, ""),
state: jspb.Message.getFieldWithDefault(msg, 2, "")
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.api.OAuth2LoginRequest}
*/
proto.api.OAuth2LoginRequest.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.api.OAuth2LoginRequest;
return proto.api.OAuth2LoginRequest.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.api.OAuth2LoginRequest} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.api.OAuth2LoginRequest}
*/
proto.api.OAuth2LoginRequest.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {string} */ (reader.readString());
msg.setCode(value);
break;
case 2:
var value = /** @type {string} */ (reader.readString());
msg.setState(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.api.OAuth2LoginRequest.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.api.OAuth2LoginRequest.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.api.OAuth2LoginRequest} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2LoginRequest.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getCode();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
f = message.getState();
if (f.length > 0) {
writer.writeString(
2,
f
);
}
};
/**
* optional string code = 1;
* @return {string}
*/
proto.api.OAuth2LoginRequest.prototype.getCode = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2LoginRequest} returns this
*/
proto.api.OAuth2LoginRequest.prototype.setCode = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
/**
* optional string state = 2;
* @return {string}
*/
proto.api.OAuth2LoginRequest.prototype.getState = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2LoginRequest} returns this
*/
proto.api.OAuth2LoginRequest.prototype.setState = function(value) {
return jspb.Message.setProto3StringField(this, 2, value);
};
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.api.OAuth2LoginResponse.prototype.toObject = function(opt_includeInstance) {
return proto.api.OAuth2LoginResponse.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.api.OAuth2LoginResponse} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2LoginResponse.toObject = function(includeInstance, msg) {
var f, obj = {
token: jspb.Message.getFieldWithDefault(msg, 1, "")
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.api.OAuth2LoginResponse}
*/
proto.api.OAuth2LoginResponse.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.api.OAuth2LoginResponse;
return proto.api.OAuth2LoginResponse.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.api.OAuth2LoginResponse} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.api.OAuth2LoginResponse}
*/
proto.api.OAuth2LoginResponse.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {string} */ (reader.readString());
msg.setToken(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.api.OAuth2LoginResponse.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.api.OAuth2LoginResponse.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.api.OAuth2LoginResponse} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2LoginResponse.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getToken();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
};
/**
* optional string token = 1;
* @return {string}
*/
proto.api.OAuth2LoginResponse.prototype.getToken = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2LoginResponse} returns this
*/
proto.api.OAuth2LoginResponse.prototype.setToken = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.

View File

@ -119,6 +119,30 @@ export namespace MetricDataset {
}
}
export class JoinServerContext extends jspb.Message {
getSessionKeyId(): string;
setSessionKeyId(value: string): JoinServerContext;
getAppSKey(): KeyEnvelope | undefined;
setAppSKey(value?: KeyEnvelope): JoinServerContext;
hasAppSKey(): boolean;
clearAppSKey(): JoinServerContext;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): JoinServerContext.AsObject;
static toObject(includeInstance: boolean, msg: JoinServerContext): JoinServerContext.AsObject;
static serializeBinaryToWriter(message: JoinServerContext, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): JoinServerContext;
static deserializeBinaryFromReader(message: JoinServerContext, reader: jspb.BinaryReader): JoinServerContext;
}
export namespace JoinServerContext {
export type AsObject = {
sessionKeyId: string,
appSKey?: KeyEnvelope.AsObject,
}
}
export enum Modulation {
LORA = 0,
FSK = 1,

View File

@ -16,6 +16,7 @@ var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/time
goog.object.extend(proto, google_protobuf_timestamp_pb);
goog.exportSymbol('proto.common.Aggregation', null, global);
goog.exportSymbol('proto.common.DeviceClass', null, global);
goog.exportSymbol('proto.common.JoinServerContext', null, global);
goog.exportSymbol('proto.common.KeyEnvelope', null, global);
goog.exportSymbol('proto.common.Location', null, global);
goog.exportSymbol('proto.common.LocationSource', null, global);
@ -111,6 +112,27 @@ if (goog.DEBUG && !COMPILED) {
*/
proto.common.MetricDataset.displayName = 'proto.common.MetricDataset';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.common.JoinServerContext = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.common.JoinServerContext, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.common.JoinServerContext.displayName = 'proto.common.JoinServerContext';
}
@ -1004,6 +1026,187 @@ proto.common.MetricDataset.prototype.clearDataList = function() {
};
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.common.JoinServerContext.prototype.toObject = function(opt_includeInstance) {
return proto.common.JoinServerContext.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.common.JoinServerContext} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.common.JoinServerContext.toObject = function(includeInstance, msg) {
var f, obj = {
sessionKeyId: jspb.Message.getFieldWithDefault(msg, 1, ""),
appSKey: (f = msg.getAppSKey()) && proto.common.KeyEnvelope.toObject(includeInstance, f)
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.common.JoinServerContext}
*/
proto.common.JoinServerContext.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.common.JoinServerContext;
return proto.common.JoinServerContext.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.common.JoinServerContext} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.common.JoinServerContext}
*/
proto.common.JoinServerContext.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {string} */ (reader.readString());
msg.setSessionKeyId(value);
break;
case 2:
var value = new proto.common.KeyEnvelope;
reader.readMessage(value,proto.common.KeyEnvelope.deserializeBinaryFromReader);
msg.setAppSKey(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.common.JoinServerContext.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.common.JoinServerContext.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.common.JoinServerContext} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.common.JoinServerContext.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getSessionKeyId();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
f = message.getAppSKey();
if (f != null) {
writer.writeMessage(
2,
f,
proto.common.KeyEnvelope.serializeBinaryToWriter
);
}
};
/**
* optional string session_key_id = 1;
* @return {string}
*/
proto.common.JoinServerContext.prototype.getSessionKeyId = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.common.JoinServerContext} returns this
*/
proto.common.JoinServerContext.prototype.setSessionKeyId = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
/**
* optional KeyEnvelope app_s_key = 2;
* @return {?proto.common.KeyEnvelope}
*/
proto.common.JoinServerContext.prototype.getAppSKey = function() {
return /** @type{?proto.common.KeyEnvelope} */ (
jspb.Message.getWrapperField(this, proto.common.KeyEnvelope, 2));
};
/**
* @param {?proto.common.KeyEnvelope|undefined} value
* @return {!proto.common.JoinServerContext} returns this
*/
proto.common.JoinServerContext.prototype.setAppSKey = function(value) {
return jspb.Message.setWrapperField(this, 2, value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.common.JoinServerContext} returns this
*/
proto.common.JoinServerContext.prototype.clearAppSKey = function() {
return this.setAppSKey(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.common.JoinServerContext.prototype.hasAppSKey = function() {
return jspb.Message.getField(this, 2) != null;
};
/**
* @enum {number}
*/

View File

@ -1,6 +1,6 @@
{
"name": "@chirpstack/chirpstack-api-grpc-web",
"version": "4.6.0-test.3",
"version": "4.7.0",
"description": "Chirpstack gRPC-web API",
"license": "MIT",
"devDependencies": {

View File

@ -8,7 +8,7 @@ plugins {
}
group = "io.chirpstack"
version = "4.6.0-test.3"
version = "4.7.0"
repositories {
mavenCentral()

View File

@ -612,6 +612,11 @@ export class GetDeviceActivationResponse extends jspb.Message {
getDeviceActivation(): DeviceActivation | undefined;
setDeviceActivation(value?: DeviceActivation): void;
hasJoinServerContext(): boolean;
clearJoinServerContext(): void;
getJoinServerContext(): common_common_pb.JoinServerContext | undefined;
setJoinServerContext(value?: common_common_pb.JoinServerContext): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): GetDeviceActivationResponse.AsObject;
static toObject(includeInstance: boolean, msg: GetDeviceActivationResponse): GetDeviceActivationResponse.AsObject;
@ -625,6 +630,7 @@ export class GetDeviceActivationResponse extends jspb.Message {
export namespace GetDeviceActivationResponse {
export type AsObject = {
deviceActivation?: DeviceActivation.AsObject,
joinServerContext?: common_common_pb.JoinServerContext.AsObject,
}
}

View File

@ -5091,7 +5091,8 @@ proto.api.GetDeviceActivationResponse.prototype.toObject = function(opt_includeI
*/
proto.api.GetDeviceActivationResponse.toObject = function(includeInstance, msg) {
var f, obj = {
deviceActivation: (f = msg.getDeviceActivation()) && proto.api.DeviceActivation.toObject(includeInstance, f)
deviceActivation: (f = msg.getDeviceActivation()) && proto.api.DeviceActivation.toObject(includeInstance, f),
joinServerContext: (f = msg.getJoinServerContext()) && common_common_pb.JoinServerContext.toObject(includeInstance, f)
};
if (includeInstance) {
@ -5133,6 +5134,11 @@ proto.api.GetDeviceActivationResponse.deserializeBinaryFromReader = function(msg
reader.readMessage(value,proto.api.DeviceActivation.deserializeBinaryFromReader);
msg.setDeviceActivation(value);
break;
case 2:
var value = new common_common_pb.JoinServerContext;
reader.readMessage(value,common_common_pb.JoinServerContext.deserializeBinaryFromReader);
msg.setJoinServerContext(value);
break;
default:
reader.skipField();
break;
@ -5170,6 +5176,14 @@ proto.api.GetDeviceActivationResponse.serializeBinaryToWriter = function(message
proto.api.DeviceActivation.serializeBinaryToWriter
);
}
f = message.getJoinServerContext();
if (f != null) {
writer.writeMessage(
2,
f,
common_common_pb.JoinServerContext.serializeBinaryToWriter
);
}
};
@ -5210,6 +5224,43 @@ proto.api.GetDeviceActivationResponse.prototype.hasDeviceActivation = function()
};
/**
* optional common.JoinServerContext join_server_context = 2;
* @return {?proto.common.JoinServerContext}
*/
proto.api.GetDeviceActivationResponse.prototype.getJoinServerContext = function() {
return /** @type{?proto.common.JoinServerContext} */ (
jspb.Message.getWrapperField(this, common_common_pb.JoinServerContext, 2));
};
/**
* @param {?proto.common.JoinServerContext|undefined} value
* @return {!proto.api.GetDeviceActivationResponse} returns this
*/
proto.api.GetDeviceActivationResponse.prototype.setJoinServerContext = function(value) {
return jspb.Message.setWrapperField(this, 2, value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.api.GetDeviceActivationResponse} returns this
*/
proto.api.GetDeviceActivationResponse.prototype.clearJoinServerContext = function() {
return this.setJoinServerContext(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.api.GetDeviceActivationResponse.prototype.hasJoinServerContext = function() {
return jspb.Message.getField(this, 2) != null;
};

View File

@ -159,6 +159,9 @@ export class DeviceProfile extends jspb.Message {
getRelayOverallLimitBucketSize(): number;
setRelayOverallLimitBucketSize(value: number): void;
getAllowRoaming(): boolean;
setAllowRoaming(value: boolean): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): DeviceProfile.AsObject;
static toObject(includeInstance: boolean, msg: DeviceProfile): DeviceProfile.AsObject;
@ -222,6 +225,7 @@ export namespace DeviceProfile {
relayNotifyLimitBucketSize: number,
relayGlobalUplinkLimitBucketSize: number,
relayOverallLimitBucketSize: number,
allowRoaming: boolean,
}
}

View File

@ -393,7 +393,8 @@ proto.api.DeviceProfile.toObject = function(includeInstance, msg) {
relayJoinReqLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 48, 0),
relayNotifyLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 49, 0),
relayGlobalUplinkLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 50, 0),
relayOverallLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 51, 0)
relayOverallLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 51, 0),
allowRoaming: jspb.Message.getBooleanFieldWithDefault(msg, 52, false)
};
if (includeInstance) {
@ -638,6 +639,10 @@ proto.api.DeviceProfile.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayOverallLimitBucketSize(value);
break;
case 52:
var value = /** @type {boolean} */ (reader.readBool());
msg.setAllowRoaming(value);
break;
default:
reader.skipField();
break;
@ -1018,6 +1023,13 @@ proto.api.DeviceProfile.serializeBinaryToWriter = function(message, writer) {
f
);
}
f = message.getAllowRoaming();
if (f) {
writer.writeBool(
52,
f
);
}
};
@ -1947,6 +1959,24 @@ proto.api.DeviceProfile.prototype.setRelayOverallLimitBucketSize = function(valu
};
/**
* optional bool allow_roaming = 52;
* @return {boolean}
*/
proto.api.DeviceProfile.prototype.getAllowRoaming = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 52, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setAllowRoaming = function(value) {
return jspb.Message.setProto3BooleanField(this, 52, value);
};

View File

@ -16,6 +16,7 @@ interface IInternalServiceService extends grpc.ServiceDefinition<grpc.UntypedSer
listApiKeys: grpc.MethodDefinition<api_internal_pb.ListApiKeysRequest, api_internal_pb.ListApiKeysResponse>;
settings: grpc.MethodDefinition<google_protobuf_empty_pb.Empty, api_internal_pb.SettingsResponse>;
openIdConnectLogin: grpc.MethodDefinition<api_internal_pb.OpenIdConnectLoginRequest, api_internal_pb.OpenIdConnectLoginResponse>;
oAuth2Login: grpc.MethodDefinition<api_internal_pb.OAuth2LoginRequest, api_internal_pb.OAuth2LoginResponse>;
getDevicesSummary: grpc.MethodDefinition<api_internal_pb.GetDevicesSummaryRequest, api_internal_pb.GetDevicesSummaryResponse>;
getGatewaysSummary: grpc.MethodDefinition<api_internal_pb.GetGatewaysSummaryRequest, api_internal_pb.GetGatewaysSummaryResponse>;
streamGatewayFrames: grpc.MethodDefinition<api_internal_pb.StreamGatewayFramesRequest, api_internal_pb.LogItem>;
@ -36,6 +37,7 @@ export interface IInternalServiceServer extends grpc.UntypedServiceImplementatio
listApiKeys: grpc.handleUnaryCall<api_internal_pb.ListApiKeysRequest, api_internal_pb.ListApiKeysResponse>;
settings: grpc.handleUnaryCall<google_protobuf_empty_pb.Empty, api_internal_pb.SettingsResponse>;
openIdConnectLogin: grpc.handleUnaryCall<api_internal_pb.OpenIdConnectLoginRequest, api_internal_pb.OpenIdConnectLoginResponse>;
oAuth2Login: grpc.handleUnaryCall<api_internal_pb.OAuth2LoginRequest, api_internal_pb.OAuth2LoginResponse>;
getDevicesSummary: grpc.handleUnaryCall<api_internal_pb.GetDevicesSummaryRequest, api_internal_pb.GetDevicesSummaryResponse>;
getGatewaysSummary: grpc.handleUnaryCall<api_internal_pb.GetGatewaysSummaryRequest, api_internal_pb.GetGatewaysSummaryResponse>;
streamGatewayFrames: grpc.handleServerStreamingCall<api_internal_pb.StreamGatewayFramesRequest, api_internal_pb.LogItem>;
@ -71,6 +73,9 @@ export class InternalServiceClient extends grpc.Client {
openIdConnectLogin(argument: api_internal_pb.OpenIdConnectLoginRequest, callback: grpc.requestCallback<api_internal_pb.OpenIdConnectLoginResponse>): grpc.ClientUnaryCall;
openIdConnectLogin(argument: api_internal_pb.OpenIdConnectLoginRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<api_internal_pb.OpenIdConnectLoginResponse>): grpc.ClientUnaryCall;
openIdConnectLogin(argument: api_internal_pb.OpenIdConnectLoginRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<api_internal_pb.OpenIdConnectLoginResponse>): grpc.ClientUnaryCall;
oAuth2Login(argument: api_internal_pb.OAuth2LoginRequest, callback: grpc.requestCallback<api_internal_pb.OAuth2LoginResponse>): grpc.ClientUnaryCall;
oAuth2Login(argument: api_internal_pb.OAuth2LoginRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<api_internal_pb.OAuth2LoginResponse>): grpc.ClientUnaryCall;
oAuth2Login(argument: api_internal_pb.OAuth2LoginRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<api_internal_pb.OAuth2LoginResponse>): grpc.ClientUnaryCall;
getDevicesSummary(argument: api_internal_pb.GetDevicesSummaryRequest, callback: grpc.requestCallback<api_internal_pb.GetDevicesSummaryResponse>): grpc.ClientUnaryCall;
getDevicesSummary(argument: api_internal_pb.GetDevicesSummaryRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<api_internal_pb.GetDevicesSummaryResponse>): grpc.ClientUnaryCall;
getDevicesSummary(argument: api_internal_pb.GetDevicesSummaryRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<api_internal_pb.GetDevicesSummaryResponse>): grpc.ClientUnaryCall;

View File

@ -195,6 +195,28 @@ function deserialize_api_LoginResponse(buffer_arg) {
return api_internal_pb.LoginResponse.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_api_OAuth2LoginRequest(arg) {
if (!(arg instanceof api_internal_pb.OAuth2LoginRequest)) {
throw new Error('Expected argument of type api.OAuth2LoginRequest');
}
return Buffer.from(arg.serializeBinary());
}
function deserialize_api_OAuth2LoginRequest(buffer_arg) {
return api_internal_pb.OAuth2LoginRequest.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_api_OAuth2LoginResponse(arg) {
if (!(arg instanceof api_internal_pb.OAuth2LoginResponse)) {
throw new Error('Expected argument of type api.OAuth2LoginResponse');
}
return Buffer.from(arg.serializeBinary());
}
function deserialize_api_OAuth2LoginResponse(buffer_arg) {
return api_internal_pb.OAuth2LoginResponse.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_api_OpenIdConnectLoginRequest(arg) {
if (!(arg instanceof api_internal_pb.OpenIdConnectLoginRequest)) {
throw new Error('Expected argument of type api.OpenIdConnectLoginRequest');
@ -382,6 +404,18 @@ openIdConnectLogin: {
responseSerialize: serialize_api_OpenIdConnectLoginResponse,
responseDeserialize: deserialize_api_OpenIdConnectLoginResponse,
},
// OAuth2 login.
oAuth2Login: {
path: '/api.InternalService/OAuth2Login',
requestStream: false,
responseStream: false,
requestType: api_internal_pb.OAuth2LoginRequest,
responseType: api_internal_pb.OAuth2LoginResponse,
requestSerialize: serialize_api_OAuth2LoginRequest,
requestDeserialize: deserialize_api_OAuth2LoginRequest,
responseSerialize: serialize_api_OAuth2LoginResponse,
responseDeserialize: deserialize_api_OAuth2LoginResponse,
},
// GetDevicesSummary returns an aggregated summary of the devices.
getDevicesSummary: {
path: '/api.InternalService/GetDevicesSummary',

View File

@ -391,6 +391,11 @@ export class SettingsResponse extends jspb.Message {
getOpenidConnect(): OpenIdConnect | undefined;
setOpenidConnect(value?: OpenIdConnect): void;
hasOauth2(): boolean;
clearOauth2(): void;
getOauth2(): OAuth2 | undefined;
setOauth2(value?: OAuth2): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): SettingsResponse.AsObject;
static toObject(includeInstance: boolean, msg: SettingsResponse): SettingsResponse.AsObject;
@ -404,6 +409,7 @@ export class SettingsResponse extends jspb.Message {
export namespace SettingsResponse {
export type AsObject = {
openidConnect?: OpenIdConnect.AsObject,
oauth2?: OAuth2.AsObject,
}
}
@ -420,6 +426,9 @@ export class OpenIdConnect extends jspb.Message {
getLogoutUrl(): string;
setLogoutUrl(value: string): void;
getLoginRedirect(): boolean;
setLoginRedirect(value: boolean): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): OpenIdConnect.AsObject;
static toObject(includeInstance: boolean, msg: OpenIdConnect): OpenIdConnect.AsObject;
@ -436,6 +445,43 @@ export namespace OpenIdConnect {
loginUrl: string,
loginLabel: string,
logoutUrl: string,
loginRedirect: boolean,
}
}
export class OAuth2 extends jspb.Message {
getEnabled(): boolean;
setEnabled(value: boolean): void;
getLoginUrl(): string;
setLoginUrl(value: string): void;
getLoginLabel(): string;
setLoginLabel(value: string): void;
getLogoutUrl(): string;
setLogoutUrl(value: string): void;
getLoginRedirect(): boolean;
setLoginRedirect(value: boolean): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): OAuth2.AsObject;
static toObject(includeInstance: boolean, msg: OAuth2): OAuth2.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: OAuth2, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): OAuth2;
static deserializeBinaryFromReader(message: OAuth2, reader: jspb.BinaryReader): OAuth2;
}
export namespace OAuth2 {
export type AsObject = {
enabled: boolean,
loginUrl: string,
loginLabel: string,
logoutUrl: string,
loginRedirect: boolean,
}
}
@ -483,6 +529,50 @@ export namespace OpenIdConnectLoginResponse {
}
}
export class OAuth2LoginRequest extends jspb.Message {
getCode(): string;
setCode(value: string): void;
getState(): string;
setState(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): OAuth2LoginRequest.AsObject;
static toObject(includeInstance: boolean, msg: OAuth2LoginRequest): OAuth2LoginRequest.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: OAuth2LoginRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): OAuth2LoginRequest;
static deserializeBinaryFromReader(message: OAuth2LoginRequest, reader: jspb.BinaryReader): OAuth2LoginRequest;
}
export namespace OAuth2LoginRequest {
export type AsObject = {
code: string,
state: string,
}
}
export class OAuth2LoginResponse extends jspb.Message {
getToken(): string;
setToken(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): OAuth2LoginResponse.AsObject;
static toObject(includeInstance: boolean, msg: OAuth2LoginResponse): OAuth2LoginResponse.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: OAuth2LoginResponse, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): OAuth2LoginResponse;
static deserializeBinaryFromReader(message: OAuth2LoginResponse, reader: jspb.BinaryReader): OAuth2LoginResponse;
}
export namespace OAuth2LoginResponse {
export type AsObject = {
token: string,
}
}
export class GetDevicesSummaryRequest extends jspb.Message {
getTenantId(): string;
setTenantId(value: string): void;

View File

@ -39,6 +39,9 @@ goog.exportSymbol('proto.api.ListRegionsResponse', null, global);
goog.exportSymbol('proto.api.LogItem', null, global);
goog.exportSymbol('proto.api.LoginRequest', null, global);
goog.exportSymbol('proto.api.LoginResponse', null, global);
goog.exportSymbol('proto.api.OAuth2', null, global);
goog.exportSymbol('proto.api.OAuth2LoginRequest', null, global);
goog.exportSymbol('proto.api.OAuth2LoginResponse', null, global);
goog.exportSymbol('proto.api.OpenIdConnect', null, global);
goog.exportSymbol('proto.api.OpenIdConnectLoginRequest', null, global);
goog.exportSymbol('proto.api.OpenIdConnectLoginResponse', null, global);
@ -365,6 +368,27 @@ if (goog.DEBUG && !COMPILED) {
*/
proto.api.OpenIdConnect.displayName = 'proto.api.OpenIdConnect';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.api.OAuth2 = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.api.OAuth2, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.api.OAuth2.displayName = 'proto.api.OAuth2';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
@ -407,6 +431,48 @@ if (goog.DEBUG && !COMPILED) {
*/
proto.api.OpenIdConnectLoginResponse.displayName = 'proto.api.OpenIdConnectLoginResponse';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.api.OAuth2LoginRequest = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.api.OAuth2LoginRequest, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.api.OAuth2LoginRequest.displayName = 'proto.api.OAuth2LoginRequest';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.api.OAuth2LoginResponse = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.api.OAuth2LoginResponse, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.api.OAuth2LoginResponse.displayName = 'proto.api.OAuth2LoginResponse';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
@ -3356,7 +3422,8 @@ proto.api.SettingsResponse.prototype.toObject = function(opt_includeInstance) {
*/
proto.api.SettingsResponse.toObject = function(includeInstance, msg) {
var f, obj = {
openidConnect: (f = msg.getOpenidConnect()) && proto.api.OpenIdConnect.toObject(includeInstance, f)
openidConnect: (f = msg.getOpenidConnect()) && proto.api.OpenIdConnect.toObject(includeInstance, f),
oauth2: (f = msg.getOauth2()) && proto.api.OAuth2.toObject(includeInstance, f)
};
if (includeInstance) {
@ -3398,6 +3465,11 @@ proto.api.SettingsResponse.deserializeBinaryFromReader = function(msg, reader) {
reader.readMessage(value,proto.api.OpenIdConnect.deserializeBinaryFromReader);
msg.setOpenidConnect(value);
break;
case 2:
var value = new proto.api.OAuth2;
reader.readMessage(value,proto.api.OAuth2.deserializeBinaryFromReader);
msg.setOauth2(value);
break;
default:
reader.skipField();
break;
@ -3435,6 +3507,14 @@ proto.api.SettingsResponse.serializeBinaryToWriter = function(message, writer) {
proto.api.OpenIdConnect.serializeBinaryToWriter
);
}
f = message.getOauth2();
if (f != null) {
writer.writeMessage(
2,
f,
proto.api.OAuth2.serializeBinaryToWriter
);
}
};
@ -3475,6 +3555,43 @@ proto.api.SettingsResponse.prototype.hasOpenidConnect = function() {
};
/**
* optional OAuth2 oauth2 = 2;
* @return {?proto.api.OAuth2}
*/
proto.api.SettingsResponse.prototype.getOauth2 = function() {
return /** @type{?proto.api.OAuth2} */ (
jspb.Message.getWrapperField(this, proto.api.OAuth2, 2));
};
/**
* @param {?proto.api.OAuth2|undefined} value
* @return {!proto.api.SettingsResponse} returns this
*/
proto.api.SettingsResponse.prototype.setOauth2 = function(value) {
return jspb.Message.setWrapperField(this, 2, value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.api.SettingsResponse} returns this
*/
proto.api.SettingsResponse.prototype.clearOauth2 = function() {
return this.setOauth2(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.api.SettingsResponse.prototype.hasOauth2 = function() {
return jspb.Message.getField(this, 2) != null;
};
@ -3510,7 +3627,8 @@ proto.api.OpenIdConnect.toObject = function(includeInstance, msg) {
enabled: jspb.Message.getBooleanFieldWithDefault(msg, 1, false),
loginUrl: jspb.Message.getFieldWithDefault(msg, 2, ""),
loginLabel: jspb.Message.getFieldWithDefault(msg, 3, ""),
logoutUrl: jspb.Message.getFieldWithDefault(msg, 4, "")
logoutUrl: jspb.Message.getFieldWithDefault(msg, 4, ""),
loginRedirect: jspb.Message.getBooleanFieldWithDefault(msg, 5, false)
};
if (includeInstance) {
@ -3563,6 +3681,10 @@ proto.api.OpenIdConnect.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {string} */ (reader.readString());
msg.setLogoutUrl(value);
break;
case 5:
var value = /** @type {boolean} */ (reader.readBool());
msg.setLoginRedirect(value);
break;
default:
reader.skipField();
break;
@ -3620,6 +3742,13 @@ proto.api.OpenIdConnect.serializeBinaryToWriter = function(message, writer) {
f
);
}
f = message.getLoginRedirect();
if (f) {
writer.writeBool(
5,
f
);
}
};
@ -3695,6 +3824,274 @@ proto.api.OpenIdConnect.prototype.setLogoutUrl = function(value) {
};
/**
* optional bool login_redirect = 5;
* @return {boolean}
*/
proto.api.OpenIdConnect.prototype.getLoginRedirect = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false));
};
/**
* @param {boolean} value
* @return {!proto.api.OpenIdConnect} returns this
*/
proto.api.OpenIdConnect.prototype.setLoginRedirect = function(value) {
return jspb.Message.setProto3BooleanField(this, 5, value);
};
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.api.OAuth2.prototype.toObject = function(opt_includeInstance) {
return proto.api.OAuth2.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.api.OAuth2} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2.toObject = function(includeInstance, msg) {
var f, obj = {
enabled: jspb.Message.getBooleanFieldWithDefault(msg, 1, false),
loginUrl: jspb.Message.getFieldWithDefault(msg, 2, ""),
loginLabel: jspb.Message.getFieldWithDefault(msg, 3, ""),
logoutUrl: jspb.Message.getFieldWithDefault(msg, 4, ""),
loginRedirect: jspb.Message.getBooleanFieldWithDefault(msg, 5, false)
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.api.OAuth2}
*/
proto.api.OAuth2.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.api.OAuth2;
return proto.api.OAuth2.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.api.OAuth2} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.api.OAuth2}
*/
proto.api.OAuth2.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {boolean} */ (reader.readBool());
msg.setEnabled(value);
break;
case 2:
var value = /** @type {string} */ (reader.readString());
msg.setLoginUrl(value);
break;
case 3:
var value = /** @type {string} */ (reader.readString());
msg.setLoginLabel(value);
break;
case 4:
var value = /** @type {string} */ (reader.readString());
msg.setLogoutUrl(value);
break;
case 5:
var value = /** @type {boolean} */ (reader.readBool());
msg.setLoginRedirect(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.api.OAuth2.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.api.OAuth2.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.api.OAuth2} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getEnabled();
if (f) {
writer.writeBool(
1,
f
);
}
f = message.getLoginUrl();
if (f.length > 0) {
writer.writeString(
2,
f
);
}
f = message.getLoginLabel();
if (f.length > 0) {
writer.writeString(
3,
f
);
}
f = message.getLogoutUrl();
if (f.length > 0) {
writer.writeString(
4,
f
);
}
f = message.getLoginRedirect();
if (f) {
writer.writeBool(
5,
f
);
}
};
/**
* optional bool enabled = 1;
* @return {boolean}
*/
proto.api.OAuth2.prototype.getEnabled = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 1, false));
};
/**
* @param {boolean} value
* @return {!proto.api.OAuth2} returns this
*/
proto.api.OAuth2.prototype.setEnabled = function(value) {
return jspb.Message.setProto3BooleanField(this, 1, value);
};
/**
* optional string login_url = 2;
* @return {string}
*/
proto.api.OAuth2.prototype.getLoginUrl = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2} returns this
*/
proto.api.OAuth2.prototype.setLoginUrl = function(value) {
return jspb.Message.setProto3StringField(this, 2, value);
};
/**
* optional string login_label = 3;
* @return {string}
*/
proto.api.OAuth2.prototype.getLoginLabel = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2} returns this
*/
proto.api.OAuth2.prototype.setLoginLabel = function(value) {
return jspb.Message.setProto3StringField(this, 3, value);
};
/**
* optional string logout_url = 4;
* @return {string}
*/
proto.api.OAuth2.prototype.getLogoutUrl = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2} returns this
*/
proto.api.OAuth2.prototype.setLogoutUrl = function(value) {
return jspb.Message.setProto3StringField(this, 4, value);
};
/**
* optional bool login_redirect = 5;
* @return {boolean}
*/
proto.api.OAuth2.prototype.getLoginRedirect = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false));
};
/**
* @param {boolean} value
* @return {!proto.api.OAuth2} returns this
*/
proto.api.OAuth2.prototype.setLoginRedirect = function(value) {
return jspb.Message.setProto3BooleanField(this, 5, value);
};
@ -3988,6 +4385,296 @@ proto.api.OpenIdConnectLoginResponse.prototype.setToken = function(value) {
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.api.OAuth2LoginRequest.prototype.toObject = function(opt_includeInstance) {
return proto.api.OAuth2LoginRequest.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.api.OAuth2LoginRequest} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2LoginRequest.toObject = function(includeInstance, msg) {
var f, obj = {
code: jspb.Message.getFieldWithDefault(msg, 1, ""),
state: jspb.Message.getFieldWithDefault(msg, 2, "")
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.api.OAuth2LoginRequest}
*/
proto.api.OAuth2LoginRequest.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.api.OAuth2LoginRequest;
return proto.api.OAuth2LoginRequest.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.api.OAuth2LoginRequest} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.api.OAuth2LoginRequest}
*/
proto.api.OAuth2LoginRequest.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {string} */ (reader.readString());
msg.setCode(value);
break;
case 2:
var value = /** @type {string} */ (reader.readString());
msg.setState(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.api.OAuth2LoginRequest.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.api.OAuth2LoginRequest.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.api.OAuth2LoginRequest} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2LoginRequest.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getCode();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
f = message.getState();
if (f.length > 0) {
writer.writeString(
2,
f
);
}
};
/**
* optional string code = 1;
* @return {string}
*/
proto.api.OAuth2LoginRequest.prototype.getCode = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2LoginRequest} returns this
*/
proto.api.OAuth2LoginRequest.prototype.setCode = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
/**
* optional string state = 2;
* @return {string}
*/
proto.api.OAuth2LoginRequest.prototype.getState = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2LoginRequest} returns this
*/
proto.api.OAuth2LoginRequest.prototype.setState = function(value) {
return jspb.Message.setProto3StringField(this, 2, value);
};
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.api.OAuth2LoginResponse.prototype.toObject = function(opt_includeInstance) {
return proto.api.OAuth2LoginResponse.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.api.OAuth2LoginResponse} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2LoginResponse.toObject = function(includeInstance, msg) {
var f, obj = {
token: jspb.Message.getFieldWithDefault(msg, 1, "")
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.api.OAuth2LoginResponse}
*/
proto.api.OAuth2LoginResponse.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.api.OAuth2LoginResponse;
return proto.api.OAuth2LoginResponse.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.api.OAuth2LoginResponse} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.api.OAuth2LoginResponse}
*/
proto.api.OAuth2LoginResponse.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {string} */ (reader.readString());
msg.setToken(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.api.OAuth2LoginResponse.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.api.OAuth2LoginResponse.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.api.OAuth2LoginResponse} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.api.OAuth2LoginResponse.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getToken();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
};
/**
* optional string token = 1;
* @return {string}
*/
proto.api.OAuth2LoginResponse.prototype.getToken = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.api.OAuth2LoginResponse} returns this
*/
proto.api.OAuth2LoginResponse.prototype.setToken = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.

View File

@ -128,6 +128,32 @@ export namespace MetricDataset {
}
}
export class JoinServerContext extends jspb.Message {
getSessionKeyId(): string;
setSessionKeyId(value: string): void;
hasAppSKey(): boolean;
clearAppSKey(): void;
getAppSKey(): KeyEnvelope | undefined;
setAppSKey(value?: KeyEnvelope): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): JoinServerContext.AsObject;
static toObject(includeInstance: boolean, msg: JoinServerContext): JoinServerContext.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: JoinServerContext, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): JoinServerContext;
static deserializeBinaryFromReader(message: JoinServerContext, reader: jspb.BinaryReader): JoinServerContext;
}
export namespace JoinServerContext {
export type AsObject = {
sessionKeyId: string,
appSKey?: KeyEnvelope.AsObject,
}
}
export interface ModulationMap {
LORA: 0;
FSK: 1;

View File

@ -16,6 +16,7 @@ var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/time
goog.object.extend(proto, google_protobuf_timestamp_pb);
goog.exportSymbol('proto.common.Aggregation', null, global);
goog.exportSymbol('proto.common.DeviceClass', null, global);
goog.exportSymbol('proto.common.JoinServerContext', null, global);
goog.exportSymbol('proto.common.KeyEnvelope', null, global);
goog.exportSymbol('proto.common.Location', null, global);
goog.exportSymbol('proto.common.LocationSource', null, global);
@ -111,6 +112,27 @@ if (goog.DEBUG && !COMPILED) {
*/
proto.common.MetricDataset.displayName = 'proto.common.MetricDataset';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.common.JoinServerContext = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.common.JoinServerContext, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.common.JoinServerContext.displayName = 'proto.common.JoinServerContext';
}
@ -1004,6 +1026,187 @@ proto.common.MetricDataset.prototype.clearDataList = function() {
};
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.common.JoinServerContext.prototype.toObject = function(opt_includeInstance) {
return proto.common.JoinServerContext.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.common.JoinServerContext} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.common.JoinServerContext.toObject = function(includeInstance, msg) {
var f, obj = {
sessionKeyId: jspb.Message.getFieldWithDefault(msg, 1, ""),
appSKey: (f = msg.getAppSKey()) && proto.common.KeyEnvelope.toObject(includeInstance, f)
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.common.JoinServerContext}
*/
proto.common.JoinServerContext.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.common.JoinServerContext;
return proto.common.JoinServerContext.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.common.JoinServerContext} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.common.JoinServerContext}
*/
proto.common.JoinServerContext.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {string} */ (reader.readString());
msg.setSessionKeyId(value);
break;
case 2:
var value = new proto.common.KeyEnvelope;
reader.readMessage(value,proto.common.KeyEnvelope.deserializeBinaryFromReader);
msg.setAppSKey(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.common.JoinServerContext.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.common.JoinServerContext.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.common.JoinServerContext} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.common.JoinServerContext.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getSessionKeyId();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
f = message.getAppSKey();
if (f != null) {
writer.writeMessage(
2,
f,
proto.common.KeyEnvelope.serializeBinaryToWriter
);
}
};
/**
* optional string session_key_id = 1;
* @return {string}
*/
proto.common.JoinServerContext.prototype.getSessionKeyId = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.common.JoinServerContext} returns this
*/
proto.common.JoinServerContext.prototype.setSessionKeyId = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
/**
* optional KeyEnvelope app_s_key = 2;
* @return {?proto.common.KeyEnvelope}
*/
proto.common.JoinServerContext.prototype.getAppSKey = function() {
return /** @type{?proto.common.KeyEnvelope} */ (
jspb.Message.getWrapperField(this, proto.common.KeyEnvelope, 2));
};
/**
* @param {?proto.common.KeyEnvelope|undefined} value
* @return {!proto.common.JoinServerContext} returns this
*/
proto.common.JoinServerContext.prototype.setAppSKey = function(value) {
return jspb.Message.setWrapperField(this, 2, value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.common.JoinServerContext} returns this
*/
proto.common.JoinServerContext.prototype.clearAppSKey = function() {
return this.setAppSKey(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.common.JoinServerContext.prototype.hasAppSKey = function() {
return jspb.Message.getField(this, 2) != null;
};
/**
* @enum {number}
*/

View File

@ -102,32 +102,6 @@ export namespace UplinkRelayRxInfo {
}
}
export class JoinServerContext extends jspb.Message {
getSessionKeyId(): string;
setSessionKeyId(value: string): void;
hasAppSKey(): boolean;
clearAppSKey(): void;
getAppSKey(): common_common_pb.KeyEnvelope | undefined;
setAppSKey(value?: common_common_pb.KeyEnvelope): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): JoinServerContext.AsObject;
static toObject(includeInstance: boolean, msg: JoinServerContext): JoinServerContext.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: JoinServerContext, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): JoinServerContext;
static deserializeBinaryFromReader(message: JoinServerContext, reader: jspb.BinaryReader): JoinServerContext;
}
export namespace JoinServerContext {
export type AsObject = {
sessionKeyId: string,
appSKey?: common_common_pb.KeyEnvelope.AsObject,
}
}
export class UplinkEvent extends jspb.Message {
getDeduplicationId(): string;
setDeduplicationId(value: string): void;
@ -187,8 +161,8 @@ export class UplinkEvent extends jspb.Message {
hasJoinServerContext(): boolean;
clearJoinServerContext(): void;
getJoinServerContext(): JoinServerContext | undefined;
setJoinServerContext(value?: JoinServerContext): void;
getJoinServerContext(): common_common_pb.JoinServerContext | undefined;
setJoinServerContext(value?: common_common_pb.JoinServerContext): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): UplinkEvent.AsObject;
@ -216,7 +190,7 @@ export namespace UplinkEvent {
rxInfoList: Array<gw_gw_pb.UplinkRxInfo.AsObject>,
txInfo?: gw_gw_pb.UplinkTxInfo.AsObject,
relayRxInfo?: UplinkRelayRxInfo.AsObject,
joinServerContext?: JoinServerContext.AsObject,
joinServerContext?: common_common_pb.JoinServerContext.AsObject,
}
}
@ -244,8 +218,8 @@ export class JoinEvent extends jspb.Message {
hasJoinServerContext(): boolean;
clearJoinServerContext(): void;
getJoinServerContext(): JoinServerContext | undefined;
setJoinServerContext(value?: JoinServerContext): void;
getJoinServerContext(): common_common_pb.JoinServerContext | undefined;
setJoinServerContext(value?: common_common_pb.JoinServerContext): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): JoinEvent.AsObject;
@ -264,7 +238,7 @@ export namespace JoinEvent {
deviceInfo?: DeviceInfo.AsObject,
devAddr: string,
relayRxInfo?: UplinkRelayRxInfo.AsObject,
joinServerContext?: JoinServerContext.AsObject,
joinServerContext?: common_common_pb.JoinServerContext.AsObject,
}
}

View File

@ -25,7 +25,6 @@ goog.exportSymbol('proto.integration.DeviceInfo', null, global);
goog.exportSymbol('proto.integration.DownlinkCommand', null, global);
goog.exportSymbol('proto.integration.IntegrationEvent', null, global);
goog.exportSymbol('proto.integration.JoinEvent', null, global);
goog.exportSymbol('proto.integration.JoinServerContext', null, global);
goog.exportSymbol('proto.integration.LocationEvent', null, global);
goog.exportSymbol('proto.integration.LogCode', null, global);
goog.exportSymbol('proto.integration.LogEvent', null, global);
@ -76,27 +75,6 @@ if (goog.DEBUG && !COMPILED) {
*/
proto.integration.UplinkRelayRxInfo.displayName = 'proto.integration.UplinkRelayRxInfo';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.integration.JoinServerContext = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.integration.JoinServerContext, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.integration.JoinServerContext.displayName = 'proto.integration.JoinServerContext';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
@ -970,187 +948,6 @@ proto.integration.UplinkRelayRxInfo.prototype.setWorChannel = function(value) {
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.integration.JoinServerContext.prototype.toObject = function(opt_includeInstance) {
return proto.integration.JoinServerContext.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.integration.JoinServerContext} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.integration.JoinServerContext.toObject = function(includeInstance, msg) {
var f, obj = {
sessionKeyId: jspb.Message.getFieldWithDefault(msg, 1, ""),
appSKey: (f = msg.getAppSKey()) && common_common_pb.KeyEnvelope.toObject(includeInstance, f)
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.integration.JoinServerContext}
*/
proto.integration.JoinServerContext.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.integration.JoinServerContext;
return proto.integration.JoinServerContext.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.integration.JoinServerContext} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.integration.JoinServerContext}
*/
proto.integration.JoinServerContext.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {string} */ (reader.readString());
msg.setSessionKeyId(value);
break;
case 2:
var value = new common_common_pb.KeyEnvelope;
reader.readMessage(value,common_common_pb.KeyEnvelope.deserializeBinaryFromReader);
msg.setAppSKey(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.integration.JoinServerContext.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.integration.JoinServerContext.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.integration.JoinServerContext} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.integration.JoinServerContext.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getSessionKeyId();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
f = message.getAppSKey();
if (f != null) {
writer.writeMessage(
2,
f,
common_common_pb.KeyEnvelope.serializeBinaryToWriter
);
}
};
/**
* optional string session_key_id = 1;
* @return {string}
*/
proto.integration.JoinServerContext.prototype.getSessionKeyId = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.integration.JoinServerContext} returns this
*/
proto.integration.JoinServerContext.prototype.setSessionKeyId = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
/**
* optional common.KeyEnvelope app_s_key = 2;
* @return {?proto.common.KeyEnvelope}
*/
proto.integration.JoinServerContext.prototype.getAppSKey = function() {
return /** @type{?proto.common.KeyEnvelope} */ (
jspb.Message.getWrapperField(this, common_common_pb.KeyEnvelope, 2));
};
/**
* @param {?proto.common.KeyEnvelope|undefined} value
* @return {!proto.integration.JoinServerContext} returns this
*/
proto.integration.JoinServerContext.prototype.setAppSKey = function(value) {
return jspb.Message.setWrapperField(this, 2, value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.integration.JoinServerContext} returns this
*/
proto.integration.JoinServerContext.prototype.clearAppSKey = function() {
return this.setAppSKey(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.integration.JoinServerContext.prototype.hasAppSKey = function() {
return jspb.Message.getField(this, 2) != null;
};
/**
* List of repeated fields within this message type.
* @private {!Array<number>}
@ -1204,7 +1001,7 @@ proto.integration.UplinkEvent.toObject = function(includeInstance, msg) {
gw_gw_pb.UplinkRxInfo.toObject, includeInstance),
txInfo: (f = msg.getTxInfo()) && gw_gw_pb.UplinkTxInfo.toObject(includeInstance, f),
relayRxInfo: (f = msg.getRelayRxInfo()) && proto.integration.UplinkRelayRxInfo.toObject(includeInstance, f),
joinServerContext: (f = msg.getJoinServerContext()) && proto.integration.JoinServerContext.toObject(includeInstance, f)
joinServerContext: (f = msg.getJoinServerContext()) && common_common_pb.JoinServerContext.toObject(includeInstance, f)
};
if (includeInstance) {
@ -1304,8 +1101,8 @@ proto.integration.UplinkEvent.deserializeBinaryFromReader = function(msg, reader
msg.setRelayRxInfo(value);
break;
case 15:
var value = new proto.integration.JoinServerContext;
reader.readMessage(value,proto.integration.JoinServerContext.deserializeBinaryFromReader);
var value = new common_common_pb.JoinServerContext;
reader.readMessage(value,common_common_pb.JoinServerContext.deserializeBinaryFromReader);
msg.setJoinServerContext(value);
break;
default:
@ -1446,7 +1243,7 @@ proto.integration.UplinkEvent.serializeBinaryToWriter = function(message, writer
writer.writeMessage(
15,
f,
proto.integration.JoinServerContext.serializeBinaryToWriter
common_common_pb.JoinServerContext.serializeBinaryToWriter
);
}
};
@ -1844,17 +1641,17 @@ proto.integration.UplinkEvent.prototype.hasRelayRxInfo = function() {
/**
* optional JoinServerContext join_server_context = 15;
* @return {?proto.integration.JoinServerContext}
* optional common.JoinServerContext join_server_context = 15;
* @return {?proto.common.JoinServerContext}
*/
proto.integration.UplinkEvent.prototype.getJoinServerContext = function() {
return /** @type{?proto.integration.JoinServerContext} */ (
jspb.Message.getWrapperField(this, proto.integration.JoinServerContext, 15));
return /** @type{?proto.common.JoinServerContext} */ (
jspb.Message.getWrapperField(this, common_common_pb.JoinServerContext, 15));
};
/**
* @param {?proto.integration.JoinServerContext|undefined} value
* @param {?proto.common.JoinServerContext|undefined} value
* @return {!proto.integration.UplinkEvent} returns this
*/
proto.integration.UplinkEvent.prototype.setJoinServerContext = function(value) {
@ -1917,7 +1714,7 @@ proto.integration.JoinEvent.toObject = function(includeInstance, msg) {
deviceInfo: (f = msg.getDeviceInfo()) && proto.integration.DeviceInfo.toObject(includeInstance, f),
devAddr: jspb.Message.getFieldWithDefault(msg, 4, ""),
relayRxInfo: (f = msg.getRelayRxInfo()) && proto.integration.UplinkRelayRxInfo.toObject(includeInstance, f),
joinServerContext: (f = msg.getJoinServerContext()) && proto.integration.JoinServerContext.toObject(includeInstance, f)
joinServerContext: (f = msg.getJoinServerContext()) && common_common_pb.JoinServerContext.toObject(includeInstance, f)
};
if (includeInstance) {
@ -1978,8 +1775,8 @@ proto.integration.JoinEvent.deserializeBinaryFromReader = function(msg, reader)
msg.setRelayRxInfo(value);
break;
case 6:
var value = new proto.integration.JoinServerContext;
reader.readMessage(value,proto.integration.JoinServerContext.deserializeBinaryFromReader);
var value = new common_common_pb.JoinServerContext;
reader.readMessage(value,common_common_pb.JoinServerContext.deserializeBinaryFromReader);
msg.setJoinServerContext(value);
break;
default:
@ -2054,7 +1851,7 @@ proto.integration.JoinEvent.serializeBinaryToWriter = function(message, writer)
writer.writeMessage(
6,
f,
proto.integration.JoinServerContext.serializeBinaryToWriter
common_common_pb.JoinServerContext.serializeBinaryToWriter
);
}
};
@ -2208,17 +2005,17 @@ proto.integration.JoinEvent.prototype.hasRelayRxInfo = function() {
/**
* optional JoinServerContext join_server_context = 6;
* @return {?proto.integration.JoinServerContext}
* optional common.JoinServerContext join_server_context = 6;
* @return {?proto.common.JoinServerContext}
*/
proto.integration.JoinEvent.prototype.getJoinServerContext = function() {
return /** @type{?proto.integration.JoinServerContext} */ (
jspb.Message.getWrapperField(this, proto.integration.JoinServerContext, 6));
return /** @type{?proto.common.JoinServerContext} */ (
jspb.Message.getWrapperField(this, common_common_pb.JoinServerContext, 6));
};
/**
* @param {?proto.integration.JoinServerContext|undefined} value
* @param {?proto.common.JoinServerContext|undefined} value
* @return {!proto.integration.JoinEvent} returns this
*/
proto.integration.JoinEvent.prototype.setJoinServerContext = function(value) {

2
api/js/package.json vendored
View File

@ -1,6 +1,6 @@
{
"name": "@chirpstack/chirpstack-api",
"version": "4.6.0-test.3",
"version": "4.7.0",
"description": "Chirpstack JS and TS API",
"license": "MIT",
"devDependencies": {

View File

@ -9,7 +9,7 @@ plugins {
}
group = "io.chirpstack"
version = "4.6.0-test.3"
version = "4.7.0"
repositories {
mavenCentral()

4
api/md/api/api.md vendored
View File

@ -2011,6 +2011,7 @@ applications.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| device_activation | [DeviceActivation](#api-DeviceActivation) | | Device activation object. |
| join_server_context | [common.JoinServerContext](#common-JoinServerContext) | | Join-Server context. A non-empty value indicatest that ChirpStack does not have access to the AppSKey and that the encryption / decryption of the payloads is the responsibility of the end-application. |
@ -2542,6 +2543,9 @@ Valid values (0 - 3): 0 = 1 1 = 2 2 = 4 3 = 12 |
This field indicates the multiplier to determine the bucket size according to the following formula: BucketSize TOKEN = _reload_rate x _bucket_size
Valid values (0 - 3): 0 = 1 1 = 2 2 = 4 3 = 12 |
| allow_roaming | [bool](#bool) | | Allow roaming.
If set to true, it means that the device is allowed to use roaming. |

View File

@ -418,6 +418,12 @@ message GetDeviceActivationRequest {
message GetDeviceActivationResponse {
// Device activation object.
DeviceActivation device_activation = 1;
// Join-Server context.
// A non-empty value indicatest that ChirpStack does not have access to
// the AppSKey and that the encryption / decryption of the payloads is
// the responsibility of the end-application.
common.JoinServerContext join_server_context = 2;
}
message GetRandomDevAddrRequest {

View File

@ -405,6 +405,11 @@ message DeviceProfile {
// 2 = 4
// 3 = 12
uint32 relay_overall_limit_bucket_size = 51;
// Allow roaming.
//
// If set to true, it means that the device is allowed to use roaming.
bool allow_roaming = 52;
}
message Measurement {

View File

@ -15,361 +15,402 @@ import "api/user.proto";
// InternalService is the service providing API endpoints for internal usage.
service InternalService {
// Log in a user
rpc Login(LoginRequest) returns (LoginResponse) {}
// Log in a user
rpc Login(LoginRequest) returns (LoginResponse) {}
// Get the current user's profile
rpc Profile(google.protobuf.Empty) returns (ProfileResponse) {}
// Get the current user's profile
rpc Profile(google.protobuf.Empty) returns (ProfileResponse) {}
// Perform a global search.
rpc GlobalSearch(GlobalSearchRequest) returns (GlobalSearchResponse) {}
// Perform a global search.
rpc GlobalSearch(GlobalSearchRequest) returns (GlobalSearchResponse) {}
// CreateApiKey creates the given API key.
rpc CreateApiKey(CreateApiKeyRequest) returns (CreateApiKeyResponse) {}
// CreateApiKey creates the given API key.
rpc CreateApiKey(CreateApiKeyRequest) returns (CreateApiKeyResponse) {}
// DeleteApiKey deletes the API key.
rpc DeleteApiKey(DeleteApiKeyRequest) returns (google.protobuf.Empty) {}
// DeleteApiKey deletes the API key.
rpc DeleteApiKey(DeleteApiKeyRequest) returns (google.protobuf.Empty) {}
// ListApiKeys lists the available API keys.
rpc ListApiKeys(ListApiKeysRequest) returns (ListApiKeysResponse) {}
// ListApiKeys lists the available API keys.
rpc ListApiKeys(ListApiKeysRequest) returns (ListApiKeysResponse) {}
// Get the global settings.
rpc Settings(google.protobuf.Empty) returns (SettingsResponse) {}
// Get the global settings.
rpc Settings(google.protobuf.Empty) returns (SettingsResponse) {}
// OpenId Connect login.
rpc OpenIdConnectLogin(OpenIdConnectLoginRequest) returns (OpenIdConnectLoginResponse) {}
// OpenId Connect login.
rpc OpenIdConnectLogin(OpenIdConnectLoginRequest)
returns (OpenIdConnectLoginResponse) {}
// GetDevicesSummary returns an aggregated summary of the devices.
rpc GetDevicesSummary(GetDevicesSummaryRequest) returns (GetDevicesSummaryResponse) {}
// OAuth2 login.
rpc OAuth2Login(OAuth2LoginRequest) returns (OAuth2LoginResponse) {}
// GetGatewaysSummary returns an aggregated summary of the gateways.
rpc GetGatewaysSummary(GetGatewaysSummaryRequest) returns (GetGatewaysSummaryResponse) {}
// GetDevicesSummary returns an aggregated summary of the devices.
rpc GetDevicesSummary(GetDevicesSummaryRequest)
returns (GetDevicesSummaryResponse) {}
// Stream frame for the given Gateway ID.
rpc StreamGatewayFrames(StreamGatewayFramesRequest) returns (stream LogItem) {}
// GetGatewaysSummary returns an aggregated summary of the gateways.
rpc GetGatewaysSummary(GetGatewaysSummaryRequest)
returns (GetGatewaysSummaryResponse) {}
// Stream frames for the given Device EUI.
rpc StreamDeviceFrames(StreamDeviceFramesRequest) returns (stream LogItem) {}
// Stream frame for the given Gateway ID.
rpc StreamGatewayFrames(StreamGatewayFramesRequest) returns (stream LogItem) {
}
// Stream events for the given Device EUI.
rpc StreamDeviceEvents(StreamDeviceEventsRequest) returns (stream LogItem) {}
// Stream frames for the given Device EUI.
rpc StreamDeviceFrames(StreamDeviceFramesRequest) returns (stream LogItem) {}
// ListRegions lists the available (configured) regions.
rpc ListRegions(google.protobuf.Empty) returns (ListRegionsResponse) {}
// Stream events for the given Device EUI.
rpc StreamDeviceEvents(StreamDeviceEventsRequest) returns (stream LogItem) {}
// GetRegion returns the region details for the given region.
rpc GetRegion(GetRegionRequest) returns (GetRegionResponse) {}
// ListRegions lists the available (configured) regions.
rpc ListRegions(google.protobuf.Empty) returns (ListRegionsResponse) {}
// GetRegion returns the region details for the given region.
rpc GetRegion(GetRegionRequest) returns (GetRegionResponse) {}
}
message ApiKey {
// API key ID.
// This value will be automatically generated on create.
string id = 1;
// API key ID.
// This value will be automatically generated on create.
string id = 1;
// Name.
string name = 2;
// Name.
string name = 2;
// Is global admin key.
bool is_admin = 3;
// Is global admin key.
bool is_admin = 3;
// Tenant ID.
// In case the API key is intended to manage resources under a single tenant.
string tenant_id = 4;
// Tenant ID.
// In case the API key is intended to manage resources under a single tenant.
string tenant_id = 4;
}
message CreateApiKeyRequest {
// The API key to create.
ApiKey api_key = 1;
// The API key to create.
ApiKey api_key = 1;
}
message CreateApiKeyResponse {
// API key ID.
string id = 1;
// API key ID.
string id = 1;
// API token for authentication API requests.
string token = 2;
// API token for authentication API requests.
string token = 2;
}
message DeleteApiKeyRequest {
// API key ID.
string id = 1;
// API key ID.
string id = 1;
}
message ListApiKeysRequest {
// Max number of items to return.
uint32 limit = 1;
// Max number of items to return.
uint32 limit = 1;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Return only admin keys.
bool is_admin = 3;
// Return only admin keys.
bool is_admin = 3;
// Filter on tenant ID.
string tenant_id = 4;
// Filter on tenant ID.
string tenant_id = 4;
}
message ListApiKeysResponse {
// Total number of API keys.
uint32 total_count = 1;
// Total number of API keys.
uint32 total_count = 1;
repeated ApiKey result = 2;
repeated ApiKey result = 2;
}
// Defines a tenant to which the user is associated.
message UserTenantLink {
// Created at timestamp.
google.protobuf.Timestamp created_at = 1;
// Created at timestamp.
google.protobuf.Timestamp created_at = 1;
// Last update timestamp.
google.protobuf.Timestamp updated_at = 2;
// Last update timestamp.
google.protobuf.Timestamp updated_at = 2;
// Tenant ID.
string tenant_id = 3;
// Tenant ID.
string tenant_id = 3;
// User is admin within the context of this tenant.
// There is no need to set the is_device_admin and is_gateway_admin flags.
bool is_admin = 4;
// User is admin within the context of this tenant.
// There is no need to set the is_device_admin and is_gateway_admin flags.
bool is_admin = 4;
// User is able to modify device related resources (applications,
// device-profiles, devices, multicast-groups).
bool is_device_admin = 5;
// User is able to modify device related resources (applications,
// device-profiles, devices, multicast-groups).
bool is_device_admin = 5;
// User is able to modify gateways.
bool is_gateway_admin = 6;
// User is able to modify gateways.
bool is_gateway_admin = 6;
}
message LoginRequest {
// Email of the user.
string email = 1;
// Email of the user.
string email = 1;
// Password of the user.
string password = 2;
// Password of the user.
string password = 2;
}
message LoginResponse {
// The JWT tag to be used to access chirpstack-application-server interfaces.
string jwt = 1;
// The JWT tag to be used to access chirpstack-application-server interfaces.
string jwt = 1;
}
message ProfileResponse {
// User object.
User user = 1;
// User object.
User user = 1;
// Tenants to which the user is associated.
repeated UserTenantLink tenants = 3;
// Tenants to which the user is associated.
repeated UserTenantLink tenants = 3;
}
message GlobalSearchRequest {
// Search query.
string search = 1;
// Search query.
string search = 1;
// Max number of results to return.
int64 limit = 2;
// Max number of results to return.
int64 limit = 2;
// Offset offset of the result-set (for pagination).
int64 offset = 3;
// Offset offset of the result-set (for pagination).
int64 offset = 3;
}
message GlobalSearchResponse {
repeated GlobalSearchResult result = 1;
}
message GlobalSearchResponse { repeated GlobalSearchResult result = 1; }
message GlobalSearchResult {
// Record kind.
string kind = 1;
// Record kind.
string kind = 1;
// Search score.
float score = 2;
// Search score.
float score = 2;
// Organization id.
string tenant_id = 3;
// Organization id.
string tenant_id = 3;
// Organization name.
string tenant_name = 4;
// Organization name.
string tenant_name = 4;
// Application id.
string application_id = 5;
// Application id.
string application_id = 5;
// Application name.
string application_name = 6;
// Application name.
string application_name = 6;
// Device DevEUI (hex encoded).
string device_dev_eui = 7;
// Device DevEUI (hex encoded).
string device_dev_eui = 7;
// Device name.
string device_name = 8;
// Device name.
string device_name = 8;
// Gateway MAC (hex encoded).
string gateway_id = 9;
// Gateway MAC (hex encoded).
string gateway_id = 9;
// Gateway name.
string gateway_name = 10;
// Gateway name.
string gateway_name = 10;
}
message SettingsResponse {
// OpenId Connect settings.
OpenIdConnect openid_connect = 1;
// OpenId Connect settings.
OpenIdConnect openid_connect = 1;
// OAuth2 settings.
OAuth2 oauth2 = 2;
}
message OpenIdConnect {
// Enable OpenId Connect authentication.
bool enabled = 1;
// Enable OpenId Connect authentication.
bool enabled = 1;
// Login url.
string login_url = 2 [json_name = "loginURL"];
// Login url.
string login_url = 2;
// Login label.
string login_label = 3;
// Login label.
string login_label = 3;
// Logout url.
string logout_url = 4 [json_name = "logoutURL"];
// Logout url.
string logout_url = 4;
// Login redirect.
bool login_redirect = 5;
}
message OAuth2 {
// OAuth2 is enabled.
bool enabled = 1;
// Login url.
string login_url = 2;
// Login label.
string login_label = 3;
// Logout url.
string logout_url = 4;
// Login redirect.
bool login_redirect = 5;
}
message OpenIdConnectLoginRequest {
// OpenId Connect callback code.
string code = 1;
// OpenId Connect callback code.
string code = 1;
// OpenId Connect callback state.
string state = 2;
// OpenId Connect callback state.
string state = 2;
}
message OpenIdConnectLoginResponse {
// Token to use for authentication.
string token = 1;
// Token to use for authentication.
string token = 1;
}
message OAuth2LoginRequest {
// OAuth2 callback code.
string code = 1;
// OAuth2 callback state.
string state = 2;
}
message OAuth2LoginResponse {
// Token to use for authentication.
string token = 1;
}
message GetDevicesSummaryRequest {
// Tenant ID (UUID).
string tenant_id = 1;
// Tenant ID (UUID).
string tenant_id = 1;
}
message GetDevicesSummaryResponse {
// Active count.
uint32 active_count = 1;
// Active count.
uint32 active_count = 1;
// Inactive count.
uint32 inactive_count = 2;
// Inactive count.
uint32 inactive_count = 2;
// per data-rate count.
// Devices that have never been seen are excluded.
map<uint32, uint32> dr_count = 3;
// per data-rate count.
// Devices that have never been seen are excluded.
map<uint32, uint32> dr_count = 3;
// Never seen count.
uint32 never_seen_count = 4;
// Never seen count.
uint32 never_seen_count = 4;
}
message GetGatewaysSummaryRequest {
// Tenant ID (UUID).
string tenant_id = 1;
// Tenant ID (UUID).
string tenant_id = 1;
}
message GetGatewaysSummaryResponse {
// Online count.
uint32 online_count = 1;
// Online count.
uint32 online_count = 1;
// Offline count.
uint32 offline_count = 2;
// Offline count.
uint32 offline_count = 2;
// Never seen count.
uint32 never_seen_count = 3;
// Never seen count.
uint32 never_seen_count = 3;
}
message LogItem {
// ID.
string id = 1;
// ID.
string id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Message.
string description = 3;
// Message.
string description = 3;
// Body.
string body = 4;
// Body.
string body = 4;
// Properties.
map<string, string> properties = 5;
// Properties.
map<string, string> properties = 5;
}
message StreamGatewayFramesRequest {
// Gateway ID (EUI64).
string gateway_id = 1;
// Gateway ID (EUI64).
string gateway_id = 1;
}
message StreamDeviceFramesRequest {
// Device EUI.
string dev_eui = 1;
// Device EUI.
string dev_eui = 1;
}
message StreamDeviceEventsRequest {
// Device EUI.
string dev_eui = 1;
// Device EUI.
string dev_eui = 1;
}
message ListRegionsResponse {
// Configured regions.
repeated RegionListItem regions = 1;
// Configured regions.
repeated RegionListItem regions = 1;
}
message RegionListItem {
// ID.
string id = 1;
// ID.
string id = 1;
// Region.
common.Region region = 2;
// Region.
common.Region region = 2;
// Description.
string description = 3;
// Description.
string description = 3;
}
message GetRegionRequest {
// Region ID.
string id = 1;
// Region ID.
string id = 1;
}
message GetRegionResponse {
// ID.
string id = 1;
// ID.
string id = 1;
// Region.
common.Region region = 2;
// Region.
common.Region region = 2;
// User information.
string user_info = 3;
// User information.
string user_info = 3;
// Uplink channels.
repeated RegionChannel uplink_channels = 4;
// Uplink channels.
repeated RegionChannel uplink_channels = 4;
// RX1 delay.
uint32 rx1_delay = 5;
// RX1 delay.
uint32 rx1_delay = 5;
// RX1 data-rate offset.
uint32 rx1_dr_offset = 6;
// RX1 data-rate offset.
uint32 rx1_dr_offset = 6;
// RX2 DR.
uint32 rx2_dr = 7;
// RX2 DR.
uint32 rx2_dr = 7;
// RX2 frequency.
uint32 rx2_frequency = 8;
// RX2 frequency.
uint32 rx2_frequency = 8;
// Class-B ping-slot DR.
uint32 class_b_ping_slot_dr = 9;
// Class-B ping-slot DR.
uint32 class_b_ping_slot_dr = 9;
// Class-B ping-slot frequency.
uint32 class_b_ping_slot_frequency = 10;
// Class-B ping-slot frequency.
uint32 class_b_ping_slot_frequency = 10;
// Region description.
string description = 11;
// Region description.
string description = 11;
}
message RegionChannel {
// Frequency (Hz).
uint32 frequency = 1;
// Frequency (Hz).
uint32 frequency = 1;
// Min DR.
uint32 dr_min = 2;
// Min DR.
uint32 dr_min = 2;
// Max DR.
uint32 dr_max = 3;
// Max DR.
uint32 dr_max = 3;
}

View File

@ -213,3 +213,12 @@ enum DeviceClass {
// Class-C.
CLASS_C = 2;
}
// Join-Server context.
message JoinServerContext {
// Session-key ID.
string session_key_id = 1;
// AppSKey envelope.
KeyEnvelope app_s_key = 2;
}

View File

@ -114,15 +114,6 @@ message UplinkRelayRxInfo {
uint32 wor_channel = 6;
}
// Join-Server context.
message JoinServerContext {
// Session-key ID.
string session_key_id = 1;
// AppSKey envelope.
common.KeyEnvelope app_s_key = 2;
}
// UplinkEvent is the message sent when an uplink payload has been received.
message UplinkEvent {
// Deduplication ID (UUID).
@ -172,7 +163,7 @@ message UplinkEvent {
// A non-empty value indicatest that ChirpStack does not have access to
// the AppSKey and that the encryption / decryption of the payloads is
// the responsibility of the end-application.
JoinServerContext join_server_context = 15;
common.JoinServerContext join_server_context = 15;
}
// JoinEvent is the message sent when a device joined the network.
@ -197,7 +188,7 @@ message JoinEvent {
// A non-empty value indicatest that ChirpStack does not have access to
// the AppSKey and that the encryption / decryption of the payloads is
// the responsibility of the end-application.
JoinServerContext join_server_context = 6;
common.JoinServerContext join_server_context = 6;
}
// AckEvent is the message sent when a confirmation on a confirmed downlink

View File

@ -7,15 +7,9 @@ import "gw/gw.proto";
import "google/protobuf/timestamp.proto";
message DeviceSession {
// Device EUI.
bytes dev_eui = 1;
// Device address.
bytes dev_addr = 2;
// Join EUI.
bytes join_eui = 3;
// LoRaWAN mac-version.
common.MacVersion mac_version = 4;

View File

@ -418,6 +418,12 @@ message GetDeviceActivationRequest {
message GetDeviceActivationResponse {
// Device activation object.
DeviceActivation device_activation = 1;
// Join-Server context.
// A non-empty value indicatest that ChirpStack does not have access to
// the AppSKey and that the encryption / decryption of the payloads is
// the responsibility of the end-application.
common.JoinServerContext join_server_context = 2;
}
message GetRandomDevAddrRequest {

View File

@ -405,6 +405,11 @@ message DeviceProfile {
// 2 = 4
// 3 = 12
uint32 relay_overall_limit_bucket_size = 51;
// Allow roaming.
//
// If set to true, it means that the device is allowed to use roaming.
bool allow_roaming = 52;
}
message Measurement {

View File

@ -15,361 +15,402 @@ import "chirpstack-api/api/user.proto";
// InternalService is the service providing API endpoints for internal usage.
service InternalService {
// Log in a user
rpc Login(LoginRequest) returns (LoginResponse) {}
// Log in a user
rpc Login(LoginRequest) returns (LoginResponse) {}
// Get the current user's profile
rpc Profile(google.protobuf.Empty) returns (ProfileResponse) {}
// Get the current user's profile
rpc Profile(google.protobuf.Empty) returns (ProfileResponse) {}
// Perform a global search.
rpc GlobalSearch(GlobalSearchRequest) returns (GlobalSearchResponse) {}
// Perform a global search.
rpc GlobalSearch(GlobalSearchRequest) returns (GlobalSearchResponse) {}
// CreateApiKey creates the given API key.
rpc CreateApiKey(CreateApiKeyRequest) returns (CreateApiKeyResponse) {}
// CreateApiKey creates the given API key.
rpc CreateApiKey(CreateApiKeyRequest) returns (CreateApiKeyResponse) {}
// DeleteApiKey deletes the API key.
rpc DeleteApiKey(DeleteApiKeyRequest) returns (google.protobuf.Empty) {}
// DeleteApiKey deletes the API key.
rpc DeleteApiKey(DeleteApiKeyRequest) returns (google.protobuf.Empty) {}
// ListApiKeys lists the available API keys.
rpc ListApiKeys(ListApiKeysRequest) returns (ListApiKeysResponse) {}
// ListApiKeys lists the available API keys.
rpc ListApiKeys(ListApiKeysRequest) returns (ListApiKeysResponse) {}
// Get the global settings.
rpc Settings(google.protobuf.Empty) returns (SettingsResponse) {}
// Get the global settings.
rpc Settings(google.protobuf.Empty) returns (SettingsResponse) {}
// OpenId Connect login.
rpc OpenIdConnectLogin(OpenIdConnectLoginRequest) returns (OpenIdConnectLoginResponse) {}
// OpenId Connect login.
rpc OpenIdConnectLogin(OpenIdConnectLoginRequest)
returns (OpenIdConnectLoginResponse) {}
// GetDevicesSummary returns an aggregated summary of the devices.
rpc GetDevicesSummary(GetDevicesSummaryRequest) returns (GetDevicesSummaryResponse) {}
// OAuth2 login.
rpc OAuth2Login(OAuth2LoginRequest) returns (OAuth2LoginResponse) {}
// GetGatewaysSummary returns an aggregated summary of the gateways.
rpc GetGatewaysSummary(GetGatewaysSummaryRequest) returns (GetGatewaysSummaryResponse) {}
// GetDevicesSummary returns an aggregated summary of the devices.
rpc GetDevicesSummary(GetDevicesSummaryRequest)
returns (GetDevicesSummaryResponse) {}
// Stream frame for the given Gateway ID.
rpc StreamGatewayFrames(StreamGatewayFramesRequest) returns (stream LogItem) {}
// GetGatewaysSummary returns an aggregated summary of the gateways.
rpc GetGatewaysSummary(GetGatewaysSummaryRequest)
returns (GetGatewaysSummaryResponse) {}
// Stream frames for the given Device EUI.
rpc StreamDeviceFrames(StreamDeviceFramesRequest) returns (stream LogItem) {}
// Stream frame for the given Gateway ID.
rpc StreamGatewayFrames(StreamGatewayFramesRequest) returns (stream LogItem) {
}
// Stream events for the given Device EUI.
rpc StreamDeviceEvents(StreamDeviceEventsRequest) returns (stream LogItem) {}
// Stream frames for the given Device EUI.
rpc StreamDeviceFrames(StreamDeviceFramesRequest) returns (stream LogItem) {}
// ListRegions lists the available (configured) regions.
rpc ListRegions(google.protobuf.Empty) returns (ListRegionsResponse) {}
// Stream events for the given Device EUI.
rpc StreamDeviceEvents(StreamDeviceEventsRequest) returns (stream LogItem) {}
// GetRegion returns the region details for the given region.
rpc GetRegion(GetRegionRequest) returns (GetRegionResponse) {}
// ListRegions lists the available (configured) regions.
rpc ListRegions(google.protobuf.Empty) returns (ListRegionsResponse) {}
// GetRegion returns the region details for the given region.
rpc GetRegion(GetRegionRequest) returns (GetRegionResponse) {}
}
message ApiKey {
// API key ID.
// This value will be automatically generated on create.
string id = 1;
// API key ID.
// This value will be automatically generated on create.
string id = 1;
// Name.
string name = 2;
// Name.
string name = 2;
// Is global admin key.
bool is_admin = 3;
// Is global admin key.
bool is_admin = 3;
// Tenant ID.
// In case the API key is intended to manage resources under a single tenant.
string tenant_id = 4;
// Tenant ID.
// In case the API key is intended to manage resources under a single tenant.
string tenant_id = 4;
}
message CreateApiKeyRequest {
// The API key to create.
ApiKey api_key = 1;
// The API key to create.
ApiKey api_key = 1;
}
message CreateApiKeyResponse {
// API key ID.
string id = 1;
// API key ID.
string id = 1;
// API token for authentication API requests.
string token = 2;
// API token for authentication API requests.
string token = 2;
}
message DeleteApiKeyRequest {
// API key ID.
string id = 1;
// API key ID.
string id = 1;
}
message ListApiKeysRequest {
// Max number of items to return.
uint32 limit = 1;
// Max number of items to return.
uint32 limit = 1;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Return only admin keys.
bool is_admin = 3;
// Return only admin keys.
bool is_admin = 3;
// Filter on tenant ID.
string tenant_id = 4;
// Filter on tenant ID.
string tenant_id = 4;
}
message ListApiKeysResponse {
// Total number of API keys.
uint32 total_count = 1;
// Total number of API keys.
uint32 total_count = 1;
repeated ApiKey result = 2;
repeated ApiKey result = 2;
}
// Defines a tenant to which the user is associated.
message UserTenantLink {
// Created at timestamp.
google.protobuf.Timestamp created_at = 1;
// Created at timestamp.
google.protobuf.Timestamp created_at = 1;
// Last update timestamp.
google.protobuf.Timestamp updated_at = 2;
// Last update timestamp.
google.protobuf.Timestamp updated_at = 2;
// Tenant ID.
string tenant_id = 3;
// Tenant ID.
string tenant_id = 3;
// User is admin within the context of this tenant.
// There is no need to set the is_device_admin and is_gateway_admin flags.
bool is_admin = 4;
// User is admin within the context of this tenant.
// There is no need to set the is_device_admin and is_gateway_admin flags.
bool is_admin = 4;
// User is able to modify device related resources (applications,
// device-profiles, devices, multicast-groups).
bool is_device_admin = 5;
// User is able to modify device related resources (applications,
// device-profiles, devices, multicast-groups).
bool is_device_admin = 5;
// User is able to modify gateways.
bool is_gateway_admin = 6;
// User is able to modify gateways.
bool is_gateway_admin = 6;
}
message LoginRequest {
// Email of the user.
string email = 1;
// Email of the user.
string email = 1;
// Password of the user.
string password = 2;
// Password of the user.
string password = 2;
}
message LoginResponse {
// The JWT tag to be used to access chirpstack-application-server interfaces.
string jwt = 1;
// The JWT tag to be used to access chirpstack-application-server interfaces.
string jwt = 1;
}
message ProfileResponse {
// User object.
User user = 1;
// User object.
User user = 1;
// Tenants to which the user is associated.
repeated UserTenantLink tenants = 3;
// Tenants to which the user is associated.
repeated UserTenantLink tenants = 3;
}
message GlobalSearchRequest {
// Search query.
string search = 1;
// Search query.
string search = 1;
// Max number of results to return.
int64 limit = 2;
// Max number of results to return.
int64 limit = 2;
// Offset offset of the result-set (for pagination).
int64 offset = 3;
// Offset offset of the result-set (for pagination).
int64 offset = 3;
}
message GlobalSearchResponse {
repeated GlobalSearchResult result = 1;
}
message GlobalSearchResponse { repeated GlobalSearchResult result = 1; }
message GlobalSearchResult {
// Record kind.
string kind = 1;
// Record kind.
string kind = 1;
// Search score.
float score = 2;
// Search score.
float score = 2;
// Organization id.
string tenant_id = 3;
// Organization id.
string tenant_id = 3;
// Organization name.
string tenant_name = 4;
// Organization name.
string tenant_name = 4;
// Application id.
string application_id = 5;
// Application id.
string application_id = 5;
// Application name.
string application_name = 6;
// Application name.
string application_name = 6;
// Device DevEUI (hex encoded).
string device_dev_eui = 7;
// Device DevEUI (hex encoded).
string device_dev_eui = 7;
// Device name.
string device_name = 8;
// Device name.
string device_name = 8;
// Gateway MAC (hex encoded).
string gateway_id = 9;
// Gateway MAC (hex encoded).
string gateway_id = 9;
// Gateway name.
string gateway_name = 10;
// Gateway name.
string gateway_name = 10;
}
message SettingsResponse {
// OpenId Connect settings.
OpenIdConnect openid_connect = 1;
// OpenId Connect settings.
OpenIdConnect openid_connect = 1;
// OAuth2 settings.
OAuth2 oauth2 = 2;
}
message OpenIdConnect {
// Enable OpenId Connect authentication.
bool enabled = 1;
// Enable OpenId Connect authentication.
bool enabled = 1;
// Login url.
string login_url = 2 [json_name = "loginURL"];
// Login url.
string login_url = 2;
// Login label.
string login_label = 3;
// Login label.
string login_label = 3;
// Logout url.
string logout_url = 4 [json_name = "logoutURL"];
// Logout url.
string logout_url = 4;
// Login redirect.
bool login_redirect = 5;
}
message OAuth2 {
// OAuth2 is enabled.
bool enabled = 1;
// Login url.
string login_url = 2;
// Login label.
string login_label = 3;
// Logout url.
string logout_url = 4;
// Login redirect.
bool login_redirect = 5;
}
message OpenIdConnectLoginRequest {
// OpenId Connect callback code.
string code = 1;
// OpenId Connect callback code.
string code = 1;
// OpenId Connect callback state.
string state = 2;
// OpenId Connect callback state.
string state = 2;
}
message OpenIdConnectLoginResponse {
// Token to use for authentication.
string token = 1;
// Token to use for authentication.
string token = 1;
}
message OAuth2LoginRequest {
// OAuth2 callback code.
string code = 1;
// OAuth2 callback state.
string state = 2;
}
message OAuth2LoginResponse {
// Token to use for authentication.
string token = 1;
}
message GetDevicesSummaryRequest {
// Tenant ID (UUID).
string tenant_id = 1;
// Tenant ID (UUID).
string tenant_id = 1;
}
message GetDevicesSummaryResponse {
// Active count.
uint32 active_count = 1;
// Active count.
uint32 active_count = 1;
// Inactive count.
uint32 inactive_count = 2;
// Inactive count.
uint32 inactive_count = 2;
// per data-rate count.
// Devices that have never been seen are excluded.
map<uint32, uint32> dr_count = 3;
// per data-rate count.
// Devices that have never been seen are excluded.
map<uint32, uint32> dr_count = 3;
// Never seen count.
uint32 never_seen_count = 4;
// Never seen count.
uint32 never_seen_count = 4;
}
message GetGatewaysSummaryRequest {
// Tenant ID (UUID).
string tenant_id = 1;
// Tenant ID (UUID).
string tenant_id = 1;
}
message GetGatewaysSummaryResponse {
// Online count.
uint32 online_count = 1;
// Online count.
uint32 online_count = 1;
// Offline count.
uint32 offline_count = 2;
// Offline count.
uint32 offline_count = 2;
// Never seen count.
uint32 never_seen_count = 3;
// Never seen count.
uint32 never_seen_count = 3;
}
message LogItem {
// ID.
string id = 1;
// ID.
string id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Message.
string description = 3;
// Message.
string description = 3;
// Body.
string body = 4;
// Body.
string body = 4;
// Properties.
map<string, string> properties = 5;
// Properties.
map<string, string> properties = 5;
}
message StreamGatewayFramesRequest {
// Gateway ID (EUI64).
string gateway_id = 1;
// Gateway ID (EUI64).
string gateway_id = 1;
}
message StreamDeviceFramesRequest {
// Device EUI.
string dev_eui = 1;
// Device EUI.
string dev_eui = 1;
}
message StreamDeviceEventsRequest {
// Device EUI.
string dev_eui = 1;
// Device EUI.
string dev_eui = 1;
}
message ListRegionsResponse {
// Configured regions.
repeated RegionListItem regions = 1;
// Configured regions.
repeated RegionListItem regions = 1;
}
message RegionListItem {
// ID.
string id = 1;
// ID.
string id = 1;
// Region.
common.Region region = 2;
// Region.
common.Region region = 2;
// Description.
string description = 3;
// Description.
string description = 3;
}
message GetRegionRequest {
// Region ID.
string id = 1;
// Region ID.
string id = 1;
}
message GetRegionResponse {
// ID.
string id = 1;
// ID.
string id = 1;
// Region.
common.Region region = 2;
// Region.
common.Region region = 2;
// User information.
string user_info = 3;
// User information.
string user_info = 3;
// Uplink channels.
repeated RegionChannel uplink_channels = 4;
// Uplink channels.
repeated RegionChannel uplink_channels = 4;
// RX1 delay.
uint32 rx1_delay = 5;
// RX1 delay.
uint32 rx1_delay = 5;
// RX1 data-rate offset.
uint32 rx1_dr_offset = 6;
// RX1 data-rate offset.
uint32 rx1_dr_offset = 6;
// RX2 DR.
uint32 rx2_dr = 7;
// RX2 DR.
uint32 rx2_dr = 7;
// RX2 frequency.
uint32 rx2_frequency = 8;
// RX2 frequency.
uint32 rx2_frequency = 8;
// Class-B ping-slot DR.
uint32 class_b_ping_slot_dr = 9;
// Class-B ping-slot DR.
uint32 class_b_ping_slot_dr = 9;
// Class-B ping-slot frequency.
uint32 class_b_ping_slot_frequency = 10;
// Class-B ping-slot frequency.
uint32 class_b_ping_slot_frequency = 10;
// Region description.
string description = 11;
// Region description.
string description = 11;
}
message RegionChannel {
// Frequency (Hz).
uint32 frequency = 1;
// Frequency (Hz).
uint32 frequency = 1;
// Min DR.
uint32 dr_min = 2;
// Min DR.
uint32 dr_min = 2;
// Max DR.
uint32 dr_max = 3;
// Max DR.
uint32 dr_max = 3;
}

View File

@ -213,3 +213,12 @@ enum DeviceClass {
// Class-C.
CLASS_C = 2;
}
// Join-Server context.
message JoinServerContext {
// Session-key ID.
string session_key_id = 1;
// AppSKey envelope.
KeyEnvelope app_s_key = 2;
}

View File

@ -114,15 +114,6 @@ message UplinkRelayRxInfo {
uint32 wor_channel = 6;
}
// Join-Server context.
message JoinServerContext {
// Session-key ID.
string session_key_id = 1;
// AppSKey envelope.
common.KeyEnvelope app_s_key = 2;
}
// UplinkEvent is the message sent when an uplink payload has been received.
message UplinkEvent {
// Deduplication ID (UUID).
@ -172,7 +163,7 @@ message UplinkEvent {
// A non-empty value indicatest that ChirpStack does not have access to
// the AppSKey and that the encryption / decryption of the payloads is
// the responsibility of the end-application.
JoinServerContext join_server_context = 15;
common.JoinServerContext join_server_context = 15;
}
// JoinEvent is the message sent when a device joined the network.
@ -197,7 +188,7 @@ message JoinEvent {
// A non-empty value indicatest that ChirpStack does not have access to
// the AppSKey and that the encryption / decryption of the payloads is
// the responsibility of the end-application.
JoinServerContext join_server_context = 6;
common.JoinServerContext join_server_context = 6;
}
// AckEvent is the message sent when a confirmation on a confirmed downlink

View File

@ -7,15 +7,9 @@ import "chirpstack-api/gw/gw.proto";
import "google/protobuf/timestamp.proto";
message DeviceSession {
// Device EUI.
bytes dev_eui = 1;
// Device address.
bytes dev_addr = 2;
// Join EUI.
bytes join_eui = 3;
// LoRaWAN mac-version.
common.MacVersion mac_version = 4;

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/api/application.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -22,107 +23,106 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.api.application_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\020ApplicationProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_APPLICATION_TAGSENTRY._options = None
_APPLICATION_TAGSENTRY._serialized_options = b'8\001'
_HTTPINTEGRATION_HEADERSENTRY._options = None
_HTTPINTEGRATION_HEADERSENTRY._serialized_options = b'8\001'
_APPLICATIONSERVICE.methods_by_name['Create']._options = None
_APPLICATIONSERVICE.methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\026\"\021/api/applications:\001*'
_APPLICATIONSERVICE.methods_by_name['Get']._options = None
_APPLICATIONSERVICE.methods_by_name['Get']._serialized_options = b'\202\323\344\223\002\030\022\026/api/applications/{id}'
_APPLICATIONSERVICE.methods_by_name['Update']._options = None
_APPLICATIONSERVICE.methods_by_name['Update']._serialized_options = b'\202\323\344\223\002\'\032\"/api/applications/{application.id}:\001*'
_APPLICATIONSERVICE.methods_by_name['Delete']._options = None
_APPLICATIONSERVICE.methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002\030*\026/api/applications/{id}'
_APPLICATIONSERVICE.methods_by_name['List']._options = None
_APPLICATIONSERVICE.methods_by_name['List']._serialized_options = b'\202\323\344\223\002\023\022\021/api/applications'
_APPLICATIONSERVICE.methods_by_name['ListIntegrations']._options = None
_APPLICATIONSERVICE.methods_by_name['ListIntegrations']._serialized_options = b'\202\323\344\223\0021\022//api/applications/{application_id}/integrations'
_APPLICATIONSERVICE.methods_by_name['CreateHttpIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['CreateHttpIntegration']._serialized_options = b'\202\323\344\223\002E\"@/api/applications/{integration.application_id}/integrations/http:\001*'
_APPLICATIONSERVICE.methods_by_name['GetHttpIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['GetHttpIntegration']._serialized_options = b'\202\323\344\223\0026\0224/api/applications/{application_id}/integrations/http'
_APPLICATIONSERVICE.methods_by_name['UpdateHttpIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['UpdateHttpIntegration']._serialized_options = b'\202\323\344\223\002E\032@/api/applications/{integration.application_id}/integrations/http:\001*'
_APPLICATIONSERVICE.methods_by_name['DeleteHttpIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['DeleteHttpIntegration']._serialized_options = b'\202\323\344\223\0026*4/api/applications/{application_id}/integrations/http'
_APPLICATIONSERVICE.methods_by_name['CreateInfluxDbIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['CreateInfluxDbIntegration']._serialized_options = b'\202\323\344\223\002I\"D/api/applications/{integration.application_id}/integrations/influxdb:\001*'
_APPLICATIONSERVICE.methods_by_name['GetInfluxDbIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['GetInfluxDbIntegration']._serialized_options = b'\202\323\344\223\002:\0228/api/applications/{application_id}/integrations/influxdb'
_APPLICATIONSERVICE.methods_by_name['UpdateInfluxDbIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['UpdateInfluxDbIntegration']._serialized_options = b'\202\323\344\223\002I\032D/api/applications/{integration.application_id}/integrations/influxdb:\001*'
_APPLICATIONSERVICE.methods_by_name['DeleteInfluxDbIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['DeleteInfluxDbIntegration']._serialized_options = b'\202\323\344\223\002:*8/api/applications/{application_id}/integrations/influxdb'
_APPLICATIONSERVICE.methods_by_name['CreateThingsBoardIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['CreateThingsBoardIntegration']._serialized_options = b'\202\323\344\223\002L\"G/api/applications/{integration.application_id}/integrations/thingsboard:\001*'
_APPLICATIONSERVICE.methods_by_name['GetThingsBoardIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['GetThingsBoardIntegration']._serialized_options = b'\202\323\344\223\002=\022;/api/applications/{application_id}/integrations/thingsboard'
_APPLICATIONSERVICE.methods_by_name['UpdateThingsBoardIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['UpdateThingsBoardIntegration']._serialized_options = b'\202\323\344\223\002L\032G/api/applications/{integration.application_id}/integrations/thingsboard:\001*'
_APPLICATIONSERVICE.methods_by_name['DeleteThingsBoardIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['DeleteThingsBoardIntegration']._serialized_options = b'\202\323\344\223\002=*;/api/applications/{application_id}/integrations/thingsboard'
_APPLICATIONSERVICE.methods_by_name['CreateMyDevicesIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['CreateMyDevicesIntegration']._serialized_options = b'\202\323\344\223\002J\"E/api/applications/{integration.application_id}/integrations/mydevices:\001*'
_APPLICATIONSERVICE.methods_by_name['GetMyDevicesIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['GetMyDevicesIntegration']._serialized_options = b'\202\323\344\223\002;\0229/api/applications/{application_id}/integrations/mydevices'
_APPLICATIONSERVICE.methods_by_name['UpdateMyDevicesIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['UpdateMyDevicesIntegration']._serialized_options = b'\202\323\344\223\002J\032E/api/applications/{integration.application_id}/integrations/mydevices:\001*'
_APPLICATIONSERVICE.methods_by_name['DeleteMyDevicesIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['DeleteMyDevicesIntegration']._serialized_options = b'\202\323\344\223\002;*9/api/applications/{application_id}/integrations/mydevices'
_APPLICATIONSERVICE.methods_by_name['CreateLoraCloudIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['CreateLoraCloudIntegration']._serialized_options = b'\202\323\344\223\002J\"E/api/applications/{integration.application_id}/integrations/loracloud:\001*'
_APPLICATIONSERVICE.methods_by_name['GetLoraCloudIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['GetLoraCloudIntegration']._serialized_options = b'\202\323\344\223\002;\0229/api/applications/{application_id}/integrations/loracloud'
_APPLICATIONSERVICE.methods_by_name['UpdateLoraCloudIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['UpdateLoraCloudIntegration']._serialized_options = b'\202\323\344\223\002J\032E/api/applications/{integration.application_id}/integrations/loracloud:\001*'
_APPLICATIONSERVICE.methods_by_name['DeleteLoraCloudIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['DeleteLoraCloudIntegration']._serialized_options = b'\202\323\344\223\002;*9/api/applications/{application_id}/integrations/loracloud'
_APPLICATIONSERVICE.methods_by_name['CreateGcpPubSubIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['CreateGcpPubSubIntegration']._serialized_options = b'\202\323\344\223\002L\"G/api/applications/{integration.application_id}/integrations/gcp-pub-sub:\001*'
_APPLICATIONSERVICE.methods_by_name['GetGcpPubSubIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['GetGcpPubSubIntegration']._serialized_options = b'\202\323\344\223\002=\022;/api/applications/{application_id}/integrations/gcp-pub-sub'
_APPLICATIONSERVICE.methods_by_name['UpdateGcpPubSubIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['UpdateGcpPubSubIntegration']._serialized_options = b'\202\323\344\223\002L\032G/api/applications/{integration.application_id}/integrations/gcp-pub-sub:\001*'
_APPLICATIONSERVICE.methods_by_name['DeleteGcpPubSubIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['DeleteGcpPubSubIntegration']._serialized_options = b'\202\323\344\223\002=*;/api/applications/{application_id}/integrations/gcp-pub-sub'
_APPLICATIONSERVICE.methods_by_name['CreateAwsSnsIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['CreateAwsSnsIntegration']._serialized_options = b'\202\323\344\223\002H\"C/api/applications/{integration.application_id}/integrations/aws-sns:\001*'
_APPLICATIONSERVICE.methods_by_name['GetAwsSnsIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['GetAwsSnsIntegration']._serialized_options = b'\202\323\344\223\0029\0227/api/applications/{application_id}/integrations/aws-sns'
_APPLICATIONSERVICE.methods_by_name['UpdateAwsSnsIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['UpdateAwsSnsIntegration']._serialized_options = b'\202\323\344\223\002H\032C/api/applications/{integration.application_id}/integrations/aws-sns:\001*'
_APPLICATIONSERVICE.methods_by_name['DeleteAwsSnsIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['DeleteAwsSnsIntegration']._serialized_options = b'\202\323\344\223\0029*7/api/applications/{application_id}/integrations/aws-sns'
_APPLICATIONSERVICE.methods_by_name['CreateAzureServiceBusIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['CreateAzureServiceBusIntegration']._serialized_options = b'\202\323\344\223\002R\"M/api/applications/{integration.application_id}/integrations/azure-service-bus:\001*'
_APPLICATIONSERVICE.methods_by_name['GetAzureServiceBusIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['GetAzureServiceBusIntegration']._serialized_options = b'\202\323\344\223\002C\022A/api/applications/{application_id}/integrations/azure-service-bus'
_APPLICATIONSERVICE.methods_by_name['UpdateAzureServiceBusIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['UpdateAzureServiceBusIntegration']._serialized_options = b'\202\323\344\223\002R\032M/api/applications/{integration.application_id}/integrations/azure-service-bus:\001*'
_APPLICATIONSERVICE.methods_by_name['DeleteAzureServiceBusIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['DeleteAzureServiceBusIntegration']._serialized_options = b'\202\323\344\223\002C*A/api/applications/{application_id}/integrations/azure-service-bus'
_APPLICATIONSERVICE.methods_by_name['CreatePilotThingsIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['CreatePilotThingsIntegration']._serialized_options = b'\202\323\344\223\002M\"H/api/applications/{integration.application_id}/integrations/pilot-things:\001*'
_APPLICATIONSERVICE.methods_by_name['GetPilotThingsIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['GetPilotThingsIntegration']._serialized_options = b'\202\323\344\223\002>\022</api/applications/{application_id}/integrations/pilot-things'
_APPLICATIONSERVICE.methods_by_name['UpdatePilotThingsIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['UpdatePilotThingsIntegration']._serialized_options = b'\202\323\344\223\002M\032H/api/applications/{integration.application_id}/integrations/pilot-things:\001*'
_APPLICATIONSERVICE.methods_by_name['DeletePilotThingsIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['DeletePilotThingsIntegration']._serialized_options = b'\202\323\344\223\002>*</api/applications/{application_id}/integrations/pilot-things'
_APPLICATIONSERVICE.methods_by_name['CreateIftttIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['CreateIftttIntegration']._serialized_options = b'\202\323\344\223\002F\"A/api/applications/{integration.application_id}/integrations/ifttt:\001*'
_APPLICATIONSERVICE.methods_by_name['GetIftttIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['GetIftttIntegration']._serialized_options = b'\202\323\344\223\0027\0225/api/applications/{application_id}/integrations/ifttt'
_APPLICATIONSERVICE.methods_by_name['UpdateIftttIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['UpdateIftttIntegration']._serialized_options = b'\202\323\344\223\002F\032A/api/applications/{integration.application_id}/integrations/ifttt:\001*'
_APPLICATIONSERVICE.methods_by_name['DeleteIftttIntegration']._options = None
_APPLICATIONSERVICE.methods_by_name['DeleteIftttIntegration']._serialized_options = b'\202\323\344\223\0027*5/api/applications/{application_id}/integrations/ifttt'
_APPLICATIONSERVICE.methods_by_name['GenerateMqttIntegrationClientCertificate']._options = None
_APPLICATIONSERVICE.methods_by_name['GenerateMqttIntegrationClientCertificate']._serialized_options = b'\202\323\344\223\002B\"@/api/applications/{application_id}/integrations/mqtt/certificate'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\021io.chirpstack.apiB\020ApplicationProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_globals['_APPLICATION_TAGSENTRY']._options = None
_globals['_APPLICATION_TAGSENTRY']._serialized_options = b'8\001'
_globals['_HTTPINTEGRATION_HEADERSENTRY']._options = None
_globals['_HTTPINTEGRATION_HEADERSENTRY']._serialized_options = b'8\001'
_globals['_APPLICATIONSERVICE'].methods_by_name['Create']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\026\"\021/api/applications:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['Get']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['Get']._serialized_options = b'\202\323\344\223\002\030\022\026/api/applications/{id}'
_globals['_APPLICATIONSERVICE'].methods_by_name['Update']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['Update']._serialized_options = b'\202\323\344\223\002\'\032\"/api/applications/{application.id}:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['Delete']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002\030*\026/api/applications/{id}'
_globals['_APPLICATIONSERVICE'].methods_by_name['List']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['List']._serialized_options = b'\202\323\344\223\002\023\022\021/api/applications'
_globals['_APPLICATIONSERVICE'].methods_by_name['ListIntegrations']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['ListIntegrations']._serialized_options = b'\202\323\344\223\0021\022//api/applications/{application_id}/integrations'
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateHttpIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateHttpIntegration']._serialized_options = b'\202\323\344\223\002E\"@/api/applications/{integration.application_id}/integrations/http:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['GetHttpIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['GetHttpIntegration']._serialized_options = b'\202\323\344\223\0026\0224/api/applications/{application_id}/integrations/http'
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateHttpIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateHttpIntegration']._serialized_options = b'\202\323\344\223\002E\032@/api/applications/{integration.application_id}/integrations/http:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteHttpIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteHttpIntegration']._serialized_options = b'\202\323\344\223\0026*4/api/applications/{application_id}/integrations/http'
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateInfluxDbIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateInfluxDbIntegration']._serialized_options = b'\202\323\344\223\002I\"D/api/applications/{integration.application_id}/integrations/influxdb:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['GetInfluxDbIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['GetInfluxDbIntegration']._serialized_options = b'\202\323\344\223\002:\0228/api/applications/{application_id}/integrations/influxdb'
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateInfluxDbIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateInfluxDbIntegration']._serialized_options = b'\202\323\344\223\002I\032D/api/applications/{integration.application_id}/integrations/influxdb:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteInfluxDbIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteInfluxDbIntegration']._serialized_options = b'\202\323\344\223\002:*8/api/applications/{application_id}/integrations/influxdb'
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateThingsBoardIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateThingsBoardIntegration']._serialized_options = b'\202\323\344\223\002L\"G/api/applications/{integration.application_id}/integrations/thingsboard:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['GetThingsBoardIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['GetThingsBoardIntegration']._serialized_options = b'\202\323\344\223\002=\022;/api/applications/{application_id}/integrations/thingsboard'
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateThingsBoardIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateThingsBoardIntegration']._serialized_options = b'\202\323\344\223\002L\032G/api/applications/{integration.application_id}/integrations/thingsboard:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteThingsBoardIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteThingsBoardIntegration']._serialized_options = b'\202\323\344\223\002=*;/api/applications/{application_id}/integrations/thingsboard'
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateMyDevicesIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateMyDevicesIntegration']._serialized_options = b'\202\323\344\223\002J\"E/api/applications/{integration.application_id}/integrations/mydevices:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['GetMyDevicesIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['GetMyDevicesIntegration']._serialized_options = b'\202\323\344\223\002;\0229/api/applications/{application_id}/integrations/mydevices'
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateMyDevicesIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateMyDevicesIntegration']._serialized_options = b'\202\323\344\223\002J\032E/api/applications/{integration.application_id}/integrations/mydevices:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteMyDevicesIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteMyDevicesIntegration']._serialized_options = b'\202\323\344\223\002;*9/api/applications/{application_id}/integrations/mydevices'
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateLoraCloudIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateLoraCloudIntegration']._serialized_options = b'\202\323\344\223\002J\"E/api/applications/{integration.application_id}/integrations/loracloud:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['GetLoraCloudIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['GetLoraCloudIntegration']._serialized_options = b'\202\323\344\223\002;\0229/api/applications/{application_id}/integrations/loracloud'
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateLoraCloudIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateLoraCloudIntegration']._serialized_options = b'\202\323\344\223\002J\032E/api/applications/{integration.application_id}/integrations/loracloud:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteLoraCloudIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteLoraCloudIntegration']._serialized_options = b'\202\323\344\223\002;*9/api/applications/{application_id}/integrations/loracloud'
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateGcpPubSubIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateGcpPubSubIntegration']._serialized_options = b'\202\323\344\223\002L\"G/api/applications/{integration.application_id}/integrations/gcp-pub-sub:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['GetGcpPubSubIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['GetGcpPubSubIntegration']._serialized_options = b'\202\323\344\223\002=\022;/api/applications/{application_id}/integrations/gcp-pub-sub'
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateGcpPubSubIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateGcpPubSubIntegration']._serialized_options = b'\202\323\344\223\002L\032G/api/applications/{integration.application_id}/integrations/gcp-pub-sub:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteGcpPubSubIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteGcpPubSubIntegration']._serialized_options = b'\202\323\344\223\002=*;/api/applications/{application_id}/integrations/gcp-pub-sub'
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateAwsSnsIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateAwsSnsIntegration']._serialized_options = b'\202\323\344\223\002H\"C/api/applications/{integration.application_id}/integrations/aws-sns:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['GetAwsSnsIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['GetAwsSnsIntegration']._serialized_options = b'\202\323\344\223\0029\0227/api/applications/{application_id}/integrations/aws-sns'
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateAwsSnsIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateAwsSnsIntegration']._serialized_options = b'\202\323\344\223\002H\032C/api/applications/{integration.application_id}/integrations/aws-sns:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteAwsSnsIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteAwsSnsIntegration']._serialized_options = b'\202\323\344\223\0029*7/api/applications/{application_id}/integrations/aws-sns'
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateAzureServiceBusIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateAzureServiceBusIntegration']._serialized_options = b'\202\323\344\223\002R\"M/api/applications/{integration.application_id}/integrations/azure-service-bus:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['GetAzureServiceBusIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['GetAzureServiceBusIntegration']._serialized_options = b'\202\323\344\223\002C\022A/api/applications/{application_id}/integrations/azure-service-bus'
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateAzureServiceBusIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateAzureServiceBusIntegration']._serialized_options = b'\202\323\344\223\002R\032M/api/applications/{integration.application_id}/integrations/azure-service-bus:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteAzureServiceBusIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteAzureServiceBusIntegration']._serialized_options = b'\202\323\344\223\002C*A/api/applications/{application_id}/integrations/azure-service-bus'
_globals['_APPLICATIONSERVICE'].methods_by_name['CreatePilotThingsIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['CreatePilotThingsIntegration']._serialized_options = b'\202\323\344\223\002M\"H/api/applications/{integration.application_id}/integrations/pilot-things:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['GetPilotThingsIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['GetPilotThingsIntegration']._serialized_options = b'\202\323\344\223\002>\022</api/applications/{application_id}/integrations/pilot-things'
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdatePilotThingsIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdatePilotThingsIntegration']._serialized_options = b'\202\323\344\223\002M\032H/api/applications/{integration.application_id}/integrations/pilot-things:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['DeletePilotThingsIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['DeletePilotThingsIntegration']._serialized_options = b'\202\323\344\223\002>*</api/applications/{application_id}/integrations/pilot-things'
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateIftttIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['CreateIftttIntegration']._serialized_options = b'\202\323\344\223\002F\"A/api/applications/{integration.application_id}/integrations/ifttt:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['GetIftttIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['GetIftttIntegration']._serialized_options = b'\202\323\344\223\0027\0225/api/applications/{application_id}/integrations/ifttt'
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateIftttIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['UpdateIftttIntegration']._serialized_options = b'\202\323\344\223\002F\032A/api/applications/{integration.application_id}/integrations/ifttt:\001*'
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteIftttIntegration']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['DeleteIftttIntegration']._serialized_options = b'\202\323\344\223\0027*5/api/applications/{application_id}/integrations/ifttt'
_globals['_APPLICATIONSERVICE'].methods_by_name['GenerateMqttIntegrationClientCertificate']._options = None
_globals['_APPLICATIONSERVICE'].methods_by_name['GenerateMqttIntegrationClientCertificate']._serialized_options = b'\202\323\344\223\002B\"@/api/applications/{application_id}/integrations/mqtt/certificate'
_globals['_ENCODING']._serialized_start=7091
_globals['_ENCODING']._serialized_end=7125
_globals['_INTEGRATIONKIND']._serialized_start=7128

View File

@ -10,12 +10,12 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class Encoding(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
JSON: _ClassVar[Encoding]
PROTOBUF: _ClassVar[Encoding]
class IntegrationKind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
HTTP: _ClassVar[IntegrationKind]
INFLUX_DB: _ClassVar[IntegrationKind]
THINGS_BOARD: _ClassVar[IntegrationKind]
@ -29,7 +29,7 @@ class IntegrationKind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
IFTTT: _ClassVar[IntegrationKind]
class InfluxDbPrecision(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
NS: _ClassVar[InfluxDbPrecision]
U: _ClassVar[InfluxDbPrecision]
MS: _ClassVar[InfluxDbPrecision]
@ -38,7 +38,7 @@ class InfluxDbPrecision(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
H: _ClassVar[InfluxDbPrecision]
class InfluxDbVersion(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
INFLUXDB_1: _ClassVar[InfluxDbVersion]
INFLUXDB_2: _ClassVar[InfluxDbVersion]
JSON: Encoding
@ -64,9 +64,9 @@ INFLUXDB_1: InfluxDbVersion
INFLUXDB_2: InfluxDbVersion
class Application(_message.Message):
__slots__ = ["id", "name", "description", "tenant_id", "tags"]
__slots__ = ("id", "name", "description", "tenant_id", "tags")
class TagsEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -85,7 +85,7 @@ class Application(_message.Message):
def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., tenant_id: _Optional[str] = ..., tags: _Optional[_Mapping[str, str]] = ...) -> None: ...
class ApplicationListItem(_message.Message):
__slots__ = ["id", "created_at", "updated_at", "name", "description"]
__slots__ = ("id", "created_at", "updated_at", "name", "description")
ID_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -99,25 +99,25 @@ class ApplicationListItem(_message.Message):
def __init__(self, id: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., name: _Optional[str] = ..., description: _Optional[str] = ...) -> None: ...
class CreateApplicationRequest(_message.Message):
__slots__ = ["application"]
__slots__ = ("application",)
APPLICATION_FIELD_NUMBER: _ClassVar[int]
application: Application
def __init__(self, application: _Optional[_Union[Application, _Mapping]] = ...) -> None: ...
class CreateApplicationResponse(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetApplicationRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetApplicationResponse(_message.Message):
__slots__ = ["application", "created_at", "updated_at", "measurement_keys"]
__slots__ = ("application", "created_at", "updated_at", "measurement_keys")
APPLICATION_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -129,19 +129,19 @@ class GetApplicationResponse(_message.Message):
def __init__(self, application: _Optional[_Union[Application, _Mapping]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., measurement_keys: _Optional[_Iterable[str]] = ...) -> None: ...
class UpdateApplicationRequest(_message.Message):
__slots__ = ["application"]
__slots__ = ("application",)
APPLICATION_FIELD_NUMBER: _ClassVar[int]
application: Application
def __init__(self, application: _Optional[_Union[Application, _Mapping]] = ...) -> None: ...
class DeleteApplicationRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class ListApplicationsRequest(_message.Message):
__slots__ = ["limit", "offset", "search", "tenant_id"]
__slots__ = ("limit", "offset", "search", "tenant_id")
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
SEARCH_FIELD_NUMBER: _ClassVar[int]
@ -153,7 +153,7 @@ class ListApplicationsRequest(_message.Message):
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., search: _Optional[str] = ..., tenant_id: _Optional[str] = ...) -> None: ...
class ListApplicationsResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -161,19 +161,19 @@ class ListApplicationsResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[ApplicationListItem, _Mapping]]] = ...) -> None: ...
class ListIntegrationsRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class IntegrationListItem(_message.Message):
__slots__ = ["kind"]
__slots__ = ("kind",)
KIND_FIELD_NUMBER: _ClassVar[int]
kind: IntegrationKind
def __init__(self, kind: _Optional[_Union[IntegrationKind, str]] = ...) -> None: ...
class ListIntegrationsResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -181,9 +181,9 @@ class ListIntegrationsResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[IntegrationListItem, _Mapping]]] = ...) -> None: ...
class HttpIntegration(_message.Message):
__slots__ = ["application_id", "headers", "encoding", "event_endpoint_url"]
__slots__ = ("application_id", "headers", "encoding", "event_endpoint_url")
class HeadersEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -200,37 +200,37 @@ class HttpIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., headers: _Optional[_Mapping[str, str]] = ..., encoding: _Optional[_Union[Encoding, str]] = ..., event_endpoint_url: _Optional[str] = ...) -> None: ...
class CreateHttpIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: HttpIntegration
def __init__(self, integration: _Optional[_Union[HttpIntegration, _Mapping]] = ...) -> None: ...
class GetHttpIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GetHttpIntegrationResponse(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: HttpIntegration
def __init__(self, integration: _Optional[_Union[HttpIntegration, _Mapping]] = ...) -> None: ...
class UpdateHttpIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: HttpIntegration
def __init__(self, integration: _Optional[_Union[HttpIntegration, _Mapping]] = ...) -> None: ...
class DeleteHttpIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class InfluxDbIntegration(_message.Message):
__slots__ = ["application_id", "endpoint", "db", "username", "password", "retention_policy_name", "precision", "version", "token", "organization", "bucket"]
__slots__ = ("application_id", "endpoint", "db", "username", "password", "retention_policy_name", "precision", "version", "token", "organization", "bucket")
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
ENDPOINT_FIELD_NUMBER: _ClassVar[int]
DB_FIELD_NUMBER: _ClassVar[int]
@ -256,37 +256,37 @@ class InfluxDbIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., endpoint: _Optional[str] = ..., db: _Optional[str] = ..., username: _Optional[str] = ..., password: _Optional[str] = ..., retention_policy_name: _Optional[str] = ..., precision: _Optional[_Union[InfluxDbPrecision, str]] = ..., version: _Optional[_Union[InfluxDbVersion, str]] = ..., token: _Optional[str] = ..., organization: _Optional[str] = ..., bucket: _Optional[str] = ...) -> None: ...
class CreateInfluxDbIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: InfluxDbIntegration
def __init__(self, integration: _Optional[_Union[InfluxDbIntegration, _Mapping]] = ...) -> None: ...
class GetInfluxDbIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GetInfluxDbIntegrationResponse(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: InfluxDbIntegration
def __init__(self, integration: _Optional[_Union[InfluxDbIntegration, _Mapping]] = ...) -> None: ...
class UpdateInfluxDbIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: InfluxDbIntegration
def __init__(self, integration: _Optional[_Union[InfluxDbIntegration, _Mapping]] = ...) -> None: ...
class DeleteInfluxDbIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class ThingsBoardIntegration(_message.Message):
__slots__ = ["application_id", "server"]
__slots__ = ("application_id", "server")
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
SERVER_FIELD_NUMBER: _ClassVar[int]
application_id: str
@ -294,37 +294,37 @@ class ThingsBoardIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., server: _Optional[str] = ...) -> None: ...
class CreateThingsBoardIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: ThingsBoardIntegration
def __init__(self, integration: _Optional[_Union[ThingsBoardIntegration, _Mapping]] = ...) -> None: ...
class GetThingsBoardIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GetThingsBoardIntegrationResponse(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: ThingsBoardIntegration
def __init__(self, integration: _Optional[_Union[ThingsBoardIntegration, _Mapping]] = ...) -> None: ...
class UpdateThingsBoardIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: ThingsBoardIntegration
def __init__(self, integration: _Optional[_Union[ThingsBoardIntegration, _Mapping]] = ...) -> None: ...
class DeleteThingsBoardIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class MyDevicesIntegration(_message.Message):
__slots__ = ["application_id", "endpoint"]
__slots__ = ("application_id", "endpoint")
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
ENDPOINT_FIELD_NUMBER: _ClassVar[int]
application_id: str
@ -332,37 +332,37 @@ class MyDevicesIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., endpoint: _Optional[str] = ...) -> None: ...
class CreateMyDevicesIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: MyDevicesIntegration
def __init__(self, integration: _Optional[_Union[MyDevicesIntegration, _Mapping]] = ...) -> None: ...
class GetMyDevicesIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GetMyDevicesIntegrationResponse(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: MyDevicesIntegration
def __init__(self, integration: _Optional[_Union[MyDevicesIntegration, _Mapping]] = ...) -> None: ...
class UpdateMyDevicesIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: MyDevicesIntegration
def __init__(self, integration: _Optional[_Union[MyDevicesIntegration, _Mapping]] = ...) -> None: ...
class DeleteMyDevicesIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class LoraCloudIntegration(_message.Message):
__slots__ = ["application_id", "modem_geolocation_services"]
__slots__ = ("application_id", "modem_geolocation_services")
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
MODEM_GEOLOCATION_SERVICES_FIELD_NUMBER: _ClassVar[int]
application_id: str
@ -370,7 +370,7 @@ class LoraCloudIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., modem_geolocation_services: _Optional[_Union[LoraCloudModemGeolocationServices, _Mapping]] = ...) -> None: ...
class LoraCloudModemGeolocationServices(_message.Message):
__slots__ = ["token", "modem_enabled", "forward_f_ports", "gnss_use_rx_time", "gnss_use_gateway_location", "parse_tlv", "geolocation_buffer_ttl", "geolocation_min_buffer_size", "geolocation_tdoa", "geolocation_rssi", "geolocation_gnss", "geolocation_gnss_payload_field", "geolocation_gnss_use_rx_time", "geolocation_wifi", "geolocation_wifi_payload_field"]
__slots__ = ("token", "modem_enabled", "forward_f_ports", "gnss_use_rx_time", "gnss_use_gateway_location", "parse_tlv", "geolocation_buffer_ttl", "geolocation_min_buffer_size", "geolocation_tdoa", "geolocation_rssi", "geolocation_gnss", "geolocation_gnss_payload_field", "geolocation_gnss_use_rx_time", "geolocation_wifi", "geolocation_wifi_payload_field")
TOKEN_FIELD_NUMBER: _ClassVar[int]
MODEM_ENABLED_FIELD_NUMBER: _ClassVar[int]
FORWARD_F_PORTS_FIELD_NUMBER: _ClassVar[int]
@ -404,37 +404,37 @@ class LoraCloudModemGeolocationServices(_message.Message):
def __init__(self, token: _Optional[str] = ..., modem_enabled: bool = ..., forward_f_ports: _Optional[_Iterable[int]] = ..., gnss_use_rx_time: bool = ..., gnss_use_gateway_location: bool = ..., parse_tlv: bool = ..., geolocation_buffer_ttl: _Optional[int] = ..., geolocation_min_buffer_size: _Optional[int] = ..., geolocation_tdoa: bool = ..., geolocation_rssi: bool = ..., geolocation_gnss: bool = ..., geolocation_gnss_payload_field: _Optional[str] = ..., geolocation_gnss_use_rx_time: bool = ..., geolocation_wifi: bool = ..., geolocation_wifi_payload_field: _Optional[str] = ...) -> None: ...
class CreateLoraCloudIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: LoraCloudIntegration
def __init__(self, integration: _Optional[_Union[LoraCloudIntegration, _Mapping]] = ...) -> None: ...
class GetLoraCloudIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GetLoraCloudIntegrationResponse(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: LoraCloudIntegration
def __init__(self, integration: _Optional[_Union[LoraCloudIntegration, _Mapping]] = ...) -> None: ...
class UpdateLoraCloudIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: LoraCloudIntegration
def __init__(self, integration: _Optional[_Union[LoraCloudIntegration, _Mapping]] = ...) -> None: ...
class DeleteLoraCloudIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GcpPubSubIntegration(_message.Message):
__slots__ = ["application_id", "encoding", "credentials_file", "project_id", "topic_name"]
__slots__ = ("application_id", "encoding", "credentials_file", "project_id", "topic_name")
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
ENCODING_FIELD_NUMBER: _ClassVar[int]
CREDENTIALS_FILE_FIELD_NUMBER: _ClassVar[int]
@ -448,37 +448,37 @@ class GcpPubSubIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., encoding: _Optional[_Union[Encoding, str]] = ..., credentials_file: _Optional[str] = ..., project_id: _Optional[str] = ..., topic_name: _Optional[str] = ...) -> None: ...
class CreateGcpPubSubIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: GcpPubSubIntegration
def __init__(self, integration: _Optional[_Union[GcpPubSubIntegration, _Mapping]] = ...) -> None: ...
class GetGcpPubSubIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GetGcpPubSubIntegrationResponse(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: GcpPubSubIntegration
def __init__(self, integration: _Optional[_Union[GcpPubSubIntegration, _Mapping]] = ...) -> None: ...
class UpdateGcpPubSubIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: GcpPubSubIntegration
def __init__(self, integration: _Optional[_Union[GcpPubSubIntegration, _Mapping]] = ...) -> None: ...
class DeleteGcpPubSubIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class AwsSnsIntegration(_message.Message):
__slots__ = ["application_id", "encoding", "region", "access_key_id", "secret_access_key", "topic_arn"]
__slots__ = ("application_id", "encoding", "region", "access_key_id", "secret_access_key", "topic_arn")
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
ENCODING_FIELD_NUMBER: _ClassVar[int]
REGION_FIELD_NUMBER: _ClassVar[int]
@ -494,37 +494,37 @@ class AwsSnsIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., encoding: _Optional[_Union[Encoding, str]] = ..., region: _Optional[str] = ..., access_key_id: _Optional[str] = ..., secret_access_key: _Optional[str] = ..., topic_arn: _Optional[str] = ...) -> None: ...
class CreateAwsSnsIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: AwsSnsIntegration
def __init__(self, integration: _Optional[_Union[AwsSnsIntegration, _Mapping]] = ...) -> None: ...
class GetAwsSnsIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GetAwsSnsIntegrationResponse(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: AwsSnsIntegration
def __init__(self, integration: _Optional[_Union[AwsSnsIntegration, _Mapping]] = ...) -> None: ...
class UpdateAwsSnsIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: AwsSnsIntegration
def __init__(self, integration: _Optional[_Union[AwsSnsIntegration, _Mapping]] = ...) -> None: ...
class DeleteAwsSnsIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class AzureServiceBusIntegration(_message.Message):
__slots__ = ["application_id", "encoding", "connection_string", "publish_name"]
__slots__ = ("application_id", "encoding", "connection_string", "publish_name")
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
ENCODING_FIELD_NUMBER: _ClassVar[int]
CONNECTION_STRING_FIELD_NUMBER: _ClassVar[int]
@ -536,37 +536,37 @@ class AzureServiceBusIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., encoding: _Optional[_Union[Encoding, str]] = ..., connection_string: _Optional[str] = ..., publish_name: _Optional[str] = ...) -> None: ...
class CreateAzureServiceBusIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: AzureServiceBusIntegration
def __init__(self, integration: _Optional[_Union[AzureServiceBusIntegration, _Mapping]] = ...) -> None: ...
class GetAzureServiceBusIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GetAzureServiceBusIntegrationResponse(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: AzureServiceBusIntegration
def __init__(self, integration: _Optional[_Union[AzureServiceBusIntegration, _Mapping]] = ...) -> None: ...
class UpdateAzureServiceBusIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: AzureServiceBusIntegration
def __init__(self, integration: _Optional[_Union[AzureServiceBusIntegration, _Mapping]] = ...) -> None: ...
class DeleteAzureServiceBusIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class PilotThingsIntegration(_message.Message):
__slots__ = ["application_id", "server", "token"]
__slots__ = ("application_id", "server", "token")
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
SERVER_FIELD_NUMBER: _ClassVar[int]
TOKEN_FIELD_NUMBER: _ClassVar[int]
@ -576,37 +576,37 @@ class PilotThingsIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., server: _Optional[str] = ..., token: _Optional[str] = ...) -> None: ...
class CreatePilotThingsIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: PilotThingsIntegration
def __init__(self, integration: _Optional[_Union[PilotThingsIntegration, _Mapping]] = ...) -> None: ...
class GetPilotThingsIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GetPilotThingsIntegrationResponse(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: PilotThingsIntegration
def __init__(self, integration: _Optional[_Union[PilotThingsIntegration, _Mapping]] = ...) -> None: ...
class UpdatePilotThingsIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: PilotThingsIntegration
def __init__(self, integration: _Optional[_Union[PilotThingsIntegration, _Mapping]] = ...) -> None: ...
class DeletePilotThingsIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class IftttIntegration(_message.Message):
__slots__ = ["application_id", "key", "uplink_values", "arbitrary_json", "event_prefix"]
__slots__ = ("application_id", "key", "uplink_values", "arbitrary_json", "event_prefix")
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
KEY_FIELD_NUMBER: _ClassVar[int]
UPLINK_VALUES_FIELD_NUMBER: _ClassVar[int]
@ -620,43 +620,43 @@ class IftttIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., key: _Optional[str] = ..., uplink_values: _Optional[_Iterable[str]] = ..., arbitrary_json: bool = ..., event_prefix: _Optional[str] = ...) -> None: ...
class CreateIftttIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: IftttIntegration
def __init__(self, integration: _Optional[_Union[IftttIntegration, _Mapping]] = ...) -> None: ...
class GetIftttIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GetIftttIntegrationResponse(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: IftttIntegration
def __init__(self, integration: _Optional[_Union[IftttIntegration, _Mapping]] = ...) -> None: ...
class UpdateIftttIntegrationRequest(_message.Message):
__slots__ = ["integration"]
__slots__ = ("integration",)
INTEGRATION_FIELD_NUMBER: _ClassVar[int]
integration: IftttIntegration
def __init__(self, integration: _Optional[_Union[IftttIntegration, _Mapping]] = ...) -> None: ...
class DeleteIftttIntegrationRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GenerateMqttIntegrationClientCertificateRequest(_message.Message):
__slots__ = ["application_id"]
__slots__ = ("application_id",)
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
application_id: str
def __init__(self, application_id: _Optional[str] = ...) -> None: ...
class GenerateMqttIntegrationClientCertificateResponse(_message.Message):
__slots__ = ["tls_cert", "tls_key", "ca_cert", "expires_at"]
__slots__ = ("tls_cert", "tls_key", "ca_cert", "expires_at")
TLS_CERT_FIELD_NUMBER: _ClassVar[int]
TLS_KEY_FIELD_NUMBER: _ClassVar[int]
CA_CERT_FIELD_NUMBER: _ClassVar[int]

File diff suppressed because one or more lines are too long

View File

@ -11,16 +11,16 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class Device(_message.Message):
__slots__ = ["dev_eui", "name", "description", "application_id", "device_profile_id", "skip_fcnt_check", "is_disabled", "variables", "tags", "join_eui"]
__slots__ = ("dev_eui", "name", "description", "application_id", "device_profile_id", "skip_fcnt_check", "is_disabled", "variables", "tags", "join_eui")
class VariablesEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: str
def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
class TagsEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -49,7 +49,7 @@ class Device(_message.Message):
def __init__(self, dev_eui: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., application_id: _Optional[str] = ..., device_profile_id: _Optional[str] = ..., skip_fcnt_check: bool = ..., is_disabled: bool = ..., variables: _Optional[_Mapping[str, str]] = ..., tags: _Optional[_Mapping[str, str]] = ..., join_eui: _Optional[str] = ...) -> None: ...
class DeviceStatus(_message.Message):
__slots__ = ["margin", "external_power_source", "battery_level"]
__slots__ = ("margin", "external_power_source", "battery_level")
MARGIN_FIELD_NUMBER: _ClassVar[int]
EXTERNAL_POWER_SOURCE_FIELD_NUMBER: _ClassVar[int]
BATTERY_LEVEL_FIELD_NUMBER: _ClassVar[int]
@ -59,7 +59,7 @@ class DeviceStatus(_message.Message):
def __init__(self, margin: _Optional[int] = ..., external_power_source: bool = ..., battery_level: _Optional[float] = ...) -> None: ...
class DeviceListItem(_message.Message):
__slots__ = ["dev_eui", "created_at", "updated_at", "last_seen_at", "name", "description", "device_profile_id", "device_profile_name", "device_status"]
__slots__ = ("dev_eui", "created_at", "updated_at", "last_seen_at", "name", "description", "device_profile_id", "device_profile_name", "device_status")
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -81,7 +81,7 @@ class DeviceListItem(_message.Message):
def __init__(self, dev_eui: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., last_seen_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., device_profile_id: _Optional[str] = ..., device_profile_name: _Optional[str] = ..., device_status: _Optional[_Union[DeviceStatus, _Mapping]] = ...) -> None: ...
class DeviceKeys(_message.Message):
__slots__ = ["dev_eui", "nwk_key", "app_key"]
__slots__ = ("dev_eui", "nwk_key", "app_key")
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
NWK_KEY_FIELD_NUMBER: _ClassVar[int]
APP_KEY_FIELD_NUMBER: _ClassVar[int]
@ -91,19 +91,19 @@ class DeviceKeys(_message.Message):
def __init__(self, dev_eui: _Optional[str] = ..., nwk_key: _Optional[str] = ..., app_key: _Optional[str] = ...) -> None: ...
class CreateDeviceRequest(_message.Message):
__slots__ = ["device"]
__slots__ = ("device",)
DEVICE_FIELD_NUMBER: _ClassVar[int]
device: Device
def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ...) -> None: ...
class GetDeviceRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class GetDeviceResponse(_message.Message):
__slots__ = ["device", "created_at", "updated_at", "last_seen_at", "device_status", "class_enabled"]
__slots__ = ("device", "created_at", "updated_at", "last_seen_at", "device_status", "class_enabled")
DEVICE_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -119,19 +119,19 @@ class GetDeviceResponse(_message.Message):
def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., last_seen_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., device_status: _Optional[_Union[DeviceStatus, _Mapping]] = ..., class_enabled: _Optional[_Union[_common_pb2.DeviceClass, str]] = ...) -> None: ...
class UpdateDeviceRequest(_message.Message):
__slots__ = ["device"]
__slots__ = ("device",)
DEVICE_FIELD_NUMBER: _ClassVar[int]
device: Device
def __init__(self, device: _Optional[_Union[Device, _Mapping]] = ...) -> None: ...
class DeleteDeviceRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class ListDevicesRequest(_message.Message):
__slots__ = ["limit", "offset", "search", "application_id", "multicast_group_id"]
__slots__ = ("limit", "offset", "search", "application_id", "multicast_group_id")
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
SEARCH_FIELD_NUMBER: _ClassVar[int]
@ -145,7 +145,7 @@ class ListDevicesRequest(_message.Message):
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., search: _Optional[str] = ..., application_id: _Optional[str] = ..., multicast_group_id: _Optional[str] = ...) -> None: ...
class ListDevicesResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -153,19 +153,19 @@ class ListDevicesResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[DeviceListItem, _Mapping]]] = ...) -> None: ...
class CreateDeviceKeysRequest(_message.Message):
__slots__ = ["device_keys"]
__slots__ = ("device_keys",)
DEVICE_KEYS_FIELD_NUMBER: _ClassVar[int]
device_keys: DeviceKeys
def __init__(self, device_keys: _Optional[_Union[DeviceKeys, _Mapping]] = ...) -> None: ...
class GetDeviceKeysRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class GetDeviceKeysResponse(_message.Message):
__slots__ = ["device_keys", "created_at", "updated_at"]
__slots__ = ("device_keys", "created_at", "updated_at")
DEVICE_KEYS_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -175,19 +175,19 @@ class GetDeviceKeysResponse(_message.Message):
def __init__(self, device_keys: _Optional[_Union[DeviceKeys, _Mapping]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
class UpdateDeviceKeysRequest(_message.Message):
__slots__ = ["device_keys"]
__slots__ = ("device_keys",)
DEVICE_KEYS_FIELD_NUMBER: _ClassVar[int]
device_keys: DeviceKeys
def __init__(self, device_keys: _Optional[_Union[DeviceKeys, _Mapping]] = ...) -> None: ...
class DeleteDeviceKeysRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class DeviceActivation(_message.Message):
__slots__ = ["dev_eui", "dev_addr", "app_s_key", "nwk_s_enc_key", "s_nwk_s_int_key", "f_nwk_s_int_key", "f_cnt_up", "n_f_cnt_down", "a_f_cnt_down"]
__slots__ = ("dev_eui", "dev_addr", "app_s_key", "nwk_s_enc_key", "s_nwk_s_int_key", "f_nwk_s_int_key", "f_cnt_up", "n_f_cnt_down", "a_f_cnt_down")
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
DEV_ADDR_FIELD_NUMBER: _ClassVar[int]
APP_S_KEY_FIELD_NUMBER: _ClassVar[int]
@ -209,43 +209,45 @@ class DeviceActivation(_message.Message):
def __init__(self, dev_eui: _Optional[str] = ..., dev_addr: _Optional[str] = ..., app_s_key: _Optional[str] = ..., nwk_s_enc_key: _Optional[str] = ..., s_nwk_s_int_key: _Optional[str] = ..., f_nwk_s_int_key: _Optional[str] = ..., f_cnt_up: _Optional[int] = ..., n_f_cnt_down: _Optional[int] = ..., a_f_cnt_down: _Optional[int] = ...) -> None: ...
class ActivateDeviceRequest(_message.Message):
__slots__ = ["device_activation"]
__slots__ = ("device_activation",)
DEVICE_ACTIVATION_FIELD_NUMBER: _ClassVar[int]
device_activation: DeviceActivation
def __init__(self, device_activation: _Optional[_Union[DeviceActivation, _Mapping]] = ...) -> None: ...
class DeactivateDeviceRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class GetDeviceActivationRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class GetDeviceActivationResponse(_message.Message):
__slots__ = ["device_activation"]
__slots__ = ("device_activation", "join_server_context")
DEVICE_ACTIVATION_FIELD_NUMBER: _ClassVar[int]
JOIN_SERVER_CONTEXT_FIELD_NUMBER: _ClassVar[int]
device_activation: DeviceActivation
def __init__(self, device_activation: _Optional[_Union[DeviceActivation, _Mapping]] = ...) -> None: ...
join_server_context: _common_pb2.JoinServerContext
def __init__(self, device_activation: _Optional[_Union[DeviceActivation, _Mapping]] = ..., join_server_context: _Optional[_Union[_common_pb2.JoinServerContext, _Mapping]] = ...) -> None: ...
class GetRandomDevAddrRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class GetRandomDevAddrResponse(_message.Message):
__slots__ = ["dev_addr"]
__slots__ = ("dev_addr",)
DEV_ADDR_FIELD_NUMBER: _ClassVar[int]
dev_addr: str
def __init__(self, dev_addr: _Optional[str] = ...) -> None: ...
class GetDeviceMetricsRequest(_message.Message):
__slots__ = ["dev_eui", "start", "end", "aggregation"]
__slots__ = ("dev_eui", "start", "end", "aggregation")
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
START_FIELD_NUMBER: _ClassVar[int]
END_FIELD_NUMBER: _ClassVar[int]
@ -257,16 +259,16 @@ class GetDeviceMetricsRequest(_message.Message):
def __init__(self, dev_eui: _Optional[str] = ..., start: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., end: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., aggregation: _Optional[_Union[_common_pb2.Aggregation, str]] = ...) -> None: ...
class GetDeviceMetricsResponse(_message.Message):
__slots__ = ["metrics", "states"]
__slots__ = ("metrics", "states")
class MetricsEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: _common_pb2.Metric
def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_common_pb2.Metric, _Mapping]] = ...) -> None: ...
class StatesEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -279,7 +281,7 @@ class GetDeviceMetricsResponse(_message.Message):
def __init__(self, metrics: _Optional[_Mapping[str, _common_pb2.Metric]] = ..., states: _Optional[_Mapping[str, DeviceState]] = ...) -> None: ...
class DeviceState(_message.Message):
__slots__ = ["name", "value"]
__slots__ = ("name", "value")
NAME_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
name: str
@ -287,7 +289,7 @@ class DeviceState(_message.Message):
def __init__(self, name: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
class GetDeviceLinkMetricsRequest(_message.Message):
__slots__ = ["dev_eui", "start", "end", "aggregation"]
__slots__ = ("dev_eui", "start", "end", "aggregation")
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
START_FIELD_NUMBER: _ClassVar[int]
END_FIELD_NUMBER: _ClassVar[int]
@ -299,7 +301,7 @@ class GetDeviceLinkMetricsRequest(_message.Message):
def __init__(self, dev_eui: _Optional[str] = ..., start: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., end: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., aggregation: _Optional[_Union[_common_pb2.Aggregation, str]] = ...) -> None: ...
class GetDeviceLinkMetricsResponse(_message.Message):
__slots__ = ["rx_packets", "gw_rssi", "gw_snr", "rx_packets_per_freq", "rx_packets_per_dr", "errors"]
__slots__ = ("rx_packets", "gw_rssi", "gw_snr", "rx_packets_per_freq", "rx_packets_per_dr", "errors")
RX_PACKETS_FIELD_NUMBER: _ClassVar[int]
GW_RSSI_FIELD_NUMBER: _ClassVar[int]
GW_SNR_FIELD_NUMBER: _ClassVar[int]
@ -315,7 +317,7 @@ class GetDeviceLinkMetricsResponse(_message.Message):
def __init__(self, rx_packets: _Optional[_Union[_common_pb2.Metric, _Mapping]] = ..., gw_rssi: _Optional[_Union[_common_pb2.Metric, _Mapping]] = ..., gw_snr: _Optional[_Union[_common_pb2.Metric, _Mapping]] = ..., rx_packets_per_freq: _Optional[_Union[_common_pb2.Metric, _Mapping]] = ..., rx_packets_per_dr: _Optional[_Union[_common_pb2.Metric, _Mapping]] = ..., errors: _Optional[_Union[_common_pb2.Metric, _Mapping]] = ...) -> None: ...
class DeviceQueueItem(_message.Message):
__slots__ = ["id", "dev_eui", "confirmed", "f_port", "data", "object", "is_pending", "f_cnt_down", "is_encrypted"]
__slots__ = ("id", "dev_eui", "confirmed", "f_port", "data", "object", "is_pending", "f_cnt_down", "is_encrypted")
ID_FIELD_NUMBER: _ClassVar[int]
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
CONFIRMED_FIELD_NUMBER: _ClassVar[int]
@ -337,25 +339,25 @@ class DeviceQueueItem(_message.Message):
def __init__(self, id: _Optional[str] = ..., dev_eui: _Optional[str] = ..., confirmed: bool = ..., f_port: _Optional[int] = ..., data: _Optional[bytes] = ..., object: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., is_pending: bool = ..., f_cnt_down: _Optional[int] = ..., is_encrypted: bool = ...) -> None: ...
class EnqueueDeviceQueueItemRequest(_message.Message):
__slots__ = ["queue_item"]
__slots__ = ("queue_item",)
QUEUE_ITEM_FIELD_NUMBER: _ClassVar[int]
queue_item: DeviceQueueItem
def __init__(self, queue_item: _Optional[_Union[DeviceQueueItem, _Mapping]] = ...) -> None: ...
class EnqueueDeviceQueueItemResponse(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class FlushDeviceQueueRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class GetDeviceQueueItemsRequest(_message.Message):
__slots__ = ["dev_eui", "count_only"]
__slots__ = ("dev_eui", "count_only")
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
COUNT_ONLY_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
@ -363,7 +365,7 @@ class GetDeviceQueueItemsRequest(_message.Message):
def __init__(self, dev_eui: _Optional[str] = ..., count_only: bool = ...) -> None: ...
class GetDeviceQueueItemsResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -371,19 +373,19 @@ class GetDeviceQueueItemsResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[DeviceQueueItem, _Mapping]]] = ...) -> None: ...
class FlushDevNoncesRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class GetDeviceNextFCntDownRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class GetDeviceNextFCntDownResponse(_message.Message):
__slots__ = ["f_cnt_down"]
__slots__ = ("f_cnt_down",)
F_CNT_DOWN_FIELD_NUMBER: _ClassVar[int]
f_cnt_down: int
def __init__(self, f_cnt_down: _Optional[int] = ...) -> None: ...

File diff suppressed because one or more lines are too long

View File

@ -11,13 +11,13 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class CodecRuntime(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
NONE: _ClassVar[CodecRuntime]
CAYENNE_LPP: _ClassVar[CodecRuntime]
JS: _ClassVar[CodecRuntime]
class MeasurementKind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
UNKNOWN: _ClassVar[MeasurementKind]
COUNTER: _ClassVar[MeasurementKind]
ABSOLUTE: _ClassVar[MeasurementKind]
@ -25,7 +25,7 @@ class MeasurementKind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
STRING: _ClassVar[MeasurementKind]
class CadPeriodicity(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
SEC_1: _ClassVar[CadPeriodicity]
MS_500: _ClassVar[CadPeriodicity]
MS_250: _ClassVar[CadPeriodicity]
@ -34,7 +34,7 @@ class CadPeriodicity(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
MS_20: _ClassVar[CadPeriodicity]
class SecondChAckOffset(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
KHZ_0: _ClassVar[SecondChAckOffset]
KHZ_200: _ClassVar[SecondChAckOffset]
KHZ_400: _ClassVar[SecondChAckOffset]
@ -43,7 +43,7 @@ class SecondChAckOffset(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
KHZ_3200: _ClassVar[SecondChAckOffset]
class RelayModeActivation(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
DISABLE_RELAY_MODE: _ClassVar[RelayModeActivation]
ENABLE_RELAY_MODE: _ClassVar[RelayModeActivation]
DYNAMIC: _ClassVar[RelayModeActivation]
@ -74,16 +74,16 @@ DYNAMIC: RelayModeActivation
END_DEVICE_CONTROLLED: RelayModeActivation
class DeviceProfile(_message.Message):
__slots__ = ["id", "tenant_id", "name", "description", "region", "mac_version", "reg_params_revision", "adr_algorithm_id", "payload_codec_runtime", "payload_codec_script", "flush_queue_on_activate", "uplink_interval", "device_status_req_interval", "supports_otaa", "supports_class_b", "supports_class_c", "class_b_timeout", "class_b_ping_slot_nb_k", "class_b_ping_slot_dr", "class_b_ping_slot_freq", "class_c_timeout", "abp_rx1_delay", "abp_rx1_dr_offset", "abp_rx2_dr", "abp_rx2_freq", "tags", "measurements", "auto_detect_measurements", "region_config_id", "is_relay", "is_relay_ed", "relay_ed_relay_only", "relay_enabled", "relay_cad_periodicity", "relay_default_channel_index", "relay_second_channel_freq", "relay_second_channel_dr", "relay_second_channel_ack_offset", "relay_ed_activation_mode", "relay_ed_smart_enable_level", "relay_ed_back_off", "relay_ed_uplink_limit_bucket_size", "relay_ed_uplink_limit_reload_rate", "relay_join_req_limit_reload_rate", "relay_notify_limit_reload_rate", "relay_global_uplink_limit_reload_rate", "relay_overall_limit_reload_rate", "relay_join_req_limit_bucket_size", "relay_notify_limit_bucket_size", "relay_global_uplink_limit_bucket_size", "relay_overall_limit_bucket_size"]
__slots__ = ("id", "tenant_id", "name", "description", "region", "mac_version", "reg_params_revision", "adr_algorithm_id", "payload_codec_runtime", "payload_codec_script", "flush_queue_on_activate", "uplink_interval", "device_status_req_interval", "supports_otaa", "supports_class_b", "supports_class_c", "class_b_timeout", "class_b_ping_slot_nb_k", "class_b_ping_slot_dr", "class_b_ping_slot_freq", "class_c_timeout", "abp_rx1_delay", "abp_rx1_dr_offset", "abp_rx2_dr", "abp_rx2_freq", "tags", "measurements", "auto_detect_measurements", "region_config_id", "is_relay", "is_relay_ed", "relay_ed_relay_only", "relay_enabled", "relay_cad_periodicity", "relay_default_channel_index", "relay_second_channel_freq", "relay_second_channel_dr", "relay_second_channel_ack_offset", "relay_ed_activation_mode", "relay_ed_smart_enable_level", "relay_ed_back_off", "relay_ed_uplink_limit_bucket_size", "relay_ed_uplink_limit_reload_rate", "relay_join_req_limit_reload_rate", "relay_notify_limit_reload_rate", "relay_global_uplink_limit_reload_rate", "relay_overall_limit_reload_rate", "relay_join_req_limit_bucket_size", "relay_notify_limit_bucket_size", "relay_global_uplink_limit_bucket_size", "relay_overall_limit_bucket_size", "allow_roaming")
class TagsEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: str
def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
class MeasurementsEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -140,6 +140,7 @@ class DeviceProfile(_message.Message):
RELAY_NOTIFY_LIMIT_BUCKET_SIZE_FIELD_NUMBER: _ClassVar[int]
RELAY_GLOBAL_UPLINK_LIMIT_BUCKET_SIZE_FIELD_NUMBER: _ClassVar[int]
RELAY_OVERALL_LIMIT_BUCKET_SIZE_FIELD_NUMBER: _ClassVar[int]
ALLOW_ROAMING_FIELD_NUMBER: _ClassVar[int]
id: str
tenant_id: str
name: str
@ -191,10 +192,11 @@ class DeviceProfile(_message.Message):
relay_notify_limit_bucket_size: int
relay_global_uplink_limit_bucket_size: int
relay_overall_limit_bucket_size: int
def __init__(self, id: _Optional[str] = ..., tenant_id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., mac_version: _Optional[_Union[_common_pb2.MacVersion, str]] = ..., reg_params_revision: _Optional[_Union[_common_pb2.RegParamsRevision, str]] = ..., adr_algorithm_id: _Optional[str] = ..., payload_codec_runtime: _Optional[_Union[CodecRuntime, str]] = ..., payload_codec_script: _Optional[str] = ..., flush_queue_on_activate: bool = ..., uplink_interval: _Optional[int] = ..., device_status_req_interval: _Optional[int] = ..., supports_otaa: bool = ..., supports_class_b: bool = ..., supports_class_c: bool = ..., class_b_timeout: _Optional[int] = ..., class_b_ping_slot_nb_k: _Optional[int] = ..., class_b_ping_slot_dr: _Optional[int] = ..., class_b_ping_slot_freq: _Optional[int] = ..., class_c_timeout: _Optional[int] = ..., abp_rx1_delay: _Optional[int] = ..., abp_rx1_dr_offset: _Optional[int] = ..., abp_rx2_dr: _Optional[int] = ..., abp_rx2_freq: _Optional[int] = ..., tags: _Optional[_Mapping[str, str]] = ..., measurements: _Optional[_Mapping[str, Measurement]] = ..., auto_detect_measurements: bool = ..., region_config_id: _Optional[str] = ..., is_relay: bool = ..., is_relay_ed: bool = ..., relay_ed_relay_only: bool = ..., relay_enabled: bool = ..., relay_cad_periodicity: _Optional[_Union[CadPeriodicity, str]] = ..., relay_default_channel_index: _Optional[int] = ..., relay_second_channel_freq: _Optional[int] = ..., relay_second_channel_dr: _Optional[int] = ..., relay_second_channel_ack_offset: _Optional[_Union[SecondChAckOffset, str]] = ..., relay_ed_activation_mode: _Optional[_Union[RelayModeActivation, str]] = ..., relay_ed_smart_enable_level: _Optional[int] = ..., relay_ed_back_off: _Optional[int] = ..., relay_ed_uplink_limit_bucket_size: _Optional[int] = ..., relay_ed_uplink_limit_reload_rate: _Optional[int] = ..., relay_join_req_limit_reload_rate: _Optional[int] = ..., relay_notify_limit_reload_rate: _Optional[int] = ..., relay_global_uplink_limit_reload_rate: _Optional[int] = ..., relay_overall_limit_reload_rate: _Optional[int] = ..., relay_join_req_limit_bucket_size: _Optional[int] = ..., relay_notify_limit_bucket_size: _Optional[int] = ..., relay_global_uplink_limit_bucket_size: _Optional[int] = ..., relay_overall_limit_bucket_size: _Optional[int] = ...) -> None: ...
allow_roaming: bool
def __init__(self, id: _Optional[str] = ..., tenant_id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., mac_version: _Optional[_Union[_common_pb2.MacVersion, str]] = ..., reg_params_revision: _Optional[_Union[_common_pb2.RegParamsRevision, str]] = ..., adr_algorithm_id: _Optional[str] = ..., payload_codec_runtime: _Optional[_Union[CodecRuntime, str]] = ..., payload_codec_script: _Optional[str] = ..., flush_queue_on_activate: bool = ..., uplink_interval: _Optional[int] = ..., device_status_req_interval: _Optional[int] = ..., supports_otaa: bool = ..., supports_class_b: bool = ..., supports_class_c: bool = ..., class_b_timeout: _Optional[int] = ..., class_b_ping_slot_nb_k: _Optional[int] = ..., class_b_ping_slot_dr: _Optional[int] = ..., class_b_ping_slot_freq: _Optional[int] = ..., class_c_timeout: _Optional[int] = ..., abp_rx1_delay: _Optional[int] = ..., abp_rx1_dr_offset: _Optional[int] = ..., abp_rx2_dr: _Optional[int] = ..., abp_rx2_freq: _Optional[int] = ..., tags: _Optional[_Mapping[str, str]] = ..., measurements: _Optional[_Mapping[str, Measurement]] = ..., auto_detect_measurements: bool = ..., region_config_id: _Optional[str] = ..., is_relay: bool = ..., is_relay_ed: bool = ..., relay_ed_relay_only: bool = ..., relay_enabled: bool = ..., relay_cad_periodicity: _Optional[_Union[CadPeriodicity, str]] = ..., relay_default_channel_index: _Optional[int] = ..., relay_second_channel_freq: _Optional[int] = ..., relay_second_channel_dr: _Optional[int] = ..., relay_second_channel_ack_offset: _Optional[_Union[SecondChAckOffset, str]] = ..., relay_ed_activation_mode: _Optional[_Union[RelayModeActivation, str]] = ..., relay_ed_smart_enable_level: _Optional[int] = ..., relay_ed_back_off: _Optional[int] = ..., relay_ed_uplink_limit_bucket_size: _Optional[int] = ..., relay_ed_uplink_limit_reload_rate: _Optional[int] = ..., relay_join_req_limit_reload_rate: _Optional[int] = ..., relay_notify_limit_reload_rate: _Optional[int] = ..., relay_global_uplink_limit_reload_rate: _Optional[int] = ..., relay_overall_limit_reload_rate: _Optional[int] = ..., relay_join_req_limit_bucket_size: _Optional[int] = ..., relay_notify_limit_bucket_size: _Optional[int] = ..., relay_global_uplink_limit_bucket_size: _Optional[int] = ..., relay_overall_limit_bucket_size: _Optional[int] = ..., allow_roaming: bool = ...) -> None: ...
class Measurement(_message.Message):
__slots__ = ["name", "kind"]
__slots__ = ("name", "kind")
NAME_FIELD_NUMBER: _ClassVar[int]
KIND_FIELD_NUMBER: _ClassVar[int]
name: str
@ -202,7 +204,7 @@ class Measurement(_message.Message):
def __init__(self, name: _Optional[str] = ..., kind: _Optional[_Union[MeasurementKind, str]] = ...) -> None: ...
class DeviceProfileListItem(_message.Message):
__slots__ = ["id", "created_at", "updated_at", "name", "region", "mac_version", "reg_params_revision", "supports_otaa", "supports_class_b", "supports_class_c"]
__slots__ = ("id", "created_at", "updated_at", "name", "region", "mac_version", "reg_params_revision", "supports_otaa", "supports_class_b", "supports_class_c")
ID_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -226,25 +228,25 @@ class DeviceProfileListItem(_message.Message):
def __init__(self, id: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., name: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., mac_version: _Optional[_Union[_common_pb2.MacVersion, str]] = ..., reg_params_revision: _Optional[_Union[_common_pb2.RegParamsRevision, str]] = ..., supports_otaa: bool = ..., supports_class_b: bool = ..., supports_class_c: bool = ...) -> None: ...
class CreateDeviceProfileRequest(_message.Message):
__slots__ = ["device_profile"]
__slots__ = ("device_profile",)
DEVICE_PROFILE_FIELD_NUMBER: _ClassVar[int]
device_profile: DeviceProfile
def __init__(self, device_profile: _Optional[_Union[DeviceProfile, _Mapping]] = ...) -> None: ...
class CreateDeviceProfileResponse(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetDeviceProfileRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetDeviceProfileResponse(_message.Message):
__slots__ = ["device_profile", "created_at", "updated_at"]
__slots__ = ("device_profile", "created_at", "updated_at")
DEVICE_PROFILE_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -254,19 +256,19 @@ class GetDeviceProfileResponse(_message.Message):
def __init__(self, device_profile: _Optional[_Union[DeviceProfile, _Mapping]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
class UpdateDeviceProfileRequest(_message.Message):
__slots__ = ["device_profile"]
__slots__ = ("device_profile",)
DEVICE_PROFILE_FIELD_NUMBER: _ClassVar[int]
device_profile: DeviceProfile
def __init__(self, device_profile: _Optional[_Union[DeviceProfile, _Mapping]] = ...) -> None: ...
class DeleteDeviceProfileRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class ListDeviceProfilesRequest(_message.Message):
__slots__ = ["limit", "offset", "search", "tenant_id"]
__slots__ = ("limit", "offset", "search", "tenant_id")
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
SEARCH_FIELD_NUMBER: _ClassVar[int]
@ -278,7 +280,7 @@ class ListDeviceProfilesRequest(_message.Message):
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., search: _Optional[str] = ..., tenant_id: _Optional[str] = ...) -> None: ...
class ListDeviceProfilesResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -286,7 +288,7 @@ class ListDeviceProfilesResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[DeviceProfileListItem, _Mapping]]] = ...) -> None: ...
class ListDeviceProfileAdrAlgorithmsResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -294,7 +296,7 @@ class ListDeviceProfileAdrAlgorithmsResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[AdrAlgorithmListItem, _Mapping]]] = ...) -> None: ...
class AdrAlgorithmListItem(_message.Message):
__slots__ = ["id", "name"]
__slots__ = ("id", "name")
ID_FIELD_NUMBER: _ClassVar[int]
NAME_FIELD_NUMBER: _ClassVar[int]
id: str

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/api/device_profile_template.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -24,23 +25,22 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.api.device_profile_template_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\032DeviceProfileTemplateProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_DEVICEPROFILETEMPLATE_TAGSENTRY._options = None
_DEVICEPROFILETEMPLATE_TAGSENTRY._serialized_options = b'8\001'
_DEVICEPROFILETEMPLATE_MEASUREMENTSENTRY._options = None
_DEVICEPROFILETEMPLATE_MEASUREMENTSENTRY._serialized_options = b'8\001'
_DEVICEPROFILETEMPLATESERVICE.methods_by_name['Create']._options = None
_DEVICEPROFILETEMPLATESERVICE.methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\"\"\035/api/device-profile-templates:\001*'
_DEVICEPROFILETEMPLATESERVICE.methods_by_name['Get']._options = None
_DEVICEPROFILETEMPLATESERVICE.methods_by_name['Get']._serialized_options = b'\202\323\344\223\002$\022\"/api/device-profile-templates/{id}'
_DEVICEPROFILETEMPLATESERVICE.methods_by_name['Update']._options = None
_DEVICEPROFILETEMPLATESERVICE.methods_by_name['Update']._serialized_options = b'\202\323\344\223\002?\032:/api/device-profile-templates/{device_profile_template.id}:\001*'
_DEVICEPROFILETEMPLATESERVICE.methods_by_name['Delete']._options = None
_DEVICEPROFILETEMPLATESERVICE.methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002$*\"/api/device-profile-templates/{id}'
_DEVICEPROFILETEMPLATESERVICE.methods_by_name['List']._options = None
_DEVICEPROFILETEMPLATESERVICE.methods_by_name['List']._serialized_options = b'\202\323\344\223\002\037\022\035/api/device-profile-templates'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\021io.chirpstack.apiB\032DeviceProfileTemplateProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_globals['_DEVICEPROFILETEMPLATE_TAGSENTRY']._options = None
_globals['_DEVICEPROFILETEMPLATE_TAGSENTRY']._serialized_options = b'8\001'
_globals['_DEVICEPROFILETEMPLATE_MEASUREMENTSENTRY']._options = None
_globals['_DEVICEPROFILETEMPLATE_MEASUREMENTSENTRY']._serialized_options = b'8\001'
_globals['_DEVICEPROFILETEMPLATESERVICE'].methods_by_name['Create']._options = None
_globals['_DEVICEPROFILETEMPLATESERVICE'].methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\"\"\035/api/device-profile-templates:\001*'
_globals['_DEVICEPROFILETEMPLATESERVICE'].methods_by_name['Get']._options = None
_globals['_DEVICEPROFILETEMPLATESERVICE'].methods_by_name['Get']._serialized_options = b'\202\323\344\223\002$\022\"/api/device-profile-templates/{id}'
_globals['_DEVICEPROFILETEMPLATESERVICE'].methods_by_name['Update']._options = None
_globals['_DEVICEPROFILETEMPLATESERVICE'].methods_by_name['Update']._serialized_options = b'\202\323\344\223\002?\032:/api/device-profile-templates/{device_profile_template.id}:\001*'
_globals['_DEVICEPROFILETEMPLATESERVICE'].methods_by_name['Delete']._options = None
_globals['_DEVICEPROFILETEMPLATESERVICE'].methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002$*\"/api/device-profile-templates/{id}'
_globals['_DEVICEPROFILETEMPLATESERVICE'].methods_by_name['List']._options = None
_globals['_DEVICEPROFILETEMPLATESERVICE'].methods_by_name['List']._serialized_options = b'\202\323\344\223\002\037\022\035/api/device-profile-templates'
_globals['_DEVICEPROFILETEMPLATE']._serialized_start=227
_globals['_DEVICEPROFILETEMPLATE']._serialized_end=1241
_globals['_DEVICEPROFILETEMPLATE_TAGSENTRY']._serialized_start=1127

View File

@ -11,16 +11,16 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class DeviceProfileTemplate(_message.Message):
__slots__ = ["id", "name", "description", "vendor", "firmware", "region", "mac_version", "reg_params_revision", "adr_algorithm_id", "payload_codec_runtime", "payload_codec_script", "flush_queue_on_activate", "uplink_interval", "device_status_req_interval", "supports_otaa", "supports_class_b", "supports_class_c", "class_b_timeout", "class_b_ping_slot_nb_k", "class_b_ping_slot_dr", "class_b_ping_slot_freq", "class_c_timeout", "abp_rx1_delay", "abp_rx1_dr_offset", "abp_rx2_dr", "abp_rx2_freq", "tags", "measurements", "auto_detect_measurements"]
__slots__ = ("id", "name", "description", "vendor", "firmware", "region", "mac_version", "reg_params_revision", "adr_algorithm_id", "payload_codec_runtime", "payload_codec_script", "flush_queue_on_activate", "uplink_interval", "device_status_req_interval", "supports_otaa", "supports_class_b", "supports_class_c", "class_b_timeout", "class_b_ping_slot_nb_k", "class_b_ping_slot_dr", "class_b_ping_slot_freq", "class_c_timeout", "abp_rx1_delay", "abp_rx1_dr_offset", "abp_rx2_dr", "abp_rx2_freq", "tags", "measurements", "auto_detect_measurements")
class TagsEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: str
def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
class MeasurementsEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -87,7 +87,7 @@ class DeviceProfileTemplate(_message.Message):
def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., vendor: _Optional[str] = ..., firmware: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., mac_version: _Optional[_Union[_common_pb2.MacVersion, str]] = ..., reg_params_revision: _Optional[_Union[_common_pb2.RegParamsRevision, str]] = ..., adr_algorithm_id: _Optional[str] = ..., payload_codec_runtime: _Optional[_Union[_device_profile_pb2.CodecRuntime, str]] = ..., payload_codec_script: _Optional[str] = ..., flush_queue_on_activate: bool = ..., uplink_interval: _Optional[int] = ..., device_status_req_interval: _Optional[int] = ..., supports_otaa: bool = ..., supports_class_b: bool = ..., supports_class_c: bool = ..., class_b_timeout: _Optional[int] = ..., class_b_ping_slot_nb_k: _Optional[int] = ..., class_b_ping_slot_dr: _Optional[int] = ..., class_b_ping_slot_freq: _Optional[int] = ..., class_c_timeout: _Optional[int] = ..., abp_rx1_delay: _Optional[int] = ..., abp_rx1_dr_offset: _Optional[int] = ..., abp_rx2_dr: _Optional[int] = ..., abp_rx2_freq: _Optional[int] = ..., tags: _Optional[_Mapping[str, str]] = ..., measurements: _Optional[_Mapping[str, _device_profile_pb2.Measurement]] = ..., auto_detect_measurements: bool = ...) -> None: ...
class DeviceProfileTemplateListItem(_message.Message):
__slots__ = ["id", "created_at", "updated_at", "name", "vendor", "firmware", "region", "mac_version", "reg_params_revision", "supports_otaa", "supports_class_b", "supports_class_c"]
__slots__ = ("id", "created_at", "updated_at", "name", "vendor", "firmware", "region", "mac_version", "reg_params_revision", "supports_otaa", "supports_class_b", "supports_class_c")
ID_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -115,19 +115,19 @@ class DeviceProfileTemplateListItem(_message.Message):
def __init__(self, id: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., name: _Optional[str] = ..., vendor: _Optional[str] = ..., firmware: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., mac_version: _Optional[_Union[_common_pb2.MacVersion, str]] = ..., reg_params_revision: _Optional[_Union[_common_pb2.RegParamsRevision, str]] = ..., supports_otaa: bool = ..., supports_class_b: bool = ..., supports_class_c: bool = ...) -> None: ...
class CreateDeviceProfileTemplateRequest(_message.Message):
__slots__ = ["device_profile_template"]
__slots__ = ("device_profile_template",)
DEVICE_PROFILE_TEMPLATE_FIELD_NUMBER: _ClassVar[int]
device_profile_template: DeviceProfileTemplate
def __init__(self, device_profile_template: _Optional[_Union[DeviceProfileTemplate, _Mapping]] = ...) -> None: ...
class GetDeviceProfileTemplateRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetDeviceProfileTemplateResponse(_message.Message):
__slots__ = ["device_profile_template", "created_at", "updated_at"]
__slots__ = ("device_profile_template", "created_at", "updated_at")
DEVICE_PROFILE_TEMPLATE_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -137,19 +137,19 @@ class GetDeviceProfileTemplateResponse(_message.Message):
def __init__(self, device_profile_template: _Optional[_Union[DeviceProfileTemplate, _Mapping]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
class UpdateDeviceProfileTemplateRequest(_message.Message):
__slots__ = ["device_profile_template"]
__slots__ = ("device_profile_template",)
DEVICE_PROFILE_TEMPLATE_FIELD_NUMBER: _ClassVar[int]
device_profile_template: DeviceProfileTemplate
def __init__(self, device_profile_template: _Optional[_Union[DeviceProfileTemplate, _Mapping]] = ...) -> None: ...
class DeleteDeviceProfileTemplateRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class ListDeviceProfileTemplatesRequest(_message.Message):
__slots__ = ["limit", "offset"]
__slots__ = ("limit", "offset")
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
limit: int
@ -157,7 +157,7 @@ class ListDeviceProfileTemplatesRequest(_message.Message):
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ...) -> None: ...
class ListDeviceProfileTemplatesResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/api/gateway.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -23,29 +24,28 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.api.gateway_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\014GatewayProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_GATEWAY_TAGSENTRY._options = None
_GATEWAY_TAGSENTRY._serialized_options = b'8\001'
_GATEWAY_METADATAENTRY._options = None
_GATEWAY_METADATAENTRY._serialized_options = b'8\001'
_GATEWAYLISTITEM_PROPERTIESENTRY._options = None
_GATEWAYLISTITEM_PROPERTIESENTRY._serialized_options = b'8\001'
_GATEWAYSERVICE.methods_by_name['Create']._options = None
_GATEWAYSERVICE.methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\022\"\r/api/gateways:\001*'
_GATEWAYSERVICE.methods_by_name['Get']._options = None
_GATEWAYSERVICE.methods_by_name['Get']._serialized_options = b'\202\323\344\223\002\034\022\032/api/gateways/{gateway_id}'
_GATEWAYSERVICE.methods_by_name['Update']._options = None
_GATEWAYSERVICE.methods_by_name['Update']._serialized_options = b'\202\323\344\223\002\'\032\"/api/gateways/{gateway.gateway_id}:\001*'
_GATEWAYSERVICE.methods_by_name['Delete']._options = None
_GATEWAYSERVICE.methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002\034*\032/api/gateways/{gateway_id}'
_GATEWAYSERVICE.methods_by_name['List']._options = None
_GATEWAYSERVICE.methods_by_name['List']._serialized_options = b'\202\323\344\223\002\017\022\r/api/gateways'
_GATEWAYSERVICE.methods_by_name['GenerateClientCertificate']._options = None
_GATEWAYSERVICE.methods_by_name['GenerateClientCertificate']._serialized_options = b'\202\323\344\223\0021\"//api/gateways/{gateway_id}/generate-certificate'
_GATEWAYSERVICE.methods_by_name['GetMetrics']._options = None
_GATEWAYSERVICE.methods_by_name['GetMetrics']._serialized_options = b'\202\323\344\223\002$\022\"/api/gateways/{gateway_id}/metrics'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\021io.chirpstack.apiB\014GatewayProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_globals['_GATEWAY_TAGSENTRY']._options = None
_globals['_GATEWAY_TAGSENTRY']._serialized_options = b'8\001'
_globals['_GATEWAY_METADATAENTRY']._options = None
_globals['_GATEWAY_METADATAENTRY']._serialized_options = b'8\001'
_globals['_GATEWAYLISTITEM_PROPERTIESENTRY']._options = None
_globals['_GATEWAYLISTITEM_PROPERTIESENTRY']._serialized_options = b'8\001'
_globals['_GATEWAYSERVICE'].methods_by_name['Create']._options = None
_globals['_GATEWAYSERVICE'].methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\022\"\r/api/gateways:\001*'
_globals['_GATEWAYSERVICE'].methods_by_name['Get']._options = None
_globals['_GATEWAYSERVICE'].methods_by_name['Get']._serialized_options = b'\202\323\344\223\002\034\022\032/api/gateways/{gateway_id}'
_globals['_GATEWAYSERVICE'].methods_by_name['Update']._options = None
_globals['_GATEWAYSERVICE'].methods_by_name['Update']._serialized_options = b'\202\323\344\223\002\'\032\"/api/gateways/{gateway.gateway_id}:\001*'
_globals['_GATEWAYSERVICE'].methods_by_name['Delete']._options = None
_globals['_GATEWAYSERVICE'].methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002\034*\032/api/gateways/{gateway_id}'
_globals['_GATEWAYSERVICE'].methods_by_name['List']._options = None
_globals['_GATEWAYSERVICE'].methods_by_name['List']._serialized_options = b'\202\323\344\223\002\017\022\r/api/gateways'
_globals['_GATEWAYSERVICE'].methods_by_name['GenerateClientCertificate']._options = None
_globals['_GATEWAYSERVICE'].methods_by_name['GenerateClientCertificate']._serialized_options = b'\202\323\344\223\0021\"//api/gateways/{gateway_id}/generate-certificate'
_globals['_GATEWAYSERVICE'].methods_by_name['GetMetrics']._options = None
_globals['_GATEWAYSERVICE'].methods_by_name['GetMetrics']._serialized_options = b'\202\323\344\223\002$\022\"/api/gateways/{gateway_id}/metrics'
_globals['_GATEWAYSTATE']._serialized_start=2215
_globals['_GATEWAYSTATE']._serialized_end=2270
_globals['_GATEWAY']._serialized_start=170

View File

@ -11,7 +11,7 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class GatewayState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
NEVER_SEEN: _ClassVar[GatewayState]
ONLINE: _ClassVar[GatewayState]
OFFLINE: _ClassVar[GatewayState]
@ -20,16 +20,16 @@ ONLINE: GatewayState
OFFLINE: GatewayState
class Gateway(_message.Message):
__slots__ = ["gateway_id", "name", "description", "location", "tenant_id", "tags", "metadata", "stats_interval"]
__slots__ = ("gateway_id", "name", "description", "location", "tenant_id", "tags", "metadata", "stats_interval")
class TagsEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: str
def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
class MetadataEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -54,9 +54,9 @@ class Gateway(_message.Message):
def __init__(self, gateway_id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., location: _Optional[_Union[_common_pb2.Location, _Mapping]] = ..., tenant_id: _Optional[str] = ..., tags: _Optional[_Mapping[str, str]] = ..., metadata: _Optional[_Mapping[str, str]] = ..., stats_interval: _Optional[int] = ...) -> None: ...
class GatewayListItem(_message.Message):
__slots__ = ["tenant_id", "gateway_id", "name", "description", "location", "properties", "created_at", "updated_at", "last_seen_at", "state"]
__slots__ = ("tenant_id", "gateway_id", "name", "description", "location", "properties", "created_at", "updated_at", "last_seen_at", "state")
class PropertiesEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -85,19 +85,19 @@ class GatewayListItem(_message.Message):
def __init__(self, tenant_id: _Optional[str] = ..., gateway_id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., location: _Optional[_Union[_common_pb2.Location, _Mapping]] = ..., properties: _Optional[_Mapping[str, str]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., last_seen_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., state: _Optional[_Union[GatewayState, str]] = ...) -> None: ...
class CreateGatewayRequest(_message.Message):
__slots__ = ["gateway"]
__slots__ = ("gateway",)
GATEWAY_FIELD_NUMBER: _ClassVar[int]
gateway: Gateway
def __init__(self, gateway: _Optional[_Union[Gateway, _Mapping]] = ...) -> None: ...
class GetGatewayRequest(_message.Message):
__slots__ = ["gateway_id"]
__slots__ = ("gateway_id",)
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
gateway_id: str
def __init__(self, gateway_id: _Optional[str] = ...) -> None: ...
class GetGatewayResponse(_message.Message):
__slots__ = ["gateway", "created_at", "updated_at", "last_seen_at"]
__slots__ = ("gateway", "created_at", "updated_at", "last_seen_at")
GATEWAY_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -109,19 +109,19 @@ class GetGatewayResponse(_message.Message):
def __init__(self, gateway: _Optional[_Union[Gateway, _Mapping]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., last_seen_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
class UpdateGatewayRequest(_message.Message):
__slots__ = ["gateway"]
__slots__ = ("gateway",)
GATEWAY_FIELD_NUMBER: _ClassVar[int]
gateway: Gateway
def __init__(self, gateway: _Optional[_Union[Gateway, _Mapping]] = ...) -> None: ...
class DeleteGatewayRequest(_message.Message):
__slots__ = ["gateway_id"]
__slots__ = ("gateway_id",)
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
gateway_id: str
def __init__(self, gateway_id: _Optional[str] = ...) -> None: ...
class ListGatewaysRequest(_message.Message):
__slots__ = ["limit", "offset", "search", "tenant_id", "multicast_group_id"]
__slots__ = ("limit", "offset", "search", "tenant_id", "multicast_group_id")
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
SEARCH_FIELD_NUMBER: _ClassVar[int]
@ -135,7 +135,7 @@ class ListGatewaysRequest(_message.Message):
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., search: _Optional[str] = ..., tenant_id: _Optional[str] = ..., multicast_group_id: _Optional[str] = ...) -> None: ...
class ListGatewaysResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -143,13 +143,13 @@ class ListGatewaysResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[GatewayListItem, _Mapping]]] = ...) -> None: ...
class GenerateGatewayClientCertificateRequest(_message.Message):
__slots__ = ["gateway_id"]
__slots__ = ("gateway_id",)
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
gateway_id: str
def __init__(self, gateway_id: _Optional[str] = ...) -> None: ...
class GenerateGatewayClientCertificateResponse(_message.Message):
__slots__ = ["tls_cert", "tls_key", "ca_cert", "expires_at"]
__slots__ = ("tls_cert", "tls_key", "ca_cert", "expires_at")
TLS_CERT_FIELD_NUMBER: _ClassVar[int]
TLS_KEY_FIELD_NUMBER: _ClassVar[int]
CA_CERT_FIELD_NUMBER: _ClassVar[int]
@ -161,7 +161,7 @@ class GenerateGatewayClientCertificateResponse(_message.Message):
def __init__(self, tls_cert: _Optional[str] = ..., tls_key: _Optional[str] = ..., ca_cert: _Optional[str] = ..., expires_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
class GetGatewayMetricsRequest(_message.Message):
__slots__ = ["gateway_id", "start", "end", "aggregation"]
__slots__ = ("gateway_id", "start", "end", "aggregation")
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
START_FIELD_NUMBER: _ClassVar[int]
END_FIELD_NUMBER: _ClassVar[int]
@ -173,7 +173,7 @@ class GetGatewayMetricsRequest(_message.Message):
def __init__(self, gateway_id: _Optional[str] = ..., start: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., end: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., aggregation: _Optional[_Union[_common_pb2.Aggregation, str]] = ...) -> None: ...
class GetGatewayMetricsResponse(_message.Message):
__slots__ = ["rx_packets", "tx_packets", "tx_packets_per_freq", "rx_packets_per_freq", "tx_packets_per_dr", "rx_packets_per_dr", "tx_packets_per_status"]
__slots__ = ("rx_packets", "tx_packets", "tx_packets_per_freq", "rx_packets_per_freq", "tx_packets_per_dr", "rx_packets_per_dr", "tx_packets_per_status")
RX_PACKETS_FIELD_NUMBER: _ClassVar[int]
TX_PACKETS_FIELD_NUMBER: _ClassVar[int]
TX_PACKETS_PER_FREQ_FIELD_NUMBER: _ClassVar[int]

File diff suppressed because one or more lines are too long

View File

@ -10,7 +10,7 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class ApiKey(_message.Message):
__slots__ = ["id", "name", "is_admin", "tenant_id"]
__slots__ = ("id", "name", "is_admin", "tenant_id")
ID_FIELD_NUMBER: _ClassVar[int]
NAME_FIELD_NUMBER: _ClassVar[int]
IS_ADMIN_FIELD_NUMBER: _ClassVar[int]
@ -22,13 +22,13 @@ class ApiKey(_message.Message):
def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., is_admin: bool = ..., tenant_id: _Optional[str] = ...) -> None: ...
class CreateApiKeyRequest(_message.Message):
__slots__ = ["api_key"]
__slots__ = ("api_key",)
API_KEY_FIELD_NUMBER: _ClassVar[int]
api_key: ApiKey
def __init__(self, api_key: _Optional[_Union[ApiKey, _Mapping]] = ...) -> None: ...
class CreateApiKeyResponse(_message.Message):
__slots__ = ["id", "token"]
__slots__ = ("id", "token")
ID_FIELD_NUMBER: _ClassVar[int]
TOKEN_FIELD_NUMBER: _ClassVar[int]
id: str
@ -36,13 +36,13 @@ class CreateApiKeyResponse(_message.Message):
def __init__(self, id: _Optional[str] = ..., token: _Optional[str] = ...) -> None: ...
class DeleteApiKeyRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class ListApiKeysRequest(_message.Message):
__slots__ = ["limit", "offset", "is_admin", "tenant_id"]
__slots__ = ("limit", "offset", "is_admin", "tenant_id")
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
IS_ADMIN_FIELD_NUMBER: _ClassVar[int]
@ -54,7 +54,7 @@ class ListApiKeysRequest(_message.Message):
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., is_admin: bool = ..., tenant_id: _Optional[str] = ...) -> None: ...
class ListApiKeysResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -62,7 +62,7 @@ class ListApiKeysResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[ApiKey, _Mapping]]] = ...) -> None: ...
class UserTenantLink(_message.Message):
__slots__ = ["created_at", "updated_at", "tenant_id", "is_admin", "is_device_admin", "is_gateway_admin"]
__slots__ = ("created_at", "updated_at", "tenant_id", "is_admin", "is_device_admin", "is_gateway_admin")
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
TENANT_ID_FIELD_NUMBER: _ClassVar[int]
@ -78,7 +78,7 @@ class UserTenantLink(_message.Message):
def __init__(self, created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., tenant_id: _Optional[str] = ..., is_admin: bool = ..., is_device_admin: bool = ..., is_gateway_admin: bool = ...) -> None: ...
class LoginRequest(_message.Message):
__slots__ = ["email", "password"]
__slots__ = ("email", "password")
EMAIL_FIELD_NUMBER: _ClassVar[int]
PASSWORD_FIELD_NUMBER: _ClassVar[int]
email: str
@ -86,13 +86,13 @@ class LoginRequest(_message.Message):
def __init__(self, email: _Optional[str] = ..., password: _Optional[str] = ...) -> None: ...
class LoginResponse(_message.Message):
__slots__ = ["jwt"]
__slots__ = ("jwt",)
JWT_FIELD_NUMBER: _ClassVar[int]
jwt: str
def __init__(self, jwt: _Optional[str] = ...) -> None: ...
class ProfileResponse(_message.Message):
__slots__ = ["user", "tenants"]
__slots__ = ("user", "tenants")
USER_FIELD_NUMBER: _ClassVar[int]
TENANTS_FIELD_NUMBER: _ClassVar[int]
user: _user_pb2.User
@ -100,7 +100,7 @@ class ProfileResponse(_message.Message):
def __init__(self, user: _Optional[_Union[_user_pb2.User, _Mapping]] = ..., tenants: _Optional[_Iterable[_Union[UserTenantLink, _Mapping]]] = ...) -> None: ...
class GlobalSearchRequest(_message.Message):
__slots__ = ["search", "limit", "offset"]
__slots__ = ("search", "limit", "offset")
SEARCH_FIELD_NUMBER: _ClassVar[int]
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
@ -110,13 +110,13 @@ class GlobalSearchRequest(_message.Message):
def __init__(self, search: _Optional[str] = ..., limit: _Optional[int] = ..., offset: _Optional[int] = ...) -> None: ...
class GlobalSearchResponse(_message.Message):
__slots__ = ["result"]
__slots__ = ("result",)
RESULT_FIELD_NUMBER: _ClassVar[int]
result: _containers.RepeatedCompositeFieldContainer[GlobalSearchResult]
def __init__(self, result: _Optional[_Iterable[_Union[GlobalSearchResult, _Mapping]]] = ...) -> None: ...
class GlobalSearchResult(_message.Message):
__slots__ = ["kind", "score", "tenant_id", "tenant_name", "application_id", "application_name", "device_dev_eui", "device_name", "gateway_id", "gateway_name"]
__slots__ = ("kind", "score", "tenant_id", "tenant_name", "application_id", "application_name", "device_dev_eui", "device_name", "gateway_id", "gateway_name")
KIND_FIELD_NUMBER: _ClassVar[int]
SCORE_FIELD_NUMBER: _ClassVar[int]
TENANT_ID_FIELD_NUMBER: _ClassVar[int]
@ -140,25 +140,43 @@ class GlobalSearchResult(_message.Message):
def __init__(self, kind: _Optional[str] = ..., score: _Optional[float] = ..., tenant_id: _Optional[str] = ..., tenant_name: _Optional[str] = ..., application_id: _Optional[str] = ..., application_name: _Optional[str] = ..., device_dev_eui: _Optional[str] = ..., device_name: _Optional[str] = ..., gateway_id: _Optional[str] = ..., gateway_name: _Optional[str] = ...) -> None: ...
class SettingsResponse(_message.Message):
__slots__ = ["openid_connect"]
__slots__ = ("openid_connect", "oauth2")
OPENID_CONNECT_FIELD_NUMBER: _ClassVar[int]
OAUTH2_FIELD_NUMBER: _ClassVar[int]
openid_connect: OpenIdConnect
def __init__(self, openid_connect: _Optional[_Union[OpenIdConnect, _Mapping]] = ...) -> None: ...
oauth2: OAuth2
def __init__(self, openid_connect: _Optional[_Union[OpenIdConnect, _Mapping]] = ..., oauth2: _Optional[_Union[OAuth2, _Mapping]] = ...) -> None: ...
class OpenIdConnect(_message.Message):
__slots__ = ["enabled", "login_url", "login_label", "logout_url"]
__slots__ = ("enabled", "login_url", "login_label", "logout_url", "login_redirect")
ENABLED_FIELD_NUMBER: _ClassVar[int]
LOGIN_URL_FIELD_NUMBER: _ClassVar[int]
LOGIN_LABEL_FIELD_NUMBER: _ClassVar[int]
LOGOUT_URL_FIELD_NUMBER: _ClassVar[int]
LOGIN_REDIRECT_FIELD_NUMBER: _ClassVar[int]
enabled: bool
login_url: str
login_label: str
logout_url: str
def __init__(self, enabled: bool = ..., login_url: _Optional[str] = ..., login_label: _Optional[str] = ..., logout_url: _Optional[str] = ...) -> None: ...
login_redirect: bool
def __init__(self, enabled: bool = ..., login_url: _Optional[str] = ..., login_label: _Optional[str] = ..., logout_url: _Optional[str] = ..., login_redirect: bool = ...) -> None: ...
class OAuth2(_message.Message):
__slots__ = ("enabled", "login_url", "login_label", "logout_url", "login_redirect")
ENABLED_FIELD_NUMBER: _ClassVar[int]
LOGIN_URL_FIELD_NUMBER: _ClassVar[int]
LOGIN_LABEL_FIELD_NUMBER: _ClassVar[int]
LOGOUT_URL_FIELD_NUMBER: _ClassVar[int]
LOGIN_REDIRECT_FIELD_NUMBER: _ClassVar[int]
enabled: bool
login_url: str
login_label: str
logout_url: str
login_redirect: bool
def __init__(self, enabled: bool = ..., login_url: _Optional[str] = ..., login_label: _Optional[str] = ..., logout_url: _Optional[str] = ..., login_redirect: bool = ...) -> None: ...
class OpenIdConnectLoginRequest(_message.Message):
__slots__ = ["code", "state"]
__slots__ = ("code", "state")
CODE_FIELD_NUMBER: _ClassVar[int]
STATE_FIELD_NUMBER: _ClassVar[int]
code: str
@ -166,21 +184,35 @@ class OpenIdConnectLoginRequest(_message.Message):
def __init__(self, code: _Optional[str] = ..., state: _Optional[str] = ...) -> None: ...
class OpenIdConnectLoginResponse(_message.Message):
__slots__ = ["token"]
__slots__ = ("token",)
TOKEN_FIELD_NUMBER: _ClassVar[int]
token: str
def __init__(self, token: _Optional[str] = ...) -> None: ...
class OAuth2LoginRequest(_message.Message):
__slots__ = ("code", "state")
CODE_FIELD_NUMBER: _ClassVar[int]
STATE_FIELD_NUMBER: _ClassVar[int]
code: str
state: str
def __init__(self, code: _Optional[str] = ..., state: _Optional[str] = ...) -> None: ...
class OAuth2LoginResponse(_message.Message):
__slots__ = ("token",)
TOKEN_FIELD_NUMBER: _ClassVar[int]
token: str
def __init__(self, token: _Optional[str] = ...) -> None: ...
class GetDevicesSummaryRequest(_message.Message):
__slots__ = ["tenant_id"]
__slots__ = ("tenant_id",)
TENANT_ID_FIELD_NUMBER: _ClassVar[int]
tenant_id: str
def __init__(self, tenant_id: _Optional[str] = ...) -> None: ...
class GetDevicesSummaryResponse(_message.Message):
__slots__ = ["active_count", "inactive_count", "dr_count", "never_seen_count"]
__slots__ = ("active_count", "inactive_count", "dr_count", "never_seen_count")
class DrCountEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: int
@ -197,13 +229,13 @@ class GetDevicesSummaryResponse(_message.Message):
def __init__(self, active_count: _Optional[int] = ..., inactive_count: _Optional[int] = ..., dr_count: _Optional[_Mapping[int, int]] = ..., never_seen_count: _Optional[int] = ...) -> None: ...
class GetGatewaysSummaryRequest(_message.Message):
__slots__ = ["tenant_id"]
__slots__ = ("tenant_id",)
TENANT_ID_FIELD_NUMBER: _ClassVar[int]
tenant_id: str
def __init__(self, tenant_id: _Optional[str] = ...) -> None: ...
class GetGatewaysSummaryResponse(_message.Message):
__slots__ = ["online_count", "offline_count", "never_seen_count"]
__slots__ = ("online_count", "offline_count", "never_seen_count")
ONLINE_COUNT_FIELD_NUMBER: _ClassVar[int]
OFFLINE_COUNT_FIELD_NUMBER: _ClassVar[int]
NEVER_SEEN_COUNT_FIELD_NUMBER: _ClassVar[int]
@ -213,9 +245,9 @@ class GetGatewaysSummaryResponse(_message.Message):
def __init__(self, online_count: _Optional[int] = ..., offline_count: _Optional[int] = ..., never_seen_count: _Optional[int] = ...) -> None: ...
class LogItem(_message.Message):
__slots__ = ["id", "time", "description", "body", "properties"]
__slots__ = ("id", "time", "description", "body", "properties")
class PropertiesEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -234,31 +266,31 @@ class LogItem(_message.Message):
def __init__(self, id: _Optional[str] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., description: _Optional[str] = ..., body: _Optional[str] = ..., properties: _Optional[_Mapping[str, str]] = ...) -> None: ...
class StreamGatewayFramesRequest(_message.Message):
__slots__ = ["gateway_id"]
__slots__ = ("gateway_id",)
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
gateway_id: str
def __init__(self, gateway_id: _Optional[str] = ...) -> None: ...
class StreamDeviceFramesRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class StreamDeviceEventsRequest(_message.Message):
__slots__ = ["dev_eui"]
__slots__ = ("dev_eui",)
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
def __init__(self, dev_eui: _Optional[str] = ...) -> None: ...
class ListRegionsResponse(_message.Message):
__slots__ = ["regions"]
__slots__ = ("regions",)
REGIONS_FIELD_NUMBER: _ClassVar[int]
regions: _containers.RepeatedCompositeFieldContainer[RegionListItem]
def __init__(self, regions: _Optional[_Iterable[_Union[RegionListItem, _Mapping]]] = ...) -> None: ...
class RegionListItem(_message.Message):
__slots__ = ["id", "region", "description"]
__slots__ = ("id", "region", "description")
ID_FIELD_NUMBER: _ClassVar[int]
REGION_FIELD_NUMBER: _ClassVar[int]
DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
@ -268,13 +300,13 @@ class RegionListItem(_message.Message):
def __init__(self, id: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., description: _Optional[str] = ...) -> None: ...
class GetRegionRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetRegionResponse(_message.Message):
__slots__ = ["id", "region", "user_info", "uplink_channels", "rx1_delay", "rx1_dr_offset", "rx2_dr", "rx2_frequency", "class_b_ping_slot_dr", "class_b_ping_slot_frequency", "description"]
__slots__ = ("id", "region", "user_info", "uplink_channels", "rx1_delay", "rx1_dr_offset", "rx2_dr", "rx2_frequency", "class_b_ping_slot_dr", "class_b_ping_slot_frequency", "description")
ID_FIELD_NUMBER: _ClassVar[int]
REGION_FIELD_NUMBER: _ClassVar[int]
USER_INFO_FIELD_NUMBER: _ClassVar[int]
@ -300,7 +332,7 @@ class GetRegionResponse(_message.Message):
def __init__(self, id: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., user_info: _Optional[str] = ..., uplink_channels: _Optional[_Iterable[_Union[RegionChannel, _Mapping]]] = ..., rx1_delay: _Optional[int] = ..., rx1_dr_offset: _Optional[int] = ..., rx2_dr: _Optional[int] = ..., rx2_frequency: _Optional[int] = ..., class_b_ping_slot_dr: _Optional[int] = ..., class_b_ping_slot_frequency: _Optional[int] = ..., description: _Optional[str] = ...) -> None: ...
class RegionChannel(_message.Message):
__slots__ = ["frequency", "dr_min", "dr_max"]
__slots__ = ("frequency", "dr_min", "dr_max")
FREQUENCY_FIELD_NUMBER: _ClassVar[int]
DR_MIN_FIELD_NUMBER: _ClassVar[int]
DR_MAX_FIELD_NUMBER: _ClassVar[int]

View File

@ -56,6 +56,11 @@ class InternalServiceStub(object):
request_serializer=chirpstack__api_dot_api_dot_internal__pb2.OpenIdConnectLoginRequest.SerializeToString,
response_deserializer=chirpstack__api_dot_api_dot_internal__pb2.OpenIdConnectLoginResponse.FromString,
)
self.OAuth2Login = channel.unary_unary(
'/api.InternalService/OAuth2Login',
request_serializer=chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginRequest.SerializeToString,
response_deserializer=chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginResponse.FromString,
)
self.GetDevicesSummary = channel.unary_unary(
'/api.InternalService/GetDevicesSummary',
request_serializer=chirpstack__api_dot_api_dot_internal__pb2.GetDevicesSummaryRequest.SerializeToString,
@ -153,6 +158,13 @@ class InternalServiceServicer(object):
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def OAuth2Login(self, request, context):
"""OAuth2 login.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def GetDevicesSummary(self, request, context):
"""GetDevicesSummary returns an aggregated summary of the devices.
"""
@ -245,6 +257,11 @@ def add_InternalServiceServicer_to_server(servicer, server):
request_deserializer=chirpstack__api_dot_api_dot_internal__pb2.OpenIdConnectLoginRequest.FromString,
response_serializer=chirpstack__api_dot_api_dot_internal__pb2.OpenIdConnectLoginResponse.SerializeToString,
),
'OAuth2Login': grpc.unary_unary_rpc_method_handler(
servicer.OAuth2Login,
request_deserializer=chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginRequest.FromString,
response_serializer=chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginResponse.SerializeToString,
),
'GetDevicesSummary': grpc.unary_unary_rpc_method_handler(
servicer.GetDevicesSummary,
request_deserializer=chirpstack__api_dot_api_dot_internal__pb2.GetDevicesSummaryRequest.FromString,
@ -427,6 +444,23 @@ class InternalService(object):
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def OAuth2Login(request,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/api.InternalService/OAuth2Login',
chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginRequest.SerializeToString,
chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def GetDevicesSummary(request,
target,

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/api/multicast_group.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -23,33 +24,32 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.api.multicast_group_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\023MulticastGroupProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_MULTICASTGROUPSERVICE.methods_by_name['Create']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\032\"\025/api/multicast-groups:\001*'
_MULTICASTGROUPSERVICE.methods_by_name['Get']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['Get']._serialized_options = b'\202\323\344\223\002\034\022\032/api/multicast-groups/{id}'
_MULTICASTGROUPSERVICE.methods_by_name['Update']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['Update']._serialized_options = b'\202\323\344\223\002/\032*/api/multicast-groups/{multicast_group.id}:\001*'
_MULTICASTGROUPSERVICE.methods_by_name['Delete']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002\034*\032/api/multicast-groups/{id}'
_MULTICASTGROUPSERVICE.methods_by_name['List']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['List']._serialized_options = b'\202\323\344\223\002\027\022\025/api/multicast-groups'
_MULTICASTGROUPSERVICE.methods_by_name['AddDevice']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['AddDevice']._serialized_options = b'\202\323\344\223\0027\"2/api/multicast-groups/{multicast_group_id}/devices:\001*'
_MULTICASTGROUPSERVICE.methods_by_name['RemoveDevice']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['RemoveDevice']._serialized_options = b'\202\323\344\223\002>*</api/multicast-groups/{multicast_group_id}/devices/{dev_eui}'
_MULTICASTGROUPSERVICE.methods_by_name['AddGateway']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['AddGateway']._serialized_options = b'\202\323\344\223\0028\"3/api/multicast-groups/{multicast_group_id}/gateways:\001*'
_MULTICASTGROUPSERVICE.methods_by_name['RemoveGateway']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['RemoveGateway']._serialized_options = b'\202\323\344\223\002B*@/api/multicast-groups/{multicast_group_id}/gateways/{gateway_id}'
_MULTICASTGROUPSERVICE.methods_by_name['Enqueue']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['Enqueue']._serialized_options = b'\202\323\344\223\002@\";/api/multicast-groups/{queue_item.multicast_group_id}/queue:\001*'
_MULTICASTGROUPSERVICE.methods_by_name['FlushQueue']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['FlushQueue']._serialized_options = b'\202\323\344\223\0022*0/api/multicast-groups/{multicast_group_id}/queue'
_MULTICASTGROUPSERVICE.methods_by_name['ListQueue']._options = None
_MULTICASTGROUPSERVICE.methods_by_name['ListQueue']._serialized_options = b'\202\323\344\223\0022\0220/api/multicast-groups/{multicast_group_id}/queue'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\021io.chirpstack.apiB\023MulticastGroupProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['Create']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\032\"\025/api/multicast-groups:\001*'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['Get']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['Get']._serialized_options = b'\202\323\344\223\002\034\022\032/api/multicast-groups/{id}'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['Update']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['Update']._serialized_options = b'\202\323\344\223\002/\032*/api/multicast-groups/{multicast_group.id}:\001*'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['Delete']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002\034*\032/api/multicast-groups/{id}'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['List']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['List']._serialized_options = b'\202\323\344\223\002\027\022\025/api/multicast-groups'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['AddDevice']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['AddDevice']._serialized_options = b'\202\323\344\223\0027\"2/api/multicast-groups/{multicast_group_id}/devices:\001*'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['RemoveDevice']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['RemoveDevice']._serialized_options = b'\202\323\344\223\002>*</api/multicast-groups/{multicast_group_id}/devices/{dev_eui}'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['AddGateway']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['AddGateway']._serialized_options = b'\202\323\344\223\0028\"3/api/multicast-groups/{multicast_group_id}/gateways:\001*'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['RemoveGateway']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['RemoveGateway']._serialized_options = b'\202\323\344\223\002B*@/api/multicast-groups/{multicast_group_id}/gateways/{gateway_id}'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['Enqueue']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['Enqueue']._serialized_options = b'\202\323\344\223\002@\";/api/multicast-groups/{queue_item.multicast_group_id}/queue:\001*'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['FlushQueue']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['FlushQueue']._serialized_options = b'\202\323\344\223\0022*0/api/multicast-groups/{multicast_group_id}/queue'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['ListQueue']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['ListQueue']._serialized_options = b'\202\323\344\223\0022\0220/api/multicast-groups/{multicast_group_id}/queue'
_globals['_MULTICASTGROUPTYPE']._serialized_start=2204
_globals['_MULTICASTGROUPTYPE']._serialized_end=2250
_globals['_MULTICASTGROUPSCHEDULINGTYPE']._serialized_start=2252

View File

@ -11,12 +11,12 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class MulticastGroupType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
CLASS_C: _ClassVar[MulticastGroupType]
CLASS_B: _ClassVar[MulticastGroupType]
class MulticastGroupSchedulingType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
DELAY: _ClassVar[MulticastGroupSchedulingType]
GPS_TIME: _ClassVar[MulticastGroupSchedulingType]
CLASS_C: MulticastGroupType
@ -25,7 +25,7 @@ DELAY: MulticastGroupSchedulingType
GPS_TIME: MulticastGroupSchedulingType
class MulticastGroup(_message.Message):
__slots__ = ["id", "name", "application_id", "region", "mc_addr", "mc_nwk_s_key", "mc_app_s_key", "f_cnt", "group_type", "dr", "frequency", "class_b_ping_slot_period", "class_c_scheduling_type"]
__slots__ = ("id", "name", "application_id", "region", "mc_addr", "mc_nwk_s_key", "mc_app_s_key", "f_cnt", "group_type", "dr", "frequency", "class_b_ping_slot_period", "class_c_scheduling_type")
ID_FIELD_NUMBER: _ClassVar[int]
NAME_FIELD_NUMBER: _ClassVar[int]
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
@ -55,7 +55,7 @@ class MulticastGroup(_message.Message):
def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., application_id: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., mc_addr: _Optional[str] = ..., mc_nwk_s_key: _Optional[str] = ..., mc_app_s_key: _Optional[str] = ..., f_cnt: _Optional[int] = ..., group_type: _Optional[_Union[MulticastGroupType, str]] = ..., dr: _Optional[int] = ..., frequency: _Optional[int] = ..., class_b_ping_slot_period: _Optional[int] = ..., class_c_scheduling_type: _Optional[_Union[MulticastGroupSchedulingType, str]] = ...) -> None: ...
class MulticastGroupListItem(_message.Message):
__slots__ = ["id", "created_at", "updated_at", "name", "region", "group_type"]
__slots__ = ("id", "created_at", "updated_at", "name", "region", "group_type")
ID_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -71,25 +71,25 @@ class MulticastGroupListItem(_message.Message):
def __init__(self, id: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., name: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., group_type: _Optional[_Union[MulticastGroupType, str]] = ...) -> None: ...
class CreateMulticastGroupRequest(_message.Message):
__slots__ = ["multicast_group"]
__slots__ = ("multicast_group",)
MULTICAST_GROUP_FIELD_NUMBER: _ClassVar[int]
multicast_group: MulticastGroup
def __init__(self, multicast_group: _Optional[_Union[MulticastGroup, _Mapping]] = ...) -> None: ...
class CreateMulticastGroupResponse(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetMulticastGroupRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetMulticastGroupResponse(_message.Message):
__slots__ = ["multicast_group", "created_at", "updated_at"]
__slots__ = ("multicast_group", "created_at", "updated_at")
MULTICAST_GROUP_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -99,19 +99,19 @@ class GetMulticastGroupResponse(_message.Message):
def __init__(self, multicast_group: _Optional[_Union[MulticastGroup, _Mapping]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
class UpdateMulticastGroupRequest(_message.Message):
__slots__ = ["multicast_group"]
__slots__ = ("multicast_group",)
MULTICAST_GROUP_FIELD_NUMBER: _ClassVar[int]
multicast_group: MulticastGroup
def __init__(self, multicast_group: _Optional[_Union[MulticastGroup, _Mapping]] = ...) -> None: ...
class DeleteMulticastGroupRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class ListMulticastGroupsRequest(_message.Message):
__slots__ = ["limit", "offset", "search", "application_id"]
__slots__ = ("limit", "offset", "search", "application_id")
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
SEARCH_FIELD_NUMBER: _ClassVar[int]
@ -123,7 +123,7 @@ class ListMulticastGroupsRequest(_message.Message):
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., search: _Optional[str] = ..., application_id: _Optional[str] = ...) -> None: ...
class ListMulticastGroupsResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -131,7 +131,7 @@ class ListMulticastGroupsResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[MulticastGroupListItem, _Mapping]]] = ...) -> None: ...
class AddDeviceToMulticastGroupRequest(_message.Message):
__slots__ = ["multicast_group_id", "dev_eui"]
__slots__ = ("multicast_group_id", "dev_eui")
MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int]
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
multicast_group_id: str
@ -139,7 +139,7 @@ class AddDeviceToMulticastGroupRequest(_message.Message):
def __init__(self, multicast_group_id: _Optional[str] = ..., dev_eui: _Optional[str] = ...) -> None: ...
class RemoveDeviceFromMulticastGroupRequest(_message.Message):
__slots__ = ["multicast_group_id", "dev_eui"]
__slots__ = ("multicast_group_id", "dev_eui")
MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int]
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
multicast_group_id: str
@ -147,7 +147,7 @@ class RemoveDeviceFromMulticastGroupRequest(_message.Message):
def __init__(self, multicast_group_id: _Optional[str] = ..., dev_eui: _Optional[str] = ...) -> None: ...
class AddGatewayToMulticastGroupRequest(_message.Message):
__slots__ = ["multicast_group_id", "gateway_id"]
__slots__ = ("multicast_group_id", "gateway_id")
MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int]
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
multicast_group_id: str
@ -155,7 +155,7 @@ class AddGatewayToMulticastGroupRequest(_message.Message):
def __init__(self, multicast_group_id: _Optional[str] = ..., gateway_id: _Optional[str] = ...) -> None: ...
class RemoveGatewayFromMulticastGroupRequest(_message.Message):
__slots__ = ["multicast_group_id", "gateway_id"]
__slots__ = ("multicast_group_id", "gateway_id")
MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int]
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
multicast_group_id: str
@ -163,7 +163,7 @@ class RemoveGatewayFromMulticastGroupRequest(_message.Message):
def __init__(self, multicast_group_id: _Optional[str] = ..., gateway_id: _Optional[str] = ...) -> None: ...
class MulticastGroupQueueItem(_message.Message):
__slots__ = ["multicast_group_id", "f_cnt", "f_port", "data"]
__slots__ = ("multicast_group_id", "f_cnt", "f_port", "data")
MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int]
F_CNT_FIELD_NUMBER: _ClassVar[int]
F_PORT_FIELD_NUMBER: _ClassVar[int]
@ -175,31 +175,31 @@ class MulticastGroupQueueItem(_message.Message):
def __init__(self, multicast_group_id: _Optional[str] = ..., f_cnt: _Optional[int] = ..., f_port: _Optional[int] = ..., data: _Optional[bytes] = ...) -> None: ...
class EnqueueMulticastGroupQueueItemRequest(_message.Message):
__slots__ = ["queue_item"]
__slots__ = ("queue_item",)
QUEUE_ITEM_FIELD_NUMBER: _ClassVar[int]
queue_item: MulticastGroupQueueItem
def __init__(self, queue_item: _Optional[_Union[MulticastGroupQueueItem, _Mapping]] = ...) -> None: ...
class EnqueueMulticastGroupQueueItemResponse(_message.Message):
__slots__ = ["f_cnt"]
__slots__ = ("f_cnt",)
F_CNT_FIELD_NUMBER: _ClassVar[int]
f_cnt: int
def __init__(self, f_cnt: _Optional[int] = ...) -> None: ...
class FlushMulticastGroupQueueRequest(_message.Message):
__slots__ = ["multicast_group_id"]
__slots__ = ("multicast_group_id",)
MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int]
multicast_group_id: str
def __init__(self, multicast_group_id: _Optional[str] = ...) -> None: ...
class ListMulticastGroupQueueRequest(_message.Message):
__slots__ = ["multicast_group_id"]
__slots__ = ("multicast_group_id",)
MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int]
multicast_group_id: str
def __init__(self, multicast_group_id: _Optional[str] = ...) -> None: ...
class ListMulticastGroupQueueResponse(_message.Message):
__slots__ = ["items"]
__slots__ = ("items",)
ITEMS_FIELD_NUMBER: _ClassVar[int]
items: _containers.RepeatedCompositeFieldContainer[MulticastGroupQueueItem]
def __init__(self, items: _Optional[_Iterable[_Union[MulticastGroupQueueItem, _Mapping]]] = ...) -> None: ...

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/api/relay.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -22,17 +23,16 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.api.relay_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\nRelayProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_RELAYSERVICE.methods_by_name['List']._options = None
_RELAYSERVICE.methods_by_name['List']._serialized_options = b'\202\323\344\223\002\r\022\013/api/relays'
_RELAYSERVICE.methods_by_name['AddDevice']._options = None
_RELAYSERVICE.methods_by_name['AddDevice']._serialized_options = b'\202\323\344\223\002(\"#/api/relays/{relay_dev_eui}/devices:\001*'
_RELAYSERVICE.methods_by_name['RemoveDevice']._options = None
_RELAYSERVICE.methods_by_name['RemoveDevice']._serialized_options = b'\202\323\344\223\002/*-/api/relays/{relay_dev_eui}/devices/{dev_eui}'
_RELAYSERVICE.methods_by_name['ListDevices']._options = None
_RELAYSERVICE.methods_by_name['ListDevices']._serialized_options = b'\202\323\344\223\002%\022#/api/relays/{relay_dev_eui}/devices'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\021io.chirpstack.apiB\nRelayProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_globals['_RELAYSERVICE'].methods_by_name['List']._options = None
_globals['_RELAYSERVICE'].methods_by_name['List']._serialized_options = b'\202\323\344\223\002\r\022\013/api/relays'
_globals['_RELAYSERVICE'].methods_by_name['AddDevice']._options = None
_globals['_RELAYSERVICE'].methods_by_name['AddDevice']._serialized_options = b'\202\323\344\223\002(\"#/api/relays/{relay_dev_eui}/devices:\001*'
_globals['_RELAYSERVICE'].methods_by_name['RemoveDevice']._options = None
_globals['_RELAYSERVICE'].methods_by_name['RemoveDevice']._serialized_options = b'\202\323\344\223\002/*-/api/relays/{relay_dev_eui}/devices/{dev_eui}'
_globals['_RELAYSERVICE'].methods_by_name['ListDevices']._options = None
_globals['_RELAYSERVICE'].methods_by_name['ListDevices']._serialized_options = b'\202\323\344\223\002%\022#/api/relays/{relay_dev_eui}/devices'
_globals['_RELAYLISTITEM']._serialized_start=131
_globals['_RELAYLISTITEM']._serialized_end=177
_globals['_LISTRELAYSREQUEST']._serialized_start=179

View File

@ -9,7 +9,7 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class RelayListItem(_message.Message):
__slots__ = ["dev_eui", "name"]
__slots__ = ("dev_eui", "name")
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
NAME_FIELD_NUMBER: _ClassVar[int]
dev_eui: str
@ -17,7 +17,7 @@ class RelayListItem(_message.Message):
def __init__(self, dev_eui: _Optional[str] = ..., name: _Optional[str] = ...) -> None: ...
class ListRelaysRequest(_message.Message):
__slots__ = ["limit", "offset", "application_id"]
__slots__ = ("limit", "offset", "application_id")
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
@ -27,7 +27,7 @@ class ListRelaysRequest(_message.Message):
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., application_id: _Optional[str] = ...) -> None: ...
class ListRelaysResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -35,7 +35,7 @@ class ListRelaysResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[RelayListItem, _Mapping]]] = ...) -> None: ...
class AddRelayDeviceRequest(_message.Message):
__slots__ = ["relay_dev_eui", "device_dev_eui"]
__slots__ = ("relay_dev_eui", "device_dev_eui")
RELAY_DEV_EUI_FIELD_NUMBER: _ClassVar[int]
DEVICE_DEV_EUI_FIELD_NUMBER: _ClassVar[int]
relay_dev_eui: str
@ -43,7 +43,7 @@ class AddRelayDeviceRequest(_message.Message):
def __init__(self, relay_dev_eui: _Optional[str] = ..., device_dev_eui: _Optional[str] = ...) -> None: ...
class RemoveRelayDeviceRequest(_message.Message):
__slots__ = ["relay_dev_eui", "device_dev_eui"]
__slots__ = ("relay_dev_eui", "device_dev_eui")
RELAY_DEV_EUI_FIELD_NUMBER: _ClassVar[int]
DEVICE_DEV_EUI_FIELD_NUMBER: _ClassVar[int]
relay_dev_eui: str
@ -51,7 +51,7 @@ class RemoveRelayDeviceRequest(_message.Message):
def __init__(self, relay_dev_eui: _Optional[str] = ..., device_dev_eui: _Optional[str] = ...) -> None: ...
class ListRelayDevicesRequest(_message.Message):
__slots__ = ["limit", "offset", "relay_dev_eui"]
__slots__ = ("limit", "offset", "relay_dev_eui")
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
RELAY_DEV_EUI_FIELD_NUMBER: _ClassVar[int]
@ -61,7 +61,7 @@ class ListRelayDevicesRequest(_message.Message):
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., relay_dev_eui: _Optional[str] = ...) -> None: ...
class RelayDeviceListItem(_message.Message):
__slots__ = ["dev_eui", "created_at", "name"]
__slots__ = ("dev_eui", "created_at", "name")
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
NAME_FIELD_NUMBER: _ClassVar[int]
@ -71,7 +71,7 @@ class RelayDeviceListItem(_message.Message):
def __init__(self, dev_eui: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., name: _Optional[str] = ...) -> None: ...
class ListRelayDevicesResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/api/tenant.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -22,31 +23,30 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.api.tenant_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\013TenantProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_TENANT_TAGSENTRY._options = None
_TENANT_TAGSENTRY._serialized_options = b'8\001'
_TENANTSERVICE.methods_by_name['Create']._options = None
_TENANTSERVICE.methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\021\"\014/api/tenants:\001*'
_TENANTSERVICE.methods_by_name['Get']._options = None
_TENANTSERVICE.methods_by_name['Get']._serialized_options = b'\202\323\344\223\002\023\022\021/api/tenants/{id}'
_TENANTSERVICE.methods_by_name['Update']._options = None
_TENANTSERVICE.methods_by_name['Update']._serialized_options = b'\202\323\344\223\002\035\032\030/api/tenants/{tenant.id}:\001*'
_TENANTSERVICE.methods_by_name['Delete']._options = None
_TENANTSERVICE.methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002\023*\021/api/tenants/{id}'
_TENANTSERVICE.methods_by_name['List']._options = None
_TENANTSERVICE.methods_by_name['List']._serialized_options = b'\202\323\344\223\002\016\022\014/api/tenants'
_TENANTSERVICE.methods_by_name['AddUser']._options = None
_TENANTSERVICE.methods_by_name['AddUser']._serialized_options = b'\202\323\344\223\002/\"*/api/tenants/{tenant_user.tenant_id}/users:\001*'
_TENANTSERVICE.methods_by_name['GetUser']._options = None
_TENANTSERVICE.methods_by_name['GetUser']._serialized_options = b'\202\323\344\223\002*\022(/api/tenants/{tenant_id}/users/{user_id}'
_TENANTSERVICE.methods_by_name['UpdateUser']._options = None
_TENANTSERVICE.methods_by_name['UpdateUser']._serialized_options = b'\202\323\344\223\002E\032@/api/tenants/{tenant_user.tenant_id}/users/{tenant_user.user_id}:\001*'
_TENANTSERVICE.methods_by_name['DeleteUser']._options = None
_TENANTSERVICE.methods_by_name['DeleteUser']._serialized_options = b'\202\323\344\223\002**(/api/tenants/{tenant_id}/users/{user_id}'
_TENANTSERVICE.methods_by_name['ListUsers']._options = None
_TENANTSERVICE.methods_by_name['ListUsers']._serialized_options = b'\202\323\344\223\002 \022\036/api/tenants/{tenant_id}/users'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\021io.chirpstack.apiB\013TenantProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_globals['_TENANT_TAGSENTRY']._options = None
_globals['_TENANT_TAGSENTRY']._serialized_options = b'8\001'
_globals['_TENANTSERVICE'].methods_by_name['Create']._options = None
_globals['_TENANTSERVICE'].methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\021\"\014/api/tenants:\001*'
_globals['_TENANTSERVICE'].methods_by_name['Get']._options = None
_globals['_TENANTSERVICE'].methods_by_name['Get']._serialized_options = b'\202\323\344\223\002\023\022\021/api/tenants/{id}'
_globals['_TENANTSERVICE'].methods_by_name['Update']._options = None
_globals['_TENANTSERVICE'].methods_by_name['Update']._serialized_options = b'\202\323\344\223\002\035\032\030/api/tenants/{tenant.id}:\001*'
_globals['_TENANTSERVICE'].methods_by_name['Delete']._options = None
_globals['_TENANTSERVICE'].methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002\023*\021/api/tenants/{id}'
_globals['_TENANTSERVICE'].methods_by_name['List']._options = None
_globals['_TENANTSERVICE'].methods_by_name['List']._serialized_options = b'\202\323\344\223\002\016\022\014/api/tenants'
_globals['_TENANTSERVICE'].methods_by_name['AddUser']._options = None
_globals['_TENANTSERVICE'].methods_by_name['AddUser']._serialized_options = b'\202\323\344\223\002/\"*/api/tenants/{tenant_user.tenant_id}/users:\001*'
_globals['_TENANTSERVICE'].methods_by_name['GetUser']._options = None
_globals['_TENANTSERVICE'].methods_by_name['GetUser']._serialized_options = b'\202\323\344\223\002*\022(/api/tenants/{tenant_id}/users/{user_id}'
_globals['_TENANTSERVICE'].methods_by_name['UpdateUser']._options = None
_globals['_TENANTSERVICE'].methods_by_name['UpdateUser']._serialized_options = b'\202\323\344\223\002E\032@/api/tenants/{tenant_user.tenant_id}/users/{tenant_user.user_id}:\001*'
_globals['_TENANTSERVICE'].methods_by_name['DeleteUser']._options = None
_globals['_TENANTSERVICE'].methods_by_name['DeleteUser']._serialized_options = b'\202\323\344\223\002**(/api/tenants/{tenant_id}/users/{user_id}'
_globals['_TENANTSERVICE'].methods_by_name['ListUsers']._options = None
_globals['_TENANTSERVICE'].methods_by_name['ListUsers']._serialized_options = b'\202\323\344\223\002 \022\036/api/tenants/{tenant_id}/users'
_globals['_TENANT']._serialized_start=133
_globals['_TENANT']._serialized_end=410
_globals['_TENANT_TAGSENTRY']._serialized_start=367

View File

@ -9,9 +9,9 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class Tenant(_message.Message):
__slots__ = ["id", "name", "description", "can_have_gateways", "max_gateway_count", "max_device_count", "private_gateways_up", "private_gateways_down", "tags"]
__slots__ = ("id", "name", "description", "can_have_gateways", "max_gateway_count", "max_device_count", "private_gateways_up", "private_gateways_down", "tags")
class TagsEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -38,7 +38,7 @@ class Tenant(_message.Message):
def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., can_have_gateways: bool = ..., max_gateway_count: _Optional[int] = ..., max_device_count: _Optional[int] = ..., private_gateways_up: bool = ..., private_gateways_down: bool = ..., tags: _Optional[_Mapping[str, str]] = ...) -> None: ...
class TenantListItem(_message.Message):
__slots__ = ["id", "created_at", "updated_at", "name", "can_have_gateways", "private_gateways_up", "private_gateways_down", "max_gateway_count", "max_device_count"]
__slots__ = ("id", "created_at", "updated_at", "name", "can_have_gateways", "private_gateways_up", "private_gateways_down", "max_gateway_count", "max_device_count")
ID_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -60,25 +60,25 @@ class TenantListItem(_message.Message):
def __init__(self, id: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., name: _Optional[str] = ..., can_have_gateways: bool = ..., private_gateways_up: bool = ..., private_gateways_down: bool = ..., max_gateway_count: _Optional[int] = ..., max_device_count: _Optional[int] = ...) -> None: ...
class CreateTenantRequest(_message.Message):
__slots__ = ["tenant"]
__slots__ = ("tenant",)
TENANT_FIELD_NUMBER: _ClassVar[int]
tenant: Tenant
def __init__(self, tenant: _Optional[_Union[Tenant, _Mapping]] = ...) -> None: ...
class CreateTenantResponse(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetTenantRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetTenantResponse(_message.Message):
__slots__ = ["tenant", "created_at", "updated_at"]
__slots__ = ("tenant", "created_at", "updated_at")
TENANT_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -88,19 +88,19 @@ class GetTenantResponse(_message.Message):
def __init__(self, tenant: _Optional[_Union[Tenant, _Mapping]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
class UpdateTenantRequest(_message.Message):
__slots__ = ["tenant"]
__slots__ = ("tenant",)
TENANT_FIELD_NUMBER: _ClassVar[int]
tenant: Tenant
def __init__(self, tenant: _Optional[_Union[Tenant, _Mapping]] = ...) -> None: ...
class DeleteTenantRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class ListTenantsRequest(_message.Message):
__slots__ = ["limit", "offset", "search", "user_id"]
__slots__ = ("limit", "offset", "search", "user_id")
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
SEARCH_FIELD_NUMBER: _ClassVar[int]
@ -112,7 +112,7 @@ class ListTenantsRequest(_message.Message):
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., search: _Optional[str] = ..., user_id: _Optional[str] = ...) -> None: ...
class ListTenantsResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -120,7 +120,7 @@ class ListTenantsResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[TenantListItem, _Mapping]]] = ...) -> None: ...
class TenantUser(_message.Message):
__slots__ = ["tenant_id", "user_id", "is_admin", "is_device_admin", "is_gateway_admin", "email"]
__slots__ = ("tenant_id", "user_id", "is_admin", "is_device_admin", "is_gateway_admin", "email")
TENANT_ID_FIELD_NUMBER: _ClassVar[int]
USER_ID_FIELD_NUMBER: _ClassVar[int]
IS_ADMIN_FIELD_NUMBER: _ClassVar[int]
@ -136,7 +136,7 @@ class TenantUser(_message.Message):
def __init__(self, tenant_id: _Optional[str] = ..., user_id: _Optional[str] = ..., is_admin: bool = ..., is_device_admin: bool = ..., is_gateway_admin: bool = ..., email: _Optional[str] = ...) -> None: ...
class TenantUserListItem(_message.Message):
__slots__ = ["tenant_id", "user_id", "created_at", "updated_at", "email", "is_admin", "is_device_admin", "is_gateway_admin"]
__slots__ = ("tenant_id", "user_id", "created_at", "updated_at", "email", "is_admin", "is_device_admin", "is_gateway_admin")
TENANT_ID_FIELD_NUMBER: _ClassVar[int]
USER_ID_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -156,13 +156,13 @@ class TenantUserListItem(_message.Message):
def __init__(self, tenant_id: _Optional[str] = ..., user_id: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., email: _Optional[str] = ..., is_admin: bool = ..., is_device_admin: bool = ..., is_gateway_admin: bool = ...) -> None: ...
class AddTenantUserRequest(_message.Message):
__slots__ = ["tenant_user"]
__slots__ = ("tenant_user",)
TENANT_USER_FIELD_NUMBER: _ClassVar[int]
tenant_user: TenantUser
def __init__(self, tenant_user: _Optional[_Union[TenantUser, _Mapping]] = ...) -> None: ...
class GetTenantUserRequest(_message.Message):
__slots__ = ["tenant_id", "user_id"]
__slots__ = ("tenant_id", "user_id")
TENANT_ID_FIELD_NUMBER: _ClassVar[int]
USER_ID_FIELD_NUMBER: _ClassVar[int]
tenant_id: str
@ -170,7 +170,7 @@ class GetTenantUserRequest(_message.Message):
def __init__(self, tenant_id: _Optional[str] = ..., user_id: _Optional[str] = ...) -> None: ...
class GetTenantUserResponse(_message.Message):
__slots__ = ["tenant_user", "created_at", "updated_at"]
__slots__ = ("tenant_user", "created_at", "updated_at")
TENANT_USER_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -180,13 +180,13 @@ class GetTenantUserResponse(_message.Message):
def __init__(self, tenant_user: _Optional[_Union[TenantUser, _Mapping]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
class UpdateTenantUserRequest(_message.Message):
__slots__ = ["tenant_user"]
__slots__ = ("tenant_user",)
TENANT_USER_FIELD_NUMBER: _ClassVar[int]
tenant_user: TenantUser
def __init__(self, tenant_user: _Optional[_Union[TenantUser, _Mapping]] = ...) -> None: ...
class DeleteTenantUserRequest(_message.Message):
__slots__ = ["tenant_id", "user_id"]
__slots__ = ("tenant_id", "user_id")
TENANT_ID_FIELD_NUMBER: _ClassVar[int]
USER_ID_FIELD_NUMBER: _ClassVar[int]
tenant_id: str
@ -194,7 +194,7 @@ class DeleteTenantUserRequest(_message.Message):
def __init__(self, tenant_id: _Optional[str] = ..., user_id: _Optional[str] = ...) -> None: ...
class ListTenantUsersRequest(_message.Message):
__slots__ = ["tenant_id", "limit", "offset"]
__slots__ = ("tenant_id", "limit", "offset")
TENANT_ID_FIELD_NUMBER: _ClassVar[int]
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
@ -204,7 +204,7 @@ class ListTenantUsersRequest(_message.Message):
def __init__(self, tenant_id: _Optional[str] = ..., limit: _Optional[int] = ..., offset: _Optional[int] = ...) -> None: ...
class ListTenantUsersResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/api/user.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -22,21 +23,20 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.api.user_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\tUserProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_USERSERVICE.methods_by_name['Create']._options = None
_USERSERVICE.methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\017\"\n/api/users:\001*'
_USERSERVICE.methods_by_name['Get']._options = None
_USERSERVICE.methods_by_name['Get']._serialized_options = b'\202\323\344\223\002\021\022\017/api/users/{id}'
_USERSERVICE.methods_by_name['Update']._options = None
_USERSERVICE.methods_by_name['Update']._serialized_options = b'\202\323\344\223\002\031\032\024/api/users/{user.id}:\001*'
_USERSERVICE.methods_by_name['Delete']._options = None
_USERSERVICE.methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002\021*\017/api/users/{id}'
_USERSERVICE.methods_by_name['List']._options = None
_USERSERVICE.methods_by_name['List']._serialized_options = b'\202\323\344\223\002\014\022\n/api/users'
_USERSERVICE.methods_by_name['UpdatePassword']._options = None
_USERSERVICE.methods_by_name['UpdatePassword']._serialized_options = b'\202\323\344\223\002\"\"\035/api/users/{user_id}/password:\001*'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\021io.chirpstack.apiB\tUserProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
_globals['_USERSERVICE'].methods_by_name['Create']._options = None
_globals['_USERSERVICE'].methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\017\"\n/api/users:\001*'
_globals['_USERSERVICE'].methods_by_name['Get']._options = None
_globals['_USERSERVICE'].methods_by_name['Get']._serialized_options = b'\202\323\344\223\002\021\022\017/api/users/{id}'
_globals['_USERSERVICE'].methods_by_name['Update']._options = None
_globals['_USERSERVICE'].methods_by_name['Update']._serialized_options = b'\202\323\344\223\002\031\032\024/api/users/{user.id}:\001*'
_globals['_USERSERVICE'].methods_by_name['Delete']._options = None
_globals['_USERSERVICE'].methods_by_name['Delete']._serialized_options = b'\202\323\344\223\002\021*\017/api/users/{id}'
_globals['_USERSERVICE'].methods_by_name['List']._options = None
_globals['_USERSERVICE'].methods_by_name['List']._serialized_options = b'\202\323\344\223\002\014\022\n/api/users'
_globals['_USERSERVICE'].methods_by_name['UpdatePassword']._options = None
_globals['_USERSERVICE'].methods_by_name['UpdatePassword']._serialized_options = b'\202\323\344\223\002\"\"\035/api/users/{user_id}/password:\001*'
_globals['_USER']._serialized_start=130
_globals['_USER']._serialized_end=214
_globals['_USERLISTITEM']._serialized_start=217

View File

@ -9,7 +9,7 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class User(_message.Message):
__slots__ = ["id", "is_admin", "is_active", "email", "note"]
__slots__ = ("id", "is_admin", "is_active", "email", "note")
ID_FIELD_NUMBER: _ClassVar[int]
IS_ADMIN_FIELD_NUMBER: _ClassVar[int]
IS_ACTIVE_FIELD_NUMBER: _ClassVar[int]
@ -23,7 +23,7 @@ class User(_message.Message):
def __init__(self, id: _Optional[str] = ..., is_admin: bool = ..., is_active: bool = ..., email: _Optional[str] = ..., note: _Optional[str] = ...) -> None: ...
class UserListItem(_message.Message):
__slots__ = ["id", "created_at", "updated_at", "email", "is_admin", "is_active"]
__slots__ = ("id", "created_at", "updated_at", "email", "is_admin", "is_active")
ID_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -39,7 +39,7 @@ class UserListItem(_message.Message):
def __init__(self, id: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., email: _Optional[str] = ..., is_admin: bool = ..., is_active: bool = ...) -> None: ...
class UserTenant(_message.Message):
__slots__ = ["tenant_id", "is_admin", "is_device_admin", "is_gateway_admin"]
__slots__ = ("tenant_id", "is_admin", "is_device_admin", "is_gateway_admin")
TENANT_ID_FIELD_NUMBER: _ClassVar[int]
IS_ADMIN_FIELD_NUMBER: _ClassVar[int]
IS_DEVICE_ADMIN_FIELD_NUMBER: _ClassVar[int]
@ -51,7 +51,7 @@ class UserTenant(_message.Message):
def __init__(self, tenant_id: _Optional[str] = ..., is_admin: bool = ..., is_device_admin: bool = ..., is_gateway_admin: bool = ...) -> None: ...
class CreateUserRequest(_message.Message):
__slots__ = ["user", "password", "tenants"]
__slots__ = ("user", "password", "tenants")
USER_FIELD_NUMBER: _ClassVar[int]
PASSWORD_FIELD_NUMBER: _ClassVar[int]
TENANTS_FIELD_NUMBER: _ClassVar[int]
@ -61,19 +61,19 @@ class CreateUserRequest(_message.Message):
def __init__(self, user: _Optional[_Union[User, _Mapping]] = ..., password: _Optional[str] = ..., tenants: _Optional[_Iterable[_Union[UserTenant, _Mapping]]] = ...) -> None: ...
class CreateUserResponse(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetUserRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class GetUserResponse(_message.Message):
__slots__ = ["user", "created_at", "updated_at"]
__slots__ = ("user", "created_at", "updated_at")
USER_FIELD_NUMBER: _ClassVar[int]
CREATED_AT_FIELD_NUMBER: _ClassVar[int]
UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
@ -83,19 +83,19 @@ class GetUserResponse(_message.Message):
def __init__(self, user: _Optional[_Union[User, _Mapping]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
class UpdateUserRequest(_message.Message):
__slots__ = ["user"]
__slots__ = ("user",)
USER_FIELD_NUMBER: _ClassVar[int]
user: User
def __init__(self, user: _Optional[_Union[User, _Mapping]] = ...) -> None: ...
class DeleteUserRequest(_message.Message):
__slots__ = ["id"]
__slots__ = ("id",)
ID_FIELD_NUMBER: _ClassVar[int]
id: str
def __init__(self, id: _Optional[str] = ...) -> None: ...
class ListUsersRequest(_message.Message):
__slots__ = ["limit", "offset"]
__slots__ = ("limit", "offset")
LIMIT_FIELD_NUMBER: _ClassVar[int]
OFFSET_FIELD_NUMBER: _ClassVar[int]
limit: int
@ -103,7 +103,7 @@ class ListUsersRequest(_message.Message):
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ...) -> None: ...
class ListUsersResponse(_message.Message):
__slots__ = ["total_count", "result"]
__slots__ = ("total_count", "result")
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
RESULT_FIELD_NUMBER: _ClassVar[int]
total_count: int
@ -111,7 +111,7 @@ class ListUsersResponse(_message.Message):
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[UserListItem, _Mapping]]] = ...) -> None: ...
class UpdateUserPasswordRequest(_message.Message):
__slots__ = ["user_id", "password"]
__slots__ = ("user_id", "password")
USER_ID_FIELD_NUMBER: _ClassVar[int]
PASSWORD_FIELD_NUMBER: _ClassVar[int]
user_id: str

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/common/common.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -14,33 +15,32 @@ _sym_db = _symbol_database.Default()
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"chirpstack-api/common/common.proto\x12\x06\x63ommon\x1a\x1fgoogle/protobuf/timestamp.proto\"{\n\x08Location\x12\x10\n\x08latitude\x18\x01 \x01(\x01\x12\x11\n\tlongitude\x18\x02 \x01(\x01\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x01\x12&\n\x06source\x18\x04 \x01(\x0e\x32\x16.common.LocationSource\x12\x10\n\x08\x61\x63\x63uracy\x18\x05 \x01(\x02\"1\n\x0bKeyEnvelope\x12\x11\n\tkek_label\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x65s_key\x18\x02 \x01(\x0c\"\x91\x01\n\x06Metric\x12\x0c\n\x04name\x18\x01 \x01(\t\x12.\n\ntimestamps\x18\x02 \x03(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x08\x64\x61tasets\x18\x03 \x03(\x0b\x32\x15.common.MetricDataset\x12 \n\x04kind\x18\x04 \x01(\x0e\x32\x12.common.MetricKind\",\n\rMetricDataset\x12\r\n\x05label\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x03(\x02*,\n\nModulation\x12\x08\n\x04LORA\x10\x00\x12\x07\n\x03\x46SK\x10\x01\x12\x0b\n\x07LR_FHSS\x10\x02*\xaa\x01\n\x06Region\x12\t\n\x05\x45U868\x10\x00\x12\t\n\x05US915\x10\x02\x12\t\n\x05\x43N779\x10\x03\x12\t\n\x05\x45U433\x10\x04\x12\t\n\x05\x41U915\x10\x05\x12\t\n\x05\x43N470\x10\x06\x12\t\n\x05\x41S923\x10\x07\x12\x0b\n\x07\x41S923_2\x10\x0c\x12\x0b\n\x07\x41S923_3\x10\r\x12\x0b\n\x07\x41S923_4\x10\x0e\x12\t\n\x05KR920\x10\x08\x12\t\n\x05IN865\x10\t\x12\t\n\x05RU864\x10\n\x12\x0b\n\x07ISM2400\x10\x0b*\xb3\x01\n\x05MType\x12\x10\n\x0cJOIN_REQUEST\x10\x00\x12\x0f\n\x0bJOIN_ACCEPT\x10\x01\x12\x17\n\x13UNCONFIRMED_DATA_UP\x10\x02\x12\x19\n\x15UNCONFIRMED_DATA_DOWN\x10\x03\x12\x15\n\x11\x43ONFIRMED_DATA_UP\x10\x04\x12\x17\n\x13\x43ONFIRMED_DATA_DOWN\x10\x05\x12\x12\n\x0eREJOIN_REQUEST\x10\x06\x12\x0f\n\x0bPROPRIETARY\x10\x07*~\n\nMacVersion\x12\x11\n\rLORAWAN_1_0_0\x10\x00\x12\x11\n\rLORAWAN_1_0_1\x10\x01\x12\x11\n\rLORAWAN_1_0_2\x10\x02\x12\x11\n\rLORAWAN_1_0_3\x10\x03\x12\x11\n\rLORAWAN_1_0_4\x10\x04\x12\x11\n\rLORAWAN_1_1_0\x10\x05*e\n\x11RegParamsRevision\x12\x05\n\x01\x41\x10\x00\x12\x05\n\x01\x42\x10\x01\x12\x0f\n\x0bRP002_1_0_0\x10\x02\x12\x0f\n\x0bRP002_1_0_1\x10\x03\x12\x0f\n\x0bRP002_1_0_2\x10\x04\x12\x0f\n\x0bRP002_1_0_3\x10\x05*\x8e\x01\n\x0eLocationSource\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03GPS\x10\x01\x12\n\n\x06\x43ONFIG\x10\x02\x12\x15\n\x11GEO_RESOLVER_TDOA\x10\x03\x12\x15\n\x11GEO_RESOLVER_RSSI\x10\x04\x12\x15\n\x11GEO_RESOLVER_GNSS\x10\x05\x12\x15\n\x11GEO_RESOLVER_WIFI\x10\x06*+\n\x0b\x41ggregation\x12\x08\n\x04HOUR\x10\x00\x12\x07\n\x03\x44\x41Y\x10\x01\x12\t\n\x05MONTH\x10\x02*2\n\nMetricKind\x12\x0b\n\x07\x43OUNTER\x10\x00\x12\x0c\n\x08\x41\x42SOLUTE\x10\x01\x12\t\n\x05GAUGE\x10\x02*4\n\x0b\x44\x65viceClass\x12\x0b\n\x07\x43LASS_A\x10\x00\x12\x0b\n\x07\x43LASS_B\x10\x01\x12\x0b\n\x07\x43LASS_C\x10\x02\x42i\n\x11io.chirpstack.apiB\x0b\x43ommonProtoP\x01Z1github.com/chirpstack/chirpstack/api/go/v4/common\xaa\x02\x11\x43hirpstack.Commonb\x06proto3')
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"chirpstack-api/common/common.proto\x12\x06\x63ommon\x1a\x1fgoogle/protobuf/timestamp.proto\"{\n\x08Location\x12\x10\n\x08latitude\x18\x01 \x01(\x01\x12\x11\n\tlongitude\x18\x02 \x01(\x01\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x01\x12&\n\x06source\x18\x04 \x01(\x0e\x32\x16.common.LocationSource\x12\x10\n\x08\x61\x63\x63uracy\x18\x05 \x01(\x02\"1\n\x0bKeyEnvelope\x12\x11\n\tkek_label\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x65s_key\x18\x02 \x01(\x0c\"\x91\x01\n\x06Metric\x12\x0c\n\x04name\x18\x01 \x01(\t\x12.\n\ntimestamps\x18\x02 \x03(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x08\x64\x61tasets\x18\x03 \x03(\x0b\x32\x15.common.MetricDataset\x12 \n\x04kind\x18\x04 \x01(\x0e\x32\x12.common.MetricKind\",\n\rMetricDataset\x12\r\n\x05label\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x03(\x02\"S\n\x11JoinServerContext\x12\x16\n\x0esession_key_id\x18\x01 \x01(\t\x12&\n\tapp_s_key\x18\x02 \x01(\x0b\x32\x13.common.KeyEnvelope*,\n\nModulation\x12\x08\n\x04LORA\x10\x00\x12\x07\n\x03\x46SK\x10\x01\x12\x0b\n\x07LR_FHSS\x10\x02*\xaa\x01\n\x06Region\x12\t\n\x05\x45U868\x10\x00\x12\t\n\x05US915\x10\x02\x12\t\n\x05\x43N779\x10\x03\x12\t\n\x05\x45U433\x10\x04\x12\t\n\x05\x41U915\x10\x05\x12\t\n\x05\x43N470\x10\x06\x12\t\n\x05\x41S923\x10\x07\x12\x0b\n\x07\x41S923_2\x10\x0c\x12\x0b\n\x07\x41S923_3\x10\r\x12\x0b\n\x07\x41S923_4\x10\x0e\x12\t\n\x05KR920\x10\x08\x12\t\n\x05IN865\x10\t\x12\t\n\x05RU864\x10\n\x12\x0b\n\x07ISM2400\x10\x0b*\xb3\x01\n\x05MType\x12\x10\n\x0cJOIN_REQUEST\x10\x00\x12\x0f\n\x0bJOIN_ACCEPT\x10\x01\x12\x17\n\x13UNCONFIRMED_DATA_UP\x10\x02\x12\x19\n\x15UNCONFIRMED_DATA_DOWN\x10\x03\x12\x15\n\x11\x43ONFIRMED_DATA_UP\x10\x04\x12\x17\n\x13\x43ONFIRMED_DATA_DOWN\x10\x05\x12\x12\n\x0eREJOIN_REQUEST\x10\x06\x12\x0f\n\x0bPROPRIETARY\x10\x07*~\n\nMacVersion\x12\x11\n\rLORAWAN_1_0_0\x10\x00\x12\x11\n\rLORAWAN_1_0_1\x10\x01\x12\x11\n\rLORAWAN_1_0_2\x10\x02\x12\x11\n\rLORAWAN_1_0_3\x10\x03\x12\x11\n\rLORAWAN_1_0_4\x10\x04\x12\x11\n\rLORAWAN_1_1_0\x10\x05*e\n\x11RegParamsRevision\x12\x05\n\x01\x41\x10\x00\x12\x05\n\x01\x42\x10\x01\x12\x0f\n\x0bRP002_1_0_0\x10\x02\x12\x0f\n\x0bRP002_1_0_1\x10\x03\x12\x0f\n\x0bRP002_1_0_2\x10\x04\x12\x0f\n\x0bRP002_1_0_3\x10\x05*\x8e\x01\n\x0eLocationSource\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03GPS\x10\x01\x12\n\n\x06\x43ONFIG\x10\x02\x12\x15\n\x11GEO_RESOLVER_TDOA\x10\x03\x12\x15\n\x11GEO_RESOLVER_RSSI\x10\x04\x12\x15\n\x11GEO_RESOLVER_GNSS\x10\x05\x12\x15\n\x11GEO_RESOLVER_WIFI\x10\x06*+\n\x0b\x41ggregation\x12\x08\n\x04HOUR\x10\x00\x12\x07\n\x03\x44\x41Y\x10\x01\x12\t\n\x05MONTH\x10\x02*2\n\nMetricKind\x12\x0b\n\x07\x43OUNTER\x10\x00\x12\x0c\n\x08\x41\x42SOLUTE\x10\x01\x12\t\n\x05GAUGE\x10\x02*4\n\x0b\x44\x65viceClass\x12\x0b\n\x07\x43LASS_A\x10\x00\x12\x0b\n\x07\x43LASS_B\x10\x01\x12\x0b\n\x07\x43LASS_C\x10\x02\x42i\n\x11io.chirpstack.apiB\x0b\x43ommonProtoP\x01Z1github.com/chirpstack/chirpstack/api/go/v4/common\xaa\x02\x11\x43hirpstack.Commonb\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.common.common_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\013CommonProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/common\252\002\021Chirpstack.Common'
_globals['_MODULATION']._serialized_start=449
_globals['_MODULATION']._serialized_end=493
_globals['_REGION']._serialized_start=496
_globals['_REGION']._serialized_end=666
_globals['_MTYPE']._serialized_start=669
_globals['_MTYPE']._serialized_end=848
_globals['_MACVERSION']._serialized_start=850
_globals['_MACVERSION']._serialized_end=976
_globals['_REGPARAMSREVISION']._serialized_start=978
_globals['_REGPARAMSREVISION']._serialized_end=1079
_globals['_LOCATIONSOURCE']._serialized_start=1082
_globals['_LOCATIONSOURCE']._serialized_end=1224
_globals['_AGGREGATION']._serialized_start=1226
_globals['_AGGREGATION']._serialized_end=1269
_globals['_METRICKIND']._serialized_start=1271
_globals['_METRICKIND']._serialized_end=1321
_globals['_DEVICECLASS']._serialized_start=1323
_globals['_DEVICECLASS']._serialized_end=1375
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\021io.chirpstack.apiB\013CommonProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/common\252\002\021Chirpstack.Common'
_globals['_MODULATION']._serialized_start=534
_globals['_MODULATION']._serialized_end=578
_globals['_REGION']._serialized_start=581
_globals['_REGION']._serialized_end=751
_globals['_MTYPE']._serialized_start=754
_globals['_MTYPE']._serialized_end=933
_globals['_MACVERSION']._serialized_start=935
_globals['_MACVERSION']._serialized_end=1061
_globals['_REGPARAMSREVISION']._serialized_start=1063
_globals['_REGPARAMSREVISION']._serialized_end=1164
_globals['_LOCATIONSOURCE']._serialized_start=1167
_globals['_LOCATIONSOURCE']._serialized_end=1309
_globals['_AGGREGATION']._serialized_start=1311
_globals['_AGGREGATION']._serialized_end=1354
_globals['_METRICKIND']._serialized_start=1356
_globals['_METRICKIND']._serialized_end=1406
_globals['_DEVICECLASS']._serialized_start=1408
_globals['_DEVICECLASS']._serialized_end=1460
_globals['_LOCATION']._serialized_start=79
_globals['_LOCATION']._serialized_end=202
_globals['_KEYENVELOPE']._serialized_start=204
@ -49,4 +49,6 @@ if _descriptor._USE_C_DESCRIPTORS == False:
_globals['_METRIC']._serialized_end=401
_globals['_METRICDATASET']._serialized_start=403
_globals['_METRICDATASET']._serialized_end=447
_globals['_JOINSERVERCONTEXT']._serialized_start=449
_globals['_JOINSERVERCONTEXT']._serialized_end=532
# @@protoc_insertion_point(module_scope)

View File

@ -8,13 +8,13 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class Modulation(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
LORA: _ClassVar[Modulation]
FSK: _ClassVar[Modulation]
LR_FHSS: _ClassVar[Modulation]
class Region(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
EU868: _ClassVar[Region]
US915: _ClassVar[Region]
CN779: _ClassVar[Region]
@ -31,7 +31,7 @@ class Region(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
ISM2400: _ClassVar[Region]
class MType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
JOIN_REQUEST: _ClassVar[MType]
JOIN_ACCEPT: _ClassVar[MType]
UNCONFIRMED_DATA_UP: _ClassVar[MType]
@ -42,7 +42,7 @@ class MType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
PROPRIETARY: _ClassVar[MType]
class MacVersion(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
LORAWAN_1_0_0: _ClassVar[MacVersion]
LORAWAN_1_0_1: _ClassVar[MacVersion]
LORAWAN_1_0_2: _ClassVar[MacVersion]
@ -51,7 +51,7 @@ class MacVersion(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
LORAWAN_1_1_0: _ClassVar[MacVersion]
class RegParamsRevision(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
A: _ClassVar[RegParamsRevision]
B: _ClassVar[RegParamsRevision]
RP002_1_0_0: _ClassVar[RegParamsRevision]
@ -60,7 +60,7 @@ class RegParamsRevision(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
RP002_1_0_3: _ClassVar[RegParamsRevision]
class LocationSource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
UNKNOWN: _ClassVar[LocationSource]
GPS: _ClassVar[LocationSource]
CONFIG: _ClassVar[LocationSource]
@ -70,19 +70,19 @@ class LocationSource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
GEO_RESOLVER_WIFI: _ClassVar[LocationSource]
class Aggregation(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
HOUR: _ClassVar[Aggregation]
DAY: _ClassVar[Aggregation]
MONTH: _ClassVar[Aggregation]
class MetricKind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
COUNTER: _ClassVar[MetricKind]
ABSOLUTE: _ClassVar[MetricKind]
GAUGE: _ClassVar[MetricKind]
class DeviceClass(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
CLASS_A: _ClassVar[DeviceClass]
CLASS_B: _ClassVar[DeviceClass]
CLASS_C: _ClassVar[DeviceClass]
@ -141,7 +141,7 @@ CLASS_B: DeviceClass
CLASS_C: DeviceClass
class Location(_message.Message):
__slots__ = ["latitude", "longitude", "altitude", "source", "accuracy"]
__slots__ = ("latitude", "longitude", "altitude", "source", "accuracy")
LATITUDE_FIELD_NUMBER: _ClassVar[int]
LONGITUDE_FIELD_NUMBER: _ClassVar[int]
ALTITUDE_FIELD_NUMBER: _ClassVar[int]
@ -155,7 +155,7 @@ class Location(_message.Message):
def __init__(self, latitude: _Optional[float] = ..., longitude: _Optional[float] = ..., altitude: _Optional[float] = ..., source: _Optional[_Union[LocationSource, str]] = ..., accuracy: _Optional[float] = ...) -> None: ...
class KeyEnvelope(_message.Message):
__slots__ = ["kek_label", "aes_key"]
__slots__ = ("kek_label", "aes_key")
KEK_LABEL_FIELD_NUMBER: _ClassVar[int]
AES_KEY_FIELD_NUMBER: _ClassVar[int]
kek_label: str
@ -163,7 +163,7 @@ class KeyEnvelope(_message.Message):
def __init__(self, kek_label: _Optional[str] = ..., aes_key: _Optional[bytes] = ...) -> None: ...
class Metric(_message.Message):
__slots__ = ["name", "timestamps", "datasets", "kind"]
__slots__ = ("name", "timestamps", "datasets", "kind")
NAME_FIELD_NUMBER: _ClassVar[int]
TIMESTAMPS_FIELD_NUMBER: _ClassVar[int]
DATASETS_FIELD_NUMBER: _ClassVar[int]
@ -175,9 +175,17 @@ class Metric(_message.Message):
def __init__(self, name: _Optional[str] = ..., timestamps: _Optional[_Iterable[_Union[_timestamp_pb2.Timestamp, _Mapping]]] = ..., datasets: _Optional[_Iterable[_Union[MetricDataset, _Mapping]]] = ..., kind: _Optional[_Union[MetricKind, str]] = ...) -> None: ...
class MetricDataset(_message.Message):
__slots__ = ["label", "data"]
__slots__ = ("label", "data")
LABEL_FIELD_NUMBER: _ClassVar[int]
DATA_FIELD_NUMBER: _ClassVar[int]
label: str
data: _containers.RepeatedScalarFieldContainer[float]
def __init__(self, label: _Optional[str] = ..., data: _Optional[_Iterable[float]] = ...) -> None: ...
class JoinServerContext(_message.Message):
__slots__ = ("session_key_id", "app_s_key")
SESSION_KEY_ID_FIELD_NUMBER: _ClassVar[int]
APP_S_KEY_FIELD_NUMBER: _ClassVar[int]
session_key_id: str
app_s_key: KeyEnvelope
def __init__(self, session_key_id: _Optional[str] = ..., app_s_key: _Optional[_Union[KeyEnvelope, _Mapping]] = ...) -> None: ...

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/gw/gw.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -23,23 +24,22 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.gw.gw_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024io.chirpstack.api.gwB\014GatewayProtoP\001Z-github.com/chirpstack/chirpstack/api/go/v4/gw\252\002\022Chirpstack.Gateway'
_GATEWAYSTATS_METADATAENTRY._options = None
_GATEWAYSTATS_METADATAENTRY._serialized_options = b'8\001'
_GATEWAYSTATS_TXPACKETSPERFREQUENCYENTRY._options = None
_GATEWAYSTATS_TXPACKETSPERFREQUENCYENTRY._serialized_options = b'8\001'
_GATEWAYSTATS_RXPACKETSPERFREQUENCYENTRY._options = None
_GATEWAYSTATS_RXPACKETSPERFREQUENCYENTRY._serialized_options = b'8\001'
_GATEWAYSTATS_TXPACKETSPERSTATUSENTRY._options = None
_GATEWAYSTATS_TXPACKETSPERSTATUSENTRY._serialized_options = b'8\001'
_UPLINKRXINFOLEGACY_METADATAENTRY._options = None
_UPLINKRXINFOLEGACY_METADATAENTRY._serialized_options = b'8\001'
_UPLINKRXINFO_METADATAENTRY._options = None
_UPLINKRXINFO_METADATAENTRY._serialized_options = b'8\001'
_GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._options = None
_GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._serialized_options = b'8\001'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\024io.chirpstack.api.gwB\014GatewayProtoP\001Z-github.com/chirpstack/chirpstack/api/go/v4/gw\252\002\022Chirpstack.Gateway'
_globals['_GATEWAYSTATS_METADATAENTRY']._options = None
_globals['_GATEWAYSTATS_METADATAENTRY']._serialized_options = b'8\001'
_globals['_GATEWAYSTATS_TXPACKETSPERFREQUENCYENTRY']._options = None
_globals['_GATEWAYSTATS_TXPACKETSPERFREQUENCYENTRY']._serialized_options = b'8\001'
_globals['_GATEWAYSTATS_RXPACKETSPERFREQUENCYENTRY']._options = None
_globals['_GATEWAYSTATS_RXPACKETSPERFREQUENCYENTRY']._serialized_options = b'8\001'
_globals['_GATEWAYSTATS_TXPACKETSPERSTATUSENTRY']._options = None
_globals['_GATEWAYSTATS_TXPACKETSPERSTATUSENTRY']._serialized_options = b'8\001'
_globals['_UPLINKRXINFOLEGACY_METADATAENTRY']._options = None
_globals['_UPLINKRXINFOLEGACY_METADATAENTRY']._serialized_options = b'8\001'
_globals['_UPLINKRXINFO_METADATAENTRY']._options = None
_globals['_UPLINKRXINFO_METADATAENTRY']._serialized_options = b'8\001'
_globals['_GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY']._options = None
_globals['_GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY']._serialized_options = b'8\001'
_globals['_CODERATE']._serialized_start=6528
_globals['_CODERATE']._serialized_end=6709
_globals['_DOWNLINKTIMING']._serialized_start=6711

View File

@ -11,7 +11,7 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class CodeRate(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
CR_UNDEFINED: _ClassVar[CodeRate]
CR_4_5: _ClassVar[CodeRate]
CR_4_6: _ClassVar[CodeRate]
@ -27,25 +27,25 @@ class CodeRate(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
CR_LI_4_8: _ClassVar[CodeRate]
class DownlinkTiming(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
IMMEDIATELY: _ClassVar[DownlinkTiming]
DELAY: _ClassVar[DownlinkTiming]
GPS_EPOCH: _ClassVar[DownlinkTiming]
class FineTimestampType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
NONE: _ClassVar[FineTimestampType]
ENCRYPTED: _ClassVar[FineTimestampType]
PLAIN: _ClassVar[FineTimestampType]
class CRCStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
NO_CRC: _ClassVar[CRCStatus]
BAD_CRC: _ClassVar[CRCStatus]
CRC_OK: _ClassVar[CRCStatus]
class TxAckStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
IGNORED: _ClassVar[TxAckStatus]
OK: _ClassVar[TxAckStatus]
TOO_LATE: _ClassVar[TxAckStatus]
@ -92,7 +92,7 @@ QUEUE_FULL: TxAckStatus
INTERNAL_ERROR: TxAckStatus
class Modulation(_message.Message):
__slots__ = ["lora", "fsk", "lr_fhss"]
__slots__ = ("lora", "fsk", "lr_fhss")
LORA_FIELD_NUMBER: _ClassVar[int]
FSK_FIELD_NUMBER: _ClassVar[int]
LR_FHSS_FIELD_NUMBER: _ClassVar[int]
@ -102,7 +102,7 @@ class Modulation(_message.Message):
def __init__(self, lora: _Optional[_Union[LoraModulationInfo, _Mapping]] = ..., fsk: _Optional[_Union[FskModulationInfo, _Mapping]] = ..., lr_fhss: _Optional[_Union[LrFhssModulationInfo, _Mapping]] = ...) -> None: ...
class UplinkTxInfoLegacy(_message.Message):
__slots__ = ["frequency", "modulation", "lora_modulation_info", "fsk_modulation_info", "lr_fhss_modulation_info"]
__slots__ = ("frequency", "modulation", "lora_modulation_info", "fsk_modulation_info", "lr_fhss_modulation_info")
FREQUENCY_FIELD_NUMBER: _ClassVar[int]
MODULATION_FIELD_NUMBER: _ClassVar[int]
LORA_MODULATION_INFO_FIELD_NUMBER: _ClassVar[int]
@ -116,7 +116,7 @@ class UplinkTxInfoLegacy(_message.Message):
def __init__(self, frequency: _Optional[int] = ..., modulation: _Optional[_Union[_common_pb2.Modulation, str]] = ..., lora_modulation_info: _Optional[_Union[LoraModulationInfo, _Mapping]] = ..., fsk_modulation_info: _Optional[_Union[FskModulationInfo, _Mapping]] = ..., lr_fhss_modulation_info: _Optional[_Union[LrFhssModulationInfo, _Mapping]] = ...) -> None: ...
class UplinkTxInfo(_message.Message):
__slots__ = ["frequency", "modulation"]
__slots__ = ("frequency", "modulation")
FREQUENCY_FIELD_NUMBER: _ClassVar[int]
MODULATION_FIELD_NUMBER: _ClassVar[int]
frequency: int
@ -124,7 +124,7 @@ class UplinkTxInfo(_message.Message):
def __init__(self, frequency: _Optional[int] = ..., modulation: _Optional[_Union[Modulation, _Mapping]] = ...) -> None: ...
class LoraModulationInfo(_message.Message):
__slots__ = ["bandwidth", "spreading_factor", "code_rate_legacy", "code_rate", "polarization_inversion", "preamble", "no_crc"]
__slots__ = ("bandwidth", "spreading_factor", "code_rate_legacy", "code_rate", "polarization_inversion", "preamble", "no_crc")
BANDWIDTH_FIELD_NUMBER: _ClassVar[int]
SPREADING_FACTOR_FIELD_NUMBER: _ClassVar[int]
CODE_RATE_LEGACY_FIELD_NUMBER: _ClassVar[int]
@ -142,7 +142,7 @@ class LoraModulationInfo(_message.Message):
def __init__(self, bandwidth: _Optional[int] = ..., spreading_factor: _Optional[int] = ..., code_rate_legacy: _Optional[str] = ..., code_rate: _Optional[_Union[CodeRate, str]] = ..., polarization_inversion: bool = ..., preamble: _Optional[int] = ..., no_crc: bool = ...) -> None: ...
class FskModulationInfo(_message.Message):
__slots__ = ["frequency_deviation", "datarate"]
__slots__ = ("frequency_deviation", "datarate")
FREQUENCY_DEVIATION_FIELD_NUMBER: _ClassVar[int]
DATARATE_FIELD_NUMBER: _ClassVar[int]
frequency_deviation: int
@ -150,7 +150,7 @@ class FskModulationInfo(_message.Message):
def __init__(self, frequency_deviation: _Optional[int] = ..., datarate: _Optional[int] = ...) -> None: ...
class LrFhssModulationInfo(_message.Message):
__slots__ = ["operating_channel_width", "code_rate_legacy", "code_rate", "grid_steps"]
__slots__ = ("operating_channel_width", "code_rate_legacy", "code_rate", "grid_steps")
OPERATING_CHANNEL_WIDTH_FIELD_NUMBER: _ClassVar[int]
CODE_RATE_LEGACY_FIELD_NUMBER: _ClassVar[int]
CODE_RATE_FIELD_NUMBER: _ClassVar[int]
@ -162,7 +162,7 @@ class LrFhssModulationInfo(_message.Message):
def __init__(self, operating_channel_width: _Optional[int] = ..., code_rate_legacy: _Optional[str] = ..., code_rate: _Optional[_Union[CodeRate, str]] = ..., grid_steps: _Optional[int] = ...) -> None: ...
class EncryptedFineTimestamp(_message.Message):
__slots__ = ["aes_key_index", "encrypted_ns", "fpga_id"]
__slots__ = ("aes_key_index", "encrypted_ns", "fpga_id")
AES_KEY_INDEX_FIELD_NUMBER: _ClassVar[int]
ENCRYPTED_NS_FIELD_NUMBER: _ClassVar[int]
FPGA_ID_FIELD_NUMBER: _ClassVar[int]
@ -172,36 +172,36 @@ class EncryptedFineTimestamp(_message.Message):
def __init__(self, aes_key_index: _Optional[int] = ..., encrypted_ns: _Optional[bytes] = ..., fpga_id: _Optional[bytes] = ...) -> None: ...
class PlainFineTimestamp(_message.Message):
__slots__ = ["time"]
__slots__ = ("time",)
TIME_FIELD_NUMBER: _ClassVar[int]
time: _timestamp_pb2.Timestamp
def __init__(self, time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
class GatewayStats(_message.Message):
__slots__ = ["gateway_id_legacy", "gateway_id", "time", "location", "config_version", "rx_packets_received", "rx_packets_received_ok", "tx_packets_received", "tx_packets_emitted", "metadata", "tx_packets_per_frequency", "rx_packets_per_frequency", "tx_packets_per_modulation", "rx_packets_per_modulation", "tx_packets_per_status"]
__slots__ = ("gateway_id_legacy", "gateway_id", "time", "location", "config_version", "rx_packets_received", "rx_packets_received_ok", "tx_packets_received", "tx_packets_emitted", "metadata", "tx_packets_per_frequency", "rx_packets_per_frequency", "tx_packets_per_modulation", "rx_packets_per_modulation", "tx_packets_per_status")
class MetadataEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: str
def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
class TxPacketsPerFrequencyEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: int
value: int
def __init__(self, key: _Optional[int] = ..., value: _Optional[int] = ...) -> None: ...
class RxPacketsPerFrequencyEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: int
value: int
def __init__(self, key: _Optional[int] = ..., value: _Optional[int] = ...) -> None: ...
class TxPacketsPerStatusEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -240,7 +240,7 @@ class GatewayStats(_message.Message):
def __init__(self, gateway_id_legacy: _Optional[bytes] = ..., gateway_id: _Optional[str] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., location: _Optional[_Union[_common_pb2.Location, _Mapping]] = ..., config_version: _Optional[str] = ..., rx_packets_received: _Optional[int] = ..., rx_packets_received_ok: _Optional[int] = ..., tx_packets_received: _Optional[int] = ..., tx_packets_emitted: _Optional[int] = ..., metadata: _Optional[_Mapping[str, str]] = ..., tx_packets_per_frequency: _Optional[_Mapping[int, int]] = ..., rx_packets_per_frequency: _Optional[_Mapping[int, int]] = ..., tx_packets_per_modulation: _Optional[_Iterable[_Union[PerModulationCount, _Mapping]]] = ..., rx_packets_per_modulation: _Optional[_Iterable[_Union[PerModulationCount, _Mapping]]] = ..., tx_packets_per_status: _Optional[_Mapping[str, int]] = ...) -> None: ...
class PerModulationCount(_message.Message):
__slots__ = ["modulation", "count"]
__slots__ = ("modulation", "count")
MODULATION_FIELD_NUMBER: _ClassVar[int]
COUNT_FIELD_NUMBER: _ClassVar[int]
modulation: Modulation
@ -248,9 +248,9 @@ class PerModulationCount(_message.Message):
def __init__(self, modulation: _Optional[_Union[Modulation, _Mapping]] = ..., count: _Optional[int] = ...) -> None: ...
class UplinkRxInfoLegacy(_message.Message):
__slots__ = ["gateway_id", "time", "time_since_gps_epoch", "rssi", "lora_snr", "channel", "rf_chain", "board", "antenna", "location", "fine_timestamp_type", "encrypted_fine_timestamp", "plain_fine_timestamp", "context", "uplink_id", "crc_status", "metadata"]
__slots__ = ("gateway_id", "time", "time_since_gps_epoch", "rssi", "lora_snr", "channel", "rf_chain", "board", "antenna", "location", "fine_timestamp_type", "encrypted_fine_timestamp", "plain_fine_timestamp", "context", "uplink_id", "crc_status", "metadata")
class MetadataEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -293,9 +293,9 @@ class UplinkRxInfoLegacy(_message.Message):
def __init__(self, gateway_id: _Optional[bytes] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., time_since_gps_epoch: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., rssi: _Optional[int] = ..., lora_snr: _Optional[float] = ..., channel: _Optional[int] = ..., rf_chain: _Optional[int] = ..., board: _Optional[int] = ..., antenna: _Optional[int] = ..., location: _Optional[_Union[_common_pb2.Location, _Mapping]] = ..., fine_timestamp_type: _Optional[_Union[FineTimestampType, str]] = ..., encrypted_fine_timestamp: _Optional[_Union[EncryptedFineTimestamp, _Mapping]] = ..., plain_fine_timestamp: _Optional[_Union[PlainFineTimestamp, _Mapping]] = ..., context: _Optional[bytes] = ..., uplink_id: _Optional[bytes] = ..., crc_status: _Optional[_Union[CRCStatus, str]] = ..., metadata: _Optional[_Mapping[str, str]] = ...) -> None: ...
class UplinkRxInfo(_message.Message):
__slots__ = ["gateway_id", "uplink_id", "gw_time", "ns_time", "time_since_gps_epoch", "fine_time_since_gps_epoch", "rssi", "snr", "channel", "rf_chain", "board", "antenna", "location", "context", "metadata", "crc_status"]
__slots__ = ("gateway_id", "uplink_id", "gw_time", "ns_time", "time_since_gps_epoch", "fine_time_since_gps_epoch", "rssi", "snr", "channel", "rf_chain", "board", "antenna", "location", "context", "metadata", "crc_status")
class MetadataEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -336,7 +336,7 @@ class UplinkRxInfo(_message.Message):
def __init__(self, gateway_id: _Optional[str] = ..., uplink_id: _Optional[int] = ..., gw_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., ns_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., time_since_gps_epoch: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., fine_time_since_gps_epoch: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., rssi: _Optional[int] = ..., snr: _Optional[float] = ..., channel: _Optional[int] = ..., rf_chain: _Optional[int] = ..., board: _Optional[int] = ..., antenna: _Optional[int] = ..., location: _Optional[_Union[_common_pb2.Location, _Mapping]] = ..., context: _Optional[bytes] = ..., metadata: _Optional[_Mapping[str, str]] = ..., crc_status: _Optional[_Union[CRCStatus, str]] = ...) -> None: ...
class DownlinkTxInfoLegacy(_message.Message):
__slots__ = ["gateway_id", "frequency", "power", "modulation", "lora_modulation_info", "fsk_modulation_info", "board", "antenna", "timing", "immediately_timing_info", "delay_timing_info", "gps_epoch_timing_info", "context"]
__slots__ = ("gateway_id", "frequency", "power", "modulation", "lora_modulation_info", "fsk_modulation_info", "board", "antenna", "timing", "immediately_timing_info", "delay_timing_info", "gps_epoch_timing_info", "context")
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
FREQUENCY_FIELD_NUMBER: _ClassVar[int]
POWER_FIELD_NUMBER: _ClassVar[int]
@ -366,7 +366,7 @@ class DownlinkTxInfoLegacy(_message.Message):
def __init__(self, gateway_id: _Optional[bytes] = ..., frequency: _Optional[int] = ..., power: _Optional[int] = ..., modulation: _Optional[_Union[_common_pb2.Modulation, str]] = ..., lora_modulation_info: _Optional[_Union[LoraModulationInfo, _Mapping]] = ..., fsk_modulation_info: _Optional[_Union[FskModulationInfo, _Mapping]] = ..., board: _Optional[int] = ..., antenna: _Optional[int] = ..., timing: _Optional[_Union[DownlinkTiming, str]] = ..., immediately_timing_info: _Optional[_Union[ImmediatelyTimingInfo, _Mapping]] = ..., delay_timing_info: _Optional[_Union[DelayTimingInfo, _Mapping]] = ..., gps_epoch_timing_info: _Optional[_Union[GPSEpochTimingInfo, _Mapping]] = ..., context: _Optional[bytes] = ...) -> None: ...
class DownlinkTxInfo(_message.Message):
__slots__ = ["frequency", "power", "modulation", "board", "antenna", "timing", "context"]
__slots__ = ("frequency", "power", "modulation", "board", "antenna", "timing", "context")
FREQUENCY_FIELD_NUMBER: _ClassVar[int]
POWER_FIELD_NUMBER: _ClassVar[int]
MODULATION_FIELD_NUMBER: _ClassVar[int]
@ -384,7 +384,7 @@ class DownlinkTxInfo(_message.Message):
def __init__(self, frequency: _Optional[int] = ..., power: _Optional[int] = ..., modulation: _Optional[_Union[Modulation, _Mapping]] = ..., board: _Optional[int] = ..., antenna: _Optional[int] = ..., timing: _Optional[_Union[Timing, _Mapping]] = ..., context: _Optional[bytes] = ...) -> None: ...
class Timing(_message.Message):
__slots__ = ["immediately", "delay", "gps_epoch"]
__slots__ = ("immediately", "delay", "gps_epoch")
IMMEDIATELY_FIELD_NUMBER: _ClassVar[int]
DELAY_FIELD_NUMBER: _ClassVar[int]
GPS_EPOCH_FIELD_NUMBER: _ClassVar[int]
@ -394,23 +394,23 @@ class Timing(_message.Message):
def __init__(self, immediately: _Optional[_Union[ImmediatelyTimingInfo, _Mapping]] = ..., delay: _Optional[_Union[DelayTimingInfo, _Mapping]] = ..., gps_epoch: _Optional[_Union[GPSEpochTimingInfo, _Mapping]] = ...) -> None: ...
class ImmediatelyTimingInfo(_message.Message):
__slots__ = []
__slots__ = ()
def __init__(self) -> None: ...
class DelayTimingInfo(_message.Message):
__slots__ = ["delay"]
__slots__ = ("delay",)
DELAY_FIELD_NUMBER: _ClassVar[int]
delay: _duration_pb2.Duration
def __init__(self, delay: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ...) -> None: ...
class GPSEpochTimingInfo(_message.Message):
__slots__ = ["time_since_gps_epoch"]
__slots__ = ("time_since_gps_epoch",)
TIME_SINCE_GPS_EPOCH_FIELD_NUMBER: _ClassVar[int]
time_since_gps_epoch: _duration_pb2.Duration
def __init__(self, time_since_gps_epoch: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ...) -> None: ...
class UplinkFrame(_message.Message):
__slots__ = ["phy_payload", "tx_info_legacy", "rx_info_legacy", "tx_info", "rx_info"]
__slots__ = ("phy_payload", "tx_info_legacy", "rx_info_legacy", "tx_info", "rx_info")
PHY_PAYLOAD_FIELD_NUMBER: _ClassVar[int]
TX_INFO_LEGACY_FIELD_NUMBER: _ClassVar[int]
RX_INFO_LEGACY_FIELD_NUMBER: _ClassVar[int]
@ -424,7 +424,7 @@ class UplinkFrame(_message.Message):
def __init__(self, phy_payload: _Optional[bytes] = ..., tx_info_legacy: _Optional[_Union[UplinkTxInfoLegacy, _Mapping]] = ..., rx_info_legacy: _Optional[_Union[UplinkRxInfoLegacy, _Mapping]] = ..., tx_info: _Optional[_Union[UplinkTxInfo, _Mapping]] = ..., rx_info: _Optional[_Union[UplinkRxInfo, _Mapping]] = ...) -> None: ...
class UplinkFrameSet(_message.Message):
__slots__ = ["phy_payload", "tx_info", "rx_info"]
__slots__ = ("phy_payload", "tx_info", "rx_info")
PHY_PAYLOAD_FIELD_NUMBER: _ClassVar[int]
TX_INFO_FIELD_NUMBER: _ClassVar[int]
RX_INFO_FIELD_NUMBER: _ClassVar[int]
@ -434,7 +434,7 @@ class UplinkFrameSet(_message.Message):
def __init__(self, phy_payload: _Optional[bytes] = ..., tx_info: _Optional[_Union[UplinkTxInfo, _Mapping]] = ..., rx_info: _Optional[_Iterable[_Union[UplinkRxInfo, _Mapping]]] = ...) -> None: ...
class DownlinkFrame(_message.Message):
__slots__ = ["downlink_id", "downlink_id_legacy", "items", "gateway_id_legacy", "gateway_id"]
__slots__ = ("downlink_id", "downlink_id_legacy", "items", "gateway_id_legacy", "gateway_id")
DOWNLINK_ID_FIELD_NUMBER: _ClassVar[int]
DOWNLINK_ID_LEGACY_FIELD_NUMBER: _ClassVar[int]
ITEMS_FIELD_NUMBER: _ClassVar[int]
@ -448,7 +448,7 @@ class DownlinkFrame(_message.Message):
def __init__(self, downlink_id: _Optional[int] = ..., downlink_id_legacy: _Optional[bytes] = ..., items: _Optional[_Iterable[_Union[DownlinkFrameItem, _Mapping]]] = ..., gateway_id_legacy: _Optional[bytes] = ..., gateway_id: _Optional[str] = ...) -> None: ...
class DownlinkFrameItem(_message.Message):
__slots__ = ["phy_payload", "tx_info_legacy", "tx_info"]
__slots__ = ("phy_payload", "tx_info_legacy", "tx_info")
PHY_PAYLOAD_FIELD_NUMBER: _ClassVar[int]
TX_INFO_LEGACY_FIELD_NUMBER: _ClassVar[int]
TX_INFO_FIELD_NUMBER: _ClassVar[int]
@ -458,7 +458,7 @@ class DownlinkFrameItem(_message.Message):
def __init__(self, phy_payload: _Optional[bytes] = ..., tx_info_legacy: _Optional[_Union[DownlinkTxInfoLegacy, _Mapping]] = ..., tx_info: _Optional[_Union[DownlinkTxInfo, _Mapping]] = ...) -> None: ...
class DownlinkTxAck(_message.Message):
__slots__ = ["gateway_id_legacy", "gateway_id", "downlink_id", "downlink_id_legacy", "items"]
__slots__ = ("gateway_id_legacy", "gateway_id", "downlink_id", "downlink_id_legacy", "items")
GATEWAY_ID_LEGACY_FIELD_NUMBER: _ClassVar[int]
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
DOWNLINK_ID_FIELD_NUMBER: _ClassVar[int]
@ -472,13 +472,13 @@ class DownlinkTxAck(_message.Message):
def __init__(self, gateway_id_legacy: _Optional[bytes] = ..., gateway_id: _Optional[str] = ..., downlink_id: _Optional[int] = ..., downlink_id_legacy: _Optional[bytes] = ..., items: _Optional[_Iterable[_Union[DownlinkTxAckItem, _Mapping]]] = ...) -> None: ...
class DownlinkTxAckItem(_message.Message):
__slots__ = ["status"]
__slots__ = ("status",)
STATUS_FIELD_NUMBER: _ClassVar[int]
status: TxAckStatus
def __init__(self, status: _Optional[_Union[TxAckStatus, str]] = ...) -> None: ...
class GatewayConfiguration(_message.Message):
__slots__ = ["gateway_id_legacy", "gateway_id", "version", "channels", "stats_interval"]
__slots__ = ("gateway_id_legacy", "gateway_id", "version", "channels", "stats_interval")
GATEWAY_ID_LEGACY_FIELD_NUMBER: _ClassVar[int]
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
VERSION_FIELD_NUMBER: _ClassVar[int]
@ -492,7 +492,7 @@ class GatewayConfiguration(_message.Message):
def __init__(self, gateway_id_legacy: _Optional[bytes] = ..., gateway_id: _Optional[str] = ..., version: _Optional[str] = ..., channels: _Optional[_Iterable[_Union[ChannelConfiguration, _Mapping]]] = ..., stats_interval: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ...) -> None: ...
class ChannelConfiguration(_message.Message):
__slots__ = ["frequency", "modulation_legacy", "lora_modulation_config", "fsk_modulation_config", "board", "demodulator"]
__slots__ = ("frequency", "modulation_legacy", "lora_modulation_config", "fsk_modulation_config", "board", "demodulator")
FREQUENCY_FIELD_NUMBER: _ClassVar[int]
MODULATION_LEGACY_FIELD_NUMBER: _ClassVar[int]
LORA_MODULATION_CONFIG_FIELD_NUMBER: _ClassVar[int]
@ -508,7 +508,7 @@ class ChannelConfiguration(_message.Message):
def __init__(self, frequency: _Optional[int] = ..., modulation_legacy: _Optional[_Union[_common_pb2.Modulation, str]] = ..., lora_modulation_config: _Optional[_Union[LoraModulationConfig, _Mapping]] = ..., fsk_modulation_config: _Optional[_Union[FskModulationConfig, _Mapping]] = ..., board: _Optional[int] = ..., demodulator: _Optional[int] = ...) -> None: ...
class LoraModulationConfig(_message.Message):
__slots__ = ["bandwidth_legacy", "bandwidth", "spreading_factors"]
__slots__ = ("bandwidth_legacy", "bandwidth", "spreading_factors")
BANDWIDTH_LEGACY_FIELD_NUMBER: _ClassVar[int]
BANDWIDTH_FIELD_NUMBER: _ClassVar[int]
SPREADING_FACTORS_FIELD_NUMBER: _ClassVar[int]
@ -518,7 +518,7 @@ class LoraModulationConfig(_message.Message):
def __init__(self, bandwidth_legacy: _Optional[int] = ..., bandwidth: _Optional[int] = ..., spreading_factors: _Optional[_Iterable[int]] = ...) -> None: ...
class FskModulationConfig(_message.Message):
__slots__ = ["bandwidth_legacy", "bandwidth", "bitrate"]
__slots__ = ("bandwidth_legacy", "bandwidth", "bitrate")
BANDWIDTH_LEGACY_FIELD_NUMBER: _ClassVar[int]
BANDWIDTH_FIELD_NUMBER: _ClassVar[int]
BITRATE_FIELD_NUMBER: _ClassVar[int]
@ -528,9 +528,9 @@ class FskModulationConfig(_message.Message):
def __init__(self, bandwidth_legacy: _Optional[int] = ..., bandwidth: _Optional[int] = ..., bitrate: _Optional[int] = ...) -> None: ...
class GatewayCommandExecRequest(_message.Message):
__slots__ = ["gateway_id_legacy", "gateway_id", "command", "exec_id", "stdin", "environment"]
__slots__ = ("gateway_id_legacy", "gateway_id", "command", "exec_id", "stdin", "environment")
class EnvironmentEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -551,7 +551,7 @@ class GatewayCommandExecRequest(_message.Message):
def __init__(self, gateway_id_legacy: _Optional[bytes] = ..., gateway_id: _Optional[str] = ..., command: _Optional[str] = ..., exec_id: _Optional[int] = ..., stdin: _Optional[bytes] = ..., environment: _Optional[_Mapping[str, str]] = ...) -> None: ...
class GatewayCommandExecResponse(_message.Message):
__slots__ = ["gateway_id_legacy", "gateway_id", "exec_id", "stdout", "stderr", "error"]
__slots__ = ("gateway_id_legacy", "gateway_id", "exec_id", "stdout", "stderr", "error")
GATEWAY_ID_LEGACY_FIELD_NUMBER: _ClassVar[int]
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
EXEC_ID_FIELD_NUMBER: _ClassVar[int]
@ -567,7 +567,7 @@ class GatewayCommandExecResponse(_message.Message):
def __init__(self, gateway_id_legacy: _Optional[bytes] = ..., gateway_id: _Optional[str] = ..., exec_id: _Optional[int] = ..., stdout: _Optional[bytes] = ..., stderr: _Optional[bytes] = ..., error: _Optional[str] = ...) -> None: ...
class RawPacketForwarderEvent(_message.Message):
__slots__ = ["gateway_id_legacy", "gateway_id", "payload"]
__slots__ = ("gateway_id_legacy", "gateway_id", "payload")
GATEWAY_ID_LEGACY_FIELD_NUMBER: _ClassVar[int]
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
PAYLOAD_FIELD_NUMBER: _ClassVar[int]
@ -577,7 +577,7 @@ class RawPacketForwarderEvent(_message.Message):
def __init__(self, gateway_id_legacy: _Optional[bytes] = ..., gateway_id: _Optional[str] = ..., payload: _Optional[bytes] = ...) -> None: ...
class RawPacketForwarderCommand(_message.Message):
__slots__ = ["gateway_id_legacy", "gateway_id", "payload"]
__slots__ = ("gateway_id_legacy", "gateway_id", "payload")
GATEWAY_ID_LEGACY_FIELD_NUMBER: _ClassVar[int]
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
PAYLOAD_FIELD_NUMBER: _ClassVar[int]
@ -587,9 +587,9 @@ class RawPacketForwarderCommand(_message.Message):
def __init__(self, gateway_id_legacy: _Optional[bytes] = ..., gateway_id: _Optional[str] = ..., payload: _Optional[bytes] = ...) -> None: ...
class ConnState(_message.Message):
__slots__ = ["gateway_id_legacy", "gateway_id", "state"]
__slots__ = ("gateway_id_legacy", "gateway_id", "state")
class State(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
OFFLINE: _ClassVar[ConnState.State]
ONLINE: _ClassVar[ConnState.State]
OFFLINE: ConnState.State

File diff suppressed because one or more lines are too long

View File

@ -11,13 +11,13 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class LogLevel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
INFO: _ClassVar[LogLevel]
WARNING: _ClassVar[LogLevel]
ERROR: _ClassVar[LogLevel]
class LogCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
__slots__ = []
__slots__ = ()
UNKNOWN: _ClassVar[LogCode]
DOWNLINK_PAYLOAD_SIZE: _ClassVar[LogCode]
UPLINK_CODEC: _ClassVar[LogCode]
@ -45,9 +45,9 @@ RELAY_NEW_END_DEVICE: LogCode
F_CNT_DOWN: LogCode
class DeviceInfo(_message.Message):
__slots__ = ["tenant_id", "tenant_name", "application_id", "application_name", "device_profile_id", "device_profile_name", "device_name", "dev_eui", "device_class_enabled", "tags"]
__slots__ = ("tenant_id", "tenant_name", "application_id", "application_name", "device_profile_id", "device_profile_name", "device_name", "dev_eui", "device_class_enabled", "tags")
class TagsEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -76,7 +76,7 @@ class DeviceInfo(_message.Message):
def __init__(self, tenant_id: _Optional[str] = ..., tenant_name: _Optional[str] = ..., application_id: _Optional[str] = ..., application_name: _Optional[str] = ..., device_profile_id: _Optional[str] = ..., device_profile_name: _Optional[str] = ..., device_name: _Optional[str] = ..., dev_eui: _Optional[str] = ..., device_class_enabled: _Optional[_Union[_common_pb2.DeviceClass, str]] = ..., tags: _Optional[_Mapping[str, str]] = ...) -> None: ...
class UplinkRelayRxInfo(_message.Message):
__slots__ = ["dev_eui", "frequency", "dr", "snr", "rssi", "wor_channel"]
__slots__ = ("dev_eui", "frequency", "dr", "snr", "rssi", "wor_channel")
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
FREQUENCY_FIELD_NUMBER: _ClassVar[int]
DR_FIELD_NUMBER: _ClassVar[int]
@ -91,16 +91,8 @@ class UplinkRelayRxInfo(_message.Message):
wor_channel: int
def __init__(self, dev_eui: _Optional[str] = ..., frequency: _Optional[int] = ..., dr: _Optional[int] = ..., snr: _Optional[int] = ..., rssi: _Optional[int] = ..., wor_channel: _Optional[int] = ...) -> None: ...
class JoinServerContext(_message.Message):
__slots__ = ["session_key_id", "app_s_key"]
SESSION_KEY_ID_FIELD_NUMBER: _ClassVar[int]
APP_S_KEY_FIELD_NUMBER: _ClassVar[int]
session_key_id: str
app_s_key: _common_pb2.KeyEnvelope
def __init__(self, session_key_id: _Optional[str] = ..., app_s_key: _Optional[_Union[_common_pb2.KeyEnvelope, _Mapping]] = ...) -> None: ...
class UplinkEvent(_message.Message):
__slots__ = ["deduplication_id", "time", "device_info", "dev_addr", "adr", "dr", "f_cnt", "f_port", "confirmed", "data", "object", "rx_info", "tx_info", "relay_rx_info", "join_server_context"]
__slots__ = ("deduplication_id", "time", "device_info", "dev_addr", "adr", "dr", "f_cnt", "f_port", "confirmed", "data", "object", "rx_info", "tx_info", "relay_rx_info", "join_server_context")
DEDUPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
TIME_FIELD_NUMBER: _ClassVar[int]
DEVICE_INFO_FIELD_NUMBER: _ClassVar[int]
@ -130,11 +122,11 @@ class UplinkEvent(_message.Message):
rx_info: _containers.RepeatedCompositeFieldContainer[_gw_pb2.UplinkRxInfo]
tx_info: _gw_pb2.UplinkTxInfo
relay_rx_info: UplinkRelayRxInfo
join_server_context: JoinServerContext
def __init__(self, deduplication_id: _Optional[str] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., device_info: _Optional[_Union[DeviceInfo, _Mapping]] = ..., dev_addr: _Optional[str] = ..., adr: bool = ..., dr: _Optional[int] = ..., f_cnt: _Optional[int] = ..., f_port: _Optional[int] = ..., confirmed: bool = ..., data: _Optional[bytes] = ..., object: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., rx_info: _Optional[_Iterable[_Union[_gw_pb2.UplinkRxInfo, _Mapping]]] = ..., tx_info: _Optional[_Union[_gw_pb2.UplinkTxInfo, _Mapping]] = ..., relay_rx_info: _Optional[_Union[UplinkRelayRxInfo, _Mapping]] = ..., join_server_context: _Optional[_Union[JoinServerContext, _Mapping]] = ...) -> None: ...
join_server_context: _common_pb2.JoinServerContext
def __init__(self, deduplication_id: _Optional[str] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., device_info: _Optional[_Union[DeviceInfo, _Mapping]] = ..., dev_addr: _Optional[str] = ..., adr: bool = ..., dr: _Optional[int] = ..., f_cnt: _Optional[int] = ..., f_port: _Optional[int] = ..., confirmed: bool = ..., data: _Optional[bytes] = ..., object: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., rx_info: _Optional[_Iterable[_Union[_gw_pb2.UplinkRxInfo, _Mapping]]] = ..., tx_info: _Optional[_Union[_gw_pb2.UplinkTxInfo, _Mapping]] = ..., relay_rx_info: _Optional[_Union[UplinkRelayRxInfo, _Mapping]] = ..., join_server_context: _Optional[_Union[_common_pb2.JoinServerContext, _Mapping]] = ...) -> None: ...
class JoinEvent(_message.Message):
__slots__ = ["deduplication_id", "time", "device_info", "dev_addr", "relay_rx_info", "join_server_context"]
__slots__ = ("deduplication_id", "time", "device_info", "dev_addr", "relay_rx_info", "join_server_context")
DEDUPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
TIME_FIELD_NUMBER: _ClassVar[int]
DEVICE_INFO_FIELD_NUMBER: _ClassVar[int]
@ -146,11 +138,11 @@ class JoinEvent(_message.Message):
device_info: DeviceInfo
dev_addr: str
relay_rx_info: UplinkRelayRxInfo
join_server_context: JoinServerContext
def __init__(self, deduplication_id: _Optional[str] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., device_info: _Optional[_Union[DeviceInfo, _Mapping]] = ..., dev_addr: _Optional[str] = ..., relay_rx_info: _Optional[_Union[UplinkRelayRxInfo, _Mapping]] = ..., join_server_context: _Optional[_Union[JoinServerContext, _Mapping]] = ...) -> None: ...
join_server_context: _common_pb2.JoinServerContext
def __init__(self, deduplication_id: _Optional[str] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., device_info: _Optional[_Union[DeviceInfo, _Mapping]] = ..., dev_addr: _Optional[str] = ..., relay_rx_info: _Optional[_Union[UplinkRelayRxInfo, _Mapping]] = ..., join_server_context: _Optional[_Union[_common_pb2.JoinServerContext, _Mapping]] = ...) -> None: ...
class AckEvent(_message.Message):
__slots__ = ["deduplication_id", "time", "device_info", "queue_item_id", "acknowledged", "f_cnt_down"]
__slots__ = ("deduplication_id", "time", "device_info", "queue_item_id", "acknowledged", "f_cnt_down")
DEDUPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
TIME_FIELD_NUMBER: _ClassVar[int]
DEVICE_INFO_FIELD_NUMBER: _ClassVar[int]
@ -166,7 +158,7 @@ class AckEvent(_message.Message):
def __init__(self, deduplication_id: _Optional[str] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., device_info: _Optional[_Union[DeviceInfo, _Mapping]] = ..., queue_item_id: _Optional[str] = ..., acknowledged: bool = ..., f_cnt_down: _Optional[int] = ...) -> None: ...
class TxAckEvent(_message.Message):
__slots__ = ["downlink_id", "time", "device_info", "queue_item_id", "f_cnt_down", "gateway_id", "tx_info"]
__slots__ = ("downlink_id", "time", "device_info", "queue_item_id", "f_cnt_down", "gateway_id", "tx_info")
DOWNLINK_ID_FIELD_NUMBER: _ClassVar[int]
TIME_FIELD_NUMBER: _ClassVar[int]
DEVICE_INFO_FIELD_NUMBER: _ClassVar[int]
@ -184,9 +176,9 @@ class TxAckEvent(_message.Message):
def __init__(self, downlink_id: _Optional[int] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., device_info: _Optional[_Union[DeviceInfo, _Mapping]] = ..., queue_item_id: _Optional[str] = ..., f_cnt_down: _Optional[int] = ..., gateway_id: _Optional[str] = ..., tx_info: _Optional[_Union[_gw_pb2.DownlinkTxInfo, _Mapping]] = ...) -> None: ...
class LogEvent(_message.Message):
__slots__ = ["time", "device_info", "level", "code", "description", "context"]
__slots__ = ("time", "device_info", "level", "code", "description", "context")
class ContextEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
@ -207,7 +199,7 @@ class LogEvent(_message.Message):
def __init__(self, time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., device_info: _Optional[_Union[DeviceInfo, _Mapping]] = ..., level: _Optional[_Union[LogLevel, str]] = ..., code: _Optional[_Union[LogCode, str]] = ..., description: _Optional[str] = ..., context: _Optional[_Mapping[str, str]] = ...) -> None: ...
class StatusEvent(_message.Message):
__slots__ = ["deduplication_id", "time", "device_info", "margin", "external_power_source", "battery_level_unavailable", "battery_level"]
__slots__ = ("deduplication_id", "time", "device_info", "margin", "external_power_source", "battery_level_unavailable", "battery_level")
DEDUPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
TIME_FIELD_NUMBER: _ClassVar[int]
DEVICE_INFO_FIELD_NUMBER: _ClassVar[int]
@ -225,7 +217,7 @@ class StatusEvent(_message.Message):
def __init__(self, deduplication_id: _Optional[str] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., device_info: _Optional[_Union[DeviceInfo, _Mapping]] = ..., margin: _Optional[int] = ..., external_power_source: bool = ..., battery_level_unavailable: bool = ..., battery_level: _Optional[float] = ...) -> None: ...
class LocationEvent(_message.Message):
__slots__ = ["deduplication_id", "time", "device_info", "location"]
__slots__ = ("deduplication_id", "time", "device_info", "location")
DEDUPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
TIME_FIELD_NUMBER: _ClassVar[int]
DEVICE_INFO_FIELD_NUMBER: _ClassVar[int]
@ -237,7 +229,7 @@ class LocationEvent(_message.Message):
def __init__(self, deduplication_id: _Optional[str] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., device_info: _Optional[_Union[DeviceInfo, _Mapping]] = ..., location: _Optional[_Union[_common_pb2.Location, _Mapping]] = ...) -> None: ...
class IntegrationEvent(_message.Message):
__slots__ = ["deduplication_id", "time", "device_info", "integration_name", "event_type", "object"]
__slots__ = ("deduplication_id", "time", "device_info", "integration_name", "event_type", "object")
DEDUPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
TIME_FIELD_NUMBER: _ClassVar[int]
DEVICE_INFO_FIELD_NUMBER: _ClassVar[int]
@ -253,7 +245,7 @@ class IntegrationEvent(_message.Message):
def __init__(self, deduplication_id: _Optional[str] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., device_info: _Optional[_Union[DeviceInfo, _Mapping]] = ..., integration_name: _Optional[str] = ..., event_type: _Optional[str] = ..., object: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ...
class DownlinkCommand(_message.Message):
__slots__ = ["id", "dev_eui", "confirmed", "f_port", "data", "object"]
__slots__ = ("id", "dev_eui", "confirmed", "f_port", "data", "object")
ID_FIELD_NUMBER: _ClassVar[int]
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
CONFIRMED_FIELD_NUMBER: _ClassVar[int]

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/stream/api_request.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -22,11 +23,10 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.stream.api_request_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\030io.chirpstack.api.streamB\017ApiRequestProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/stream\252\002\021Chirpstack.Stream'
_APIREQUESTLOG_METADATAENTRY._options = None
_APIREQUESTLOG_METADATAENTRY._serialized_options = b'8\001'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\030io.chirpstack.api.streamB\017ApiRequestProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/stream\252\002\021Chirpstack.Stream'
_globals['_APIREQUESTLOG_METADATAENTRY']._options = None
_globals['_APIREQUESTLOG_METADATAENTRY']._serialized_options = b'8\001'
_globals['_APIREQUESTLOG']._serialized_start=149
_globals['_APIREQUESTLOG']._serialized_end=301
_globals['_APIREQUESTLOG_METADATAENTRY']._serialized_start=254

View File

@ -9,9 +9,9 @@ from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Opti
DESCRIPTOR: _descriptor.FileDescriptor
class ApiRequestLog(_message.Message):
__slots__ = ["service", "method", "metadata"]
__slots__ = ("service", "method", "metadata")
class MetadataEntry(_message.Message):
__slots__ = ["key", "value"]
__slots__ = ("key", "value")
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/stream/backend_interfaces.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -20,9 +21,8 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.stream.backend_interfaces_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\030io.chirpstack.api.streamB\026BackendInterfacesProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/stream\252\002\021Chirpstack.Stream'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\030io.chirpstack.api.streamB\026BackendInterfacesProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/stream\252\002\021Chirpstack.Stream'
_globals['_BACKENDINTERFACESREQUEST']._serialized_start=92
_globals['_BACKENDINTERFACESREQUEST']._serialized_end=335
# @@protoc_insertion_point(module_scope)

View File

@ -6,7 +6,7 @@ from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Opti
DESCRIPTOR: _descriptor.FileDescriptor
class BackendInterfacesRequest(_message.Message):
__slots__ = ["sender_id", "receiver_id", "time", "transaction_id", "message_type", "result_code", "request_body", "request_error", "response_body"]
__slots__ = ("sender_id", "receiver_id", "time", "transaction_id", "message_type", "result_code", "request_body", "request_error", "response_body")
SENDER_ID_FIELD_NUMBER: _ClassVar[int]
RECEIVER_ID_FIELD_NUMBER: _ClassVar[int]
TIME_FIELD_NUMBER: _ClassVar[int]

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/stream/frame.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -22,9 +23,8 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.stream.frame_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\030io.chirpstack.api.streamB\nFrameProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/stream\252\002\021Chirpstack.Stream'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\030io.chirpstack.api.streamB\nFrameProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/stream\252\002\021Chirpstack.Stream'
_globals['_UPLINKFRAMELOG']._serialized_start=143
_globals['_UPLINKFRAMELOG']._serialized_end=415
_globals['_DOWNLINKFRAMELOG']._serialized_start=418

View File

@ -9,7 +9,7 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class UplinkFrameLog(_message.Message):
__slots__ = ["phy_payload", "tx_info", "rx_info", "m_type", "dev_addr", "dev_eui", "time", "plaintext_f_opts", "plaintext_frm_payload"]
__slots__ = ("phy_payload", "tx_info", "rx_info", "m_type", "dev_addr", "dev_eui", "time", "plaintext_f_opts", "plaintext_frm_payload")
PHY_PAYLOAD_FIELD_NUMBER: _ClassVar[int]
TX_INFO_FIELD_NUMBER: _ClassVar[int]
RX_INFO_FIELD_NUMBER: _ClassVar[int]
@ -31,7 +31,7 @@ class UplinkFrameLog(_message.Message):
def __init__(self, phy_payload: _Optional[bytes] = ..., tx_info: _Optional[_Union[_gw_pb2.UplinkTxInfo, _Mapping]] = ..., rx_info: _Optional[_Iterable[_Union[_gw_pb2.UplinkRxInfo, _Mapping]]] = ..., m_type: _Optional[_Union[_common_pb2.MType, str]] = ..., dev_addr: _Optional[str] = ..., dev_eui: _Optional[str] = ..., time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., plaintext_f_opts: bool = ..., plaintext_frm_payload: bool = ...) -> None: ...
class DownlinkFrameLog(_message.Message):
__slots__ = ["time", "phy_payload", "tx_info", "downlink_id", "gateway_id", "m_type", "dev_addr", "dev_eui", "plaintext_f_opts", "plaintext_frm_payload"]
__slots__ = ("time", "phy_payload", "tx_info", "downlink_id", "gateway_id", "m_type", "dev_addr", "dev_eui", "plaintext_f_opts", "plaintext_frm_payload")
TIME_FIELD_NUMBER: _ClassVar[int]
PHY_PAYLOAD_FIELD_NUMBER: _ClassVar[int]
TX_INFO_FIELD_NUMBER: _ClassVar[int]

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: chirpstack-api/stream/meta.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
@ -21,9 +22,8 @@ _globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.stream.meta_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\030io.chirpstack.api.streamB\tMetaProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/stream\252\002\021Chirpstack.Stream'
_globals['DESCRIPTOR']._options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\030io.chirpstack.api.streamB\tMetaProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/stream\252\002\021Chirpstack.Stream'
_globals['_UPLINKMETA']._serialized_start=109
_globals['_UPLINKMETA']._serialized_end=349
_globals['_DOWNLINKMETA']._serialized_start=352

View File

@ -8,7 +8,7 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class UplinkMeta(_message.Message):
__slots__ = ["dev_eui", "tx_info", "rx_info", "phy_payload_byte_count", "mac_command_byte_count", "application_payload_byte_count", "message_type"]
__slots__ = ("dev_eui", "tx_info", "rx_info", "phy_payload_byte_count", "mac_command_byte_count", "application_payload_byte_count", "message_type")
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
TX_INFO_FIELD_NUMBER: _ClassVar[int]
RX_INFO_FIELD_NUMBER: _ClassVar[int]
@ -26,7 +26,7 @@ class UplinkMeta(_message.Message):
def __init__(self, dev_eui: _Optional[str] = ..., tx_info: _Optional[_Union[_gw_pb2.UplinkTxInfo, _Mapping]] = ..., rx_info: _Optional[_Iterable[_Union[_gw_pb2.UplinkRxInfo, _Mapping]]] = ..., phy_payload_byte_count: _Optional[int] = ..., mac_command_byte_count: _Optional[int] = ..., application_payload_byte_count: _Optional[int] = ..., message_type: _Optional[_Union[_common_pb2.MType, str]] = ...) -> None: ...
class DownlinkMeta(_message.Message):
__slots__ = ["dev_eui", "multicast_group_id", "tx_info", "phy_payload_byte_count", "mac_command_byte_count", "application_payload_byte_count", "message_type", "gateway_id"]
__slots__ = ("dev_eui", "multicast_group_id", "tx_info", "phy_payload_byte_count", "mac_command_byte_count", "application_payload_byte_count", "message_type", "gateway_id")
DEV_EUI_FIELD_NUMBER: _ClassVar[int]
MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int]
TX_INFO_FIELD_NUMBER: _ClassVar[int]

View File

@ -18,7 +18,7 @@ CLASSIFIERS = [
setup(
name='chirpstack-api',
version = "4.6.0-test.3",
version = "4.7.0",
url='https://github.com/brocaar/chirpstack-api',
author='Orne Brocaar',
author_email='info@brocaar.com',

57
api/rust/Cargo.lock generated vendored
View File

@ -149,6 +149,12 @@ version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
[[package]]
name = "byteorder"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
version = "1.4.0"
@ -172,8 +178,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chirpstack_api"
version = "4.6.0-test.3"
version = "4.7.0"
dependencies = [
"diesel",
"hex",
"pbjson",
"pbjson-build",
@ -196,6 +203,39 @@ dependencies = [
"num-traits",
]
[[package]]
name = "diesel"
version = "2.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62c6fcf842f17f8c78ecf7c81d75c5ce84436b41ee07e03f490fbb5f5a8731d8"
dependencies = [
"bitflags 2.4.0",
"byteorder",
"diesel_derives",
"itoa",
]
[[package]]
name = "diesel_derives"
version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef8337737574f55a468005a83499da720f20c65586241ffea339db9ecdfd2b44"
dependencies = [
"diesel_table_macro_syntax",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "diesel_table_macro_syntax"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5"
dependencies = [
"syn",
]
[[package]]
name = "dirs"
version = "5.0.1"
@ -457,15 +497,6 @@ dependencies = [
"hashbrown 0.14.0",
]
[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
dependencies = [
"either",
]
[[package]]
name = "itertools"
version = "0.11.0"
@ -590,7 +621,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2580e33f2292d34be285c5bc3dba5259542b083cfad6037b6d70345f24dcb735"
dependencies = [
"heck",
"itertools 0.11.0",
"itertools",
"prost",
"prost-types",
]
@ -701,7 +732,7 @@ checksum = "8bdf592881d821b83d471f8af290226c8d51402259e9bb5be7f9f8bdebbb11ac"
dependencies = [
"bytes",
"heck",
"itertools 0.10.5",
"itertools",
"log",
"multimap",
"once_cell",
@ -722,7 +753,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32"
dependencies = [
"anyhow",
"itertools 0.10.5",
"itertools",
"proc-macro2",
"quote",
"syn",

4
api/rust/Cargo.toml vendored
View File

@ -1,7 +1,7 @@
[package]
name = "chirpstack_api"
description = "ChirpStack Protobuf / gRPC API definitions."
version = "4.6.0-test.3"
version = "4.7.0"
authors = ["Orne Brocaar <info@brocaar.com>"]
license = "MIT"
homepage = "https://www.chirpstack.io"
@ -12,6 +12,7 @@ edition = "2021"
default = ["api", "json"]
api = ["tonic/transport", "tonic-build/transport", "tokio"]
json = ["pbjson", "pbjson-types", "serde"]
diesel = ["dep:diesel"]
internal = []
[dependencies]
@ -25,6 +26,7 @@ tokio = { version = "1.32", features = ["macros"], optional = true }
pbjson = { version = "0.6", optional = true }
pbjson-types = { version = "0.6", optional = true }
serde = { version = "1.0", optional = true }
diesel = { version = "2.1", features = ["postgres_backend"], optional = true }
[build-dependencies]
tonic-build = { version = "0.10", features = ["prost"], default-features = false }

22
api/rust/build.rs vendored
View File

@ -73,13 +73,20 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
}
// internal
tonic_build::configure()
.out_dir(out_dir.join("internal"))
.file_descriptor_set_path(out_dir.join("internal").join("proto_descriptor.bin"))
.compile_well_known_types(true)
.extern_path(".google.protobuf", well_known_types_path)
.extern_path(".common", "crate::common")
.compile(
{
let mut builder = tonic_build::configure()
.out_dir(out_dir.join("internal"))
.file_descriptor_set_path(out_dir.join("internal").join("proto_descriptor.bin"))
.compile_well_known_types(true)
.extern_path(".google.protobuf", well_known_types_path)
.extern_path(".common", "crate::common");
#[cfg(feature = "diesel")]
{
builder = builder.message_attribute("internal.DeviceSession", "#[derive(diesel::expression::AsExpression, diesel::deserialize::FromSqlRow)] #[diesel(sql_type = diesel::sql_types::Binary)]");
}
builder.compile(
&[cs_dir
.join("internal")
.join("internal.proto")
@ -90,6 +97,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
proto_dir.join("google").to_str().unwrap(),
],
)?;
}
#[cfg(feature = "json")]
{

View File

@ -418,6 +418,12 @@ message GetDeviceActivationRequest {
message GetDeviceActivationResponse {
// Device activation object.
DeviceActivation device_activation = 1;
// Join-Server context.
// A non-empty value indicatest that ChirpStack does not have access to
// the AppSKey and that the encryption / decryption of the payloads is
// the responsibility of the end-application.
common.JoinServerContext join_server_context = 2;
}
message GetRandomDevAddrRequest {

View File

@ -405,6 +405,11 @@ message DeviceProfile {
// 2 = 4
// 3 = 12
uint32 relay_overall_limit_bucket_size = 51;
// Allow roaming.
//
// If set to true, it means that the device is allowed to use roaming.
bool allow_roaming = 52;
}
message Measurement {

View File

@ -15,361 +15,402 @@ import "api/user.proto";
// InternalService is the service providing API endpoints for internal usage.
service InternalService {
// Log in a user
rpc Login(LoginRequest) returns (LoginResponse) {}
// Log in a user
rpc Login(LoginRequest) returns (LoginResponse) {}
// Get the current user's profile
rpc Profile(google.protobuf.Empty) returns (ProfileResponse) {}
// Get the current user's profile
rpc Profile(google.protobuf.Empty) returns (ProfileResponse) {}
// Perform a global search.
rpc GlobalSearch(GlobalSearchRequest) returns (GlobalSearchResponse) {}
// Perform a global search.
rpc GlobalSearch(GlobalSearchRequest) returns (GlobalSearchResponse) {}
// CreateApiKey creates the given API key.
rpc CreateApiKey(CreateApiKeyRequest) returns (CreateApiKeyResponse) {}
// CreateApiKey creates the given API key.
rpc CreateApiKey(CreateApiKeyRequest) returns (CreateApiKeyResponse) {}
// DeleteApiKey deletes the API key.
rpc DeleteApiKey(DeleteApiKeyRequest) returns (google.protobuf.Empty) {}
// DeleteApiKey deletes the API key.
rpc DeleteApiKey(DeleteApiKeyRequest) returns (google.protobuf.Empty) {}
// ListApiKeys lists the available API keys.
rpc ListApiKeys(ListApiKeysRequest) returns (ListApiKeysResponse) {}
// ListApiKeys lists the available API keys.
rpc ListApiKeys(ListApiKeysRequest) returns (ListApiKeysResponse) {}
// Get the global settings.
rpc Settings(google.protobuf.Empty) returns (SettingsResponse) {}
// Get the global settings.
rpc Settings(google.protobuf.Empty) returns (SettingsResponse) {}
// OpenId Connect login.
rpc OpenIdConnectLogin(OpenIdConnectLoginRequest) returns (OpenIdConnectLoginResponse) {}
// OpenId Connect login.
rpc OpenIdConnectLogin(OpenIdConnectLoginRequest)
returns (OpenIdConnectLoginResponse) {}
// GetDevicesSummary returns an aggregated summary of the devices.
rpc GetDevicesSummary(GetDevicesSummaryRequest) returns (GetDevicesSummaryResponse) {}
// OAuth2 login.
rpc OAuth2Login(OAuth2LoginRequest) returns (OAuth2LoginResponse) {}
// GetGatewaysSummary returns an aggregated summary of the gateways.
rpc GetGatewaysSummary(GetGatewaysSummaryRequest) returns (GetGatewaysSummaryResponse) {}
// GetDevicesSummary returns an aggregated summary of the devices.
rpc GetDevicesSummary(GetDevicesSummaryRequest)
returns (GetDevicesSummaryResponse) {}
// Stream frame for the given Gateway ID.
rpc StreamGatewayFrames(StreamGatewayFramesRequest) returns (stream LogItem) {}
// GetGatewaysSummary returns an aggregated summary of the gateways.
rpc GetGatewaysSummary(GetGatewaysSummaryRequest)
returns (GetGatewaysSummaryResponse) {}
// Stream frames for the given Device EUI.
rpc StreamDeviceFrames(StreamDeviceFramesRequest) returns (stream LogItem) {}
// Stream frame for the given Gateway ID.
rpc StreamGatewayFrames(StreamGatewayFramesRequest) returns (stream LogItem) {
}
// Stream events for the given Device EUI.
rpc StreamDeviceEvents(StreamDeviceEventsRequest) returns (stream LogItem) {}
// Stream frames for the given Device EUI.
rpc StreamDeviceFrames(StreamDeviceFramesRequest) returns (stream LogItem) {}
// ListRegions lists the available (configured) regions.
rpc ListRegions(google.protobuf.Empty) returns (ListRegionsResponse) {}
// Stream events for the given Device EUI.
rpc StreamDeviceEvents(StreamDeviceEventsRequest) returns (stream LogItem) {}
// GetRegion returns the region details for the given region.
rpc GetRegion(GetRegionRequest) returns (GetRegionResponse) {}
// ListRegions lists the available (configured) regions.
rpc ListRegions(google.protobuf.Empty) returns (ListRegionsResponse) {}
// GetRegion returns the region details for the given region.
rpc GetRegion(GetRegionRequest) returns (GetRegionResponse) {}
}
message ApiKey {
// API key ID.
// This value will be automatically generated on create.
string id = 1;
// API key ID.
// This value will be automatically generated on create.
string id = 1;
// Name.
string name = 2;
// Name.
string name = 2;
// Is global admin key.
bool is_admin = 3;
// Is global admin key.
bool is_admin = 3;
// Tenant ID.
// In case the API key is intended to manage resources under a single tenant.
string tenant_id = 4;
// Tenant ID.
// In case the API key is intended to manage resources under a single tenant.
string tenant_id = 4;
}
message CreateApiKeyRequest {
// The API key to create.
ApiKey api_key = 1;
// The API key to create.
ApiKey api_key = 1;
}
message CreateApiKeyResponse {
// API key ID.
string id = 1;
// API key ID.
string id = 1;
// API token for authentication API requests.
string token = 2;
// API token for authentication API requests.
string token = 2;
}
message DeleteApiKeyRequest {
// API key ID.
string id = 1;
// API key ID.
string id = 1;
}
message ListApiKeysRequest {
// Max number of items to return.
uint32 limit = 1;
// Max number of items to return.
uint32 limit = 1;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Return only admin keys.
bool is_admin = 3;
// Return only admin keys.
bool is_admin = 3;
// Filter on tenant ID.
string tenant_id = 4;
// Filter on tenant ID.
string tenant_id = 4;
}
message ListApiKeysResponse {
// Total number of API keys.
uint32 total_count = 1;
// Total number of API keys.
uint32 total_count = 1;
repeated ApiKey result = 2;
repeated ApiKey result = 2;
}
// Defines a tenant to which the user is associated.
message UserTenantLink {
// Created at timestamp.
google.protobuf.Timestamp created_at = 1;
// Created at timestamp.
google.protobuf.Timestamp created_at = 1;
// Last update timestamp.
google.protobuf.Timestamp updated_at = 2;
// Last update timestamp.
google.protobuf.Timestamp updated_at = 2;
// Tenant ID.
string tenant_id = 3;
// Tenant ID.
string tenant_id = 3;
// User is admin within the context of this tenant.
// There is no need to set the is_device_admin and is_gateway_admin flags.
bool is_admin = 4;
// User is admin within the context of this tenant.
// There is no need to set the is_device_admin and is_gateway_admin flags.
bool is_admin = 4;
// User is able to modify device related resources (applications,
// device-profiles, devices, multicast-groups).
bool is_device_admin = 5;
// User is able to modify device related resources (applications,
// device-profiles, devices, multicast-groups).
bool is_device_admin = 5;
// User is able to modify gateways.
bool is_gateway_admin = 6;
// User is able to modify gateways.
bool is_gateway_admin = 6;
}
message LoginRequest {
// Email of the user.
string email = 1;
// Email of the user.
string email = 1;
// Password of the user.
string password = 2;
// Password of the user.
string password = 2;
}
message LoginResponse {
// The JWT tag to be used to access chirpstack-application-server interfaces.
string jwt = 1;
// The JWT tag to be used to access chirpstack-application-server interfaces.
string jwt = 1;
}
message ProfileResponse {
// User object.
User user = 1;
// User object.
User user = 1;
// Tenants to which the user is associated.
repeated UserTenantLink tenants = 3;
// Tenants to which the user is associated.
repeated UserTenantLink tenants = 3;
}
message GlobalSearchRequest {
// Search query.
string search = 1;
// Search query.
string search = 1;
// Max number of results to return.
int64 limit = 2;
// Max number of results to return.
int64 limit = 2;
// Offset offset of the result-set (for pagination).
int64 offset = 3;
// Offset offset of the result-set (for pagination).
int64 offset = 3;
}
message GlobalSearchResponse {
repeated GlobalSearchResult result = 1;
}
message GlobalSearchResponse { repeated GlobalSearchResult result = 1; }
message GlobalSearchResult {
// Record kind.
string kind = 1;
// Record kind.
string kind = 1;
// Search score.
float score = 2;
// Search score.
float score = 2;
// Organization id.
string tenant_id = 3;
// Organization id.
string tenant_id = 3;
// Organization name.
string tenant_name = 4;
// Organization name.
string tenant_name = 4;
// Application id.
string application_id = 5;
// Application id.
string application_id = 5;
// Application name.
string application_name = 6;
// Application name.
string application_name = 6;
// Device DevEUI (hex encoded).
string device_dev_eui = 7;
// Device DevEUI (hex encoded).
string device_dev_eui = 7;
// Device name.
string device_name = 8;
// Device name.
string device_name = 8;
// Gateway MAC (hex encoded).
string gateway_id = 9;
// Gateway MAC (hex encoded).
string gateway_id = 9;
// Gateway name.
string gateway_name = 10;
// Gateway name.
string gateway_name = 10;
}
message SettingsResponse {
// OpenId Connect settings.
OpenIdConnect openid_connect = 1;
// OpenId Connect settings.
OpenIdConnect openid_connect = 1;
// OAuth2 settings.
OAuth2 oauth2 = 2;
}
message OpenIdConnect {
// Enable OpenId Connect authentication.
bool enabled = 1;
// Enable OpenId Connect authentication.
bool enabled = 1;
// Login url.
string login_url = 2 [json_name = "loginURL"];
// Login url.
string login_url = 2;
// Login label.
string login_label = 3;
// Login label.
string login_label = 3;
// Logout url.
string logout_url = 4 [json_name = "logoutURL"];
// Logout url.
string logout_url = 4;
// Login redirect.
bool login_redirect = 5;
}
message OAuth2 {
// OAuth2 is enabled.
bool enabled = 1;
// Login url.
string login_url = 2;
// Login label.
string login_label = 3;
// Logout url.
string logout_url = 4;
// Login redirect.
bool login_redirect = 5;
}
message OpenIdConnectLoginRequest {
// OpenId Connect callback code.
string code = 1;
// OpenId Connect callback code.
string code = 1;
// OpenId Connect callback state.
string state = 2;
// OpenId Connect callback state.
string state = 2;
}
message OpenIdConnectLoginResponse {
// Token to use for authentication.
string token = 1;
// Token to use for authentication.
string token = 1;
}
message OAuth2LoginRequest {
// OAuth2 callback code.
string code = 1;
// OAuth2 callback state.
string state = 2;
}
message OAuth2LoginResponse {
// Token to use for authentication.
string token = 1;
}
message GetDevicesSummaryRequest {
// Tenant ID (UUID).
string tenant_id = 1;
// Tenant ID (UUID).
string tenant_id = 1;
}
message GetDevicesSummaryResponse {
// Active count.
uint32 active_count = 1;
// Active count.
uint32 active_count = 1;
// Inactive count.
uint32 inactive_count = 2;
// Inactive count.
uint32 inactive_count = 2;
// per data-rate count.
// Devices that have never been seen are excluded.
map<uint32, uint32> dr_count = 3;
// per data-rate count.
// Devices that have never been seen are excluded.
map<uint32, uint32> dr_count = 3;
// Never seen count.
uint32 never_seen_count = 4;
// Never seen count.
uint32 never_seen_count = 4;
}
message GetGatewaysSummaryRequest {
// Tenant ID (UUID).
string tenant_id = 1;
// Tenant ID (UUID).
string tenant_id = 1;
}
message GetGatewaysSummaryResponse {
// Online count.
uint32 online_count = 1;
// Online count.
uint32 online_count = 1;
// Offline count.
uint32 offline_count = 2;
// Offline count.
uint32 offline_count = 2;
// Never seen count.
uint32 never_seen_count = 3;
// Never seen count.
uint32 never_seen_count = 3;
}
message LogItem {
// ID.
string id = 1;
// ID.
string id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Message.
string description = 3;
// Message.
string description = 3;
// Body.
string body = 4;
// Body.
string body = 4;
// Properties.
map<string, string> properties = 5;
// Properties.
map<string, string> properties = 5;
}
message StreamGatewayFramesRequest {
// Gateway ID (EUI64).
string gateway_id = 1;
// Gateway ID (EUI64).
string gateway_id = 1;
}
message StreamDeviceFramesRequest {
// Device EUI.
string dev_eui = 1;
// Device EUI.
string dev_eui = 1;
}
message StreamDeviceEventsRequest {
// Device EUI.
string dev_eui = 1;
// Device EUI.
string dev_eui = 1;
}
message ListRegionsResponse {
// Configured regions.
repeated RegionListItem regions = 1;
// Configured regions.
repeated RegionListItem regions = 1;
}
message RegionListItem {
// ID.
string id = 1;
// ID.
string id = 1;
// Region.
common.Region region = 2;
// Region.
common.Region region = 2;
// Description.
string description = 3;
// Description.
string description = 3;
}
message GetRegionRequest {
// Region ID.
string id = 1;
// Region ID.
string id = 1;
}
message GetRegionResponse {
// ID.
string id = 1;
// ID.
string id = 1;
// Region.
common.Region region = 2;
// Region.
common.Region region = 2;
// User information.
string user_info = 3;
// User information.
string user_info = 3;
// Uplink channels.
repeated RegionChannel uplink_channels = 4;
// Uplink channels.
repeated RegionChannel uplink_channels = 4;
// RX1 delay.
uint32 rx1_delay = 5;
// RX1 delay.
uint32 rx1_delay = 5;
// RX1 data-rate offset.
uint32 rx1_dr_offset = 6;
// RX1 data-rate offset.
uint32 rx1_dr_offset = 6;
// RX2 DR.
uint32 rx2_dr = 7;
// RX2 DR.
uint32 rx2_dr = 7;
// RX2 frequency.
uint32 rx2_frequency = 8;
// RX2 frequency.
uint32 rx2_frequency = 8;
// Class-B ping-slot DR.
uint32 class_b_ping_slot_dr = 9;
// Class-B ping-slot DR.
uint32 class_b_ping_slot_dr = 9;
// Class-B ping-slot frequency.
uint32 class_b_ping_slot_frequency = 10;
// Class-B ping-slot frequency.
uint32 class_b_ping_slot_frequency = 10;
// Region description.
string description = 11;
// Region description.
string description = 11;
}
message RegionChannel {
// Frequency (Hz).
uint32 frequency = 1;
// Frequency (Hz).
uint32 frequency = 1;
// Min DR.
uint32 dr_min = 2;
// Min DR.
uint32 dr_min = 2;
// Max DR.
uint32 dr_max = 3;
// Max DR.
uint32 dr_max = 3;
}

View File

@ -213,3 +213,12 @@ enum DeviceClass {
// Class-C.
CLASS_C = 2;
}
// Join-Server context.
message JoinServerContext {
// Session-key ID.
string session_key_id = 1;
// AppSKey envelope.
KeyEnvelope app_s_key = 2;
}

Some files were not shown because too many files have changed in this diff Show More