Compare commits

...

58 Commits

Author SHA1 Message Date
3f77203516 Bump version to 4.4.0-test.1 2023-05-30 14:08:45 +00:00
28e940d2b7 Update api generated code. 2023-05-30 14:51:15 +01:00
ca666da016 Bump aws-sdk-sns from 0.27.0 to 0.28.0 (#187)
Bumps [aws-sdk-sns](https://github.com/awslabs/aws-sdk-rust) from 0.27.0 to 0.28.0.
- [Release notes](https://github.com/awslabs/aws-sdk-rust/releases)
- [Changelog](https://github.com/awslabs/aws-sdk-rust/blob/main/CHANGELOG.md)
- [Commits](https://github.com/awslabs/aws-sdk-rust/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-sns
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-05-30 14:32:27 +01:00
b89221a932 Update dependencies + Diesel related changes. 2023-05-30 12:42:42 +00:00
2a88f45123 UI menu grammar & typo fixes. (#186)
Closes #185.
2023-05-30 12:22:16 +01:00
cf5ef8d061 Update README and Makefiles. 2023-05-30 12:13:52 +01:00
b0148da1bf Add Vagrantfile example. 2023-05-30 12:13:52 +01:00
e7dc3beafa Update dist workflow. 2023-05-30 12:13:52 +01:00
4f90c87784 Add dotenv for test dependency config. 2023-05-30 12:13:52 +01:00
c0d4270508 Update test workflow. 2023-05-30 12:13:52 +01:00
1f89f30878 Refactor build scripts for cross-rs based cross compiling. 2023-05-30 12:13:52 +01:00
cd3594fd96 Implement fully static ARMv7 build. 2023-05-30 12:13:52 +01:00
a162d04136 Implement fully static ARM64 build. 2023-05-30 12:13:52 +01:00
de114d5d22 Implement fully static AMD64 build. 2023-05-30 12:13:52 +01:00
9e15c48217 Add missing device search filter. 2023-05-29 16:26:03 +01:00
93ae75e3fa Update aws-sdk-sns dependency. 2023-05-22 12:59:09 +01:00
cf06e07654 Update dependencies. 2023-05-22 11:53:00 +01:00
cefe61072d Initial Relay support implementation (TS011).
Closes #59.
2023-05-22 11:04:13 +01:00
513aa7804d Add event prefix + arbitrary JSON options for IFTTT. 2023-05-19 14:43:39 +01:00
5146c87940 Fix netid_type method.
It would panic in case all bits are set (which would be
an invalid DevAddr prefix type).
2023-05-17 15:12:19 +01:00
e3383baa02 Add rust-toolchain.toml + shell.nix files.
This makes it easier to start a devshell without using Docker.
2023-05-17 14:46:13 +01:00
f32c5eb5af Bump lrwn_filters version. 2023-04-27 16:00:49 +01:00
f513cacab5 Add Clone and Copy derive to Prefix types. 2023-04-27 15:58:57 +01:00
cfadb9c78a Validate prefix size. 2023-04-27 14:25:35 +01:00
21896e65d7 Add crate for PhyPayload filtering.
This can be used by the ChirpStack UDP and MQTT Forwarder.

See also:
https://github.com/chirpstack/chirpstack-mqtt-forwarder/issues/25
2023-04-27 12:51:33 +01:00
0679f10fad Add feature flags to lrwn crate.
This avoids pulling and building unnecessary dependencies for simple
use-cases.
2023-04-27 10:37:34 +01:00
08d69502de Bump version to 4.3.2 2023-04-26 13:02:10 +01:00
683f59c063 Update Rust API dependencies. 2023-04-26 12:36:10 +01:00
0ef9f16f40 Re-enable v4_migrate option for now. 2023-04-26 12:27:12 +01:00
a5dd650510 Update dependencies. 2023-04-26 12:04:54 +01:00
de90b7d284 Enable redis tls-rustls feature.
Fixes #170.
2023-04-26 11:58:59 +01:00
fe0ef398ec Format Cargo.toml 2023-04-26 11:56:27 +01:00
58bd8eb5b4 Fix Rust fmt error. 2023-04-26 11:52:50 +01:00
0a294e41b5 Fix clippy feedback. 2023-04-13 22:06:44 +01:00
f71d30ca83 Re-implement frame and event download option. 2023-04-12 14:50:33 +01:00
ef0a97ab3d Log .send() error, rather than returning.
Closes https://github.com/chirpstack/chirpstack-docker/issues/80.
2023-04-11 15:10:08 +01:00
e93d3bc534 Update AWS SNS SDK crate. 2023-04-11 14:57:03 +01:00
31e359b314 Disable v3-v4 GW<>NS message migration and make config option.
By making this opt-in, we can reduce the overhead of supporting both v3
and v4 gateway messages. In case of v3 to v4 migration, one would
upgrade all ChirpStack Gateway Bridge instances to the latest v3
version, migrate ChirpStack as described here + enable this config flag:
https://www.chirpstack.io/docs/v3-v4-migration.html

Then upgrade ChirpStack Gateway Bridge to the latest v4 version followed
by disabling / removing this config flag (`v4_migrate`) again.
2023-04-11 14:19:07 +01:00
0a3fcaeb2d Bump version to 4.3.1 2023-04-10 12:24:52 +01:00
77051e8956 Update Rust API Cargo.lock. 2023-04-10 12:08:12 +01:00
3a9cb20c03 Update Dockerfiles. 2023-04-10 11:32:18 +01:00
1b96b4f91f Update caniuse-lite (ui). 2023-04-10 11:31:44 +01:00
101b155d91 Update dependencies. 2023-04-10 11:10:52 +01:00
3f4c262267 Bump webpack from 5.72.0 to 5.76.3 in /ui (#150)
Bumps [webpack](https://github.com/webpack/webpack) from 5.72.0 to 5.76.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.72.0...v5.76.3)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-10 10:14:19 +01:00
88939d4396 Update LoRa Cloud integration logo. 2023-04-06 16:27:43 +01:00
269b7f4d9d Fix gnss_assist_position enable toggle for gnss msg. 2023-04-06 16:26:45 +01:00
0ce60b789f Remove unused dependencies. 2023-03-28 22:11:06 +01:00
8fe0c7c6c2 Improve Rust SDK build flags / reduce dependencies.
This reduces the amount of dependencies in case not all features are
being used. E.g. tonic is only needed if using gRPC and pbjson,
pbjson-types and serde are only needed if using the JSON serialization.
2023-03-28 21:11:54 +01:00
4917de2b32 Earlier db initialization + change unwrap for error.
Closes #147.
2023-03-28 14:05:39 +01:00
d81af6b607 Bump dns-packet from 5.3.1 to 5.4.0 in /ui (#136)
Bumps [dns-packet](https://github.com/mafintosh/dns-packet) from 5.3.1 to 5.4.0.
- [Release notes](https://github.com/mafintosh/dns-packet/releases)
- [Changelog](https://github.com/mafintosh/dns-packet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mafintosh/dns-packet/compare/v5.3.1...5.4.0)

---
updated-dependencies:
- dependency-name: dns-packet
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-28 13:43:18 +01:00
cb6ac27ba4 Update dependencies. 2023-03-28 13:41:20 +01:00
1430c30ab3 Make using gateway location optional (LoRa Cloud). 2023-03-28 13:11:49 +01:00
cb49afeb01 Update LoRa Cloud form label. 2023-03-23 11:38:34 +00:00
9ba826963c Let serde use defaults for LoraCloudModemGeolocationServices.
This lets serde use default values in case a field is missing.
Specifically, this fixes the 'missing field `forward_f_ports`'
if migrating from an older LoRa Cloud configuration where the
`forward_f_ports` field was not yet present.
2023-03-23 11:01:35 +00:00
1f7fcc139d Update application.proto (#143) 2023-03-16 14:58:27 +00:00
8a496d9019 Fix Python README.
Closes #141.
2023-03-09 09:32:11 +00:00
ef97eccf62 Update LoRa Cloud integration. 2023-03-08 17:01:11 +00:00
50f8093c07 Bump version to 4.3.0 2023-03-08 09:20:50 +00:00
248 changed files with 36140 additions and 10426 deletions

View File

@ -1,5 +1,8 @@
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
[target.x86_64-unknown-linux-musl]
rustflags = ["-C", "target-feature=+crt-static", "-C", "link-arg=-s", "-C", "link-arg=-lc", "-C", "link-arg=-lgcc"]
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
[target.aarch64-unknown-linux-musl]
rustflags = ["-C", "target-feature=+crt-static", "-C", "link-arg=-s", "-C", "link-arg=-lc", "-C", "link-arg=-lgcc"]
[target.armv7-unknown-linux-musleabihf]
rustflags = ["-C", "target-feature=+crt-static", "-C", "link-arg=-s", "-C", "link-arg=-lc", "-C", "link-arg=-lgcc"]

View File

@ -1,6 +1,9 @@
.git
.cargo
.rust
**/target
api/rust/target
backend/target
lrwn/target
lrwn/filters/target
**/node_modules
Dockerfile

9
.env Normal file
View File

@ -0,0 +1,9 @@
# Diesel
DATABASE_URL=postgres://chirpstack_test:chirpstack_test@localhost/chirpstack_test?sslmode=disable
# Testing
TEST_POSTGRESQL_DSN="postgres://chirpstack_test:chirpstack_test@localhost/chirpstack_test?sslmode=disable"
TEST_REDIS_URL="redis://localhost/1"
TEST_MOSQUITTO_SERVER="tcp://localhost:1883/"
TEST_KAFKA_BROKER="localhost:9092"
TEST_AMQP_URL="amqp://guest:guest@localhost:5672"

View File

@ -14,22 +14,31 @@ jobs:
-
name: Checkout
uses: actions/checkout@v2
-
name: Install Nix
uses: cachix/install-nix-action@v20
with:
nix_path: nixpkgs=channel:nixos-22.11
-
name: Cargo cache
uses: actions/cache@v3
with:
path: .rust/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.lock') }}
-
name: Start dependency services
run: docker-compose up -d
-
name: Build UI
run: make build-ui
-
name: Run tests
run: make test
-
name: Make cache accessible to caching action
run: |
sudo chown $(whoami):$(whoami) -R .rust
run: nix-shell --command "make test"
dist:
needs: tests
@ -39,18 +48,31 @@ jobs:
-
name: Checkout
uses: actions/checkout@v2
-
name: Install Nix
uses: cachix/install-nix-action@v20
with:
nix_path: nixpkgs=channel:nixos-22.11
-
name: Cargo cache
uses: actions/cache@v3
with:
path: .rust/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-dist-${{ hashFiles('**/Cargo.lock') }}
-
name: Build UI
run: make build-ui
-
name: Install dev dependencies
run: nix-shell --command "make dev-dependencies"
-
name: Build distributables
run: make dist
run: nix-shell --command "make dist"
-
name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
@ -63,19 +85,6 @@ jobs:
run: |
aws s3 sync dist s3://builds.loraserver.io/chirpstack
if: startsWith(github.ref, 'refs/tags/v')
-
name: Make cache accessible to caching action
run: |
sudo chown $(whoami):$(whoami) -R .rust
docker:
needs: tests
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Docker meta
id: meta
@ -106,8 +115,9 @@ jobs:
id: docker_build
uses: docker/build-push-action@v2
with:
platforms: linux/amd64,linux/arm/v7,linux/arm64
context: .
push: ${{ startsWith(github.ref, 'refs/tags/v') }}
platforms: linux/amd64,linux/arm/v7,linux/arm64
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
-

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
.*
!/chirpstack/.rpm
!/.cargo
!/.env
# Log files
*.log

2117
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,7 @@
members = [
"chirpstack",
"lrwn",
"lrwn-filters",
"backend",
"api/rust",
]

11
Cross.toml Normal file
View File

@ -0,0 +1,11 @@
[build]
default-target="x86_64-unknown-linux-musl"
[target.x86_64-unknown-linux-musl]
dockerfile="cross/Dockerfile.x86_64-unknown-linux-musl"
[target.aarch64-unknown-linux-musl]
dockerfile="cross/Dockerfile.aarch64-unknown-linux-musl"
[target.armv7-unknown-linux-musleabihf]
dockerfile="cross/Dockerfile.armv7-unknown-linux-musleabihf"

View File

@ -1,82 +1,30 @@
# UI build stage
FROM --platform=$BUILDPLATFORM alpine:3.17.0 AS ui-build
ENV PROJECT_PATH=/chirpstack
RUN apk add --no-cache make git bash build-base nodejs npm yarn
RUN mkdir -p $PROJECT_PATH
COPY ./api/grpc-web $PROJECT_PATH/api/grpc-web
COPY ./ui $PROJECT_PATH/ui
RUN cd $PROJECT_PATH/ui && \
yarn install --network-timeout 600000 && \
yarn build
# ChirpStack build stage
FROM --platform=$BUILDPLATFORM rust:1.65.0-buster AS rust-build
ENV PROJECT_PATH=/chirpstack
RUN mkdir -p $PROJECT_PATH
RUN dpkg --add-architecture armhf
RUN dpkg --add-architecture arm64
RUN apt-get update && \
apt-get install -y \
make \
cmake \
git \
libpq-dev \
clang \
libclang-dev \
jq \
protobuf-compiler \
gcc-arm-linux-gnueabihf \
g++-arm-linux-gnueabihf \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
zlib1g-dev:armhf \
zlib1g-dev:arm64
RUN rustup target add armv7-unknown-linux-gnueabihf
RUN rustup target add aarch64-unknown-linux-gnu
# Copy binary stage
FROM --platform=$BUILDPLATFORM alpine:3.18.0 as binary
ARG TARGETPLATFORM
RUN mkdir -p /release/$TARGETPLATFORM
COPY . $PROJECT_PATH
COPY --from=ui-build $PROJECT_PATH/ui/build $PROJECT_PATH/ui/build
COPY target/x86_64-unknown-linux-musl/release/chirpstack /usr/bin/chirpstack-x86_64
COPY target/armv7-unknown-linux-musleabihf/release/chirpstack /usr/bin/chirpstack-armv7hf
COPY target/aarch64-unknown-linux-musl/release/chirpstack /usr/bin/chirpstack-aarch64
RUN case "$TARGETPLATFORM" in \
"linux/amd64") \
cd $PROJECT_PATH/chirpstack && make release-amd64; \
cp $PROJECT_PATH/target/release/chirpstack /release/$TARGETPLATFORM; \
cp /usr/bin/chirpstack-x86_64 /usr/bin/chirpstack; \
;; \
"linux/arm/v7") \
cd $PROJECT_PATH/chirpstack && make release-armv7hf; \
cp $PROJECT_PATH/target/armv7-unknown-linux-gnueabihf/release/chirpstack /release/$TARGETPLATFORM; \
cp /usr/bin/chirpstack-armv7hf /usr/bin/chirpstack; \
;; \
"linux/arm64") \
cd $PROJECT_PATH/chirpstack && make release-arm64; \
cp $PROJECT_PATH/target/aarch64-unknown-linux-gnu/release/chirpstack /release/$TARGETPLATFORM; \
cp /usr/bin/chirpstack-aarch64 /usr/bin/chirpstack; \
;; \
esac;
# Final stage
FROM debian:buster-slim as production
FROM alpine:3.18.0
RUN apt-get update && \
apt-get install -y \
ca-certificates \
libpq5 \
&& rm -rf /var/lib/apt/lists/*
RUN apk --no-cache add \
ca-certificates
ARG TARGETPLATFORM
COPY --from=rust-build /release/$TARGETPLATFORM/chirpstack /usr/bin/chirpstack
COPY --from=rust-build /chirpstack/chirpstack/configuration/* /etc/chirpstack/
COPY --from=binary /usr/bin/chirpstack /usr/bin/chirpstack
USER nobody:nogroup
ENTRYPOINT ["/usr/bin/chirpstack"]
ENTRYPOINT ["/usr/bin/chirpstack"]

View File

@ -1,42 +1,6 @@
FROM rust:1.65.0-buster
FROM nixos/nix
ENV PROJECT_PATH=/chirpstack
RUN mkdir -p $PROJECT_PATH
WORKDIR $PROJECT_PATH
RUN dpkg --add-architecture armhf
RUN dpkg --add-architecture arm64
RUN apt-get update && \
apt-get install -y \
make \
cmake \
git \
bash \
screen \
postgresql-client \
libpq-dev \
mosquitto-clients \
redis-tools \
rpm \
clang \
libclang-dev \
golang-cfssl \
jq \
protobuf-compiler \
gcc-arm-linux-gnueabihf \
g++-arm-linux-gnueabihf \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
zlib1g-dev:armhf \
zlib1g-dev:arm64
RUN rustup component add rustfmt clippy
RUN rustup target add armv7-unknown-linux-gnueabihf
RUN rustup target add aarch64-unknown-linux-gnu
RUN cargo install diesel_cli --version 2.0.0 --no-default-features --features postgres
RUN cargo install cargo-deb
RUN cargo install cargo-rpm
RUN cargo install cargo-bitbake
WORKDIR $PROJECT_PATH/chirpstack
ENTRYPOINT ["nix-shell"]

View File

@ -2,7 +2,15 @@
# Build distributable binaries.
dist:
docker-compose run --rm --no-deps chirpstack make dist
cd chirpstack && make dist
# Install dev dependencies
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.11.0
# Set the versions
version:
@ -10,6 +18,7 @@ version:
sed -i 's/^version.*/version = "$(VERSION)"/g' ./chirpstack/Cargo.toml
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' ./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
@ -34,23 +43,16 @@ build-ui:
docker-compose run --rm --no-deps chirpstack-ui make build
# Enters the devshell for ChirpStack development.
devshell:
docker-compose run --rm --service-ports --name chirpstack chirpstack bash
docker-devshell:
docker-compose run --rm --service-ports --name chirpstack chirpstack
# Enters the devshell for ChirpStack UI development.
devshell-ui:
docker-devshell-ui:
docker-compose run --rm --service-ports --name chirpstack-ui chirpstack-ui bash
# Runs the tests
test:
docker-compose run --rm chirpstack make test
docker-compose run --rm chirpstack make test-lrwn
# Starts the ChirpStack server (for testing only).
test-server: build-ui
docker-compose run --rm --service-ports chirpstack make test-server
# Update the Docker development images
update-images:
docker-compose build chirpstack
docker-compose build chirpstack-ui
cd backend && cargo test
cd chirpstack && make test
cd lrwn && make test
cd lrwn-filters && make test

View File

@ -9,10 +9,95 @@ cloud providers, databases and services commonly used for handling device data.
ChirpStack provides a gRPC based API that can be used to integrate or extend
ChirpStack.
## Documentation
## Documentation and binaries
Please refer to the [ChirpStack](https://www.chirpstack.io/) website for
documentation.
documentation and pre-compiled binaries.
## Building from source
### Requirements
Building ChirpStack requires:
* [Nix](https://nixos.org/download.html) (recommended) and
* [Docker](https://www.docker.com/)
#### Nix
Nix is used for defining the development environment which is used for local
development and for creating the final binaries.
If you do not have Nix installed and do not want to, then you could also look at
the dependencies specified in the `shell.nix` file and install these manually.
Alternatively use [Vagrant](https://www.vagrantup.com/) to setup a VM with Nix and Docker
installed. See also the provided `Vagrantfile`.
#### Docker
Docker is used by [cross-rs](https://github.com/cross-rs/cross) for cross-compiling,
as well as some of the `make` commands you will find in the ChirpStack project.
### Starting the development shell
Run the following command to start the development shell:
```bash
nix-shell
```
### Building the UI
To build the ChirpStack UI, execute the following command:
```
make build-ui
```
Note that the ChirpStack UI is built using
### Running ChirpStack tests
#### Start required services
ChirpStack requires several services like PostgresQL, Redis, Mosquitto, ...
to be running before you can run the tests.
Execute the following command to start these:
```bash
docker-compose up -d
```
#### Run tests
Run the following command to run the ChirpStack tests:
```bash
make test
```
### Building ChirpStack
Before compiling the binaries, you need to install some additional development
tools (for cross-compiling, packaging, e.d.). Execute the following command:
```bash
make dev-dependencies
```
Run the following command within the `./chirpstack` sub-folder:
```bash
# Build AMD64 debug build (optimized for build speed)
make debug-amd64
# Build AMD64 release build (optimized for performance and binary size)
make release-amd64
# Build all packages (all targets, .deb, .rpm and .tar.gz files)
make dist
```
## License

38
Vagrantfile vendored Normal file
View File

@ -0,0 +1,38 @@
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/jammy64"
config.vm.network "forwarded_port", guest: 8080, host: 8080
# Modify this to your needs
v.memory = 8192
v.cpus = 4
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y \
ca-certificates \
curl \
gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
usermod -aG docker vagrant
sh <(curl -L https://nixos.org/nix/install) --daemon
SHELL
end

View File

@ -20,6 +20,7 @@
<Protobuf Include="../proto/api/frame_log.proto" ProtoRoot="../proto/" OutputDir="Chirpstack/" CompileOutputs="false" AdditionalImportDirs="/googleproto" />
<Protobuf Include="../proto/api/multicast_group.proto" ProtoRoot="../proto/" OutputDir="Chirpstack/" CompileOutputs="false" AdditionalImportDirs="/googleproto" />
<Protobuf Include="../proto/api/request_log.proto" ProtoRoot="../proto/" OutputDir="Chirpstack/" CompileOutputs="false" AdditionalImportDirs="/googleproto" />
<Protobuf Include="../proto/api/relay.proto" ProtoRoot="../proto/" OutputDir="Chirpstack/" CompileOutputs="false" AdditionalImportDirs="/googleproto" />
<Protobuf Include="../proto/integration/integration.proto" ProtoRoot="../proto/" OutputDir="Chirpstack/" CompileOutputs="false" AdditionalImportDirs="/googleproto" />
<Protobuf Include="../proto/meta/meta.proto" ProtoRoot="../proto/" OutputDir="Chirpstack/" CompileOutputs="false" AdditionalImportDirs="/googleproto" />
<Protobuf Include="/googleproto/google/api/*.proto" ProtoRoot="/googleproto" OutputDir="Chirpstack/" CompileOutputs="false" />
@ -34,4 +35,4 @@
</PackageReference>
</ItemGroup>
</Project>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,8 @@ using grpc = global::Grpc.Core;
namespace Chirpstack.Api {
/// <summary>
/// ApplicationService is the service providing API methods for managing applications.
/// ApplicationService is the service providing API methods for managing
/// applications.
/// </summary>
public static partial class ApplicationService
{

View File

@ -27,146 +27,146 @@ namespace Chirpstack.Api {
"ChBhcGkvZGV2aWNlLnByb3RvEgNhcGkaE2NvbW1vbi9jb21tb24ucHJvdG8a",
"HGdvb2dsZS9hcGkvYW5ub3RhdGlvbnMucHJvdG8aH2dvb2dsZS9wcm90b2J1",
"Zi90aW1lc3RhbXAucHJvdG8aHGdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJv",
"dG8aG2dvb2dsZS9wcm90b2J1Zi9lbXB0eS5wcm90byLQAgoGRGV2aWNlEg8K",
"dG8aG2dvb2dsZS9wcm90b2J1Zi9lbXB0eS5wcm90byLiAgoGRGV2aWNlEg8K",
"B2Rldl9ldWkYASABKAkSDAoEbmFtZRgCIAEoCRITCgtkZXNjcmlwdGlvbhgD",
"IAEoCRIWCg5hcHBsaWNhdGlvbl9pZBgEIAEoCRIZChFkZXZpY2VfcHJvZmls",
"ZV9pZBgFIAEoCRIXCg9za2lwX2ZjbnRfY2hlY2sYBiABKAgSEwoLaXNfZGlz",
"YWJsZWQYByABKAgSLQoJdmFyaWFibGVzGAggAygLMhouYXBpLkRldmljZS5W",
"YXJpYWJsZXNFbnRyeRIjCgR0YWdzGAkgAygLMhUuYXBpLkRldmljZS5UYWdz",
"RW50cnkaMAoOVmFyaWFibGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVl",
"GAIgASgJOgI4ARorCglUYWdzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVl",
"GAIgASgJOgI4ASJUCgxEZXZpY2VTdGF0dXMSDgoGbWFyZ2luGAEgASgFEh0K",
"FWV4dGVybmFsX3Bvd2VyX3NvdXJjZRgCIAEoCBIVCg1iYXR0ZXJ5X2xldmVs",
"GAMgASgCIrgCCg5EZXZpY2VMaXN0SXRlbRIPCgdkZXZfZXVpGAEgASgJEi4K",
"CmNyZWF0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1w",
"Ei4KCnVwZGF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0",
"YW1wEjAKDGxhc3Rfc2Vlbl9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5U",
"aW1lc3RhbXASDAoEbmFtZRgFIAEoCRITCgtkZXNjcmlwdGlvbhgGIAEoCRIZ",
"ChFkZXZpY2VfcHJvZmlsZV9pZBgHIAEoCRIbChNkZXZpY2VfcHJvZmlsZV9u",
"YW1lGAggASgJEigKDWRldmljZV9zdGF0dXMYCSABKAsyES5hcGkuRGV2aWNl",
"U3RhdHVzIj8KCkRldmljZUtleXMSDwoHZGV2X2V1aRgBIAEoCRIPCgdud2tf",
"a2V5GAIgASgJEg8KB2FwcF9rZXkYAyABKAkiMgoTQ3JlYXRlRGV2aWNlUmVx",
"dWVzdBIbCgZkZXZpY2UYASABKAsyCy5hcGkuRGV2aWNlIiMKEEdldERldmlj",
"ZVJlcXVlc3QSDwoHZGV2X2V1aRgBIAEoCSLsAQoRR2V0RGV2aWNlUmVzcG9u",
"c2USGwoGZGV2aWNlGAEgASgLMgsuYXBpLkRldmljZRIuCgpjcmVhdGVkX2F0",
"GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVk",
"X2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxsYXN0",
"X3NlZW5fYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEigK",
"DWRldmljZV9zdGF0dXMYBSABKAsyES5hcGkuRGV2aWNlU3RhdHVzIjIKE1Vw",
"ZGF0ZURldmljZVJlcXVlc3QSGwoGZGV2aWNlGAEgASgLMgsuYXBpLkRldmlj",
"ZSImChNEZWxldGVEZXZpY2VSZXF1ZXN0Eg8KB2Rldl9ldWkYASABKAkidwoS",
"TGlzdERldmljZXNSZXF1ZXN0Eg0KBWxpbWl0GAEgASgNEg4KBm9mZnNldBgC",
"IAEoDRIOCgZzZWFyY2gYAyABKAkSFgoOYXBwbGljYXRpb25faWQYBCABKAkS",
"GgoSbXVsdGljYXN0X2dyb3VwX2lkGAUgASgJIk8KE0xpc3REZXZpY2VzUmVz",
"cG9uc2USEwoLdG90YWxfY291bnQYASABKA0SIwoGcmVzdWx0GAIgAygLMhMu",
"YXBpLkRldmljZUxpc3RJdGVtIj8KF0NyZWF0ZURldmljZUtleXNSZXF1ZXN0",
"EiQKC2RldmljZV9rZXlzGAEgASgLMg8uYXBpLkRldmljZUtleXMiJwoUR2V0",
"RGV2aWNlS2V5c1JlcXVlc3QSDwoHZGV2X2V1aRgBIAEoCSKdAQoVR2V0RGV2",
"aWNlS2V5c1Jlc3BvbnNlEiQKC2RldmljZV9rZXlzGAEgASgLMg8uYXBpLkRl",
"dmljZUtleXMSLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1",
"Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90",
"b2J1Zi5UaW1lc3RhbXAiPwoXVXBkYXRlRGV2aWNlS2V5c1JlcXVlc3QSJAoL",
"ZGV2aWNlX2tleXMYASABKAsyDy5hcGkuRGV2aWNlS2V5cyIqChdEZWxldGVE",
"ZXZpY2VLZXlzUmVxdWVzdBIPCgdkZXZfZXVpGAEgASgJIs8BChBEZXZpY2VB",
"Y3RpdmF0aW9uEg8KB2Rldl9ldWkYASABKAkSEAoIZGV2X2FkZHIYAiABKAkS",
"EQoJYXBwX3Nfa2V5GAMgASgJEhUKDW53a19zX2VuY19rZXkYBCABKAkSFwoP",
"c19ud2tfc19pbnRfa2V5GAggASgJEhcKD2ZfbndrX3NfaW50X2tleRgJIAEo",
"CRIQCghmX2NudF91cBgFIAEoDRIUCgxuX2ZfY250X2Rvd24YBiABKA0SFAoM",
"YV9mX2NudF9kb3duGAogASgNIkkKFUFjdGl2YXRlRGV2aWNlUmVxdWVzdBIw",
"ChFkZXZpY2VfYWN0aXZhdGlvbhgBIAEoCzIVLmFwaS5EZXZpY2VBY3RpdmF0",
"aW9uIioKF0RlYWN0aXZhdGVEZXZpY2VSZXF1ZXN0Eg8KB2Rldl9ldWkYASAB",
"KAkiLQoaR2V0RGV2aWNlQWN0aXZhdGlvblJlcXVlc3QSDwoHZGV2X2V1aRgB",
"IAEoCSJPChtHZXREZXZpY2VBY3RpdmF0aW9uUmVzcG9uc2USMAoRZGV2aWNl",
"X2FjdGl2YXRpb24YASABKAsyFS5hcGkuRGV2aWNlQWN0aXZhdGlvbiIqChdH",
"ZXRSYW5kb21EZXZBZGRyUmVxdWVzdBIPCgdkZXZfZXVpGAEgASgJIiwKGEdl",
"dFJhbmRvbURldkFkZHJSZXNwb25zZRIQCghkZXZfYWRkchgBIAEoCSKoAQoX",
"R2V0RGV2aWNlTWV0cmljc1JlcXVlc3QSDwoHZGV2X2V1aRgBIAEoCRIpCgVz",
"dGFydBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJwoDZW5k",
"GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIoCgthZ2dyZWdh",
"dGlvbhgEIAEoDjITLmNvbW1vbi5BZ2dyZWdhdGlvbiKTAgoYR2V0RGV2aWNl",
"TWV0cmljc1Jlc3BvbnNlEjsKB21ldHJpY3MYASADKAsyKi5hcGkuR2V0RGV2",
"aWNlTWV0cmljc1Jlc3BvbnNlLk1ldHJpY3NFbnRyeRI5CgZzdGF0ZXMYAiAD",
"KAsyKS5hcGkuR2V0RGV2aWNlTWV0cmljc1Jlc3BvbnNlLlN0YXRlc0VudHJ5",
"Gj4KDE1ldHJpY3NFbnRyeRILCgNrZXkYASABKAkSHQoFdmFsdWUYAiABKAsy",
"Di5jb21tb24uTWV0cmljOgI4ARo/CgtTdGF0ZXNFbnRyeRILCgNrZXkYASAB",
"KAkSHwoFdmFsdWUYAiABKAsyEC5hcGkuRGV2aWNlU3RhdGU6AjgBIioKC0Rl",
"dmljZVN0YXRlEgwKBG5hbWUYAiABKAkSDQoFdmFsdWUYAyABKAkirAEKG0dl",
"dERldmljZUxpbmtNZXRyaWNzUmVxdWVzdBIPCgdkZXZfZXVpGAEgASgJEikK",
"BXN0YXJ0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBInCgNl",
"bmQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEigKC2FnZ3Jl",
"Z2F0aW9uGAQgASgOMhMuY29tbW9uLkFnZ3JlZ2F0aW9uIvsBChxHZXREZXZp",
"Y2VMaW5rTWV0cmljc1Jlc3BvbnNlEiIKCnJ4X3BhY2tldHMYASABKAsyDi5j",
"b21tb24uTWV0cmljEh8KB2d3X3Jzc2kYAiABKAsyDi5jb21tb24uTWV0cmlj",
"Eh4KBmd3X3NuchgDIAEoCzIOLmNvbW1vbi5NZXRyaWMSKwoTcnhfcGFja2V0",
"c19wZXJfZnJlcRgEIAEoCzIOLmNvbW1vbi5NZXRyaWMSKQoRcnhfcGFja2V0",
"c19wZXJfZHIYBSABKAsyDi5jb21tb24uTWV0cmljEh4KBmVycm9ycxgGIAEo",
"CzIOLmNvbW1vbi5NZXRyaWMisAEKD0RldmljZVF1ZXVlSXRlbRIKCgJpZBgB",
"IAEoCRIPCgdkZXZfZXVpGAIgASgJEhEKCWNvbmZpcm1lZBgDIAEoCBIOCgZm",
"X3BvcnQYBCABKA0SDAoEZGF0YRgFIAEoDBInCgZvYmplY3QYBiABKAsyFy5n",
"b29nbGUucHJvdG9idWYuU3RydWN0EhIKCmlzX3BlbmRpbmcYByABKAgSEgoK",
"Zl9jbnRfZG93bhgIIAEoDSJJCh1FbnF1ZXVlRGV2aWNlUXVldWVJdGVtUmVx",
"dWVzdBIoCgpxdWV1ZV9pdGVtGAEgASgLMhQuYXBpLkRldmljZVF1ZXVlSXRl",
"bSIsCh5FbnF1ZXVlRGV2aWNlUXVldWVJdGVtUmVzcG9uc2USCgoCaWQYASAB",
"KAkiKgoXRmx1c2hEZXZpY2VRdWV1ZVJlcXVlc3QSDwoHZGV2X2V1aRgBIAEo",
"CSJBChpHZXREZXZpY2VRdWV1ZUl0ZW1zUmVxdWVzdBIPCgdkZXZfZXVpGAEg",
"ASgJEhIKCmNvdW50X29ubHkYAiABKAgiWAobR2V0RGV2aWNlUXVldWVJdGVt",
"c1Jlc3BvbnNlEhMKC3RvdGFsX2NvdW50GAEgASgNEiQKBnJlc3VsdBgCIAMo",
"CzIULmFwaS5EZXZpY2VRdWV1ZUl0ZW0iKAoVRmx1c2hEZXZOb25jZXNSZXF1",
"ZXN0Eg8KB2Rldl9ldWkYASABKAky0BAKDURldmljZVNlcnZpY2USUwoGQ3Jl",
"YXRlEhguYXBpLkNyZWF0ZURldmljZVJlcXVlc3QaFi5nb29nbGUucHJvdG9i",
"dWYuRW1wdHkiF4LT5JMCESIML2FwaS9kZXZpY2VzOgEqElQKA0dldBIVLmFw",
"aS5HZXREZXZpY2VSZXF1ZXN0GhYuYXBpLkdldERldmljZVJlc3BvbnNlIh6C",
"0+STAhgSFi9hcGkvZGV2aWNlcy97ZGV2X2V1aX0SZAoGVXBkYXRlEhguYXBp",
"LlVwZGF0ZURldmljZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHki",
"KILT5JMCIhodL2FwaS9kZXZpY2VzL3tkZXZpY2UuZGV2X2V1aX06ASoSWgoG",
"RGVsZXRlEhguYXBpLkRlbGV0ZURldmljZVJlcXVlc3QaFi5nb29nbGUucHJv",
"dG9idWYuRW1wdHkiHoLT5JMCGCoWL2FwaS9kZXZpY2VzL3tkZXZfZXVpfRJP",
"CgRMaXN0EhcuYXBpLkxpc3REZXZpY2VzUmVxdWVzdBoYLmFwaS5MaXN0RGV2",
"aWNlc1Jlc3BvbnNlIhSC0+STAg4SDC9hcGkvZGV2aWNlcxJ2CgpDcmVhdGVL",
"ZXlzEhwuYXBpLkNyZWF0ZURldmljZUtleXNSZXF1ZXN0GhYuZ29vZ2xlLnBy",
"b3RvYnVmLkVtcHR5IjKC0+STAiwiJy9hcGkvZGV2aWNlcy97ZGV2aWNlX2tl",
"eXMuZGV2X2V1aX0va2V5czoBKhJlCgdHZXRLZXlzEhkuYXBpLkdldERldmlj",
"ZUtleXNSZXF1ZXN0GhouYXBpLkdldERldmljZUtleXNSZXNwb25zZSIjgtPk",
"kwIdEhsvYXBpL2RldmljZXMve2Rldl9ldWl9L2tleXMSdgoKVXBkYXRlS2V5",
"cxIcLmFwaS5VcGRhdGVEZXZpY2VLZXlzUmVxdWVzdBoWLmdvb2dsZS5wcm90",
"b2J1Zi5FbXB0eSIygtPkkwIsGicvYXBpL2RldmljZXMve2RldmljZV9rZXlz",
"LmRldl9ldWl9L2tleXM6ASoSZwoKRGVsZXRlS2V5cxIcLmFwaS5EZWxldGVE",
"ZXZpY2VLZXlzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIjgtPk",
"kwIdKhsvYXBpL2RldmljZXMve2Rldl9ldWl9L2tleXMSbwoORmx1c2hEZXZO",
"b25jZXMSGi5hcGkuRmx1c2hEZXZOb25jZXNSZXF1ZXN0GhYuZ29vZ2xlLnBy",
"b3RvYnVmLkVtcHR5IimC0+STAiMqIS9hcGkvZGV2aWNlcy97ZGV2X2V1aX0v",
"ZGV2LW5vbmNlcxJ8CghBY3RpdmF0ZRIaLmFwaS5BY3RpdmF0ZURldmljZVJl",
"cXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiPILT5JMCNiIxL2FwaS9k",
"ZXZpY2VzL3tkZXZpY2VfYWN0aXZhdGlvbi5kZXZfZXVpfS9hY3RpdmF0ZToB",
"KhJtCgpEZWFjdGl2YXRlEhwuYXBpLkRlYWN0aXZhdGVEZXZpY2VSZXF1ZXN0",
"GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IimC0+STAiMqIS9hcGkvZGV2aWNl",
"cy97ZGV2X2V1aX0vYWN0aXZhdGlvbhJ9Cg1HZXRBY3RpdmF0aW9uEh8uYXBp",
"LkdldERldmljZUFjdGl2YXRpb25SZXF1ZXN0GiAuYXBpLkdldERldmljZUFj",
"dGl2YXRpb25SZXNwb25zZSIpgtPkkwIjEiEvYXBpL2RldmljZXMve2Rldl9l",
"dWl9L2FjdGl2YXRpb24SgwEKEEdldFJhbmRvbURldkFkZHISHC5hcGkuR2V0",
"UmFuZG9tRGV2QWRkclJlcXVlc3QaHS5hcGkuR2V0UmFuZG9tRGV2QWRkclJl",
"c3BvbnNlIjKC0+STAiwiKi9hcGkvZGV2aWNlcy97ZGV2X2V1aX0vZ2V0LXJh",
"bmRvbS1kZXYtYWRkchJxCgpHZXRNZXRyaWNzEhwuYXBpLkdldERldmljZU1l",
"dHJpY3NSZXF1ZXN0Gh0uYXBpLkdldERldmljZU1ldHJpY3NSZXNwb25zZSIm",
"gtPkkwIgEh4vYXBpL2RldmljZXMve2Rldl9ldWl9L21ldHJpY3MSggEKDkdl",
"dExpbmtNZXRyaWNzEiAuYXBpLkdldERldmljZUxpbmtNZXRyaWNzUmVxdWVz",
"dBohLmFwaS5HZXREZXZpY2VMaW5rTWV0cmljc1Jlc3BvbnNlIiuC0+STAiUS",
"Iy9hcGkvZGV2aWNlcy97ZGV2X2V1aX0vbGluay1tZXRyaWNzEoYBCgdFbnF1",
"ZXVlEiIuYXBpLkVucXVldWVEZXZpY2VRdWV1ZUl0ZW1SZXF1ZXN0GiMuYXBp",
"LkVucXVldWVEZXZpY2VRdWV1ZUl0ZW1SZXNwb25zZSIygtPkkwIsIicvYXBp",
"L2RldmljZXMve3F1ZXVlX2l0ZW0uZGV2X2V1aX0vcXVldWU6ASoSaAoKRmx1",
"c2hRdWV1ZRIcLmFwaS5GbHVzaERldmljZVF1ZXVlUmVxdWVzdBoWLmdvb2ds",
"ZS5wcm90b2J1Zi5FbXB0eSIkgtPkkwIeKhwvYXBpL2RldmljZXMve2Rldl9l",
"dWl9L3F1ZXVlEnMKCEdldFF1ZXVlEh8uYXBpLkdldERldmljZVF1ZXVlSXRl",
"bXNSZXF1ZXN0GiAuYXBpLkdldERldmljZVF1ZXVlSXRlbXNSZXNwb25zZSIk",
"gtPkkwIeEhwvYXBpL2RldmljZXMve2Rldl9ldWl9L3F1ZXVlQmMKEWlvLmNo",
"aXJwc3RhY2suYXBpQgtEZXZpY2VQcm90b1ABWi5naXRodWIuY29tL2NoaXJw",
"c3RhY2svY2hpcnBzdGFjay9hcGkvZ28vdjQvYXBpqgIOQ2hpcnBzdGFjay5B",
"cGliBnByb3RvMw=="));
"RW50cnkSEAoIam9pbl9ldWkYCiABKAkaMAoOVmFyaWFibGVzRW50cnkSCwoD",
"a2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARorCglUYWdzRW50cnkSCwoD",
"a2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJUCgxEZXZpY2VTdGF0dXMS",
"DgoGbWFyZ2luGAEgASgFEh0KFWV4dGVybmFsX3Bvd2VyX3NvdXJjZRgCIAEo",
"CBIVCg1iYXR0ZXJ5X2xldmVsGAMgASgCIrgCCg5EZXZpY2VMaXN0SXRlbRIP",
"CgdkZXZfZXVpGAEgASgJEi4KCmNyZWF0ZWRfYXQYAiABKAsyGi5nb29nbGUu",
"cHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYAyABKAsyGi5nb29n",
"bGUucHJvdG9idWYuVGltZXN0YW1wEjAKDGxhc3Rfc2Vlbl9hdBgEIAEoCzIa",
"Lmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDAoEbmFtZRgFIAEoCRITCgtk",
"ZXNjcmlwdGlvbhgGIAEoCRIZChFkZXZpY2VfcHJvZmlsZV9pZBgHIAEoCRIb",
"ChNkZXZpY2VfcHJvZmlsZV9uYW1lGAggASgJEigKDWRldmljZV9zdGF0dXMY",
"CSABKAsyES5hcGkuRGV2aWNlU3RhdHVzIj8KCkRldmljZUtleXMSDwoHZGV2",
"X2V1aRgBIAEoCRIPCgdud2tfa2V5GAIgASgJEg8KB2FwcF9rZXkYAyABKAki",
"MgoTQ3JlYXRlRGV2aWNlUmVxdWVzdBIbCgZkZXZpY2UYASABKAsyCy5hcGku",
"RGV2aWNlIiMKEEdldERldmljZVJlcXVlc3QSDwoHZGV2X2V1aRgBIAEoCSLs",
"AQoRR2V0RGV2aWNlUmVzcG9uc2USGwoGZGV2aWNlGAEgASgLMgsuYXBpLkRl",
"dmljZRIuCgpjcmVhdGVkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRp",
"bWVzdGFtcBIuCgp1cGRhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVm",
"LlRpbWVzdGFtcBIwCgxsYXN0X3NlZW5fYXQYBCABKAsyGi5nb29nbGUucHJv",
"dG9idWYuVGltZXN0YW1wEigKDWRldmljZV9zdGF0dXMYBSABKAsyES5hcGku",
"RGV2aWNlU3RhdHVzIjIKE1VwZGF0ZURldmljZVJlcXVlc3QSGwoGZGV2aWNl",
"GAEgASgLMgsuYXBpLkRldmljZSImChNEZWxldGVEZXZpY2VSZXF1ZXN0Eg8K",
"B2Rldl9ldWkYASABKAkidwoSTGlzdERldmljZXNSZXF1ZXN0Eg0KBWxpbWl0",
"GAEgASgNEg4KBm9mZnNldBgCIAEoDRIOCgZzZWFyY2gYAyABKAkSFgoOYXBw",
"bGljYXRpb25faWQYBCABKAkSGgoSbXVsdGljYXN0X2dyb3VwX2lkGAUgASgJ",
"Ik8KE0xpc3REZXZpY2VzUmVzcG9uc2USEwoLdG90YWxfY291bnQYASABKA0S",
"IwoGcmVzdWx0GAIgAygLMhMuYXBpLkRldmljZUxpc3RJdGVtIj8KF0NyZWF0",
"ZURldmljZUtleXNSZXF1ZXN0EiQKC2RldmljZV9rZXlzGAEgASgLMg8uYXBp",
"LkRldmljZUtleXMiJwoUR2V0RGV2aWNlS2V5c1JlcXVlc3QSDwoHZGV2X2V1",
"aRgBIAEoCSKdAQoVR2V0RGV2aWNlS2V5c1Jlc3BvbnNlEiQKC2RldmljZV9r",
"ZXlzGAEgASgLMg8uYXBpLkRldmljZUtleXMSLgoKY3JlYXRlZF9hdBgCIAEo",
"CzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgD",
"IAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiPwoXVXBkYXRlRGV2",
"aWNlS2V5c1JlcXVlc3QSJAoLZGV2aWNlX2tleXMYASABKAsyDy5hcGkuRGV2",
"aWNlS2V5cyIqChdEZWxldGVEZXZpY2VLZXlzUmVxdWVzdBIPCgdkZXZfZXVp",
"GAEgASgJIs8BChBEZXZpY2VBY3RpdmF0aW9uEg8KB2Rldl9ldWkYASABKAkS",
"EAoIZGV2X2FkZHIYAiABKAkSEQoJYXBwX3Nfa2V5GAMgASgJEhUKDW53a19z",
"X2VuY19rZXkYBCABKAkSFwoPc19ud2tfc19pbnRfa2V5GAggASgJEhcKD2Zf",
"bndrX3NfaW50X2tleRgJIAEoCRIQCghmX2NudF91cBgFIAEoDRIUCgxuX2Zf",
"Y250X2Rvd24YBiABKA0SFAoMYV9mX2NudF9kb3duGAogASgNIkkKFUFjdGl2",
"YXRlRGV2aWNlUmVxdWVzdBIwChFkZXZpY2VfYWN0aXZhdGlvbhgBIAEoCzIV",
"LmFwaS5EZXZpY2VBY3RpdmF0aW9uIioKF0RlYWN0aXZhdGVEZXZpY2VSZXF1",
"ZXN0Eg8KB2Rldl9ldWkYASABKAkiLQoaR2V0RGV2aWNlQWN0aXZhdGlvblJl",
"cXVlc3QSDwoHZGV2X2V1aRgBIAEoCSJPChtHZXREZXZpY2VBY3RpdmF0aW9u",
"UmVzcG9uc2USMAoRZGV2aWNlX2FjdGl2YXRpb24YASABKAsyFS5hcGkuRGV2",
"aWNlQWN0aXZhdGlvbiIqChdHZXRSYW5kb21EZXZBZGRyUmVxdWVzdBIPCgdk",
"ZXZfZXVpGAEgASgJIiwKGEdldFJhbmRvbURldkFkZHJSZXNwb25zZRIQCghk",
"ZXZfYWRkchgBIAEoCSKoAQoXR2V0RGV2aWNlTWV0cmljc1JlcXVlc3QSDwoH",
"ZGV2X2V1aRgBIAEoCRIpCgVzdGFydBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1",
"Zi5UaW1lc3RhbXASJwoDZW5kGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRp",
"bWVzdGFtcBIoCgthZ2dyZWdhdGlvbhgEIAEoDjITLmNvbW1vbi5BZ2dyZWdh",
"dGlvbiKTAgoYR2V0RGV2aWNlTWV0cmljc1Jlc3BvbnNlEjsKB21ldHJpY3MY",
"ASADKAsyKi5hcGkuR2V0RGV2aWNlTWV0cmljc1Jlc3BvbnNlLk1ldHJpY3NF",
"bnRyeRI5CgZzdGF0ZXMYAiADKAsyKS5hcGkuR2V0RGV2aWNlTWV0cmljc1Jl",
"c3BvbnNlLlN0YXRlc0VudHJ5Gj4KDE1ldHJpY3NFbnRyeRILCgNrZXkYASAB",
"KAkSHQoFdmFsdWUYAiABKAsyDi5jb21tb24uTWV0cmljOgI4ARo/CgtTdGF0",
"ZXNFbnRyeRILCgNrZXkYASABKAkSHwoFdmFsdWUYAiABKAsyEC5hcGkuRGV2",
"aWNlU3RhdGU6AjgBIioKC0RldmljZVN0YXRlEgwKBG5hbWUYAiABKAkSDQoF",
"dmFsdWUYAyABKAkirAEKG0dldERldmljZUxpbmtNZXRyaWNzUmVxdWVzdBIP",
"CgdkZXZfZXVpGAEgASgJEikKBXN0YXJ0GAIgASgLMhouZ29vZ2xlLnByb3Rv",
"YnVmLlRpbWVzdGFtcBInCgNlbmQYAyABKAsyGi5nb29nbGUucHJvdG9idWYu",
"VGltZXN0YW1wEigKC2FnZ3JlZ2F0aW9uGAQgASgOMhMuY29tbW9uLkFnZ3Jl",
"Z2F0aW9uIvsBChxHZXREZXZpY2VMaW5rTWV0cmljc1Jlc3BvbnNlEiIKCnJ4",
"X3BhY2tldHMYASABKAsyDi5jb21tb24uTWV0cmljEh8KB2d3X3Jzc2kYAiAB",
"KAsyDi5jb21tb24uTWV0cmljEh4KBmd3X3NuchgDIAEoCzIOLmNvbW1vbi5N",
"ZXRyaWMSKwoTcnhfcGFja2V0c19wZXJfZnJlcRgEIAEoCzIOLmNvbW1vbi5N",
"ZXRyaWMSKQoRcnhfcGFja2V0c19wZXJfZHIYBSABKAsyDi5jb21tb24uTWV0",
"cmljEh4KBmVycm9ycxgGIAEoCzIOLmNvbW1vbi5NZXRyaWMisAEKD0Rldmlj",
"ZVF1ZXVlSXRlbRIKCgJpZBgBIAEoCRIPCgdkZXZfZXVpGAIgASgJEhEKCWNv",
"bmZpcm1lZBgDIAEoCBIOCgZmX3BvcnQYBCABKA0SDAoEZGF0YRgFIAEoDBIn",
"CgZvYmplY3QYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhIKCmlz",
"X3BlbmRpbmcYByABKAgSEgoKZl9jbnRfZG93bhgIIAEoDSJJCh1FbnF1ZXVl",
"RGV2aWNlUXVldWVJdGVtUmVxdWVzdBIoCgpxdWV1ZV9pdGVtGAEgASgLMhQu",
"YXBpLkRldmljZVF1ZXVlSXRlbSIsCh5FbnF1ZXVlRGV2aWNlUXVldWVJdGVt",
"UmVzcG9uc2USCgoCaWQYASABKAkiKgoXRmx1c2hEZXZpY2VRdWV1ZVJlcXVl",
"c3QSDwoHZGV2X2V1aRgBIAEoCSJBChpHZXREZXZpY2VRdWV1ZUl0ZW1zUmVx",
"dWVzdBIPCgdkZXZfZXVpGAEgASgJEhIKCmNvdW50X29ubHkYAiABKAgiWAob",
"R2V0RGV2aWNlUXVldWVJdGVtc1Jlc3BvbnNlEhMKC3RvdGFsX2NvdW50GAEg",
"ASgNEiQKBnJlc3VsdBgCIAMoCzIULmFwaS5EZXZpY2VRdWV1ZUl0ZW0iKAoV",
"Rmx1c2hEZXZOb25jZXNSZXF1ZXN0Eg8KB2Rldl9ldWkYASABKAky0BAKDURl",
"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",
"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",
"dWl9L3F1ZXVlQmMKEWlvLmNoaXJwc3RhY2suYXBpQgtEZXZpY2VQcm90b1AB",
"Wi5naXRodWIuY29tL2NoaXJwc3RhY2svY2hpcnBzdGFjay9hcGkvZ28vdjQv",
"YXBpqgIOQ2hpcnBzdGFjay5BcGliBnByb3RvMw=="));
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[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.Device), global::Chirpstack.Api.Device.Parser, new[]{ "DevEui", "Name", "Description", "ApplicationId", "DeviceProfileId", "SkipFcntCheck", "IsDisabled", "Variables", "Tags" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, }),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.Device), global::Chirpstack.Api.Device.Parser, new[]{ "DevEui", "Name", "Description", "ApplicationId", "DeviceProfileId", "SkipFcntCheck", "IsDisabled", "Variables", "Tags", "JoinEui" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, }),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeviceStatus), global::Chirpstack.Api.DeviceStatus.Parser, new[]{ "Margin", "ExternalPowerSource", "BatteryLevel" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeviceListItem), global::Chirpstack.Api.DeviceListItem.Parser, new[]{ "DevEui", "CreatedAt", "UpdatedAt", "LastSeenAt", "Name", "Description", "DeviceProfileId", "DeviceProfileName", "DeviceStatus" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeviceKeys), global::Chirpstack.Api.DeviceKeys.Parser, new[]{ "DevEui", "NwkKey", "AppKey" }, null, null, null, null),
@ -250,6 +250,7 @@ namespace Chirpstack.Api {
isDisabled_ = other.isDisabled_;
variables_ = other.variables_.Clone();
tags_ = other.tags_.Clone();
joinEui_ = other.joinEui_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@ -397,6 +398,25 @@ namespace Chirpstack.Api {
get { return tags_; }
}
/// <summary>Field number for the "join_eui" field.</summary>
public const int JoinEuiFieldNumber = 10;
private string joinEui_ = "";
/// <summary>
/// JoinEUI (optional, EUI64).
/// This field will be automatically set / updated on OTAA. However, in some
/// cases it must be pre-configured. For example to allow OTAA using a Relay.
/// In this case the Relay needs to know the JoinEUI + DevEUI combinations
/// of the devices for which it needs to forward uplinks.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public string JoinEui {
get { return joinEui_; }
set {
joinEui_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
@ -421,6 +441,7 @@ namespace Chirpstack.Api {
if (IsDisabled != other.IsDisabled) return false;
if (!Variables.Equals(other.Variables)) return false;
if (!Tags.Equals(other.Tags)) return false;
if (JoinEui != other.JoinEui) return false;
return Equals(_unknownFields, other._unknownFields);
}
@ -437,6 +458,7 @@ namespace Chirpstack.Api {
if (IsDisabled != false) hash ^= IsDisabled.GetHashCode();
hash ^= Variables.GetHashCode();
hash ^= Tags.GetHashCode();
if (JoinEui.Length != 0) hash ^= JoinEui.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@ -485,6 +507,10 @@ namespace Chirpstack.Api {
}
variables_.WriteTo(output, _map_variables_codec);
tags_.WriteTo(output, _map_tags_codec);
if (JoinEui.Length != 0) {
output.WriteRawTag(82);
output.WriteString(JoinEui);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@ -525,6 +551,10 @@ namespace Chirpstack.Api {
}
variables_.WriteTo(ref output, _map_variables_codec);
tags_.WriteTo(ref output, _map_tags_codec);
if (JoinEui.Length != 0) {
output.WriteRawTag(82);
output.WriteString(JoinEui);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@ -558,6 +588,9 @@ namespace Chirpstack.Api {
}
size += variables_.CalculateSize(_map_variables_codec);
size += tags_.CalculateSize(_map_tags_codec);
if (JoinEui.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(JoinEui);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@ -593,6 +626,9 @@ namespace Chirpstack.Api {
}
variables_.Add(other.variables_);
tags_.Add(other.tags_);
if (other.JoinEui.Length != 0) {
JoinEui = other.JoinEui;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@ -644,6 +680,10 @@ namespace Chirpstack.Api {
tags_.AddEntriesFrom(input, _map_tags_codec);
break;
}
case 82: {
JoinEui = input.ReadString();
break;
}
}
}
#endif
@ -695,6 +735,10 @@ namespace Chirpstack.Api {
tags_.AddEntriesFrom(ref input, _map_tags_codec);
break;
}
case 82: {
JoinEui = input.ReadString();
break;
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -26,25 +26,26 @@ namespace Chirpstack.Api {
string.Concat(
"ChNhcGkvZnJhbWVfbG9nLnByb3RvEgNhcGkaH2dvb2dsZS9wcm90b2J1Zi90",
"aW1lc3RhbXAucHJvdG8aE2NvbW1vbi9jb21tb24ucHJvdG8aC2d3L2d3LnBy",
"b3RvIvcBCg5VcGxpbmtGcmFtZUxvZxITCgtwaHlfcGF5bG9hZBgBIAEoDBIh",
"b3RvIpACCg5VcGxpbmtGcmFtZUxvZxITCgtwaHlfcGF5bG9hZBgBIAEoDBIh",
"Cgd0eF9pbmZvGAIgASgLMhAuZ3cuVXBsaW5rVHhJbmZvEiEKB3J4X2luZm8Y",
"AyADKAsyEC5ndy5VcGxpbmtSeEluZm8SHQoGbV90eXBlGAQgASgOMg0uY29t",
"bW9uLk1UeXBlEhAKCGRldl9hZGRyGAUgASgJEg8KB2Rldl9ldWkYBiABKAkS",
"KAoEdGltZRgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASHgoW",
"cGxhaW50ZXh0X21hY19jb21tYW5kcxgIIAEoCCKBAgoQRG93bmxpbmtGcmFt",
"ZUxvZxIoCgR0aW1lGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFt",
"cBITCgtwaHlfcGF5bG9hZBgCIAEoDBIjCgd0eF9pbmZvGAMgASgLMhIuZ3cu",
"RG93bmxpbmtUeEluZm8SEwoLZG93bmxpbmtfaWQYBCABKA0SEgoKZ2F0ZXdh",
"eV9pZBgFIAEoCRIdCgZtX3R5cGUYBiABKA4yDS5jb21tb24uTVR5cGUSEAoI",
"ZGV2X2FkZHIYByABKAkSDwoHZGV2X2V1aRgIIAEoCRIeChZwbGFpbnRleHRf",
"bWFjX2NvbW1hbmRzGAkgASgIQmUKEWlvLmNoaXJwc3RhY2suYXBpQg1GcmFt",
"ZUxvZ1Byb3RvUAFaLmdpdGh1Yi5jb20vY2hpcnBzdGFjay9jaGlycHN0YWNr",
"L2FwaS9nby92NC9hcGmqAg5DaGlycHN0YWNrLkFwaWIGcHJvdG8z"));
"KAoEdGltZRgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGAoQ",
"cGxhaW50ZXh0X2Zfb3B0cxgIIAEoCBIdChVwbGFpbnRleHRfZnJtX3BheWxv",
"YWQYCSABKAgimgIKEERvd25saW5rRnJhbWVMb2cSKAoEdGltZRgBIAEoCzIa",
"Lmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEwoLcGh5X3BheWxvYWQYAiAB",
"KAwSIwoHdHhfaW5mbxgDIAEoCzISLmd3LkRvd25saW5rVHhJbmZvEhMKC2Rv",
"d25saW5rX2lkGAQgASgNEhIKCmdhdGV3YXlfaWQYBSABKAkSHQoGbV90eXBl",
"GAYgASgOMg0uY29tbW9uLk1UeXBlEhAKCGRldl9hZGRyGAcgASgJEg8KB2Rl",
"dl9ldWkYCCABKAkSGAoQcGxhaW50ZXh0X2Zfb3B0cxgJIAEoCBIdChVwbGFp",
"bnRleHRfZnJtX3BheWxvYWQYCiABKAhCZQoRaW8uY2hpcnBzdGFjay5hcGlC",
"DUZyYW1lTG9nUHJvdG9QAVouZ2l0aHViLmNvbS9jaGlycHN0YWNrL2NoaXJw",
"c3RhY2svYXBpL2dvL3Y0L2FwaaoCDkNoaXJwc3RhY2suQXBpYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Chirpstack.Common.CommonReflection.Descriptor, global::Chirpstack.Gateway.GwReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.UplinkFrameLog), global::Chirpstack.Api.UplinkFrameLog.Parser, new[]{ "PhyPayload", "TxInfo", "RxInfo", "MType", "DevAddr", "DevEui", "Time", "PlaintextMacCommands" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DownlinkFrameLog), global::Chirpstack.Api.DownlinkFrameLog.Parser, new[]{ "Time", "PhyPayload", "TxInfo", "DownlinkId", "GatewayId", "MType", "DevAddr", "DevEui", "PlaintextMacCommands" }, null, null, null, null)
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.UplinkFrameLog), global::Chirpstack.Api.UplinkFrameLog.Parser, new[]{ "PhyPayload", "TxInfo", "RxInfo", "MType", "DevAddr", "DevEui", "Time", "PlaintextFOpts", "PlaintextFrmPayload" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DownlinkFrameLog), global::Chirpstack.Api.DownlinkFrameLog.Parser, new[]{ "Time", "PhyPayload", "TxInfo", "DownlinkId", "GatewayId", "MType", "DevAddr", "DevEui", "PlaintextFOpts", "PlaintextFrmPayload" }, null, null, null, null)
}));
}
#endregion
@ -92,7 +93,8 @@ namespace Chirpstack.Api {
devAddr_ = other.devAddr_;
devEui_ = other.devEui_;
time_ = other.time_ != null ? other.time_.Clone() : null;
plaintextMacCommands_ = other.plaintextMacCommands_;
plaintextFOpts_ = other.plaintextFOpts_;
plaintextFrmPayload_ = other.plaintextFrmPayload_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@ -206,18 +208,33 @@ namespace Chirpstack.Api {
}
}
/// <summary>Field number for the "plaintext_mac_commands" field.</summary>
public const int PlaintextMacCommandsFieldNumber = 8;
private bool plaintextMacCommands_;
/// <summary>Field number for the "plaintext_f_opts" field.</summary>
public const int PlaintextFOptsFieldNumber = 8;
private bool plaintextFOpts_;
/// <summary>
/// Plaintext mac-commands.
/// Plaintext f_opts mac-commands.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool PlaintextMacCommands {
get { return plaintextMacCommands_; }
public bool PlaintextFOpts {
get { return plaintextFOpts_; }
set {
plaintextMacCommands_ = value;
plaintextFOpts_ = value;
}
}
/// <summary>Field number for the "plaintext_frm_payload" field.</summary>
public const int PlaintextFrmPayloadFieldNumber = 9;
private bool plaintextFrmPayload_;
/// <summary>
/// Plaintext frm_payload.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool PlaintextFrmPayload {
get { return plaintextFrmPayload_; }
set {
plaintextFrmPayload_ = value;
}
}
@ -243,7 +260,8 @@ namespace Chirpstack.Api {
if (DevAddr != other.DevAddr) return false;
if (DevEui != other.DevEui) return false;
if (!object.Equals(Time, other.Time)) return false;
if (PlaintextMacCommands != other.PlaintextMacCommands) return false;
if (PlaintextFOpts != other.PlaintextFOpts) return false;
if (PlaintextFrmPayload != other.PlaintextFrmPayload) return false;
return Equals(_unknownFields, other._unknownFields);
}
@ -258,7 +276,8 @@ namespace Chirpstack.Api {
if (DevAddr.Length != 0) hash ^= DevAddr.GetHashCode();
if (DevEui.Length != 0) hash ^= DevEui.GetHashCode();
if (time_ != null) hash ^= Time.GetHashCode();
if (PlaintextMacCommands != false) hash ^= PlaintextMacCommands.GetHashCode();
if (PlaintextFOpts != false) hash ^= PlaintextFOpts.GetHashCode();
if (PlaintextFrmPayload != false) hash ^= PlaintextFrmPayload.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@ -302,9 +321,13 @@ namespace Chirpstack.Api {
output.WriteRawTag(58);
output.WriteMessage(Time);
}
if (PlaintextMacCommands != false) {
if (PlaintextFOpts != false) {
output.WriteRawTag(64);
output.WriteBool(PlaintextMacCommands);
output.WriteBool(PlaintextFOpts);
}
if (PlaintextFrmPayload != false) {
output.WriteRawTag(72);
output.WriteBool(PlaintextFrmPayload);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
@ -341,9 +364,13 @@ namespace Chirpstack.Api {
output.WriteRawTag(58);
output.WriteMessage(Time);
}
if (PlaintextMacCommands != false) {
if (PlaintextFOpts != false) {
output.WriteRawTag(64);
output.WriteBool(PlaintextMacCommands);
output.WriteBool(PlaintextFOpts);
}
if (PlaintextFrmPayload != false) {
output.WriteRawTag(72);
output.WriteBool(PlaintextFrmPayload);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
@ -374,7 +401,10 @@ namespace Chirpstack.Api {
if (time_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(Time);
}
if (PlaintextMacCommands != false) {
if (PlaintextFOpts != false) {
size += 1 + 1;
}
if (PlaintextFrmPayload != false) {
size += 1 + 1;
}
if (_unknownFields != null) {
@ -414,8 +444,11 @@ namespace Chirpstack.Api {
}
Time.MergeFrom(other.Time);
}
if (other.PlaintextMacCommands != false) {
PlaintextMacCommands = other.PlaintextMacCommands;
if (other.PlaintextFOpts != false) {
PlaintextFOpts = other.PlaintextFOpts;
}
if (other.PlaintextFrmPayload != false) {
PlaintextFrmPayload = other.PlaintextFrmPayload;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@ -467,7 +500,11 @@ namespace Chirpstack.Api {
break;
}
case 64: {
PlaintextMacCommands = input.ReadBool();
PlaintextFOpts = input.ReadBool();
break;
}
case 72: {
PlaintextFrmPayload = input.ReadBool();
break;
}
}
@ -520,7 +557,11 @@ namespace Chirpstack.Api {
break;
}
case 64: {
PlaintextMacCommands = input.ReadBool();
PlaintextFOpts = input.ReadBool();
break;
}
case 72: {
PlaintextFrmPayload = input.ReadBool();
break;
}
}
@ -572,7 +613,8 @@ namespace Chirpstack.Api {
mType_ = other.mType_;
devAddr_ = other.devAddr_;
devEui_ = other.devEui_;
plaintextMacCommands_ = other.plaintextMacCommands_;
plaintextFOpts_ = other.plaintextFOpts_;
plaintextFrmPayload_ = other.plaintextFrmPayload_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@ -702,18 +744,33 @@ namespace Chirpstack.Api {
}
}
/// <summary>Field number for the "plaintext_mac_commands" field.</summary>
public const int PlaintextMacCommandsFieldNumber = 9;
private bool plaintextMacCommands_;
/// <summary>Field number for the "plaintext_f_opts" field.</summary>
public const int PlaintextFOptsFieldNumber = 9;
private bool plaintextFOpts_;
/// <summary>
/// Plaintext mac-commands.
/// Plaintext f_opts mac-commands.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool PlaintextMacCommands {
get { return plaintextMacCommands_; }
public bool PlaintextFOpts {
get { return plaintextFOpts_; }
set {
plaintextMacCommands_ = value;
plaintextFOpts_ = value;
}
}
/// <summary>Field number for the "plaintext_frm_payload" field.</summary>
public const int PlaintextFrmPayloadFieldNumber = 10;
private bool plaintextFrmPayload_;
/// <summary>
/// Plaintext frm_payload.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool PlaintextFrmPayload {
get { return plaintextFrmPayload_; }
set {
plaintextFrmPayload_ = value;
}
}
@ -740,7 +797,8 @@ namespace Chirpstack.Api {
if (MType != other.MType) return false;
if (DevAddr != other.DevAddr) return false;
if (DevEui != other.DevEui) return false;
if (PlaintextMacCommands != other.PlaintextMacCommands) return false;
if (PlaintextFOpts != other.PlaintextFOpts) return false;
if (PlaintextFrmPayload != other.PlaintextFrmPayload) return false;
return Equals(_unknownFields, other._unknownFields);
}
@ -756,7 +814,8 @@ namespace Chirpstack.Api {
if (MType != global::Chirpstack.Common.MType.JoinRequest) hash ^= MType.GetHashCode();
if (DevAddr.Length != 0) hash ^= DevAddr.GetHashCode();
if (DevEui.Length != 0) hash ^= DevEui.GetHashCode();
if (PlaintextMacCommands != false) hash ^= PlaintextMacCommands.GetHashCode();
if (PlaintextFOpts != false) hash ^= PlaintextFOpts.GetHashCode();
if (PlaintextFrmPayload != false) hash ^= PlaintextFrmPayload.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@ -807,9 +866,13 @@ namespace Chirpstack.Api {
output.WriteRawTag(66);
output.WriteString(DevEui);
}
if (PlaintextMacCommands != false) {
if (PlaintextFOpts != false) {
output.WriteRawTag(72);
output.WriteBool(PlaintextMacCommands);
output.WriteBool(PlaintextFOpts);
}
if (PlaintextFrmPayload != false) {
output.WriteRawTag(80);
output.WriteBool(PlaintextFrmPayload);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
@ -853,9 +916,13 @@ namespace Chirpstack.Api {
output.WriteRawTag(66);
output.WriteString(DevEui);
}
if (PlaintextMacCommands != false) {
if (PlaintextFOpts != false) {
output.WriteRawTag(72);
output.WriteBool(PlaintextMacCommands);
output.WriteBool(PlaintextFOpts);
}
if (PlaintextFrmPayload != false) {
output.WriteRawTag(80);
output.WriteBool(PlaintextFrmPayload);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
@ -891,7 +958,10 @@ namespace Chirpstack.Api {
if (DevEui.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(DevEui);
}
if (PlaintextMacCommands != false) {
if (PlaintextFOpts != false) {
size += 1 + 1;
}
if (PlaintextFrmPayload != false) {
size += 1 + 1;
}
if (_unknownFields != null) {
@ -936,8 +1006,11 @@ namespace Chirpstack.Api {
if (other.DevEui.Length != 0) {
DevEui = other.DevEui;
}
if (other.PlaintextMacCommands != false) {
PlaintextMacCommands = other.PlaintextMacCommands;
if (other.PlaintextFOpts != false) {
PlaintextFOpts = other.PlaintextFOpts;
}
if (other.PlaintextFrmPayload != false) {
PlaintextFrmPayload = other.PlaintextFrmPayload;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@ -993,7 +1066,11 @@ namespace Chirpstack.Api {
break;
}
case 72: {
PlaintextMacCommands = input.ReadBool();
PlaintextFOpts = input.ReadBool();
break;
}
case 80: {
PlaintextFrmPayload = input.ReadBool();
break;
}
}
@ -1050,7 +1127,11 @@ namespace Chirpstack.Api {
break;
}
case 72: {
PlaintextMacCommands = input.ReadBool();
PlaintextFOpts = input.ReadBool();
break;
}
case 80: {
PlaintextFrmPayload = input.ReadBool();
break;
}
}

2040
api/csharp/Chirpstack/api/Relay.cs vendored Normal file

File diff suppressed because it is too large Load Diff

412
api/csharp/Chirpstack/api/RelayGrpc.cs vendored Normal file
View File

@ -0,0 +1,412 @@
// <auto-generated>
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: api/relay.proto
// </auto-generated>
#pragma warning disable 0414, 1591, 8981
#region Designer generated code
using grpc = global::Grpc.Core;
namespace Chirpstack.Api {
/// <summary>
/// RelayService is the service providing API methos for managing relays.
/// </summary>
public static partial class RelayService
{
static readonly string __ServiceName = "api.RelayService";
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
{
#if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
if (message is global::Google.Protobuf.IBufferMessage)
{
context.SetPayloadLength(message.CalculateSize());
global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
context.Complete();
return;
}
#endif
context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
}
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static class __Helper_MessageCache<T>
{
public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
}
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static T __Helper_DeserializeMessage<T>(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser<T> parser) where T : global::Google.Protobuf.IMessage<T>
{
#if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
if (__Helper_MessageCache<T>.IsBufferMessage)
{
return parser.ParseFrom(context.PayloadAsReadOnlySequence());
}
#endif
return parser.ParseFrom(context.PayloadAsNewBuffer());
}
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Chirpstack.Api.ListRelaysRequest> __Marshaller_api_ListRelaysRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Chirpstack.Api.ListRelaysRequest.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Chirpstack.Api.ListRelaysResponse> __Marshaller_api_ListRelaysResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Chirpstack.Api.ListRelaysResponse.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Chirpstack.Api.AddRelayDeviceRequest> __Marshaller_api_AddRelayDeviceRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Chirpstack.Api.AddRelayDeviceRequest.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Google.Protobuf.WellKnownTypes.Empty> __Marshaller_google_protobuf_Empty = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Protobuf.WellKnownTypes.Empty.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Chirpstack.Api.RemoveRelayDeviceRequest> __Marshaller_api_RemoveRelayDeviceRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Chirpstack.Api.RemoveRelayDeviceRequest.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Chirpstack.Api.ListRelayDevicesRequest> __Marshaller_api_ListRelayDevicesRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Chirpstack.Api.ListRelayDevicesRequest.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller<global::Chirpstack.Api.ListRelayDevicesResponse> __Marshaller_api_ListRelayDevicesResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Chirpstack.Api.ListRelayDevicesResponse.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Method<global::Chirpstack.Api.ListRelaysRequest, global::Chirpstack.Api.ListRelaysResponse> __Method_List = new grpc::Method<global::Chirpstack.Api.ListRelaysRequest, global::Chirpstack.Api.ListRelaysResponse>(
grpc::MethodType.Unary,
__ServiceName,
"List",
__Marshaller_api_ListRelaysRequest,
__Marshaller_api_ListRelaysResponse);
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Method<global::Chirpstack.Api.AddRelayDeviceRequest, global::Google.Protobuf.WellKnownTypes.Empty> __Method_AddDevice = new grpc::Method<global::Chirpstack.Api.AddRelayDeviceRequest, global::Google.Protobuf.WellKnownTypes.Empty>(
grpc::MethodType.Unary,
__ServiceName,
"AddDevice",
__Marshaller_api_AddRelayDeviceRequest,
__Marshaller_google_protobuf_Empty);
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Method<global::Chirpstack.Api.RemoveRelayDeviceRequest, global::Google.Protobuf.WellKnownTypes.Empty> __Method_RemoveDevice = new grpc::Method<global::Chirpstack.Api.RemoveRelayDeviceRequest, global::Google.Protobuf.WellKnownTypes.Empty>(
grpc::MethodType.Unary,
__ServiceName,
"RemoveDevice",
__Marshaller_api_RemoveRelayDeviceRequest,
__Marshaller_google_protobuf_Empty);
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Method<global::Chirpstack.Api.ListRelayDevicesRequest, global::Chirpstack.Api.ListRelayDevicesResponse> __Method_ListDevices = new grpc::Method<global::Chirpstack.Api.ListRelayDevicesRequest, global::Chirpstack.Api.ListRelayDevicesResponse>(
grpc::MethodType.Unary,
__ServiceName,
"ListDevices",
__Marshaller_api_ListRelayDevicesRequest,
__Marshaller_api_ListRelayDevicesResponse);
/// <summary>Service descriptor</summary>
public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
{
get { return global::Chirpstack.Api.RelayReflection.Descriptor.Services[0]; }
}
/// <summary>Base class for server-side implementations of RelayService</summary>
[grpc::BindServiceMethod(typeof(RelayService), "BindService")]
public abstract partial class RelayServiceBase
{
/// <summary>
/// List lists the relays for the given application id.
/// </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.ListRelaysResponse> List(global::Chirpstack.Api.ListRelaysRequest request, grpc::ServerCallContext context)
{
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
}
/// <summary>
/// AddDevice adds the given device to the relay.
/// </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::Google.Protobuf.WellKnownTypes.Empty> AddDevice(global::Chirpstack.Api.AddRelayDeviceRequest request, grpc::ServerCallContext context)
{
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
}
/// <summary>
/// RemoveDevice removes the given device from the relay.
/// </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::Google.Protobuf.WellKnownTypes.Empty> RemoveDevice(global::Chirpstack.Api.RemoveRelayDeviceRequest request, grpc::ServerCallContext context)
{
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
}
/// <summary>
/// ListDevices lists the devices for the given relay.
/// </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.ListRelayDevicesResponse> ListDevices(global::Chirpstack.Api.ListRelayDevicesRequest request, grpc::ServerCallContext context)
{
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
}
}
/// <summary>Client for RelayService</summary>
public partial class RelayServiceClient : grpc::ClientBase<RelayServiceClient>
{
/// <summary>Creates a new client for RelayService</summary>
/// <param name="channel">The channel to use to make remote calls.</param>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
public RelayServiceClient(grpc::ChannelBase channel) : base(channel)
{
}
/// <summary>Creates a new client for RelayService that uses a custom <c>CallInvoker</c>.</summary>
/// <param name="callInvoker">The callInvoker to use to make remote calls.</param>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
public RelayServiceClient(grpc::CallInvoker callInvoker) : base(callInvoker)
{
}
/// <summary>Protected parameterless constructor to allow creation of test doubles.</summary>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
protected RelayServiceClient() : base()
{
}
/// <summary>Protected constructor to allow creation of configured clients.</summary>
/// <param name="configuration">The client configuration.</param>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
protected RelayServiceClient(ClientBaseConfiguration configuration) : base(configuration)
{
}
/// <summary>
/// List lists the relays for the given application id.
/// </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.ListRelaysResponse List(global::Chirpstack.Api.ListRelaysRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
{
return List(request, new grpc::CallOptions(headers, deadline, cancellationToken));
}
/// <summary>
/// List lists the relays for the given application id.
/// </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.ListRelaysResponse List(global::Chirpstack.Api.ListRelaysRequest request, grpc::CallOptions options)
{
return CallInvoker.BlockingUnaryCall(__Method_List, null, options, request);
}
/// <summary>
/// List lists the relays for the given application id.
/// </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.ListRelaysResponse> ListAsync(global::Chirpstack.Api.ListRelaysRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
{
return ListAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
}
/// <summary>
/// List lists the relays for the given application id.
/// </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.ListRelaysResponse> ListAsync(global::Chirpstack.Api.ListRelaysRequest request, grpc::CallOptions options)
{
return CallInvoker.AsyncUnaryCall(__Method_List, null, options, request);
}
/// <summary>
/// AddDevice adds the given device to the relay.
/// </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::Google.Protobuf.WellKnownTypes.Empty AddDevice(global::Chirpstack.Api.AddRelayDeviceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
{
return AddDevice(request, new grpc::CallOptions(headers, deadline, cancellationToken));
}
/// <summary>
/// AddDevice adds the given device to the relay.
/// </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::Google.Protobuf.WellKnownTypes.Empty AddDevice(global::Chirpstack.Api.AddRelayDeviceRequest request, grpc::CallOptions options)
{
return CallInvoker.BlockingUnaryCall(__Method_AddDevice, null, options, request);
}
/// <summary>
/// AddDevice adds the given device to the relay.
/// </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::Google.Protobuf.WellKnownTypes.Empty> AddDeviceAsync(global::Chirpstack.Api.AddRelayDeviceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
{
return AddDeviceAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
}
/// <summary>
/// AddDevice adds the given device to the relay.
/// </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::Google.Protobuf.WellKnownTypes.Empty> AddDeviceAsync(global::Chirpstack.Api.AddRelayDeviceRequest request, grpc::CallOptions options)
{
return CallInvoker.AsyncUnaryCall(__Method_AddDevice, null, options, request);
}
/// <summary>
/// RemoveDevice removes the given device from the relay.
/// </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::Google.Protobuf.WellKnownTypes.Empty RemoveDevice(global::Chirpstack.Api.RemoveRelayDeviceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
{
return RemoveDevice(request, new grpc::CallOptions(headers, deadline, cancellationToken));
}
/// <summary>
/// RemoveDevice removes the given device from the relay.
/// </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::Google.Protobuf.WellKnownTypes.Empty RemoveDevice(global::Chirpstack.Api.RemoveRelayDeviceRequest request, grpc::CallOptions options)
{
return CallInvoker.BlockingUnaryCall(__Method_RemoveDevice, null, options, request);
}
/// <summary>
/// RemoveDevice removes the given device from the relay.
/// </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::Google.Protobuf.WellKnownTypes.Empty> RemoveDeviceAsync(global::Chirpstack.Api.RemoveRelayDeviceRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
{
return RemoveDeviceAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
}
/// <summary>
/// RemoveDevice removes the given device from the relay.
/// </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::Google.Protobuf.WellKnownTypes.Empty> RemoveDeviceAsync(global::Chirpstack.Api.RemoveRelayDeviceRequest request, grpc::CallOptions options)
{
return CallInvoker.AsyncUnaryCall(__Method_RemoveDevice, null, options, request);
}
/// <summary>
/// ListDevices lists the devices for the given relay.
/// </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.ListRelayDevicesResponse ListDevices(global::Chirpstack.Api.ListRelayDevicesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
{
return ListDevices(request, new grpc::CallOptions(headers, deadline, cancellationToken));
}
/// <summary>
/// ListDevices lists the devices for the given relay.
/// </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.ListRelayDevicesResponse ListDevices(global::Chirpstack.Api.ListRelayDevicesRequest request, grpc::CallOptions options)
{
return CallInvoker.BlockingUnaryCall(__Method_ListDevices, null, options, request);
}
/// <summary>
/// ListDevices lists the devices for the given relay.
/// </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.ListRelayDevicesResponse> ListDevicesAsync(global::Chirpstack.Api.ListRelayDevicesRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
{
return ListDevicesAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
}
/// <summary>
/// ListDevices lists the devices for the given relay.
/// </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.ListRelayDevicesResponse> ListDevicesAsync(global::Chirpstack.Api.ListRelayDevicesRequest request, grpc::CallOptions options)
{
return CallInvoker.AsyncUnaryCall(__Method_ListDevices, null, options, request);
}
/// <summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
protected override RelayServiceClient NewInstance(ClientBaseConfiguration configuration)
{
return new RelayServiceClient(configuration);
}
}
/// <summary>Creates service definition that can be registered with a server</summary>
/// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
public static grpc::ServerServiceDefinition BindService(RelayServiceBase serviceImpl)
{
return grpc::ServerServiceDefinition.CreateBuilder()
.AddMethod(__Method_List, serviceImpl.List)
.AddMethod(__Method_AddDevice, serviceImpl.AddDevice)
.AddMethod(__Method_RemoveDevice, serviceImpl.RemoveDevice)
.AddMethod(__Method_ListDevices, serviceImpl.ListDevices).Build();
}
/// <summary>Register service method with a service binder with or without implementation. Useful when customizing the service binding logic.
/// Note: this method is part of an experimental API that can change or be removed without any prior notice.</summary>
/// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
/// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
public static void BindService(grpc::ServiceBinderBase serviceBinder, RelayServiceBase serviceImpl)
{
serviceBinder.AddMethod(__Method_List, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Chirpstack.Api.ListRelaysRequest, global::Chirpstack.Api.ListRelaysResponse>(serviceImpl.List));
serviceBinder.AddMethod(__Method_AddDevice, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Chirpstack.Api.AddRelayDeviceRequest, global::Google.Protobuf.WellKnownTypes.Empty>(serviceImpl.AddDevice));
serviceBinder.AddMethod(__Method_RemoveDevice, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Chirpstack.Api.RemoveRelayDeviceRequest, global::Google.Protobuf.WellKnownTypes.Empty>(serviceImpl.RemoveDevice));
serviceBinder.AddMethod(__Method_ListDevices, serviceImpl == null ? null : new grpc::UnaryServerMethod<global::Chirpstack.Api.ListRelayDevicesRequest, global::Chirpstack.Api.ListRelayDevicesResponse>(serviceImpl.ListDevices));
}
}
}
#endregion

View File

@ -451,15 +451,18 @@ namespace Google.Api {
/// 1. Leaf request fields (recursive expansion nested messages in the request
/// message) are classified into three categories:
/// - Fields referred by the path template. They are passed via the URL path.
/// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP
/// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They
/// are passed via the HTTP
/// request body.
/// - All other fields are passed via the URL query parameters, and the
/// parameter name is the field path in the request message. A repeated
/// field can be represented as multiple query parameters under the same
/// name.
/// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields
/// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL
/// query parameter, all fields
/// are passed via URL path and HTTP request body.
/// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all
/// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP
/// request body, all
/// fields are passed via URL path and URL query parameters.
///
/// ### Path template syntax
@ -626,7 +629,8 @@ namespace Google.Api {
/// <summary>
/// Selects a method to which this rule applies.
///
/// Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
/// Refer to [selector][google.api.DocumentationRule.selector] for syntax
/// details.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]

View File

@ -304,7 +304,8 @@ namespace Chirpstack.Gateway {
/// </summary>
[pbr::OriginalName("OK")] Ok = 1,
/// <summary>
/// Rejected because it was already too late to program this packet for downlink.
/// Rejected because it was already too late to program this packet for
/// downlink.
/// </summary>
[pbr::OriginalName("TOO_LATE")] TooLate = 2,
/// <summary>
@ -312,7 +313,8 @@ namespace Chirpstack.Gateway {
/// </summary>
[pbr::OriginalName("TOO_EARLY")] TooEarly = 3,
/// <summary>
/// Rejected because there was already a packet programmed in requested timeframe.
/// Rejected because there was already a packet programmed in requested
/// timeframe.
/// </summary>
[pbr::OriginalName("COLLISION_PACKET")] CollisionPacket = 4,
/// <summary>
@ -3958,7 +3960,8 @@ namespace Chirpstack.Gateway {
private pb::ByteString uplinkId_ = pb::ByteString.Empty;
/// <summary>
/// Uplink ID (UUID bytes).
/// Unique and random ID which can be used to correlate the uplink across multiple logs.
/// Unique and random ID which can be used to correlate the uplink across
/// multiple logs.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
@ -7174,7 +7177,8 @@ namespace Chirpstack.Gateway {
private global::Google.Protobuf.WellKnownTypes.Duration delay_;
/// <summary>
/// Delay (duration).
/// The delay will be added to the gateway internal timing, provided by the context object.
/// The delay will be added to the gateway internal timing, provided by the
/// context object.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
@ -10783,7 +10787,8 @@ namespace Chirpstack.Gateway {
private string command_ = "";
/// <summary>
/// Command to execute.
/// This command must be pre-configured in the LoRa Gateway Bridge configuration.
/// This command must be pre-configured in the LoRa Gateway Bridge
/// configuration.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]

View File

@ -33,65 +33,72 @@ namespace Chirpstack.Integration {
"ASgJEhsKE2RldmljZV9wcm9maWxlX25hbWUYBiABKAkSEwoLZGV2aWNlX25h",
"bWUYByABKAkSDwoHZGV2X2V1aRgIIAEoCRIvCgR0YWdzGAkgAygLMiEuaW50",
"ZWdyYXRpb24uRGV2aWNlSW5mby5UYWdzRW50cnkaKwoJVGFnc0VudHJ5EgsK",
"A2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEi2QIKC1VwbGlua0V2ZW50",
"EhgKEGRlZHVwbGljYXRpb25faWQYASABKAkSKAoEdGltZRgCIAEoCzIaLmdv",
"b2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLAoLZGV2aWNlX2luZm8YAyABKAsy",
"Fy5pbnRlZ3JhdGlvbi5EZXZpY2VJbmZvEhAKCGRldl9hZGRyGAQgASgJEgsK",
"A2FkchgFIAEoCBIKCgJkchgGIAEoDRINCgVmX2NudBgHIAEoDRIOCgZmX3Bv",
"cnQYCCABKA0SEQoJY29uZmlybWVkGAkgASgIEgwKBGRhdGEYCiABKAwSJwoG",
"b2JqZWN0GAsgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIhCgdyeF9p",
"bmZvGAwgAygLMhAuZ3cuVXBsaW5rUnhJbmZvEiEKB3R4X2luZm8YDSABKAsy",
"EC5ndy5VcGxpbmtUeEluZm8ijwEKCUpvaW5FdmVudBIYChBkZWR1cGxpY2F0",
"aW9uX2lkGAEgASgJEigKBHRpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYu",
"VGltZXN0YW1wEiwKC2RldmljZV9pbmZvGAMgASgLMhcuaW50ZWdyYXRpb24u",
"RGV2aWNlSW5mbxIQCghkZXZfYWRkchgEIAEoCSK9AQoIQWNrRXZlbnQSGAoQ",
"ZGVkdXBsaWNhdGlvbl9pZBgBIAEoCRIoCgR0aW1lGAIgASgLMhouZ29vZ2xl",
"LnByb3RvYnVmLlRpbWVzdGFtcBIsCgtkZXZpY2VfaW5mbxgDIAEoCzIXLmlu",
"dGVncmF0aW9uLkRldmljZUluZm8SFQoNcXVldWVfaXRlbV9pZBgEIAEoCRIU",
"CgxhY2tub3dsZWRnZWQYBSABKAgSEgoKZl9jbnRfZG93bhgGIAEoDSLdAQoK",
"VHhBY2tFdmVudBITCgtkb3dubGlua19pZBgBIAEoDRIoCgR0aW1lGAIgASgL",
"MhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIsCgtkZXZpY2VfaW5mbxgD",
"IAEoCzIXLmludGVncmF0aW9uLkRldmljZUluZm8SFQoNcXVldWVfaXRlbV9p",
"ZBgEIAEoCRISCgpmX2NudF9kb3duGAUgASgNEhIKCmdhdGV3YXlfaWQYBiAB",
"KAkSIwoHdHhfaW5mbxgHIAEoCzISLmd3LkRvd25saW5rVHhJbmZvIqYCCghM",
"b2dFdmVudBIoCgR0aW1lGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVz",
"dGFtcBIsCgtkZXZpY2VfaW5mbxgCIAEoCzIXLmludGVncmF0aW9uLkRldmlj",
"ZUluZm8SJAoFbGV2ZWwYAyABKA4yFS5pbnRlZ3JhdGlvbi5Mb2dMZXZlbBIi",
"CgRjb2RlGAQgASgOMhQuaW50ZWdyYXRpb24uTG9nQ29kZRITCgtkZXNjcmlw",
"dGlvbhgFIAEoCRIzCgdjb250ZXh0GAYgAygLMiIuaW50ZWdyYXRpb24uTG9n",
"RXZlbnQuQ29udGV4dEVudHJ5Gi4KDENvbnRleHRFbnRyeRILCgNrZXkYASAB",
"KAkSDQoFdmFsdWUYAiABKAk6AjgBIugBCgtTdGF0dXNFdmVudBIYChBkZWR1",
"cGxpY2F0aW9uX2lkGAEgASgJEigKBHRpbWUYAiABKAsyGi5nb29nbGUucHJv",
"dG9idWYuVGltZXN0YW1wEiwKC2RldmljZV9pbmZvGAMgASgLMhcuaW50ZWdy",
"YXRpb24uRGV2aWNlSW5mbxIOCgZtYXJnaW4YBSABKAUSHQoVZXh0ZXJuYWxf",
"cG93ZXJfc291cmNlGAYgASgIEiEKGWJhdHRlcnlfbGV2ZWxfdW5hdmFpbGFi",
"bGUYByABKAgSFQoNYmF0dGVyeV9sZXZlbBgIIAEoAiKlAQoNTG9jYXRpb25F",
"dmVudBIYChBkZWR1cGxpY2F0aW9uX2lkGAEgASgJEigKBHRpbWUYAiABKAsy",
"Gi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiwKC2RldmljZV9pbmZvGAMg",
"ASgLMhcuaW50ZWdyYXRpb24uRGV2aWNlSW5mbxIiCghsb2NhdGlvbhgEIAEo",
"CzIQLmNvbW1vbi5Mb2NhdGlvbiLbAQoQSW50ZWdyYXRpb25FdmVudBIYChBk",
"ZWR1cGxpY2F0aW9uX2lkGAEgASgJEigKBHRpbWUYAiABKAsyGi5nb29nbGUu",
"cHJvdG9idWYuVGltZXN0YW1wEiwKC2RldmljZV9pbmZvGAMgASgLMhcuaW50",
"ZWdyYXRpb24uRGV2aWNlSW5mbxIYChBpbnRlZ3JhdGlvbl9uYW1lGAQgASgJ",
"EhIKCmV2ZW50X3R5cGUYBSABKAkSJwoGb2JqZWN0GAYgASgLMhcuZ29vZ2xl",
"LnByb3RvYnVmLlN0cnVjdCKIAQoPRG93bmxpbmtDb21tYW5kEgoKAmlkGAEg",
"ASgJEg8KB2Rldl9ldWkYAiABKAkSEQoJY29uZmlybWVkGAMgASgIEg4KBmZf",
"cG9ydBgEIAEoDRIMCgRkYXRhGAUgASgMEicKBm9iamVjdBgGIAEoCzIXLmdv",
"b2dsZS5wcm90b2J1Zi5TdHJ1Y3QqLAoITG9nTGV2ZWwSCAoESU5GTxAAEgsK",
"B1dBUk5JTkcQARIJCgVFUlJPUhACKsABCgdMb2dDb2RlEgsKB1VOS05PV04Q",
"ABIZChVET1dOTElOS19QQVlMT0FEX1NJWkUQARIQCgxVUExJTktfQ09ERUMQ",
"AhISCg5ET1dOTElOS19DT0RFQxADEggKBE9UQUEQBBIWChJVUExJTktfRl9D",
"TlRfUkVTRVQQBRIOCgpVUExJTktfTUlDEAYSHwobVVBMSU5LX0ZfQ05UX1JF",
"VFJBTlNNSVNTSU9OEAcSFAoQRE9XTkxJTktfR0FURVdBWRAIQoEBCh1pby5j",
"aGlycHN0YWNrLmFwaS5pbnRlZ3JhdGlvbkIQSW50ZWdyYXRpb25Qcm90b1AB",
"WjNnaXRodWIuY29tL2Jyb2NhYXIvY2hpcnBzdGFjay9hcGkvZ28vdjQvaW50",
"ZWdyYXRpb26qAhZDaGlycHN0YWNrLkludGVncmF0aW9uYgZwcm90bzM="));
"A2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEicwoRVXBsaW5rUmVsYXlS",
"eEluZm8SDwoHZGV2X2V1aRgBIAEoCRIRCglmcmVxdWVuY3kYAiABKA0SCgoC",
"ZHIYAyABKA0SCwoDc25yGAQgASgFEgwKBHJzc2kYBSABKAUSEwoLd29yX2No",
"YW5uZWwYBiABKA0ikAMKC1VwbGlua0V2ZW50EhgKEGRlZHVwbGljYXRpb25f",
"aWQYASABKAkSKAoEdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1l",
"c3RhbXASLAoLZGV2aWNlX2luZm8YAyABKAsyFy5pbnRlZ3JhdGlvbi5EZXZp",
"Y2VJbmZvEhAKCGRldl9hZGRyGAQgASgJEgsKA2FkchgFIAEoCBIKCgJkchgG",
"IAEoDRINCgVmX2NudBgHIAEoDRIOCgZmX3BvcnQYCCABKA0SEQoJY29uZmly",
"bWVkGAkgASgIEgwKBGRhdGEYCiABKAwSJwoGb2JqZWN0GAsgASgLMhcuZ29v",
"Z2xlLnByb3RvYnVmLlN0cnVjdBIhCgdyeF9pbmZvGAwgAygLMhAuZ3cuVXBs",
"aW5rUnhJbmZvEiEKB3R4X2luZm8YDSABKAsyEC5ndy5VcGxpbmtUeEluZm8S",
"NQoNcmVsYXlfcnhfaW5mbxgOIAEoCzIeLmludGVncmF0aW9uLlVwbGlua1Jl",
"bGF5UnhJbmZvIsYBCglKb2luRXZlbnQSGAoQZGVkdXBsaWNhdGlvbl9pZBgB",
"IAEoCRIoCgR0aW1lGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFt",
"cBIsCgtkZXZpY2VfaW5mbxgDIAEoCzIXLmludGVncmF0aW9uLkRldmljZUlu",
"Zm8SEAoIZGV2X2FkZHIYBCABKAkSNQoNcmVsYXlfcnhfaW5mbxgFIAEoCzIe",
"LmludGVncmF0aW9uLlVwbGlua1JlbGF5UnhJbmZvIr0BCghBY2tFdmVudBIY",
"ChBkZWR1cGxpY2F0aW9uX2lkGAEgASgJEigKBHRpbWUYAiABKAsyGi5nb29n",
"bGUucHJvdG9idWYuVGltZXN0YW1wEiwKC2RldmljZV9pbmZvGAMgASgLMhcu",
"aW50ZWdyYXRpb24uRGV2aWNlSW5mbxIVCg1xdWV1ZV9pdGVtX2lkGAQgASgJ",
"EhQKDGFja25vd2xlZGdlZBgFIAEoCBISCgpmX2NudF9kb3duGAYgASgNIt0B",
"CgpUeEFja0V2ZW50EhMKC2Rvd25saW5rX2lkGAEgASgNEigKBHRpbWUYAiAB",
"KAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiwKC2RldmljZV9pbmZv",
"GAMgASgLMhcuaW50ZWdyYXRpb24uRGV2aWNlSW5mbxIVCg1xdWV1ZV9pdGVt",
"X2lkGAQgASgJEhIKCmZfY250X2Rvd24YBSABKA0SEgoKZ2F0ZXdheV9pZBgG",
"IAEoCRIjCgd0eF9pbmZvGAcgASgLMhIuZ3cuRG93bmxpbmtUeEluZm8ipgIK",
"CExvZ0V2ZW50EigKBHRpbWUYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGlt",
"ZXN0YW1wEiwKC2RldmljZV9pbmZvGAIgASgLMhcuaW50ZWdyYXRpb24uRGV2",
"aWNlSW5mbxIkCgVsZXZlbBgDIAEoDjIVLmludGVncmF0aW9uLkxvZ0xldmVs",
"EiIKBGNvZGUYBCABKA4yFC5pbnRlZ3JhdGlvbi5Mb2dDb2RlEhMKC2Rlc2Ny",
"aXB0aW9uGAUgASgJEjMKB2NvbnRleHQYBiADKAsyIi5pbnRlZ3JhdGlvbi5M",
"b2dFdmVudC5Db250ZXh0RW50cnkaLgoMQ29udGV4dEVudHJ5EgsKA2tleRgB",
"IAEoCRINCgV2YWx1ZRgCIAEoCToCOAEi6AEKC1N0YXR1c0V2ZW50EhgKEGRl",
"ZHVwbGljYXRpb25faWQYASABKAkSKAoEdGltZRgCIAEoCzIaLmdvb2dsZS5w",
"cm90b2J1Zi5UaW1lc3RhbXASLAoLZGV2aWNlX2luZm8YAyABKAsyFy5pbnRl",
"Z3JhdGlvbi5EZXZpY2VJbmZvEg4KBm1hcmdpbhgFIAEoBRIdChVleHRlcm5h",
"bF9wb3dlcl9zb3VyY2UYBiABKAgSIQoZYmF0dGVyeV9sZXZlbF91bmF2YWls",
"YWJsZRgHIAEoCBIVCg1iYXR0ZXJ5X2xldmVsGAggASgCIqUBCg1Mb2NhdGlv",
"bkV2ZW50EhgKEGRlZHVwbGljYXRpb25faWQYASABKAkSKAoEdGltZRgCIAEo",
"CzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLAoLZGV2aWNlX2luZm8Y",
"AyABKAsyFy5pbnRlZ3JhdGlvbi5EZXZpY2VJbmZvEiIKCGxvY2F0aW9uGAQg",
"ASgLMhAuY29tbW9uLkxvY2F0aW9uItsBChBJbnRlZ3JhdGlvbkV2ZW50EhgK",
"EGRlZHVwbGljYXRpb25faWQYASABKAkSKAoEdGltZRgCIAEoCzIaLmdvb2ds",
"ZS5wcm90b2J1Zi5UaW1lc3RhbXASLAoLZGV2aWNlX2luZm8YAyABKAsyFy5p",
"bnRlZ3JhdGlvbi5EZXZpY2VJbmZvEhgKEGludGVncmF0aW9uX25hbWUYBCAB",
"KAkSEgoKZXZlbnRfdHlwZRgFIAEoCRInCgZvYmplY3QYBiABKAsyFy5nb29n",
"bGUucHJvdG9idWYuU3RydWN0IogBCg9Eb3dubGlua0NvbW1hbmQSCgoCaWQY",
"ASABKAkSDwoHZGV2X2V1aRgCIAEoCRIRCgljb25maXJtZWQYAyABKAgSDgoG",
"Zl9wb3J0GAQgASgNEgwKBGRhdGEYBSABKAwSJwoGb2JqZWN0GAYgASgLMhcu",
"Z29vZ2xlLnByb3RvYnVmLlN0cnVjdCosCghMb2dMZXZlbBIICgRJTkZPEAAS",
"CwoHV0FSTklORxABEgkKBUVSUk9SEAIq2gEKB0xvZ0NvZGUSCwoHVU5LTk9X",
"ThAAEhkKFURPV05MSU5LX1BBWUxPQURfU0laRRABEhAKDFVQTElOS19DT0RF",
"QxACEhIKDkRPV05MSU5LX0NPREVDEAMSCAoET1RBQRAEEhYKElVQTElOS19G",
"X0NOVF9SRVNFVBAFEg4KClVQTElOS19NSUMQBhIfChtVUExJTktfRl9DTlRf",
"UkVUUkFOU01JU1NJT04QBxIUChBET1dOTElOS19HQVRFV0FZEAgSGAoUUkVM",
"QVlfTkVXX0VORF9ERVZJQ0UQCUKBAQodaW8uY2hpcnBzdGFjay5hcGkuaW50",
"ZWdyYXRpb25CEEludGVncmF0aW9uUHJvdG9QAVozZ2l0aHViLmNvbS9icm9j",
"YWFyL2NoaXJwc3RhY2svYXBpL2dvL3Y0L2ludGVncmF0aW9uqgIWQ2hpcnBz",
"dGFjay5JbnRlZ3JhdGlvbmIGcHJvdG8z"));
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", "Tags" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { 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" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Integration.JoinEvent), global::Chirpstack.Integration.JoinEvent.Parser, new[]{ "DeduplicationId", "Time", "DeviceInfo", "DevAddr" }, null, null, null, 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.UplinkEvent), global::Chirpstack.Integration.UplinkEvent.Parser, new[]{ "DeduplicationId", "Time", "DeviceInfo", "DevAddr", "Adr", "Dr", "FCnt", "FPort", "Confirmed", "Data", "Object", "RxInfo", "TxInfo", "RelayRxInfo" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Integration.JoinEvent), global::Chirpstack.Integration.JoinEvent.Parser, new[]{ "DeduplicationId", "Time", "DeviceInfo", "DevAddr", "RelayRxInfo" }, 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),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Integration.TxAckEvent), global::Chirpstack.Integration.TxAckEvent.Parser, new[]{ "DownlinkId", "Time", "DeviceInfo", "QueueItemId", "FCntDown", "GatewayId", "TxInfo" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Integration.LogEvent), global::Chirpstack.Integration.LogEvent.Parser, new[]{ "Time", "DeviceInfo", "Level", "Code", "Description", "Context" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
@ -158,6 +165,10 @@ namespace Chirpstack.Integration {
/// Downlink gateway error.
/// </summary>
[pbr::OriginalName("DOWNLINK_GATEWAY")] DownlinkGateway = 8,
/// <summary>
/// Relay new end-device.
/// </summary>
[pbr::OriginalName("RELAY_NEW_END_DEVICE")] RelayNewEndDevice = 9,
}
#endregion
@ -667,6 +678,401 @@ namespace Chirpstack.Integration {
}
/// <summary>
/// Uplink relay RX information.
/// </summary>
public sealed partial class UplinkRelayRxInfo : pb::IMessage<UplinkRelayRxInfo>
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
, pb::IBufferMessage
#endif
{
private static readonly pb::MessageParser<UplinkRelayRxInfo> _parser = new pb::MessageParser<UplinkRelayRxInfo>(() => new UplinkRelayRxInfo());
private pb::UnknownFieldSet _unknownFields;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pb::MessageParser<UplinkRelayRxInfo> 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[1]; }
}
[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 UplinkRelayRxInfo() {
OnConstruction();
}
partial void OnConstruction();
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public UplinkRelayRxInfo(UplinkRelayRxInfo other) : this() {
devEui_ = other.devEui_;
frequency_ = other.frequency_;
dr_ = other.dr_;
snr_ = other.snr_;
rssi_ = other.rssi_;
worChannel_ = other.worChannel_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public UplinkRelayRxInfo Clone() {
return new UplinkRelayRxInfo(this);
}
/// <summary>Field number for the "dev_eui" field.</summary>
public const int DevEuiFieldNumber = 1;
private string devEui_ = "";
/// <summary>
/// Relay DevEUI.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public string DevEui {
get { return devEui_; }
set {
devEui_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
/// <summary>Field number for the "frequency" field.</summary>
public const int FrequencyFieldNumber = 2;
private uint frequency_;
/// <summary>
/// Frequency.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public uint Frequency {
get { return frequency_; }
set {
frequency_ = value;
}
}
/// <summary>Field number for the "dr" field.</summary>
public const int DrFieldNumber = 3;
private uint dr_;
/// <summary>
/// Data-rate.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public uint Dr {
get { return dr_; }
set {
dr_ = value;
}
}
/// <summary>Field number for the "snr" field.</summary>
public const int SnrFieldNumber = 4;
private int snr_;
/// <summary>
/// SNR.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int Snr {
get { return snr_; }
set {
snr_ = value;
}
}
/// <summary>Field number for the "rssi" field.</summary>
public const int RssiFieldNumber = 5;
private int rssi_;
/// <summary>
/// RSSI.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int Rssi {
get { return rssi_; }
set {
rssi_ = value;
}
}
/// <summary>Field number for the "wor_channel" field.</summary>
public const int WorChannelFieldNumber = 6;
private uint worChannel_;
/// <summary>
/// WOR channel.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public uint WorChannel {
get { return worChannel_; }
set {
worChannel_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
return Equals(other as UplinkRelayRxInfo);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool Equals(UplinkRelayRxInfo other) {
if (ReferenceEquals(other, null)) {
return false;
}
if (ReferenceEquals(other, this)) {
return true;
}
if (DevEui != other.DevEui) return false;
if (Frequency != other.Frequency) return false;
if (Dr != other.Dr) return false;
if (Snr != other.Snr) return false;
if (Rssi != other.Rssi) return false;
if (WorChannel != other.WorChannel) 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 (DevEui.Length != 0) hash ^= DevEui.GetHashCode();
if (Frequency != 0) hash ^= Frequency.GetHashCode();
if (Dr != 0) hash ^= Dr.GetHashCode();
if (Snr != 0) hash ^= Snr.GetHashCode();
if (Rssi != 0) hash ^= Rssi.GetHashCode();
if (WorChannel != 0) hash ^= WorChannel.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 (DevEui.Length != 0) {
output.WriteRawTag(10);
output.WriteString(DevEui);
}
if (Frequency != 0) {
output.WriteRawTag(16);
output.WriteUInt32(Frequency);
}
if (Dr != 0) {
output.WriteRawTag(24);
output.WriteUInt32(Dr);
}
if (Snr != 0) {
output.WriteRawTag(32);
output.WriteInt32(Snr);
}
if (Rssi != 0) {
output.WriteRawTag(40);
output.WriteInt32(Rssi);
}
if (WorChannel != 0) {
output.WriteRawTag(48);
output.WriteUInt32(WorChannel);
}
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 (DevEui.Length != 0) {
output.WriteRawTag(10);
output.WriteString(DevEui);
}
if (Frequency != 0) {
output.WriteRawTag(16);
output.WriteUInt32(Frequency);
}
if (Dr != 0) {
output.WriteRawTag(24);
output.WriteUInt32(Dr);
}
if (Snr != 0) {
output.WriteRawTag(32);
output.WriteInt32(Snr);
}
if (Rssi != 0) {
output.WriteRawTag(40);
output.WriteInt32(Rssi);
}
if (WorChannel != 0) {
output.WriteRawTag(48);
output.WriteUInt32(WorChannel);
}
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 (DevEui.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(DevEui);
}
if (Frequency != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Frequency);
}
if (Dr != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Dr);
}
if (Snr != 0) {
size += 1 + pb::CodedOutputStream.ComputeInt32Size(Snr);
}
if (Rssi != 0) {
size += 1 + pb::CodedOutputStream.ComputeInt32Size(Rssi);
}
if (WorChannel != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(WorChannel);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
return size;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void MergeFrom(UplinkRelayRxInfo other) {
if (other == null) {
return;
}
if (other.DevEui.Length != 0) {
DevEui = other.DevEui;
}
if (other.Frequency != 0) {
Frequency = other.Frequency;
}
if (other.Dr != 0) {
Dr = other.Dr;
}
if (other.Snr != 0) {
Snr = other.Snr;
}
if (other.Rssi != 0) {
Rssi = other.Rssi;
}
if (other.WorChannel != 0) {
WorChannel = other.WorChannel;
}
_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: {
DevEui = input.ReadString();
break;
}
case 16: {
Frequency = input.ReadUInt32();
break;
}
case 24: {
Dr = input.ReadUInt32();
break;
}
case 32: {
Snr = input.ReadInt32();
break;
}
case 40: {
Rssi = input.ReadInt32();
break;
}
case 48: {
WorChannel = input.ReadUInt32();
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: {
DevEui = input.ReadString();
break;
}
case 16: {
Frequency = input.ReadUInt32();
break;
}
case 24: {
Dr = input.ReadUInt32();
break;
}
case 32: {
Snr = input.ReadInt32();
break;
}
case 40: {
Rssi = input.ReadInt32();
break;
}
case 48: {
WorChannel = input.ReadUInt32();
break;
}
}
}
}
#endif
}
/// <summary>
/// UplinkEvent is the message sent when an uplink payload has been received.
/// </summary>
@ -684,7 +1090,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[1]; }
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[2]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -717,6 +1123,7 @@ namespace Chirpstack.Integration {
object_ = other.object_ != null ? other.object_.Clone() : null;
rxInfo_ = other.rxInfo_.Clone();
txInfo_ = other.txInfo_ != null ? other.txInfo_.Clone() : null;
relayRxInfo_ = other.relayRxInfo_ != null ? other.relayRxInfo_.Clone() : null;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@ -880,7 +1287,8 @@ namespace Chirpstack.Integration {
public const int ObjectFieldNumber = 11;
private global::Google.Protobuf.WellKnownTypes.Struct object_;
/// <summary>
/// Note that this is only set when a codec is configured in the Device Profile.
/// Note that this is only set when a codec is configured in the Device
/// Profile.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
@ -920,6 +1328,21 @@ namespace Chirpstack.Integration {
}
}
/// <summary>Field number for the "relay_rx_info" field.</summary>
public const int RelayRxInfoFieldNumber = 14;
private global::Chirpstack.Integration.UplinkRelayRxInfo relayRxInfo_;
/// <summary>
/// Relay info.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public global::Chirpstack.Integration.UplinkRelayRxInfo RelayRxInfo {
get { return relayRxInfo_; }
set {
relayRxInfo_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
@ -948,6 +1371,7 @@ namespace Chirpstack.Integration {
if (!object.Equals(Object, other.Object)) return false;
if(!rxInfo_.Equals(other.rxInfo_)) return false;
if (!object.Equals(TxInfo, other.TxInfo)) return false;
if (!object.Equals(RelayRxInfo, other.RelayRxInfo)) return false;
return Equals(_unknownFields, other._unknownFields);
}
@ -968,6 +1392,7 @@ namespace Chirpstack.Integration {
if (object_ != null) hash ^= Object.GetHashCode();
hash ^= rxInfo_.GetHashCode();
if (txInfo_ != null) hash ^= TxInfo.GetHashCode();
if (relayRxInfo_ != null) hash ^= RelayRxInfo.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@ -1035,6 +1460,10 @@ namespace Chirpstack.Integration {
output.WriteRawTag(106);
output.WriteMessage(TxInfo);
}
if (relayRxInfo_ != null) {
output.WriteRawTag(114);
output.WriteMessage(RelayRxInfo);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@ -1094,6 +1523,10 @@ namespace Chirpstack.Integration {
output.WriteRawTag(106);
output.WriteMessage(TxInfo);
}
if (relayRxInfo_ != null) {
output.WriteRawTag(114);
output.WriteMessage(RelayRxInfo);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@ -1141,6 +1574,9 @@ namespace Chirpstack.Integration {
if (txInfo_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(TxInfo);
}
if (relayRxInfo_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(RelayRxInfo);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@ -1202,6 +1638,12 @@ namespace Chirpstack.Integration {
}
TxInfo.MergeFrom(other.TxInfo);
}
if (other.relayRxInfo_ != null) {
if (relayRxInfo_ == null) {
RelayRxInfo = new global::Chirpstack.Integration.UplinkRelayRxInfo();
}
RelayRxInfo.MergeFrom(other.RelayRxInfo);
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@ -1281,6 +1723,13 @@ namespace Chirpstack.Integration {
input.ReadMessage(TxInfo);
break;
}
case 114: {
if (relayRxInfo_ == null) {
RelayRxInfo = new global::Chirpstack.Integration.UplinkRelayRxInfo();
}
input.ReadMessage(RelayRxInfo);
break;
}
}
}
#endif
@ -1360,6 +1809,13 @@ namespace Chirpstack.Integration {
input.ReadMessage(TxInfo);
break;
}
case 114: {
if (relayRxInfo_ == null) {
RelayRxInfo = new global::Chirpstack.Integration.UplinkRelayRxInfo();
}
input.ReadMessage(RelayRxInfo);
break;
}
}
}
}
@ -1385,7 +1841,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[2]; }
get { return global::Chirpstack.Integration.IntegrationReflection.Descriptor.MessageTypes[3]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -1409,6 +1865,7 @@ namespace Chirpstack.Integration {
time_ = other.time_ != null ? other.time_.Clone() : null;
deviceInfo_ = other.deviceInfo_ != null ? other.deviceInfo_.Clone() : null;
devAddr_ = other.devAddr_;
relayRxInfo_ = other.relayRxInfo_ != null ? other.relayRxInfo_.Clone() : null;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@ -1478,6 +1935,21 @@ namespace Chirpstack.Integration {
}
}
/// <summary>Field number for the "relay_rx_info" field.</summary>
public const int RelayRxInfoFieldNumber = 5;
private global::Chirpstack.Integration.UplinkRelayRxInfo relayRxInfo_;
/// <summary>
/// Relay info.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public global::Chirpstack.Integration.UplinkRelayRxInfo RelayRxInfo {
get { return relayRxInfo_; }
set {
relayRxInfo_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
@ -1497,6 +1969,7 @@ namespace Chirpstack.Integration {
if (!object.Equals(Time, other.Time)) return false;
if (!object.Equals(DeviceInfo, other.DeviceInfo)) return false;
if (DevAddr != other.DevAddr) return false;
if (!object.Equals(RelayRxInfo, other.RelayRxInfo)) return false;
return Equals(_unknownFields, other._unknownFields);
}
@ -1508,6 +1981,7 @@ namespace Chirpstack.Integration {
if (time_ != null) hash ^= Time.GetHashCode();
if (deviceInfo_ != null) hash ^= DeviceInfo.GetHashCode();
if (DevAddr.Length != 0) hash ^= DevAddr.GetHashCode();
if (relayRxInfo_ != null) hash ^= RelayRxInfo.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@ -1542,6 +2016,10 @@ namespace Chirpstack.Integration {
output.WriteRawTag(34);
output.WriteString(DevAddr);
}
if (relayRxInfo_ != null) {
output.WriteRawTag(42);
output.WriteMessage(RelayRxInfo);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@ -1568,6 +2046,10 @@ namespace Chirpstack.Integration {
output.WriteRawTag(34);
output.WriteString(DevAddr);
}
if (relayRxInfo_ != null) {
output.WriteRawTag(42);
output.WriteMessage(RelayRxInfo);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@ -1590,6 +2072,9 @@ namespace Chirpstack.Integration {
if (DevAddr.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(DevAddr);
}
if (relayRxInfo_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(RelayRxInfo);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@ -1620,6 +2105,12 @@ namespace Chirpstack.Integration {
if (other.DevAddr.Length != 0) {
DevAddr = other.DevAddr;
}
if (other.relayRxInfo_ != null) {
if (relayRxInfo_ == null) {
RelayRxInfo = new global::Chirpstack.Integration.UplinkRelayRxInfo();
}
RelayRxInfo.MergeFrom(other.RelayRxInfo);
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@ -1657,6 +2148,13 @@ namespace Chirpstack.Integration {
DevAddr = input.ReadString();
break;
}
case 42: {
if (relayRxInfo_ == null) {
RelayRxInfo = new global::Chirpstack.Integration.UplinkRelayRxInfo();
}
input.ReadMessage(RelayRxInfo);
break;
}
}
}
#endif
@ -1694,6 +2192,13 @@ namespace Chirpstack.Integration {
DevAddr = input.ReadString();
break;
}
case 42: {
if (relayRxInfo_ == null) {
RelayRxInfo = new global::Chirpstack.Integration.UplinkRelayRxInfo();
}
input.ReadMessage(RelayRxInfo);
break;
}
}
}
}
@ -1719,7 +2224,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[4]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -2116,9 +2621,9 @@ namespace Chirpstack.Integration {
}
/// <summary>
/// TxAckEvent is the message sent when a downlink was acknowledged by the gateway
/// for transmission. As a downlink can be scheduled in the future, this event
/// does not confirm that the message has already been transmitted.
/// TxAckEvent is the message sent when a downlink was acknowledged by the
/// gateway for transmission. As a downlink can be scheduled in the future, this
/// event does not confirm that the message has already been transmitted.
/// </summary>
public sealed partial class TxAckEvent : pb::IMessage<TxAckEvent>
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
@ -2134,7 +2639,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[5]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -2596,7 +3101,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[6]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -2999,7 +3504,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[7]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -3453,7 +3958,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[8]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -3797,7 +4302,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[9]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -4220,7 +4725,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[10]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]

1
api/go/Makefile vendored
View File

@ -27,6 +27,7 @@ api:
protoc ${PROTOC_ARGS} api/frame_log.proto
protoc ${PROTOC_ARGS} api/multicast_group.proto
protoc ${PROTOC_ARGS} api/request_log.proto
protoc ${PROTOC_ARGS} api/relay.proto
integration:
protoc ${PROTOC_ARGS} integration/integration.proto

File diff suppressed because it is too large Load Diff

View File

@ -53,6 +53,12 @@ type Device struct {
// These tags are exposed in the event payloads or to integration. Tags are
// intended for aggregation and filtering.
Tags map[string]string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// JoinEUI (optional, EUI64).
// This field will be automatically set / updated on OTAA. However, in some
// cases it must be pre-configured. For example to allow OTAA using a Relay.
// In this case the Relay needs to know the JoinEUI + DevEUI combinations
// of the devices for which it needs to forward uplinks.
JoinEui string `protobuf:"bytes,10,opt,name=join_eui,json=joinEui,proto3" json:"join_eui,omitempty"`
}
func (x *Device) Reset() {
@ -150,6 +156,13 @@ func (x *Device) GetTags() map[string]string {
return nil
}
func (x *Device) GetJoinEui() string {
if x != nil {
return x.JoinEui
}
return ""
}
type DeviceStatus struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -2278,7 +2291,7 @@ var file_api_device_proto_rawDesc = []byte{
0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72,
0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 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, 0x22, 0xcf, 0x03, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xea, 0x03, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20,
@ -2300,64 +2313,26 @@ var file_api_device_proto_rawDesc = []byte{
0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x09,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67,
0x73, 0x1a, 0x3c, 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 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, 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,
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, 0x22, 0x7f, 0x0a, 0x0c, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x72, 0x67,
0x69, 0x6e, 0x18, 0x01, 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, 0x02, 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, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x5f,
0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x62, 0x61, 0x74,
0x74, 0x65, 0x72, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0xa7, 0x03, 0x0a, 0x0e, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 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, 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, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3c, 0x0a, 0x0c, 0x6c,
0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x61, 0x74, 0x18, 0x04, 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, 0x0a, 0x6c,
0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a,
0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x2a, 0x0a, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c,
0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61,
0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x0d, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53,
0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x22, 0x57, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79,
0x73, 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, 0x17, 0x0a, 0x07, 0x6e, 0x77,
0x6b, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x77, 0x6b,
0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x22, 0x3a, 0x0a, 0x13,
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2b, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x44,
0x65, 0x76, 0x69, 0x63, 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, 0xa4, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x06, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x73, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x0a, 0x20,
0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x69, 0x6e, 0x45, 0x75, 0x69, 0x1a, 0x3c, 0x0a, 0x0e,
0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 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, 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, 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, 0x22, 0x7f, 0x0a, 0x0c, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, 0x01, 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, 0x02, 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,
0x23, 0x0a, 0x0d, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c,
0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x62, 0x61, 0x74, 0x74, 0x65, 0x72, 0x79, 0x4c,
0x65, 0x76, 0x65, 0x6c, 0x22, 0xa7, 0x03, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c,
0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 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, 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,
@ -2369,359 +2344,398 @@ var file_api_device_proto_rawDesc = []byte{
0x65, 0x65, 0x6e, 0x5f, 0x61, 0x74, 0x18, 0x04, 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, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65,
0x65, 0x6e, 0x41, 0x74, 0x12, 0x36, 0x0a, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73,
0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3a, 0x0a, 0x13,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2e, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65,
0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 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, 0xaf, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73,
0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 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, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61,
0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12,
0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f,
0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63,
0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x13, 0x4c, 0x69,
0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 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, 0x2b, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c,
0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22,
0x4b, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b,
0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73,
0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x2f, 0x0a, 0x14,
0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 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, 0xbf, 0x01,
0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x0a, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 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, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22,
0x4b, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b,
0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73,
0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x32, 0x0a, 0x17,
0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73,
0x65, 0x6e, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01,
0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63,
0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64,
0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18,
0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20,
0x01, 0x28, 0x09, 0x52, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x57,
0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 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, 0x17, 0x0a, 0x07, 0x6e, 0x77, 0x6b, 0x5f, 0x6b, 0x65, 0x79,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x77, 0x6b, 0x4b, 0x65, 0x79, 0x12, 0x17,
0x0a, 0x07, 0x61, 0x70, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x61, 0x70, 0x70, 0x4b, 0x65, 0x79, 0x22, 0x3a, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74,
0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23,
0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x22, 0x2b, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 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, 0xad, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76,
0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x19,
0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x64, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1a, 0x0a, 0x09, 0x61, 0x70, 0x70,
0x5f, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70,
0x70, 0x53, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0d, 0x6e, 0x77, 0x6b, 0x5f, 0x73, 0x5f, 0x65,
0x6e, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x77,
0x6b, 0x53, 0x45, 0x6e, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0f, 0x73, 0x5f, 0x6e, 0x77,
0x6b, 0x5f, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0b, 0x73, 0x4e, 0x77, 0x6b, 0x53, 0x49, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x24,
0x0a, 0x0f, 0x66, 0x5f, 0x6e, 0x77, 0x6b, 0x5f, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x6b, 0x65,
0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x4e, 0x77, 0x6b, 0x53, 0x49, 0x6e,
0x74, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x08, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x75, 0x70,
0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x66, 0x43, 0x6e, 0x74, 0x55, 0x70, 0x12, 0x1f,
0x0a, 0x0c, 0x6e, 0x5f, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x06,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x46, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x12,
0x1f, 0x0a, 0x0c, 0x61, 0x5f, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18,
0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x61, 0x46, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e,
0x22, 0x5b, 0x0a, 0x15, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63,
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, 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,
0x22, 0xa4, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 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, 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, 0x12, 0x3c, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x61,
0x74, 0x18, 0x04, 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, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x12,
0x36, 0x0a, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3a, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74,
0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23,
0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x22, 0x2e, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76,
0x69, 0x63, 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, 0xaf, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69,
0x63, 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, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69,
0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20,
0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72,
0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 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, 0x2b, 0x0a,
0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74,
0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x4b, 0x0a, 0x17, 0x43, 0x72,
0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f,
0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x0a, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x2f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 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, 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, 0x52, 0x65, 0x71, 0x75, 0x65,
0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0xbf, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x12, 0x30, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79,
0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x4b, 0x65, 0x79, 0x73, 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, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x4b, 0x0a, 0x17, 0x55, 0x70,
0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f,
0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x0a, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x32, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74,
0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 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, 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, 0xf1, 0x01, 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,
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,
0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0xad, 0x02, 0x0a, 0x10,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e,
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, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76,
0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x76,
0x41, 0x64, 0x64, 0x72, 0x12, 0x1a, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x5f, 0x73, 0x5f, 0x6b, 0x65,
0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x53, 0x4b, 0x65, 0x79,
0x12, 0x21, 0x0a, 0x0d, 0x6e, 0x77, 0x6b, 0x5f, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x5f, 0x6b, 0x65,
0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x77, 0x6b, 0x53, 0x45, 0x6e, 0x63,
0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0f, 0x73, 0x5f, 0x6e, 0x77, 0x6b, 0x5f, 0x73, 0x5f, 0x69,
0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x4e,
0x77, 0x6b, 0x53, 0x49, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0f, 0x66, 0x5f, 0x6e,
0x77, 0x6b, 0x5f, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x09, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0b, 0x66, 0x4e, 0x77, 0x6b, 0x53, 0x49, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12,
0x18, 0x0a, 0x08, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x06, 0x66, 0x43, 0x6e, 0x74, 0x55, 0x70, 0x12, 0x1f, 0x0a, 0x0c, 0x6e, 0x5f, 0x66,
0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x09, 0x6e, 0x46, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x1f, 0x0a, 0x0c, 0x61, 0x5f,
0x66, 0x5f, 0x63, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x09, 0x61, 0x46, 0x43, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x22, 0x5b, 0x0a, 0x15, 0x41,
0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 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, 0x44, 0x65, 0x61, 0x63,
0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 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,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 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, 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, 0x32, 0xd0, 0x10, 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,
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, 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, 0xf1, 0x01, 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, 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, 0x32, 0xd0, 0x10,
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, 0x22, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x73, 0x3a, 0x01, 0x2a, 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, 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, 0x3a, 0x01, 0x2a,
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, 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, 0x3a, 0x01, 0x2a, 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, 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, 0x3a, 0x01, 0x2a, 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, 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, 0x3a, 0x01, 0x2a, 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, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 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, 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, 0x3a, 0x01, 0x2a, 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, 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, 0x3a, 0x01, 0x2a, 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, 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, 0x3a, 0x01, 0x2a, 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, 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, 0x3a, 0x01,
0x2a, 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,
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, 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, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 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, 0x3a, 0x01, 0x2a, 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,
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,
0x71, 0x75, 0x65, 0x75, 0x65, 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,
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, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x2c, 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, 0x3a, 0x01,
0x2a, 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,
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 (

File diff suppressed because it is too large Load Diff

View File

@ -42,8 +42,10 @@ type UplinkFrameLog struct {
DevEui string `protobuf:"bytes,6,opt,name=dev_eui,json=devEui,proto3" json:"dev_eui,omitempty"`
// Time.
Time *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=time,proto3" json:"time,omitempty"`
// Plaintext mac-commands.
PlaintextMacCommands bool `protobuf:"varint,8,opt,name=plaintext_mac_commands,json=plaintextMacCommands,proto3" json:"plaintext_mac_commands,omitempty"`
// Plaintext f_opts mac-commands.
PlaintextFOpts bool `protobuf:"varint,8,opt,name=plaintext_f_opts,json=plaintextFOpts,proto3" json:"plaintext_f_opts,omitempty"`
// Plaintext frm_payload.
PlaintextFrmPayload bool `protobuf:"varint,9,opt,name=plaintext_frm_payload,json=plaintextFrmPayload,proto3" json:"plaintext_frm_payload,omitempty"`
}
func (x *UplinkFrameLog) Reset() {
@ -127,9 +129,16 @@ func (x *UplinkFrameLog) GetTime() *timestamppb.Timestamp {
return nil
}
func (x *UplinkFrameLog) GetPlaintextMacCommands() bool {
func (x *UplinkFrameLog) GetPlaintextFOpts() bool {
if x != nil {
return x.PlaintextMacCommands
return x.PlaintextFOpts
}
return false
}
func (x *UplinkFrameLog) GetPlaintextFrmPayload() bool {
if x != nil {
return x.PlaintextFrmPayload
}
return false
}
@ -155,8 +164,10 @@ type DownlinkFrameLog struct {
DevAddr string `protobuf:"bytes,7,opt,name=dev_addr,json=devAddr,proto3" json:"dev_addr,omitempty"`
// Device EUI (optional).
DevEui string `protobuf:"bytes,8,opt,name=dev_eui,json=devEui,proto3" json:"dev_eui,omitempty"`
// Plaintext mac-commands.
PlaintextMacCommands bool `protobuf:"varint,9,opt,name=plaintext_mac_commands,json=plaintextMacCommands,proto3" json:"plaintext_mac_commands,omitempty"`
// Plaintext f_opts mac-commands.
PlaintextFOpts bool `protobuf:"varint,9,opt,name=plaintext_f_opts,json=plaintextFOpts,proto3" json:"plaintext_f_opts,omitempty"`
// Plaintext frm_payload.
PlaintextFrmPayload bool `protobuf:"varint,10,opt,name=plaintext_frm_payload,json=plaintextFrmPayload,proto3" json:"plaintext_frm_payload,omitempty"`
}
func (x *DownlinkFrameLog) Reset() {
@ -247,9 +258,16 @@ func (x *DownlinkFrameLog) GetDevEui() string {
return ""
}
func (x *DownlinkFrameLog) GetPlaintextMacCommands() bool {
func (x *DownlinkFrameLog) GetPlaintextFOpts() bool {
if x != nil {
return x.PlaintextMacCommands
return x.PlaintextFOpts
}
return false
}
func (x *DownlinkFrameLog) GetPlaintextFrmPayload() bool {
if x != nil {
return x.PlaintextFrmPayload
}
return false
}
@ -262,7 +280,7 @@ var file_api_frame_log_proto_rawDesc = []byte{
0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 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,
0x1a, 0x0b, 0x67, 0x77, 0x2f, 0x67, 0x77, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc7, 0x02,
0x1a, 0x0b, 0x67, 0x77, 0x2f, 0x67, 0x77, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xef, 0x02,
0x0a, 0x0e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67,
0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61,
@ -280,32 +298,37 @@ var file_api_frame_log_proto_rawDesc = []byte{
0x69, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 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, 0x34, 0x0a, 0x16, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6d,
0x61, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28,
0x08, 0x52, 0x14, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4d, 0x61, 0x63, 0x43,
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0xe0, 0x02, 0x0a, 0x10, 0x44, 0x6f, 0x77, 0x6e,
0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 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, 0x1f, 0x0a, 0x0b,
0x70, 0x68, 0x79, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0c, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2b, 0x0a,
0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 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, 0x1f, 0x0a, 0x0b, 0x64, 0x6f,
0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67,
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x06, 0x6d, 0x5f,
0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d,
0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x6d, 0x54, 0x79, 0x70, 0x65,
0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x07, 0x20, 0x01,
0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x76, 0x41, 0x64, 0x64, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x64,
0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65,
0x76, 0x45, 0x75, 0x69, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78,
0x74, 0x5f, 0x6d, 0x61, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x09,
0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4d,
0x61, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x42, 0x65, 0x0a, 0x11, 0x69, 0x6f,
0x65, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x66,
0x5f, 0x6f, 0x70, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x6c, 0x61,
0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x46, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x70,
0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x79,
0x6c, 0x6f, 0x61, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x6c, 0x61, 0x69,
0x6e, 0x74, 0x65, 0x78, 0x74, 0x46, 0x72, 0x6d, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22,
0x88, 0x03, 0x0a, 0x10, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d,
0x65, 0x4c, 0x6f, 0x67, 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, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x5f, 0x70, 0x61, 0x79, 0x6c,
0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x50, 0x61,
0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2b, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
0x18, 0x03, 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, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69,
0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e,
0x6b, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69,
0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
0x49, 0x64, 0x12, 0x24, 0x0a, 0x06, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x54, 0x79, 0x70,
0x65, 0x52, 0x05, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f,
0x61, 0x64, 0x64, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x76, 0x41,
0x64, 0x64, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x08,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x12, 0x28, 0x0a, 0x10,
0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x5f, 0x6f, 0x70, 0x74, 0x73,
0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78,
0x74, 0x46, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74,
0x65, 0x78, 0x74, 0x5f, 0x66, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18,
0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74,
0x46, 0x72, 0x6d, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x65, 0x0a, 0x11, 0x69, 0x6f,
0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42,
0x0d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69,

773
api/go/api/relay.pb.go vendored Normal file
View File

@ -0,0 +1,773 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
// protoc v3.21.9
// source: api/relay.proto
package api
import (
_ "google.golang.org/genproto/googleapis/api/annotations"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
emptypb "google.golang.org/protobuf/types/known/emptypb"
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type RelayListItem struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// DevEUI (EUI64).
DevEui string `protobuf:"bytes,1,opt,name=dev_eui,json=devEui,proto3" json:"dev_eui,omitempty"`
// Name.
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
}
func (x *RelayListItem) Reset() {
*x = RelayListItem{}
if protoimpl.UnsafeEnabled {
mi := &file_api_relay_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RelayListItem) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RelayListItem) ProtoMessage() {}
func (x *RelayListItem) ProtoReflect() protoreflect.Message {
mi := &file_api_relay_proto_msgTypes[0]
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 RelayListItem.ProtoReflect.Descriptor instead.
func (*RelayListItem) Descriptor() ([]byte, []int) {
return file_api_relay_proto_rawDescGZIP(), []int{0}
}
func (x *RelayListItem) GetDevEui() string {
if x != nil {
return x.DevEui
}
return ""
}
func (x *RelayListItem) GetName() string {
if x != nil {
return x.Name
}
return ""
}
type ListRelaysRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Max number of devices to return in the result-set.
Limit uint32 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"`
// Offset in the result-set (for pagination).
Offset uint32 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"`
// Application ID (UUID).
ApplicationId string `protobuf:"bytes,3,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"`
}
func (x *ListRelaysRequest) Reset() {
*x = ListRelaysRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_api_relay_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListRelaysRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListRelaysRequest) ProtoMessage() {}
func (x *ListRelaysRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_relay_proto_msgTypes[1]
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 ListRelaysRequest.ProtoReflect.Descriptor instead.
func (*ListRelaysRequest) Descriptor() ([]byte, []int) {
return file_api_relay_proto_rawDescGZIP(), []int{1}
}
func (x *ListRelaysRequest) GetLimit() uint32 {
if x != nil {
return x.Limit
}
return 0
}
func (x *ListRelaysRequest) GetOffset() uint32 {
if x != nil {
return x.Offset
}
return 0
}
func (x *ListRelaysRequest) GetApplicationId() string {
if x != nil {
return x.ApplicationId
}
return ""
}
type ListRelaysResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Total number of relays.
TotalCount uint32 `protobuf:"varint,1,opt,name=total_count,json=totalCount,proto3" json:"total_count,omitempty"`
// Result-set.
Result []*RelayListItem `protobuf:"bytes,2,rep,name=result,proto3" json:"result,omitempty"`
}
func (x *ListRelaysResponse) Reset() {
*x = ListRelaysResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_api_relay_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListRelaysResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListRelaysResponse) ProtoMessage() {}
func (x *ListRelaysResponse) ProtoReflect() protoreflect.Message {
mi := &file_api_relay_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 ListRelaysResponse.ProtoReflect.Descriptor instead.
func (*ListRelaysResponse) Descriptor() ([]byte, []int) {
return file_api_relay_proto_rawDescGZIP(), []int{2}
}
func (x *ListRelaysResponse) GetTotalCount() uint32 {
if x != nil {
return x.TotalCount
}
return 0
}
func (x *ListRelaysResponse) GetResult() []*RelayListItem {
if x != nil {
return x.Result
}
return nil
}
type AddRelayDeviceRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Relay DevEUI (EUI64).
RelayDevEui string `protobuf:"bytes,1,opt,name=relay_dev_eui,json=relayDevEui,proto3" json:"relay_dev_eui,omitempty"`
// Device DevEUI (EUI64).
DeviceDevEui string `protobuf:"bytes,2,opt,name=device_dev_eui,json=deviceDevEui,proto3" json:"device_dev_eui,omitempty"`
}
func (x *AddRelayDeviceRequest) Reset() {
*x = AddRelayDeviceRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_api_relay_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AddRelayDeviceRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AddRelayDeviceRequest) ProtoMessage() {}
func (x *AddRelayDeviceRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_relay_proto_msgTypes[3]
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 AddRelayDeviceRequest.ProtoReflect.Descriptor instead.
func (*AddRelayDeviceRequest) Descriptor() ([]byte, []int) {
return file_api_relay_proto_rawDescGZIP(), []int{3}
}
func (x *AddRelayDeviceRequest) GetRelayDevEui() string {
if x != nil {
return x.RelayDevEui
}
return ""
}
func (x *AddRelayDeviceRequest) GetDeviceDevEui() string {
if x != nil {
return x.DeviceDevEui
}
return ""
}
type RemoveRelayDeviceRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Relay DevEUI (EUI64).
RelayDevEui string `protobuf:"bytes,1,opt,name=relay_dev_eui,json=relayDevEui,proto3" json:"relay_dev_eui,omitempty"`
// Device DevEUI (EUI64).
DeviceDevEui string `protobuf:"bytes,2,opt,name=device_dev_eui,json=deviceDevEui,proto3" json:"device_dev_eui,omitempty"`
}
func (x *RemoveRelayDeviceRequest) Reset() {
*x = RemoveRelayDeviceRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_api_relay_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RemoveRelayDeviceRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RemoveRelayDeviceRequest) ProtoMessage() {}
func (x *RemoveRelayDeviceRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_relay_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 RemoveRelayDeviceRequest.ProtoReflect.Descriptor instead.
func (*RemoveRelayDeviceRequest) Descriptor() ([]byte, []int) {
return file_api_relay_proto_rawDescGZIP(), []int{4}
}
func (x *RemoveRelayDeviceRequest) GetRelayDevEui() string {
if x != nil {
return x.RelayDevEui
}
return ""
}
func (x *RemoveRelayDeviceRequest) GetDeviceDevEui() string {
if x != nil {
return x.DeviceDevEui
}
return ""
}
type ListRelayDevicesRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Max number of multicast groups to return in the result-set.
Limit uint32 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"`
// Offset in the result-set (for pagination).
Offset uint32 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"`
// Relay DevEUI (EUI64).
RelayDevEui string `protobuf:"bytes,3,opt,name=relay_dev_eui,json=relayDevEui,proto3" json:"relay_dev_eui,omitempty"`
}
func (x *ListRelayDevicesRequest) Reset() {
*x = ListRelayDevicesRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_api_relay_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListRelayDevicesRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListRelayDevicesRequest) ProtoMessage() {}
func (x *ListRelayDevicesRequest) ProtoReflect() protoreflect.Message {
mi := &file_api_relay_proto_msgTypes[5]
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 ListRelayDevicesRequest.ProtoReflect.Descriptor instead.
func (*ListRelayDevicesRequest) Descriptor() ([]byte, []int) {
return file_api_relay_proto_rawDescGZIP(), []int{5}
}
func (x *ListRelayDevicesRequest) GetLimit() uint32 {
if x != nil {
return x.Limit
}
return 0
}
func (x *ListRelayDevicesRequest) GetOffset() uint32 {
if x != nil {
return x.Offset
}
return 0
}
func (x *ListRelayDevicesRequest) GetRelayDevEui() string {
if x != nil {
return x.RelayDevEui
}
return ""
}
type RelayDeviceListItem struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// DevEUI (EUI64).
DevEui string `protobuf:"bytes,1,opt,name=dev_eui,json=devEui,proto3" json:"dev_eui,omitempty"`
// Created at timestamp.
CreatedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
// Device name.
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
}
func (x *RelayDeviceListItem) Reset() {
*x = RelayDeviceListItem{}
if protoimpl.UnsafeEnabled {
mi := &file_api_relay_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RelayDeviceListItem) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RelayDeviceListItem) ProtoMessage() {}
func (x *RelayDeviceListItem) ProtoReflect() protoreflect.Message {
mi := &file_api_relay_proto_msgTypes[6]
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 RelayDeviceListItem.ProtoReflect.Descriptor instead.
func (*RelayDeviceListItem) Descriptor() ([]byte, []int) {
return file_api_relay_proto_rawDescGZIP(), []int{6}
}
func (x *RelayDeviceListItem) GetDevEui() string {
if x != nil {
return x.DevEui
}
return ""
}
func (x *RelayDeviceListItem) GetCreatedAt() *timestamppb.Timestamp {
if x != nil {
return x.CreatedAt
}
return nil
}
func (x *RelayDeviceListItem) GetName() string {
if x != nil {
return x.Name
}
return ""
}
type ListRelayDevicesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Total number of devices.
TotalCount uint32 `protobuf:"varint,1,opt,name=total_count,json=totalCount,proto3" json:"total_count,omitempty"`
// Result-set.
Result []*RelayDeviceListItem `protobuf:"bytes,2,rep,name=result,proto3" json:"result,omitempty"`
}
func (x *ListRelayDevicesResponse) Reset() {
*x = ListRelayDevicesResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_api_relay_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListRelayDevicesResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListRelayDevicesResponse) ProtoMessage() {}
func (x *ListRelayDevicesResponse) ProtoReflect() protoreflect.Message {
mi := &file_api_relay_proto_msgTypes[7]
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 ListRelayDevicesResponse.ProtoReflect.Descriptor instead.
func (*ListRelayDevicesResponse) Descriptor() ([]byte, []int) {
return file_api_relay_proto_rawDescGZIP(), []int{7}
}
func (x *ListRelayDevicesResponse) GetTotalCount() uint32 {
if x != nil {
return x.TotalCount
}
return 0
}
func (x *ListRelayDevicesResponse) GetResult() []*RelayDeviceListItem {
if x != nil {
return x.Result
}
return nil
}
var File_api_relay_proto protoreflect.FileDescriptor
var file_api_relay_proto_rawDesc = []byte{
0x0a, 0x0f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61,
0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 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, 0x22, 0x3c, 0x0a, 0x0d, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x49,
0x74, 0x65, 0x6d, 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, 0x12, 0x0a, 0x04,
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x22, 0x68, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 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, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70,
0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x12, 0x4c, 0x69,
0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 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, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x73,
0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x61, 0x0a,
0x15, 0x41, 0x64, 0x64, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f,
0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72,
0x65, 0x6c, 0x61, 0x79, 0x44, 0x65, 0x76, 0x45, 0x75, 0x69, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x76, 0x45, 0x75, 0x69,
0x22, 0x64, 0x0a, 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0d,
0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x65, 0x76, 0x45, 0x75, 0x69,
0x12, 0x24, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x65,
0x75, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x44, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x6b, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
0x6c, 0x61, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 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,
0x22, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69,
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x65, 0x76,
0x45, 0x75, 0x69, 0x22, 0x7d, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 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, 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, 0x12,
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x22, 0x6d, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44,
0x65, 0x76, 0x69, 0x63, 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,
0x30, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x32, 0xc4, 0x03, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x12, 0x4c, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c,
0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73,
0x12, 0x6f, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x6c, 0x61, 0x79, 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, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x22, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f,
0x72, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x65,
0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x01,
0x2a, 0x12, 0x7c, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65,
0x6c, 0x61, 0x79, 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, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f,
0x2a, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x72,
0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x12,
0x77, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1c,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73,
0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d,
0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x42, 0x62, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63,
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0a, 0x52,
0x65, 0x6c, 0x61, 0x79, 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_api_relay_proto_rawDescOnce sync.Once
file_api_relay_proto_rawDescData = file_api_relay_proto_rawDesc
)
func file_api_relay_proto_rawDescGZIP() []byte {
file_api_relay_proto_rawDescOnce.Do(func() {
file_api_relay_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_relay_proto_rawDescData)
})
return file_api_relay_proto_rawDescData
}
var file_api_relay_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
var file_api_relay_proto_goTypes = []interface{}{
(*RelayListItem)(nil), // 0: api.RelayListItem
(*ListRelaysRequest)(nil), // 1: api.ListRelaysRequest
(*ListRelaysResponse)(nil), // 2: api.ListRelaysResponse
(*AddRelayDeviceRequest)(nil), // 3: api.AddRelayDeviceRequest
(*RemoveRelayDeviceRequest)(nil), // 4: api.RemoveRelayDeviceRequest
(*ListRelayDevicesRequest)(nil), // 5: api.ListRelayDevicesRequest
(*RelayDeviceListItem)(nil), // 6: api.RelayDeviceListItem
(*ListRelayDevicesResponse)(nil), // 7: api.ListRelayDevicesResponse
(*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp
(*emptypb.Empty)(nil), // 9: google.protobuf.Empty
}
var file_api_relay_proto_depIdxs = []int32{
0, // 0: api.ListRelaysResponse.result:type_name -> api.RelayListItem
8, // 1: api.RelayDeviceListItem.created_at:type_name -> google.protobuf.Timestamp
6, // 2: api.ListRelayDevicesResponse.result:type_name -> api.RelayDeviceListItem
1, // 3: api.RelayService.List:input_type -> api.ListRelaysRequest
3, // 4: api.RelayService.AddDevice:input_type -> api.AddRelayDeviceRequest
4, // 5: api.RelayService.RemoveDevice:input_type -> api.RemoveRelayDeviceRequest
5, // 6: api.RelayService.ListDevices:input_type -> api.ListRelayDevicesRequest
2, // 7: api.RelayService.List:output_type -> api.ListRelaysResponse
9, // 8: api.RelayService.AddDevice:output_type -> google.protobuf.Empty
9, // 9: api.RelayService.RemoveDevice:output_type -> google.protobuf.Empty
7, // 10: api.RelayService.ListDevices:output_type -> api.ListRelayDevicesResponse
7, // [7:11] is the sub-list for method output_type
3, // [3:7] is the sub-list for method input_type
3, // [3:3] is the sub-list for extension type_name
3, // [3:3] is the sub-list for extension extendee
0, // [0:3] is the sub-list for field type_name
}
func init() { file_api_relay_proto_init() }
func file_api_relay_proto_init() {
if File_api_relay_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_api_relay_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RelayListItem); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_api_relay_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListRelaysRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_api_relay_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListRelaysResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_api_relay_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AddRelayDeviceRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_api_relay_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RemoveRelayDeviceRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_api_relay_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListRelayDevicesRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_api_relay_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RelayDeviceListItem); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_api_relay_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListRelayDevicesResponse); 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{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_api_relay_proto_rawDesc,
NumEnums: 0,
NumMessages: 8,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_api_relay_proto_goTypes,
DependencyIndexes: file_api_relay_proto_depIdxs,
MessageInfos: file_api_relay_proto_msgTypes,
}.Build()
File_api_relay_proto = out.File
file_api_relay_proto_rawDesc = nil
file_api_relay_proto_goTypes = nil
file_api_relay_proto_depIdxs = nil
}

222
api/go/api/relay_grpc.pb.go vendored Normal file
View File

@ -0,0 +1,222 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.2.0
// - protoc v3.21.9
// source: api/relay.proto
package api
import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
emptypb "google.golang.org/protobuf/types/known/emptypb"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7
// RelayServiceClient is the client API for RelayService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type RelayServiceClient interface {
// List lists the relays for the given application id.
List(ctx context.Context, in *ListRelaysRequest, opts ...grpc.CallOption) (*ListRelaysResponse, error)
// AddDevice adds the given device to the relay.
AddDevice(ctx context.Context, in *AddRelayDeviceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
// RemoveDevice removes the given device from the relay.
RemoveDevice(ctx context.Context, in *RemoveRelayDeviceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
// ListDevices lists the devices for the given relay.
ListDevices(ctx context.Context, in *ListRelayDevicesRequest, opts ...grpc.CallOption) (*ListRelayDevicesResponse, error)
}
type relayServiceClient struct {
cc grpc.ClientConnInterface
}
func NewRelayServiceClient(cc grpc.ClientConnInterface) RelayServiceClient {
return &relayServiceClient{cc}
}
func (c *relayServiceClient) List(ctx context.Context, in *ListRelaysRequest, opts ...grpc.CallOption) (*ListRelaysResponse, error) {
out := new(ListRelaysResponse)
err := c.cc.Invoke(ctx, "/api.RelayService/List", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *relayServiceClient) AddDevice(ctx context.Context, in *AddRelayDeviceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, "/api.RelayService/AddDevice", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *relayServiceClient) RemoveDevice(ctx context.Context, in *RemoveRelayDeviceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, "/api.RelayService/RemoveDevice", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *relayServiceClient) ListDevices(ctx context.Context, in *ListRelayDevicesRequest, opts ...grpc.CallOption) (*ListRelayDevicesResponse, error) {
out := new(ListRelayDevicesResponse)
err := c.cc.Invoke(ctx, "/api.RelayService/ListDevices", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// RelayServiceServer is the server API for RelayService service.
// All implementations must embed UnimplementedRelayServiceServer
// for forward compatibility
type RelayServiceServer interface {
// List lists the relays for the given application id.
List(context.Context, *ListRelaysRequest) (*ListRelaysResponse, error)
// AddDevice adds the given device to the relay.
AddDevice(context.Context, *AddRelayDeviceRequest) (*emptypb.Empty, error)
// RemoveDevice removes the given device from the relay.
RemoveDevice(context.Context, *RemoveRelayDeviceRequest) (*emptypb.Empty, error)
// ListDevices lists the devices for the given relay.
ListDevices(context.Context, *ListRelayDevicesRequest) (*ListRelayDevicesResponse, error)
mustEmbedUnimplementedRelayServiceServer()
}
// UnimplementedRelayServiceServer must be embedded to have forward compatible implementations.
type UnimplementedRelayServiceServer struct {
}
func (UnimplementedRelayServiceServer) List(context.Context, *ListRelaysRequest) (*ListRelaysResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
}
func (UnimplementedRelayServiceServer) AddDevice(context.Context, *AddRelayDeviceRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method AddDevice not implemented")
}
func (UnimplementedRelayServiceServer) RemoveDevice(context.Context, *RemoveRelayDeviceRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method RemoveDevice not implemented")
}
func (UnimplementedRelayServiceServer) ListDevices(context.Context, *ListRelayDevicesRequest) (*ListRelayDevicesResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListDevices not implemented")
}
func (UnimplementedRelayServiceServer) mustEmbedUnimplementedRelayServiceServer() {}
// UnsafeRelayServiceServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to RelayServiceServer will
// result in compilation errors.
type UnsafeRelayServiceServer interface {
mustEmbedUnimplementedRelayServiceServer()
}
func RegisterRelayServiceServer(s grpc.ServiceRegistrar, srv RelayServiceServer) {
s.RegisterService(&RelayService_ServiceDesc, srv)
}
func _RelayService_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListRelaysRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RelayServiceServer).List(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.RelayService/List",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RelayServiceServer).List(ctx, req.(*ListRelaysRequest))
}
return interceptor(ctx, in, info, handler)
}
func _RelayService_AddDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(AddRelayDeviceRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RelayServiceServer).AddDevice(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.RelayService/AddDevice",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RelayServiceServer).AddDevice(ctx, req.(*AddRelayDeviceRequest))
}
return interceptor(ctx, in, info, handler)
}
func _RelayService_RemoveDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(RemoveRelayDeviceRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RelayServiceServer).RemoveDevice(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.RelayService/RemoveDevice",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RelayServiceServer).RemoveDevice(ctx, req.(*RemoveRelayDeviceRequest))
}
return interceptor(ctx, in, info, handler)
}
func _RelayService_ListDevices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListRelayDevicesRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RelayServiceServer).ListDevices(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.RelayService/ListDevices",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RelayServiceServer).ListDevices(ctx, req.(*ListRelayDevicesRequest))
}
return interceptor(ctx, in, info, handler)
}
// RelayService_ServiceDesc is the grpc.ServiceDesc for RelayService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var RelayService_ServiceDesc = grpc.ServiceDesc{
ServiceName: "api.RelayService",
HandlerType: (*RelayServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "List",
Handler: _RelayService_List_Handler,
},
{
MethodName: "AddDevice",
Handler: _RelayService_AddDevice_Handler,
},
{
MethodName: "RemoveDevice",
Handler: _RelayService_RemoveDevice_Handler,
},
{
MethodName: "ListDevices",
Handler: _RelayService_ListDevices_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "api/relay.proto",
}

15
api/go/gw/gw.pb.go vendored
View File

@ -266,11 +266,13 @@ const (
TxAckStatus_IGNORED TxAckStatus = 0
// Packet has been programmed for downlink.
TxAckStatus_OK TxAckStatus = 1
// Rejected because it was already too late to program this packet for downlink.
// Rejected because it was already too late to program this packet for
// downlink.
TxAckStatus_TOO_LATE TxAckStatus = 2
// Rejected because downlink packet timestamp is too much in advance.
TxAckStatus_TOO_EARLY TxAckStatus = 3
// Rejected because there was already a packet programmed in requested timeframe.
// Rejected because there was already a packet programmed in requested
// timeframe.
TxAckStatus_COLLISION_PACKET TxAckStatus = 4
// Rejected because there was already a beacon planned in requested timeframe.
TxAckStatus_COLLISION_BEACON TxAckStatus = 5
@ -1261,7 +1263,8 @@ type UplinkRxInfoLegacy struct {
// Gateway specific context.
Context []byte `protobuf:"bytes,15,opt,name=context,proto3" json:"context,omitempty"`
// Uplink ID (UUID bytes).
// Unique and random ID which can be used to correlate the uplink across multiple logs.
// Unique and random ID which can be used to correlate the uplink across
// multiple logs.
UplinkId []byte `protobuf:"bytes,16,opt,name=uplink_id,json=uplinkId,proto3" json:"uplink_id,omitempty"`
// CRC status.
CrcStatus CRCStatus `protobuf:"varint,17,opt,name=crc_status,json=crcStatus,proto3,enum=gw.CRCStatus" json:"crc_status,omitempty"`
@ -2083,7 +2086,8 @@ type DelayTimingInfo struct {
unknownFields protoimpl.UnknownFields
// Delay (duration).
// The delay will be added to the gateway internal timing, provided by the context object.
// The delay will be added to the gateway internal timing, provided by the
// context object.
Delay *durationpb.Duration `protobuf:"bytes,1,opt,name=delay,proto3" json:"delay,omitempty"`
}
@ -2964,7 +2968,8 @@ type GatewayCommandExecRequest struct {
// Gateway ID.
GatewayId string `protobuf:"bytes,6,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
// Command to execute.
// This command must be pre-configured in the LoRa Gateway Bridge configuration.
// This command must be pre-configured in the LoRa Gateway Bridge
// configuration.
Command string `protobuf:"bytes,2,opt,name=command,proto3" json:"command,omitempty"`
// Execution request ID.
// The same will be returned when the execution of the command has

View File

@ -98,6 +98,8 @@ const (
LogCode_UPLINK_F_CNT_RETRANSMISSION LogCode = 7
// Downlink gateway error.
LogCode_DOWNLINK_GATEWAY LogCode = 8
// Relay new end-device.
LogCode_RELAY_NEW_END_DEVICE LogCode = 9
)
// Enum value maps for LogCode.
@ -112,6 +114,7 @@ var (
6: "UPLINK_MIC",
7: "UPLINK_F_CNT_RETRANSMISSION",
8: "DOWNLINK_GATEWAY",
9: "RELAY_NEW_END_DEVICE",
}
LogCode_value = map[string]int32{
"UNKNOWN": 0,
@ -123,6 +126,7 @@ var (
"UPLINK_MIC": 6,
"UPLINK_F_CNT_RETRANSMISSION": 7,
"DOWNLINK_GATEWAY": 8,
"RELAY_NEW_END_DEVICE": 9,
}
)
@ -274,6 +278,100 @@ func (x *DeviceInfo) GetTags() map[string]string {
return nil
}
// Uplink relay RX information.
type UplinkRelayRxInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Relay DevEUI.
DevEui string `protobuf:"bytes,1,opt,name=dev_eui,json=devEui,proto3" json:"dev_eui,omitempty"`
// Frequency.
Frequency uint32 `protobuf:"varint,2,opt,name=frequency,proto3" json:"frequency,omitempty"`
// Data-rate.
Dr uint32 `protobuf:"varint,3,opt,name=dr,proto3" json:"dr,omitempty"`
// SNR.
Snr int32 `protobuf:"varint,4,opt,name=snr,proto3" json:"snr,omitempty"`
// RSSI.
Rssi int32 `protobuf:"varint,5,opt,name=rssi,proto3" json:"rssi,omitempty"`
// WOR channel.
WorChannel uint32 `protobuf:"varint,6,opt,name=wor_channel,json=worChannel,proto3" json:"wor_channel,omitempty"`
}
func (x *UplinkRelayRxInfo) Reset() {
*x = UplinkRelayRxInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UplinkRelayRxInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UplinkRelayRxInfo) ProtoMessage() {}
func (x *UplinkRelayRxInfo) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[1]
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 UplinkRelayRxInfo.ProtoReflect.Descriptor instead.
func (*UplinkRelayRxInfo) Descriptor() ([]byte, []int) {
return file_integration_integration_proto_rawDescGZIP(), []int{1}
}
func (x *UplinkRelayRxInfo) GetDevEui() string {
if x != nil {
return x.DevEui
}
return ""
}
func (x *UplinkRelayRxInfo) GetFrequency() uint32 {
if x != nil {
return x.Frequency
}
return 0
}
func (x *UplinkRelayRxInfo) GetDr() uint32 {
if x != nil {
return x.Dr
}
return 0
}
func (x *UplinkRelayRxInfo) GetSnr() int32 {
if x != nil {
return x.Snr
}
return 0
}
func (x *UplinkRelayRxInfo) GetRssi() int32 {
if x != nil {
return x.Rssi
}
return 0
}
func (x *UplinkRelayRxInfo) GetWorChannel() uint32 {
if x != nil {
return x.WorChannel
}
return 0
}
// UplinkEvent is the message sent when an uplink payload has been received.
type UplinkEvent struct {
state protoimpl.MessageState
@ -300,18 +398,21 @@ type UplinkEvent struct {
Confirmed bool `protobuf:"varint,9,opt,name=confirmed,proto3" json:"confirmed,omitempty"`
// FRMPayload data.
Data []byte `protobuf:"bytes,10,opt,name=data,proto3" json:"data,omitempty"`
// Note that this is only set when a codec is configured in the Device Profile.
// Note that this is only set when a codec is configured in the Device
// Profile.
Object *structpb.Struct `protobuf:"bytes,11,opt,name=object,proto3" json:"object,omitempty"`
// Receiving gateway RX info.
RxInfo []*gw.UplinkRxInfo `protobuf:"bytes,12,rep,name=rx_info,json=rxInfo,proto3" json:"rx_info,omitempty"`
// TX info.
TxInfo *gw.UplinkTxInfo `protobuf:"bytes,13,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
// Relay info.
RelayRxInfo *UplinkRelayRxInfo `protobuf:"bytes,14,opt,name=relay_rx_info,json=relayRxInfo,proto3" json:"relay_rx_info,omitempty"`
}
func (x *UplinkEvent) Reset() {
*x = UplinkEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[1]
mi := &file_integration_integration_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -324,7 +425,7 @@ func (x *UplinkEvent) String() string {
func (*UplinkEvent) ProtoMessage() {}
func (x *UplinkEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[1]
mi := &file_integration_integration_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -337,7 +438,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{1}
return file_integration_integration_proto_rawDescGZIP(), []int{2}
}
func (x *UplinkEvent) GetDeduplicationId() string {
@ -431,6 +532,13 @@ func (x *UplinkEvent) GetTxInfo() *gw.UplinkTxInfo {
return nil
}
func (x *UplinkEvent) GetRelayRxInfo() *UplinkRelayRxInfo {
if x != nil {
return x.RelayRxInfo
}
return nil
}
// JoinEvent is the message sent when a device joined the network.
// Note: this event is sent at the first uplink after OTAA.
type JoinEvent struct {
@ -446,12 +554,14 @@ type JoinEvent struct {
DeviceInfo *DeviceInfo `protobuf:"bytes,3,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"`
// Device address.
DevAddr string `protobuf:"bytes,4,opt,name=dev_addr,json=devAddr,proto3" json:"dev_addr,omitempty"`
// Relay info.
RelayRxInfo *UplinkRelayRxInfo `protobuf:"bytes,5,opt,name=relay_rx_info,json=relayRxInfo,proto3" json:"relay_rx_info,omitempty"`
}
func (x *JoinEvent) Reset() {
*x = JoinEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[2]
mi := &file_integration_integration_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -464,7 +574,7 @@ func (x *JoinEvent) String() string {
func (*JoinEvent) ProtoMessage() {}
func (x *JoinEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[2]
mi := &file_integration_integration_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -477,7 +587,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{2}
return file_integration_integration_proto_rawDescGZIP(), []int{3}
}
func (x *JoinEvent) GetDeduplicationId() string {
@ -508,6 +618,13 @@ func (x *JoinEvent) GetDevAddr() string {
return ""
}
func (x *JoinEvent) GetRelayRxInfo() *UplinkRelayRxInfo {
if x != nil {
return x.RelayRxInfo
}
return nil
}
// AckEvent is the message sent when a confirmation on a confirmed downlink
// has been received -or- when the downlink timed out.
type AckEvent struct {
@ -532,7 +649,7 @@ type AckEvent struct {
func (x *AckEvent) Reset() {
*x = AckEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[3]
mi := &file_integration_integration_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -545,7 +662,7 @@ func (x *AckEvent) String() string {
func (*AckEvent) ProtoMessage() {}
func (x *AckEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[3]
mi := &file_integration_integration_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -558,7 +675,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{3}
return file_integration_integration_proto_rawDescGZIP(), []int{4}
}
func (x *AckEvent) GetDeduplicationId() string {
@ -603,9 +720,9 @@ func (x *AckEvent) GetFCntDown() uint32 {
return 0
}
// TxAckEvent is the message sent when a downlink was acknowledged by the gateway
// for transmission. As a downlink can be scheduled in the future, this event
// does not confirm that the message has already been transmitted.
// TxAckEvent is the message sent when a downlink was acknowledged by the
// gateway for transmission. As a downlink can be scheduled in the future, this
// event does not confirm that the message has already been transmitted.
type TxAckEvent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -630,7 +747,7 @@ type TxAckEvent struct {
func (x *TxAckEvent) Reset() {
*x = TxAckEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[4]
mi := &file_integration_integration_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -643,7 +760,7 @@ func (x *TxAckEvent) String() string {
func (*TxAckEvent) ProtoMessage() {}
func (x *TxAckEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[4]
mi := &file_integration_integration_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -656,7 +773,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{4}
return file_integration_integration_proto_rawDescGZIP(), []int{5}
}
func (x *TxAckEvent) GetDownlinkId() uint32 {
@ -731,7 +848,7 @@ type LogEvent struct {
func (x *LogEvent) Reset() {
*x = LogEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[5]
mi := &file_integration_integration_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -744,7 +861,7 @@ func (x *LogEvent) String() string {
func (*LogEvent) ProtoMessage() {}
func (x *LogEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[5]
mi := &file_integration_integration_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -757,7 +874,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{5}
return file_integration_integration_proto_rawDescGZIP(), []int{6}
}
func (x *LogEvent) GetTime() *timestamppb.Timestamp {
@ -829,7 +946,7 @@ type StatusEvent struct {
func (x *StatusEvent) Reset() {
*x = StatusEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[6]
mi := &file_integration_integration_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -842,7 +959,7 @@ func (x *StatusEvent) String() string {
func (*StatusEvent) ProtoMessage() {}
func (x *StatusEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[6]
mi := &file_integration_integration_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -855,7 +972,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{6}
return file_integration_integration_proto_rawDescGZIP(), []int{7}
}
func (x *StatusEvent) GetDeduplicationId() string {
@ -926,7 +1043,7 @@ type LocationEvent struct {
func (x *LocationEvent) Reset() {
*x = LocationEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[7]
mi := &file_integration_integration_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -939,7 +1056,7 @@ func (x *LocationEvent) String() string {
func (*LocationEvent) ProtoMessage() {}
func (x *LocationEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[7]
mi := &file_integration_integration_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -952,7 +1069,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{7}
return file_integration_integration_proto_rawDescGZIP(), []int{8}
}
func (x *LocationEvent) GetDeduplicationId() string {
@ -1008,7 +1125,7 @@ type IntegrationEvent struct {
func (x *IntegrationEvent) Reset() {
*x = IntegrationEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[8]
mi := &file_integration_integration_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1021,7 +1138,7 @@ func (x *IntegrationEvent) String() string {
func (*IntegrationEvent) ProtoMessage() {}
func (x *IntegrationEvent) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[8]
mi := &file_integration_integration_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1034,7 +1151,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{8}
return file_integration_integration_proto_rawDescGZIP(), []int{9}
}
func (x *IntegrationEvent) GetDeduplicationId() string {
@ -1106,7 +1223,7 @@ type DownlinkCommand struct {
func (x *DownlinkCommand) Reset() {
*x = DownlinkCommand{}
if protoimpl.UnsafeEnabled {
mi := &file_integration_integration_proto_msgTypes[9]
mi := &file_integration_integration_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1119,7 +1236,7 @@ func (x *DownlinkCommand) String() string {
func (*DownlinkCommand) ProtoMessage() {}
func (x *DownlinkCommand) ProtoReflect() protoreflect.Message {
mi := &file_integration_integration_proto_msgTypes[9]
mi := &file_integration_integration_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1132,7 +1249,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{9}
return file_integration_integration_proto_rawDescGZIP(), []int{10}
}
func (x *DownlinkCommand) GetId() string {
@ -1215,140 +1332,124 @@ var file_integration_integration_proto_rawDesc = []byte{
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, 0x22, 0xc4, 0x03, 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, 0x22, 0xbb, 0x01, 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, 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,
0x38, 0x01, 0x22, 0xa1, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x6c,
0x61, 0x79, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 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, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12,
0x0e, 0x0a, 0x02, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x64, 0x72, 0x12,
0x10, 0x0a, 0x03, 0x73, 0x6e, 0x72, 0x18, 0x04, 0x20, 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, 0x88, 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, 0x22, 0xff, 0x01, 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, 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,
0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
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, 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,
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,
@ -1358,50 +1459,86 @@ var file_integration_integration_proto_rawDesc = []byte{
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, 0xc0, 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, 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,
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, 0xda,
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, 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 (
@ -1417,62 +1554,65 @@ 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, 12)
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
(*UplinkEvent)(nil), // 3: integration.UplinkEvent
(*JoinEvent)(nil), // 4: integration.JoinEvent
(*AckEvent)(nil), // 5: integration.AckEvent
(*TxAckEvent)(nil), // 6: integration.TxAckEvent
(*LogEvent)(nil), // 7: integration.LogEvent
(*StatusEvent)(nil), // 8: integration.StatusEvent
(*LocationEvent)(nil), // 9: integration.LocationEvent
(*IntegrationEvent)(nil), // 10: integration.IntegrationEvent
(*DownlinkCommand)(nil), // 11: integration.DownlinkCommand
nil, // 12: integration.DeviceInfo.TagsEntry
nil, // 13: integration.LogEvent.ContextEntry
(*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp
(*structpb.Struct)(nil), // 15: google.protobuf.Struct
(*gw.UplinkRxInfo)(nil), // 16: gw.UplinkRxInfo
(*gw.UplinkTxInfo)(nil), // 17: gw.UplinkTxInfo
(*gw.DownlinkTxInfo)(nil), // 18: gw.DownlinkTxInfo
(*common.Location)(nil), // 19: common.Location
(*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
(*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp
(*structpb.Struct)(nil), // 16: google.protobuf.Struct
(*gw.UplinkRxInfo)(nil), // 17: gw.UplinkRxInfo
(*gw.UplinkTxInfo)(nil), // 18: gw.UplinkTxInfo
(*gw.DownlinkTxInfo)(nil), // 19: gw.DownlinkTxInfo
(*common.Location)(nil), // 20: common.Location
}
var file_integration_integration_proto_depIdxs = []int32{
12, // 0: integration.DeviceInfo.tags:type_name -> integration.DeviceInfo.TagsEntry
14, // 1: integration.UplinkEvent.time:type_name -> google.protobuf.Timestamp
13, // 0: integration.DeviceInfo.tags:type_name -> integration.DeviceInfo.TagsEntry
15, // 1: integration.UplinkEvent.time:type_name -> google.protobuf.Timestamp
2, // 2: integration.UplinkEvent.device_info:type_name -> integration.DeviceInfo
15, // 3: integration.UplinkEvent.object:type_name -> google.protobuf.Struct
16, // 4: integration.UplinkEvent.rx_info:type_name -> gw.UplinkRxInfo
17, // 5: integration.UplinkEvent.tx_info:type_name -> gw.UplinkTxInfo
14, // 6: integration.JoinEvent.time:type_name -> google.protobuf.Timestamp
2, // 7: integration.JoinEvent.device_info:type_name -> integration.DeviceInfo
14, // 8: integration.AckEvent.time:type_name -> google.protobuf.Timestamp
2, // 9: integration.AckEvent.device_info:type_name -> integration.DeviceInfo
14, // 10: integration.TxAckEvent.time:type_name -> google.protobuf.Timestamp
2, // 11: integration.TxAckEvent.device_info:type_name -> integration.DeviceInfo
18, // 12: integration.TxAckEvent.tx_info:type_name -> gw.DownlinkTxInfo
14, // 13: integration.LogEvent.time:type_name -> google.protobuf.Timestamp
2, // 14: integration.LogEvent.device_info:type_name -> integration.DeviceInfo
0, // 15: integration.LogEvent.level:type_name -> integration.LogLevel
1, // 16: integration.LogEvent.code:type_name -> integration.LogCode
13, // 17: integration.LogEvent.context:type_name -> integration.LogEvent.ContextEntry
14, // 18: integration.StatusEvent.time:type_name -> google.protobuf.Timestamp
2, // 19: integration.StatusEvent.device_info:type_name -> integration.DeviceInfo
14, // 20: integration.LocationEvent.time:type_name -> google.protobuf.Timestamp
2, // 21: integration.LocationEvent.device_info:type_name -> integration.DeviceInfo
19, // 22: integration.LocationEvent.location:type_name -> common.Location
14, // 23: integration.IntegrationEvent.time:type_name -> google.protobuf.Timestamp
2, // 24: integration.IntegrationEvent.device_info:type_name -> integration.DeviceInfo
15, // 25: integration.IntegrationEvent.object:type_name -> google.protobuf.Struct
15, // 26: integration.DownlinkCommand.object:type_name -> google.protobuf.Struct
27, // [27:27] is the sub-list for method output_type
27, // [27:27] is the sub-list for method input_type
27, // [27:27] is the sub-list for extension type_name
27, // [27:27] is the sub-list for extension extendee
0, // [0:27] is the sub-list for field type_name
16, // 3: integration.UplinkEvent.object:type_name -> google.protobuf.Struct
17, // 4: integration.UplinkEvent.rx_info:type_name -> gw.UplinkRxInfo
18, // 5: integration.UplinkEvent.tx_info:type_name -> gw.UplinkTxInfo
3, // 6: integration.UplinkEvent.relay_rx_info:type_name -> integration.UplinkRelayRxInfo
15, // 7: integration.JoinEvent.time:type_name -> google.protobuf.Timestamp
2, // 8: integration.JoinEvent.device_info:type_name -> integration.DeviceInfo
3, // 9: integration.JoinEvent.relay_rx_info:type_name -> integration.UplinkRelayRxInfo
15, // 10: integration.AckEvent.time:type_name -> google.protobuf.Timestamp
2, // 11: integration.AckEvent.device_info:type_name -> integration.DeviceInfo
15, // 12: integration.TxAckEvent.time:type_name -> google.protobuf.Timestamp
2, // 13: integration.TxAckEvent.device_info:type_name -> integration.DeviceInfo
19, // 14: integration.TxAckEvent.tx_info:type_name -> gw.DownlinkTxInfo
15, // 15: integration.LogEvent.time:type_name -> google.protobuf.Timestamp
2, // 16: integration.LogEvent.device_info:type_name -> integration.DeviceInfo
0, // 17: integration.LogEvent.level:type_name -> integration.LogLevel
1, // 18: integration.LogEvent.code:type_name -> integration.LogCode
14, // 19: integration.LogEvent.context:type_name -> integration.LogEvent.ContextEntry
15, // 20: integration.StatusEvent.time:type_name -> google.protobuf.Timestamp
2, // 21: integration.StatusEvent.device_info:type_name -> integration.DeviceInfo
15, // 22: integration.LocationEvent.time:type_name -> google.protobuf.Timestamp
2, // 23: integration.LocationEvent.device_info:type_name -> integration.DeviceInfo
20, // 24: integration.LocationEvent.location:type_name -> common.Location
15, // 25: integration.IntegrationEvent.time:type_name -> google.protobuf.Timestamp
2, // 26: integration.IntegrationEvent.device_info:type_name -> integration.DeviceInfo
16, // 27: integration.IntegrationEvent.object:type_name -> google.protobuf.Struct
16, // 28: integration.DownlinkCommand.object:type_name -> google.protobuf.Struct
29, // [29:29] is the sub-list for method output_type
29, // [29:29] is the sub-list for method input_type
29, // [29:29] is the sub-list for extension type_name
29, // [29:29] is the sub-list for extension extendee
0, // [0:29] is the sub-list for field type_name
}
func init() { file_integration_integration_proto_init() }
@ -1494,7 +1634,7 @@ func file_integration_integration_proto_init() {
}
}
file_integration_integration_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UplinkEvent); i {
switch v := v.(*UplinkRelayRxInfo); i {
case 0:
return &v.state
case 1:
@ -1506,7 +1646,7 @@ func file_integration_integration_proto_init() {
}
}
file_integration_integration_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*JoinEvent); i {
switch v := v.(*UplinkEvent); i {
case 0:
return &v.state
case 1:
@ -1518,7 +1658,7 @@ func file_integration_integration_proto_init() {
}
}
file_integration_integration_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckEvent); i {
switch v := v.(*JoinEvent); i {
case 0:
return &v.state
case 1:
@ -1530,7 +1670,7 @@ func file_integration_integration_proto_init() {
}
}
file_integration_integration_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TxAckEvent); i {
switch v := v.(*AckEvent); i {
case 0:
return &v.state
case 1:
@ -1542,7 +1682,7 @@ func file_integration_integration_proto_init() {
}
}
file_integration_integration_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LogEvent); i {
switch v := v.(*TxAckEvent); i {
case 0:
return &v.state
case 1:
@ -1554,7 +1694,7 @@ func file_integration_integration_proto_init() {
}
}
file_integration_integration_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*StatusEvent); i {
switch v := v.(*LogEvent); i {
case 0:
return &v.state
case 1:
@ -1566,7 +1706,7 @@ func file_integration_integration_proto_init() {
}
}
file_integration_integration_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LocationEvent); i {
switch v := v.(*StatusEvent); i {
case 0:
return &v.state
case 1:
@ -1578,7 +1718,7 @@ func file_integration_integration_proto_init() {
}
}
file_integration_integration_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IntegrationEvent); i {
switch v := v.(*LocationEvent); i {
case 0:
return &v.state
case 1:
@ -1590,6 +1730,18 @@ func file_integration_integration_proto_init() {
}
}
file_integration_integration_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IntegrationEvent); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_integration_integration_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DownlinkCommand); i {
case 0:
return &v.state
@ -1608,7 +1760,7 @@ func file_integration_integration_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_integration_integration_proto_rawDesc,
NumEnums: 2,
NumMessages: 12,
NumMessages: 13,
NumExtensions: 0,
NumServices: 0,
},

View File

@ -28,6 +28,7 @@ api:
protoc $(PROTOC_ARGS) ../proto/api/frame_log.proto
protoc $(PROTOC_ARGS) ../proto/api/multicast_group.proto
protoc $(PROTOC_ARGS) ../proto/api/request_log.proto
protoc $(PROTOC_ARGS) ../proto/api/relay.proto
integration:
mkdir -p integration

View File

@ -866,15 +866,17 @@ export class LoraCloudModemGeolocationServices extends jspb.Message {
getModemEnabled(): boolean;
setModemEnabled(value: boolean): LoraCloudModemGeolocationServices;
getModemPort(): number;
setModemPort(value: number): LoraCloudModemGeolocationServices;
getGnssPort(): number;
setGnssPort(value: number): LoraCloudModemGeolocationServices;
getForwardFPortsList(): Array<number>;
setForwardFPortsList(value: Array<number>): LoraCloudModemGeolocationServices;
clearForwardFPortsList(): LoraCloudModemGeolocationServices;
addForwardFPorts(value: number, index?: number): LoraCloudModemGeolocationServices;
getGnssUseRxTime(): boolean;
setGnssUseRxTime(value: boolean): LoraCloudModemGeolocationServices;
getGnssUseGatewayLocation(): boolean;
setGnssUseGatewayLocation(value: boolean): LoraCloudModemGeolocationServices;
getParseTlv(): boolean;
setParseTlv(value: boolean): LoraCloudModemGeolocationServices;
@ -917,9 +919,9 @@ export namespace LoraCloudModemGeolocationServices {
export type AsObject = {
token: string,
modemEnabled: boolean,
modemPort: number,
gnssPort: number,
forwardFPortsList: Array<number>,
gnssUseRxTime: boolean,
gnssUseGatewayLocation: boolean,
parseTlv: boolean,
geolocationBufferTtl: number,
geolocationMinBufferSize: number,
@ -1553,6 +1555,12 @@ export class IftttIntegration extends jspb.Message {
clearUplinkValuesList(): IftttIntegration;
addUplinkValues(value: string, index?: number): IftttIntegration;
getArbitraryJson(): boolean;
setArbitraryJson(value: boolean): IftttIntegration;
getEventPrefix(): string;
setEventPrefix(value: string): IftttIntegration;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): IftttIntegration.AsObject;
static toObject(includeInstance: boolean, msg: IftttIntegration): IftttIntegration.AsObject;
@ -1566,6 +1574,8 @@ export namespace IftttIntegration {
applicationId: string,
key: string,
uplinkValuesList: Array<string>,
arbitraryJson: boolean,
eventPrefix: string,
}
}

View File

@ -907,7 +907,7 @@ if (goog.DEBUG && !COMPILED) {
* @constructor
*/
proto.api.LoraCloudModemGeolocationServices = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
jspb.Message.initialize(this, opt_data, 0, -1, proto.api.LoraCloudModemGeolocationServices.repeatedFields_, null);
};
goog.inherits(proto.api.LoraCloudModemGeolocationServices, jspb.Message);
if (goog.DEBUG && !COMPILED) {
@ -8074,6 +8074,13 @@ proto.api.LoraCloudIntegration.prototype.hasModemGeolocationServices = function(
/**
* List of repeated fields within this message type.
* @private {!Array<number>}
* @const
*/
proto.api.LoraCloudModemGeolocationServices.repeatedFields_ = [16];
if (jspb.Message.GENERATE_TO_OBJECT) {
@ -8107,9 +8114,9 @@ proto.api.LoraCloudModemGeolocationServices.toObject = function(includeInstance,
var f, obj = {
token: jspb.Message.getFieldWithDefault(msg, 1, ""),
modemEnabled: jspb.Message.getBooleanFieldWithDefault(msg, 2, false),
modemPort: jspb.Message.getFieldWithDefault(msg, 3, 0),
gnssPort: jspb.Message.getFieldWithDefault(msg, 4, 0),
forwardFPortsList: (f = jspb.Message.getRepeatedField(msg, 16)) == null ? undefined : f,
gnssUseRxTime: jspb.Message.getBooleanFieldWithDefault(msg, 5, false),
gnssUseGatewayLocation: jspb.Message.getBooleanFieldWithDefault(msg, 17, false),
parseTlv: jspb.Message.getBooleanFieldWithDefault(msg, 6, false),
geolocationBufferTtl: jspb.Message.getFieldWithDefault(msg, 7, 0),
geolocationMinBufferSize: jspb.Message.getFieldWithDefault(msg, 8, 0),
@ -8164,18 +8171,18 @@ proto.api.LoraCloudModemGeolocationServices.deserializeBinaryFromReader = functi
var value = /** @type {boolean} */ (reader.readBool());
msg.setModemEnabled(value);
break;
case 3:
var value = /** @type {number} */ (reader.readUint32());
msg.setModemPort(value);
break;
case 4:
var value = /** @type {number} */ (reader.readUint32());
msg.setGnssPort(value);
case 16:
var value = /** @type {!Array<number>} */ (reader.readPackedUint32());
msg.setForwardFPortsList(value);
break;
case 5:
var value = /** @type {boolean} */ (reader.readBool());
msg.setGnssUseRxTime(value);
break;
case 17:
var value = /** @type {boolean} */ (reader.readBool());
msg.setGnssUseGatewayLocation(value);
break;
case 6:
var value = /** @type {boolean} */ (reader.readBool());
msg.setParseTlv(value);
@ -8259,17 +8266,10 @@ proto.api.LoraCloudModemGeolocationServices.serializeBinaryToWriter = function(m
f
);
}
f = message.getModemPort();
if (f !== 0) {
writer.writeUint32(
3,
f
);
}
f = message.getGnssPort();
if (f !== 0) {
writer.writeUint32(
4,
f = message.getForwardFPortsList();
if (f.length > 0) {
writer.writePackedUint32(
16,
f
);
}
@ -8280,6 +8280,13 @@ proto.api.LoraCloudModemGeolocationServices.serializeBinaryToWriter = function(m
f
);
}
f = message.getGnssUseGatewayLocation();
if (f) {
writer.writeBool(
17,
f
);
}
f = message.getParseTlv();
if (f) {
writer.writeBool(
@ -8390,38 +8397,39 @@ proto.api.LoraCloudModemGeolocationServices.prototype.setModemEnabled = function
/**
* optional uint32 modem_port = 3;
* @return {number}
* repeated uint32 forward_f_ports = 16;
* @return {!Array<number>}
*/
proto.api.LoraCloudModemGeolocationServices.prototype.getModemPort = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
proto.api.LoraCloudModemGeolocationServices.prototype.getForwardFPortsList = function() {
return /** @type {!Array<number>} */ (jspb.Message.getRepeatedField(this, 16));
};
/**
* @param {!Array<number>} value
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setForwardFPortsList = function(value) {
return jspb.Message.setField(this, 16, value || []);
};
/**
* @param {number} value
* @param {number=} opt_index
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setModemPort = function(value) {
return jspb.Message.setProto3IntField(this, 3, value);
proto.api.LoraCloudModemGeolocationServices.prototype.addForwardFPorts = function(value, opt_index) {
return jspb.Message.addToRepeatedField(this, 16, value, opt_index);
};
/**
* optional uint32 gnss_port = 4;
* @return {number}
*/
proto.api.LoraCloudModemGeolocationServices.prototype.getGnssPort = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
};
/**
* @param {number} value
* Clears the list making it empty but non-null.
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setGnssPort = function(value) {
return jspb.Message.setProto3IntField(this, 4, value);
proto.api.LoraCloudModemGeolocationServices.prototype.clearForwardFPortsList = function() {
return this.setForwardFPortsList([]);
};
@ -8443,6 +8451,24 @@ proto.api.LoraCloudModemGeolocationServices.prototype.setGnssUseRxTime = functio
};
/**
* optional bool gnss_use_gateway_location = 17;
* @return {boolean}
*/
proto.api.LoraCloudModemGeolocationServices.prototype.getGnssUseGatewayLocation = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 17, false));
};
/**
* @param {boolean} value
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setGnssUseGatewayLocation = function(value) {
return jspb.Message.setProto3BooleanField(this, 17, value);
};
/**
* optional bool parse_tlv = 6;
* @return {boolean}
@ -13169,7 +13195,9 @@ proto.api.IftttIntegration.toObject = function(includeInstance, msg) {
var f, obj = {
applicationId: jspb.Message.getFieldWithDefault(msg, 1, ""),
key: jspb.Message.getFieldWithDefault(msg, 2, ""),
uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f
uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f,
arbitraryJson: jspb.Message.getBooleanFieldWithDefault(msg, 4, false),
eventPrefix: jspb.Message.getFieldWithDefault(msg, 5, "")
};
if (includeInstance) {
@ -13218,6 +13246,14 @@ proto.api.IftttIntegration.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {string} */ (reader.readString());
msg.addUplinkValues(value);
break;
case 4:
var value = /** @type {boolean} */ (reader.readBool());
msg.setArbitraryJson(value);
break;
case 5:
var value = /** @type {string} */ (reader.readString());
msg.setEventPrefix(value);
break;
default:
reader.skipField();
break;
@ -13268,6 +13304,20 @@ proto.api.IftttIntegration.serializeBinaryToWriter = function(message, writer) {
f
);
}
f = message.getArbitraryJson();
if (f) {
writer.writeBool(
4,
f
);
}
f = message.getEventPrefix();
if (f.length > 0) {
writer.writeString(
5,
f
);
}
};
@ -13344,6 +13394,42 @@ proto.api.IftttIntegration.prototype.clearUplinkValuesList = function() {
};
/**
* optional bool arbitrary_json = 4;
* @return {boolean}
*/
proto.api.IftttIntegration.prototype.getArbitraryJson = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
};
/**
* @param {boolean} value
* @return {!proto.api.IftttIntegration} returns this
*/
proto.api.IftttIntegration.prototype.setArbitraryJson = function(value) {
return jspb.Message.setProto3BooleanField(this, 4, value);
};
/**
* optional string event_prefix = 5;
* @return {string}
*/
proto.api.IftttIntegration.prototype.getEventPrefix = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
};
/**
* @param {string} value
* @return {!proto.api.IftttIntegration} returns this
*/
proto.api.IftttIntegration.prototype.setEventPrefix = function(value) {
return jspb.Message.setProto3StringField(this, 5, value);
};

View File

@ -35,6 +35,9 @@ export class Device extends jspb.Message {
getTagsMap(): jspb.Map<string, string>;
clearTagsMap(): Device;
getJoinEui(): string;
setJoinEui(value: string): Device;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): Device.AsObject;
static toObject(includeInstance: boolean, msg: Device): Device.AsObject;
@ -54,6 +57,7 @@ export namespace Device {
isDisabled: boolean,
variablesMap: Array<[string, string]>,
tagsMap: Array<[string, string]>,
joinEui: string,
}
}

View File

@ -832,7 +832,8 @@ proto.api.Device.toObject = function(includeInstance, msg) {
skipFcntCheck: jspb.Message.getBooleanFieldWithDefault(msg, 6, false),
isDisabled: jspb.Message.getBooleanFieldWithDefault(msg, 7, false),
variablesMap: (f = msg.getVariablesMap()) ? f.toObject(includeInstance, undefined) : [],
tagsMap: (f = msg.getTagsMap()) ? f.toObject(includeInstance, undefined) : []
tagsMap: (f = msg.getTagsMap()) ? f.toObject(includeInstance, undefined) : [],
joinEui: jspb.Message.getFieldWithDefault(msg, 10, "")
};
if (includeInstance) {
@ -909,6 +910,10 @@ proto.api.Device.deserializeBinaryFromReader = function(msg, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
});
break;
case 10:
var value = /** @type {string} */ (reader.readString());
msg.setJoinEui(value);
break;
default:
reader.skipField();
break;
@ -995,6 +1000,13 @@ proto.api.Device.serializeBinaryToWriter = function(message, writer) {
if (f && f.getLength() > 0) {
f.serializeBinary(9, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
f = message.getJoinEui();
if (f.length > 0) {
writer.writeString(
10,
f
);
}
};
@ -1168,6 +1180,24 @@ proto.api.Device.prototype.clearTagsMap = function() {
return this;};
/**
* optional string join_eui = 10;
* @return {string}
*/
proto.api.Device.prototype.getJoinEui = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 10, ""));
};
/**
* @param {string} value
* @return {!proto.api.Device} returns this
*/
proto.api.Device.prototype.setJoinEui = function(value) {
return jspb.Message.setProto3StringField(this, 10, value);
};

View File

@ -94,6 +94,72 @@ export class DeviceProfile extends jspb.Message {
getRegionConfigId(): string;
setRegionConfigId(value: string): DeviceProfile;
getIsRelay(): boolean;
setIsRelay(value: boolean): DeviceProfile;
getIsRelayEd(): boolean;
setIsRelayEd(value: boolean): DeviceProfile;
getRelayEdRelayOnly(): boolean;
setRelayEdRelayOnly(value: boolean): DeviceProfile;
getRelayEnabled(): boolean;
setRelayEnabled(value: boolean): DeviceProfile;
getRelayCadPeriodicity(): CadPeriodicity;
setRelayCadPeriodicity(value: CadPeriodicity): DeviceProfile;
getRelayDefaultChannelIndex(): number;
setRelayDefaultChannelIndex(value: number): DeviceProfile;
getRelaySecondChannelFreq(): number;
setRelaySecondChannelFreq(value: number): DeviceProfile;
getRelaySecondChannelDr(): number;
setRelaySecondChannelDr(value: number): DeviceProfile;
getRelaySecondChannelAckOffset(): SecondChAckOffset;
setRelaySecondChannelAckOffset(value: SecondChAckOffset): DeviceProfile;
getRelayEdActivationMode(): RelayModeActivation;
setRelayEdActivationMode(value: RelayModeActivation): DeviceProfile;
getRelayEdSmartEnableLevel(): number;
setRelayEdSmartEnableLevel(value: number): DeviceProfile;
getRelayEdBackOff(): number;
setRelayEdBackOff(value: number): DeviceProfile;
getRelayEdUplinkLimitBucketSize(): number;
setRelayEdUplinkLimitBucketSize(value: number): DeviceProfile;
getRelayEdUplinkLimitReloadRate(): number;
setRelayEdUplinkLimitReloadRate(value: number): DeviceProfile;
getRelayJoinReqLimitReloadRate(): number;
setRelayJoinReqLimitReloadRate(value: number): DeviceProfile;
getRelayNotifyLimitReloadRate(): number;
setRelayNotifyLimitReloadRate(value: number): DeviceProfile;
getRelayGlobalUplinkLimitReloadRate(): number;
setRelayGlobalUplinkLimitReloadRate(value: number): DeviceProfile;
getRelayOverallLimitReloadRate(): number;
setRelayOverallLimitReloadRate(value: number): DeviceProfile;
getRelayJoinReqLimitBucketSize(): number;
setRelayJoinReqLimitBucketSize(value: number): DeviceProfile;
getRelayNotifyLimitBucketSize(): number;
setRelayNotifyLimitBucketSize(value: number): DeviceProfile;
getRelayGlobalUplinkLimitBucketSize(): number;
setRelayGlobalUplinkLimitBucketSize(value: number): DeviceProfile;
getRelayOverallLimitBucketSize(): number;
setRelayOverallLimitBucketSize(value: number): DeviceProfile;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): DeviceProfile.AsObject;
static toObject(includeInstance: boolean, msg: DeviceProfile): DeviceProfile.AsObject;
@ -133,6 +199,28 @@ export namespace DeviceProfile {
measurementsMap: Array<[string, Measurement.AsObject]>,
autoDetectMeasurements: boolean,
regionConfigId: string,
isRelay: boolean,
isRelayEd: boolean,
relayEdRelayOnly: boolean,
relayEnabled: boolean,
relayCadPeriodicity: CadPeriodicity,
relayDefaultChannelIndex: number,
relaySecondChannelFreq: number,
relaySecondChannelDr: number,
relaySecondChannelAckOffset: SecondChAckOffset,
relayEdActivationMode: RelayModeActivation,
relayEdSmartEnableLevel: number,
relayEdBackOff: number,
relayEdUplinkLimitBucketSize: number,
relayEdUplinkLimitReloadRate: number,
relayJoinReqLimitReloadRate: number,
relayNotifyLimitReloadRate: number,
relayGlobalUplinkLimitReloadRate: number,
relayOverallLimitReloadRate: number,
relayJoinReqLimitBucketSize: number,
relayNotifyLimitBucketSize: number,
relayGlobalUplinkLimitBucketSize: number,
relayOverallLimitBucketSize: number,
}
}
@ -454,3 +542,25 @@ export enum MeasurementKind {
GAUGE = 3,
STRING = 4,
}
export enum CadPeriodicity {
SEC_1 = 0,
MS_500 = 1,
MS_250 = 2,
MS_100 = 3,
MS_50 = 4,
MS_20 = 5,
}
export enum SecondChAckOffset {
KHZ_0 = 0,
KHZ_200 = 1,
KHZ_400 = 2,
KHZ_800 = 3,
KHZ_1600 = 4,
KHZ_3200 = 5,
}
export enum RelayModeActivation {
DISABLE_RELAY_MODE = 0,
ENABLE_RELAY_MODE = 1,
DYNAMIC = 2,
END_DEVICE_CONTROLLED = 3,
}

View File

@ -21,6 +21,7 @@ goog.object.extend(proto, google_protobuf_empty_pb);
var common_common_pb = require('../common/common_pb.js');
goog.object.extend(proto, common_common_pb);
goog.exportSymbol('proto.api.AdrAlgorithmListItem', null, global);
goog.exportSymbol('proto.api.CadPeriodicity', null, global);
goog.exportSymbol('proto.api.CodecRuntime', null, global);
goog.exportSymbol('proto.api.CreateDeviceProfileRequest', null, global);
goog.exportSymbol('proto.api.CreateDeviceProfileResponse', null, global);
@ -34,6 +35,8 @@ goog.exportSymbol('proto.api.ListDeviceProfilesRequest', null, global);
goog.exportSymbol('proto.api.ListDeviceProfilesResponse', null, global);
goog.exportSymbol('proto.api.Measurement', null, global);
goog.exportSymbol('proto.api.MeasurementKind', null, global);
goog.exportSymbol('proto.api.RelayModeActivation', null, global);
goog.exportSymbol('proto.api.SecondChAckOffset', null, global);
goog.exportSymbol('proto.api.UpdateDeviceProfileRequest', null, global);
/**
* Generated by JsPbCodeGenerator.
@ -368,7 +371,29 @@ proto.api.DeviceProfile.toObject = function(includeInstance, msg) {
tagsMap: (f = msg.getTagsMap()) ? f.toObject(includeInstance, undefined) : [],
measurementsMap: (f = msg.getMeasurementsMap()) ? f.toObject(includeInstance, proto.api.Measurement.toObject) : [],
autoDetectMeasurements: jspb.Message.getBooleanFieldWithDefault(msg, 28, false),
regionConfigId: jspb.Message.getFieldWithDefault(msg, 29, "")
regionConfigId: jspb.Message.getFieldWithDefault(msg, 29, ""),
isRelay: jspb.Message.getBooleanFieldWithDefault(msg, 30, false),
isRelayEd: jspb.Message.getBooleanFieldWithDefault(msg, 31, false),
relayEdRelayOnly: jspb.Message.getBooleanFieldWithDefault(msg, 32, false),
relayEnabled: jspb.Message.getBooleanFieldWithDefault(msg, 33, false),
relayCadPeriodicity: jspb.Message.getFieldWithDefault(msg, 34, 0),
relayDefaultChannelIndex: jspb.Message.getFieldWithDefault(msg, 35, 0),
relaySecondChannelFreq: jspb.Message.getFieldWithDefault(msg, 36, 0),
relaySecondChannelDr: jspb.Message.getFieldWithDefault(msg, 37, 0),
relaySecondChannelAckOffset: jspb.Message.getFieldWithDefault(msg, 38, 0),
relayEdActivationMode: jspb.Message.getFieldWithDefault(msg, 39, 0),
relayEdSmartEnableLevel: jspb.Message.getFieldWithDefault(msg, 40, 0),
relayEdBackOff: jspb.Message.getFieldWithDefault(msg, 41, 0),
relayEdUplinkLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 42, 0),
relayEdUplinkLimitReloadRate: jspb.Message.getFieldWithDefault(msg, 43, 0),
relayJoinReqLimitReloadRate: jspb.Message.getFieldWithDefault(msg, 44, 0),
relayNotifyLimitReloadRate: jspb.Message.getFieldWithDefault(msg, 45, 0),
relayGlobalUplinkLimitReloadRate: jspb.Message.getFieldWithDefault(msg, 46, 0),
relayOverallLimitReloadRate: jspb.Message.getFieldWithDefault(msg, 47, 0),
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)
};
if (includeInstance) {
@ -525,6 +550,94 @@ proto.api.DeviceProfile.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {string} */ (reader.readString());
msg.setRegionConfigId(value);
break;
case 30:
var value = /** @type {boolean} */ (reader.readBool());
msg.setIsRelay(value);
break;
case 31:
var value = /** @type {boolean} */ (reader.readBool());
msg.setIsRelayEd(value);
break;
case 32:
var value = /** @type {boolean} */ (reader.readBool());
msg.setRelayEdRelayOnly(value);
break;
case 33:
var value = /** @type {boolean} */ (reader.readBool());
msg.setRelayEnabled(value);
break;
case 34:
var value = /** @type {!proto.api.CadPeriodicity} */ (reader.readEnum());
msg.setRelayCadPeriodicity(value);
break;
case 35:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayDefaultChannelIndex(value);
break;
case 36:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelaySecondChannelFreq(value);
break;
case 37:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelaySecondChannelDr(value);
break;
case 38:
var value = /** @type {!proto.api.SecondChAckOffset} */ (reader.readEnum());
msg.setRelaySecondChannelAckOffset(value);
break;
case 39:
var value = /** @type {!proto.api.RelayModeActivation} */ (reader.readEnum());
msg.setRelayEdActivationMode(value);
break;
case 40:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayEdSmartEnableLevel(value);
break;
case 41:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayEdBackOff(value);
break;
case 42:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayEdUplinkLimitBucketSize(value);
break;
case 43:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayEdUplinkLimitReloadRate(value);
break;
case 44:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayJoinReqLimitReloadRate(value);
break;
case 45:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayNotifyLimitReloadRate(value);
break;
case 46:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayGlobalUplinkLimitReloadRate(value);
break;
case 47:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayOverallLimitReloadRate(value);
break;
case 48:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayJoinReqLimitBucketSize(value);
break;
case 49:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayNotifyLimitBucketSize(value);
break;
case 50:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayGlobalUplinkLimitBucketSize(value);
break;
case 51:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayOverallLimitBucketSize(value);
break;
default:
reader.skipField();
break;
@ -751,6 +864,160 @@ proto.api.DeviceProfile.serializeBinaryToWriter = function(message, writer) {
f
);
}
f = message.getIsRelay();
if (f) {
writer.writeBool(
30,
f
);
}
f = message.getIsRelayEd();
if (f) {
writer.writeBool(
31,
f
);
}
f = message.getRelayEdRelayOnly();
if (f) {
writer.writeBool(
32,
f
);
}
f = message.getRelayEnabled();
if (f) {
writer.writeBool(
33,
f
);
}
f = message.getRelayCadPeriodicity();
if (f !== 0.0) {
writer.writeEnum(
34,
f
);
}
f = message.getRelayDefaultChannelIndex();
if (f !== 0) {
writer.writeUint32(
35,
f
);
}
f = message.getRelaySecondChannelFreq();
if (f !== 0) {
writer.writeUint32(
36,
f
);
}
f = message.getRelaySecondChannelDr();
if (f !== 0) {
writer.writeUint32(
37,
f
);
}
f = message.getRelaySecondChannelAckOffset();
if (f !== 0.0) {
writer.writeEnum(
38,
f
);
}
f = message.getRelayEdActivationMode();
if (f !== 0.0) {
writer.writeEnum(
39,
f
);
}
f = message.getRelayEdSmartEnableLevel();
if (f !== 0) {
writer.writeUint32(
40,
f
);
}
f = message.getRelayEdBackOff();
if (f !== 0) {
writer.writeUint32(
41,
f
);
}
f = message.getRelayEdUplinkLimitBucketSize();
if (f !== 0) {
writer.writeUint32(
42,
f
);
}
f = message.getRelayEdUplinkLimitReloadRate();
if (f !== 0) {
writer.writeUint32(
43,
f
);
}
f = message.getRelayJoinReqLimitReloadRate();
if (f !== 0) {
writer.writeUint32(
44,
f
);
}
f = message.getRelayNotifyLimitReloadRate();
if (f !== 0) {
writer.writeUint32(
45,
f
);
}
f = message.getRelayGlobalUplinkLimitReloadRate();
if (f !== 0) {
writer.writeUint32(
46,
f
);
}
f = message.getRelayOverallLimitReloadRate();
if (f !== 0) {
writer.writeUint32(
47,
f
);
}
f = message.getRelayJoinReqLimitBucketSize();
if (f !== 0) {
writer.writeUint32(
48,
f
);
}
f = message.getRelayNotifyLimitBucketSize();
if (f !== 0) {
writer.writeUint32(
49,
f
);
}
f = message.getRelayGlobalUplinkLimitBucketSize();
if (f !== 0) {
writer.writeUint32(
50,
f
);
}
f = message.getRelayOverallLimitBucketSize();
if (f !== 0) {
writer.writeUint32(
51,
f
);
}
};
@ -1284,6 +1551,402 @@ proto.api.DeviceProfile.prototype.setRegionConfigId = function(value) {
};
/**
* optional bool is_relay = 30;
* @return {boolean}
*/
proto.api.DeviceProfile.prototype.getIsRelay = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 30, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setIsRelay = function(value) {
return jspb.Message.setProto3BooleanField(this, 30, value);
};
/**
* optional bool is_relay_ed = 31;
* @return {boolean}
*/
proto.api.DeviceProfile.prototype.getIsRelayEd = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 31, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setIsRelayEd = function(value) {
return jspb.Message.setProto3BooleanField(this, 31, value);
};
/**
* optional bool relay_ed_relay_only = 32;
* @return {boolean}
*/
proto.api.DeviceProfile.prototype.getRelayEdRelayOnly = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 32, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdRelayOnly = function(value) {
return jspb.Message.setProto3BooleanField(this, 32, value);
};
/**
* optional bool relay_enabled = 33;
* @return {boolean}
*/
proto.api.DeviceProfile.prototype.getRelayEnabled = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 33, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEnabled = function(value) {
return jspb.Message.setProto3BooleanField(this, 33, value);
};
/**
* optional CadPeriodicity relay_cad_periodicity = 34;
* @return {!proto.api.CadPeriodicity}
*/
proto.api.DeviceProfile.prototype.getRelayCadPeriodicity = function() {
return /** @type {!proto.api.CadPeriodicity} */ (jspb.Message.getFieldWithDefault(this, 34, 0));
};
/**
* @param {!proto.api.CadPeriodicity} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayCadPeriodicity = function(value) {
return jspb.Message.setProto3EnumField(this, 34, value);
};
/**
* optional uint32 relay_default_channel_index = 35;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayDefaultChannelIndex = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 35, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayDefaultChannelIndex = function(value) {
return jspb.Message.setProto3IntField(this, 35, value);
};
/**
* optional uint32 relay_second_channel_freq = 36;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelaySecondChannelFreq = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 36, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelaySecondChannelFreq = function(value) {
return jspb.Message.setProto3IntField(this, 36, value);
};
/**
* optional uint32 relay_second_channel_dr = 37;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelaySecondChannelDr = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 37, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelaySecondChannelDr = function(value) {
return jspb.Message.setProto3IntField(this, 37, value);
};
/**
* optional SecondChAckOffset relay_second_channel_ack_offset = 38;
* @return {!proto.api.SecondChAckOffset}
*/
proto.api.DeviceProfile.prototype.getRelaySecondChannelAckOffset = function() {
return /** @type {!proto.api.SecondChAckOffset} */ (jspb.Message.getFieldWithDefault(this, 38, 0));
};
/**
* @param {!proto.api.SecondChAckOffset} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelaySecondChannelAckOffset = function(value) {
return jspb.Message.setProto3EnumField(this, 38, value);
};
/**
* optional RelayModeActivation relay_ed_activation_mode = 39;
* @return {!proto.api.RelayModeActivation}
*/
proto.api.DeviceProfile.prototype.getRelayEdActivationMode = function() {
return /** @type {!proto.api.RelayModeActivation} */ (jspb.Message.getFieldWithDefault(this, 39, 0));
};
/**
* @param {!proto.api.RelayModeActivation} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdActivationMode = function(value) {
return jspb.Message.setProto3EnumField(this, 39, value);
};
/**
* optional uint32 relay_ed_smart_enable_level = 40;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayEdSmartEnableLevel = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 40, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdSmartEnableLevel = function(value) {
return jspb.Message.setProto3IntField(this, 40, value);
};
/**
* optional uint32 relay_ed_back_off = 41;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayEdBackOff = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 41, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdBackOff = function(value) {
return jspb.Message.setProto3IntField(this, 41, value);
};
/**
* optional uint32 relay_ed_uplink_limit_bucket_size = 42;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayEdUplinkLimitBucketSize = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 42, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdUplinkLimitBucketSize = function(value) {
return jspb.Message.setProto3IntField(this, 42, value);
};
/**
* optional uint32 relay_ed_uplink_limit_reload_rate = 43;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayEdUplinkLimitReloadRate = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 43, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdUplinkLimitReloadRate = function(value) {
return jspb.Message.setProto3IntField(this, 43, value);
};
/**
* optional uint32 relay_join_req_limit_reload_rate = 44;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayJoinReqLimitReloadRate = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 44, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayJoinReqLimitReloadRate = function(value) {
return jspb.Message.setProto3IntField(this, 44, value);
};
/**
* optional uint32 relay_notify_limit_reload_rate = 45;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayNotifyLimitReloadRate = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 45, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayNotifyLimitReloadRate = function(value) {
return jspb.Message.setProto3IntField(this, 45, value);
};
/**
* optional uint32 relay_global_uplink_limit_reload_rate = 46;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayGlobalUplinkLimitReloadRate = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 46, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayGlobalUplinkLimitReloadRate = function(value) {
return jspb.Message.setProto3IntField(this, 46, value);
};
/**
* optional uint32 relay_overall_limit_reload_rate = 47;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayOverallLimitReloadRate = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 47, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayOverallLimitReloadRate = function(value) {
return jspb.Message.setProto3IntField(this, 47, value);
};
/**
* optional uint32 relay_join_req_limit_bucket_size = 48;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayJoinReqLimitBucketSize = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 48, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayJoinReqLimitBucketSize = function(value) {
return jspb.Message.setProto3IntField(this, 48, value);
};
/**
* optional uint32 relay_notify_limit_bucket_size = 49;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayNotifyLimitBucketSize = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 49, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayNotifyLimitBucketSize = function(value) {
return jspb.Message.setProto3IntField(this, 49, value);
};
/**
* optional uint32 relay_global_uplink_limit_bucket_size = 50;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayGlobalUplinkLimitBucketSize = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 50, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayGlobalUplinkLimitBucketSize = function(value) {
return jspb.Message.setProto3IntField(this, 50, value);
};
/**
* optional uint32 relay_overall_limit_bucket_size = 51;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayOverallLimitBucketSize = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 51, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayOverallLimitBucketSize = function(value) {
return jspb.Message.setProto3IntField(this, 51, value);
};
@ -3611,4 +4274,38 @@ proto.api.MeasurementKind = {
STRING: 4
};
/**
* @enum {number}
*/
proto.api.CadPeriodicity = {
SEC_1: 0,
MS_500: 1,
MS_250: 2,
MS_100: 3,
MS_50: 4,
MS_20: 5
};
/**
* @enum {number}
*/
proto.api.SecondChAckOffset = {
KHZ_0: 0,
KHZ_200: 1,
KHZ_400: 2,
KHZ_800: 3,
KHZ_1600: 4,
KHZ_3200: 5
};
/**
* @enum {number}
*/
proto.api.RelayModeActivation = {
DISABLE_RELAY_MODE: 0,
ENABLE_RELAY_MODE: 1,
DYNAMIC: 2,
END_DEVICE_CONTROLLED: 3
};
goog.object.extend(exports, proto.api);

View File

@ -35,8 +35,11 @@ export class UplinkFrameLog extends jspb.Message {
hasTime(): boolean;
clearTime(): UplinkFrameLog;
getPlaintextMacCommands(): boolean;
setPlaintextMacCommands(value: boolean): UplinkFrameLog;
getPlaintextFOpts(): boolean;
setPlaintextFOpts(value: boolean): UplinkFrameLog;
getPlaintextFrmPayload(): boolean;
setPlaintextFrmPayload(value: boolean): UplinkFrameLog;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): UplinkFrameLog.AsObject;
@ -55,7 +58,8 @@ export namespace UplinkFrameLog {
devAddr: string,
devEui: string,
time?: google_protobuf_timestamp_pb.Timestamp.AsObject,
plaintextMacCommands: boolean,
plaintextFOpts: boolean,
plaintextFrmPayload: boolean,
}
}
@ -90,8 +94,11 @@ export class DownlinkFrameLog extends jspb.Message {
getDevEui(): string;
setDevEui(value: string): DownlinkFrameLog;
getPlaintextMacCommands(): boolean;
setPlaintextMacCommands(value: boolean): DownlinkFrameLog;
getPlaintextFOpts(): boolean;
setPlaintextFOpts(value: boolean): DownlinkFrameLog;
getPlaintextFrmPayload(): boolean;
setPlaintextFrmPayload(value: boolean): DownlinkFrameLog;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): DownlinkFrameLog.AsObject;
@ -111,7 +118,8 @@ export namespace DownlinkFrameLog {
mType: common_common_pb.MType,
devAddr: string,
devEui: string,
plaintextMacCommands: boolean,
plaintextFOpts: boolean,
plaintextFrmPayload: boolean,
}
}

View File

@ -109,7 +109,8 @@ proto.api.UplinkFrameLog.toObject = function(includeInstance, msg) {
devAddr: jspb.Message.getFieldWithDefault(msg, 5, ""),
devEui: jspb.Message.getFieldWithDefault(msg, 6, ""),
time: (f = msg.getTime()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f),
plaintextMacCommands: jspb.Message.getBooleanFieldWithDefault(msg, 8, false)
plaintextFOpts: jspb.Message.getBooleanFieldWithDefault(msg, 8, false),
plaintextFrmPayload: jspb.Message.getBooleanFieldWithDefault(msg, 9, false)
};
if (includeInstance) {
@ -179,7 +180,11 @@ proto.api.UplinkFrameLog.deserializeBinaryFromReader = function(msg, reader) {
break;
case 8:
var value = /** @type {boolean} */ (reader.readBool());
msg.setPlaintextMacCommands(value);
msg.setPlaintextFOpts(value);
break;
case 9:
var value = /** @type {boolean} */ (reader.readBool());
msg.setPlaintextFrmPayload(value);
break;
default:
reader.skipField();
@ -262,13 +267,20 @@ proto.api.UplinkFrameLog.serializeBinaryToWriter = function(message, writer) {
google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter
);
}
f = message.getPlaintextMacCommands();
f = message.getPlaintextFOpts();
if (f) {
writer.writeBool(
8,
f
);
}
f = message.getPlaintextFrmPayload();
if (f) {
writer.writeBool(
9,
f
);
}
};
@ -481,10 +493,10 @@ proto.api.UplinkFrameLog.prototype.hasTime = function() {
/**
* optional bool plaintext_mac_commands = 8;
* optional bool plaintext_f_opts = 8;
* @return {boolean}
*/
proto.api.UplinkFrameLog.prototype.getPlaintextMacCommands = function() {
proto.api.UplinkFrameLog.prototype.getPlaintextFOpts = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false));
};
@ -493,11 +505,29 @@ proto.api.UplinkFrameLog.prototype.getPlaintextMacCommands = function() {
* @param {boolean} value
* @return {!proto.api.UplinkFrameLog} returns this
*/
proto.api.UplinkFrameLog.prototype.setPlaintextMacCommands = function(value) {
proto.api.UplinkFrameLog.prototype.setPlaintextFOpts = function(value) {
return jspb.Message.setProto3BooleanField(this, 8, value);
};
/**
* optional bool plaintext_frm_payload = 9;
* @return {boolean}
*/
proto.api.UplinkFrameLog.prototype.getPlaintextFrmPayload = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 9, false));
};
/**
* @param {boolean} value
* @return {!proto.api.UplinkFrameLog} returns this
*/
proto.api.UplinkFrameLog.prototype.setPlaintextFrmPayload = function(value) {
return jspb.Message.setProto3BooleanField(this, 9, value);
};
@ -538,7 +568,8 @@ proto.api.DownlinkFrameLog.toObject = function(includeInstance, msg) {
mType: jspb.Message.getFieldWithDefault(msg, 6, 0),
devAddr: jspb.Message.getFieldWithDefault(msg, 7, ""),
devEui: jspb.Message.getFieldWithDefault(msg, 8, ""),
plaintextMacCommands: jspb.Message.getBooleanFieldWithDefault(msg, 9, false)
plaintextFOpts: jspb.Message.getBooleanFieldWithDefault(msg, 9, false),
plaintextFrmPayload: jspb.Message.getBooleanFieldWithDefault(msg, 10, false)
};
if (includeInstance) {
@ -611,7 +642,11 @@ proto.api.DownlinkFrameLog.deserializeBinaryFromReader = function(msg, reader) {
break;
case 9:
var value = /** @type {boolean} */ (reader.readBool());
msg.setPlaintextMacCommands(value);
msg.setPlaintextFOpts(value);
break;
case 10:
var value = /** @type {boolean} */ (reader.readBool());
msg.setPlaintextFrmPayload(value);
break;
default:
reader.skipField();
@ -700,13 +735,20 @@ proto.api.DownlinkFrameLog.serializeBinaryToWriter = function(message, writer) {
f
);
}
f = message.getPlaintextMacCommands();
f = message.getPlaintextFOpts();
if (f) {
writer.writeBool(
9,
f
);
}
f = message.getPlaintextFrmPayload();
if (f) {
writer.writeBool(
10,
f
);
}
};
@ -917,10 +959,10 @@ proto.api.DownlinkFrameLog.prototype.setDevEui = function(value) {
/**
* optional bool plaintext_mac_commands = 9;
* optional bool plaintext_f_opts = 9;
* @return {boolean}
*/
proto.api.DownlinkFrameLog.prototype.getPlaintextMacCommands = function() {
proto.api.DownlinkFrameLog.prototype.getPlaintextFOpts = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 9, false));
};
@ -929,9 +971,27 @@ proto.api.DownlinkFrameLog.prototype.getPlaintextMacCommands = function() {
* @param {boolean} value
* @return {!proto.api.DownlinkFrameLog} returns this
*/
proto.api.DownlinkFrameLog.prototype.setPlaintextMacCommands = function(value) {
proto.api.DownlinkFrameLog.prototype.setPlaintextFOpts = function(value) {
return jspb.Message.setProto3BooleanField(this, 9, value);
};
/**
* optional bool plaintext_frm_payload = 10;
* @return {boolean}
*/
proto.api.DownlinkFrameLog.prototype.getPlaintextFrmPayload = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 10, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DownlinkFrameLog} returns this
*/
proto.api.DownlinkFrameLog.prototype.setPlaintextFrmPayload = function(value) {
return jspb.Message.setProto3BooleanField(this, 10, value);
};
goog.object.extend(exports, proto.api);

68
api/grpc-web/api/relay_grpc_web_pb.d.ts vendored Normal file
View File

@ -0,0 +1,68 @@
import * as grpcWeb from 'grpc-web';
import * as api_relay_pb from '../api/relay_pb';
import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb';
export class RelayServiceClient {
constructor (hostname: string,
credentials?: null | { [index: string]: string; },
options?: null | { [index: string]: any; });
list(
request: api_relay_pb.ListRelaysRequest,
metadata: grpcWeb.Metadata | undefined,
callback: (err: grpcWeb.RpcError,
response: api_relay_pb.ListRelaysResponse) => void
): grpcWeb.ClientReadableStream<api_relay_pb.ListRelaysResponse>;
addDevice(
request: api_relay_pb.AddRelayDeviceRequest,
metadata: grpcWeb.Metadata | undefined,
callback: (err: grpcWeb.RpcError,
response: google_protobuf_empty_pb.Empty) => void
): grpcWeb.ClientReadableStream<google_protobuf_empty_pb.Empty>;
removeDevice(
request: api_relay_pb.RemoveRelayDeviceRequest,
metadata: grpcWeb.Metadata | undefined,
callback: (err: grpcWeb.RpcError,
response: google_protobuf_empty_pb.Empty) => void
): grpcWeb.ClientReadableStream<google_protobuf_empty_pb.Empty>;
listDevices(
request: api_relay_pb.ListRelayDevicesRequest,
metadata: grpcWeb.Metadata | undefined,
callback: (err: grpcWeb.RpcError,
response: api_relay_pb.ListRelayDevicesResponse) => void
): grpcWeb.ClientReadableStream<api_relay_pb.ListRelayDevicesResponse>;
}
export class RelayServicePromiseClient {
constructor (hostname: string,
credentials?: null | { [index: string]: string; },
options?: null | { [index: string]: any; });
list(
request: api_relay_pb.ListRelaysRequest,
metadata?: grpcWeb.Metadata
): Promise<api_relay_pb.ListRelaysResponse>;
addDevice(
request: api_relay_pb.AddRelayDeviceRequest,
metadata?: grpcWeb.Metadata
): Promise<google_protobuf_empty_pb.Empty>;
removeDevice(
request: api_relay_pb.RemoveRelayDeviceRequest,
metadata?: grpcWeb.Metadata
): Promise<google_protobuf_empty_pb.Empty>;
listDevices(
request: api_relay_pb.ListRelayDevicesRequest,
metadata?: grpcWeb.Metadata
): Promise<api_relay_pb.ListRelayDevicesResponse>;
}

328
api/grpc-web/api/relay_grpc_web_pb.js vendored Normal file
View File

@ -0,0 +1,328 @@
/**
* @fileoverview gRPC-Web generated client stub for api
* @enhanceable
* @public
*/
// Code generated by protoc-gen-grpc-web. DO NOT EDIT.
// versions:
// protoc-gen-grpc-web v1.4.2
// protoc v3.12.4
// source: api/relay.proto
/* eslint-disable */
// @ts-nocheck
const grpc = {};
grpc.web = require('grpc-web');
var google_api_annotations_pb = require('../google/api/annotations_pb.js')
var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/timestamp_pb.js')
var google_protobuf_empty_pb = require('google-protobuf/google/protobuf/empty_pb.js')
const proto = {};
proto.api = require('./relay_pb.js');
/**
* @param {string} hostname
* @param {?Object} credentials
* @param {?grpc.web.ClientOptions} options
* @constructor
* @struct
* @final
*/
proto.api.RelayServiceClient =
function(hostname, credentials, options) {
if (!options) options = {};
options.format = 'text';
/**
* @private @const {!grpc.web.GrpcWebClientBase} The client
*/
this.client_ = new grpc.web.GrpcWebClientBase(options);
/**
* @private @const {string} The hostname
*/
this.hostname_ = hostname.replace(/\/+$/, '');
};
/**
* @param {string} hostname
* @param {?Object} credentials
* @param {?grpc.web.ClientOptions} options
* @constructor
* @struct
* @final
*/
proto.api.RelayServicePromiseClient =
function(hostname, credentials, options) {
if (!options) options = {};
options.format = 'text';
/**
* @private @const {!grpc.web.GrpcWebClientBase} The client
*/
this.client_ = new grpc.web.GrpcWebClientBase(options);
/**
* @private @const {string} The hostname
*/
this.hostname_ = hostname.replace(/\/+$/, '');
};
/**
* @const
* @type {!grpc.web.MethodDescriptor<
* !proto.api.ListRelaysRequest,
* !proto.api.ListRelaysResponse>}
*/
const methodDescriptor_RelayService_List = new grpc.web.MethodDescriptor(
'/api.RelayService/List',
grpc.web.MethodType.UNARY,
proto.api.ListRelaysRequest,
proto.api.ListRelaysResponse,
/**
* @param {!proto.api.ListRelaysRequest} request
* @return {!Uint8Array}
*/
function(request) {
return request.serializeBinary();
},
proto.api.ListRelaysResponse.deserializeBinary
);
/**
* @param {!proto.api.ListRelaysRequest} request The
* request proto
* @param {?Object<string, string>} metadata User defined
* call metadata
* @param {function(?grpc.web.RpcError, ?proto.api.ListRelaysResponse)}
* callback The callback function(error, response)
* @return {!grpc.web.ClientReadableStream<!proto.api.ListRelaysResponse>|undefined}
* The XHR Node Readable Stream
*/
proto.api.RelayServiceClient.prototype.list =
function(request, metadata, callback) {
return this.client_.rpcCall(this.hostname_ +
'/api.RelayService/List',
request,
metadata || {},
methodDescriptor_RelayService_List,
callback);
};
/**
* @param {!proto.api.ListRelaysRequest} request The
* request proto
* @param {?Object<string, string>=} metadata User defined
* call metadata
* @return {!Promise<!proto.api.ListRelaysResponse>}
* Promise that resolves to the response
*/
proto.api.RelayServicePromiseClient.prototype.list =
function(request, metadata) {
return this.client_.unaryCall(this.hostname_ +
'/api.RelayService/List',
request,
metadata || {},
methodDescriptor_RelayService_List);
};
/**
* @const
* @type {!grpc.web.MethodDescriptor<
* !proto.api.AddRelayDeviceRequest,
* !proto.google.protobuf.Empty>}
*/
const methodDescriptor_RelayService_AddDevice = new grpc.web.MethodDescriptor(
'/api.RelayService/AddDevice',
grpc.web.MethodType.UNARY,
proto.api.AddRelayDeviceRequest,
google_protobuf_empty_pb.Empty,
/**
* @param {!proto.api.AddRelayDeviceRequest} request
* @return {!Uint8Array}
*/
function(request) {
return request.serializeBinary();
},
google_protobuf_empty_pb.Empty.deserializeBinary
);
/**
* @param {!proto.api.AddRelayDeviceRequest} request The
* request proto
* @param {?Object<string, string>} metadata User defined
* call metadata
* @param {function(?grpc.web.RpcError, ?proto.google.protobuf.Empty)}
* callback The callback function(error, response)
* @return {!grpc.web.ClientReadableStream<!proto.google.protobuf.Empty>|undefined}
* The XHR Node Readable Stream
*/
proto.api.RelayServiceClient.prototype.addDevice =
function(request, metadata, callback) {
return this.client_.rpcCall(this.hostname_ +
'/api.RelayService/AddDevice',
request,
metadata || {},
methodDescriptor_RelayService_AddDevice,
callback);
};
/**
* @param {!proto.api.AddRelayDeviceRequest} request The
* request proto
* @param {?Object<string, string>=} metadata User defined
* call metadata
* @return {!Promise<!proto.google.protobuf.Empty>}
* Promise that resolves to the response
*/
proto.api.RelayServicePromiseClient.prototype.addDevice =
function(request, metadata) {
return this.client_.unaryCall(this.hostname_ +
'/api.RelayService/AddDevice',
request,
metadata || {},
methodDescriptor_RelayService_AddDevice);
};
/**
* @const
* @type {!grpc.web.MethodDescriptor<
* !proto.api.RemoveRelayDeviceRequest,
* !proto.google.protobuf.Empty>}
*/
const methodDescriptor_RelayService_RemoveDevice = new grpc.web.MethodDescriptor(
'/api.RelayService/RemoveDevice',
grpc.web.MethodType.UNARY,
proto.api.RemoveRelayDeviceRequest,
google_protobuf_empty_pb.Empty,
/**
* @param {!proto.api.RemoveRelayDeviceRequest} request
* @return {!Uint8Array}
*/
function(request) {
return request.serializeBinary();
},
google_protobuf_empty_pb.Empty.deserializeBinary
);
/**
* @param {!proto.api.RemoveRelayDeviceRequest} request The
* request proto
* @param {?Object<string, string>} metadata User defined
* call metadata
* @param {function(?grpc.web.RpcError, ?proto.google.protobuf.Empty)}
* callback The callback function(error, response)
* @return {!grpc.web.ClientReadableStream<!proto.google.protobuf.Empty>|undefined}
* The XHR Node Readable Stream
*/
proto.api.RelayServiceClient.prototype.removeDevice =
function(request, metadata, callback) {
return this.client_.rpcCall(this.hostname_ +
'/api.RelayService/RemoveDevice',
request,
metadata || {},
methodDescriptor_RelayService_RemoveDevice,
callback);
};
/**
* @param {!proto.api.RemoveRelayDeviceRequest} request The
* request proto
* @param {?Object<string, string>=} metadata User defined
* call metadata
* @return {!Promise<!proto.google.protobuf.Empty>}
* Promise that resolves to the response
*/
proto.api.RelayServicePromiseClient.prototype.removeDevice =
function(request, metadata) {
return this.client_.unaryCall(this.hostname_ +
'/api.RelayService/RemoveDevice',
request,
metadata || {},
methodDescriptor_RelayService_RemoveDevice);
};
/**
* @const
* @type {!grpc.web.MethodDescriptor<
* !proto.api.ListRelayDevicesRequest,
* !proto.api.ListRelayDevicesResponse>}
*/
const methodDescriptor_RelayService_ListDevices = new grpc.web.MethodDescriptor(
'/api.RelayService/ListDevices',
grpc.web.MethodType.UNARY,
proto.api.ListRelayDevicesRequest,
proto.api.ListRelayDevicesResponse,
/**
* @param {!proto.api.ListRelayDevicesRequest} request
* @return {!Uint8Array}
*/
function(request) {
return request.serializeBinary();
},
proto.api.ListRelayDevicesResponse.deserializeBinary
);
/**
* @param {!proto.api.ListRelayDevicesRequest} request The
* request proto
* @param {?Object<string, string>} metadata User defined
* call metadata
* @param {function(?grpc.web.RpcError, ?proto.api.ListRelayDevicesResponse)}
* callback The callback function(error, response)
* @return {!grpc.web.ClientReadableStream<!proto.api.ListRelayDevicesResponse>|undefined}
* The XHR Node Readable Stream
*/
proto.api.RelayServiceClient.prototype.listDevices =
function(request, metadata, callback) {
return this.client_.rpcCall(this.hostname_ +
'/api.RelayService/ListDevices',
request,
metadata || {},
methodDescriptor_RelayService_ListDevices,
callback);
};
/**
* @param {!proto.api.ListRelayDevicesRequest} request The
* request proto
* @param {?Object<string, string>=} metadata User defined
* call metadata
* @return {!Promise<!proto.api.ListRelayDevicesResponse>}
* Promise that resolves to the response
*/
proto.api.RelayServicePromiseClient.prototype.listDevices =
function(request, metadata) {
return this.client_.unaryCall(this.hostname_ +
'/api.RelayService/ListDevices',
request,
metadata || {},
methodDescriptor_RelayService_ListDevices);
};
module.exports = proto.api;

201
api/grpc-web/api/relay_pb.d.ts vendored Normal file
View File

@ -0,0 +1,201 @@
import * as jspb from 'google-protobuf'
import * as google_api_annotations_pb from '../google/api/annotations_pb';
import * as google_protobuf_timestamp_pb from 'google-protobuf/google/protobuf/timestamp_pb';
import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb';
export class RelayListItem extends jspb.Message {
getDevEui(): string;
setDevEui(value: string): RelayListItem;
getName(): string;
setName(value: string): RelayListItem;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): RelayListItem.AsObject;
static toObject(includeInstance: boolean, msg: RelayListItem): RelayListItem.AsObject;
static serializeBinaryToWriter(message: RelayListItem, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): RelayListItem;
static deserializeBinaryFromReader(message: RelayListItem, reader: jspb.BinaryReader): RelayListItem;
}
export namespace RelayListItem {
export type AsObject = {
devEui: string,
name: string,
}
}
export class ListRelaysRequest extends jspb.Message {
getLimit(): number;
setLimit(value: number): ListRelaysRequest;
getOffset(): number;
setOffset(value: number): ListRelaysRequest;
getApplicationId(): string;
setApplicationId(value: string): ListRelaysRequest;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): ListRelaysRequest.AsObject;
static toObject(includeInstance: boolean, msg: ListRelaysRequest): ListRelaysRequest.AsObject;
static serializeBinaryToWriter(message: ListRelaysRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): ListRelaysRequest;
static deserializeBinaryFromReader(message: ListRelaysRequest, reader: jspb.BinaryReader): ListRelaysRequest;
}
export namespace ListRelaysRequest {
export type AsObject = {
limit: number,
offset: number,
applicationId: string,
}
}
export class ListRelaysResponse extends jspb.Message {
getTotalCount(): number;
setTotalCount(value: number): ListRelaysResponse;
getResultList(): Array<RelayListItem>;
setResultList(value: Array<RelayListItem>): ListRelaysResponse;
clearResultList(): ListRelaysResponse;
addResult(value?: RelayListItem, index?: number): RelayListItem;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): ListRelaysResponse.AsObject;
static toObject(includeInstance: boolean, msg: ListRelaysResponse): ListRelaysResponse.AsObject;
static serializeBinaryToWriter(message: ListRelaysResponse, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): ListRelaysResponse;
static deserializeBinaryFromReader(message: ListRelaysResponse, reader: jspb.BinaryReader): ListRelaysResponse;
}
export namespace ListRelaysResponse {
export type AsObject = {
totalCount: number,
resultList: Array<RelayListItem.AsObject>,
}
}
export class AddRelayDeviceRequest extends jspb.Message {
getRelayDevEui(): string;
setRelayDevEui(value: string): AddRelayDeviceRequest;
getDeviceDevEui(): string;
setDeviceDevEui(value: string): AddRelayDeviceRequest;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): AddRelayDeviceRequest.AsObject;
static toObject(includeInstance: boolean, msg: AddRelayDeviceRequest): AddRelayDeviceRequest.AsObject;
static serializeBinaryToWriter(message: AddRelayDeviceRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): AddRelayDeviceRequest;
static deserializeBinaryFromReader(message: AddRelayDeviceRequest, reader: jspb.BinaryReader): AddRelayDeviceRequest;
}
export namespace AddRelayDeviceRequest {
export type AsObject = {
relayDevEui: string,
deviceDevEui: string,
}
}
export class RemoveRelayDeviceRequest extends jspb.Message {
getRelayDevEui(): string;
setRelayDevEui(value: string): RemoveRelayDeviceRequest;
getDeviceDevEui(): string;
setDeviceDevEui(value: string): RemoveRelayDeviceRequest;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): RemoveRelayDeviceRequest.AsObject;
static toObject(includeInstance: boolean, msg: RemoveRelayDeviceRequest): RemoveRelayDeviceRequest.AsObject;
static serializeBinaryToWriter(message: RemoveRelayDeviceRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): RemoveRelayDeviceRequest;
static deserializeBinaryFromReader(message: RemoveRelayDeviceRequest, reader: jspb.BinaryReader): RemoveRelayDeviceRequest;
}
export namespace RemoveRelayDeviceRequest {
export type AsObject = {
relayDevEui: string,
deviceDevEui: string,
}
}
export class ListRelayDevicesRequest extends jspb.Message {
getLimit(): number;
setLimit(value: number): ListRelayDevicesRequest;
getOffset(): number;
setOffset(value: number): ListRelayDevicesRequest;
getRelayDevEui(): string;
setRelayDevEui(value: string): ListRelayDevicesRequest;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): ListRelayDevicesRequest.AsObject;
static toObject(includeInstance: boolean, msg: ListRelayDevicesRequest): ListRelayDevicesRequest.AsObject;
static serializeBinaryToWriter(message: ListRelayDevicesRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): ListRelayDevicesRequest;
static deserializeBinaryFromReader(message: ListRelayDevicesRequest, reader: jspb.BinaryReader): ListRelayDevicesRequest;
}
export namespace ListRelayDevicesRequest {
export type AsObject = {
limit: number,
offset: number,
relayDevEui: string,
}
}
export class RelayDeviceListItem extends jspb.Message {
getDevEui(): string;
setDevEui(value: string): RelayDeviceListItem;
getCreatedAt(): google_protobuf_timestamp_pb.Timestamp | undefined;
setCreatedAt(value?: google_protobuf_timestamp_pb.Timestamp): RelayDeviceListItem;
hasCreatedAt(): boolean;
clearCreatedAt(): RelayDeviceListItem;
getName(): string;
setName(value: string): RelayDeviceListItem;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): RelayDeviceListItem.AsObject;
static toObject(includeInstance: boolean, msg: RelayDeviceListItem): RelayDeviceListItem.AsObject;
static serializeBinaryToWriter(message: RelayDeviceListItem, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): RelayDeviceListItem;
static deserializeBinaryFromReader(message: RelayDeviceListItem, reader: jspb.BinaryReader): RelayDeviceListItem;
}
export namespace RelayDeviceListItem {
export type AsObject = {
devEui: string,
createdAt?: google_protobuf_timestamp_pb.Timestamp.AsObject,
name: string,
}
}
export class ListRelayDevicesResponse extends jspb.Message {
getTotalCount(): number;
setTotalCount(value: number): ListRelayDevicesResponse;
getResultList(): Array<RelayDeviceListItem>;
setResultList(value: Array<RelayDeviceListItem>): ListRelayDevicesResponse;
clearResultList(): ListRelayDevicesResponse;
addResult(value?: RelayDeviceListItem, index?: number): RelayDeviceListItem;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): ListRelayDevicesResponse.AsObject;
static toObject(includeInstance: boolean, msg: ListRelayDevicesResponse): ListRelayDevicesResponse.AsObject;
static serializeBinaryToWriter(message: ListRelayDevicesResponse, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): ListRelayDevicesResponse;
static deserializeBinaryFromReader(message: ListRelayDevicesResponse, reader: jspb.BinaryReader): ListRelayDevicesResponse;
}
export namespace ListRelayDevicesResponse {
export type AsObject = {
totalCount: number,
resultList: Array<RelayDeviceListItem.AsObject>,
}
}

1648
api/grpc-web/api/relay_pb.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -50,6 +50,9 @@ export class BackendRule extends jspb.Message {
getProtocol(): string;
setProtocol(value: string): BackendRule;
getOverridesByRequestProtocolMap(): jspb.Map<string, BackendRule>;
clearOverridesByRequestProtocolMap(): BackendRule;
getAuthenticationCase(): BackendRule.AuthenticationCase;
serializeBinary(): Uint8Array;
@ -71,6 +74,7 @@ export namespace BackendRule {
jwtAudience: string,
disableAuth: boolean,
protocol: string,
overridesByRequestProtocolMap: Array<[string, BackendRule.AsObject]>,
}
export enum PathTranslation {

View File

@ -284,7 +284,8 @@ proto.google.api.BackendRule.toObject = function(includeInstance, msg) {
pathTranslation: jspb.Message.getFieldWithDefault(msg, 6, 0),
jwtAudience: jspb.Message.getFieldWithDefault(msg, 7, ""),
disableAuth: jspb.Message.getBooleanFieldWithDefault(msg, 8, false),
protocol: jspb.Message.getFieldWithDefault(msg, 9, "")
protocol: jspb.Message.getFieldWithDefault(msg, 9, ""),
overridesByRequestProtocolMap: (f = msg.getOverridesByRequestProtocolMap()) ? f.toObject(includeInstance, proto.google.api.BackendRule.toObject) : []
};
if (includeInstance) {
@ -357,6 +358,12 @@ proto.google.api.BackendRule.deserializeBinaryFromReader = function(msg, reader)
var value = /** @type {string} */ (reader.readString());
msg.setProtocol(value);
break;
case 10:
var value = msg.getOverridesByRequestProtocolMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.google.api.BackendRule.deserializeBinaryFromReader, "", new proto.google.api.BackendRule());
});
break;
default:
reader.skipField();
break;
@ -449,6 +456,10 @@ proto.google.api.BackendRule.serializeBinaryToWriter = function(message, writer)
f
);
}
f = message.getOverridesByRequestProtocolMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(10, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.google.api.BackendRule.serializeBinaryToWriter);
}
};
@ -659,4 +670,26 @@ proto.google.api.BackendRule.prototype.setProtocol = function(value) {
};
/**
* map<string, BackendRule> overrides_by_request_protocol = 10;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,!proto.google.api.BackendRule>}
*/
proto.google.api.BackendRule.prototype.getOverridesByRequestProtocolMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,!proto.google.api.BackendRule>} */ (
jspb.Message.getMapField(this, 10, opt_noLazyCreate,
proto.google.api.BackendRule));
};
/**
* Clears values from the map. The map will be non-null.
* @return {!proto.google.api.BackendRule} returns this
*/
proto.google.api.BackendRule.prototype.clearOverridesByRequestProtocolMap = function() {
this.getOverridesByRequestProtocolMap().clear();
return this;};
goog.object.extend(exports, proto.google.api);

View File

@ -137,6 +137,9 @@ export class Publishing extends jspb.Message {
clearLibrarySettingsList(): Publishing;
addLibrarySettings(value?: ClientLibrarySettings, index?: number): ClientLibrarySettings;
getProtoReferenceDocumentationUri(): string;
setProtoReferenceDocumentationUri(value: string): Publishing;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): Publishing.AsObject;
static toObject(includeInstance: boolean, msg: Publishing): Publishing.AsObject;
@ -156,6 +159,7 @@ export namespace Publishing {
docTagPrefix: string,
organization: ClientLibraryOrganization,
librarySettingsList: Array<ClientLibrarySettings.AsObject>,
protoReferenceDocumentationUri: string,
}
}
@ -273,6 +277,27 @@ export class DotnetSettings extends jspb.Message {
hasCommon(): boolean;
clearCommon(): DotnetSettings;
getRenamedServicesMap(): jspb.Map<string, string>;
clearRenamedServicesMap(): DotnetSettings;
getRenamedResourcesMap(): jspb.Map<string, string>;
clearRenamedResourcesMap(): DotnetSettings;
getIgnoredResourcesList(): Array<string>;
setIgnoredResourcesList(value: Array<string>): DotnetSettings;
clearIgnoredResourcesList(): DotnetSettings;
addIgnoredResources(value: string, index?: number): DotnetSettings;
getForcedNamespaceAliasesList(): Array<string>;
setForcedNamespaceAliasesList(value: Array<string>): DotnetSettings;
clearForcedNamespaceAliasesList(): DotnetSettings;
addForcedNamespaceAliases(value: string, index?: number): DotnetSettings;
getHandwrittenSignaturesList(): Array<string>;
setHandwrittenSignaturesList(value: Array<string>): DotnetSettings;
clearHandwrittenSignaturesList(): DotnetSettings;
addHandwrittenSignatures(value: string, index?: number): DotnetSettings;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): DotnetSettings.AsObject;
static toObject(includeInstance: boolean, msg: DotnetSettings): DotnetSettings.AsObject;
@ -284,6 +309,11 @@ export class DotnetSettings extends jspb.Message {
export namespace DotnetSettings {
export type AsObject = {
common?: CommonLanguageSettings.AsObject,
renamedServicesMap: Array<[string, string]>,
renamedResourcesMap: Array<[string, string]>,
ignoredResourcesList: Array<string>,
forcedNamespaceAliasesList: Array<string>,
handwrittenSignaturesList: Array<string>,
}
}
@ -394,6 +424,9 @@ export enum ClientLibraryOrganization {
ADS = 2,
PHOTOS = 3,
STREET_VIEW = 4,
SHOPPING = 5,
GEO = 6,
GENERATIVE_AI = 7,
}
export enum ClientLibraryDestination {
CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0,

View File

@ -215,7 +215,7 @@ if (goog.DEBUG && !COMPILED) {
* @constructor
*/
proto.google.api.DotnetSettings = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
jspb.Message.initialize(this, opt_data, 0, -1, proto.google.api.DotnetSettings.repeatedFields_, null);
};
goog.inherits(proto.google.api.DotnetSettings, jspb.Message);
if (goog.DEBUG && !COMPILED) {
@ -1142,7 +1142,8 @@ proto.google.api.Publishing.toObject = function(includeInstance, msg) {
docTagPrefix: jspb.Message.getFieldWithDefault(msg, 106, ""),
organization: jspb.Message.getFieldWithDefault(msg, 107, 0),
librarySettingsList: jspb.Message.toObjectList(msg.getLibrarySettingsList(),
proto.google.api.ClientLibrarySettings.toObject, includeInstance)
proto.google.api.ClientLibrarySettings.toObject, includeInstance),
protoReferenceDocumentationUri: jspb.Message.getFieldWithDefault(msg, 110, "")
};
if (includeInstance) {
@ -1217,6 +1218,10 @@ proto.google.api.Publishing.deserializeBinaryFromReader = function(msg, reader)
reader.readMessage(value,proto.google.api.ClientLibrarySettings.deserializeBinaryFromReader);
msg.addLibrarySettings(value);
break;
case 110:
var value = /** @type {string} */ (reader.readString());
msg.setProtoReferenceDocumentationUri(value);
break;
default:
reader.skipField();
break;
@ -1311,6 +1316,13 @@ proto.google.api.Publishing.serializeBinaryToWriter = function(message, writer)
proto.google.api.ClientLibrarySettings.serializeBinaryToWriter
);
}
f = message.getProtoReferenceDocumentationUri();
if (f.length > 0) {
writer.writeString(
110,
f
);
}
};
@ -1535,6 +1547,24 @@ proto.google.api.Publishing.prototype.clearLibrarySettingsList = function() {
};
/**
* optional string proto_reference_documentation_uri = 110;
* @return {string}
*/
proto.google.api.Publishing.prototype.getProtoReferenceDocumentationUri = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 110, ""));
};
/**
* @param {string} value
* @return {!proto.google.api.Publishing} returns this
*/
proto.google.api.Publishing.prototype.setProtoReferenceDocumentationUri = function(value) {
return jspb.Message.setProto3StringField(this, 110, value);
};
@ -2354,6 +2384,13 @@ proto.google.api.NodeSettings.prototype.hasCommon = function() {
/**
* List of repeated fields within this message type.
* @private {!Array<number>}
* @const
*/
proto.google.api.DotnetSettings.repeatedFields_ = [4,5,6];
if (jspb.Message.GENERATE_TO_OBJECT) {
@ -2385,7 +2422,12 @@ proto.google.api.DotnetSettings.prototype.toObject = function(opt_includeInstanc
*/
proto.google.api.DotnetSettings.toObject = function(includeInstance, msg) {
var f, obj = {
common: (f = msg.getCommon()) && proto.google.api.CommonLanguageSettings.toObject(includeInstance, f)
common: (f = msg.getCommon()) && proto.google.api.CommonLanguageSettings.toObject(includeInstance, f),
renamedServicesMap: (f = msg.getRenamedServicesMap()) ? f.toObject(includeInstance, undefined) : [],
renamedResourcesMap: (f = msg.getRenamedResourcesMap()) ? f.toObject(includeInstance, undefined) : [],
ignoredResourcesList: (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f,
forcedNamespaceAliasesList: (f = jspb.Message.getRepeatedField(msg, 5)) == null ? undefined : f,
handwrittenSignaturesList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f
};
if (includeInstance) {
@ -2427,6 +2469,30 @@ proto.google.api.DotnetSettings.deserializeBinaryFromReader = function(msg, read
reader.readMessage(value,proto.google.api.CommonLanguageSettings.deserializeBinaryFromReader);
msg.setCommon(value);
break;
case 2:
var value = msg.getRenamedServicesMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
});
break;
case 3:
var value = msg.getRenamedResourcesMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
});
break;
case 4:
var value = /** @type {string} */ (reader.readString());
msg.addIgnoredResources(value);
break;
case 5:
var value = /** @type {string} */ (reader.readString());
msg.addForcedNamespaceAliases(value);
break;
case 6:
var value = /** @type {string} */ (reader.readString());
msg.addHandwrittenSignatures(value);
break;
default:
reader.skipField();
break;
@ -2464,6 +2530,35 @@ proto.google.api.DotnetSettings.serializeBinaryToWriter = function(message, writ
proto.google.api.CommonLanguageSettings.serializeBinaryToWriter
);
}
f = message.getRenamedServicesMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
f = message.getRenamedResourcesMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(3, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
f = message.getIgnoredResourcesList();
if (f.length > 0) {
writer.writeRepeatedString(
4,
f
);
}
f = message.getForcedNamespaceAliasesList();
if (f.length > 0) {
writer.writeRepeatedString(
5,
f
);
}
f = message.getHandwrittenSignaturesList();
if (f.length > 0) {
writer.writeRepeatedString(
6,
f
);
}
};
@ -2504,6 +2599,161 @@ proto.google.api.DotnetSettings.prototype.hasCommon = function() {
};
/**
* map<string, string> renamed_services = 2;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,string>}
*/
proto.google.api.DotnetSettings.prototype.getRenamedServicesMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,string>} */ (
jspb.Message.getMapField(this, 2, opt_noLazyCreate,
null));
};
/**
* Clears values from the map. The map will be non-null.
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.clearRenamedServicesMap = function() {
this.getRenamedServicesMap().clear();
return this;};
/**
* map<string, string> renamed_resources = 3;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,string>}
*/
proto.google.api.DotnetSettings.prototype.getRenamedResourcesMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,string>} */ (
jspb.Message.getMapField(this, 3, opt_noLazyCreate,
null));
};
/**
* Clears values from the map. The map will be non-null.
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.clearRenamedResourcesMap = function() {
this.getRenamedResourcesMap().clear();
return this;};
/**
* repeated string ignored_resources = 4;
* @return {!Array<string>}
*/
proto.google.api.DotnetSettings.prototype.getIgnoredResourcesList = function() {
return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 4));
};
/**
* @param {!Array<string>} value
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.setIgnoredResourcesList = function(value) {
return jspb.Message.setField(this, 4, value || []);
};
/**
* @param {string} value
* @param {number=} opt_index
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.addIgnoredResources = function(value, opt_index) {
return jspb.Message.addToRepeatedField(this, 4, value, opt_index);
};
/**
* Clears the list making it empty but non-null.
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.clearIgnoredResourcesList = function() {
return this.setIgnoredResourcesList([]);
};
/**
* repeated string forced_namespace_aliases = 5;
* @return {!Array<string>}
*/
proto.google.api.DotnetSettings.prototype.getForcedNamespaceAliasesList = function() {
return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 5));
};
/**
* @param {!Array<string>} value
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.setForcedNamespaceAliasesList = function(value) {
return jspb.Message.setField(this, 5, value || []);
};
/**
* @param {string} value
* @param {number=} opt_index
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.addForcedNamespaceAliases = function(value, opt_index) {
return jspb.Message.addToRepeatedField(this, 5, value, opt_index);
};
/**
* Clears the list making it empty but non-null.
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.clearForcedNamespaceAliasesList = function() {
return this.setForcedNamespaceAliasesList([]);
};
/**
* repeated string handwritten_signatures = 6;
* @return {!Array<string>}
*/
proto.google.api.DotnetSettings.prototype.getHandwrittenSignaturesList = function() {
return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 6));
};
/**
* @param {!Array<string>} value
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.setHandwrittenSignaturesList = function(value) {
return jspb.Message.setField(this, 6, value || []);
};
/**
* @param {string} value
* @param {number=} opt_index
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.addHandwrittenSignatures = function(value, opt_index) {
return jspb.Message.addToRepeatedField(this, 6, value, opt_index);
};
/**
* Clears the list making it empty but non-null.
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.clearHandwrittenSignaturesList = function() {
return this.setHandwrittenSignaturesList([]);
};
@ -3278,7 +3528,10 @@ proto.google.api.ClientLibraryOrganization = {
CLOUD: 1,
ADS: 2,
PHOTOS: 3,
STREET_VIEW: 4
STREET_VIEW: 4,
SHOPPING: 5,
GEO: 6,
GENERATIVE_AI: 7
};
/**

View File

@ -31,4 +31,6 @@ export enum ErrorReason {
SYSTEM_PARAMETER_UNSUPPORTED = 26,
ORG_RESTRICTION_VIOLATION = 27,
ORG_RESTRICTION_HEADER_INVALID = 28,
SERVICE_NOT_VISIBLE = 29,
GCP_SUSPENDED = 30,
}

View File

@ -44,7 +44,9 @@ proto.google.api.ErrorReason = {
RESOURCE_USAGE_RESTRICTION_VIOLATED: 25,
SYSTEM_PARAMETER_UNSUPPORTED: 26,
ORG_RESTRICTION_VIOLATION: 27,
ORG_RESTRICTION_HEADER_INVALID: 28
ORG_RESTRICTION_HEADER_INVALID: 28,
SERVICE_NOT_VISIBLE: 29,
GCP_SUSPENDED: 30
};
goog.object.extend(exports, proto.google.api);

View File

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

View File

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

1
api/js/Makefile vendored
View File

@ -29,6 +29,7 @@ api:
protoc ${PROTOC_GRPC_ARGS} ../proto/api/frame_log.proto
protoc ${PROTOC_GRPC_ARGS} ../proto/api/multicast_group.proto
protoc ${PROTOC_GRPC_ARGS} ../proto/api/request_log.proto
protoc ${PROTOC_GRPC_ARGS} ../proto/api/relay.proto
integration:
protoc ${PROTOC_ARGS} ../proto/integration/integration.proto

View File

@ -701,7 +701,8 @@ function deserialize_google_protobuf_Empty(buffer_arg) {
}
// ApplicationService is the service providing API methods for managing applications.
// ApplicationService is the service providing API methods for managing
// applications.
var ApplicationServiceService = exports.ApplicationServiceService = {
// Create creates the given application.
create: {

View File

@ -942,15 +942,17 @@ export class LoraCloudModemGeolocationServices extends jspb.Message {
getModemEnabled(): boolean;
setModemEnabled(value: boolean): void;
getModemPort(): number;
setModemPort(value: number): void;
getGnssPort(): number;
setGnssPort(value: number): void;
clearForwardFPortsList(): void;
getForwardFPortsList(): Array<number>;
setForwardFPortsList(value: Array<number>): void;
addForwardFPorts(value: number, index?: number): number;
getGnssUseRxTime(): boolean;
setGnssUseRxTime(value: boolean): void;
getGnssUseGatewayLocation(): boolean;
setGnssUseGatewayLocation(value: boolean): void;
getParseTlv(): boolean;
setParseTlv(value: boolean): void;
@ -995,9 +997,9 @@ export namespace LoraCloudModemGeolocationServices {
export type AsObject = {
token: string,
modemEnabled: boolean,
modemPort: number,
gnssPort: number,
forwardFPortsList: Array<number>,
gnssUseRxTime: boolean,
gnssUseGatewayLocation: boolean,
parseTlv: boolean,
geolocationBufferTtl: number,
geolocationMinBufferSize: number,
@ -1689,6 +1691,12 @@ export class IftttIntegration extends jspb.Message {
setUplinkValuesList(value: Array<string>): void;
addUplinkValues(value: string, index?: number): string;
getArbitraryJson(): boolean;
setArbitraryJson(value: boolean): void;
getEventPrefix(): string;
setEventPrefix(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): IftttIntegration.AsObject;
static toObject(includeInstance: boolean, msg: IftttIntegration): IftttIntegration.AsObject;
@ -1704,6 +1712,8 @@ export namespace IftttIntegration {
applicationId: string,
key: string,
uplinkValuesList: Array<string>,
arbitraryJson: boolean,
eventPrefix: string,
}
}

View File

@ -907,7 +907,7 @@ if (goog.DEBUG && !COMPILED) {
* @constructor
*/
proto.api.LoraCloudModemGeolocationServices = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
jspb.Message.initialize(this, opt_data, 0, -1, proto.api.LoraCloudModemGeolocationServices.repeatedFields_, null);
};
goog.inherits(proto.api.LoraCloudModemGeolocationServices, jspb.Message);
if (goog.DEBUG && !COMPILED) {
@ -8074,6 +8074,13 @@ proto.api.LoraCloudIntegration.prototype.hasModemGeolocationServices = function(
/**
* List of repeated fields within this message type.
* @private {!Array<number>}
* @const
*/
proto.api.LoraCloudModemGeolocationServices.repeatedFields_ = [16];
if (jspb.Message.GENERATE_TO_OBJECT) {
@ -8107,9 +8114,9 @@ proto.api.LoraCloudModemGeolocationServices.toObject = function(includeInstance,
var f, obj = {
token: jspb.Message.getFieldWithDefault(msg, 1, ""),
modemEnabled: jspb.Message.getBooleanFieldWithDefault(msg, 2, false),
modemPort: jspb.Message.getFieldWithDefault(msg, 3, 0),
gnssPort: jspb.Message.getFieldWithDefault(msg, 4, 0),
forwardFPortsList: (f = jspb.Message.getRepeatedField(msg, 16)) == null ? undefined : f,
gnssUseRxTime: jspb.Message.getBooleanFieldWithDefault(msg, 5, false),
gnssUseGatewayLocation: jspb.Message.getBooleanFieldWithDefault(msg, 17, false),
parseTlv: jspb.Message.getBooleanFieldWithDefault(msg, 6, false),
geolocationBufferTtl: jspb.Message.getFieldWithDefault(msg, 7, 0),
geolocationMinBufferSize: jspb.Message.getFieldWithDefault(msg, 8, 0),
@ -8164,18 +8171,18 @@ proto.api.LoraCloudModemGeolocationServices.deserializeBinaryFromReader = functi
var value = /** @type {boolean} */ (reader.readBool());
msg.setModemEnabled(value);
break;
case 3:
var value = /** @type {number} */ (reader.readUint32());
msg.setModemPort(value);
break;
case 4:
var value = /** @type {number} */ (reader.readUint32());
msg.setGnssPort(value);
case 16:
var value = /** @type {!Array<number>} */ (reader.readPackedUint32());
msg.setForwardFPortsList(value);
break;
case 5:
var value = /** @type {boolean} */ (reader.readBool());
msg.setGnssUseRxTime(value);
break;
case 17:
var value = /** @type {boolean} */ (reader.readBool());
msg.setGnssUseGatewayLocation(value);
break;
case 6:
var value = /** @type {boolean} */ (reader.readBool());
msg.setParseTlv(value);
@ -8259,17 +8266,10 @@ proto.api.LoraCloudModemGeolocationServices.serializeBinaryToWriter = function(m
f
);
}
f = message.getModemPort();
if (f !== 0) {
writer.writeUint32(
3,
f
);
}
f = message.getGnssPort();
if (f !== 0) {
writer.writeUint32(
4,
f = message.getForwardFPortsList();
if (f.length > 0) {
writer.writePackedUint32(
16,
f
);
}
@ -8280,6 +8280,13 @@ proto.api.LoraCloudModemGeolocationServices.serializeBinaryToWriter = function(m
f
);
}
f = message.getGnssUseGatewayLocation();
if (f) {
writer.writeBool(
17,
f
);
}
f = message.getParseTlv();
if (f) {
writer.writeBool(
@ -8390,38 +8397,39 @@ proto.api.LoraCloudModemGeolocationServices.prototype.setModemEnabled = function
/**
* optional uint32 modem_port = 3;
* @return {number}
* repeated uint32 forward_f_ports = 16;
* @return {!Array<number>}
*/
proto.api.LoraCloudModemGeolocationServices.prototype.getModemPort = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
proto.api.LoraCloudModemGeolocationServices.prototype.getForwardFPortsList = function() {
return /** @type {!Array<number>} */ (jspb.Message.getRepeatedField(this, 16));
};
/**
* @param {!Array<number>} value
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setForwardFPortsList = function(value) {
return jspb.Message.setField(this, 16, value || []);
};
/**
* @param {number} value
* @param {number=} opt_index
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setModemPort = function(value) {
return jspb.Message.setProto3IntField(this, 3, value);
proto.api.LoraCloudModemGeolocationServices.prototype.addForwardFPorts = function(value, opt_index) {
return jspb.Message.addToRepeatedField(this, 16, value, opt_index);
};
/**
* optional uint32 gnss_port = 4;
* @return {number}
*/
proto.api.LoraCloudModemGeolocationServices.prototype.getGnssPort = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
};
/**
* @param {number} value
* Clears the list making it empty but non-null.
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setGnssPort = function(value) {
return jspb.Message.setProto3IntField(this, 4, value);
proto.api.LoraCloudModemGeolocationServices.prototype.clearForwardFPortsList = function() {
return this.setForwardFPortsList([]);
};
@ -8443,6 +8451,24 @@ proto.api.LoraCloudModemGeolocationServices.prototype.setGnssUseRxTime = functio
};
/**
* optional bool gnss_use_gateway_location = 17;
* @return {boolean}
*/
proto.api.LoraCloudModemGeolocationServices.prototype.getGnssUseGatewayLocation = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 17, false));
};
/**
* @param {boolean} value
* @return {!proto.api.LoraCloudModemGeolocationServices} returns this
*/
proto.api.LoraCloudModemGeolocationServices.prototype.setGnssUseGatewayLocation = function(value) {
return jspb.Message.setProto3BooleanField(this, 17, value);
};
/**
* optional bool parse_tlv = 6;
* @return {boolean}
@ -13169,7 +13195,9 @@ proto.api.IftttIntegration.toObject = function(includeInstance, msg) {
var f, obj = {
applicationId: jspb.Message.getFieldWithDefault(msg, 1, ""),
key: jspb.Message.getFieldWithDefault(msg, 2, ""),
uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f
uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f,
arbitraryJson: jspb.Message.getBooleanFieldWithDefault(msg, 4, false),
eventPrefix: jspb.Message.getFieldWithDefault(msg, 5, "")
};
if (includeInstance) {
@ -13218,6 +13246,14 @@ proto.api.IftttIntegration.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {string} */ (reader.readString());
msg.addUplinkValues(value);
break;
case 4:
var value = /** @type {boolean} */ (reader.readBool());
msg.setArbitraryJson(value);
break;
case 5:
var value = /** @type {string} */ (reader.readString());
msg.setEventPrefix(value);
break;
default:
reader.skipField();
break;
@ -13268,6 +13304,20 @@ proto.api.IftttIntegration.serializeBinaryToWriter = function(message, writer) {
f
);
}
f = message.getArbitraryJson();
if (f) {
writer.writeBool(
4,
f
);
}
f = message.getEventPrefix();
if (f.length > 0) {
writer.writeString(
5,
f
);
}
};
@ -13344,6 +13394,42 @@ proto.api.IftttIntegration.prototype.clearUplinkValuesList = function() {
};
/**
* optional bool arbitrary_json = 4;
* @return {boolean}
*/
proto.api.IftttIntegration.prototype.getArbitraryJson = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
};
/**
* @param {boolean} value
* @return {!proto.api.IftttIntegration} returns this
*/
proto.api.IftttIntegration.prototype.setArbitraryJson = function(value) {
return jspb.Message.setProto3BooleanField(this, 4, value);
};
/**
* optional string event_prefix = 5;
* @return {string}
*/
proto.api.IftttIntegration.prototype.getEventPrefix = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
};
/**
* @param {string} value
* @return {!proto.api.IftttIntegration} returns this
*/
proto.api.IftttIntegration.prototype.setEventPrefix = function(value) {
return jspb.Message.setProto3StringField(this, 5, value);
};

View File

@ -34,6 +34,9 @@ export class Device extends jspb.Message {
clearVariablesMap(): void;
getTagsMap(): jspb.Map<string, string>;
clearTagsMap(): void;
getJoinEui(): string;
setJoinEui(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): Device.AsObject;
static toObject(includeInstance: boolean, msg: Device): Device.AsObject;
@ -55,6 +58,7 @@ export namespace Device {
isDisabled: boolean,
variablesMap: Array<[string, string]>,
tagsMap: Array<[string, string]>,
joinEui: string,
}
}

View File

@ -832,7 +832,8 @@ proto.api.Device.toObject = function(includeInstance, msg) {
skipFcntCheck: jspb.Message.getBooleanFieldWithDefault(msg, 6, false),
isDisabled: jspb.Message.getBooleanFieldWithDefault(msg, 7, false),
variablesMap: (f = msg.getVariablesMap()) ? f.toObject(includeInstance, undefined) : [],
tagsMap: (f = msg.getTagsMap()) ? f.toObject(includeInstance, undefined) : []
tagsMap: (f = msg.getTagsMap()) ? f.toObject(includeInstance, undefined) : [],
joinEui: jspb.Message.getFieldWithDefault(msg, 10, "")
};
if (includeInstance) {
@ -909,6 +910,10 @@ proto.api.Device.deserializeBinaryFromReader = function(msg, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
});
break;
case 10:
var value = /** @type {string} */ (reader.readString());
msg.setJoinEui(value);
break;
default:
reader.skipField();
break;
@ -995,6 +1000,13 @@ proto.api.Device.serializeBinaryToWriter = function(message, writer) {
if (f && f.getLength() > 0) {
f.serializeBinary(9, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
f = message.getJoinEui();
if (f.length > 0) {
writer.writeString(
10,
f
);
}
};
@ -1168,6 +1180,24 @@ proto.api.Device.prototype.clearTagsMap = function() {
return this;};
/**
* optional string join_eui = 10;
* @return {string}
*/
proto.api.Device.prototype.getJoinEui = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 10, ""));
};
/**
* @param {string} value
* @return {!proto.api.Device} returns this
*/
proto.api.Device.prototype.setJoinEui = function(value) {
return jspb.Message.setProto3StringField(this, 10, value);
};

View File

@ -93,6 +93,72 @@ export class DeviceProfile extends jspb.Message {
getRegionConfigId(): string;
setRegionConfigId(value: string): void;
getIsRelay(): boolean;
setIsRelay(value: boolean): void;
getIsRelayEd(): boolean;
setIsRelayEd(value: boolean): void;
getRelayEdRelayOnly(): boolean;
setRelayEdRelayOnly(value: boolean): void;
getRelayEnabled(): boolean;
setRelayEnabled(value: boolean): void;
getRelayCadPeriodicity(): CadPeriodicityMap[keyof CadPeriodicityMap];
setRelayCadPeriodicity(value: CadPeriodicityMap[keyof CadPeriodicityMap]): void;
getRelayDefaultChannelIndex(): number;
setRelayDefaultChannelIndex(value: number): void;
getRelaySecondChannelFreq(): number;
setRelaySecondChannelFreq(value: number): void;
getRelaySecondChannelDr(): number;
setRelaySecondChannelDr(value: number): void;
getRelaySecondChannelAckOffset(): SecondChAckOffsetMap[keyof SecondChAckOffsetMap];
setRelaySecondChannelAckOffset(value: SecondChAckOffsetMap[keyof SecondChAckOffsetMap]): void;
getRelayEdActivationMode(): RelayModeActivationMap[keyof RelayModeActivationMap];
setRelayEdActivationMode(value: RelayModeActivationMap[keyof RelayModeActivationMap]): void;
getRelayEdSmartEnableLevel(): number;
setRelayEdSmartEnableLevel(value: number): void;
getRelayEdBackOff(): number;
setRelayEdBackOff(value: number): void;
getRelayEdUplinkLimitBucketSize(): number;
setRelayEdUplinkLimitBucketSize(value: number): void;
getRelayEdUplinkLimitReloadRate(): number;
setRelayEdUplinkLimitReloadRate(value: number): void;
getRelayJoinReqLimitReloadRate(): number;
setRelayJoinReqLimitReloadRate(value: number): void;
getRelayNotifyLimitReloadRate(): number;
setRelayNotifyLimitReloadRate(value: number): void;
getRelayGlobalUplinkLimitReloadRate(): number;
setRelayGlobalUplinkLimitReloadRate(value: number): void;
getRelayOverallLimitReloadRate(): number;
setRelayOverallLimitReloadRate(value: number): void;
getRelayJoinReqLimitBucketSize(): number;
setRelayJoinReqLimitBucketSize(value: number): void;
getRelayNotifyLimitBucketSize(): number;
setRelayNotifyLimitBucketSize(value: number): void;
getRelayGlobalUplinkLimitBucketSize(): number;
setRelayGlobalUplinkLimitBucketSize(value: number): void;
getRelayOverallLimitBucketSize(): number;
setRelayOverallLimitBucketSize(value: number): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): DeviceProfile.AsObject;
static toObject(includeInstance: boolean, msg: DeviceProfile): DeviceProfile.AsObject;
@ -134,6 +200,28 @@ export namespace DeviceProfile {
measurementsMap: Array<[string, Measurement.AsObject]>,
autoDetectMeasurements: boolean,
regionConfigId: string,
isRelay: boolean,
isRelayEd: boolean,
relayEdRelayOnly: boolean,
relayEnabled: boolean,
relayCadPeriodicity: CadPeriodicityMap[keyof CadPeriodicityMap],
relayDefaultChannelIndex: number,
relaySecondChannelFreq: number,
relaySecondChannelDr: number,
relaySecondChannelAckOffset: SecondChAckOffsetMap[keyof SecondChAckOffsetMap],
relayEdActivationMode: RelayModeActivationMap[keyof RelayModeActivationMap],
relayEdSmartEnableLevel: number,
relayEdBackOff: number,
relayEdUplinkLimitBucketSize: number,
relayEdUplinkLimitReloadRate: number,
relayJoinReqLimitReloadRate: number,
relayNotifyLimitReloadRate: number,
relayGlobalUplinkLimitReloadRate: number,
relayOverallLimitReloadRate: number,
relayJoinReqLimitBucketSize: number,
relayNotifyLimitBucketSize: number,
relayGlobalUplinkLimitBucketSize: number,
relayOverallLimitBucketSize: number,
}
}
@ -485,3 +573,34 @@ export interface MeasurementKindMap {
export const MeasurementKind: MeasurementKindMap;
export interface CadPeriodicityMap {
SEC_1: 0;
MS_500: 1;
MS_250: 2;
MS_100: 3;
MS_50: 4;
MS_20: 5;
}
export const CadPeriodicity: CadPeriodicityMap;
export interface SecondChAckOffsetMap {
KHZ_0: 0;
KHZ_200: 1;
KHZ_400: 2;
KHZ_800: 3;
KHZ_1600: 4;
KHZ_3200: 5;
}
export const SecondChAckOffset: SecondChAckOffsetMap;
export interface RelayModeActivationMap {
DISABLE_RELAY_MODE: 0;
ENABLE_RELAY_MODE: 1;
DYNAMIC: 2;
END_DEVICE_CONTROLLED: 3;
}
export const RelayModeActivation: RelayModeActivationMap;

View File

@ -21,6 +21,7 @@ goog.object.extend(proto, google_protobuf_empty_pb);
var common_common_pb = require('../common/common_pb.js');
goog.object.extend(proto, common_common_pb);
goog.exportSymbol('proto.api.AdrAlgorithmListItem', null, global);
goog.exportSymbol('proto.api.CadPeriodicity', null, global);
goog.exportSymbol('proto.api.CodecRuntime', null, global);
goog.exportSymbol('proto.api.CreateDeviceProfileRequest', null, global);
goog.exportSymbol('proto.api.CreateDeviceProfileResponse', null, global);
@ -34,6 +35,8 @@ goog.exportSymbol('proto.api.ListDeviceProfilesRequest', null, global);
goog.exportSymbol('proto.api.ListDeviceProfilesResponse', null, global);
goog.exportSymbol('proto.api.Measurement', null, global);
goog.exportSymbol('proto.api.MeasurementKind', null, global);
goog.exportSymbol('proto.api.RelayModeActivation', null, global);
goog.exportSymbol('proto.api.SecondChAckOffset', null, global);
goog.exportSymbol('proto.api.UpdateDeviceProfileRequest', null, global);
/**
* Generated by JsPbCodeGenerator.
@ -368,7 +371,29 @@ proto.api.DeviceProfile.toObject = function(includeInstance, msg) {
tagsMap: (f = msg.getTagsMap()) ? f.toObject(includeInstance, undefined) : [],
measurementsMap: (f = msg.getMeasurementsMap()) ? f.toObject(includeInstance, proto.api.Measurement.toObject) : [],
autoDetectMeasurements: jspb.Message.getBooleanFieldWithDefault(msg, 28, false),
regionConfigId: jspb.Message.getFieldWithDefault(msg, 29, "")
regionConfigId: jspb.Message.getFieldWithDefault(msg, 29, ""),
isRelay: jspb.Message.getBooleanFieldWithDefault(msg, 30, false),
isRelayEd: jspb.Message.getBooleanFieldWithDefault(msg, 31, false),
relayEdRelayOnly: jspb.Message.getBooleanFieldWithDefault(msg, 32, false),
relayEnabled: jspb.Message.getBooleanFieldWithDefault(msg, 33, false),
relayCadPeriodicity: jspb.Message.getFieldWithDefault(msg, 34, 0),
relayDefaultChannelIndex: jspb.Message.getFieldWithDefault(msg, 35, 0),
relaySecondChannelFreq: jspb.Message.getFieldWithDefault(msg, 36, 0),
relaySecondChannelDr: jspb.Message.getFieldWithDefault(msg, 37, 0),
relaySecondChannelAckOffset: jspb.Message.getFieldWithDefault(msg, 38, 0),
relayEdActivationMode: jspb.Message.getFieldWithDefault(msg, 39, 0),
relayEdSmartEnableLevel: jspb.Message.getFieldWithDefault(msg, 40, 0),
relayEdBackOff: jspb.Message.getFieldWithDefault(msg, 41, 0),
relayEdUplinkLimitBucketSize: jspb.Message.getFieldWithDefault(msg, 42, 0),
relayEdUplinkLimitReloadRate: jspb.Message.getFieldWithDefault(msg, 43, 0),
relayJoinReqLimitReloadRate: jspb.Message.getFieldWithDefault(msg, 44, 0),
relayNotifyLimitReloadRate: jspb.Message.getFieldWithDefault(msg, 45, 0),
relayGlobalUplinkLimitReloadRate: jspb.Message.getFieldWithDefault(msg, 46, 0),
relayOverallLimitReloadRate: jspb.Message.getFieldWithDefault(msg, 47, 0),
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)
};
if (includeInstance) {
@ -525,6 +550,94 @@ proto.api.DeviceProfile.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {string} */ (reader.readString());
msg.setRegionConfigId(value);
break;
case 30:
var value = /** @type {boolean} */ (reader.readBool());
msg.setIsRelay(value);
break;
case 31:
var value = /** @type {boolean} */ (reader.readBool());
msg.setIsRelayEd(value);
break;
case 32:
var value = /** @type {boolean} */ (reader.readBool());
msg.setRelayEdRelayOnly(value);
break;
case 33:
var value = /** @type {boolean} */ (reader.readBool());
msg.setRelayEnabled(value);
break;
case 34:
var value = /** @type {!proto.api.CadPeriodicity} */ (reader.readEnum());
msg.setRelayCadPeriodicity(value);
break;
case 35:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayDefaultChannelIndex(value);
break;
case 36:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelaySecondChannelFreq(value);
break;
case 37:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelaySecondChannelDr(value);
break;
case 38:
var value = /** @type {!proto.api.SecondChAckOffset} */ (reader.readEnum());
msg.setRelaySecondChannelAckOffset(value);
break;
case 39:
var value = /** @type {!proto.api.RelayModeActivation} */ (reader.readEnum());
msg.setRelayEdActivationMode(value);
break;
case 40:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayEdSmartEnableLevel(value);
break;
case 41:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayEdBackOff(value);
break;
case 42:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayEdUplinkLimitBucketSize(value);
break;
case 43:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayEdUplinkLimitReloadRate(value);
break;
case 44:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayJoinReqLimitReloadRate(value);
break;
case 45:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayNotifyLimitReloadRate(value);
break;
case 46:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayGlobalUplinkLimitReloadRate(value);
break;
case 47:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayOverallLimitReloadRate(value);
break;
case 48:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayJoinReqLimitBucketSize(value);
break;
case 49:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayNotifyLimitBucketSize(value);
break;
case 50:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayGlobalUplinkLimitBucketSize(value);
break;
case 51:
var value = /** @type {number} */ (reader.readUint32());
msg.setRelayOverallLimitBucketSize(value);
break;
default:
reader.skipField();
break;
@ -751,6 +864,160 @@ proto.api.DeviceProfile.serializeBinaryToWriter = function(message, writer) {
f
);
}
f = message.getIsRelay();
if (f) {
writer.writeBool(
30,
f
);
}
f = message.getIsRelayEd();
if (f) {
writer.writeBool(
31,
f
);
}
f = message.getRelayEdRelayOnly();
if (f) {
writer.writeBool(
32,
f
);
}
f = message.getRelayEnabled();
if (f) {
writer.writeBool(
33,
f
);
}
f = message.getRelayCadPeriodicity();
if (f !== 0.0) {
writer.writeEnum(
34,
f
);
}
f = message.getRelayDefaultChannelIndex();
if (f !== 0) {
writer.writeUint32(
35,
f
);
}
f = message.getRelaySecondChannelFreq();
if (f !== 0) {
writer.writeUint32(
36,
f
);
}
f = message.getRelaySecondChannelDr();
if (f !== 0) {
writer.writeUint32(
37,
f
);
}
f = message.getRelaySecondChannelAckOffset();
if (f !== 0.0) {
writer.writeEnum(
38,
f
);
}
f = message.getRelayEdActivationMode();
if (f !== 0.0) {
writer.writeEnum(
39,
f
);
}
f = message.getRelayEdSmartEnableLevel();
if (f !== 0) {
writer.writeUint32(
40,
f
);
}
f = message.getRelayEdBackOff();
if (f !== 0) {
writer.writeUint32(
41,
f
);
}
f = message.getRelayEdUplinkLimitBucketSize();
if (f !== 0) {
writer.writeUint32(
42,
f
);
}
f = message.getRelayEdUplinkLimitReloadRate();
if (f !== 0) {
writer.writeUint32(
43,
f
);
}
f = message.getRelayJoinReqLimitReloadRate();
if (f !== 0) {
writer.writeUint32(
44,
f
);
}
f = message.getRelayNotifyLimitReloadRate();
if (f !== 0) {
writer.writeUint32(
45,
f
);
}
f = message.getRelayGlobalUplinkLimitReloadRate();
if (f !== 0) {
writer.writeUint32(
46,
f
);
}
f = message.getRelayOverallLimitReloadRate();
if (f !== 0) {
writer.writeUint32(
47,
f
);
}
f = message.getRelayJoinReqLimitBucketSize();
if (f !== 0) {
writer.writeUint32(
48,
f
);
}
f = message.getRelayNotifyLimitBucketSize();
if (f !== 0) {
writer.writeUint32(
49,
f
);
}
f = message.getRelayGlobalUplinkLimitBucketSize();
if (f !== 0) {
writer.writeUint32(
50,
f
);
}
f = message.getRelayOverallLimitBucketSize();
if (f !== 0) {
writer.writeUint32(
51,
f
);
}
};
@ -1284,6 +1551,402 @@ proto.api.DeviceProfile.prototype.setRegionConfigId = function(value) {
};
/**
* optional bool is_relay = 30;
* @return {boolean}
*/
proto.api.DeviceProfile.prototype.getIsRelay = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 30, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setIsRelay = function(value) {
return jspb.Message.setProto3BooleanField(this, 30, value);
};
/**
* optional bool is_relay_ed = 31;
* @return {boolean}
*/
proto.api.DeviceProfile.prototype.getIsRelayEd = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 31, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setIsRelayEd = function(value) {
return jspb.Message.setProto3BooleanField(this, 31, value);
};
/**
* optional bool relay_ed_relay_only = 32;
* @return {boolean}
*/
proto.api.DeviceProfile.prototype.getRelayEdRelayOnly = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 32, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdRelayOnly = function(value) {
return jspb.Message.setProto3BooleanField(this, 32, value);
};
/**
* optional bool relay_enabled = 33;
* @return {boolean}
*/
proto.api.DeviceProfile.prototype.getRelayEnabled = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 33, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEnabled = function(value) {
return jspb.Message.setProto3BooleanField(this, 33, value);
};
/**
* optional CadPeriodicity relay_cad_periodicity = 34;
* @return {!proto.api.CadPeriodicity}
*/
proto.api.DeviceProfile.prototype.getRelayCadPeriodicity = function() {
return /** @type {!proto.api.CadPeriodicity} */ (jspb.Message.getFieldWithDefault(this, 34, 0));
};
/**
* @param {!proto.api.CadPeriodicity} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayCadPeriodicity = function(value) {
return jspb.Message.setProto3EnumField(this, 34, value);
};
/**
* optional uint32 relay_default_channel_index = 35;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayDefaultChannelIndex = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 35, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayDefaultChannelIndex = function(value) {
return jspb.Message.setProto3IntField(this, 35, value);
};
/**
* optional uint32 relay_second_channel_freq = 36;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelaySecondChannelFreq = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 36, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelaySecondChannelFreq = function(value) {
return jspb.Message.setProto3IntField(this, 36, value);
};
/**
* optional uint32 relay_second_channel_dr = 37;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelaySecondChannelDr = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 37, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelaySecondChannelDr = function(value) {
return jspb.Message.setProto3IntField(this, 37, value);
};
/**
* optional SecondChAckOffset relay_second_channel_ack_offset = 38;
* @return {!proto.api.SecondChAckOffset}
*/
proto.api.DeviceProfile.prototype.getRelaySecondChannelAckOffset = function() {
return /** @type {!proto.api.SecondChAckOffset} */ (jspb.Message.getFieldWithDefault(this, 38, 0));
};
/**
* @param {!proto.api.SecondChAckOffset} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelaySecondChannelAckOffset = function(value) {
return jspb.Message.setProto3EnumField(this, 38, value);
};
/**
* optional RelayModeActivation relay_ed_activation_mode = 39;
* @return {!proto.api.RelayModeActivation}
*/
proto.api.DeviceProfile.prototype.getRelayEdActivationMode = function() {
return /** @type {!proto.api.RelayModeActivation} */ (jspb.Message.getFieldWithDefault(this, 39, 0));
};
/**
* @param {!proto.api.RelayModeActivation} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdActivationMode = function(value) {
return jspb.Message.setProto3EnumField(this, 39, value);
};
/**
* optional uint32 relay_ed_smart_enable_level = 40;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayEdSmartEnableLevel = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 40, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdSmartEnableLevel = function(value) {
return jspb.Message.setProto3IntField(this, 40, value);
};
/**
* optional uint32 relay_ed_back_off = 41;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayEdBackOff = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 41, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdBackOff = function(value) {
return jspb.Message.setProto3IntField(this, 41, value);
};
/**
* optional uint32 relay_ed_uplink_limit_bucket_size = 42;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayEdUplinkLimitBucketSize = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 42, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdUplinkLimitBucketSize = function(value) {
return jspb.Message.setProto3IntField(this, 42, value);
};
/**
* optional uint32 relay_ed_uplink_limit_reload_rate = 43;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayEdUplinkLimitReloadRate = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 43, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayEdUplinkLimitReloadRate = function(value) {
return jspb.Message.setProto3IntField(this, 43, value);
};
/**
* optional uint32 relay_join_req_limit_reload_rate = 44;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayJoinReqLimitReloadRate = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 44, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayJoinReqLimitReloadRate = function(value) {
return jspb.Message.setProto3IntField(this, 44, value);
};
/**
* optional uint32 relay_notify_limit_reload_rate = 45;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayNotifyLimitReloadRate = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 45, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayNotifyLimitReloadRate = function(value) {
return jspb.Message.setProto3IntField(this, 45, value);
};
/**
* optional uint32 relay_global_uplink_limit_reload_rate = 46;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayGlobalUplinkLimitReloadRate = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 46, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayGlobalUplinkLimitReloadRate = function(value) {
return jspb.Message.setProto3IntField(this, 46, value);
};
/**
* optional uint32 relay_overall_limit_reload_rate = 47;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayOverallLimitReloadRate = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 47, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayOverallLimitReloadRate = function(value) {
return jspb.Message.setProto3IntField(this, 47, value);
};
/**
* optional uint32 relay_join_req_limit_bucket_size = 48;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayJoinReqLimitBucketSize = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 48, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayJoinReqLimitBucketSize = function(value) {
return jspb.Message.setProto3IntField(this, 48, value);
};
/**
* optional uint32 relay_notify_limit_bucket_size = 49;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayNotifyLimitBucketSize = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 49, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayNotifyLimitBucketSize = function(value) {
return jspb.Message.setProto3IntField(this, 49, value);
};
/**
* optional uint32 relay_global_uplink_limit_bucket_size = 50;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayGlobalUplinkLimitBucketSize = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 50, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayGlobalUplinkLimitBucketSize = function(value) {
return jspb.Message.setProto3IntField(this, 50, value);
};
/**
* optional uint32 relay_overall_limit_bucket_size = 51;
* @return {number}
*/
proto.api.DeviceProfile.prototype.getRelayOverallLimitBucketSize = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 51, 0));
};
/**
* @param {number} value
* @return {!proto.api.DeviceProfile} returns this
*/
proto.api.DeviceProfile.prototype.setRelayOverallLimitBucketSize = function(value) {
return jspb.Message.setProto3IntField(this, 51, value);
};
@ -3611,4 +4274,38 @@ proto.api.MeasurementKind = {
STRING: 4
};
/**
* @enum {number}
*/
proto.api.CadPeriodicity = {
SEC_1: 0,
MS_500: 1,
MS_250: 2,
MS_100: 3,
MS_50: 4,
MS_20: 5
};
/**
* @enum {number}
*/
proto.api.SecondChAckOffset = {
KHZ_0: 0,
KHZ_200: 1,
KHZ_400: 2,
KHZ_800: 3,
KHZ_1600: 4,
KHZ_3200: 5
};
/**
* @enum {number}
*/
proto.api.RelayModeActivation = {
DISABLE_RELAY_MODE: 0,
ENABLE_RELAY_MODE: 1,
DYNAMIC: 2,
END_DEVICE_CONTROLLED: 3
};
goog.object.extend(exports, proto.api);

View File

@ -36,8 +36,11 @@ export class UplinkFrameLog extends jspb.Message {
getTime(): google_protobuf_timestamp_pb.Timestamp | undefined;
setTime(value?: google_protobuf_timestamp_pb.Timestamp): void;
getPlaintextMacCommands(): boolean;
setPlaintextMacCommands(value: boolean): void;
getPlaintextFOpts(): boolean;
setPlaintextFOpts(value: boolean): void;
getPlaintextFrmPayload(): boolean;
setPlaintextFrmPayload(value: boolean): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): UplinkFrameLog.AsObject;
@ -58,7 +61,8 @@ export namespace UplinkFrameLog {
devAddr: string,
devEui: string,
time?: google_protobuf_timestamp_pb.Timestamp.AsObject,
plaintextMacCommands: boolean,
plaintextFOpts: boolean,
plaintextFrmPayload: boolean,
}
}
@ -93,8 +97,11 @@ export class DownlinkFrameLog extends jspb.Message {
getDevEui(): string;
setDevEui(value: string): void;
getPlaintextMacCommands(): boolean;
setPlaintextMacCommands(value: boolean): void;
getPlaintextFOpts(): boolean;
setPlaintextFOpts(value: boolean): void;
getPlaintextFrmPayload(): boolean;
setPlaintextFrmPayload(value: boolean): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): DownlinkFrameLog.AsObject;
@ -116,7 +123,8 @@ export namespace DownlinkFrameLog {
mType: common_common_pb.MTypeMap[keyof common_common_pb.MTypeMap],
devAddr: string,
devEui: string,
plaintextMacCommands: boolean,
plaintextFOpts: boolean,
plaintextFrmPayload: boolean,
}
}

View File

@ -109,7 +109,8 @@ proto.api.UplinkFrameLog.toObject = function(includeInstance, msg) {
devAddr: jspb.Message.getFieldWithDefault(msg, 5, ""),
devEui: jspb.Message.getFieldWithDefault(msg, 6, ""),
time: (f = msg.getTime()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f),
plaintextMacCommands: jspb.Message.getBooleanFieldWithDefault(msg, 8, false)
plaintextFOpts: jspb.Message.getBooleanFieldWithDefault(msg, 8, false),
plaintextFrmPayload: jspb.Message.getBooleanFieldWithDefault(msg, 9, false)
};
if (includeInstance) {
@ -179,7 +180,11 @@ proto.api.UplinkFrameLog.deserializeBinaryFromReader = function(msg, reader) {
break;
case 8:
var value = /** @type {boolean} */ (reader.readBool());
msg.setPlaintextMacCommands(value);
msg.setPlaintextFOpts(value);
break;
case 9:
var value = /** @type {boolean} */ (reader.readBool());
msg.setPlaintextFrmPayload(value);
break;
default:
reader.skipField();
@ -262,13 +267,20 @@ proto.api.UplinkFrameLog.serializeBinaryToWriter = function(message, writer) {
google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter
);
}
f = message.getPlaintextMacCommands();
f = message.getPlaintextFOpts();
if (f) {
writer.writeBool(
8,
f
);
}
f = message.getPlaintextFrmPayload();
if (f) {
writer.writeBool(
9,
f
);
}
};
@ -481,10 +493,10 @@ proto.api.UplinkFrameLog.prototype.hasTime = function() {
/**
* optional bool plaintext_mac_commands = 8;
* optional bool plaintext_f_opts = 8;
* @return {boolean}
*/
proto.api.UplinkFrameLog.prototype.getPlaintextMacCommands = function() {
proto.api.UplinkFrameLog.prototype.getPlaintextFOpts = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 8, false));
};
@ -493,11 +505,29 @@ proto.api.UplinkFrameLog.prototype.getPlaintextMacCommands = function() {
* @param {boolean} value
* @return {!proto.api.UplinkFrameLog} returns this
*/
proto.api.UplinkFrameLog.prototype.setPlaintextMacCommands = function(value) {
proto.api.UplinkFrameLog.prototype.setPlaintextFOpts = function(value) {
return jspb.Message.setProto3BooleanField(this, 8, value);
};
/**
* optional bool plaintext_frm_payload = 9;
* @return {boolean}
*/
proto.api.UplinkFrameLog.prototype.getPlaintextFrmPayload = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 9, false));
};
/**
* @param {boolean} value
* @return {!proto.api.UplinkFrameLog} returns this
*/
proto.api.UplinkFrameLog.prototype.setPlaintextFrmPayload = function(value) {
return jspb.Message.setProto3BooleanField(this, 9, value);
};
@ -538,7 +568,8 @@ proto.api.DownlinkFrameLog.toObject = function(includeInstance, msg) {
mType: jspb.Message.getFieldWithDefault(msg, 6, 0),
devAddr: jspb.Message.getFieldWithDefault(msg, 7, ""),
devEui: jspb.Message.getFieldWithDefault(msg, 8, ""),
plaintextMacCommands: jspb.Message.getBooleanFieldWithDefault(msg, 9, false)
plaintextFOpts: jspb.Message.getBooleanFieldWithDefault(msg, 9, false),
plaintextFrmPayload: jspb.Message.getBooleanFieldWithDefault(msg, 10, false)
};
if (includeInstance) {
@ -611,7 +642,11 @@ proto.api.DownlinkFrameLog.deserializeBinaryFromReader = function(msg, reader) {
break;
case 9:
var value = /** @type {boolean} */ (reader.readBool());
msg.setPlaintextMacCommands(value);
msg.setPlaintextFOpts(value);
break;
case 10:
var value = /** @type {boolean} */ (reader.readBool());
msg.setPlaintextFrmPayload(value);
break;
default:
reader.skipField();
@ -700,13 +735,20 @@ proto.api.DownlinkFrameLog.serializeBinaryToWriter = function(message, writer) {
f
);
}
f = message.getPlaintextMacCommands();
f = message.getPlaintextFOpts();
if (f) {
writer.writeBool(
9,
f
);
}
f = message.getPlaintextFrmPayload();
if (f) {
writer.writeBool(
10,
f
);
}
};
@ -917,10 +959,10 @@ proto.api.DownlinkFrameLog.prototype.setDevEui = function(value) {
/**
* optional bool plaintext_mac_commands = 9;
* optional bool plaintext_f_opts = 9;
* @return {boolean}
*/
proto.api.DownlinkFrameLog.prototype.getPlaintextMacCommands = function() {
proto.api.DownlinkFrameLog.prototype.getPlaintextFOpts = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 9, false));
};
@ -929,9 +971,27 @@ proto.api.DownlinkFrameLog.prototype.getPlaintextMacCommands = function() {
* @param {boolean} value
* @return {!proto.api.DownlinkFrameLog} returns this
*/
proto.api.DownlinkFrameLog.prototype.setPlaintextMacCommands = function(value) {
proto.api.DownlinkFrameLog.prototype.setPlaintextFOpts = function(value) {
return jspb.Message.setProto3BooleanField(this, 9, value);
};
/**
* optional bool plaintext_frm_payload = 10;
* @return {boolean}
*/
proto.api.DownlinkFrameLog.prototype.getPlaintextFrmPayload = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 10, false));
};
/**
* @param {boolean} value
* @return {!proto.api.DownlinkFrameLog} returns this
*/
proto.api.DownlinkFrameLog.prototype.setPlaintextFrmPayload = function(value) {
return jspb.Message.setProto3BooleanField(this, 10, value);
};
goog.object.extend(exports, proto.api);

40
api/js/api/relay_grpc_pb.d.ts vendored Normal file
View File

@ -0,0 +1,40 @@
// GENERATED CODE -- DO NOT EDIT!
// package: api
// file: api/relay.proto
import * as api_relay_pb from "../api/relay_pb";
import * as google_protobuf_empty_pb from "google-protobuf/google/protobuf/empty_pb";
import * as grpc from "@grpc/grpc-js";
interface IRelayServiceService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
list: grpc.MethodDefinition<api_relay_pb.ListRelaysRequest, api_relay_pb.ListRelaysResponse>;
addDevice: grpc.MethodDefinition<api_relay_pb.AddRelayDeviceRequest, google_protobuf_empty_pb.Empty>;
removeDevice: grpc.MethodDefinition<api_relay_pb.RemoveRelayDeviceRequest, google_protobuf_empty_pb.Empty>;
listDevices: grpc.MethodDefinition<api_relay_pb.ListRelayDevicesRequest, api_relay_pb.ListRelayDevicesResponse>;
}
export const RelayServiceService: IRelayServiceService;
export interface IRelayServiceServer extends grpc.UntypedServiceImplementation {
list: grpc.handleUnaryCall<api_relay_pb.ListRelaysRequest, api_relay_pb.ListRelaysResponse>;
addDevice: grpc.handleUnaryCall<api_relay_pb.AddRelayDeviceRequest, google_protobuf_empty_pb.Empty>;
removeDevice: grpc.handleUnaryCall<api_relay_pb.RemoveRelayDeviceRequest, google_protobuf_empty_pb.Empty>;
listDevices: grpc.handleUnaryCall<api_relay_pb.ListRelayDevicesRequest, api_relay_pb.ListRelayDevicesResponse>;
}
export class RelayServiceClient extends grpc.Client {
constructor(address: string, credentials: grpc.ChannelCredentials, options?: object);
list(argument: api_relay_pb.ListRelaysRequest, callback: grpc.requestCallback<api_relay_pb.ListRelaysResponse>): grpc.ClientUnaryCall;
list(argument: api_relay_pb.ListRelaysRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<api_relay_pb.ListRelaysResponse>): grpc.ClientUnaryCall;
list(argument: api_relay_pb.ListRelaysRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<api_relay_pb.ListRelaysResponse>): grpc.ClientUnaryCall;
addDevice(argument: api_relay_pb.AddRelayDeviceRequest, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
addDevice(argument: api_relay_pb.AddRelayDeviceRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
addDevice(argument: api_relay_pb.AddRelayDeviceRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
removeDevice(argument: api_relay_pb.RemoveRelayDeviceRequest, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
removeDevice(argument: api_relay_pb.RemoveRelayDeviceRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
removeDevice(argument: api_relay_pb.RemoveRelayDeviceRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
listDevices(argument: api_relay_pb.ListRelayDevicesRequest, callback: grpc.requestCallback<api_relay_pb.ListRelayDevicesResponse>): grpc.ClientUnaryCall;
listDevices(argument: api_relay_pb.ListRelayDevicesRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<api_relay_pb.ListRelayDevicesResponse>): grpc.ClientUnaryCall;
listDevices(argument: api_relay_pb.ListRelayDevicesRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<api_relay_pb.ListRelayDevicesResponse>): grpc.ClientUnaryCall;
}

140
api/js/api/relay_grpc_pb.js vendored Normal file
View File

@ -0,0 +1,140 @@
// GENERATED CODE -- DO NOT EDIT!
'use strict';
var grpc = require('@grpc/grpc-js');
var api_relay_pb = require('../api/relay_pb.js');
var google_api_annotations_pb = require('../google/api/annotations_pb.js');
var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/timestamp_pb.js');
var google_protobuf_empty_pb = require('google-protobuf/google/protobuf/empty_pb.js');
function serialize_api_AddRelayDeviceRequest(arg) {
if (!(arg instanceof api_relay_pb.AddRelayDeviceRequest)) {
throw new Error('Expected argument of type api.AddRelayDeviceRequest');
}
return Buffer.from(arg.serializeBinary());
}
function deserialize_api_AddRelayDeviceRequest(buffer_arg) {
return api_relay_pb.AddRelayDeviceRequest.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_api_ListRelayDevicesRequest(arg) {
if (!(arg instanceof api_relay_pb.ListRelayDevicesRequest)) {
throw new Error('Expected argument of type api.ListRelayDevicesRequest');
}
return Buffer.from(arg.serializeBinary());
}
function deserialize_api_ListRelayDevicesRequest(buffer_arg) {
return api_relay_pb.ListRelayDevicesRequest.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_api_ListRelayDevicesResponse(arg) {
if (!(arg instanceof api_relay_pb.ListRelayDevicesResponse)) {
throw new Error('Expected argument of type api.ListRelayDevicesResponse');
}
return Buffer.from(arg.serializeBinary());
}
function deserialize_api_ListRelayDevicesResponse(buffer_arg) {
return api_relay_pb.ListRelayDevicesResponse.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_api_ListRelaysRequest(arg) {
if (!(arg instanceof api_relay_pb.ListRelaysRequest)) {
throw new Error('Expected argument of type api.ListRelaysRequest');
}
return Buffer.from(arg.serializeBinary());
}
function deserialize_api_ListRelaysRequest(buffer_arg) {
return api_relay_pb.ListRelaysRequest.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_api_ListRelaysResponse(arg) {
if (!(arg instanceof api_relay_pb.ListRelaysResponse)) {
throw new Error('Expected argument of type api.ListRelaysResponse');
}
return Buffer.from(arg.serializeBinary());
}
function deserialize_api_ListRelaysResponse(buffer_arg) {
return api_relay_pb.ListRelaysResponse.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_api_RemoveRelayDeviceRequest(arg) {
if (!(arg instanceof api_relay_pb.RemoveRelayDeviceRequest)) {
throw new Error('Expected argument of type api.RemoveRelayDeviceRequest');
}
return Buffer.from(arg.serializeBinary());
}
function deserialize_api_RemoveRelayDeviceRequest(buffer_arg) {
return api_relay_pb.RemoveRelayDeviceRequest.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_google_protobuf_Empty(arg) {
if (!(arg instanceof google_protobuf_empty_pb.Empty)) {
throw new Error('Expected argument of type google.protobuf.Empty');
}
return Buffer.from(arg.serializeBinary());
}
function deserialize_google_protobuf_Empty(buffer_arg) {
return google_protobuf_empty_pb.Empty.deserializeBinary(new Uint8Array(buffer_arg));
}
// RelayService is the service providing API methos for managing relays.
var RelayServiceService = exports.RelayServiceService = {
// List lists the relays for the given application id.
list: {
path: '/api.RelayService/List',
requestStream: false,
responseStream: false,
requestType: api_relay_pb.ListRelaysRequest,
responseType: api_relay_pb.ListRelaysResponse,
requestSerialize: serialize_api_ListRelaysRequest,
requestDeserialize: deserialize_api_ListRelaysRequest,
responseSerialize: serialize_api_ListRelaysResponse,
responseDeserialize: deserialize_api_ListRelaysResponse,
},
// AddDevice adds the given device to the relay.
addDevice: {
path: '/api.RelayService/AddDevice',
requestStream: false,
responseStream: false,
requestType: api_relay_pb.AddRelayDeviceRequest,
responseType: google_protobuf_empty_pb.Empty,
requestSerialize: serialize_api_AddRelayDeviceRequest,
requestDeserialize: deserialize_api_AddRelayDeviceRequest,
responseSerialize: serialize_google_protobuf_Empty,
responseDeserialize: deserialize_google_protobuf_Empty,
},
// RemoveDevice removes the given device from the relay.
removeDevice: {
path: '/api.RelayService/RemoveDevice',
requestStream: false,
responseStream: false,
requestType: api_relay_pb.RemoveRelayDeviceRequest,
responseType: google_protobuf_empty_pb.Empty,
requestSerialize: serialize_api_RemoveRelayDeviceRequest,
requestDeserialize: deserialize_api_RemoveRelayDeviceRequest,
responseSerialize: serialize_google_protobuf_Empty,
responseDeserialize: deserialize_google_protobuf_Empty,
},
// ListDevices lists the devices for the given relay.
listDevices: {
path: '/api.RelayService/ListDevices',
requestStream: false,
responseStream: false,
requestType: api_relay_pb.ListRelayDevicesRequest,
responseType: api_relay_pb.ListRelayDevicesResponse,
requestSerialize: serialize_api_ListRelayDevicesRequest,
requestDeserialize: deserialize_api_ListRelayDevicesRequest,
responseSerialize: serialize_api_ListRelayDevicesResponse,
responseDeserialize: deserialize_api_ListRelayDevicesResponse,
},
};
exports.RelayServiceClient = grpc.makeGenericClientConstructor(RelayServiceService);

218
api/js/api/relay_pb.d.ts vendored Normal file
View File

@ -0,0 +1,218 @@
// package: api
// file: api/relay.proto
import * as jspb from "google-protobuf";
import * as google_api_annotations_pb from "../google/api/annotations_pb";
import * as google_protobuf_timestamp_pb from "google-protobuf/google/protobuf/timestamp_pb";
import * as google_protobuf_empty_pb from "google-protobuf/google/protobuf/empty_pb";
export class RelayListItem extends jspb.Message {
getDevEui(): string;
setDevEui(value: string): void;
getName(): string;
setName(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): RelayListItem.AsObject;
static toObject(includeInstance: boolean, msg: RelayListItem): RelayListItem.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: RelayListItem, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): RelayListItem;
static deserializeBinaryFromReader(message: RelayListItem, reader: jspb.BinaryReader): RelayListItem;
}
export namespace RelayListItem {
export type AsObject = {
devEui: string,
name: string,
}
}
export class ListRelaysRequest extends jspb.Message {
getLimit(): number;
setLimit(value: number): void;
getOffset(): number;
setOffset(value: number): void;
getApplicationId(): string;
setApplicationId(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): ListRelaysRequest.AsObject;
static toObject(includeInstance: boolean, msg: ListRelaysRequest): ListRelaysRequest.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: ListRelaysRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): ListRelaysRequest;
static deserializeBinaryFromReader(message: ListRelaysRequest, reader: jspb.BinaryReader): ListRelaysRequest;
}
export namespace ListRelaysRequest {
export type AsObject = {
limit: number,
offset: number,
applicationId: string,
}
}
export class ListRelaysResponse extends jspb.Message {
getTotalCount(): number;
setTotalCount(value: number): void;
clearResultList(): void;
getResultList(): Array<RelayListItem>;
setResultList(value: Array<RelayListItem>): void;
addResult(value?: RelayListItem, index?: number): RelayListItem;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): ListRelaysResponse.AsObject;
static toObject(includeInstance: boolean, msg: ListRelaysResponse): ListRelaysResponse.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: ListRelaysResponse, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): ListRelaysResponse;
static deserializeBinaryFromReader(message: ListRelaysResponse, reader: jspb.BinaryReader): ListRelaysResponse;
}
export namespace ListRelaysResponse {
export type AsObject = {
totalCount: number,
resultList: Array<RelayListItem.AsObject>,
}
}
export class AddRelayDeviceRequest extends jspb.Message {
getRelayDevEui(): string;
setRelayDevEui(value: string): void;
getDeviceDevEui(): string;
setDeviceDevEui(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): AddRelayDeviceRequest.AsObject;
static toObject(includeInstance: boolean, msg: AddRelayDeviceRequest): AddRelayDeviceRequest.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: AddRelayDeviceRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): AddRelayDeviceRequest;
static deserializeBinaryFromReader(message: AddRelayDeviceRequest, reader: jspb.BinaryReader): AddRelayDeviceRequest;
}
export namespace AddRelayDeviceRequest {
export type AsObject = {
relayDevEui: string,
deviceDevEui: string,
}
}
export class RemoveRelayDeviceRequest extends jspb.Message {
getRelayDevEui(): string;
setRelayDevEui(value: string): void;
getDeviceDevEui(): string;
setDeviceDevEui(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): RemoveRelayDeviceRequest.AsObject;
static toObject(includeInstance: boolean, msg: RemoveRelayDeviceRequest): RemoveRelayDeviceRequest.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: RemoveRelayDeviceRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): RemoveRelayDeviceRequest;
static deserializeBinaryFromReader(message: RemoveRelayDeviceRequest, reader: jspb.BinaryReader): RemoveRelayDeviceRequest;
}
export namespace RemoveRelayDeviceRequest {
export type AsObject = {
relayDevEui: string,
deviceDevEui: string,
}
}
export class ListRelayDevicesRequest extends jspb.Message {
getLimit(): number;
setLimit(value: number): void;
getOffset(): number;
setOffset(value: number): void;
getRelayDevEui(): string;
setRelayDevEui(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): ListRelayDevicesRequest.AsObject;
static toObject(includeInstance: boolean, msg: ListRelayDevicesRequest): ListRelayDevicesRequest.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: ListRelayDevicesRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): ListRelayDevicesRequest;
static deserializeBinaryFromReader(message: ListRelayDevicesRequest, reader: jspb.BinaryReader): ListRelayDevicesRequest;
}
export namespace ListRelayDevicesRequest {
export type AsObject = {
limit: number,
offset: number,
relayDevEui: string,
}
}
export class RelayDeviceListItem extends jspb.Message {
getDevEui(): string;
setDevEui(value: string): void;
hasCreatedAt(): boolean;
clearCreatedAt(): void;
getCreatedAt(): google_protobuf_timestamp_pb.Timestamp | undefined;
setCreatedAt(value?: google_protobuf_timestamp_pb.Timestamp): void;
getName(): string;
setName(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): RelayDeviceListItem.AsObject;
static toObject(includeInstance: boolean, msg: RelayDeviceListItem): RelayDeviceListItem.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: RelayDeviceListItem, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): RelayDeviceListItem;
static deserializeBinaryFromReader(message: RelayDeviceListItem, reader: jspb.BinaryReader): RelayDeviceListItem;
}
export namespace RelayDeviceListItem {
export type AsObject = {
devEui: string,
createdAt?: google_protobuf_timestamp_pb.Timestamp.AsObject,
name: string,
}
}
export class ListRelayDevicesResponse extends jspb.Message {
getTotalCount(): number;
setTotalCount(value: number): void;
clearResultList(): void;
getResultList(): Array<RelayDeviceListItem>;
setResultList(value: Array<RelayDeviceListItem>): void;
addResult(value?: RelayDeviceListItem, index?: number): RelayDeviceListItem;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): ListRelayDevicesResponse.AsObject;
static toObject(includeInstance: boolean, msg: ListRelayDevicesResponse): ListRelayDevicesResponse.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: ListRelayDevicesResponse, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): ListRelayDevicesResponse;
static deserializeBinaryFromReader(message: ListRelayDevicesResponse, reader: jspb.BinaryReader): ListRelayDevicesResponse;
}
export namespace ListRelayDevicesResponse {
export type AsObject = {
totalCount: number,
resultList: Array<RelayDeviceListItem.AsObject>,
}
}

1648
api/js/api/relay_pb.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -57,6 +57,8 @@ export class BackendRule extends jspb.Message {
getProtocol(): string;
setProtocol(value: string): void;
getOverridesByRequestProtocolMap(): jspb.Map<string, BackendRule>;
clearOverridesByRequestProtocolMap(): void;
getAuthenticationCase(): BackendRule.AuthenticationCase;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): BackendRule.AsObject;
@ -79,6 +81,7 @@ export namespace BackendRule {
jwtAudience: string,
disableAuth: boolean,
protocol: string,
overridesByRequestProtocolMap: Array<[string, BackendRule.AsObject]>,
}
export interface PathTranslationMap {

View File

@ -284,7 +284,8 @@ proto.google.api.BackendRule.toObject = function(includeInstance, msg) {
pathTranslation: jspb.Message.getFieldWithDefault(msg, 6, 0),
jwtAudience: jspb.Message.getFieldWithDefault(msg, 7, ""),
disableAuth: jspb.Message.getBooleanFieldWithDefault(msg, 8, false),
protocol: jspb.Message.getFieldWithDefault(msg, 9, "")
protocol: jspb.Message.getFieldWithDefault(msg, 9, ""),
overridesByRequestProtocolMap: (f = msg.getOverridesByRequestProtocolMap()) ? f.toObject(includeInstance, proto.google.api.BackendRule.toObject) : []
};
if (includeInstance) {
@ -357,6 +358,12 @@ proto.google.api.BackendRule.deserializeBinaryFromReader = function(msg, reader)
var value = /** @type {string} */ (reader.readString());
msg.setProtocol(value);
break;
case 10:
var value = msg.getOverridesByRequestProtocolMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readMessage, proto.google.api.BackendRule.deserializeBinaryFromReader, "", new proto.google.api.BackendRule());
});
break;
default:
reader.skipField();
break;
@ -449,6 +456,10 @@ proto.google.api.BackendRule.serializeBinaryToWriter = function(message, writer)
f
);
}
f = message.getOverridesByRequestProtocolMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(10, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeMessage, proto.google.api.BackendRule.serializeBinaryToWriter);
}
};
@ -659,4 +670,26 @@ proto.google.api.BackendRule.prototype.setProtocol = function(value) {
};
/**
* map<string, BackendRule> overrides_by_request_protocol = 10;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,!proto.google.api.BackendRule>}
*/
proto.google.api.BackendRule.prototype.getOverridesByRequestProtocolMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,!proto.google.api.BackendRule>} */ (
jspb.Message.getMapField(this, 10, opt_noLazyCreate,
proto.google.api.BackendRule));
};
/**
* Clears values from the map. The map will be non-null.
* @return {!proto.google.api.BackendRule} returns this
*/
proto.google.api.BackendRule.prototype.clearOverridesByRequestProtocolMap = function() {
this.getOverridesByRequestProtocolMap().clear();
return this;};
goog.object.extend(exports, proto.google.api);

View File

@ -142,6 +142,9 @@ export class Publishing extends jspb.Message {
setLibrarySettingsList(value: Array<ClientLibrarySettings>): void;
addLibrarySettings(value?: ClientLibrarySettings, index?: number): ClientLibrarySettings;
getProtoReferenceDocumentationUri(): string;
setProtoReferenceDocumentationUri(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): Publishing.AsObject;
static toObject(includeInstance: boolean, msg: Publishing): Publishing.AsObject;
@ -163,6 +166,7 @@ export namespace Publishing {
docTagPrefix: string,
organization: ClientLibraryOrganizationMap[keyof ClientLibraryOrganizationMap],
librarySettingsList: Array<ClientLibrarySettings.AsObject>,
protoReferenceDocumentationUri: string,
}
}
@ -289,6 +293,25 @@ export class DotnetSettings extends jspb.Message {
getCommon(): CommonLanguageSettings | undefined;
setCommon(value?: CommonLanguageSettings): void;
getRenamedServicesMap(): jspb.Map<string, string>;
clearRenamedServicesMap(): void;
getRenamedResourcesMap(): jspb.Map<string, string>;
clearRenamedResourcesMap(): void;
clearIgnoredResourcesList(): void;
getIgnoredResourcesList(): Array<string>;
setIgnoredResourcesList(value: Array<string>): void;
addIgnoredResources(value: string, index?: number): string;
clearForcedNamespaceAliasesList(): void;
getForcedNamespaceAliasesList(): Array<string>;
setForcedNamespaceAliasesList(value: Array<string>): void;
addForcedNamespaceAliases(value: string, index?: number): string;
clearHandwrittenSignaturesList(): void;
getHandwrittenSignaturesList(): Array<string>;
setHandwrittenSignaturesList(value: Array<string>): void;
addHandwrittenSignatures(value: string, index?: number): string;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): DotnetSettings.AsObject;
static toObject(includeInstance: boolean, msg: DotnetSettings): DotnetSettings.AsObject;
@ -302,6 +325,11 @@ export class DotnetSettings extends jspb.Message {
export namespace DotnetSettings {
export type AsObject = {
common?: CommonLanguageSettings.AsObject,
renamedServicesMap: Array<[string, string]>,
renamedResourcesMap: Array<[string, string]>,
ignoredResourcesList: Array<string>,
forcedNamespaceAliasesList: Array<string>,
handwrittenSignaturesList: Array<string>,
}
}
@ -425,6 +453,9 @@ export interface ClientLibraryOrganizationMap {
ADS: 2;
PHOTOS: 3;
STREET_VIEW: 4;
SHOPPING: 5;
GEO: 6;
GENERATIVE_AI: 7;
}
export const ClientLibraryOrganization: ClientLibraryOrganizationMap;

View File

@ -215,7 +215,7 @@ if (goog.DEBUG && !COMPILED) {
* @constructor
*/
proto.google.api.DotnetSettings = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
jspb.Message.initialize(this, opt_data, 0, -1, proto.google.api.DotnetSettings.repeatedFields_, null);
};
goog.inherits(proto.google.api.DotnetSettings, jspb.Message);
if (goog.DEBUG && !COMPILED) {
@ -1142,7 +1142,8 @@ proto.google.api.Publishing.toObject = function(includeInstance, msg) {
docTagPrefix: jspb.Message.getFieldWithDefault(msg, 106, ""),
organization: jspb.Message.getFieldWithDefault(msg, 107, 0),
librarySettingsList: jspb.Message.toObjectList(msg.getLibrarySettingsList(),
proto.google.api.ClientLibrarySettings.toObject, includeInstance)
proto.google.api.ClientLibrarySettings.toObject, includeInstance),
protoReferenceDocumentationUri: jspb.Message.getFieldWithDefault(msg, 110, "")
};
if (includeInstance) {
@ -1217,6 +1218,10 @@ proto.google.api.Publishing.deserializeBinaryFromReader = function(msg, reader)
reader.readMessage(value,proto.google.api.ClientLibrarySettings.deserializeBinaryFromReader);
msg.addLibrarySettings(value);
break;
case 110:
var value = /** @type {string} */ (reader.readString());
msg.setProtoReferenceDocumentationUri(value);
break;
default:
reader.skipField();
break;
@ -1311,6 +1316,13 @@ proto.google.api.Publishing.serializeBinaryToWriter = function(message, writer)
proto.google.api.ClientLibrarySettings.serializeBinaryToWriter
);
}
f = message.getProtoReferenceDocumentationUri();
if (f.length > 0) {
writer.writeString(
110,
f
);
}
};
@ -1535,6 +1547,24 @@ proto.google.api.Publishing.prototype.clearLibrarySettingsList = function() {
};
/**
* optional string proto_reference_documentation_uri = 110;
* @return {string}
*/
proto.google.api.Publishing.prototype.getProtoReferenceDocumentationUri = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 110, ""));
};
/**
* @param {string} value
* @return {!proto.google.api.Publishing} returns this
*/
proto.google.api.Publishing.prototype.setProtoReferenceDocumentationUri = function(value) {
return jspb.Message.setProto3StringField(this, 110, value);
};
@ -2354,6 +2384,13 @@ proto.google.api.NodeSettings.prototype.hasCommon = function() {
/**
* List of repeated fields within this message type.
* @private {!Array<number>}
* @const
*/
proto.google.api.DotnetSettings.repeatedFields_ = [4,5,6];
if (jspb.Message.GENERATE_TO_OBJECT) {
@ -2385,7 +2422,12 @@ proto.google.api.DotnetSettings.prototype.toObject = function(opt_includeInstanc
*/
proto.google.api.DotnetSettings.toObject = function(includeInstance, msg) {
var f, obj = {
common: (f = msg.getCommon()) && proto.google.api.CommonLanguageSettings.toObject(includeInstance, f)
common: (f = msg.getCommon()) && proto.google.api.CommonLanguageSettings.toObject(includeInstance, f),
renamedServicesMap: (f = msg.getRenamedServicesMap()) ? f.toObject(includeInstance, undefined) : [],
renamedResourcesMap: (f = msg.getRenamedResourcesMap()) ? f.toObject(includeInstance, undefined) : [],
ignoredResourcesList: (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f,
forcedNamespaceAliasesList: (f = jspb.Message.getRepeatedField(msg, 5)) == null ? undefined : f,
handwrittenSignaturesList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f
};
if (includeInstance) {
@ -2427,6 +2469,30 @@ proto.google.api.DotnetSettings.deserializeBinaryFromReader = function(msg, read
reader.readMessage(value,proto.google.api.CommonLanguageSettings.deserializeBinaryFromReader);
msg.setCommon(value);
break;
case 2:
var value = msg.getRenamedServicesMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
});
break;
case 3:
var value = msg.getRenamedResourcesMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
});
break;
case 4:
var value = /** @type {string} */ (reader.readString());
msg.addIgnoredResources(value);
break;
case 5:
var value = /** @type {string} */ (reader.readString());
msg.addForcedNamespaceAliases(value);
break;
case 6:
var value = /** @type {string} */ (reader.readString());
msg.addHandwrittenSignatures(value);
break;
default:
reader.skipField();
break;
@ -2464,6 +2530,35 @@ proto.google.api.DotnetSettings.serializeBinaryToWriter = function(message, writ
proto.google.api.CommonLanguageSettings.serializeBinaryToWriter
);
}
f = message.getRenamedServicesMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
f = message.getRenamedResourcesMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(3, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
f = message.getIgnoredResourcesList();
if (f.length > 0) {
writer.writeRepeatedString(
4,
f
);
}
f = message.getForcedNamespaceAliasesList();
if (f.length > 0) {
writer.writeRepeatedString(
5,
f
);
}
f = message.getHandwrittenSignaturesList();
if (f.length > 0) {
writer.writeRepeatedString(
6,
f
);
}
};
@ -2504,6 +2599,161 @@ proto.google.api.DotnetSettings.prototype.hasCommon = function() {
};
/**
* map<string, string> renamed_services = 2;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,string>}
*/
proto.google.api.DotnetSettings.prototype.getRenamedServicesMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,string>} */ (
jspb.Message.getMapField(this, 2, opt_noLazyCreate,
null));
};
/**
* Clears values from the map. The map will be non-null.
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.clearRenamedServicesMap = function() {
this.getRenamedServicesMap().clear();
return this;};
/**
* map<string, string> renamed_resources = 3;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,string>}
*/
proto.google.api.DotnetSettings.prototype.getRenamedResourcesMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,string>} */ (
jspb.Message.getMapField(this, 3, opt_noLazyCreate,
null));
};
/**
* Clears values from the map. The map will be non-null.
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.clearRenamedResourcesMap = function() {
this.getRenamedResourcesMap().clear();
return this;};
/**
* repeated string ignored_resources = 4;
* @return {!Array<string>}
*/
proto.google.api.DotnetSettings.prototype.getIgnoredResourcesList = function() {
return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 4));
};
/**
* @param {!Array<string>} value
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.setIgnoredResourcesList = function(value) {
return jspb.Message.setField(this, 4, value || []);
};
/**
* @param {string} value
* @param {number=} opt_index
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.addIgnoredResources = function(value, opt_index) {
return jspb.Message.addToRepeatedField(this, 4, value, opt_index);
};
/**
* Clears the list making it empty but non-null.
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.clearIgnoredResourcesList = function() {
return this.setIgnoredResourcesList([]);
};
/**
* repeated string forced_namespace_aliases = 5;
* @return {!Array<string>}
*/
proto.google.api.DotnetSettings.prototype.getForcedNamespaceAliasesList = function() {
return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 5));
};
/**
* @param {!Array<string>} value
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.setForcedNamespaceAliasesList = function(value) {
return jspb.Message.setField(this, 5, value || []);
};
/**
* @param {string} value
* @param {number=} opt_index
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.addForcedNamespaceAliases = function(value, opt_index) {
return jspb.Message.addToRepeatedField(this, 5, value, opt_index);
};
/**
* Clears the list making it empty but non-null.
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.clearForcedNamespaceAliasesList = function() {
return this.setForcedNamespaceAliasesList([]);
};
/**
* repeated string handwritten_signatures = 6;
* @return {!Array<string>}
*/
proto.google.api.DotnetSettings.prototype.getHandwrittenSignaturesList = function() {
return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 6));
};
/**
* @param {!Array<string>} value
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.setHandwrittenSignaturesList = function(value) {
return jspb.Message.setField(this, 6, value || []);
};
/**
* @param {string} value
* @param {number=} opt_index
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.addHandwrittenSignatures = function(value, opt_index) {
return jspb.Message.addToRepeatedField(this, 6, value, opt_index);
};
/**
* Clears the list making it empty but non-null.
* @return {!proto.google.api.DotnetSettings} returns this
*/
proto.google.api.DotnetSettings.prototype.clearHandwrittenSignaturesList = function() {
return this.setHandwrittenSignaturesList([]);
};
@ -3278,7 +3528,10 @@ proto.google.api.ClientLibraryOrganization = {
CLOUD: 1,
ADS: 2,
PHOTOS: 3,
STREET_VIEW: 4
STREET_VIEW: 4,
SHOPPING: 5,
GEO: 6,
GENERATIVE_AI: 7
};
/**

View File

@ -32,6 +32,8 @@ export interface ErrorReasonMap {
SYSTEM_PARAMETER_UNSUPPORTED: 26;
ORG_RESTRICTION_VIOLATION: 27;
ORG_RESTRICTION_HEADER_INVALID: 28;
SERVICE_NOT_VISIBLE: 29;
GCP_SUSPENDED: 30;
}
export const ErrorReason: ErrorReasonMap;

View File

@ -44,7 +44,9 @@ proto.google.api.ErrorReason = {
RESOURCE_USAGE_RESTRICTION_VIOLATED: 25,
SYSTEM_PARAMETER_UNSUPPORTED: 26,
ORG_RESTRICTION_VIOLATION: 27,
ORG_RESTRICTION_HEADER_INVALID: 28
ORG_RESTRICTION_HEADER_INVALID: 28,
SERVICE_NOT_VISIBLE: 29,
GCP_SUSPENDED: 30
};
goog.object.extend(exports, proto.google.api);

View File

@ -58,6 +58,46 @@ export namespace DeviceInfo {
}
}
export class UplinkRelayRxInfo extends jspb.Message {
getDevEui(): string;
setDevEui(value: string): void;
getFrequency(): number;
setFrequency(value: number): void;
getDr(): number;
setDr(value: number): void;
getSnr(): number;
setSnr(value: number): void;
getRssi(): number;
setRssi(value: number): void;
getWorChannel(): number;
setWorChannel(value: number): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): UplinkRelayRxInfo.AsObject;
static toObject(includeInstance: boolean, msg: UplinkRelayRxInfo): UplinkRelayRxInfo.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: UplinkRelayRxInfo, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): UplinkRelayRxInfo;
static deserializeBinaryFromReader(message: UplinkRelayRxInfo, reader: jspb.BinaryReader): UplinkRelayRxInfo;
}
export namespace UplinkRelayRxInfo {
export type AsObject = {
devEui: string,
frequency: number,
dr: number,
snr: number,
rssi: number,
worChannel: number,
}
}
export class UplinkEvent extends jspb.Message {
getDeduplicationId(): string;
setDeduplicationId(value: string): void;
@ -110,6 +150,11 @@ export class UplinkEvent extends jspb.Message {
getTxInfo(): gw_gw_pb.UplinkTxInfo | undefined;
setTxInfo(value?: gw_gw_pb.UplinkTxInfo): void;
hasRelayRxInfo(): boolean;
clearRelayRxInfo(): void;
getRelayRxInfo(): UplinkRelayRxInfo | undefined;
setRelayRxInfo(value?: UplinkRelayRxInfo): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): UplinkEvent.AsObject;
static toObject(includeInstance: boolean, msg: UplinkEvent): UplinkEvent.AsObject;
@ -135,6 +180,7 @@ export namespace UplinkEvent {
object?: google_protobuf_struct_pb.Struct.AsObject,
rxInfoList: Array<gw_gw_pb.UplinkRxInfo.AsObject>,
txInfo?: gw_gw_pb.UplinkTxInfo.AsObject,
relayRxInfo?: UplinkRelayRxInfo.AsObject,
}
}
@ -155,6 +201,11 @@ export class JoinEvent extends jspb.Message {
getDevAddr(): string;
setDevAddr(value: string): void;
hasRelayRxInfo(): boolean;
clearRelayRxInfo(): void;
getRelayRxInfo(): UplinkRelayRxInfo | undefined;
setRelayRxInfo(value?: UplinkRelayRxInfo): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): JoinEvent.AsObject;
static toObject(includeInstance: boolean, msg: JoinEvent): JoinEvent.AsObject;
@ -171,6 +222,7 @@ export namespace JoinEvent {
time?: google_protobuf_timestamp_pb.Timestamp.AsObject,
deviceInfo?: DeviceInfo.AsObject,
devAddr: string,
relayRxInfo?: UplinkRelayRxInfo.AsObject,
}
}
@ -505,6 +557,7 @@ export interface LogCodeMap {
UPLINK_MIC: 6;
UPLINK_F_CNT_RETRANSMISSION: 7;
DOWNLINK_GATEWAY: 8;
RELAY_NEW_END_DEVICE: 9;
}
export const LogCode: LogCodeMap;

View File

@ -32,6 +32,7 @@ goog.exportSymbol('proto.integration.LogLevel', null, global);
goog.exportSymbol('proto.integration.StatusEvent', null, global);
goog.exportSymbol('proto.integration.TxAckEvent', null, global);
goog.exportSymbol('proto.integration.UplinkEvent', null, global);
goog.exportSymbol('proto.integration.UplinkRelayRxInfo', null, global);
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
@ -53,6 +54,27 @@ if (goog.DEBUG && !COMPILED) {
*/
proto.integration.DeviceInfo.displayName = 'proto.integration.DeviceInfo';
}
/**
* 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.UplinkRelayRxInfo = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.integration.UplinkRelayRxInfo, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.integration.UplinkRelayRxInfo.displayName = 'proto.integration.UplinkRelayRxInfo';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
@ -616,6 +638,286 @@ proto.integration.DeviceInfo.prototype.clearTagsMap = 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.integration.UplinkRelayRxInfo.prototype.toObject = function(opt_includeInstance) {
return proto.integration.UplinkRelayRxInfo.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.UplinkRelayRxInfo} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.integration.UplinkRelayRxInfo.toObject = function(includeInstance, msg) {
var f, obj = {
devEui: jspb.Message.getFieldWithDefault(msg, 1, ""),
frequency: jspb.Message.getFieldWithDefault(msg, 2, 0),
dr: jspb.Message.getFieldWithDefault(msg, 3, 0),
snr: jspb.Message.getFieldWithDefault(msg, 4, 0),
rssi: jspb.Message.getFieldWithDefault(msg, 5, 0),
worChannel: jspb.Message.getFieldWithDefault(msg, 6, 0)
};
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.UplinkRelayRxInfo}
*/
proto.integration.UplinkRelayRxInfo.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.integration.UplinkRelayRxInfo;
return proto.integration.UplinkRelayRxInfo.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.integration.UplinkRelayRxInfo} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.integration.UplinkRelayRxInfo}
*/
proto.integration.UplinkRelayRxInfo.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.setDevEui(value);
break;
case 2:
var value = /** @type {number} */ (reader.readUint32());
msg.setFrequency(value);
break;
case 3:
var value = /** @type {number} */ (reader.readUint32());
msg.setDr(value);
break;
case 4:
var value = /** @type {number} */ (reader.readInt32());
msg.setSnr(value);
break;
case 5:
var value = /** @type {number} */ (reader.readInt32());
msg.setRssi(value);
break;
case 6:
var value = /** @type {number} */ (reader.readUint32());
msg.setWorChannel(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.integration.UplinkRelayRxInfo.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.integration.UplinkRelayRxInfo.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.UplinkRelayRxInfo} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.integration.UplinkRelayRxInfo.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getDevEui();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
f = message.getFrequency();
if (f !== 0) {
writer.writeUint32(
2,
f
);
}
f = message.getDr();
if (f !== 0) {
writer.writeUint32(
3,
f
);
}
f = message.getSnr();
if (f !== 0) {
writer.writeInt32(
4,
f
);
}
f = message.getRssi();
if (f !== 0) {
writer.writeInt32(
5,
f
);
}
f = message.getWorChannel();
if (f !== 0) {
writer.writeUint32(
6,
f
);
}
};
/**
* optional string dev_eui = 1;
* @return {string}
*/
proto.integration.UplinkRelayRxInfo.prototype.getDevEui = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.integration.UplinkRelayRxInfo} returns this
*/
proto.integration.UplinkRelayRxInfo.prototype.setDevEui = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
/**
* optional uint32 frequency = 2;
* @return {number}
*/
proto.integration.UplinkRelayRxInfo.prototype.getFrequency = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
};
/**
* @param {number} value
* @return {!proto.integration.UplinkRelayRxInfo} returns this
*/
proto.integration.UplinkRelayRxInfo.prototype.setFrequency = function(value) {
return jspb.Message.setProto3IntField(this, 2, value);
};
/**
* optional uint32 dr = 3;
* @return {number}
*/
proto.integration.UplinkRelayRxInfo.prototype.getDr = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
};
/**
* @param {number} value
* @return {!proto.integration.UplinkRelayRxInfo} returns this
*/
proto.integration.UplinkRelayRxInfo.prototype.setDr = function(value) {
return jspb.Message.setProto3IntField(this, 3, value);
};
/**
* optional int32 snr = 4;
* @return {number}
*/
proto.integration.UplinkRelayRxInfo.prototype.getSnr = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
};
/**
* @param {number} value
* @return {!proto.integration.UplinkRelayRxInfo} returns this
*/
proto.integration.UplinkRelayRxInfo.prototype.setSnr = function(value) {
return jspb.Message.setProto3IntField(this, 4, value);
};
/**
* optional int32 rssi = 5;
* @return {number}
*/
proto.integration.UplinkRelayRxInfo.prototype.getRssi = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0));
};
/**
* @param {number} value
* @return {!proto.integration.UplinkRelayRxInfo} returns this
*/
proto.integration.UplinkRelayRxInfo.prototype.setRssi = function(value) {
return jspb.Message.setProto3IntField(this, 5, value);
};
/**
* optional uint32 wor_channel = 6;
* @return {number}
*/
proto.integration.UplinkRelayRxInfo.prototype.getWorChannel = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0));
};
/**
* @param {number} value
* @return {!proto.integration.UplinkRelayRxInfo} returns this
*/
proto.integration.UplinkRelayRxInfo.prototype.setWorChannel = function(value) {
return jspb.Message.setProto3IntField(this, 6, value);
};
/**
* List of repeated fields within this message type.
* @private {!Array<number>}
@ -667,7 +969,8 @@ proto.integration.UplinkEvent.toObject = function(includeInstance, msg) {
object: (f = msg.getObject()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f),
rxInfoList: jspb.Message.toObjectList(msg.getRxInfoList(),
gw_gw_pb.UplinkRxInfo.toObject, includeInstance),
txInfo: (f = msg.getTxInfo()) && gw_gw_pb.UplinkTxInfo.toObject(includeInstance, f)
txInfo: (f = msg.getTxInfo()) && gw_gw_pb.UplinkTxInfo.toObject(includeInstance, f),
relayRxInfo: (f = msg.getRelayRxInfo()) && proto.integration.UplinkRelayRxInfo.toObject(includeInstance, f)
};
if (includeInstance) {
@ -761,6 +1064,11 @@ proto.integration.UplinkEvent.deserializeBinaryFromReader = function(msg, reader
reader.readMessage(value,gw_gw_pb.UplinkTxInfo.deserializeBinaryFromReader);
msg.setTxInfo(value);
break;
case 14:
var value = new proto.integration.UplinkRelayRxInfo;
reader.readMessage(value,proto.integration.UplinkRelayRxInfo.deserializeBinaryFromReader);
msg.setRelayRxInfo(value);
break;
default:
reader.skipField();
break;
@ -886,6 +1194,14 @@ proto.integration.UplinkEvent.serializeBinaryToWriter = function(message, writer
gw_gw_pb.UplinkTxInfo.serializeBinaryToWriter
);
}
f = message.getRelayRxInfo();
if (f != null) {
writer.writeMessage(
14,
f,
proto.integration.UplinkRelayRxInfo.serializeBinaryToWriter
);
}
};
@ -1243,6 +1559,43 @@ proto.integration.UplinkEvent.prototype.hasTxInfo = function() {
};
/**
* optional UplinkRelayRxInfo relay_rx_info = 14;
* @return {?proto.integration.UplinkRelayRxInfo}
*/
proto.integration.UplinkEvent.prototype.getRelayRxInfo = function() {
return /** @type{?proto.integration.UplinkRelayRxInfo} */ (
jspb.Message.getWrapperField(this, proto.integration.UplinkRelayRxInfo, 14));
};
/**
* @param {?proto.integration.UplinkRelayRxInfo|undefined} value
* @return {!proto.integration.UplinkEvent} returns this
*/
proto.integration.UplinkEvent.prototype.setRelayRxInfo = function(value) {
return jspb.Message.setWrapperField(this, 14, value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.integration.UplinkEvent} returns this
*/
proto.integration.UplinkEvent.prototype.clearRelayRxInfo = function() {
return this.setRelayRxInfo(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.integration.UplinkEvent.prototype.hasRelayRxInfo = function() {
return jspb.Message.getField(this, 14) != null;
};
@ -1278,7 +1631,8 @@ proto.integration.JoinEvent.toObject = function(includeInstance, msg) {
deduplicationId: jspb.Message.getFieldWithDefault(msg, 1, ""),
time: (f = msg.getTime()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f),
deviceInfo: (f = msg.getDeviceInfo()) && proto.integration.DeviceInfo.toObject(includeInstance, f),
devAddr: jspb.Message.getFieldWithDefault(msg, 4, "")
devAddr: jspb.Message.getFieldWithDefault(msg, 4, ""),
relayRxInfo: (f = msg.getRelayRxInfo()) && proto.integration.UplinkRelayRxInfo.toObject(includeInstance, f)
};
if (includeInstance) {
@ -1333,6 +1687,11 @@ proto.integration.JoinEvent.deserializeBinaryFromReader = function(msg, reader)
var value = /** @type {string} */ (reader.readString());
msg.setDevAddr(value);
break;
case 5:
var value = new proto.integration.UplinkRelayRxInfo;
reader.readMessage(value,proto.integration.UplinkRelayRxInfo.deserializeBinaryFromReader);
msg.setRelayRxInfo(value);
break;
default:
reader.skipField();
break;
@ -1392,6 +1751,14 @@ proto.integration.JoinEvent.serializeBinaryToWriter = function(message, writer)
f
);
}
f = message.getRelayRxInfo();
if (f != null) {
writer.writeMessage(
5,
f,
proto.integration.UplinkRelayRxInfo.serializeBinaryToWriter
);
}
};
@ -1505,6 +1872,43 @@ proto.integration.JoinEvent.prototype.setDevAddr = function(value) {
};
/**
* optional UplinkRelayRxInfo relay_rx_info = 5;
* @return {?proto.integration.UplinkRelayRxInfo}
*/
proto.integration.JoinEvent.prototype.getRelayRxInfo = function() {
return /** @type{?proto.integration.UplinkRelayRxInfo} */ (
jspb.Message.getWrapperField(this, proto.integration.UplinkRelayRxInfo, 5));
};
/**
* @param {?proto.integration.UplinkRelayRxInfo|undefined} value
* @return {!proto.integration.JoinEvent} returns this
*/
proto.integration.JoinEvent.prototype.setRelayRxInfo = function(value) {
return jspb.Message.setWrapperField(this, 5, value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.integration.JoinEvent} returns this
*/
proto.integration.JoinEvent.prototype.clearRelayRxInfo = function() {
return this.setRelayRxInfo(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.integration.JoinEvent.prototype.hasRelayRxInfo = function() {
return jspb.Message.getField(this, 5) != null;
};
@ -3849,7 +4253,8 @@ proto.integration.LogCode = {
UPLINK_F_CNT_RESET: 5,
UPLINK_MIC: 6,
UPLINK_F_CNT_RETRANSMISSION: 7,
DOWNLINK_GATEWAY: 8
DOWNLINK_GATEWAY: 8,
RELAY_NEW_END_DEVICE: 9
};
goog.object.extend(exports, proto.integration);

2
api/js/package.json vendored
View File

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

View File

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

143
api/md/api/api.md vendored
View File

@ -149,8 +149,11 @@
- [Measurement](#api-Measurement)
- [UpdateDeviceProfileRequest](#api-UpdateDeviceProfileRequest)
- [CadPeriodicity](#api-CadPeriodicity)
- [CodecRuntime](#api-CodecRuntime)
- [MeasurementKind](#api-MeasurementKind)
- [RelayModeActivation](#api-RelayModeActivation)
- [SecondChAckOffset](#api-SecondChAckOffset)
- [DeviceProfileService](#api-DeviceProfileService)
@ -580,7 +583,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
@ -610,7 +613,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
@ -640,7 +643,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
@ -670,7 +673,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
@ -860,7 +863,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
@ -920,7 +923,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
@ -980,7 +983,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
@ -1040,7 +1043,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
@ -1070,7 +1073,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
| headers | [HttpIntegration.HeadersEntry](#api-HttpIntegration-HeadersEntry) | repeated | HTTP headers to set when making requests. |
| encoding | [Encoding](#api-Encoding) | | Payload encoding. |
| event_endpoint_url | [string](#string) | | Event endpoint URL. The HTTP integration will POST all events to this enpoint. The request will contain a query parameters &#34;event&#34; containing the type of the event. |
@ -1108,7 +1111,9 @@
| key | [string](#string) | | Key. This key can be obtained from the IFTTT Webhooks documentation page. |
| uplink_values | [string](#string) | repeated | Values. Up to 2 values can be forwarded to IFTTT. These values must map to the decoded payload keys. For example: { &#34;batteryLevel&#34;: 75.3, &#34;buttons&#34;: [{&#34;pressed&#34;: false}, {&#34;pressed&#34;: true}] } You would specify the following fields: uplink_values = [&#34;batteryLevel&#34;, &#34;buttons_0_pressed&#34;]
Note: The first value is always used for the DevEUI. |
Notes: The first value is always used for the DevEUI. Ignored if arbitrary_json is set to true. |
| arbitrary_json | [bool](#bool) | | Arbitrary JSON. If set to true, ChirpStack events will be sent as-is as arbitrary JSON payload. If set to false (default), the 3 JSON values format will be used. |
| event_prefix | [string](#string) | | Event prefix. If set, the event name will be PREFIX_EVENT. For example if event_prefix is set to weatherstation, and uplink event will be sent as weatherstation_up to the IFTTT webhook. Note: Only characters in the A-Z, a-z and 0-9 range are allowed. |
@ -1123,7 +1128,7 @@ Note: The first value is always used for the DevEUI. |
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
| endpoint | [string](#string) | | InfluxDb API write endpoint (e.g. http://localhost:8086/write). |
| db | [string](#string) | | InfluxDb database name. (InfluxDb v1) |
| username | [string](#string) | | InfluxDb username. (InfluxDb v1) |
@ -1246,9 +1251,9 @@ Note: The first value is always used for the DevEUI. |
| ----- | ---- | ----- | ----------- |
| token | [string](#string) | | API token. |
| modem_enabled | [bool](#bool) | | Device implements Modem / Modem-E stack. |
| modem_port | [uint32](#uint32) | | Modem port (fPort). ChirpStack will only forward the FrmPayload to the MGS if the port is equal to the configured value. |
| gnss_port | [uint32](#uint32) | | GNSS port (fPort). ChirpStack will forward the FrmPayload to MGS as GNSS payload if the port is equal to the configured value. |
| forward_f_ports | [uint32](#uint32) | repeated | Forward FPorts. Forward uplink messages matching the given FPorts to the MGS. |
| gnss_use_rx_time | [bool](#bool) | | Use rx time for GNSS resolving. In case this is set to true, the MGS resolver will use the RX time of the network instead of the timestamp included in the LR1110 payload. |
| gnss_use_gateway_location | [bool](#bool) | | Use gateway location for GNSS resolving. In the case this is set to true, ChirpStack will provide the location of one of the gateways to the MGS resolver to aid the resolving process. Disable this in case the gateway location is not accurate / incorrectly configured as an incorrect location will cause the resolver to return an error. |
| parse_tlv | [bool](#bool) | | Parse TLV records. If enabled, stream records (expected in TLV format) are scanned for GNSS data (0x06 or 0x07). If found, ChirpStack will make an additional geolocation call to the MGS API for resolving the location of the detected payload. |
| geolocation_buffer_ttl | [uint32](#uint32) | | Geolocation buffer TTL (in seconds). If &gt; 0, uplink RX meta-data will be stored in a buffer so that the meta-data of multiple uplinks can be used for geolocation. |
| geolocation_min_buffer_size | [uint32](#uint32) | | Geolocation minimum buffer size. If &gt; 0, geolocation will only be performed when the buffer has at least the given size. |
@ -1273,7 +1278,7 @@ Note: The first value is always used for the DevEUI. |
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
| endpoint | [string](#string) | | myDevices API endpoint. |
@ -1306,7 +1311,7 @@ Note: The first value is always used for the DevEUI. |
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| application_id | [string](#string) | | Application ID (UUIO). |
| application_id | [string](#string) | | Application ID (UUID). |
| server | [string](#string) | | ThingsBoard server endpoint, e.g. https://example.com |
@ -1549,7 +1554,8 @@ Note: The first value is always used for the DevEUI. |
<a name="api-ApplicationService"></a>
### ApplicationService
ApplicationService is the service providing API methods for managing applications.
ApplicationService is the service providing API methods for managing
applications.
| Method Name | Request Type | Response Type | Description |
| ----------- | ------------ | ------------- | ------------|
@ -1719,6 +1725,7 @@ ApplicationService is the service providing API methods for managing application
| is_disabled | [bool](#bool) | | Device is disabled. |
| variables | [Device.VariablesEntry](#api-Device-VariablesEntry) | repeated | Variables (user defined). These variables can be used together with integrations to store tokens / secrets that must be configured per device. These variables are not exposed in the event payloads. |
| tags | [Device.TagsEntry](#api-Device-TagsEntry) | repeated | Tags (user defined). These tags are exposed in the event payloads or to integration. Tags are intended for aggregation and filtering. |
| join_eui | [string](#string) | | JoinEUI (optional, EUI64). This field will be automatically set / updated on OTAA. However, in some cases it must be pre-configured. For example to allow OTAA using a Relay. In this case the Relay needs to know the JoinEUI &#43; DevEUI combinations of the devices for which it needs to forward uplinks. |
@ -2406,6 +2413,58 @@ The actual number of ping-slots per beacon period equals to 2^k. |
| measurements | [DeviceProfile.MeasurementsEntry](#api-DeviceProfile-MeasurementsEntry) | repeated | Measurements. If defined, ChirpStack will visualize these metrics in the web-interface. |
| auto_detect_measurements | [bool](#bool) | | Auto-detect measurements. If set to true, measurements will be automatically added based on the keys of the decoded payload. In cases where the decoded payload contains random keys in the data, you want to set this to false. |
| region_config_id | [string](#string) | | Region configuration ID. If set, devices will only use the associated region. If let blank, then devices will use all regions matching the selected common-name. Note that multiple region configurations can exist for the same common-name, e.g. to provide an 8 channel and 16 channel configuration for the US915 band. |
| is_relay | [bool](#bool) | | Device is a Relay device. Enable this in case the device is a Relay. A Relay device implements TS011 and is able to relay data from relay capable devices. See for more information the TS011 specification. |
| is_relay_ed | [bool](#bool) | | Device is a Relay end-device. Enable this in case the device is an end-device that can operate under a Relay. Please refer to the TS011 specification for more information. |
| relay_ed_relay_only | [bool](#bool) | | End-device only accept data through relay. Only accept data for this device through a relay. This setting is useful for testing as in case of a test-setup, the end-device is usually within range of the gateway. |
| relay_enabled | [bool](#bool) | | Relay must be enabled. |
| relay_cad_periodicity | [CadPeriodicity](#api-CadPeriodicity) | | Relay CAD periodicity. |
| relay_default_channel_index | [uint32](#uint32) | | Relay default channel index. Valid values are 0 and 1, please refer to the RP002 specification for the meaning of these values. |
| relay_second_channel_freq | [uint32](#uint32) | | Relay second channel frequency (Hz). |
| relay_second_channel_dr | [uint32](#uint32) | | Relay second channel DR. |
| relay_second_channel_ack_offset | [SecondChAckOffset](#api-SecondChAckOffset) | | Relay second channel ACK offset. |
| relay_ed_activation_mode | [RelayModeActivation](#api-RelayModeActivation) | | Relay end-device activation mode. |
| relay_ed_smart_enable_level | [uint32](#uint32) | | Relay end-device smart-enable level. |
| relay_ed_back_off | [uint32](#uint32) | | Relay end-device back-off (in case it does not receive WOR ACK frame). 0 = Always send a LoRaWAN uplink 1..63 = Send a LoRaWAN uplink after X WOR frames without a WOR ACK |
| relay_ed_uplink_limit_bucket_size | [uint32](#uint32) | | Relay end-device uplink limit bucket size.
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 |
| relay_ed_uplink_limit_reload_rate | [uint32](#uint32) | | Relay end-device uplink limit reload rate.
Valid values: * 0 - 62 = X tokens every hour * 63 = no limitation |
| relay_join_req_limit_reload_rate | [uint32](#uint32) | | Relay join-request limit reload rate.
Valid values: * 0 - 126 = X tokens every hour * 127 = no limitation |
| relay_notify_limit_reload_rate | [uint32](#uint32) | | Relay notify limit reload rate.
Valid values: * 0 - 126 = X tokens every hour * 127 = no limitation |
| relay_global_uplink_limit_reload_rate | [uint32](#uint32) | | Relay global uplink limit reload rate.
Valid values: * 0 - 126 = X tokens every hour * 127 = no limitation |
| relay_overall_limit_reload_rate | [uint32](#uint32) | | Relay overall limit reload rate.
Valid values: * 0 - 126 = X tokens every hour * 127 = no limitation |
| relay_join_req_limit_bucket_size | [uint32](#uint32) | | Relay join-request limit bucket size.
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 |
| relay_notify_limit_bucket_size | [uint32](#uint32) | | Relay notify limit bucket size.
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 |
| relay_global_uplink_limit_bucket_size | [uint32](#uint32) | | Relay globak uplink limit bucket size.
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 |
| relay_overall_limit_bucket_size | [uint32](#uint32) | | Relay overall limit bucket size.
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 |
@ -2583,6 +2642,22 @@ The actual number of ping-slots per beacon period equals to 2^k. |
<a name="api-CadPeriodicity"></a>
### CadPeriodicity
| Name | Number | Description |
| ---- | ------ | ----------- |
| SEC_1 | 0 | 1 second. |
| MS_500 | 1 | 500 milliseconds |
| MS_250 | 2 | 250 milliseconds |
| MS_100 | 3 | 100 milliseconds |
| MS_50 | 4 | 50 milliseconds |
| MS_20 | 5 | 20 milliseconds |
<a name="api-CodecRuntime"></a>
### CodecRuntime
@ -2610,6 +2685,36 @@ The actual number of ping-slots per beacon period equals to 2^k. |
| STRING | 4 | E.g. a firmware version, true / false value. |
<a name="api-RelayModeActivation"></a>
### RelayModeActivation
| Name | Number | Description |
| ---- | ------ | ----------- |
| DISABLE_RELAY_MODE | 0 | Disable the relay mode. |
| ENABLE_RELAY_MODE | 1 | Enable the relay model. |
| DYNAMIC | 2 | Dynamic. |
| END_DEVICE_CONTROLLED | 3 | End-device controlled. |
<a name="api-SecondChAckOffset"></a>
### SecondChAckOffset
| Name | Number | Description |
| ---- | ------ | ----------- |
| KHZ_0 | 0 | 0 kHz. |
| KHZ_200 | 1 | 200 kHz. |
| KHZ_400 | 2 | 400 kHz. |
| KHZ_800 | 3 | 800 kHz. |
| KHZ_1600 | 4 | 1600 kHz. |
| KHZ_3200 | 5 | 3200 kHz. |
@ -2656,7 +2761,8 @@ DeviceProfileService is the service providing API methods for managing device-pr
| m_type | [common.MType](#common-MType) | | Message type. |
| dev_addr | [string](#string) | | Device address (optional). |
| dev_eui | [string](#string) | | Device EUI (optional). |
| plaintext_mac_commands | [bool](#bool) | | Plaintext mac-commands. |
| plaintext_f_opts | [bool](#bool) | | Plaintext f_opts mac-commands. |
| plaintext_frm_payload | [bool](#bool) | | Plaintext frm_payload. |
@ -2678,7 +2784,8 @@ DeviceProfileService is the service providing API methods for managing device-pr
| dev_addr | [string](#string) | | Device address (optional). |
| dev_eui | [string](#string) | | Device EUI (optional). |
| time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | Time. |
| plaintext_mac_commands | [bool](#bool) | | Plaintext mac-commands. |
| plaintext_f_opts | [bool](#bool) | | Plaintext f_opts mac-commands. |
| plaintext_frm_payload | [bool](#bool) | | Plaintext frm_payload. |

File diff suppressed because it is too large Load Diff

View File

@ -190,6 +190,13 @@ message Device {
// These tags are exposed in the event payloads or to integration. Tags are
// intended for aggregation and filtering.
map<string, string> tags = 9;
// JoinEUI (optional, EUI64).
// This field will be automatically set / updated on OTAA. However, in some
// cases it must be pre-configured. For example to allow OTAA using a Relay.
// In this case the Relay needs to know the JoinEUI + DevEUI combinations
// of the devices for which it needs to forward uplinks.
string join_eui = 10;
}
message DeviceStatus {

View File

@ -41,6 +41,61 @@ enum MeasurementKind {
STRING = 4;
}
enum CadPeriodicity {
// 1 second.
SEC_1 = 0;
// 500 milliseconds
MS_500 = 1;
// 250 milliseconds
MS_250 = 2;
// 100 milliseconds
MS_100 = 3;
// 50 milliseconds
MS_50 = 4;
// 20 milliseconds
MS_20 = 5;
}
enum SecondChAckOffset {
// 0 kHz.
KHZ_0 = 0;
// 200 kHz.
KHZ_200 = 1;
// 400 kHz.
KHZ_400 = 2;
// 800 kHz.
KHZ_800 = 3;
// 1600 kHz.
KHZ_1600 = 4;
// 3200 kHz.
KHZ_3200 = 5;
}
enum RelayModeActivation {
// Disable the relay mode.
DISABLE_RELAY_MODE = 0;
// Enable the relay model.
ENABLE_RELAY_MODE = 1;
// Dynamic.
DYNAMIC = 2;
// End-device controlled.
END_DEVICE_CONTROLLED = 3;
}
// DeviceProfileService is the service providing API methods for managing device-profiles.
service DeviceProfileService {
// Create the given device-profile.
@ -195,6 +250,154 @@ message DeviceProfile {
// e.g. to provide an 8 channel and 16 channel configuration for the US915
// band.
string region_config_id = 29;
// Device is a Relay device.
// Enable this in case the device is a Relay. A Relay device implements TS011
// and is able to relay data from relay capable devices.
// See for more information the TS011 specification.
bool is_relay = 30;
// Device is a Relay end-device.
// Enable this in case the device is an end-device that can operate under a
// Relay. Please refer to the TS011 specification for more information.
bool is_relay_ed = 31;
// End-device only accept data through relay.
// Only accept data for this device through a relay. This setting is useful
// for testing as in case of a test-setup, the end-device is usually within
// range of the gateway.
bool relay_ed_relay_only = 32;
// Relay must be enabled.
bool relay_enabled = 33;
// Relay CAD periodicity.
CadPeriodicity relay_cad_periodicity = 34;
// Relay default channel index.
// Valid values are 0 and 1, please refer to the RP002 specification for
// the meaning of these values.
uint32 relay_default_channel_index = 35;
// Relay second channel frequency (Hz).
uint32 relay_second_channel_freq = 36;
// Relay second channel DR.
uint32 relay_second_channel_dr = 37;
// Relay second channel ACK offset.
SecondChAckOffset relay_second_channel_ack_offset = 38;
// Relay end-device activation mode.
RelayModeActivation relay_ed_activation_mode = 39;
// Relay end-device smart-enable level.
uint32 relay_ed_smart_enable_level = 40;
// Relay end-device back-off (in case it does not receive WOR ACK frame).
// 0 = Always send a LoRaWAN uplink
// 1..63 = Send a LoRaWAN uplink after X WOR frames without a WOR ACK
uint32 relay_ed_back_off = 41;
// Relay end-device uplink limit bucket size.
//
// 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
uint32 relay_ed_uplink_limit_bucket_size = 42;
// Relay end-device uplink limit reload rate.
//
// Valid values:
// * 0 - 62 = X tokens every hour
// * 63 = no limitation
uint32 relay_ed_uplink_limit_reload_rate = 43;
// Relay join-request limit reload rate.
//
// Valid values:
// * 0 - 126 = X tokens every hour
// * 127 = no limitation
uint32 relay_join_req_limit_reload_rate = 44;
// Relay notify limit reload rate.
//
// Valid values:
// * 0 - 126 = X tokens every hour
// * 127 = no limitation
uint32 relay_notify_limit_reload_rate = 45;
// Relay global uplink limit reload rate.
//
// Valid values:
// * 0 - 126 = X tokens every hour
// * 127 = no limitation
uint32 relay_global_uplink_limit_reload_rate = 46;
// Relay overall limit reload rate.
//
// Valid values:
// * 0 - 126 = X tokens every hour
// * 127 = no limitation
uint32 relay_overall_limit_reload_rate = 47;
// Relay join-request limit bucket size.
//
// 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
uint32 relay_join_req_limit_bucket_size = 48;
// Relay notify limit bucket size.
//
// 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
uint32 relay_notify_limit_bucket_size = 49;
// Relay globak uplink limit bucket size.
//
// 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
uint32 relay_global_uplink_limit_bucket_size = 50;
// Relay overall limit bucket size.
//
// 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
uint32 relay_overall_limit_bucket_size = 51;
}
message Measurement {

View File

@ -34,8 +34,11 @@ message UplinkFrameLog {
// Time.
google.protobuf.Timestamp time = 7;
// Plaintext mac-commands.
bool plaintext_mac_commands = 8;
// Plaintext f_opts mac-commands.
bool plaintext_f_opts = 8;
// Plaintext frm_payload.
bool plaintext_frm_payload = 9;
}
message DownlinkFrameLog {
@ -63,6 +66,9 @@ message DownlinkFrameLog {
// Device EUI (optional).
string dev_eui = 8;
// Plaintext mac-commands.
bool plaintext_mac_commands = 9;
// Plaintext f_opts mac-commands.
bool plaintext_f_opts = 9;
// Plaintext frm_payload.
bool plaintext_frm_payload = 10;
}

119
api/proto/api/relay.proto vendored Normal file
View File

@ -0,0 +1,119 @@
syntax = "proto3";
package api;
option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
option java_package = "io.chirpstack.api";
option java_multiple_files = true;
option java_outer_classname = "RelayProto";
option csharp_namespace = "Chirpstack.Api";
import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
// RelayService is the service providing API methos for managing relays.
service RelayService {
// List lists the relays for the given application id.
rpc List(ListRelaysRequest) returns (ListRelaysResponse) {
option(google.api.http) = {
get: "/api/relays"
};
}
// AddDevice adds the given device to the relay.
rpc AddDevice(AddRelayDeviceRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
post: "/api/relays/{relay_dev_eui}/devices"
body: "*"
};
}
// RemoveDevice removes the given device from the relay.
rpc RemoveDevice(RemoveRelayDeviceRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
delete: "/api/relays/{relay_dev_eui}/devices/{dev_eui}"
};
};
// ListDevices lists the devices for the given relay.
rpc ListDevices(ListRelayDevicesRequest) returns (ListRelayDevicesResponse) {
option(google.api.http) = {
get: "/api/relays/{relay_dev_eui}/devices"
};
};
}
message RelayListItem {
// DevEUI (EUI64).
string dev_eui = 1;
// Name.
string name = 2;
}
message ListRelaysRequest {
// Max number of devices to return in the result-set.
uint32 limit = 1;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Application ID (UUID).
string application_id = 3;
}
message ListRelaysResponse {
// Total number of relays.
uint32 total_count = 1;
// Result-set.
repeated RelayListItem result = 2;
}
message AddRelayDeviceRequest {
// Relay DevEUI (EUI64).
string relay_dev_eui = 1;
// Device DevEUI (EUI64).
string device_dev_eui = 2;
}
message RemoveRelayDeviceRequest {
// Relay DevEUI (EUI64).
string relay_dev_eui = 1;
// Device DevEUI (EUI64).
string device_dev_eui = 2;
}
message ListRelayDevicesRequest {
// Max number of multicast groups to return in the result-set.
uint32 limit = 1;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Relay DevEUI (EUI64).
string relay_dev_eui = 3;
}
message RelayDeviceListItem {
// DevEUI (EUI64).
string dev_eui = 1;
// Created at timestamp.
google.protobuf.Timestamp created_at = 2;
// Device name.
string name = 3;
}
message ListRelayDevicesResponse {
// Total number of devices.
uint32 total_count = 1;
// Result-set.
repeated RelayDeviceListItem result = 2;
}

851
api/proto/gw/gw.proto vendored

File diff suppressed because it is too large Load Diff

View File

@ -14,288 +14,319 @@ import "google/protobuf/timestamp.proto";
import "google/protobuf/struct.proto";
enum LogLevel {
// Info.
INFO = 0;
// Info.
INFO = 0;
// Warning.
WARNING = 1;
// Warning.
WARNING = 1;
// Error.
ERROR = 2;
// Error.
ERROR = 2;
}
enum LogCode {
// Unknown type.
UNKNOWN = 0;
// Unknown type.
UNKNOWN = 0;
// Error related to the downlink payload size.
// Usually seen when the payload exceeded the maximum allowed payload size.
DOWNLINK_PAYLOAD_SIZE = 1;
// Error related to the downlink payload size.
// Usually seen when the payload exceeded the maximum allowed payload size.
DOWNLINK_PAYLOAD_SIZE = 1;
// Uplink codec error.
UPLINK_CODEC = 2;
// Uplink codec error.
UPLINK_CODEC = 2;
// Downlink codec error.
DOWNLINK_CODEC = 3;
// Downlink codec error.
DOWNLINK_CODEC = 3;
// OTAA error.
OTAA = 4;
// OTAA error.
OTAA = 4;
// Uplink frame-counter was reset.
UPLINK_F_CNT_RESET = 5;
// Uplink frame-counter was reset.
UPLINK_F_CNT_RESET = 5;
// Uplink MIC error.
UPLINK_MIC = 6;
// Uplink MIC error.
UPLINK_MIC = 6;
// Uplink frame-counter retransmission.
UPLINK_F_CNT_RETRANSMISSION = 7;
// Uplink frame-counter retransmission.
UPLINK_F_CNT_RETRANSMISSION = 7;
// Downlink gateway error.
DOWNLINK_GATEWAY = 8;
// Downlink gateway error.
DOWNLINK_GATEWAY = 8;
// Relay new end-device.
RELAY_NEW_END_DEVICE = 9;
}
// Device information.
message DeviceInfo {
// Tenant ID (UUID).
string tenant_id = 1;
// Tenant ID (UUID).
string tenant_id = 1;
// Tenant name.
string tenant_name = 2;
// Tenant name.
string tenant_name = 2;
// Application ID (UUID).
string application_id = 3;
// Application ID (UUID).
string application_id = 3;
// Application name.
string application_name = 4;
// Application name.
string application_name = 4;
// Device-profile ID (UUID).
string device_profile_id = 5;
// Device-profile ID (UUID).
string device_profile_id = 5;
// Device-profile name.
string device_profile_name = 6;
// Device-profile name.
string device_profile_name = 6;
// Device name.
string device_name = 7;
// Device name.
string device_name = 7;
// Device EUI.
string dev_eui = 8;
// Device EUI.
string dev_eui = 8;
// Device-profile and device tags.
map<string, string> tags = 9;
// Device-profile and device tags.
map<string, string> tags = 9;
}
// Uplink relay RX information.
message UplinkRelayRxInfo {
// Relay DevEUI.
string dev_eui = 1;
// Frequency.
uint32 frequency = 2;
// Data-rate.
uint32 dr = 3;
// SNR.
int32 snr = 4;
// RSSI.
int32 rssi = 5;
// WOR channel.
uint32 wor_channel = 6;
}
// UplinkEvent is the message sent when an uplink payload has been received.
message UplinkEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device information.
DeviceInfo device_info = 3;
// Device information.
DeviceInfo device_info = 3;
// Device address.
string dev_addr = 4;
// Device address.
string dev_addr = 4;
// Device has ADR bit set.
bool adr = 5;
// Device has ADR bit set.
bool adr = 5;
// Data-rate.
uint32 dr = 6;
// Data-rate.
uint32 dr = 6;
// Frame counter.
uint32 f_cnt = 7;
// Frame counter.
uint32 f_cnt = 7;
// Frame port.
uint32 f_port = 8;
// Frame port.
uint32 f_port = 8;
// Uplink was of type confirmed.
bool confirmed = 9;
// Uplink was of type confirmed.
bool confirmed = 9;
// FRMPayload data.
bytes data = 10;
// FRMPayload data.
bytes data = 10;
// Note that this is only set when a codec is configured in the Device Profile.
google.protobuf.Struct object = 11;
// Note that this is only set when a codec is configured in the Device
// Profile.
google.protobuf.Struct object = 11;
// Receiving gateway RX info.
repeated gw.UplinkRxInfo rx_info = 12;
// Receiving gateway RX info.
repeated gw.UplinkRxInfo rx_info = 12;
// TX info.
gw.UplinkTxInfo tx_info = 13;
// TX info.
gw.UplinkTxInfo tx_info = 13;
// Relay info.
UplinkRelayRxInfo relay_rx_info = 14;
}
// JoinEvent is the message sent when a device joined the network.
// Note: this event is sent at the first uplink after OTAA.
message JoinEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// Device address.
string dev_addr = 4;
// Device address.
string dev_addr = 4;
// Relay info.
UplinkRelayRxInfo relay_rx_info = 5;
}
// AckEvent is the message sent when a confirmation on a confirmed downlink
// has been received -or- when the downlink timed out.
message AckEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// Downlink queue item ID (UUID).
string queue_item_id = 4;
// Downlink queue item ID (UUID).
string queue_item_id = 4;
// Frame was acknowledged.
bool acknowledged = 5;
// Frame was acknowledged.
bool acknowledged = 5;
// Downlink frame counter to which the acknowledgement relates.
uint32 f_cnt_down = 6;
// Downlink frame counter to which the acknowledgement relates.
uint32 f_cnt_down = 6;
}
// TxAckEvent is the message sent when a downlink was acknowledged by the gateway
// for transmission. As a downlink can be scheduled in the future, this event
// does not confirm that the message has already been transmitted.
// TxAckEvent is the message sent when a downlink was acknowledged by the
// gateway for transmission. As a downlink can be scheduled in the future, this
// event does not confirm that the message has already been transmitted.
message TxAckEvent {
// Downlink ID.
uint32 downlink_id = 1;
// Downlink ID.
uint32 downlink_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// Downlink queue item ID (UUID).
string queue_item_id = 4;
// Downlink queue item ID (UUID).
string queue_item_id = 4;
// Downlink frame-counter.
uint32 f_cnt_down = 5;
// Downlink frame-counter.
uint32 f_cnt_down = 5;
// Gateway ID.
string gateway_id = 6;
// Gateway ID.
string gateway_id = 6;
// TX info.
gw.DownlinkTxInfo tx_info = 7;
// TX info.
gw.DownlinkTxInfo tx_info = 7;
}
// LogEvent is the message sent when a device-related log was sent.
message LogEvent {
// Timestamp.
google.protobuf.Timestamp time = 1;
// Timestamp.
google.protobuf.Timestamp time = 1;
// Device info.
DeviceInfo device_info = 2;
// Device info.
DeviceInfo device_info = 2;
// Log level.
LogLevel level = 3;
// Log level.
LogLevel level = 3;
// Log code.
LogCode code = 4;
// Log code.
LogCode code = 4;
// Description message.
string description = 5;
// Description message.
string description = 5;
// Context map.
map<string, string> context = 6;
// Context map.
map<string, string> context = 6;
}
// StatusEvent is the message sent when a device-status mac-command was sent
// by the device.
message StatusEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// The demodulation signal-to-noise ratio in dB for the last successfully
// received device-status request by the Network Server.
int32 margin = 5;
// The demodulation signal-to-noise ratio in dB for the last successfully
// received device-status request by the Network Server.
int32 margin = 5;
// Device is connected to an external power source.
bool external_power_source = 6;
// Device is connected to an external power source.
bool external_power_source = 6;
// Battery level is not available.
bool battery_level_unavailable = 7;
// Battery level is not available.
bool battery_level_unavailable = 7;
// Battery level.
float battery_level = 8;
// Battery level.
float battery_level = 8;
}
// LocationEvent is the message sent when a geolocation resolve was returned.
message LocationEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// Location.
common.Location location = 4;
// Location.
common.Location location = 4;
}
// IntegrationEvent is the message that can be sent by an integration.
// It allows for sending events which are provided by an external integration
// which are "not native" to ChirpStack.
message IntegrationEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// Integration name.
string integration_name = 4;
// Integration name.
string integration_name = 4;
// Event type.
string event_type = 5;
// Event type.
string event_type = 5;
// Struct containing the event object.
google.protobuf.Struct object = 6;
// Struct containing the event object.
google.protobuf.Struct object = 6;
}
// DownlinkCommand is the command to enqueue a downlink payload for the given
// device.
message DownlinkCommand {
// ID (UUID).
// If left blank, a random UUID will be generated.
string id = 1;
// ID (UUID).
// If left blank, a random UUID will be generated.
string id = 1;
// Device EUI (EUI64).
string dev_eui = 2;
// Device EUI (EUI64).
string dev_eui = 2;
// Confirmed.
bool confirmed = 3;
// Confirmed.
bool confirmed = 3;
// FPort (must be > 0).
uint32 f_port = 4;
// FPort (must be > 0).
uint32 f_port = 4;
// Data.
// Or use the json_object field when a codec has been configured.
bytes data = 5;
// Data.
// Or use the json_object field when a codec has been configured.
bytes data = 5;
// Only use this when a codec has been configured that can encode this
// object to bytes.
google.protobuf.Struct object = 6;
// Only use this when a codec has been configured that can encode this
// object to bytes.
google.protobuf.Struct object = 6;
}

View File

@ -7,272 +7,403 @@ import "gw/gw.proto";
import "google/protobuf/timestamp.proto";
message DeviceSession {
// Device EUI.
bytes dev_eui = 1;
// Device EUI.
bytes dev_eui = 1;
// Device address.
bytes dev_addr = 2;
// Device address.
bytes dev_addr = 2;
// Join EUI.
bytes join_eui = 3;
// Join EUI.
bytes join_eui = 3;
// LoRaWAN mac-version.
common.MacVersion mac_version = 4;
// LoRaWAN mac-version.
common.MacVersion mac_version = 4;
// FNwkSIntKey.
bytes f_nwk_s_int_key = 5;
// FNwkSIntKey.
bytes f_nwk_s_int_key = 5;
// SNwkSIntKey.
bytes s_nwk_s_int_key = 6;
// SNwkSIntKey.
bytes s_nwk_s_int_key = 6;
// NwkSEncKey.
bytes nwk_s_enc_key = 7;
// NwkSEncKey.
bytes nwk_s_enc_key = 7;
// AppSKey envelope.
common.KeyEnvelope app_s_key = 8;
// AppSKey envelope.
common.KeyEnvelope app_s_key = 8;
// Uplink frame-counter.
uint32 f_cnt_up = 9;
// Uplink frame-counter.
uint32 f_cnt_up = 9;
// Downlink frame-counter (ns).
uint32 n_f_cnt_down = 10;
// Downlink frame-counter (ns).
uint32 n_f_cnt_down = 10;
// Downlink frame-counter (as).
uint32 a_f_cnt_down = 11;
// Downlink frame-counter (as).
uint32 a_f_cnt_down = 11;
// Frame-counter holding the last confirmed downlink frame (n_f_cnt_down or a_f_cnt_down).
uint32 conf_f_cnt = 12;
// Frame-counter holding the last confirmed downlink frame (n_f_cnt_down or
// a_f_cnt_down).
uint32 conf_f_cnt = 12;
// Skip uplink frame-counter validation.
bool skip_f_cnt_check = 13;
// Skip uplink frame-counter validation.
bool skip_f_cnt_check = 13;
// RX1 delay.
uint32 rx1_delay = 14;
// RX1 delay.
uint32 rx1_delay = 14;
// RX1 data-rate offset.
uint32 rx1_dr_offset = 15;
// RX1 data-rate offset.
uint32 rx1_dr_offset = 15;
// RX2 data-rate.
uint32 rx2_dr = 16;
// RX2 data-rate.
uint32 rx2_dr = 16;
// RX2 frequency.
uint32 rx2_frequency = 17;
// RX2 frequency.
uint32 rx2_frequency = 17;
// Enabled uplink channels.
repeated uint32 enabled_uplink_channel_indices = 18;
// Enabled uplink channels.
repeated uint32 enabled_uplink_channel_indices = 18;
// Extra user-defined uplink channels.
map<uint32, DeviceSessionChannel> extra_uplink_channels = 19;
// Extra user-defined uplink channels.
map<uint32, DeviceSessionChannel> extra_uplink_channels = 19;
// Class-B ping-slot data-rate.
uint32 class_b_ping_slot_dr = 20;
// Class-B ping-slot data-rate.
uint32 class_b_ping_slot_dr = 20;
// Class-B ping-slot frequency.
uint32 class_b_ping_slot_freq = 21;
// Class-B ping-slot frequency.
uint32 class_b_ping_slot_freq = 21;
// Class-B ping-slot nb.
uint32 class_b_ping_slot_nb = 22;
// Class-B ping-slot nb.
uint32 class_b_ping_slot_nb = 22;
// Nb. transmissions.
uint32 nb_trans = 23;
// Nb. transmissions.
uint32 nb_trans = 23;
// TXPowerIndex which the node is using. The possible values are defined
// by the lorawan/band package and are region specific. By default it is
// assumed that the node is using TXPower 0. This value is controlled by
// the ADR engine.
uint32 tx_power_index = 24;
// TXPowerIndex which the node is using. The possible values are defined
// by the lorawan/band package and are region specific. By default it is
// assumed that the node is using TXPower 0. This value is controlled by
// the ADR engine.
uint32 tx_power_index = 24;
// DR defines the (last known) data-rate at which the node is operating.
// This value is controlled by the ADR engine.
uint32 dr = 25;
// DR defines the (last known) data-rate at which the node is operating.
// This value is controlled by the ADR engine.
uint32 dr = 25;
// ADR defines if the device has ADR enabled.
bool adr = 26;
// ADR defines if the device has ADR enabled.
bool adr = 26;
// MaxSupportedTXPowerIndex defines the maximum supported tx-power index
// by the node, or 0 when not set.
uint32 max_supported_tx_power_index = 27;
// MaxSupportedTXPowerIndex defines the maximum supported tx-power index
// by the node, or 0 when not set.
uint32 max_supported_tx_power_index = 27;
// MinSupportedTXPowerIndex defines the minimum supported tx-power index
// by the node (default 0).
uint32 min_supported_tx_power_index = 28;
// MinSupportedTXPowerIndex defines the minimum supported tx-power index
// by the node (default 0).
uint32 min_supported_tx_power_index = 28;
// Pending rejoin device-session contains a device-session which has not
// yet been activated by the device (by sending a first uplink).
DeviceSession pending_rejoin_device_session = 29;
// Pending rejoin device-session contains a device-session which has not
// yet been activated by the device (by sending a first uplink).
DeviceSession pending_rejoin_device_session = 29;
// Uplink history for ADR (last 20 uplink transmissions).
repeated UplinkAdrHistory uplink_adr_history = 30;
// Uplink history for ADR (last 20 uplink transmissions).
repeated UplinkAdrHistory uplink_adr_history = 30;
// Mac-command error count.
map<uint32, uint32> mac_command_error_count = 31;
// Mac-command error count.
map<uint32, uint32> mac_command_error_count = 31;
// Last device-status request.
google.protobuf.Timestamp last_device_status_request = 32;
// Last device-status request.
google.protobuf.Timestamp last_device_status_request = 32;
// RejoinRequestEnabled defines if the rejoin-request is enabled on the
// device.
bool rejoin_request_enabled = 33;
// RejoinRequestEnabled defines if the rejoin-request is enabled on the
// device.
bool rejoin_request_enabled = 33;
// RejoinRequestMaxCountN defines the 2^(C+4) uplink message interval for
// the rejoin-request.
uint32 rejoin_request_max_count_n = 34;
// RejoinRequestMaxCountN defines the 2^(C+4) uplink message interval for
// the rejoin-request.
uint32 rejoin_request_max_count_n = 34;
// RejoinRequestMaxTimeN defines the 2^(T+10) time interval (seconds)
// for the rejoin-request.
uint32 rejoin_request_max_time_n = 35;
// RejoinRequestMaxTimeN defines the 2^(T+10) time interval (seconds)
// for the rejoin-request.
uint32 rejoin_request_max_time_n = 35;
// Rejoin counter (RJCount0).
// This counter is reset to 0 after each successful join-accept.
uint32 rejoin_count_0 = 36;
// Rejoin counter (RJCount0).
// This counter is reset to 0 after each successful join-accept.
uint32 rejoin_count_0 = 36;
// Uplink dwell time.
bool uplink_dwell_time_400ms = 37;
// Uplink dwell time.
bool uplink_dwell_time_400ms = 37;
// Downlink dwell time.
bool downlink_dwell_time_400ms = 38;
// Downlink dwell time.
bool downlink_dwell_time_400ms = 38;
// Uplink max. EIRP index.
uint32 uplink_max_eirp_index = 39;
// Uplink max. EIRP index.
uint32 uplink_max_eirp_index = 39;
// Region configuration ID.
string region_config_id = 40;
// Region configuration ID.
string region_config_id = 40;
// Relay state.
Relay relay = 41;
}
message UplinkAdrHistory {
// Uplink frame-counter.
uint32 f_cnt = 1;
// Uplink frame-counter.
uint32 f_cnt = 1;
// Max SNR (of deduplicated frames received by one or multiple gateways).
float max_snr = 2;
// Max SNR (of deduplicated frames received by one or multiple gateways).
float max_snr = 2;
// Max RSSI.
int32 max_rssi = 5;
// Max RSSI.
int32 max_rssi = 5;
// TX Power (as known by the network-server).
uint32 tx_power_index = 3;
// TX Power (as known by the network-server).
uint32 tx_power_index = 3;
// Number of receiving gateways.
uint32 gateway_count = 4;
// Number of receiving gateways.
uint32 gateway_count = 4;
}
message Relay {
// Devices provisioned on the relay.
repeated RelayDevice devices = 1;
// Filter list.
repeated RelayFilter filters = 2;
// Relay is enabled.
bool enabled = 3;
// CAD periodicity.
uint32 cad_periodicity = 4;
// Default channel index.
uint32 default_channel_index = 5;
// Second channel freq.
uint32 second_channel_freq = 6;
// Second channel DR.
uint32 second_channel_dr = 7;
// Second channel ACK offset.
uint32 second_channel_ack_offset = 8;
// End-device activation mode.
uint32 ed_activation_mode = 9;
// End-device smart-enable level.
uint32 ed_smart_enable_level = 10;
// End-device back-off.
uint32 ed_back_off = 11;
// Join-request limit reload rate.
uint32 join_req_limit_reload_rate = 12;
// Notify limit reload rate.
uint32 notify_limit_reload_rate = 13;
// Global uplink limit reload rate.
uint32 global_uplink_limit_reload_rate = 14;
// Overall limit reload rate.
uint32 overall_limit_reload_rate = 15;
// Join-request limit bucket size.
uint32 join_req_limit_bucket_size = 16;
// Notify limit bucket size.
uint32 notify_limit_bucket_size = 17;
// Global uplink limit bucket size.
uint32 global_uplink_limit_bucket_size = 18;
// Overall limit bucket size.
uint32 overall_limit_bucket_size = 19;
// End-device must communicate through relay only.
// This is stored in the device-session as we need to validate on retrieving
// the device-session.
bool ed_relay_only = 20;
// End-device WFCnt.
// This holds the last known WFCnt value. ChirpStack will periodically read
// this value from the Relay.
uint32 w_f_cnt = 21;
}
message RelayDevice {
// Index (used for filter and uplink filters).
// This must be between 0 - 15.
uint32 index = 1;
// JoinEUI (EUI64).
bytes join_eui = 2;
// DevEUI (EUI64).
bytes dev_eui = 3;
// DevAddr.
bytes dev_addr = 4;
// RootWorSKey.
bytes root_wor_s_key = 5;
// Provisioned.
bool provisioned = 6;
// Uplink limit bucket size.
uint32 uplink_limit_bucket_size = 7;
// Uplink limit reload rate.
uint32 uplink_limit_reload_rate = 8;
// Timestamp of the last WFCnt request.
// Note that ChirpStack periodically requests the WFCnt from the relay.
google.protobuf.Timestamp w_f_cnt_last_request = 9;
}
message RelayFilter {
// Index.
// This must be between 0 - 15.
uint32 index = 1;
// Action.
// * 0: No Rule
// * 1: Forward
// * 2: Filter
uint32 action = 2;
// DevEUI (EUI64).
bytes dev_eui = 3;
// JoinEUI (EUI64).
bytes join_eui = 4;
// Provisioned.
bool provisioned = 5;
}
message DeviceSessionChannel {
// Frequency Hz.
uint32 frequency = 1;
// Frequency Hz.
uint32 frequency = 1;
// Min. data-rate.
uint32 min_dr = 2;
// Min. data-rate.
uint32 min_dr = 2;
// Max. data-rate.
uint32 max_dr = 3;
// Max. data-rate.
uint32 max_dr = 3;
}
message DeviceGatewayRxInfo {
// DevEUI (EUI64).
bytes dev_eui = 1;
// DevEUI (EUI64).
bytes dev_eui = 1;
// Data-rate.
uint32 dr = 2;
// Data-rate.
uint32 dr = 2;
// Gateway RxInfo elements.
repeated DeviceGatewayRxInfoItem items = 3;
// Gateway RxInfo elements.
repeated DeviceGatewayRxInfoItem items = 3;
}
message DeviceGatewayRxInfoItem {
// Gateway ID (EUI64).
bytes gateway_id = 1;
// Gateway ID (EUI64).
bytes gateway_id = 1;
// RSSI.
int32 rssi = 2;
// RSSI.
int32 rssi = 2;
// LoRa SNR.
float lora_snr = 3;
// LoRa SNR.
float lora_snr = 3;
// Antenna.
uint32 antenna = 4;
// Antenna.
uint32 antenna = 4;
// Board.
uint32 board = 5;
// Board.
uint32 board = 5;
// Context blob.
bytes context = 6;
// Context blob.
bytes context = 6;
// Gateway is private (uplink).
bool is_private_up = 7;
// Gateway is private (uplink).
bool is_private_up = 7;
// Gateway is private (downlink).
bool is_private_down = 8;
// Gateway is private (downlink).
bool is_private_down = 8;
// Tenant ID (UUID).
bytes tenant_id = 9;
// Tenant ID (UUID).
bytes tenant_id = 9;
}
message DownlinkFrame {
// Downlink ID.
uint32 downlink_id = 1;
// Downlink ID.
uint32 downlink_id = 1;
// DevEUI.
bytes dev_eui = 2;
// DevEUI.
bytes dev_eui = 2;
// Device queue item ID.
bytes device_queue_item_id = 3;
// Device queue item ID.
bytes device_queue_item_id = 3;
// Multicast Group ID.
bytes multicast_group_id = 4;
// Multicast Group ID.
bytes multicast_group_id = 4;
// Multicast queue item ID.
bytes multicast_group_queue_item_id = 5;
// Multicast queue item ID.
bytes multicast_group_queue_item_id = 5;
// Downlink frames.
gw.DownlinkFrame downlink_frame = 6;
// Downlink frames.
gw.DownlinkFrame downlink_frame = 6;
// Encrypted FOpts (LoRaWAN 1.1).
bool encrypted_fopts = 8;
// Encrypted FOpts (LoRaWAN 1.1).
bool encrypted_fopts = 8;
// Network session encryption key (for FOpts and FRMPayload mac-commands).
bytes nwk_s_enc_key = 9;
// Network session encryption key (for FOpts and FRMPayload mac-commands).
bytes nwk_s_enc_key = 9;
// NFCntDown (for decrypting mac-commands).
uint32 n_f_cnt_down = 10;
// NFCntDown (for decrypting mac-commands).
uint32 n_f_cnt_down = 10;
// AFCntDown (for decrypting FRMPayload in case of Relay).
uint32 a_f_cnt_down = 11;
// DevEUI of relayed device.
bytes dev_eui_relayed = 12;
}
message LoraCloudGeolocBuffer {
// Uplinks in buffer.
repeated LoraCloudGeolocBufferUplink uplinks = 1;
// Uplinks in buffer.
repeated LoraCloudGeolocBufferUplink uplinks = 1;
}
message LoraCloudGeolocBufferUplink {
// RxInfo set for a single uplink.
repeated gw.UplinkRxInfo rx_info = 1;
// RxInfo set for a single uplink.
repeated gw.UplinkRxInfo rx_info = 1;
}
message PassiveRoamingDeviceSession {
// Session ID (UUID).
// Unfortunately we can not use the DevEUI as unique identifier
// as the PRStartAns DevEUI field is optional.
bytes session_id = 1;
// Session ID (UUID).
// Unfortunately we can not use the DevEUI as unique identifier
// as the PRStartAns DevEUI field is optional.
bytes session_id = 1;
// NetID of the hNS.
bytes net_id = 2;
// DevAddr of the device.
bytes dev_addr = 3;
// NetID of the hNS.
bytes net_id = 2;
// DevEUI of the device (optional).
bytes dev_eui = 4;
// DevAddr of the device.
bytes dev_addr = 3;
// LoRaWAN 1.1.
bool lorawan_1_1 = 5;
// DevEUI of the device (optional).
bytes dev_eui = 4;
// LoRaWAN 1.0 NwkSKey / LoRaWAN 1.1 FNwkSIntKey.
bytes f_nwk_s_int_key = 6;
// LoRaWAN 1.1.
bool lorawan_1_1 = 5;
// Lifetime.
google.protobuf.Timestamp lifetime = 7;
// LoRaWAN 1.0 NwkSKey / LoRaWAN 1.1 FNwkSIntKey.
bytes f_nwk_s_int_key = 6;
// Uplink frame-counter.
uint32 f_cnt_up = 8;
// Lifetime.
google.protobuf.Timestamp lifetime = 7;
// Validate MIC.
bool validate_mic = 9;
// Uplink frame-counter.
uint32 f_cnt_up = 8;
// Validate MIC.
bool validate_mic = 9;
}

1
api/python/Makefile vendored
View File

@ -38,6 +38,7 @@ api:
$(PROTOC) ${PROTOC_ARGS} chirpstack-api/api/frame_log.proto
$(PROTOC) ${PROTOC_ARGS} chirpstack-api/api/multicast_group.proto
$(PROTOC) ${PROTOC_ARGS} chirpstack-api/api/request_log.proto
$(PROTOC) ${PROTOC_ARGS} chirpstack-api/api/relay.proto
integration:
$(PROTOC) ${PROTOC_ARGS} chirpstack-api/integration/integration.proto

File diff suppressed because it is too large Load Diff

View File

@ -190,6 +190,13 @@ message Device {
// These tags are exposed in the event payloads or to integration. Tags are
// intended for aggregation and filtering.
map<string, string> tags = 9;
// JoinEUI (optional, EUI64).
// This field will be automatically set / updated on OTAA. However, in some
// cases it must be pre-configured. For example to allow OTAA using a Relay.
// In this case the Relay needs to know the JoinEUI + DevEUI combinations
// of the devices for which it needs to forward uplinks.
string join_eui = 10;
}
message DeviceStatus {

View File

@ -41,6 +41,61 @@ enum MeasurementKind {
STRING = 4;
}
enum CadPeriodicity {
// 1 second.
SEC_1 = 0;
// 500 milliseconds
MS_500 = 1;
// 250 milliseconds
MS_250 = 2;
// 100 milliseconds
MS_100 = 3;
// 50 milliseconds
MS_50 = 4;
// 20 milliseconds
MS_20 = 5;
}
enum SecondChAckOffset {
// 0 kHz.
KHZ_0 = 0;
// 200 kHz.
KHZ_200 = 1;
// 400 kHz.
KHZ_400 = 2;
// 800 kHz.
KHZ_800 = 3;
// 1600 kHz.
KHZ_1600 = 4;
// 3200 kHz.
KHZ_3200 = 5;
}
enum RelayModeActivation {
// Disable the relay mode.
DISABLE_RELAY_MODE = 0;
// Enable the relay model.
ENABLE_RELAY_MODE = 1;
// Dynamic.
DYNAMIC = 2;
// End-device controlled.
END_DEVICE_CONTROLLED = 3;
}
// DeviceProfileService is the service providing API methods for managing device-profiles.
service DeviceProfileService {
// Create the given device-profile.
@ -195,6 +250,154 @@ message DeviceProfile {
// e.g. to provide an 8 channel and 16 channel configuration for the US915
// band.
string region_config_id = 29;
// Device is a Relay device.
// Enable this in case the device is a Relay. A Relay device implements TS011
// and is able to relay data from relay capable devices.
// See for more information the TS011 specification.
bool is_relay = 30;
// Device is a Relay end-device.
// Enable this in case the device is an end-device that can operate under a
// Relay. Please refer to the TS011 specification for more information.
bool is_relay_ed = 31;
// End-device only accept data through relay.
// Only accept data for this device through a relay. This setting is useful
// for testing as in case of a test-setup, the end-device is usually within
// range of the gateway.
bool relay_ed_relay_only = 32;
// Relay must be enabled.
bool relay_enabled = 33;
// Relay CAD periodicity.
CadPeriodicity relay_cad_periodicity = 34;
// Relay default channel index.
// Valid values are 0 and 1, please refer to the RP002 specification for
// the meaning of these values.
uint32 relay_default_channel_index = 35;
// Relay second channel frequency (Hz).
uint32 relay_second_channel_freq = 36;
// Relay second channel DR.
uint32 relay_second_channel_dr = 37;
// Relay second channel ACK offset.
SecondChAckOffset relay_second_channel_ack_offset = 38;
// Relay end-device activation mode.
RelayModeActivation relay_ed_activation_mode = 39;
// Relay end-device smart-enable level.
uint32 relay_ed_smart_enable_level = 40;
// Relay end-device back-off (in case it does not receive WOR ACK frame).
// 0 = Always send a LoRaWAN uplink
// 1..63 = Send a LoRaWAN uplink after X WOR frames without a WOR ACK
uint32 relay_ed_back_off = 41;
// Relay end-device uplink limit bucket size.
//
// 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
uint32 relay_ed_uplink_limit_bucket_size = 42;
// Relay end-device uplink limit reload rate.
//
// Valid values:
// * 0 - 62 = X tokens every hour
// * 63 = no limitation
uint32 relay_ed_uplink_limit_reload_rate = 43;
// Relay join-request limit reload rate.
//
// Valid values:
// * 0 - 126 = X tokens every hour
// * 127 = no limitation
uint32 relay_join_req_limit_reload_rate = 44;
// Relay notify limit reload rate.
//
// Valid values:
// * 0 - 126 = X tokens every hour
// * 127 = no limitation
uint32 relay_notify_limit_reload_rate = 45;
// Relay global uplink limit reload rate.
//
// Valid values:
// * 0 - 126 = X tokens every hour
// * 127 = no limitation
uint32 relay_global_uplink_limit_reload_rate = 46;
// Relay overall limit reload rate.
//
// Valid values:
// * 0 - 126 = X tokens every hour
// * 127 = no limitation
uint32 relay_overall_limit_reload_rate = 47;
// Relay join-request limit bucket size.
//
// 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
uint32 relay_join_req_limit_bucket_size = 48;
// Relay notify limit bucket size.
//
// 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
uint32 relay_notify_limit_bucket_size = 49;
// Relay globak uplink limit bucket size.
//
// 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
uint32 relay_global_uplink_limit_bucket_size = 50;
// Relay overall limit bucket size.
//
// 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
uint32 relay_overall_limit_bucket_size = 51;
}
message Measurement {

View File

@ -34,8 +34,11 @@ message UplinkFrameLog {
// Time.
google.protobuf.Timestamp time = 7;
// Plaintext mac-commands.
bool plaintext_mac_commands = 8;
// Plaintext f_opts mac-commands.
bool plaintext_f_opts = 8;
// Plaintext frm_payload.
bool plaintext_frm_payload = 9;
}
message DownlinkFrameLog {
@ -63,6 +66,9 @@ message DownlinkFrameLog {
// Device EUI (optional).
string dev_eui = 8;
// Plaintext mac-commands.
bool plaintext_mac_commands = 9;
// Plaintext f_opts mac-commands.
bool plaintext_f_opts = 9;
// Plaintext frm_payload.
bool plaintext_frm_payload = 10;
}

View File

@ -0,0 +1,119 @@
syntax = "proto3";
package api;
option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
option java_package = "io.chirpstack.api";
option java_multiple_files = true;
option java_outer_classname = "RelayProto";
option csharp_namespace = "Chirpstack.Api";
import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
// RelayService is the service providing API methos for managing relays.
service RelayService {
// List lists the relays for the given application id.
rpc List(ListRelaysRequest) returns (ListRelaysResponse) {
option(google.api.http) = {
get: "/api/relays"
};
}
// AddDevice adds the given device to the relay.
rpc AddDevice(AddRelayDeviceRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
post: "/api/relays/{relay_dev_eui}/devices"
body: "*"
};
}
// RemoveDevice removes the given device from the relay.
rpc RemoveDevice(RemoveRelayDeviceRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
delete: "/api/relays/{relay_dev_eui}/devices/{dev_eui}"
};
};
// ListDevices lists the devices for the given relay.
rpc ListDevices(ListRelayDevicesRequest) returns (ListRelayDevicesResponse) {
option(google.api.http) = {
get: "/api/relays/{relay_dev_eui}/devices"
};
};
}
message RelayListItem {
// DevEUI (EUI64).
string dev_eui = 1;
// Name.
string name = 2;
}
message ListRelaysRequest {
// Max number of devices to return in the result-set.
uint32 limit = 1;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Application ID (UUID).
string application_id = 3;
}
message ListRelaysResponse {
// Total number of relays.
uint32 total_count = 1;
// Result-set.
repeated RelayListItem result = 2;
}
message AddRelayDeviceRequest {
// Relay DevEUI (EUI64).
string relay_dev_eui = 1;
// Device DevEUI (EUI64).
string device_dev_eui = 2;
}
message RemoveRelayDeviceRequest {
// Relay DevEUI (EUI64).
string relay_dev_eui = 1;
// Device DevEUI (EUI64).
string device_dev_eui = 2;
}
message ListRelayDevicesRequest {
// Max number of multicast groups to return in the result-set.
uint32 limit = 1;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Relay DevEUI (EUI64).
string relay_dev_eui = 3;
}
message RelayDeviceListItem {
// DevEUI (EUI64).
string dev_eui = 1;
// Created at timestamp.
google.protobuf.Timestamp created_at = 2;
// Device name.
string name = 3;
}
message ListRelayDevicesResponse {
// Total number of devices.
uint32 total_count = 1;
// Result-set.
repeated RelayDeviceListItem result = 2;
}

File diff suppressed because it is too large Load Diff

View File

@ -14,288 +14,319 @@ import "google/protobuf/timestamp.proto";
import "google/protobuf/struct.proto";
enum LogLevel {
// Info.
INFO = 0;
// Info.
INFO = 0;
// Warning.
WARNING = 1;
// Warning.
WARNING = 1;
// Error.
ERROR = 2;
// Error.
ERROR = 2;
}
enum LogCode {
// Unknown type.
UNKNOWN = 0;
// Unknown type.
UNKNOWN = 0;
// Error related to the downlink payload size.
// Usually seen when the payload exceeded the maximum allowed payload size.
DOWNLINK_PAYLOAD_SIZE = 1;
// Error related to the downlink payload size.
// Usually seen when the payload exceeded the maximum allowed payload size.
DOWNLINK_PAYLOAD_SIZE = 1;
// Uplink codec error.
UPLINK_CODEC = 2;
// Uplink codec error.
UPLINK_CODEC = 2;
// Downlink codec error.
DOWNLINK_CODEC = 3;
// Downlink codec error.
DOWNLINK_CODEC = 3;
// OTAA error.
OTAA = 4;
// OTAA error.
OTAA = 4;
// Uplink frame-counter was reset.
UPLINK_F_CNT_RESET = 5;
// Uplink frame-counter was reset.
UPLINK_F_CNT_RESET = 5;
// Uplink MIC error.
UPLINK_MIC = 6;
// Uplink MIC error.
UPLINK_MIC = 6;
// Uplink frame-counter retransmission.
UPLINK_F_CNT_RETRANSMISSION = 7;
// Uplink frame-counter retransmission.
UPLINK_F_CNT_RETRANSMISSION = 7;
// Downlink gateway error.
DOWNLINK_GATEWAY = 8;
// Downlink gateway error.
DOWNLINK_GATEWAY = 8;
// Relay new end-device.
RELAY_NEW_END_DEVICE = 9;
}
// Device information.
message DeviceInfo {
// Tenant ID (UUID).
string tenant_id = 1;
// Tenant ID (UUID).
string tenant_id = 1;
// Tenant name.
string tenant_name = 2;
// Tenant name.
string tenant_name = 2;
// Application ID (UUID).
string application_id = 3;
// Application ID (UUID).
string application_id = 3;
// Application name.
string application_name = 4;
// Application name.
string application_name = 4;
// Device-profile ID (UUID).
string device_profile_id = 5;
// Device-profile ID (UUID).
string device_profile_id = 5;
// Device-profile name.
string device_profile_name = 6;
// Device-profile name.
string device_profile_name = 6;
// Device name.
string device_name = 7;
// Device name.
string device_name = 7;
// Device EUI.
string dev_eui = 8;
// Device EUI.
string dev_eui = 8;
// Device-profile and device tags.
map<string, string> tags = 9;
// Device-profile and device tags.
map<string, string> tags = 9;
}
// Uplink relay RX information.
message UplinkRelayRxInfo {
// Relay DevEUI.
string dev_eui = 1;
// Frequency.
uint32 frequency = 2;
// Data-rate.
uint32 dr = 3;
// SNR.
int32 snr = 4;
// RSSI.
int32 rssi = 5;
// WOR channel.
uint32 wor_channel = 6;
}
// UplinkEvent is the message sent when an uplink payload has been received.
message UplinkEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device information.
DeviceInfo device_info = 3;
// Device information.
DeviceInfo device_info = 3;
// Device address.
string dev_addr = 4;
// Device address.
string dev_addr = 4;
// Device has ADR bit set.
bool adr = 5;
// Device has ADR bit set.
bool adr = 5;
// Data-rate.
uint32 dr = 6;
// Data-rate.
uint32 dr = 6;
// Frame counter.
uint32 f_cnt = 7;
// Frame counter.
uint32 f_cnt = 7;
// Frame port.
uint32 f_port = 8;
// Frame port.
uint32 f_port = 8;
// Uplink was of type confirmed.
bool confirmed = 9;
// Uplink was of type confirmed.
bool confirmed = 9;
// FRMPayload data.
bytes data = 10;
// FRMPayload data.
bytes data = 10;
// Note that this is only set when a codec is configured in the Device Profile.
google.protobuf.Struct object = 11;
// Note that this is only set when a codec is configured in the Device
// Profile.
google.protobuf.Struct object = 11;
// Receiving gateway RX info.
repeated gw.UplinkRxInfo rx_info = 12;
// Receiving gateway RX info.
repeated gw.UplinkRxInfo rx_info = 12;
// TX info.
gw.UplinkTxInfo tx_info = 13;
// TX info.
gw.UplinkTxInfo tx_info = 13;
// Relay info.
UplinkRelayRxInfo relay_rx_info = 14;
}
// JoinEvent is the message sent when a device joined the network.
// Note: this event is sent at the first uplink after OTAA.
message JoinEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// Device address.
string dev_addr = 4;
// Device address.
string dev_addr = 4;
// Relay info.
UplinkRelayRxInfo relay_rx_info = 5;
}
// AckEvent is the message sent when a confirmation on a confirmed downlink
// has been received -or- when the downlink timed out.
message AckEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// Downlink queue item ID (UUID).
string queue_item_id = 4;
// Downlink queue item ID (UUID).
string queue_item_id = 4;
// Frame was acknowledged.
bool acknowledged = 5;
// Frame was acknowledged.
bool acknowledged = 5;
// Downlink frame counter to which the acknowledgement relates.
uint32 f_cnt_down = 6;
// Downlink frame counter to which the acknowledgement relates.
uint32 f_cnt_down = 6;
}
// TxAckEvent is the message sent when a downlink was acknowledged by the gateway
// for transmission. As a downlink can be scheduled in the future, this event
// does not confirm that the message has already been transmitted.
// TxAckEvent is the message sent when a downlink was acknowledged by the
// gateway for transmission. As a downlink can be scheduled in the future, this
// event does not confirm that the message has already been transmitted.
message TxAckEvent {
// Downlink ID.
uint32 downlink_id = 1;
// Downlink ID.
uint32 downlink_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// Downlink queue item ID (UUID).
string queue_item_id = 4;
// Downlink queue item ID (UUID).
string queue_item_id = 4;
// Downlink frame-counter.
uint32 f_cnt_down = 5;
// Downlink frame-counter.
uint32 f_cnt_down = 5;
// Gateway ID.
string gateway_id = 6;
// Gateway ID.
string gateway_id = 6;
// TX info.
gw.DownlinkTxInfo tx_info = 7;
// TX info.
gw.DownlinkTxInfo tx_info = 7;
}
// LogEvent is the message sent when a device-related log was sent.
message LogEvent {
// Timestamp.
google.protobuf.Timestamp time = 1;
// Timestamp.
google.protobuf.Timestamp time = 1;
// Device info.
DeviceInfo device_info = 2;
// Device info.
DeviceInfo device_info = 2;
// Log level.
LogLevel level = 3;
// Log level.
LogLevel level = 3;
// Log code.
LogCode code = 4;
// Log code.
LogCode code = 4;
// Description message.
string description = 5;
// Description message.
string description = 5;
// Context map.
map<string, string> context = 6;
// Context map.
map<string, string> context = 6;
}
// StatusEvent is the message sent when a device-status mac-command was sent
// by the device.
message StatusEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// The demodulation signal-to-noise ratio in dB for the last successfully
// received device-status request by the Network Server.
int32 margin = 5;
// The demodulation signal-to-noise ratio in dB for the last successfully
// received device-status request by the Network Server.
int32 margin = 5;
// Device is connected to an external power source.
bool external_power_source = 6;
// Device is connected to an external power source.
bool external_power_source = 6;
// Battery level is not available.
bool battery_level_unavailable = 7;
// Battery level is not available.
bool battery_level_unavailable = 7;
// Battery level.
float battery_level = 8;
// Battery level.
float battery_level = 8;
}
// LocationEvent is the message sent when a geolocation resolve was returned.
message LocationEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// Location.
common.Location location = 4;
// Location.
common.Location location = 4;
}
// IntegrationEvent is the message that can be sent by an integration.
// It allows for sending events which are provided by an external integration
// which are "not native" to ChirpStack.
message IntegrationEvent {
// Deduplication ID (UUID).
string deduplication_id = 1;
// Deduplication ID (UUID).
string deduplication_id = 1;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Timestamp.
google.protobuf.Timestamp time = 2;
// Device info.
DeviceInfo device_info = 3;
// Device info.
DeviceInfo device_info = 3;
// Integration name.
string integration_name = 4;
// Integration name.
string integration_name = 4;
// Event type.
string event_type = 5;
// Event type.
string event_type = 5;
// Struct containing the event object.
google.protobuf.Struct object = 6;
// Struct containing the event object.
google.protobuf.Struct object = 6;
}
// DownlinkCommand is the command to enqueue a downlink payload for the given
// device.
message DownlinkCommand {
// ID (UUID).
// If left blank, a random UUID will be generated.
string id = 1;
// ID (UUID).
// If left blank, a random UUID will be generated.
string id = 1;
// Device EUI (EUI64).
string dev_eui = 2;
// Device EUI (EUI64).
string dev_eui = 2;
// Confirmed.
bool confirmed = 3;
// Confirmed.
bool confirmed = 3;
// FPort (must be > 0).
uint32 f_port = 4;
// FPort (must be > 0).
uint32 f_port = 4;
// Data.
// Or use the json_object field when a codec has been configured.
bytes data = 5;
// Data.
// Or use the json_object field when a codec has been configured.
bytes data = 5;
// Only use this when a codec has been configured that can encode this
// object to bytes.
google.protobuf.Struct object = 6;
// Only use this when a codec has been configured that can encode this
// object to bytes.
google.protobuf.Struct object = 6;
}

View File

@ -7,272 +7,403 @@ import "chirpstack-api/gw/gw.proto";
import "google/protobuf/timestamp.proto";
message DeviceSession {
// Device EUI.
bytes dev_eui = 1;
// Device EUI.
bytes dev_eui = 1;
// Device address.
bytes dev_addr = 2;
// Device address.
bytes dev_addr = 2;
// Join EUI.
bytes join_eui = 3;
// Join EUI.
bytes join_eui = 3;
// LoRaWAN mac-version.
common.MacVersion mac_version = 4;
// LoRaWAN mac-version.
common.MacVersion mac_version = 4;
// FNwkSIntKey.
bytes f_nwk_s_int_key = 5;
// FNwkSIntKey.
bytes f_nwk_s_int_key = 5;
// SNwkSIntKey.
bytes s_nwk_s_int_key = 6;
// SNwkSIntKey.
bytes s_nwk_s_int_key = 6;
// NwkSEncKey.
bytes nwk_s_enc_key = 7;
// NwkSEncKey.
bytes nwk_s_enc_key = 7;
// AppSKey envelope.
common.KeyEnvelope app_s_key = 8;
// AppSKey envelope.
common.KeyEnvelope app_s_key = 8;
// Uplink frame-counter.
uint32 f_cnt_up = 9;
// Uplink frame-counter.
uint32 f_cnt_up = 9;
// Downlink frame-counter (ns).
uint32 n_f_cnt_down = 10;
// Downlink frame-counter (ns).
uint32 n_f_cnt_down = 10;
// Downlink frame-counter (as).
uint32 a_f_cnt_down = 11;
// Downlink frame-counter (as).
uint32 a_f_cnt_down = 11;
// Frame-counter holding the last confirmed downlink frame (n_f_cnt_down or a_f_cnt_down).
uint32 conf_f_cnt = 12;
// Frame-counter holding the last confirmed downlink frame (n_f_cnt_down or
// a_f_cnt_down).
uint32 conf_f_cnt = 12;
// Skip uplink frame-counter validation.
bool skip_f_cnt_check = 13;
// Skip uplink frame-counter validation.
bool skip_f_cnt_check = 13;
// RX1 delay.
uint32 rx1_delay = 14;
// RX1 delay.
uint32 rx1_delay = 14;
// RX1 data-rate offset.
uint32 rx1_dr_offset = 15;
// RX1 data-rate offset.
uint32 rx1_dr_offset = 15;
// RX2 data-rate.
uint32 rx2_dr = 16;
// RX2 data-rate.
uint32 rx2_dr = 16;
// RX2 frequency.
uint32 rx2_frequency = 17;
// RX2 frequency.
uint32 rx2_frequency = 17;
// Enabled uplink channels.
repeated uint32 enabled_uplink_channel_indices = 18;
// Enabled uplink channels.
repeated uint32 enabled_uplink_channel_indices = 18;
// Extra user-defined uplink channels.
map<uint32, DeviceSessionChannel> extra_uplink_channels = 19;
// Extra user-defined uplink channels.
map<uint32, DeviceSessionChannel> extra_uplink_channels = 19;
// Class-B ping-slot data-rate.
uint32 class_b_ping_slot_dr = 20;
// Class-B ping-slot data-rate.
uint32 class_b_ping_slot_dr = 20;
// Class-B ping-slot frequency.
uint32 class_b_ping_slot_freq = 21;
// Class-B ping-slot frequency.
uint32 class_b_ping_slot_freq = 21;
// Class-B ping-slot nb.
uint32 class_b_ping_slot_nb = 22;
// Class-B ping-slot nb.
uint32 class_b_ping_slot_nb = 22;
// Nb. transmissions.
uint32 nb_trans = 23;
// Nb. transmissions.
uint32 nb_trans = 23;
// TXPowerIndex which the node is using. The possible values are defined
// by the lorawan/band package and are region specific. By default it is
// assumed that the node is using TXPower 0. This value is controlled by
// the ADR engine.
uint32 tx_power_index = 24;
// TXPowerIndex which the node is using. The possible values are defined
// by the lorawan/band package and are region specific. By default it is
// assumed that the node is using TXPower 0. This value is controlled by
// the ADR engine.
uint32 tx_power_index = 24;
// DR defines the (last known) data-rate at which the node is operating.
// This value is controlled by the ADR engine.
uint32 dr = 25;
// DR defines the (last known) data-rate at which the node is operating.
// This value is controlled by the ADR engine.
uint32 dr = 25;
// ADR defines if the device has ADR enabled.
bool adr = 26;
// ADR defines if the device has ADR enabled.
bool adr = 26;
// MaxSupportedTXPowerIndex defines the maximum supported tx-power index
// by the node, or 0 when not set.
uint32 max_supported_tx_power_index = 27;
// MaxSupportedTXPowerIndex defines the maximum supported tx-power index
// by the node, or 0 when not set.
uint32 max_supported_tx_power_index = 27;
// MinSupportedTXPowerIndex defines the minimum supported tx-power index
// by the node (default 0).
uint32 min_supported_tx_power_index = 28;
// MinSupportedTXPowerIndex defines the minimum supported tx-power index
// by the node (default 0).
uint32 min_supported_tx_power_index = 28;
// Pending rejoin device-session contains a device-session which has not
// yet been activated by the device (by sending a first uplink).
DeviceSession pending_rejoin_device_session = 29;
// Pending rejoin device-session contains a device-session which has not
// yet been activated by the device (by sending a first uplink).
DeviceSession pending_rejoin_device_session = 29;
// Uplink history for ADR (last 20 uplink transmissions).
repeated UplinkAdrHistory uplink_adr_history = 30;
// Uplink history for ADR (last 20 uplink transmissions).
repeated UplinkAdrHistory uplink_adr_history = 30;
// Mac-command error count.
map<uint32, uint32> mac_command_error_count = 31;
// Mac-command error count.
map<uint32, uint32> mac_command_error_count = 31;
// Last device-status request.
google.protobuf.Timestamp last_device_status_request = 32;
// Last device-status request.
google.protobuf.Timestamp last_device_status_request = 32;
// RejoinRequestEnabled defines if the rejoin-request is enabled on the
// device.
bool rejoin_request_enabled = 33;
// RejoinRequestEnabled defines if the rejoin-request is enabled on the
// device.
bool rejoin_request_enabled = 33;
// RejoinRequestMaxCountN defines the 2^(C+4) uplink message interval for
// the rejoin-request.
uint32 rejoin_request_max_count_n = 34;
// RejoinRequestMaxCountN defines the 2^(C+4) uplink message interval for
// the rejoin-request.
uint32 rejoin_request_max_count_n = 34;
// RejoinRequestMaxTimeN defines the 2^(T+10) time interval (seconds)
// for the rejoin-request.
uint32 rejoin_request_max_time_n = 35;
// RejoinRequestMaxTimeN defines the 2^(T+10) time interval (seconds)
// for the rejoin-request.
uint32 rejoin_request_max_time_n = 35;
// Rejoin counter (RJCount0).
// This counter is reset to 0 after each successful join-accept.
uint32 rejoin_count_0 = 36;
// Rejoin counter (RJCount0).
// This counter is reset to 0 after each successful join-accept.
uint32 rejoin_count_0 = 36;
// Uplink dwell time.
bool uplink_dwell_time_400ms = 37;
// Uplink dwell time.
bool uplink_dwell_time_400ms = 37;
// Downlink dwell time.
bool downlink_dwell_time_400ms = 38;
// Downlink dwell time.
bool downlink_dwell_time_400ms = 38;
// Uplink max. EIRP index.
uint32 uplink_max_eirp_index = 39;
// Uplink max. EIRP index.
uint32 uplink_max_eirp_index = 39;
// Region configuration ID.
string region_config_id = 40;
// Region configuration ID.
string region_config_id = 40;
// Relay state.
Relay relay = 41;
}
message UplinkAdrHistory {
// Uplink frame-counter.
uint32 f_cnt = 1;
// Uplink frame-counter.
uint32 f_cnt = 1;
// Max SNR (of deduplicated frames received by one or multiple gateways).
float max_snr = 2;
// Max SNR (of deduplicated frames received by one or multiple gateways).
float max_snr = 2;
// Max RSSI.
int32 max_rssi = 5;
// Max RSSI.
int32 max_rssi = 5;
// TX Power (as known by the network-server).
uint32 tx_power_index = 3;
// TX Power (as known by the network-server).
uint32 tx_power_index = 3;
// Number of receiving gateways.
uint32 gateway_count = 4;
// Number of receiving gateways.
uint32 gateway_count = 4;
}
message Relay {
// Devices provisioned on the relay.
repeated RelayDevice devices = 1;
// Filter list.
repeated RelayFilter filters = 2;
// Relay is enabled.
bool enabled = 3;
// CAD periodicity.
uint32 cad_periodicity = 4;
// Default channel index.
uint32 default_channel_index = 5;
// Second channel freq.
uint32 second_channel_freq = 6;
// Second channel DR.
uint32 second_channel_dr = 7;
// Second channel ACK offset.
uint32 second_channel_ack_offset = 8;
// End-device activation mode.
uint32 ed_activation_mode = 9;
// End-device smart-enable level.
uint32 ed_smart_enable_level = 10;
// End-device back-off.
uint32 ed_back_off = 11;
// Join-request limit reload rate.
uint32 join_req_limit_reload_rate = 12;
// Notify limit reload rate.
uint32 notify_limit_reload_rate = 13;
// Global uplink limit reload rate.
uint32 global_uplink_limit_reload_rate = 14;
// Overall limit reload rate.
uint32 overall_limit_reload_rate = 15;
// Join-request limit bucket size.
uint32 join_req_limit_bucket_size = 16;
// Notify limit bucket size.
uint32 notify_limit_bucket_size = 17;
// Global uplink limit bucket size.
uint32 global_uplink_limit_bucket_size = 18;
// Overall limit bucket size.
uint32 overall_limit_bucket_size = 19;
// End-device must communicate through relay only.
// This is stored in the device-session as we need to validate on retrieving
// the device-session.
bool ed_relay_only = 20;
// End-device WFCnt.
// This holds the last known WFCnt value. ChirpStack will periodically read
// this value from the Relay.
uint32 w_f_cnt = 21;
}
message RelayDevice {
// Index (used for filter and uplink filters).
// This must be between 0 - 15.
uint32 index = 1;
// JoinEUI (EUI64).
bytes join_eui = 2;
// DevEUI (EUI64).
bytes dev_eui = 3;
// DevAddr.
bytes dev_addr = 4;
// RootWorSKey.
bytes root_wor_s_key = 5;
// Provisioned.
bool provisioned = 6;
// Uplink limit bucket size.
uint32 uplink_limit_bucket_size = 7;
// Uplink limit reload rate.
uint32 uplink_limit_reload_rate = 8;
// Timestamp of the last WFCnt request.
// Note that ChirpStack periodically requests the WFCnt from the relay.
google.protobuf.Timestamp w_f_cnt_last_request = 9;
}
message RelayFilter {
// Index.
// This must be between 0 - 15.
uint32 index = 1;
// Action.
// * 0: No Rule
// * 1: Forward
// * 2: Filter
uint32 action = 2;
// DevEUI (EUI64).
bytes dev_eui = 3;
// JoinEUI (EUI64).
bytes join_eui = 4;
// Provisioned.
bool provisioned = 5;
}
message DeviceSessionChannel {
// Frequency Hz.
uint32 frequency = 1;
// Frequency Hz.
uint32 frequency = 1;
// Min. data-rate.
uint32 min_dr = 2;
// Min. data-rate.
uint32 min_dr = 2;
// Max. data-rate.
uint32 max_dr = 3;
// Max. data-rate.
uint32 max_dr = 3;
}
message DeviceGatewayRxInfo {
// DevEUI (EUI64).
bytes dev_eui = 1;
// DevEUI (EUI64).
bytes dev_eui = 1;
// Data-rate.
uint32 dr = 2;
// Data-rate.
uint32 dr = 2;
// Gateway RxInfo elements.
repeated DeviceGatewayRxInfoItem items = 3;
// Gateway RxInfo elements.
repeated DeviceGatewayRxInfoItem items = 3;
}
message DeviceGatewayRxInfoItem {
// Gateway ID (EUI64).
bytes gateway_id = 1;
// Gateway ID (EUI64).
bytes gateway_id = 1;
// RSSI.
int32 rssi = 2;
// RSSI.
int32 rssi = 2;
// LoRa SNR.
float lora_snr = 3;
// LoRa SNR.
float lora_snr = 3;
// Antenna.
uint32 antenna = 4;
// Antenna.
uint32 antenna = 4;
// Board.
uint32 board = 5;
// Board.
uint32 board = 5;
// Context blob.
bytes context = 6;
// Context blob.
bytes context = 6;
// Gateway is private (uplink).
bool is_private_up = 7;
// Gateway is private (uplink).
bool is_private_up = 7;
// Gateway is private (downlink).
bool is_private_down = 8;
// Gateway is private (downlink).
bool is_private_down = 8;
// Tenant ID (UUID).
bytes tenant_id = 9;
// Tenant ID (UUID).
bytes tenant_id = 9;
}
message DownlinkFrame {
// Downlink ID.
uint32 downlink_id = 1;
// Downlink ID.
uint32 downlink_id = 1;
// DevEUI.
bytes dev_eui = 2;
// DevEUI.
bytes dev_eui = 2;
// Device queue item ID.
bytes device_queue_item_id = 3;
// Device queue item ID.
bytes device_queue_item_id = 3;
// Multicast Group ID.
bytes multicast_group_id = 4;
// Multicast Group ID.
bytes multicast_group_id = 4;
// Multicast queue item ID.
bytes multicast_group_queue_item_id = 5;
// Multicast queue item ID.
bytes multicast_group_queue_item_id = 5;
// Downlink frames.
gw.DownlinkFrame downlink_frame = 6;
// Downlink frames.
gw.DownlinkFrame downlink_frame = 6;
// Encrypted FOpts (LoRaWAN 1.1).
bool encrypted_fopts = 8;
// Encrypted FOpts (LoRaWAN 1.1).
bool encrypted_fopts = 8;
// Network session encryption key (for FOpts and FRMPayload mac-commands).
bytes nwk_s_enc_key = 9;
// Network session encryption key (for FOpts and FRMPayload mac-commands).
bytes nwk_s_enc_key = 9;
// NFCntDown (for decrypting mac-commands).
uint32 n_f_cnt_down = 10;
// NFCntDown (for decrypting mac-commands).
uint32 n_f_cnt_down = 10;
// AFCntDown (for decrypting FRMPayload in case of Relay).
uint32 a_f_cnt_down = 11;
// DevEUI of relayed device.
bytes dev_eui_relayed = 12;
}
message LoraCloudGeolocBuffer {
// Uplinks in buffer.
repeated LoraCloudGeolocBufferUplink uplinks = 1;
// Uplinks in buffer.
repeated LoraCloudGeolocBufferUplink uplinks = 1;
}
message LoraCloudGeolocBufferUplink {
// RxInfo set for a single uplink.
repeated gw.UplinkRxInfo rx_info = 1;
// RxInfo set for a single uplink.
repeated gw.UplinkRxInfo rx_info = 1;
}
message PassiveRoamingDeviceSession {
// Session ID (UUID).
// Unfortunately we can not use the DevEUI as unique identifier
// as the PRStartAns DevEUI field is optional.
bytes session_id = 1;
// Session ID (UUID).
// Unfortunately we can not use the DevEUI as unique identifier
// as the PRStartAns DevEUI field is optional.
bytes session_id = 1;
// NetID of the hNS.
bytes net_id = 2;
// DevAddr of the device.
bytes dev_addr = 3;
// NetID of the hNS.
bytes net_id = 2;
// DevEUI of the device (optional).
bytes dev_eui = 4;
// DevAddr of the device.
bytes dev_addr = 3;
// LoRaWAN 1.1.
bool lorawan_1_1 = 5;
// DevEUI of the device (optional).
bytes dev_eui = 4;
// LoRaWAN 1.0 NwkSKey / LoRaWAN 1.1 FNwkSIntKey.
bytes f_nwk_s_int_key = 6;
// LoRaWAN 1.1.
bool lorawan_1_1 = 5;
// Lifetime.
google.protobuf.Timestamp lifetime = 7;
// LoRaWAN 1.0 NwkSKey / LoRaWAN 1.1 FNwkSIntKey.
bytes f_nwk_s_int_key = 6;
// Uplink frame-counter.
uint32 f_cnt_up = 8;
// Lifetime.
google.protobuf.Timestamp lifetime = 7;
// Validate MIC.
bool validate_mic = 9;
// Uplink frame-counter.
uint32 f_cnt_up = 8;
// Validate MIC.
bool validate_mic = 9;
}

View File

@ -10,13 +10,15 @@ pip install chirpstack-api
## Usage
All messages, services, constants, etc. are auto-generated from the ChirpStack protobuf definitions. The result is that
this package structure matches that of the protobuf definitions.
All messages, services, constants, etc. are auto-generated from the ChirpStack
protobuf definitions. The result is that this package structure matches that
of the protobuf definitions.
The protobuf definitions can be found here: https://github.com/brocaar/chirpstack-api/tree/master/protobuf
The protobuf definitions can be found here:
[https://github.com/chirpstack/chirpstack/tree/master/api/proto](https://github.com/chirpstack/chirpstack/tree/master/api/proto)
## Links
* [`chirpstack-api` Python package page](https://pypi.org/project/chirpstack-api/)
* [ChirpStack documentation](https://www.chirpstack.io/)
* [ChirpStack Application Server API examples](https://www.chirpstack.io/application-server/api/python-examples/)
* [Code examples](https://www.chirpstack.io/docs/chirpstack/api/python-examples.html)

View File

@ -19,3 +19,5 @@ from .tenant_pb2_grpc import *
from .user_pb2 import *
from .user_pb2_grpc import *
from .request_log_pb2 import *
from .relay_pb2 import *
from .relay_pb2_grpc import *

File diff suppressed because one or more lines are too long

View File

@ -412,14 +412,18 @@ 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 IftttIntegration(_message.Message):
__slots__ = ["application_id", "key", "uplink_values"]
__slots__ = ["application_id", "arbitrary_json", "event_prefix", "key", "uplink_values"]
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
ARBITRARY_JSON_FIELD_NUMBER: _ClassVar[int]
EVENT_PREFIX_FIELD_NUMBER: _ClassVar[int]
KEY_FIELD_NUMBER: _ClassVar[int]
UPLINK_VALUES_FIELD_NUMBER: _ClassVar[int]
application_id: str
arbitrary_json: bool
event_prefix: str
key: str
uplink_values: _containers.RepeatedScalarFieldContainer[str]
def __init__(self, application_id: _Optional[str] = ..., key: _Optional[str] = ..., uplink_values: _Optional[_Iterable[str]] = ...) -> None: ...
def __init__(self, application_id: _Optional[str] = ..., key: _Optional[str] = ..., uplink_values: _Optional[_Iterable[str]] = ..., arbitrary_json: bool = ..., event_prefix: _Optional[str] = ...) -> None: ...
class InfluxDbIntegration(_message.Message):
__slots__ = ["application_id", "bucket", "db", "endpoint", "organization", "password", "precision", "retention_policy_name", "token", "username", "version"]
@ -496,7 +500,8 @@ class LoraCloudIntegration(_message.Message):
def __init__(self, application_id: _Optional[str] = ..., modem_geolocation_services: _Optional[_Union[LoraCloudModemGeolocationServices, _Mapping]] = ...) -> None: ...
class LoraCloudModemGeolocationServices(_message.Message):
__slots__ = ["geolocation_buffer_ttl", "geolocation_gnss", "geolocation_gnss_payload_field", "geolocation_gnss_use_rx_time", "geolocation_min_buffer_size", "geolocation_rssi", "geolocation_tdoa", "geolocation_wifi", "geolocation_wifi_payload_field", "gnss_port", "gnss_use_rx_time", "modem_enabled", "modem_port", "parse_tlv", "token"]
__slots__ = ["forward_f_ports", "geolocation_buffer_ttl", "geolocation_gnss", "geolocation_gnss_payload_field", "geolocation_gnss_use_rx_time", "geolocation_min_buffer_size", "geolocation_rssi", "geolocation_tdoa", "geolocation_wifi", "geolocation_wifi_payload_field", "gnss_use_gateway_location", "gnss_use_rx_time", "modem_enabled", "parse_tlv", "token"]
FORWARD_F_PORTS_FIELD_NUMBER: _ClassVar[int]
GEOLOCATION_BUFFER_TTL_FIELD_NUMBER: _ClassVar[int]
GEOLOCATION_GNSS_FIELD_NUMBER: _ClassVar[int]
GEOLOCATION_GNSS_PAYLOAD_FIELD_FIELD_NUMBER: _ClassVar[int]
@ -506,12 +511,12 @@ class LoraCloudModemGeolocationServices(_message.Message):
GEOLOCATION_TDOA_FIELD_NUMBER: _ClassVar[int]
GEOLOCATION_WIFI_FIELD_NUMBER: _ClassVar[int]
GEOLOCATION_WIFI_PAYLOAD_FIELD_FIELD_NUMBER: _ClassVar[int]
GNSS_PORT_FIELD_NUMBER: _ClassVar[int]
GNSS_USE_GATEWAY_LOCATION_FIELD_NUMBER: _ClassVar[int]
GNSS_USE_RX_TIME_FIELD_NUMBER: _ClassVar[int]
MODEM_ENABLED_FIELD_NUMBER: _ClassVar[int]
MODEM_PORT_FIELD_NUMBER: _ClassVar[int]
PARSE_TLV_FIELD_NUMBER: _ClassVar[int]
TOKEN_FIELD_NUMBER: _ClassVar[int]
forward_f_ports: _containers.RepeatedScalarFieldContainer[int]
geolocation_buffer_ttl: int
geolocation_gnss: bool
geolocation_gnss_payload_field: str
@ -521,13 +526,12 @@ class LoraCloudModemGeolocationServices(_message.Message):
geolocation_tdoa: bool
geolocation_wifi: bool
geolocation_wifi_payload_field: str
gnss_port: int
gnss_use_gateway_location: bool
gnss_use_rx_time: bool
modem_enabled: bool
modem_port: int
parse_tlv: bool
token: str
def __init__(self, token: _Optional[str] = ..., modem_enabled: bool = ..., modem_port: _Optional[int] = ..., gnss_port: _Optional[int] = ..., gnss_use_rx_time: 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: ...
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 MyDevicesIntegration(_message.Message):
__slots__ = ["application_id", "endpoint"]

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