From 5e4843f7ad133e9f28d3dc938cfb72eed70a9f27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20H=C3=A1jek?= Date: Thu, 7 Mar 2024 09:12:04 +0100 Subject: [PATCH] major: big refactor (#115) * major: big refactor * fix workflow * fix main.go * fix constants * update linter && fix violations * updates pt.2 * update * new styles * fix helps * update * fix lint * vpn added --------- Co-authored-by: Jan Hajek Co-authored-by: jan.hajek@zerops.io --- .github/workflows/main.yml | 2 +- .golangci.yaml | 78 + Makefile | 13 + cmd/.gitignore | 3 - cmd/main.go | 11 +- go.mod | 100 +- go.sum | 830 +- src/{utils => }/archiveClient/handler.go | 0 .../archiveClient/handler_findFilesByRules.go | 13 +- .../handler_findFilesByRules_test.go | 16 +- .../archiveClient/handler_findGitFiles.go | 7 +- .../archiveClient/handler_tarFile.go | 8 +- .../archiveClient/handler_tarFiles.go | 0 .../archiveClient/handler_tarFiles_test.go | 16 +- .../archiveClient/handler_utils.go | 2 +- .../test/var/www/dir/file2.1.txt | 0 .../test/var/www/dir/file2.2.txt | 0 .../test/var/www/dir/subDir/file3.1.txt | 0 .../test/var/www/dir/subDir/file3.2.txt | 0 .../var/www/dir/subDir/file3.3.symlink.txt | 0 .../archiveClient/test/var/www/file1.1.txt | 0 src/cliAction/bucket/s3/handler.go | 27 - src/cliAction/bucket/s3/handler_create.go | 49 - src/cliAction/bucket/s3/handler_delete.go | 46 - src/cliAction/bucket/zerops/handler.go | 38 - src/cliAction/bucket/zerops/handler_create.go | 71 - src/cliAction/bucket/zerops/handler_delete.go | 65 - src/cliAction/buildDeploy/handler.go | 48 - .../buildDeploy/handler_checkInputValues.go | 26 - .../buildDeploy/handler_createAppVersion.go | 29 - src/cliAction/buildDeploy/handler_deploy.go | 178 - .../buildDeploy/handler_packageUpload.go | 27 - src/cliAction/buildDeploy/handler_push.go | 127 - .../buildDeploy/handler_savePackage.go | 37 - .../importProjectService/dataParse.go | 34 - src/cliAction/importProjectService/handler.go | 35 - .../handler_getClientId.go | 16 - .../importProjectService/handler_import.go | 63 - .../importProjectService/handler_project.go | 30 - .../importProjectService/handler_service.go | 26 - .../importProjectService/yamlContent.go | 57 - src/cliAction/installDaemon/handler.go | 26 - src/cliAction/installDaemon/handler_run.go | 26 - src/cliAction/login/handler.go | 171 - .../login/handler_parseRestApiError.go | 62 - src/cliAction/removeDaemon/handler.go | 30 - src/cliAction/removeDaemon/handler_run.go | 42 - src/cliAction/serviceLogs/handler.go | 41 - .../serviceLogs/handler_getAppVersion.go | 72 - .../serviceLogs/handler_getContainerId.go | 72 - .../handler_getNameSourceContainerId.go | 46 - .../serviceLogs/handler_getServiceLogUrl.go | 46 - src/cliAction/serviceLogs/handler_run.go | 60 - src/cliAction/startStopDelete/handler.go | 50 - .../startStopDelete/handler_confirm.go | 45 - .../startStopDelete/handler_project.go | 42 - .../startStopDelete/handler_runCmd.go | 57 - .../startStopDelete/handler_service.go | 41 - src/cliAction/startVpn/handler.go | 42 - src/cliAction/startVpn/handler_run.go | 105 - src/cliAction/statusVpn/handler.go | 51 - src/cliAction/stopVpn/handler.go | 56 - src/cliStorage/handler.go | 14 +- src/cmd/args.go | 41 - src/cmd/bucket.go | 27 - src/cmd/bucketS3.go | 75 - src/cmd/bucketS3Create.go | 71 - src/cmd/bucketS3Delete.go | 65 - src/cmd/bucketZerops.go | 15 - src/cmd/bucketZeropsCreate.go | 81 - src/cmd/bucketZeropsDelete.go | 74 - src/cmd/daemon.go | 23 - src/cmd/daemonInstall.go | 37 - src/cmd/daemonRemove.go | 53 - src/cmd/daemonRun.go | 84 - src/cmd/daemonRun_other.go | 34 - src/cmd/daemonRun_windows.go | 84 - src/cmd/deploy.go | 92 - src/cmd/di.go | 90 - src/cmd/init.go | 79 - src/cmd/log.go | 20 - src/cmd/logShow.go | 65 - src/cmd/login.go | 144 +- src/cmd/project.go | 19 +- src/cmd/projectDelete.go | 94 +- src/cmd/projectImport.go | 128 +- src/cmd/projectList.go | 24 + src/cmd/projectServiceImport.go | 73 + src/cmd/projectStart.go | 88 +- src/cmd/projectStop.go | 87 +- src/cmd/push.go | 102 - src/cmd/regionList.go | 63 - src/cmd/resources/zerops_yml.tmpl | 28 - src/cmd/root.go | 70 +- src/cmd/scope.go | 15 + src/cmd/scope/scope.go | 11 + src/cmd/scope/scopeProject.go | 88 + src/cmd/scope/scopeService.go | 72 + src/cmd/scopeProject.go | 69 + src/cmd/scopeReset.go | 31 + src/cmd/service.go | 20 +- src/cmd/serviceDelete.go | 97 +- src/cmd/serviceDeploy.go | 169 + src/cmd/serviceImport.go | 75 - src/cmd/serviceList.go | 27 + src/cmd/serviceLog.go | 138 +- src/cmd/servicePush.go | 175 + src/cmd/servicePushDeployShared.go | 151 + src/cmd/serviceStart.go | 88 +- src/cmd/serviceStop.go | 92 +- src/cmd/status.go | 15 + src/cmd/statusInfo.go | 55 + src/cmd/statusShowDebugLogs.go | 77 + src/cmd/version.go | 22 +- src/cmd/vpn.go | 23 +- src/cmd/vpnConnect.go | 161 + src/cmd/vpnDisconnect.go | 35 + src/cmd/vpnStart.go | 124 - src/cmd/vpnStatus.go | 38 - src/cmd/vpnStop.go | 38 - src/cmdBuilder/cmd.go | 167 + src/cmdBuilder/cmdBuilder.go | 13 + src/cmdBuilder/cmdBuilderBuildCobraCmd.go | 74 + src/cmdBuilder/cmdBuilderCreateRunFunc.go | 171 + .../cmdBuilderCreateRunFunc_test.go | 179 + src/cmdBuilder/cmdBuilderExecuteRootCmd.go | 210 + src/{utils => }/cmdRunner/run.go | 27 +- src/cmdRunner/run_test.go | 18 + src/constants/darwin.go | 36 +- src/constants/dns.go | 6 - src/constants/general.go | 3 - src/constants/linux.go | 36 +- src/constants/params.go | 26 - src/constants/projectServiceActions.go | 14 - src/constants/windows.go | 38 +- src/constants/zerops.go | 108 + src/daemonInstaller/daemon.go | 15 - src/daemonInstaller/handler.go | 56 - src/daemonInstaller/handler_darwin.go | 200 - src/daemonInstaller/handler_linux.go | 21 - src/daemonInstaller/handler_linux_systemd.go | 184 - src/daemonInstaller/handler_windows.go | 163 - .../templates/systemd.service.tmpl | 31 - src/daemonServer/handler.go | 111 - src/daemonServer/handler_startVpn.go | 27 - src/daemonServer/handler_statusVpn.go | 11 - src/daemonServer/handler_stopVpn.go | 14 - src/daemonStorage/handler.go | 46 - src/entity/appVersion.go | 36 + src/entity/container.go | 19 + src/entity/org.go | 13 + src/entity/project.go | 15 + src/entity/repository/appVersion.go | 112 + src/entity/repository/container.go | 60 + src/entity/repository/org.go | 39 + src/entity/repository/project.go | 87 + src/entity/repository/service.go | 121 + src/entity/service.go | 17 + src/entity/vpnKey.go | 13 + src/errorsx/checker.go | 96 + src/errorsx/userError.go | 45 + src/flagParams/handler.go | 137 + src/{utils => }/httpClient/handler.go | 35 +- src/i18n/en.go | 498 +- src/i18n/i18n.go | 327 + src/{utils => }/logger/handler.go | 62 +- src/{utils => }/logger/hooks.go | 29 +- src/{utils => }/logger/interface.go | 0 src/metaError/errors.go | 32 - src/nettools/pickIP.go | 19 - src/nettools/ping.go | 73 - src/nettools/read.go | 24 - src/prolongVpn/prolong.go | 110 - src/proto/daemon/build-pb | 14 - src/proto/daemon/build-pb-generate.go | 3 - src/proto/daemon/client.go | 18 - src/proto/daemon/client_address_darwin.go | 12 - src/proto/daemon/client_address_linux.go | 12 - src/proto/daemon/client_address_windows.go | 12 - src/proto/daemon/zeropsDaemonProtocol.pb.go | 546 - src/proto/daemon/zeropsDaemonProtocol.proto | 45 - .../daemon/zeropsDaemonProtocol_grpc.pb.go | 177 - src/proto/errors.go | 140 - src/proto/unary/interceptor.go | 40 - src/proto/vpnproxy/build-pb | 13 - src/proto/vpnproxy/build-pb-generate.go | 3 - src/proto/vpnproxy/client.go | 25 - src/proto/vpnproxy/protocol_extra.go | 60 - src/proto/vpnproxy/zeropsVpnProtocol.pb.go | 1012 - src/proto/vpnproxy/zeropsVpnProtocol.proto | 70 - src/proto/zBusinessZeropsApiProtocol/build-pb | 14 - .../build-pb-generate.go | 3 - .../zBusinessZeropsApiProtocol/client.go | 100 - .../protocol_extra.go | 31 - .../zeropsApiProtocol.pb.go | 17302 ---------------- .../zeropsApiProtocol.proto | 1662 -- .../zeropsApiProtocol_grpc.pb.go | 755 - src/region/config.go | 1 - src/region/region.go | 90 +- src/{cliAction => }/serviceLogs/constants.go | 2 - src/serviceLogs/handler.go | 39 + .../serviceLogs/handler_checkInputValues.go | 20 +- .../serviceLogs/handler_formatByRfc.go | 9 +- .../serviceLogs/handler_formatByTemplate.go | 5 +- .../handler_formatByTemplate_test.go | 0 .../serviceLogs/handler_formatLogs.go | 9 +- .../serviceLogs/handler_getLogs.go | 4 +- src/serviceLogs/handler_getServiceLogUrl.go | 35 + .../serviceLogs/handler_printLogs.go | 20 +- src/serviceLogs/handler_run.go | 19 + src/{cliAction => }/serviceLogs/handler_ws.go | 36 +- src/{utils => storage}/exists.go | 2 +- src/{utils => }/storage/handler.go | 41 +- src/{utils => }/storage/handler_test.go | 19 +- src/support/support.go | 2 +- src/utils/cmdRunner/run_test.go | 22 - src/utils/params/handler.go | 178 - src/utils/processChecker/checkMultiple.go | 87 - src/utils/processChecker/checkProcess.go | 45 - src/utils/projectService/getClientId.go | 38 - src/utils/projectService/getProjectById.go | 40 - src/utils/projectService/getProjectId.go | 67 - src/utils/projectService/getService.go | 41 - src/utils/rw.go | 84 - src/utils/sdkConfig/handler.go | 6 - src/utils/vpnStatus.go | 31 - src/{utils => }/uuid/uuid.go | 4 +- src/uxBlock/blocks.go | 62 + src/uxBlock/logs.go | 22 + src/uxBlock/mocks/blocks.go | 161 + src/uxBlock/prompt.go | 118 + src/uxBlock/select.go | 188 + src/uxBlock/showcase/main.go | 168 + src/uxBlock/showcase/zerops.log | 54 + src/uxBlock/spinner.go | 178 + src/uxBlock/styles/helpers.go | 47 + src/uxBlock/styles/line.go | 50 + src/uxBlock/styles/styles.go | 186 + src/uxBlock/table.go | 132 + src/uxHelpers/org.go | 67 + src/uxHelpers/project.go | 85 + src/uxHelpers/prompt.go | 24 + src/uxHelpers/service.go | 82 + src/uxHelpers/spinner.go | 104 + src/vpn/cleanVpn_darwin.go | 31 - src/vpn/cleanVpn_linux.go | 30 - src/vpn/cleanVpn_windows.go | 39 - src/vpn/commands.go | 76 - src/vpn/dnsClean.go | 44 - src/vpn/dnsCleanNetworkSetup.go | 21 - src/vpn/dnsDetect.go | 9 - src/vpn/dnsDetect_darwin.go | 17 - src/vpn/dnsDetect_linux.go | 88 - src/vpn/dnsDetect_windows.go | 12 - src/vpn/dnsIsAlive.go | 25 - src/vpn/handler.go | 36 - src/vpn/handler_stopVpn.go | 9 - src/vpn/isVpnTunnelAlive.go | 32 - src/vpn/public_startVpn.go | 33 - src/vpn/public_statusVpn.go | 66 - src/vpn/reloadVpn.go | 60 - src/vpn/setDns.go | 62 - src/vpn/setDnsNetworksetup.go | 40 - src/vpn/setVpn_darwin.go | 119 - src/vpn/setVpn_linux.go | 123 - src/vpn/setVpn_windows.go | 88 - src/vpn/startVpn.go | 226 - src/vpn/stopVpn.go | 31 - src/yamlReader/readYaml.go | 54 + src/zeropsRestApiClient/handler.go | 24 + .../handler_get_projects_by_client.go | 98 + .../handler_get_service_stacks_by_project.go | 105 + tools/gomodrun.go | 5 +- tools/install.sh | 28 +- 274 files changed, 6710 insertions(+), 30999 deletions(-) create mode 100644 Makefile delete mode 100644 cmd/.gitignore rename src/{utils => }/archiveClient/handler.go (100%) rename src/{utils => }/archiveClient/handler_findFilesByRules.go (78%) rename src/{utils => }/archiveClient/handler_findFilesByRules_test.go (92%) rename src/{utils => }/archiveClient/handler_findGitFiles.go (95%) rename src/{utils => }/archiveClient/handler_tarFile.go (84%) rename src/{utils => }/archiveClient/handler_tarFiles.go (100%) rename src/{utils => }/archiveClient/handler_tarFiles_test.go (67%) rename src/{utils => }/archiveClient/handler_utils.go (93%) rename src/{utils => }/archiveClient/test/var/www/dir/file2.1.txt (100%) rename src/{utils => }/archiveClient/test/var/www/dir/file2.2.txt (100%) rename src/{utils => }/archiveClient/test/var/www/dir/subDir/file3.1.txt (100%) rename src/{utils => }/archiveClient/test/var/www/dir/subDir/file3.2.txt (100%) rename src/{utils => }/archiveClient/test/var/www/dir/subDir/file3.3.symlink.txt (100%) rename src/{utils => }/archiveClient/test/var/www/file1.1.txt (100%) delete mode 100644 src/cliAction/bucket/s3/handler.go delete mode 100644 src/cliAction/bucket/s3/handler_create.go delete mode 100644 src/cliAction/bucket/s3/handler_delete.go delete mode 100644 src/cliAction/bucket/zerops/handler.go delete mode 100644 src/cliAction/bucket/zerops/handler_create.go delete mode 100644 src/cliAction/bucket/zerops/handler_delete.go delete mode 100644 src/cliAction/buildDeploy/handler.go delete mode 100644 src/cliAction/buildDeploy/handler_checkInputValues.go delete mode 100644 src/cliAction/buildDeploy/handler_createAppVersion.go delete mode 100644 src/cliAction/buildDeploy/handler_deploy.go delete mode 100644 src/cliAction/buildDeploy/handler_packageUpload.go delete mode 100644 src/cliAction/buildDeploy/handler_push.go delete mode 100644 src/cliAction/buildDeploy/handler_savePackage.go delete mode 100644 src/cliAction/importProjectService/dataParse.go delete mode 100644 src/cliAction/importProjectService/handler.go delete mode 100644 src/cliAction/importProjectService/handler_getClientId.go delete mode 100644 src/cliAction/importProjectService/handler_import.go delete mode 100644 src/cliAction/importProjectService/handler_project.go delete mode 100644 src/cliAction/importProjectService/handler_service.go delete mode 100644 src/cliAction/importProjectService/yamlContent.go delete mode 100644 src/cliAction/installDaemon/handler.go delete mode 100644 src/cliAction/installDaemon/handler_run.go delete mode 100644 src/cliAction/login/handler.go delete mode 100644 src/cliAction/login/handler_parseRestApiError.go delete mode 100644 src/cliAction/removeDaemon/handler.go delete mode 100644 src/cliAction/removeDaemon/handler_run.go delete mode 100644 src/cliAction/serviceLogs/handler.go delete mode 100644 src/cliAction/serviceLogs/handler_getAppVersion.go delete mode 100644 src/cliAction/serviceLogs/handler_getContainerId.go delete mode 100644 src/cliAction/serviceLogs/handler_getNameSourceContainerId.go delete mode 100644 src/cliAction/serviceLogs/handler_getServiceLogUrl.go delete mode 100644 src/cliAction/serviceLogs/handler_run.go delete mode 100644 src/cliAction/startStopDelete/handler.go delete mode 100644 src/cliAction/startStopDelete/handler_confirm.go delete mode 100644 src/cliAction/startStopDelete/handler_project.go delete mode 100644 src/cliAction/startStopDelete/handler_runCmd.go delete mode 100644 src/cliAction/startStopDelete/handler_service.go delete mode 100644 src/cliAction/startVpn/handler.go delete mode 100644 src/cliAction/startVpn/handler_run.go delete mode 100644 src/cliAction/statusVpn/handler.go delete mode 100644 src/cliAction/stopVpn/handler.go delete mode 100644 src/cmd/args.go delete mode 100644 src/cmd/bucket.go delete mode 100644 src/cmd/bucketS3.go delete mode 100644 src/cmd/bucketS3Create.go delete mode 100644 src/cmd/bucketS3Delete.go delete mode 100644 src/cmd/bucketZerops.go delete mode 100644 src/cmd/bucketZeropsCreate.go delete mode 100644 src/cmd/bucketZeropsDelete.go delete mode 100644 src/cmd/daemon.go delete mode 100644 src/cmd/daemonInstall.go delete mode 100644 src/cmd/daemonRemove.go delete mode 100644 src/cmd/daemonRun.go delete mode 100644 src/cmd/daemonRun_other.go delete mode 100644 src/cmd/daemonRun_windows.go delete mode 100644 src/cmd/deploy.go delete mode 100644 src/cmd/di.go delete mode 100644 src/cmd/init.go delete mode 100644 src/cmd/log.go delete mode 100644 src/cmd/logShow.go create mode 100644 src/cmd/projectList.go create mode 100644 src/cmd/projectServiceImport.go delete mode 100644 src/cmd/push.go delete mode 100644 src/cmd/regionList.go delete mode 100644 src/cmd/resources/zerops_yml.tmpl create mode 100644 src/cmd/scope.go create mode 100644 src/cmd/scope/scope.go create mode 100644 src/cmd/scope/scopeProject.go create mode 100644 src/cmd/scope/scopeService.go create mode 100644 src/cmd/scopeProject.go create mode 100644 src/cmd/scopeReset.go create mode 100644 src/cmd/serviceDeploy.go delete mode 100644 src/cmd/serviceImport.go create mode 100644 src/cmd/serviceList.go create mode 100644 src/cmd/servicePush.go create mode 100644 src/cmd/servicePushDeployShared.go create mode 100644 src/cmd/status.go create mode 100644 src/cmd/statusInfo.go create mode 100644 src/cmd/statusShowDebugLogs.go create mode 100644 src/cmd/vpnConnect.go create mode 100644 src/cmd/vpnDisconnect.go delete mode 100644 src/cmd/vpnStart.go delete mode 100644 src/cmd/vpnStatus.go delete mode 100644 src/cmd/vpnStop.go create mode 100644 src/cmdBuilder/cmd.go create mode 100644 src/cmdBuilder/cmdBuilder.go create mode 100644 src/cmdBuilder/cmdBuilderBuildCobraCmd.go create mode 100644 src/cmdBuilder/cmdBuilderCreateRunFunc.go create mode 100644 src/cmdBuilder/cmdBuilderCreateRunFunc_test.go create mode 100644 src/cmdBuilder/cmdBuilderExecuteRootCmd.go rename src/{utils => }/cmdRunner/run.go (61%) create mode 100644 src/cmdRunner/run_test.go delete mode 100644 src/constants/dns.go delete mode 100644 src/constants/general.go delete mode 100644 src/constants/params.go delete mode 100644 src/constants/projectServiceActions.go create mode 100644 src/constants/zerops.go delete mode 100644 src/daemonInstaller/daemon.go delete mode 100644 src/daemonInstaller/handler.go delete mode 100644 src/daemonInstaller/handler_darwin.go delete mode 100644 src/daemonInstaller/handler_linux.go delete mode 100644 src/daemonInstaller/handler_linux_systemd.go delete mode 100644 src/daemonInstaller/handler_windows.go delete mode 100644 src/daemonInstaller/templates/systemd.service.tmpl delete mode 100644 src/daemonServer/handler.go delete mode 100644 src/daemonServer/handler_startVpn.go delete mode 100644 src/daemonServer/handler_statusVpn.go delete mode 100644 src/daemonServer/handler_stopVpn.go delete mode 100644 src/daemonStorage/handler.go create mode 100644 src/entity/appVersion.go create mode 100644 src/entity/container.go create mode 100644 src/entity/org.go create mode 100644 src/entity/project.go create mode 100644 src/entity/repository/appVersion.go create mode 100644 src/entity/repository/container.go create mode 100644 src/entity/repository/org.go create mode 100644 src/entity/repository/project.go create mode 100644 src/entity/repository/service.go create mode 100644 src/entity/service.go create mode 100644 src/entity/vpnKey.go create mode 100644 src/errorsx/checker.go create mode 100644 src/errorsx/userError.go create mode 100644 src/flagParams/handler.go rename src/{utils => }/httpClient/handler.go (54%) create mode 100644 src/i18n/i18n.go rename src/{utils => }/logger/handler.go (50%) rename src/{utils => }/logger/hooks.go (66%) rename src/{utils => }/logger/interface.go (100%) delete mode 100644 src/metaError/errors.go delete mode 100644 src/nettools/pickIP.go delete mode 100644 src/nettools/ping.go delete mode 100644 src/nettools/read.go delete mode 100644 src/prolongVpn/prolong.go delete mode 100755 src/proto/daemon/build-pb delete mode 100644 src/proto/daemon/build-pb-generate.go delete mode 100644 src/proto/daemon/client.go delete mode 100644 src/proto/daemon/client_address_darwin.go delete mode 100644 src/proto/daemon/client_address_linux.go delete mode 100644 src/proto/daemon/client_address_windows.go delete mode 100644 src/proto/daemon/zeropsDaemonProtocol.pb.go delete mode 100644 src/proto/daemon/zeropsDaemonProtocol.proto delete mode 100644 src/proto/daemon/zeropsDaemonProtocol_grpc.pb.go delete mode 100644 src/proto/errors.go delete mode 100644 src/proto/unary/interceptor.go delete mode 100755 src/proto/vpnproxy/build-pb delete mode 100644 src/proto/vpnproxy/build-pb-generate.go delete mode 100644 src/proto/vpnproxy/client.go delete mode 100644 src/proto/vpnproxy/protocol_extra.go delete mode 100644 src/proto/vpnproxy/zeropsVpnProtocol.pb.go delete mode 100644 src/proto/vpnproxy/zeropsVpnProtocol.proto delete mode 100755 src/proto/zBusinessZeropsApiProtocol/build-pb delete mode 100644 src/proto/zBusinessZeropsApiProtocol/build-pb-generate.go delete mode 100644 src/proto/zBusinessZeropsApiProtocol/client.go delete mode 100644 src/proto/zBusinessZeropsApiProtocol/protocol_extra.go delete mode 100644 src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol.pb.go delete mode 100644 src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol.proto delete mode 100644 src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol_grpc.pb.go delete mode 100644 src/region/config.go rename src/{cliAction => }/serviceLogs/constants.go (83%) create mode 100644 src/serviceLogs/handler.go rename src/{cliAction => }/serviceLogs/handler_checkInputValues.go (78%) rename src/{cliAction => }/serviceLogs/handler_formatByRfc.go (92%) rename src/{cliAction => }/serviceLogs/handler_formatByTemplate.go (88%) rename src/{cliAction => }/serviceLogs/handler_formatByTemplate_test.go (100%) rename src/{cliAction => }/serviceLogs/handler_formatLogs.go (91%) rename src/{cliAction => }/serviceLogs/handler_getLogs.go (97%) create mode 100644 src/serviceLogs/handler_getServiceLogUrl.go rename src/{cliAction => }/serviceLogs/handler_printLogs.go (59%) create mode 100644 src/serviceLogs/handler_run.go rename src/{cliAction => }/serviceLogs/handler_ws.go (74%) rename src/{utils => storage}/exists.go (92%) rename src/{utils => }/storage/handler.go (63%) rename src/{utils => }/storage/handler_test.go (60%) delete mode 100644 src/utils/cmdRunner/run_test.go delete mode 100644 src/utils/params/handler.go delete mode 100644 src/utils/processChecker/checkMultiple.go delete mode 100644 src/utils/processChecker/checkProcess.go delete mode 100644 src/utils/projectService/getClientId.go delete mode 100644 src/utils/projectService/getProjectById.go delete mode 100644 src/utils/projectService/getProjectId.go delete mode 100644 src/utils/projectService/getService.go delete mode 100644 src/utils/rw.go delete mode 100644 src/utils/sdkConfig/handler.go delete mode 100644 src/utils/vpnStatus.go rename src/{utils => }/uuid/uuid.go (82%) create mode 100644 src/uxBlock/blocks.go create mode 100644 src/uxBlock/logs.go create mode 100644 src/uxBlock/mocks/blocks.go create mode 100644 src/uxBlock/prompt.go create mode 100644 src/uxBlock/select.go create mode 100644 src/uxBlock/showcase/main.go create mode 100755 src/uxBlock/showcase/zerops.log create mode 100644 src/uxBlock/spinner.go create mode 100644 src/uxBlock/styles/helpers.go create mode 100644 src/uxBlock/styles/line.go create mode 100644 src/uxBlock/styles/styles.go create mode 100644 src/uxBlock/table.go create mode 100644 src/uxHelpers/org.go create mode 100644 src/uxHelpers/project.go create mode 100644 src/uxHelpers/prompt.go create mode 100644 src/uxHelpers/service.go create mode 100644 src/uxHelpers/spinner.go delete mode 100644 src/vpn/cleanVpn_darwin.go delete mode 100644 src/vpn/cleanVpn_linux.go delete mode 100644 src/vpn/cleanVpn_windows.go delete mode 100644 src/vpn/commands.go delete mode 100644 src/vpn/dnsClean.go delete mode 100644 src/vpn/dnsCleanNetworkSetup.go delete mode 100644 src/vpn/dnsDetect.go delete mode 100644 src/vpn/dnsDetect_darwin.go delete mode 100644 src/vpn/dnsDetect_linux.go delete mode 100644 src/vpn/dnsDetect_windows.go delete mode 100644 src/vpn/dnsIsAlive.go delete mode 100644 src/vpn/handler.go delete mode 100644 src/vpn/handler_stopVpn.go delete mode 100644 src/vpn/isVpnTunnelAlive.go delete mode 100644 src/vpn/public_startVpn.go delete mode 100644 src/vpn/public_statusVpn.go delete mode 100644 src/vpn/reloadVpn.go delete mode 100644 src/vpn/setDns.go delete mode 100644 src/vpn/setDnsNetworksetup.go delete mode 100644 src/vpn/setVpn_darwin.go delete mode 100644 src/vpn/setVpn_linux.go delete mode 100644 src/vpn/setVpn_windows.go delete mode 100644 src/vpn/startVpn.go delete mode 100644 src/vpn/stopVpn.go create mode 100644 src/yamlReader/readYaml.go create mode 100644 src/zeropsRestApiClient/handler.go create mode 100644 src/zeropsRestApiClient/handler_get_projects_by_client.go create mode 100644 src/zeropsRestApiClient/handler_get_service_stacks_by_project.go diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 37594b50..78e24f4d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -46,7 +46,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v3 with: - go-version: ~1.18 + go-version: ~1.21 id: go - name: Check out code into the Go module directory diff --git a/.golangci.yaml b/.golangci.yaml index 72a83ff9..75c0664a 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -29,6 +29,84 @@ linters: - godox - rowserrcheck - prealloc + - asasalint + - asciicheck + - bidichk + - bodyclose + - containedctx + - contextcheck + - deadcode + - decorder + - dogsled + - dupword + - durationcheck + - errcheck + - errchkjson + - errname + - errorlint + - execinquery + - exhaustive + - exportloopref + - forcetypeassert + - ginkgolinter + - gocheckcompilerdirectives + - gochecksumtype + - gocritic + - gocyclo + - godox + - gofmt + - goheader + - goimports + - gomoddirectives + - gomodguard + - goprintffuncname + - gosec + - gosimple + - gosmopolitan + - govet + - grouper + - ifshort + - importas + - ineffassign + - interfacer + - loggercheck + - maintidx + - makezero + - mirror + - misspell + - musttag + - nakedret + - nilerr + - noctx + - nosprintfhostport + - perfsprint + - prealloc + - predeclared + - promlinter + - protogetter + - reassign + - rowserrcheck + - scopelint + - sloglint + - sqlclosecheck + - staticcheck + - structcheck + - tagalign + - tagliatelle + - tenv + - testableexamples + - testifylint + - thelper + - tparallel + - typecheck + - unconvert + - unparam + - unused + - usestdlibvars + - varcheck + - wastedassign + - whitespace + - zerologlint disable-all: true fast: false diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..9c52e7e5 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +## help show this help +.PHONY: help + +help: + @printf "possible values: test, lint" + +test: + go test -v ./cmd/... ./src/... + +lint: + GOOS=darwin GOARCH=arm64 gomodrun golangci-lint run ./cmd/... ./src/... --verbose + GOOS=linux GOARCH=amd64 gomodrun golangci-lint run ./cmd/... ./src/... --verbose + GOOS=windows GOARCH=amd64 gomodrun golangci-lint run ./cmd/... ./src/... --verbose \ No newline at end of file diff --git a/cmd/.gitignore b/cmd/.gitignore deleted file mode 100644 index 08c98288..00000000 --- a/cmd/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!.gitignore -!main.go diff --git a/cmd/main.go b/cmd/main.go index 2f396aab..9879f005 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -3,20 +3,11 @@ package main import ( "os" - "github.com/zeropsio/zcli/src/metaError" - "github.com/zeropsio/zcli/src/cmd" ) -var ( - Token string -) - func main() { - cmd.BuiltinToken = Token - err := cmd.ExecuteCmd() - if err != nil { - metaError.Print(err) + if cmd.ExecuteCmd() != nil { os.Exit(1) } } diff --git a/go.mod b/go.mod index 3305c737..b6fc7716 100644 --- a/go.mod +++ b/go.mod @@ -1,67 +1,61 @@ module github.com/zeropsio/zcli -go 1.18 +go 1.21 + +require github.com/zeropsio/zerops-go v1.0.7 require ( - github.com/aws/aws-sdk-go v1.44.77 - github.com/briandowns/spinner v1.18.1 - github.com/ghodss/yaml v1.0.0 - github.com/golang/protobuf v1.5.2 - github.com/gorilla/websocket v1.5.0 - github.com/judwhite/go-svc v1.2.1 - github.com/lxc/lxd v0.0.0-20220922224603-c76bc42c6393 - github.com/onsi/gomega v1.10.1 - github.com/peterh/liner v1.2.2 - github.com/satori/go.uuid v1.2.0 - github.com/sirupsen/logrus v1.9.0 - github.com/spf13/cobra v1.5.0 - github.com/spf13/viper v1.13.0 - github.com/zeropsio/zerops-go v1.0.4 - golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 - golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 - golang.org/x/text v0.3.7 - golang.zx2c4.com/wireguard/wgctrl v0.0.0-20220504211119-3d4a969bb56b - google.golang.org/grpc v1.49.0 - google.golang.org/grpc/security/advancedtls v0.0.0-20220516211522-d9b952b17060 - google.golang.org/protobuf v1.28.1 + github.com/charmbracelet/bubbles v0.18.0 + github.com/charmbracelet/bubbletea v0.25.0 + github.com/charmbracelet/lipgloss v0.9.1 + github.com/golang/mock v1.6.0 + github.com/google/uuid v1.6.0 + github.com/gorilla/websocket v1.5.1 + github.com/mattn/go-isatty v0.0.20 + github.com/pkg/errors v0.9.1 + github.com/sirupsen/logrus v1.9.3 + github.com/spf13/cobra v1.8.0 + github.com/spf13/viper v1.18.2 + github.com/stretchr/testify v1.8.4 + golang.org/x/term v0.17.0 + golang.org/x/text v0.14.0 + golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6 + gopkg.in/yaml.v3 v3.0.1 ) require ( - cloud.google.com/go/compute v1.6.1 // indirect - github.com/fatih/color v1.13.0 // indirect - github.com/fsnotify/fsnotify v1.5.4 // indirect - github.com/google/go-cmp v0.5.8 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/containerd/console v1.0.4 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/josharian/native v1.0.0 // indirect - github.com/magiconair/properties v1.8.6 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect - github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/mdlayher/genetlink v1.2.0 // indirect - github.com/mdlayher/netlink v1.6.0 // indirect - github.com/mdlayher/socket v0.2.3 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mattn/go-localereader v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.5 // indirect - github.com/rivo/uniseg v0.4.2 // indirect + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/muesli/reflow v0.3.0 // indirect + github.com/muesli/termenv v0.15.2 // indirect + github.com/pelletier/go-toml/v2 v2.1.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/shopspring/decimal v1.3.1 // indirect - github.com/spf13/afero v1.9.2 // indirect - github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/subosito/gotenv v1.4.1 // indirect - golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 // indirect - golang.org/x/net v0.0.0-20220921203646-d300de134e69 // indirect - golang.org/x/sync v0.0.0-20220907140024-f12130a52804 // indirect - golang.org/x/term v0.0.0-20220919170432-7a66f970e087 // indirect - golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect - golang.zx2c4.com/wireguard v0.0.0-20220407013110-ef5c587f782d // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220921223823-23cae91e6737 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/crypto v0.19.0 // indirect + golang.org/x/exp v0.0.0-20240213143201-ec583247a57a // indirect + golang.org/x/net v0.21.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.17.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index b697af8a..7c90a806 100644 --- a/go.sum +++ b/go.sum @@ -1,785 +1,157 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.63.0/go.mod h1:GmezbQc7T2snqkEXWfZ0sy0VfkB/ivI2DdtJL2DEmlg= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1 h1:2sMmt8prCn7DPaG4Pmh0N3Inmc8cT8ae5k1M6VJ9Wqc= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aws/aws-sdk-go v1.44.77 h1:m5rTfdv04/swD+vTuS2zn4NEwKX3yEJPMhiVCFDL/mU= -github.com/aws/aws-sdk-go v1.44.77/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/briandowns/spinner v1.18.1 h1:yhQmQtM1zsqFsouh09Bk/jCjd50pC3EOGsh28gLVvwY= -github.com/briandowns/spinner v1.18.1/go.mod h1:mQak9GHqbspjC/5iUx3qMlIho8xBS/ppAL/hX5SmPJU= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/charmbracelet/bubbles v0.18.0 h1:PYv1A036luoBGroX6VWjQIE9Syf2Wby2oOl/39KLfy0= +github.com/charmbracelet/bubbles v0.18.0/go.mod h1:08qhZhtIwzgrtBjAcJnij1t1H0ZRjwHyGsy6AL11PSw= +github.com/charmbracelet/bubbletea v0.25.0 h1:bAfwk7jRz7FKFl9RzlIULPkStffg5k6pNt5dywy4TcM= +github.com/charmbracelet/bubbletea v0.25.0/go.mod h1:EN3QDR1T5ZdWmdfDzYcqOCAps45+QIJbLOBxmVNWNNg= +github.com/charmbracelet/lipgloss v0.9.1 h1:PNyd3jvaJbg4jRHKWXnCj1akQm4rh8dbEzN1p/u1KWg= +github.com/charmbracelet/lipgloss v0.9.1/go.mod h1:1mPmG4cxScwUQALAAnacHaigiiHB9Pmr+v1VEawJl6I= +github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro= +github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/josharian/native v1.0.0 h1:Ts/E8zCSEsG17dUqv7joXJFybuMLjQfWE04tsBODTxk= -github.com/josharian/native v1.0.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/judwhite/go-svc v1.2.1 h1:a7fsJzYUa33sfDJRF2N/WXhA+LonCEEY8BJb1tuS5tA= -github.com/judwhite/go-svc v1.2.1/go.mod h1:mo/P2JNX8C07ywpP9YtO2gnBgnUiFTHqtsZekJrUuTk= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/lxc/lxd v0.0.0-20220922224603-c76bc42c6393 h1:i6HYgbIYKfPUlR7s0owwxJc7b9iljqe5wgzR3FBxBME= -github.com/lxc/lxd v0.0.0-20220922224603-c76bc42c6393/go.mod h1:TYyEqgcI2ybKnbGv7cgNCBFXFRdvPvWHdf5jBKLCnkY= -github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mdlayher/genetlink v1.2.0 h1:4yrIkRV5Wfk1WfpWTcoOlGmsWgQj3OtQN9ZsbrE+XtU= -github.com/mdlayher/genetlink v1.2.0/go.mod h1:ra5LDov2KrUCZJiAtEvXXZBxGMInICMXIwshlJ+qRxQ= -github.com/mdlayher/netlink v1.6.0 h1:rOHX5yl7qnlpiVkFWoqccueppMtXzeziFjWAjLg6sz0= -github.com/mdlayher/netlink v1.6.0/go.mod h1:0o3PlBmGst1xve7wQ7j/hwpNaFaH4qCRyWCdcZk8/vA= -github.com/mdlayher/socket v0.1.1/go.mod h1:mYV5YIZAfHh4dzDVzI8x8tWLWCliuX8Mon5Awbj+qDs= -github.com/mdlayher/socket v0.2.3 h1:XZA2X2TjdOwNoNPVPclRCURoX/hokBY8nkTmRZFEheM= -github.com/mdlayher/socket v0.2.3/go.mod h1:bz12/FozYNH/VbvC3q7TRIK/Y6dH1kCKsXaUeXi/FmY= -github.com/mikioh/ipaddr v0.0.0-20190404000644-d465c8ab6721 h1:RlZweED6sbSArvlE924+mUcZuXKLBHA35U7LN621Bws= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= +github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= -github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= -github.com/peterh/liner v1.2.2 h1:aJ4AOodmL+JxOZZEL2u9iJf8omNRpqHc/EbrK+3mAXw= -github.com/peterh/liner v1.2.2/go.mod h1:xFwJyiKIXJZUKItq5dGHZSTBRAuG/CpeNpWLyiNRNwI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= +github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= +github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= +github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= +github.com/pelletier/go-toml/v2 v2.1.1 h1:LWAJwfNvjQZCFIDKWYQaM62NcYeYViCmWIwmOStowAI= +github.com/pelletier/go-toml/v2 v2.1.1/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.2 h1:YwD0ulJSJytLpiaWua0sBDusfsCZohxjxzVTYjwxfV8= -github.com/rivo/uniseg v0.4.2/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= -github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.13.0 h1:BWSJ/M+f+3nmdz9bxB+bWX28kkALN2ok11D0rSo8EJU= -github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= +github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= +github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= -github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/zeropsio/zerops-go v1.0.4 h1:FQM1M+/c9GwKezzc6TOvgPl2q3wjem+9JlpWpPQxLgM= -github.com/zeropsio/zerops-go v1.0.4/go.mod h1:Nuqf1xWt53IRLyVoXgR4hF4ICc9jlfOfQgnN3ZhJR3E= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +github.com/zeropsio/zerops-go v1.0.7 h1:vtiaSSu3TrC18BlOxH5/PydUk1+BNDjQhhw6S80SCPE= +github.com/zeropsio/zerops-go v1.0.7/go.mod h1:Nuqf1xWt53IRLyVoXgR4hF4ICc9jlfOfQgnN3ZhJR3E= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 h1:a5Yg6ylndHHYJqIPrdq0AhvR6KTvDTAvgBtaidhEevY= -golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/exp v0.0.0-20240213143201-ec583247a57a h1:HinSgX1tJRX3KsL//Gxynpw5CTOAIPhgL4W8PNiIpVE= +golang.org/x/exp v0.0.0-20240213143201-ec583247a57a/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220921203646-d300de134e69 h1:hUJpGDpnfwdJW8iNypFjmSY0sCBEL+spFTZ2eO+Sfps= -golang.org/x/net v0.0.0-20220921203646-d300de134e69/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220907140024-f12130a52804 h1:0SH2R3f1b1VmIMG7BXbEZCBUu2dKmHschSmjqGUrW8A= -golang.org/x/sync v0.0.0-20220907140024-f12130a52804/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc= -golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220919170432-7a66f970e087 h1:tPwmk4vmvVCMdr98VgL4JH+qZxPL8fqlUOHnyOM8N3w= -golang.org/x/term v0.0.0-20220919170432-7a66f970e087/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200806022845-90696ccdc692/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.zx2c4.com/wireguard v0.0.0-20220407013110-ef5c587f782d h1:q4JksJ2n0fmbXC0Aj0eOs6E0AcPqnKglxWXWFqGD6x0= -golang.zx2c4.com/wireguard v0.0.0-20220407013110-ef5c587f782d/go.mod h1:bVQfyl2sCM/QIIGHpWbFGfHPuDvqnCNkT6MQLTCjO/U= -golang.zx2c4.com/wireguard/wgctrl v0.0.0-20220504211119-3d4a969bb56b h1:9JncmKXcUwE918my+H6xmjBdhK2jM/UTUNXxhRG1BAk= -golang.zx2c4.com/wireguard/wgctrl v0.0.0-20220504211119-3d4a969bb56b/go.mod h1:yp4gl6zOlnDGOZeWeDfMwQcsdOIQnMdhuPx9mwwWBL4= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220921223823-23cae91e6737 h1:K1zaaMdYBXRyX+cwFnxj7M6zwDyumLQMZ5xqwGvjreQ= -google.golang.org/genproto v0.0.0-20220921223823-23cae91e6737/go.mod h1:2r/26NEF3bFmT3eC3aZreahSal0C3Shl8Gi6vyDYqOQ= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.49.0 h1:WTLtQzmQori5FUH25Pq4WT22oCsv8USpQ+F6rqtsmxw= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/grpc/examples v0.0.0-20201112215255-90f1b3ee835b h1:NuxyvVZoDfHZwYW9LD4GJiF5/nhiSyP4/InTrvw9Ibk= -google.golang.org/grpc/examples v0.0.0-20201112215255-90f1b3ee835b/go.mod h1:IBqQ7wSUJ2Ep09a8rMWFsg4fmI2r38zwsq8a0GgxXpM= -google.golang.org/grpc/security/advancedtls v0.0.0-20220516211522-d9b952b17060 h1:D2MHNC3Kys7h1n9uTuAGmAi9mvD2ZV1eFeSxcL4EuH0= -google.golang.org/grpc/security/advancedtls v0.0.0-20220516211522-d9b952b17060/go.mod h1:PoKncN6QA5h/eFRzlCWpHSZnXF2pCtnBzAfeanB8OGQ= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6 h1:CawjfCvYQH2OU3/TnxLx97WDSUDRABfT18pCOYwc2GE= +golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6/go.mod h1:3rxYc4HtVcSG9gVaTs2GEBdehh+sYPOwKtyUWEOTb80= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/src/utils/archiveClient/handler.go b/src/archiveClient/handler.go similarity index 100% rename from src/utils/archiveClient/handler.go rename to src/archiveClient/handler.go diff --git a/src/utils/archiveClient/handler_findFilesByRules.go b/src/archiveClient/handler_findFilesByRules.go similarity index 78% rename from src/utils/archiveClient/handler_findFilesByRules.go rename to src/archiveClient/handler_findFilesByRules.go index 70214876..89d841a8 100644 --- a/src/utils/archiveClient/handler_findFilesByRules.go +++ b/src/archiveClient/handler_findFilesByRules.go @@ -2,21 +2,22 @@ package archiveClient import ( "errors" - "fmt" "os" "path/filepath" "strings" "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/uxBlock/styles" ) -func (h *Handler) FindFilesByRules(workingDir string, sources []string) ([]File, error) { +func (h *Handler) FindFilesByRules(uxBlocks uxBlock.UxBlocks, workingDir string, sources []string) ([]File, error) { workingDir, err := filepath.Abs(workingDir) if err != nil { return nil, err } - fmt.Printf(i18n.ArchClientWorkingDirectory+"\n", workingDir) + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.ArchClientWorkingDirectory, workingDir))) // resulting function returns File from provided path // if file shouldn't be included in the result, File.ArchivePath will be empty @@ -35,7 +36,7 @@ func (h *Handler) FindFilesByRules(workingDir string, sources []string) ([]File, for _, source := range sources { parts := strings.Split(source, "~") if len(parts) > 2 { - return nil, errors.New(i18n.ArchClientMaxOneTilde) + return nil, errors.New(i18n.T(i18n.ArchClientMaxOneTilde)) } if len(parts) == 1 { parts = []string{ @@ -56,9 +57,9 @@ func (h *Handler) FindFilesByRules(workingDir string, sources []string) ([]File, if fileInfo.IsDir() { source = strings.TrimSuffix(source, string(os.PathSeparator)) + string(os.PathSeparator) - fmt.Printf(i18n.ArchClientPackingDirectory+"\n", source) + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.ArchClientPackingDirectory, source))) } else { - fmt.Printf(i18n.ArchClientPackingFile+"\n", source) + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.ArchClientPackingFile, source))) } trimPath, err := filepath.Abs(filepath.Join(workingDir, parts[0])) diff --git a/src/utils/archiveClient/handler_findFilesByRules_test.go b/src/archiveClient/handler_findFilesByRules_test.go similarity index 92% rename from src/utils/archiveClient/handler_findFilesByRules_test.go rename to src/archiveClient/handler_findFilesByRules_test.go index 68f434bc..6de1eae7 100644 --- a/src/utils/archiveClient/handler_findFilesByRules_test.go +++ b/src/archiveClient/handler_findFilesByRules_test.go @@ -3,7 +3,9 @@ package archiveClient import ( "testing" - . "github.com/onsi/gomega" + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/require" + "github.com/zeropsio/zcli/src/uxBlock/mocks" ) var testErrorResponseDataProvider = []struct { @@ -219,15 +221,17 @@ var testErrorResponseDataProvider = []struct { } func TestValidation(t *testing.T) { + ctrl := gomock.NewController(t) + uxBlocks := mocks.NewMockUxBlocks(ctrl) + uxBlocks.EXPECT().PrintInfo(gomock.Any()).AnyTimes() + for _, test := range testErrorResponseDataProvider { test := test // scope lint t.Run(test.name+" in "+test.workingDir, func(t *testing.T) { - RegisterTestingT(t) - archiver := New(Config{}) - files, err := archiver.FindFilesByRules(test.workingDir, test.input) - Expect(err).ShouldNot(HaveOccurred()) + files, err := archiver.FindFilesByRules(uxBlocks, test.workingDir, test.input) + require.NoError(t, err) output := func() (res []string) { for _, f := range files { @@ -236,7 +240,7 @@ func TestValidation(t *testing.T) { return }() - Expect(output).To(Equal(test.output)) + require.Equal(t, test.output, output) }) } } diff --git a/src/utils/archiveClient/handler_findGitFiles.go b/src/archiveClient/handler_findGitFiles.go similarity index 95% rename from src/utils/archiveClient/handler_findGitFiles.go rename to src/archiveClient/handler_findGitFiles.go index 2812b2e3..c208449b 100644 --- a/src/utils/archiveClient/handler_findGitFiles.go +++ b/src/archiveClient/handler_findGitFiles.go @@ -9,7 +9,8 @@ import ( "path/filepath" "strings" - "github.com/zeropsio/zcli/src/utils/cmdRunner" + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/cmdRunner" ) func (h *Handler) FindGitFiles(workingDir string) (res []File, _ error) { @@ -98,7 +99,7 @@ func (h *Handler) FindGitFiles(workingDir string) (res []File, _ error) { } } - return + return res, nil } func (h *Handler) listFiles(cmd *exec.Cmd, fn func(path string) error) error { @@ -112,7 +113,7 @@ func (h *Handler) listFiles(cmd *exec.Cmd, fn func(path string) error) error { lineB, _, err := rd.ReadLine() line := string(lineB) - if err == io.EOF { + if errors.Is(err, io.EOF) { if line != "" { if err := fn(line); err != nil { return err diff --git a/src/utils/archiveClient/handler_tarFile.go b/src/archiveClient/handler_tarFile.go similarity index 84% rename from src/utils/archiveClient/handler_tarFile.go rename to src/archiveClient/handler_tarFile.go index 5309791f..8c9b6c7c 100644 --- a/src/utils/archiveClient/handler_tarFile.go +++ b/src/archiveClient/handler_tarFile.go @@ -2,10 +2,11 @@ package archiveClient import ( "archive/tar" - "fmt" "io" "os" "strings" + + "github.com/pkg/errors" ) func tarFile(archive *tar.Writer, file File, info os.FileInfo) error { @@ -31,6 +32,7 @@ func tarFile(archive *tar.Writer, file File, info os.FileInfo) error { return err } + //nolint:exhaustive // Why: Other file types are not supported switch mode := info.Mode(); mode & os.ModeType { case os.ModeDir, os.ModeSymlink: return nil @@ -48,11 +50,11 @@ func tarFile(archive *tar.Writer, file File, info os.FileInfo) error { return cpErr } if n != info.Size() { - return fmt.Errorf("wrote %d, want %d", n, info.Size()) + return errors.Errorf("wrote %d, want %d", n, info.Size()) } default: // let user know instead of silently ignoring unsupported files - return fmt.Errorf("unsupported file type: %s", header.Name) + return errors.Errorf("unsupported file type: %s", header.Name) } return nil diff --git a/src/utils/archiveClient/handler_tarFiles.go b/src/archiveClient/handler_tarFiles.go similarity index 100% rename from src/utils/archiveClient/handler_tarFiles.go rename to src/archiveClient/handler_tarFiles.go diff --git a/src/utils/archiveClient/handler_tarFiles_test.go b/src/archiveClient/handler_tarFiles_test.go similarity index 67% rename from src/utils/archiveClient/handler_tarFiles_test.go rename to src/archiveClient/handler_tarFiles_test.go index 3a6de581..86a2b17e 100644 --- a/src/utils/archiveClient/handler_tarFiles_test.go +++ b/src/archiveClient/handler_tarFiles_test.go @@ -8,12 +8,10 @@ import ( "io" "testing" - . "github.com/onsi/gomega" + "github.com/stretchr/testify/require" ) func TestSymlink(t *testing.T) { - RegisterTestingT(t) - archiver := New(Config{}) errChan := make(chan error) reader, writer := io.Pipe() @@ -30,26 +28,26 @@ func TestSymlink(t *testing.T) { ) gz, err := gzip.NewReader(reader) - Expect(err).ShouldNot(HaveOccurred()) + require.NoError(t, err) b, err := io.ReadAll(gz) - Expect(err).ShouldNot(HaveOccurred()) + require.NoError(t, err) r := tar.NewReader(bytes.NewReader(b)) - Expect(err).ShouldNot(HaveOccurred()) + require.NoError(t, err) for { header, err := r.Next() if errors.Is(err, io.EOF) { break } - Expect(err).ShouldNot(HaveOccurred()) + require.NoError(t, err) switch header.Typeflag { case tar.TypeSymlink: - Expect(header.Linkname).To(Equal("../file2.1.txt")) + require.Equal(t, "../file2.1.txt", header.Linkname) default: - Expect(errors.New("unknown type")).ShouldNot(HaveOccurred()) + t.Fatal("unknown type") } } } diff --git a/src/utils/archiveClient/handler_utils.go b/src/archiveClient/handler_utils.go similarity index 93% rename from src/utils/archiveClient/handler_utils.go rename to src/archiveClient/handler_utils.go index 04c1c9cd..0c19bcda 100644 --- a/src/utils/archiveClient/handler_utils.go +++ b/src/archiveClient/handler_utils.go @@ -9,7 +9,7 @@ import ( // fixes paths/dirs that may be missing between source root and deployed files (all dirs are needed for valid TAR file) // provided createFile func will receive a valid File.SourcePath and MUST strip workDir to form a valid File.ArchivePath // createdPath is used as a cache to not create paths multiple times for multiple calls of the function -func (h Handler) fixMissingDirPath(files []File, createFile func(filePath string) File, createdPaths map[string]struct{}) []File { +func (h *Handler) fixMissingDirPath(files []File, createFile func(filePath string) File, createdPaths map[string]struct{}) []File { fixedFiles := make([]File, 0, len(files)+50) for _, file := range files { diff --git a/src/utils/archiveClient/test/var/www/dir/file2.1.txt b/src/archiveClient/test/var/www/dir/file2.1.txt similarity index 100% rename from src/utils/archiveClient/test/var/www/dir/file2.1.txt rename to src/archiveClient/test/var/www/dir/file2.1.txt diff --git a/src/utils/archiveClient/test/var/www/dir/file2.2.txt b/src/archiveClient/test/var/www/dir/file2.2.txt similarity index 100% rename from src/utils/archiveClient/test/var/www/dir/file2.2.txt rename to src/archiveClient/test/var/www/dir/file2.2.txt diff --git a/src/utils/archiveClient/test/var/www/dir/subDir/file3.1.txt b/src/archiveClient/test/var/www/dir/subDir/file3.1.txt similarity index 100% rename from src/utils/archiveClient/test/var/www/dir/subDir/file3.1.txt rename to src/archiveClient/test/var/www/dir/subDir/file3.1.txt diff --git a/src/utils/archiveClient/test/var/www/dir/subDir/file3.2.txt b/src/archiveClient/test/var/www/dir/subDir/file3.2.txt similarity index 100% rename from src/utils/archiveClient/test/var/www/dir/subDir/file3.2.txt rename to src/archiveClient/test/var/www/dir/subDir/file3.2.txt diff --git a/src/utils/archiveClient/test/var/www/dir/subDir/file3.3.symlink.txt b/src/archiveClient/test/var/www/dir/subDir/file3.3.symlink.txt similarity index 100% rename from src/utils/archiveClient/test/var/www/dir/subDir/file3.3.symlink.txt rename to src/archiveClient/test/var/www/dir/subDir/file3.3.symlink.txt diff --git a/src/utils/archiveClient/test/var/www/file1.1.txt b/src/archiveClient/test/var/www/file1.1.txt similarity index 100% rename from src/utils/archiveClient/test/var/www/file1.1.txt rename to src/archiveClient/test/var/www/file1.1.txt diff --git a/src/cliAction/bucket/s3/handler.go b/src/cliAction/bucket/s3/handler.go deleted file mode 100644 index c30d8e99..00000000 --- a/src/cliAction/bucket/s3/handler.go +++ /dev/null @@ -1,27 +0,0 @@ -package bucketS3 - -const s3ServerRegion = "us-east-1" - -type Config struct { - S3StorageAddress string -} - -type RunConfig struct { - ServiceStackName string - BucketName string - XAmzAcl string - AccessKeyId string - SecretAccessKey string -} - -type Handler struct { - config Config -} - -func New( - config Config, -) *Handler { - return &Handler{ - config: config, - } -} diff --git a/src/cliAction/bucket/s3/handler_create.go b/src/cliAction/bucket/s3/handler_create.go deleted file mode 100644 index 14bc4545..00000000 --- a/src/cliAction/bucket/s3/handler_create.go +++ /dev/null @@ -1,49 +0,0 @@ -package bucketS3 - -import ( - "context" - "errors" - "fmt" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/s3" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" -) - -func (h Handler) Create(ctx context.Context, config RunConfig) error { - awsConf := aws.NewConfig(). - WithEndpoint(h.config.S3StorageAddress). - WithRegion(s3ServerRegion). - WithS3ForcePathStyle(true). - WithCredentials( - credentials.NewStaticCredentials(config.AccessKeyId, config.SecretAccessKey, ""), - ) - - sess, err := session.NewSession(awsConf) - if err != nil { - return err - } - - bucketInput := (&s3.CreateBucketInput{}). - SetACL(config.XAmzAcl). - SetBucket(config.BucketName) - - if _, err := s3.New(sess).CreateBucketWithContext(ctx, bucketInput); err != nil { - var s3Err s3.RequestFailure - if errors.As(err, &s3Err) { - if s3Err.Code() == s3.ErrCodeBucketAlreadyExists { - return errors.New(i18n.BucketS3BucketAlreadyExists) - } - return fmt.Errorf(i18n.BucketS3RequestFailed, s3Err) - } - return err - } - - fmt.Println(constants.Success + i18n.BucketCreated + i18n.Success) - - return nil -} diff --git a/src/cliAction/bucket/s3/handler_delete.go b/src/cliAction/bucket/s3/handler_delete.go deleted file mode 100644 index 60a0b5af..00000000 --- a/src/cliAction/bucket/s3/handler_delete.go +++ /dev/null @@ -1,46 +0,0 @@ -package bucketS3 - -import ( - "context" - "errors" - "fmt" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/s3" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" -) - -func (h Handler) Delete(ctx context.Context, config RunConfig) error { - awsConf := aws.NewConfig(). - WithEndpoint(h.config.S3StorageAddress). - WithRegion(s3ServerRegion). - WithS3ForcePathStyle(true). - WithCredentials( - credentials.NewStaticCredentials(config.AccessKeyId, config.SecretAccessKey, ""), - ) - - sess, err := session.NewSession(awsConf) - if err != nil { - return err - } - - bucketInput := (&s3.DeleteBucketInput{}). - SetBucket(config.BucketName). - SetExpectedBucketOwner(config.AccessKeyId) - - if _, err := s3.New(sess).DeleteBucketWithContext(ctx, bucketInput); err != nil { - var s3Err s3.RequestFailure - if errors.As(err, &s3Err) { - return fmt.Errorf(i18n.BucketS3RequestFailed, s3Err) - } - return err - } - - fmt.Println(constants.Success + i18n.BucketDeleted + i18n.Success) - - return nil -} diff --git a/src/cliAction/bucket/zerops/handler.go b/src/cliAction/bucket/zerops/handler.go deleted file mode 100644 index 0a7a5bfd..00000000 --- a/src/cliAction/bucket/zerops/handler.go +++ /dev/null @@ -1,38 +0,0 @@ -package bucketZerops - -import ( - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -type Config struct { -} - -type RunConfig struct { - ProjectNameOrId string - ServiceStackName string - BucketName string - XAmzAcl string -} - -type Handler struct { - config Config - httpClient *httpClient.Handler - apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient - sdkConfig sdkConfig.Config -} - -func New( - config Config, - httpClient *httpClient.Handler, - apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient, - sdkConfig sdkConfig.Config, -) *Handler { - return &Handler{ - config: config, - httpClient: httpClient, - apiGrpcClient: apiGrpcClient, - sdkConfig: sdkConfig, - } -} diff --git a/src/cliAction/bucket/zerops/handler_create.go b/src/cliAction/bucket/zerops/handler_create.go deleted file mode 100644 index 9007d88c..00000000 --- a/src/cliAction/bucket/zerops/handler_create.go +++ /dev/null @@ -1,71 +0,0 @@ -package bucketZerops - -import ( - "context" - "errors" - "fmt" - "net/http" - "strings" - "time" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/projectService" - "github.com/zeropsio/zerops-go/dto/input/body" - "github.com/zeropsio/zerops-go/dto/input/path" - "github.com/zeropsio/zerops-go/sdk" - "github.com/zeropsio/zerops-go/sdkBase" - "github.com/zeropsio/zerops-go/types" - "github.com/zeropsio/zerops-go/types/uuid" -) - -func (h Handler) Create(ctx context.Context, config RunConfig) error { - projectId, err := projectService.GetProjectId(ctx, h.apiGrpcClient, config.ProjectNameOrId, h.sdkConfig) - if err != nil { - return err - } - - stack, err := projectService.GetServiceStack(ctx, h.apiGrpcClient, projectId, config.ServiceStackName) - if err != nil { - return err - } - if stack.GetServiceStackTypeInfo().GetServiceStackTypeCategory() != zBusinessZeropsApiProtocol.ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_OBJECT_STORAGE { - return errors.New(i18n.BucketGenericOnlyForObjectStorage) - } - - stackId := stack.GetId() - bucketName := fmt.Sprintf("%s.%s", strings.ToLower(stackId), config.BucketName) - - fmt.Printf(i18n.BucketCreateCreatingZeropsApi, bucketName) - fmt.Println(i18n.BucketGenericBucketNamePrefixed) - - zdk := sdk.New( - sdkBase.DefaultConfig(sdkBase.WithCustomEndpoint(h.sdkConfig.RegionUrl)), - &http.Client{Timeout: 1 * time.Minute}, - ) - authorizedSdk := sdk.AuthorizeSdk(zdk, h.sdkConfig.Token) - - bucketBody := body.PostS3Bucket{ - Name: types.NewString(bucketName), - } - if config.XAmzAcl != "" { - bucketBody.XAmzAcl = types.NewStringNull(config.XAmzAcl) - } - - resp, err := authorizedSdk.PostS3Bucket( - ctx, - path.ServiceStackIdNamed{ServiceStackId: uuid.ServiceStackId(stackId)}, - bucketBody, - ) - if err != nil { - return err - } - if _, err := resp.Output(); err != nil { - return err - } - - fmt.Println(constants.Success + i18n.BucketCreated + i18n.Success) - - return nil -} diff --git a/src/cliAction/bucket/zerops/handler_delete.go b/src/cliAction/bucket/zerops/handler_delete.go deleted file mode 100644 index cd8f931a..00000000 --- a/src/cliAction/bucket/zerops/handler_delete.go +++ /dev/null @@ -1,65 +0,0 @@ -package bucketZerops - -import ( - "context" - "errors" - "fmt" - "net/http" - "strings" - "time" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/projectService" - "github.com/zeropsio/zerops-go/dto/input/path" - "github.com/zeropsio/zerops-go/sdk" - "github.com/zeropsio/zerops-go/sdkBase" - "github.com/zeropsio/zerops-go/types" - "github.com/zeropsio/zerops-go/types/uuid" -) - -func (h Handler) Delete(ctx context.Context, config RunConfig) error { - projectId, err := projectService.GetProjectId(ctx, h.apiGrpcClient, config.ProjectNameOrId, h.sdkConfig) - if err != nil { - return err - } - - stack, err := projectService.GetServiceStack(ctx, h.apiGrpcClient, projectId, config.ServiceStackName) - if err != nil { - return err - } - if stack.GetServiceStackTypeInfo().GetServiceStackTypeCategory() != zBusinessZeropsApiProtocol.ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_OBJECT_STORAGE { - return errors.New(i18n.BucketGenericOnlyForObjectStorage) - } - - stackId := stack.GetId() - bucketName := fmt.Sprintf("%s.%s", strings.ToLower(stackId), config.BucketName) - - fmt.Printf(i18n.BucketDeleteDeletingZeropsApi, bucketName) - fmt.Println(i18n.BucketGenericBucketNamePrefixed) - - zdk := sdk.New( - sdkBase.DefaultConfig(sdkBase.WithCustomEndpoint(h.sdkConfig.RegionUrl)), - &http.Client{Timeout: 1 * time.Minute}, - ) - authorizedSdk := sdk.AuthorizeSdk(zdk, h.sdkConfig.Token) - - resp, err := authorizedSdk.DeleteS3( - ctx, - path.S3Bucket{ - ServiceStackId: uuid.ServiceStackId(stackId), - Name: types.NewString(bucketName), - }, - ) - if err != nil { - return err - } - if _, err := resp.Output(); err != nil { - return err - } - - fmt.Println(constants.Success + i18n.BucketDeleted + i18n.Success) - - return nil -} diff --git a/src/cliAction/buildDeploy/handler.go b/src/cliAction/buildDeploy/handler.go deleted file mode 100644 index d9ac7290..00000000 --- a/src/cliAction/buildDeploy/handler.go +++ /dev/null @@ -1,48 +0,0 @@ -package buildDeploy - -import ( - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/archiveClient" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -const zeropsYamlFileName = "zerops.yml" - -type Config struct { -} - -type RunConfig struct { - ProjectNameOrId string - SourceName string - ServiceStackName string - PathsForPacking []string - WorkingDir string - ArchiveFilePath string - VersionName string - ZeropsYamlPath string -} - -type Handler struct { - config Config - httpClient *httpClient.Handler - archClient *archiveClient.Handler - apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient - sdkConfig sdkConfig.Config -} - -func New( - config Config, - httpClient *httpClient.Handler, - archClient *archiveClient.Handler, - apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient, - sdkConfig sdkConfig.Config, -) *Handler { - return &Handler{ - config: config, - httpClient: httpClient, - archClient: archClient, - apiGrpcClient: apiGrpcClient, - sdkConfig: sdkConfig, - } -} diff --git a/src/cliAction/buildDeploy/handler_checkInputValues.go b/src/cliAction/buildDeploy/handler_checkInputValues.go deleted file mode 100644 index 32b97188..00000000 --- a/src/cliAction/buildDeploy/handler_checkInputValues.go +++ /dev/null @@ -1,26 +0,0 @@ -package buildDeploy - -import ( - "context" - "fmt" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/projectService" -) - -func (h *Handler) checkInputValues(ctx context.Context, config RunConfig) (*zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto, error) { - projectId, err := projectService.GetProjectId(ctx, h.apiGrpcClient, config.ProjectNameOrId, h.sdkConfig) - if err != nil { - return nil, err - } - - serviceStack, err := projectService.GetServiceStack(ctx, h.apiGrpcClient, projectId, config.ServiceStackName) - if err != nil { - return nil, err - } - - fmt.Printf(i18n.BuildDeployServiceStatus+"\n", serviceStack.GetStatus().String()) - - return serviceStack, nil -} diff --git a/src/cliAction/buildDeploy/handler_createAppVersion.go b/src/cliAction/buildDeploy/handler_createAppVersion.go deleted file mode 100644 index 8b3eee8d..00000000 --- a/src/cliAction/buildDeploy/handler_createAppVersion.go +++ /dev/null @@ -1,29 +0,0 @@ -package buildDeploy - -import ( - "context" - - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" -) - -func (h *Handler) createAppVersion(ctx context.Context, config RunConfig, serviceStack *zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto) (*zBusinessZeropsApiProtocol.PostAppVersionResponseDto, error) { - appVersionResponse, err := h.apiGrpcClient.PostAppVersion(ctx, &zBusinessZeropsApiProtocol.PostAppVersionRequest{ - ServiceStackId: serviceStack.GetId(), - Name: func() *zBusinessZeropsApiProtocol.StringNull { - if config.VersionName != "" { - return &zBusinessZeropsApiProtocol.StringNull{ - Value: config.VersionName, - Valid: true, - } - } - return &zBusinessZeropsApiProtocol.StringNull{} - }(), - }) - if err := proto.BusinessError(appVersionResponse, err); err != nil { - return nil, err - } - appVersion := appVersionResponse.GetOutput() - - return appVersion, nil -} diff --git a/src/cliAction/buildDeploy/handler_deploy.go b/src/cliAction/buildDeploy/handler_deploy.go deleted file mode 100644 index 7418d2d1..00000000 --- a/src/cliAction/buildDeploy/handler_deploy.go +++ /dev/null @@ -1,178 +0,0 @@ -package buildDeploy - -import ( - "context" - "encoding/base64" - "errors" - "fmt" - "io" - "net/http" - "os" - "path/filepath" - "time" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/processChecker" - "github.com/zeropsio/zerops-go/dto/input/body" - "github.com/zeropsio/zerops-go/sdk" - "github.com/zeropsio/zerops-go/sdkBase" - "github.com/zeropsio/zerops-go/types" - "github.com/zeropsio/zerops-go/types/stringId" -) - -func (h *Handler) Deploy(ctx context.Context, config RunConfig) error { - serviceStack, err := h.checkInputValues(ctx, config) - if err != nil { - return err - } - - configContent, err := h.getValidConfigContent(ctx, config, serviceStack.ServiceStackTypeId, serviceStack.Name) - if err != nil { - return err - } - - fmt.Println(i18n.BuildDeployCreatingPackageStart) - - files, err := h.archClient.FindFilesByRules(config.WorkingDir, config.PathsForPacking) - if err != nil { - return err - } - - reader, writer := io.Pipe() - defer reader.Close() - - tarErrChan := make(chan error, 1) - - go h.archClient.TarFiles(writer, files, tarErrChan) - - r, err := h.savePackage(config, reader) - if err != nil { - return err - } - - appVersion, err := h.createAppVersion(ctx, config, serviceStack) - if err != nil { - return err - } - - if err := h.packageUpload(appVersion, r); err != nil { - // if an error occurred while packing the app, return that error - select { - case err := <-tarErrChan: - return err - default: - return err - } - } - - // wait for packing and saving to finish (should already be done after the package upload has finished) - if tarErr := <-tarErrChan; tarErr != nil { - return tarErr - } - - fmt.Println(i18n.BuildDeployDeployingStart) - - deployResponse, err := h.apiGrpcClient.PutAppVersionDeploy(ctx, &zBusinessZeropsApiProtocol.PutAppVersionDeployRequest{ - Id: appVersion.GetId(), - ConfigContent: configContent, - }) - if err := proto.BusinessError(deployResponse, err); err != nil { - return err - } - - deployProcessId := deployResponse.GetOutput().GetId() - - err = processChecker.CheckProcess(ctx, deployProcessId, h.apiGrpcClient) - if err != nil { - return err - } - - fmt.Println(constants.Success + i18n.BuildDeploySuccess) - - return nil -} - -func (h *Handler) getValidConfigContent( - ctx context.Context, - config RunConfig, - serviceStackTypeId string, - serviceStackName string, -) (*zBusinessZeropsApiProtocol.StringNull, error) { - workingDir, err := filepath.Abs(config.WorkingDir) - if err != nil { - return nil, err - } - - if config.ZeropsYamlPath != "" { - workingDir = filepath.Join(workingDir, config.ZeropsYamlPath) - } - - zeropsYamlPath := filepath.Join(workingDir, zeropsYamlFileName) - - zeropsYamlStat, err := os.Stat(zeropsYamlPath) - if err != nil { - if os.IsNotExist(err) { - if config.ZeropsYamlPath != "" { - return nil, errors.New(i18n.BuildDeployZeropsYamlNotFound) - } - } - return nil, nil - } - - fmt.Printf("%s: %s\n", i18n.BuildDeployZeropsYamlFound, zeropsYamlPath) - - if zeropsYamlStat.Size() == 0 { - return nil, errors.New(i18n.BuildDeployZeropsYamlEmpty) - } - if zeropsYamlStat.Size() > 10*1024 { - return nil, errors.New(i18n.BuildDeployZeropsYamlTooLarge) - } - - yamlContent, err := os.ReadFile(zeropsYamlPath) - if err != nil { - return nil, err - } - - if err = h.validateZeropsYamlContent(ctx, serviceStackTypeId, serviceStackName, yamlContent); err != nil { - return nil, err - } - - return &zBusinessZeropsApiProtocol.StringNull{ - Value: base64.StdEncoding.EncodeToString(yamlContent), - Valid: true, - }, nil -} - -func (h *Handler) validateZeropsYamlContent( - ctx context.Context, - serviceStackTypeId string, - serviceStackName string, - yamlContent []byte, -) error { - zdk := sdk.New( - sdkBase.DefaultConfig(sdkBase.WithCustomEndpoint(h.sdkConfig.RegionUrl)), - &http.Client{Timeout: 1 * time.Minute}, - ) - id, err := stringId.NewServiceStackTypeIdFromString(serviceStackTypeId) - if err != nil { - return err - } - - authorizedSdk := sdk.AuthorizeSdk(zdk, h.sdkConfig.Token) - resp, err := authorizedSdk.PostServiceStackZeropsYamlValidation(ctx, body.ZeropsYamlValidation{ - Name: types.NewString(serviceStackName), - ServiceStackTypeId: id, - ZeropsYaml: types.NewText(string(yamlContent)), - }) - if err != nil { - return err - } - if _, err = resp.Output(); err != nil { - return err - } - - return nil -} diff --git a/src/cliAction/buildDeploy/handler_packageUpload.go b/src/cliAction/buildDeploy/handler_packageUpload.go deleted file mode 100644 index 04a0b249..00000000 --- a/src/cliAction/buildDeploy/handler_packageUpload.go +++ /dev/null @@ -1,27 +0,0 @@ -package buildDeploy - -import ( - "errors" - "fmt" - "io" - "net/http" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" -) - -func (h *Handler) packageUpload(appVersion *zBusinessZeropsApiProtocol.PostAppVersionResponseDto, reader io.Reader) error { - fmt.Println(i18n.BuildDeployUploadingPackageStart) - - cephResponse, err := h.httpClient.PutStream(appVersion.GetUploadUrl(), reader, httpClient.ContentType("application/gzip")) - if err != nil { - return err - } - if cephResponse.StatusCode != http.StatusCreated { - return errors.New(i18n.BuildDeployUploadPackageFailed) - } - - fmt.Println(i18n.BuildDeployUploadingPackageDone) - return nil -} diff --git a/src/cliAction/buildDeploy/handler_push.go b/src/cliAction/buildDeploy/handler_push.go deleted file mode 100644 index f34e402f..00000000 --- a/src/cliAction/buildDeploy/handler_push.go +++ /dev/null @@ -1,127 +0,0 @@ -package buildDeploy - -import ( - "context" - "encoding/base64" - "errors" - "fmt" - "io" - "os" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/processChecker" -) - -func (h *Handler) Push(ctx context.Context, config RunConfig) error { - serviceStack, err := h.checkInputValues(ctx, config) - if err != nil { - return err - } - - if config.SourceName == "" { - config.SourceName = serviceStack.GetName() - } - - fmt.Println(i18n.BuildDeployCreatingPackageStart) - - files, err := h.archClient.FindGitFiles(config.WorkingDir) - if err != nil { - return err - } - - buildConfigContent, err := func() ([]byte, error) { - for _, file := range files { - if file.ArchivePath == zeropsYamlFileName { - stat, err := os.Stat(file.SourcePath) - if err != nil { - return nil, err - } - - if stat.Size() == 0 { - return nil, errors.New(i18n.BuildDeployZeropsYamlEmpty) - } - if stat.Size() > 10*1024 { - return nil, errors.New(i18n.BuildDeployZeropsYamlTooLarge) - } - - buildConfigContent, err := os.ReadFile(file.SourcePath) - if err != nil { - return nil, err - } - - return buildConfigContent, nil - } - } - - return nil, errors.New(i18n.BuildDeployZeropsYamlNotFound) - }() - if err != nil { - return err - } - - reader, writer := io.Pipe() - defer reader.Close() - - tarErrChan := make(chan error, 1) - - go h.archClient.TarFiles(writer, files, tarErrChan) - - r, err := h.savePackage(config, reader) - if err != nil { - return err - } - - appVersion, err := h.createAppVersion(ctx, config, serviceStack) - if err != nil { - return err - } - - if err := h.packageUpload(appVersion, r); err != nil { - // if an error occurred while packing the app, return that error - select { - case err := <-tarErrChan: - return err - default: - return err - } - } - - // wait for packing and saving to finish (should already be done after the package upload has finished) - if tarErr := <-tarErrChan; tarErr != nil { - return tarErr - } - - fmt.Println(i18n.BuildDeployCreatingPackageDone) - - if config.ArchiveFilePath != "" { - fmt.Printf(i18n.BuildDeployPackageSavedInto+"\n", config.ArchiveFilePath) - } - - fmt.Println(i18n.BuildDeployDeployingStart) - - deployResponse, err := h.apiGrpcClient.PutAppVersionBuildAndDeploy(ctx, &zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployRequest{ - Id: appVersion.GetId(), - BuildConfigContent: base64.StdEncoding.EncodeToString(buildConfigContent), - Source: &zBusinessZeropsApiProtocol.StringNull{ - Value: config.SourceName, - Valid: true, - }, - }) - if err := proto.BusinessError(deployResponse, err); err != nil { - return err - } - - deployProcessId := deployResponse.GetOutput().GetId() - - err = processChecker.CheckProcess(ctx, deployProcessId, h.apiGrpcClient) - if err != nil { - return err - } - - fmt.Println(constants.Success + i18n.BuildDeploySuccess) - - return nil -} diff --git a/src/cliAction/buildDeploy/handler_savePackage.go b/src/cliAction/buildDeploy/handler_savePackage.go deleted file mode 100644 index 9adefb09..00000000 --- a/src/cliAction/buildDeploy/handler_savePackage.go +++ /dev/null @@ -1,37 +0,0 @@ -package buildDeploy - -import ( - "fmt" - "io" - "os" - "path/filepath" - - "github.com/zeropsio/zcli/src/i18n" -) - -func (h *Handler) savePackage(config RunConfig, reader io.Reader) (io.Reader, error) { - if config.ArchiveFilePath == "" { - return reader, nil - } - - filePath, err := filepath.Abs(config.ArchiveFilePath) - if err != nil { - return reader, err - } - - // check if target file exists - _, err = os.Stat(filePath) - if err != nil && !os.IsNotExist(err) { - return reader, err - } - if err == nil { - return reader, fmt.Errorf(i18n.ArchClientFileAlreadyExists, config.ArchiveFilePath) - } - - file, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE, 0660) - if err != nil { - return reader, err - } - - return io.TeeReader(reader, file), nil -} diff --git a/src/cliAction/importProjectService/dataParse.go b/src/cliAction/importProjectService/dataParse.go deleted file mode 100644 index 96b0d821..00000000 --- a/src/cliAction/importProjectService/dataParse.go +++ /dev/null @@ -1,34 +0,0 @@ -package importProjectService - -import ( - "fmt" - - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" -) - -// return number of services and process data [](process Id, service name, action name) -func parseServiceData(servicesData []*zBusinessZeropsApiProtocol.ProjectImportServiceStack) (int, [][]string) { - var ( - serviceNames = make([]string, 0, len(servicesData)) - processData [][]string - ) - - for _, service := range servicesData { - serviceErr := service.GetError().GetValue() - if serviceErr != nil { - meta := "" - if len(serviceErr.GetMeta()) > 0 { - meta = fmt.Sprintf("\n%s", string(serviceErr.GetMeta())) - } - fmt.Printf("service %s returned error %s%s", service.GetName(), serviceErr.GetMessage(), meta) - } - - serviceNames = append(serviceNames, service.GetName()) - processes := service.GetProcesses() - - for _, process := range processes { - processData = append(processData, []string{process.GetId(), service.GetName(), process.GetActionName()}) - } - } - return len(serviceNames), processData -} diff --git a/src/cliAction/importProjectService/handler.go b/src/cliAction/importProjectService/handler.go deleted file mode 100644 index 5612a07a..00000000 --- a/src/cliAction/importProjectService/handler.go +++ /dev/null @@ -1,35 +0,0 @@ -package importProjectService - -import ( - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -type Config struct { -} - -type RunConfig struct { - WorkingDir string - ImportYamlPath string - ClientId string - ProjectNameOrId string - ParentCmd constants.ParentCmd -} - -type Handler struct { - config Config - httpClient *httpClient.Handler - apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient - sdkConfig sdkConfig.Config -} - -func New(config Config, httpClient *httpClient.Handler, apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient, sdkConfig sdkConfig.Config) *Handler { - return &Handler{ - config: config, - httpClient: httpClient, - apiGrpcClient: apiGrpcClient, - sdkConfig: sdkConfig, - } -} diff --git a/src/cliAction/importProjectService/handler_getClientId.go b/src/cliAction/importProjectService/handler_getClientId.go deleted file mode 100644 index d5dc94e9..00000000 --- a/src/cliAction/importProjectService/handler_getClientId.go +++ /dev/null @@ -1,16 +0,0 @@ -package importProjectService - -import ( - "context" - - "github.com/zeropsio/zcli/src/utils/projectService" -) - -func (h *Handler) getClientId(ctx context.Context, config RunConfig) (string, error) { - - if len(config.ClientId) > 0 { - return config.ClientId, nil - } - - return projectService.GetClientId(ctx, h.apiGrpcClient) -} diff --git a/src/cliAction/importProjectService/handler_import.go b/src/cliAction/importProjectService/handler_import.go deleted file mode 100644 index b223d26f..00000000 --- a/src/cliAction/importProjectService/handler_import.go +++ /dev/null @@ -1,63 +0,0 @@ -package importProjectService - -import ( - "context" - "fmt" - "strconv" - "sync" - "time" - - "github.com/briandowns/spinner" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/processChecker" -) - -func (h *Handler) Import(ctx context.Context, config RunConfig) error { - - importYamlContent, err := getImportYamlContent(config) - if err != nil { - return err - } - - var servicesData []*zBusinessZeropsApiProtocol.ProjectImportServiceStack - isProjectCmd := config.ParentCmd == constants.Project - - if isProjectCmd { - servicesData, err = h.sendProjectRequest(ctx, config, string(importYamlContent)) - } else { - servicesData, err = h.sendServiceRequest(ctx, config, string(importYamlContent)) - } - if err != nil { - return err - } - - serviceCount, processData := parseServiceData(servicesData) - - fmt.Println(i18n.ServiceStackCount + strconv.Itoa(serviceCount)) - fmt.Println(i18n.QueuedProcesses + strconv.Itoa(len(processData))) - - if isProjectCmd { - fmt.Println(i18n.CoreServices) - } - - var wg sync.WaitGroup - wg.Add(len(processData)) - sp := spinner.New(spinner.CharSets[32], 100*time.Millisecond) - sp.Start() - - for _, processItem := range processData { - go processChecker.CheckMultiple(ctx, processItem, h.apiGrpcClient, &wg, sp) - } - wg.Wait() - - if isProjectCmd { - fmt.Println(constants.Success + i18n.ProjectImported) - } else { - fmt.Println(constants.Success + i18n.ServiceImported) - } - - return nil -} diff --git a/src/cliAction/importProjectService/handler_project.go b/src/cliAction/importProjectService/handler_project.go deleted file mode 100644 index 8bf850d2..00000000 --- a/src/cliAction/importProjectService/handler_project.go +++ /dev/null @@ -1,30 +0,0 @@ -package importProjectService - -import ( - "context" - "fmt" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" -) - -func (h *Handler) sendProjectRequest(ctx context.Context, config RunConfig, yamlContent string) ([]*zBusinessZeropsApiProtocol.ProjectImportServiceStack, error) { - clientId, err := h.getClientId(ctx, config) - if err != nil { - return nil, err - } - - res, err := h.apiGrpcClient.PostProjectImport(ctx, &zBusinessZeropsApiProtocol.PostProjectImportRequest{ - ClientId: clientId, - Yaml: yamlContent, - }) - if err := proto.BusinessError(res, err); err != nil { - return nil, err - } - - fmt.Println(constants.Success + i18n.ProjectCreated + i18n.Success) - - return res.GetOutput().GetServiceStacks(), nil -} diff --git a/src/cliAction/importProjectService/handler_service.go b/src/cliAction/importProjectService/handler_service.go deleted file mode 100644 index adb0574d..00000000 --- a/src/cliAction/importProjectService/handler_service.go +++ /dev/null @@ -1,26 +0,0 @@ -package importProjectService - -import ( - "context" - - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/projectService" -) - -func (h *Handler) sendServiceRequest(ctx context.Context, config RunConfig, yamlContent string) ([]*zBusinessZeropsApiProtocol.ProjectImportServiceStack, error) { - projectId, err := projectService.GetProjectId(ctx, h.apiGrpcClient, config.ProjectNameOrId, h.sdkConfig) - if err != nil { - return nil, err - } - - res, err := h.apiGrpcClient.PostServiceStackImport(ctx, &zBusinessZeropsApiProtocol.PostServiceStackImportRequest{ - ProjectId: projectId, - Yaml: yamlContent, - }) - if err := proto.BusinessError(res, err); err != nil { - return nil, err - } - - return res.GetOutput().GetServiceStacks(), nil -} diff --git a/src/cliAction/importProjectService/yamlContent.go b/src/cliAction/importProjectService/yamlContent.go deleted file mode 100644 index 3f9cde42..00000000 --- a/src/cliAction/importProjectService/yamlContent.go +++ /dev/null @@ -1,57 +0,0 @@ -package importProjectService - -import ( - "errors" - "fmt" - "os" - "path/filepath" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" -) - -func getImportYamlContent(config RunConfig) ([]byte, error) { - fmt.Println(i18n.YamlCheck) - - importYamlPath := config.ImportYamlPath - if !filepath.IsAbs(importYamlPath) { - - workingDir, err := filepath.Abs(config.WorkingDir) - if err != nil { - return nil, err - } - - importYamlPath = filepath.Join(workingDir, importYamlPath) - } - - fileInfo, err := os.Stat(importYamlPath) - if err != nil { - return nil, err - } - - if fileInfo.IsDir() { - return nil, errors.New(i18n.ImportYamlNotFound) - } - - fmt.Printf("%s: %s\n", i18n.ImportYamlFound, importYamlPath) - - if fileInfo.Size() == 0 { - return nil, errors.New(i18n.ImportYamlEmpty) - } - - if fileInfo.Size() > 100*1024 { - return nil, errors.New(i18n.ImportYamlTooLarge) - } - - yamlContent, err := os.ReadFile(importYamlPath) - if err != nil { - return nil, err - } - - if len(yamlContent) == 0 { - return nil, errors.New(i18n.ImportYamlCorrupted) - } - - fmt.Println(constants.Success + i18n.ImportYamlOk) - return yamlContent, nil -} diff --git a/src/cliAction/installDaemon/handler.go b/src/cliAction/installDaemon/handler.go deleted file mode 100644 index ae0d4ea5..00000000 --- a/src/cliAction/installDaemon/handler.go +++ /dev/null @@ -1,26 +0,0 @@ -package installDaemon - -import ( - "github.com/zeropsio/zcli/src/daemonInstaller" -) - -type Config struct { -} - -type RunConfig struct { -} - -type Handler struct { - config Config - daemonInstaller *daemonInstaller.Handler -} - -func New( - config Config, - daemonInstaller *daemonInstaller.Handler, -) *Handler { - return &Handler{ - config: config, - daemonInstaller: daemonInstaller, - } -} diff --git a/src/cliAction/installDaemon/handler_run.go b/src/cliAction/installDaemon/handler_run.go deleted file mode 100644 index 7f3e01b8..00000000 --- a/src/cliAction/installDaemon/handler_run.go +++ /dev/null @@ -1,26 +0,0 @@ -package installDaemon - -import ( - "context" - "errors" - "fmt" - - "github.com/zeropsio/zcli/src/daemonInstaller" - - "github.com/zeropsio/zcli/src/i18n" -) - -func (h *Handler) Run(ctx context.Context, _ RunConfig) error { - - err := h.daemonInstaller.Install() - if errors.Is(err, daemonInstaller.ErrElevatedPrivileges) { - return nil - } - if err != nil { - return err - } - - fmt.Println(i18n.DaemonInstallSuccess) - - return nil -} diff --git a/src/cliAction/login/handler.go b/src/cliAction/login/handler.go deleted file mode 100644 index b5193cf5..00000000 --- a/src/cliAction/login/handler.go +++ /dev/null @@ -1,171 +0,0 @@ -package login - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "net/http" - - "github.com/zeropsio/zcli/src/cliStorage" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/daemon" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" -) - -type Config struct { - RestApiAddress string - GrpcApiAddress string -} - -type RunConfig struct { - ZeropsEmail string - ZeropsPassword string - ZeropsToken string -} - -type Handler struct { - config Config - storage *cliStorage.Handler - httpClient *httpClient.Handler - grpcApiClientFactory *zBusinessZeropsApiProtocol.Handler -} - -func New( - config Config, - storage *cliStorage.Handler, - httpClient *httpClient.Handler, - grpcApiClientFactory *zBusinessZeropsApiProtocol.Handler, -) *Handler { - return &Handler{ - config: config, - storage: storage, - httpClient: httpClient, - grpcApiClientFactory: grpcApiClientFactory, - } -} - -func (h *Handler) Run(ctx context.Context, runConfig RunConfig) error { - - if runConfig.ZeropsPassword == "" && - runConfig.ZeropsEmail == "" && - runConfig.ZeropsToken == "" { - return errors.New(i18n.LoginParamsMissing) - } - - var err error - if runConfig.ZeropsToken != "" { - err = h.loginWithToken(ctx, runConfig.ZeropsToken) - } else { - err = h.loginWithPassword(ctx, runConfig.ZeropsEmail, runConfig.ZeropsPassword) - } - if err != nil { - return err - } - - daemonClient, closeFunc, err := daemon.CreateClient(ctx) - if err != nil { - return err - } - defer closeFunc() - - response, err := daemonClient.StopVpn(ctx, &daemon.StopVpnRequest{}) - daemonInstalled, err := proto.DaemonError(err) - if err != nil { - return err - } - - if daemonInstalled && response.GetTunnelState() == daemon.TunnelState_TUNNEL_SET_INACTIVE { - fmt.Println(i18n.LoginVpnClosed) - } - - fmt.Println(i18n.LoginSuccess) - return nil -} - -func (h *Handler) loginWithPassword(_ context.Context, login, password string) error { - loginData, err := json.Marshal(struct { - Email string - Password string - }{ - Email: login, - Password: password, - }) - if err != nil { - return err - } - - loginResponse, err := h.httpClient.Post(h.config.RestApiAddress+"/api/rest/public/auth/login", loginData) - if err != nil { - return err - } - - var loginResponseObject struct { - Auth struct { - AccessToken string - } - } - - if loginResponse.StatusCode < http.StatusBadRequest { - err := json.Unmarshal(loginResponse.Body, &loginResponseObject) - if err != nil { - return err - } - } else { - return parseRestApiError(loginResponse.Body) - } - - cliResponse, err := h.httpClient.Post( - h.config.RestApiAddress+"/api/rest/public/user-token", - nil, - httpClient.BearerAuthorization(loginResponseObject.Auth.AccessToken), - ) - if err != nil { - return err - } - - if cliResponse.StatusCode >= http.StatusBadRequest { - return parseRestApiError(cliResponse.Body) - } - - var tokenResponseObject struct { - Token string `json:"token"` - } - err = json.Unmarshal(cliResponse.Body, &tokenResponseObject) - if err != nil { - return err - } - - h.storage.Update(func(data cliStorage.Data) cliStorage.Data { - data.Token = tokenResponseObject.Token - return data - }) - - return nil -} - -func (h *Handler) loginWithToken(ctx context.Context, token string) error { - grpcApiClient, closeFunc, err := h.grpcApiClientFactory.CreateClient(ctx, h.config.GrpcApiAddress, token) - if err != nil { - return err - } - defer closeFunc() - - resp, err := grpcApiClient.GetUserInfo(ctx, &zBusinessZeropsApiProtocol.GetUserInfoRequest{}) - - if err := proto.BusinessError(resp, err); err != nil { - if proto.IsUnauthenticated(err) { - return i18n.AddHintChangeRegion(err) - } - return err - } - - h.storage.Update(func(data cliStorage.Data) cliStorage.Data { - data.Token = token - return data - }) - - return nil -} diff --git a/src/cliAction/login/handler_parseRestApiError.go b/src/cliAction/login/handler_parseRestApiError.go deleted file mode 100644 index 1e55e0b7..00000000 --- a/src/cliAction/login/handler_parseRestApiError.go +++ /dev/null @@ -1,62 +0,0 @@ -package login - -import ( - "encoding/json" - "errors" - "fmt" - "strings" - - "github.com/zeropsio/zcli/src/i18n" -) - -type failResponse struct { - Error *failResponseError `json:"error"` -} - -func (f failResponse) IsUnauthenticated() bool { - code := f.Error.ErrorCode - return code == userNotFound || code == incorrectUserCredentials -} - -type failResponseError struct { - ErrorCode string `json:"code"` - Message string `json:"message"` - Meta interface{} `json:"meta,omitempty"` -} - -func parseRestApiError(body []byte) error { - var errorResponse failResponse - err := json.Unmarshal(body, &errorResponse) - if err != nil { - return err - } - if errorResponse.Error.ErrorCode == "invalidUserInput" { - var errorList []string - if metaList, ok := errorResponse.Error.Meta.([]interface{}); ok { - for _, meta := range metaList { - if metaItem, ok := meta.(map[string]interface{}); ok { - if parameter, exists := metaItem["parameter"]; exists { - if message, exists := metaItem["message"]; exists { - if p, ok := parameter.(string); ok { - if m, ok := message.(string); ok { - errorList = append(errorList, fmt.Sprintf("'%s': %s", p, m)) - } - } - } - } - } - } - } - - return errors.New(strings.Join(errorList, ", ")) - } else { - err := errors.New(errorResponse.Error.Message) - if errorResponse.IsUnauthenticated() { - return i18n.AddHintChangeRegion(err) - } - return err - } -} - -const userNotFound = "userNotFound" -const incorrectUserCredentials = "incorrectUserCredentials" diff --git a/src/cliAction/removeDaemon/handler.go b/src/cliAction/removeDaemon/handler.go deleted file mode 100644 index 787e5074..00000000 --- a/src/cliAction/removeDaemon/handler.go +++ /dev/null @@ -1,30 +0,0 @@ -package removeDaemon - -import ( - "github.com/zeropsio/zcli/src/cliAction/stopVpn" - "github.com/zeropsio/zcli/src/daemonInstaller" -) - -type Config struct { -} - -type RunConfig struct { -} - -type Handler struct { - config Config - daemonInstaller *daemonInstaller.Handler - stopVpn *stopVpn.Handler -} - -func New( - config Config, - daemonInstaller *daemonInstaller.Handler, - stopVpn *stopVpn.Handler, -) *Handler { - return &Handler{ - config: config, - daemonInstaller: daemonInstaller, - stopVpn: stopVpn, - } -} diff --git a/src/cliAction/removeDaemon/handler_run.go b/src/cliAction/removeDaemon/handler_run.go deleted file mode 100644 index 16046250..00000000 --- a/src/cliAction/removeDaemon/handler_run.go +++ /dev/null @@ -1,42 +0,0 @@ -package removeDaemon - -import ( - "context" - "errors" - "fmt" - - "github.com/zeropsio/zcli/src/daemonInstaller" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/zeropsio/zcli/src/cliAction/stopVpn" - - "github.com/zeropsio/zcli/src/i18n" -) - -func (h *Handler) Run(ctx context.Context, _ RunConfig) error { - - if h.daemonInstaller.IsInstalled() { - err := h.stopVpn.Run(ctx, stopVpn.RunConfig{}) - if err != nil { - if errStatus, ok := status.FromError(err); ok { - if errStatus.Code() == codes.Unavailable { - fmt.Println(i18n.DaemonRemoveStopVpnUnavailable) - } - } - } - } - - err := h.daemonInstaller.Remove() - if errors.Is(err, daemonInstaller.ErrElevatedPrivileges) { - return nil - } - if err != nil { - return err - } - - fmt.Println(i18n.DaemonRemoveSuccess) - - return nil -} diff --git a/src/cliAction/serviceLogs/handler.go b/src/cliAction/serviceLogs/handler.go deleted file mode 100644 index 83f812cd..00000000 --- a/src/cliAction/serviceLogs/handler.go +++ /dev/null @@ -1,41 +0,0 @@ -package serviceLogs - -import ( - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -type Config struct { -} - -type Levels [8][2]string - -type RunConfig struct { - ProjectNameOrId string - ServiceName string - Limit uint32 - MinSeverity string - MsgType string - Format string - FormatTemplate string - Follow bool - Levels Levels -} - -type Handler struct { - config Config - httpClient *httpClient.Handler - apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient - sdkConfig sdkConfig.Config - LastMsgId string -} - -func New(config Config, httpClient *httpClient.Handler, apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient, sdkConfig sdkConfig.Config) *Handler { - return &Handler{ - config: config, - httpClient: httpClient, - apiGrpcClient: apiGrpcClient, - sdkConfig: sdkConfig, - } -} diff --git a/src/cliAction/serviceLogs/handler_getAppVersion.go b/src/cliAction/serviceLogs/handler_getAppVersion.go deleted file mode 100644 index 0d6d232d..00000000 --- a/src/cliAction/serviceLogs/handler_getAppVersion.go +++ /dev/null @@ -1,72 +0,0 @@ -package serviceLogs - -import ( - "context" - "fmt" - "net/http" - "time" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/utils/sdkConfig" - "github.com/zeropsio/zerops-go/dto/input/body" - "github.com/zeropsio/zerops-go/sdk" - "github.com/zeropsio/zerops-go/sdkBase" - "github.com/zeropsio/zerops-go/types" -) - -func (h *Handler) getAppVersionServiceId(ctx context.Context, sdkConfig sdkConfig.Config, clientId string, serviceId string) (string, error) { - zdk := sdk.New( - sdkBase.DefaultConfig(sdkBase.WithCustomEndpoint(sdkConfig.RegionUrl)), - &http.Client{Timeout: 1 * time.Minute}, - ) - - authorizedSdk := sdk.AuthorizeSdk(zdk, sdkConfig.Token) - var searchData []body.EsSearchItem - searchData = append(searchData, body.EsSearchItem{ - Name: "clientId", - Operator: "eq", - Value: types.String(clientId), - }, body.EsSearchItem{ - Name: "serviceStackId", - Operator: "eq", - Value: types.String(serviceId), - }, body.EsSearchItem{ - Name: "build.serviceStackId", - Operator: "ne", - Value: "", - }) - - var sortData []body.EsSortItem - sortData = append(sortData, body.EsSortItem{ - Name: "sequence", - Ascending: types.NewBoolNull(false), - }) - - response, err := authorizedSdk.PostAppVersionSearch(ctx, body.EsFilter{ - Search: searchData, - Sort: sortData, - Limit: types.NewIntNull(1), - }) - if err != nil { - return "", err - } - - resOutput, err := response.Output() - if err != nil { - return "", err - } - - if len(resOutput.Items) == 0 { - return "", fmt.Errorf("%s", i18n.LogNoBuildFound) - } - - app := resOutput.Items[0] - status := app.Status - if status == UPLOADING || app.Build == nil { - return "", fmt.Errorf("%s", i18n.LogBuildStatusUploading) - } - - id, _ := app.Build.ServiceStackId.Get() - - return string(id), nil -} diff --git a/src/cliAction/serviceLogs/handler_getContainerId.go b/src/cliAction/serviceLogs/handler_getContainerId.go deleted file mode 100644 index ed682d49..00000000 --- a/src/cliAction/serviceLogs/handler_getContainerId.go +++ /dev/null @@ -1,72 +0,0 @@ -package serviceLogs - -import ( - "context" - "fmt" - "net/http" - "time" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/utils/sdkConfig" - "github.com/zeropsio/zerops-go/dto/input/body" - "github.com/zeropsio/zerops-go/sdk" - "github.com/zeropsio/zerops-go/sdkBase" - "github.com/zeropsio/zerops-go/types" -) - -func (h *Handler) getContainerId(ctx context.Context, sdkConfig sdkConfig.Config, clientId string, serviceId string, containerIndex int) (string, error) { - zdk := sdk.New( - sdkBase.DefaultConfig(sdkBase.WithCustomEndpoint(sdkConfig.RegionUrl)), - &http.Client{Timeout: 1 * time.Minute}, - ) - - authorizedSdk := sdk.AuthorizeSdk(zdk, sdkConfig.Token) - - var searchData []body.EsSearchItem - searchData = append(searchData, body.EsSearchItem{ - Name: "clientId", - Operator: "eq", - Value: types.String(clientId), - }, body.EsSearchItem{ - Name: "serviceStackId", - Operator: "eq", - Value: types.String(serviceId), - }) - - var sortData []body.EsSortItem - sortData = append(sortData, body.EsSortItem{ - Name: "number", - Ascending: types.NewBoolNull(true), - }) - - response, err := authorizedSdk.PostContainerSearch(ctx, body.EsFilter{ - Search: searchData, - Sort: sortData, - }) - if err != nil { - return "", err - } - - resOutput, err := response.Output() - if err != nil { // TODO parse meta data - return "", err - } - containers := resOutput.Items - count := len(containers) - - if count == 0 { - return "", fmt.Errorf("%s", i18n.LogNoContainerFound) - } - if count < containerIndex { - verb, plural := "are", "s" - if count < 2 { - verb, plural = "is", "" - } - msg := fmt.Sprintf(i18n.LogTooFewContainers, verb, count, plural) - return "", fmt.Errorf("%s", msg) - } - - containerId := containers[containerIndex-1].Id - - return string(containerId), nil -} diff --git a/src/cliAction/serviceLogs/handler_getNameSourceContainerId.go b/src/cliAction/serviceLogs/handler_getNameSourceContainerId.go deleted file mode 100644 index faf7d0e3..00000000 --- a/src/cliAction/serviceLogs/handler_getNameSourceContainerId.go +++ /dev/null @@ -1,46 +0,0 @@ -package serviceLogs - -import ( - "fmt" - "strconv" - "strings" - - "github.com/zeropsio/zcli/src/i18n" -) - -func (h *Handler) getNameSourceContainerId(config RunConfig) (serviceName, source string, containerId int, err error) { - sn := config.ServiceName - source = RUNTIME - - if !strings.Contains(sn, AT) { - return sn, source, 0, nil - } - split := strings.Split(sn, AT) - if len(split) > 2 { - return "", "", 0, fmt.Errorf("%s", i18n.LogServiceNameInvalid) - } - sn = split[0] - suffix := split[1] - - if strings.Contains(suffix, AT) { - return "", "", 0, fmt.Errorf("%s", i18n.LogServiceNameInvalid) - } - - if suffix == "" { - return sn, source, 0, nil - } - - containerIndex, err := strconv.Atoi(suffix) - if err == nil { - if containerIndex < 1 { - return "", "", 0, fmt.Errorf("%s", i18n.LogSuffixInvalid) - } - return sn, source, containerIndex, nil - } - - if strings.ToUpper(suffix) != BUILD { - return "", "", 0, fmt.Errorf("%s", i18n.LogSuffixInvalid) - } - source = BUILD - return sn, source, 0, nil -} diff --git a/src/cliAction/serviceLogs/handler_getServiceLogUrl.go b/src/cliAction/serviceLogs/handler_getServiceLogUrl.go deleted file mode 100644 index 6d894c75..00000000 --- a/src/cliAction/serviceLogs/handler_getServiceLogUrl.go +++ /dev/null @@ -1,46 +0,0 @@ -package serviceLogs - -import ( - "context" - "fmt" - "github.com/zeropsio/zerops-go/dto/output" - "net/http" - "strings" - "time" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/utils/sdkConfig" - "github.com/zeropsio/zerops-go/dto/input/path" - "github.com/zeropsio/zerops-go/sdk" - "github.com/zeropsio/zerops-go/sdkBase" - "github.com/zeropsio/zerops-go/types/uuid" -) - -func (h *Handler) getServiceLogResData(ctx context.Context, sdkConfig sdkConfig.Config, projectId string) (string, string, error) { - zdk := sdk.New( - sdkBase.DefaultConfig(sdkBase.WithCustomEndpoint(sdkConfig.RegionUrl)), - &http.Client{Timeout: 1 * time.Minute}, - ) - - authorizedSdk := sdk.AuthorizeSdk(zdk, sdkConfig.Token) - - response, err := authorizedSdk.GetProjectLog(ctx, path.ProjectId{Id: uuid.ProjectId(projectId)}) - if err != nil { - return "", "", err - } - - resOutput, err := response.Output() - if err != nil { - return "", "", fmt.Errorf("%s %v", i18n.LogAccessFailed, err) - } - method, url := getLogRequestData(resOutput) - return method, url, nil -} - -func getLogRequestData(resOutput output.ProjectLog) (string, string) { - outputUrl := string(resOutput.Url) - urlData := strings.Split(outputUrl, " ") - method, url := urlData[0], urlData[1] - - return method, url -} diff --git a/src/cliAction/serviceLogs/handler_run.go b/src/cliAction/serviceLogs/handler_run.go deleted file mode 100644 index 2b1f07f3..00000000 --- a/src/cliAction/serviceLogs/handler_run.go +++ /dev/null @@ -1,60 +0,0 @@ -package serviceLogs - -import ( - "context" - "fmt" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/utils/projectService" -) - -func (h *Handler) Run(ctx context.Context, config RunConfig) error { - inputs, err := h.checkInputValues(config) - if err != nil { - return err - } - - projectId, err := projectService.GetProjectId(ctx, h.apiGrpcClient, config.ProjectNameOrId, h.sdkConfig) - if err != nil { - return err - } - - serviceName, source, containerIndex, err := h.getNameSourceContainerId(config) - if err != nil { - return err - } - - service, err := projectService.GetServiceStack(ctx, h.apiGrpcClient, projectId, serviceName) - if err != nil { - return err - } - - serviceTypeCategory := service.GetServiceStackTypeInfo().GetServiceStackTypeCategory().String() - - if serviceTypeCategory != USER { - return fmt.Errorf("%s", i18n.LogRuntimeOnly) - } - serviceId := service.GetId() - containerId := "" - // defined by user, can be 1 or higher - if containerIndex > 0 { - containerId, err = h.getContainerId(ctx, h.sdkConfig, service.Project.ClientId, serviceId, containerIndex) - if err != nil { - return err - } - } - - logServiceId := serviceId - if source == BUILD { - logServiceId, err = h.getAppVersionServiceId(ctx, h.sdkConfig, service.Project.ClientId, serviceId) - if err != nil { - return err - } - } - - if err = h.printLogs(ctx, config, inputs, containerId, logServiceId, projectId); err != nil { - return err - } - - return nil -} diff --git a/src/cliAction/startStopDelete/handler.go b/src/cliAction/startStopDelete/handler.go deleted file mode 100644 index ad65f66d..00000000 --- a/src/cliAction/startStopDelete/handler.go +++ /dev/null @@ -1,50 +0,0 @@ -package startStopDelete - -import ( - "context" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -type Config struct { -} - -type Method func(ctx context.Context, projectId string, serviceId string) (string, error) - -type CmdType struct { - Start string // message for cmd start - Finish string // message for cmd end - Execute Method -} - -type RunConfig struct { - ProjectNameOrId string - ServiceName string - Confirm bool - ParentCmd constants.ParentCmd - CmdData CmdType -} - -func (c *RunConfig) getCmdProps() (string, string, Method) { - cd := c.CmdData - return cd.Start, cd.Finish, cd.Execute -} - -type Handler struct { - config Config - httpClient *httpClient.Handler - apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient - sdkConfig sdkConfig.Config -} - -func New(config Config, httpClient *httpClient.Handler, apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient, sdkConfig sdkConfig.Config) *Handler { - return &Handler{ - config: config, - httpClient: httpClient, - apiGrpcClient: apiGrpcClient, - sdkConfig: sdkConfig, - } -} diff --git a/src/cliAction/startStopDelete/handler_confirm.go b/src/cliAction/startStopDelete/handler_confirm.go deleted file mode 100644 index b65b0341..00000000 --- a/src/cliAction/startStopDelete/handler_confirm.go +++ /dev/null @@ -1,45 +0,0 @@ -package startStopDelete - -import ( - "fmt" - "strings" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" -) - -func askForConfirmation(parent constants.ParentCmd) bool { - if parent == constants.Project { - fmt.Print(i18n.ProjectDeleteConfirm) - } else { - fmt.Print(i18n.ServiceDeleteConfirm) - } - - var response string - - _, err := fmt.Scan(&response) - if err != nil { - fmt.Println(err) - return false - } - - resp := strings.ToLower(response) - if resp == "y" || resp == "yes" { - return true - } else if resp == "n" || resp == "no" { - return false - } else { - return askForConfirmation(parent) - } -} - -func (c RunConfig) getConfirm() string { - if !c.Confirm { - // run confirm dialogue - shouldDelete := askForConfirmation(c.ParentCmd) - if !shouldDelete { - return i18n.DeleteCanceledByUser - } - } - return "" -} diff --git a/src/cliAction/startStopDelete/handler_project.go b/src/cliAction/startStopDelete/handler_project.go deleted file mode 100644 index 1a863f39..00000000 --- a/src/cliAction/startStopDelete/handler_project.go +++ /dev/null @@ -1,42 +0,0 @@ -package startStopDelete - -import ( - "context" - - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" -) - -func (h *Handler) ProjectStart(ctx context.Context, projectId string, _ string) (string, error) { - startProjectResponse, err := h.apiGrpcClient.PutProjectStart(ctx, &zBusinessZeropsApiProtocol.PutProjectStartRequest{ - Id: projectId, - }) - if err := proto.BusinessError(startProjectResponse, err); err != nil { - return "", err - } - - return startProjectResponse.GetOutput().GetId(), nil -} - -func (h *Handler) ProjectStop(ctx context.Context, projectId string, _ string) (string, error) { - stopProjectResponse, err := h.apiGrpcClient.PutProjectStop(ctx, &zBusinessZeropsApiProtocol.PutProjectStopRequest{ - Id: projectId, - }) - if err := proto.BusinessError(stopProjectResponse, err); err != nil { - return "", err - } - - return stopProjectResponse.GetOutput().GetId(), nil -} - -func (h *Handler) ProjectDelete(ctx context.Context, projectId string, _ string) (string, error) { - deleteProjectResponse, err := h.apiGrpcClient.DeleteProject(ctx, &zBusinessZeropsApiProtocol.DeleteProjectRequest{ - Id: projectId, - }) - - if err := proto.BusinessError(deleteProjectResponse, err); err != nil { - return "", err - } - - return deleteProjectResponse.GetOutput().GetId(), nil -} diff --git a/src/cliAction/startStopDelete/handler_runCmd.go b/src/cliAction/startStopDelete/handler_runCmd.go deleted file mode 100644 index 5dd517b7..00000000 --- a/src/cliAction/startStopDelete/handler_runCmd.go +++ /dev/null @@ -1,57 +0,0 @@ -package startStopDelete - -import ( - "context" - "fmt" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/utils/processChecker" - "github.com/zeropsio/zcli/src/utils/projectService" -) - -func (h *Handler) Run(ctx context.Context, config RunConfig) error { - projectId, err := projectService.GetProjectId(ctx, h.apiGrpcClient, config.ProjectNameOrId, h.sdkConfig) - if err != nil { - return err - } - var serviceId string - - if config.ParentCmd == constants.Service { - serviceId, err = projectService.GetServiceId(ctx, h.apiGrpcClient, projectId, config.ServiceName) - if err != nil { - return err - } - } - - err = h.runCmd(ctx, config, projectId, serviceId) - if err != nil { - return err - } - return nil -} - -func (h *Handler) runCmd(ctx context.Context, config RunConfig, projectId string, serviceId string) error { - - startMsg, finishMsg, execute := config.getCmdProps() - msg := config.getConfirm() - if len(msg) > 0 { - fmt.Println(msg) - return nil - } - fmt.Println(startMsg + i18n.ProcessInit) - - processId, err := execute(ctx, projectId, serviceId) - if err != nil { - return err - } - - err = processChecker.CheckProcess(ctx, processId, h.apiGrpcClient) - if err != nil { - return err - } - - fmt.Println(constants.Success + finishMsg + i18n.Success) - - return nil -} diff --git a/src/cliAction/startStopDelete/handler_service.go b/src/cliAction/startStopDelete/handler_service.go deleted file mode 100644 index c17364df..00000000 --- a/src/cliAction/startStopDelete/handler_service.go +++ /dev/null @@ -1,41 +0,0 @@ -package startStopDelete - -import ( - "context" - - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" -) - -func (h *Handler) ServiceStart(ctx context.Context, _ string, serviceId string) (string, error) { - startServiceResponse, err := h.apiGrpcClient.PutServiceStackStart(ctx, &zBusinessZeropsApiProtocol.PutServiceStackStartRequest{ - Id: serviceId, - }) - if err := proto.BusinessError(startServiceResponse, err); err != nil { - return "", err - } - - return startServiceResponse.GetOutput().GetId(), nil -} - -func (h *Handler) ServiceStop(ctx context.Context, _ string, serviceId string) (string, error) { - stopServiceResponse, err := h.apiGrpcClient.PutServiceStackStop(ctx, &zBusinessZeropsApiProtocol.PutServiceStackStopRequest{ - Id: serviceId, - }) - if err := proto.BusinessError(stopServiceResponse, err); err != nil { - return "", err - } - - return stopServiceResponse.GetOutput().GetId(), nil -} - -func (h *Handler) ServiceDelete(ctx context.Context, _ string, serviceId string) (string, error) { - deleteServiceResponse, err := h.apiGrpcClient.DeleteServiceStack(ctx, &zBusinessZeropsApiProtocol.DeleteServiceStackRequest{ - Id: serviceId, - }) - if err := proto.BusinessError(deleteServiceResponse, err); err != nil { - return "", err - } - - return deleteServiceResponse.GetOutput().GetId(), nil -} diff --git a/src/cliAction/startVpn/handler.go b/src/cliAction/startVpn/handler.go deleted file mode 100644 index 014def2f..00000000 --- a/src/cliAction/startVpn/handler.go +++ /dev/null @@ -1,42 +0,0 @@ -package startVpn - -import ( - "github.com/zeropsio/zcli/src/daemonInstaller" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -type Config struct { - GrpcApiAddress string - VpnAddress string -} - -type RunConfig struct { - ProjectNameOrId string - Token string - Mtu uint32 - CaCertificateUrl string - PreferredPortMin uint32 - PreferredPortMax uint32 -} - -type Handler struct { - config Config - apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient - daemonInstaller *daemonInstaller.Handler - sdkConfig sdkConfig.Config -} - -func New( - config Config, - apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient, - daemonInstaller *daemonInstaller.Handler, - sdkConfig sdkConfig.Config, -) *Handler { - return &Handler{ - config: config, - apiGrpcClient: apiGrpcClient, - daemonInstaller: daemonInstaller, - sdkConfig: sdkConfig, - } -} diff --git a/src/cliAction/startVpn/handler_run.go b/src/cliAction/startVpn/handler_run.go deleted file mode 100644 index ec326597..00000000 --- a/src/cliAction/startVpn/handler_run.go +++ /dev/null @@ -1,105 +0,0 @@ -package startVpn - -import ( - "context" - "errors" - "fmt" - "time" - - "github.com/peterh/liner" - - "github.com/zeropsio/zcli/src/daemonInstaller" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/daemon" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils" - "github.com/zeropsio/zcli/src/utils/projectService" -) - -func (h *Handler) Run(ctx context.Context, config RunConfig) error { - - userInfoResponse, err := h.apiGrpcClient.GetUserInfo(ctx, &zBusinessZeropsApiProtocol.GetUserInfoRequest{}) - if err := proto.BusinessError(userInfoResponse, err); err != nil { - return err - } - userId := userInfoResponse.GetOutput().GetId() - - projectId, err := projectService.GetProjectId(ctx, h.apiGrpcClient, config.ProjectNameOrId, h.sdkConfig) - if err != nil { - return err - } - - err = h.tryStartVpn(ctx, projectId, userId, config) - if err != nil { - return err - } - - return nil -} - -func (h *Handler) tryStartVpn(ctx context.Context, projectId string, userId string, config RunConfig) error { - - zeropsDaemonClient, closeFn, err := daemon.CreateClient(ctx) - if err != nil { - return err - } - defer closeFn() - - response, err := zeropsDaemonClient.StartVpn(ctx, &daemon.StartVpnRequest{ - ApiAddress: h.config.GrpcApiAddress, - VpnAddress: h.config.VpnAddress, - ProjectId: projectId, - Token: config.Token, - Mtu: config.Mtu, - UserId: userId, - CaCertificateUrl: config.CaCertificateUrl, - PreferredPortMin: config.PreferredPortMin, - PreferredPortMax: config.PreferredPortMax, - }) - daemonInstalled, err := proto.DaemonError(err) - if err != nil { - return err - } - if !daemonInstalled { - fmt.Println(i18n.VpnDaemonUnavailable) - - line := liner.NewLiner() - defer line.Close() - line.SetCtrlCAborts(true) - - fmt.Println(i18n.VpnStartInstallDaemonPrompt) - for { - if answer, err := line.Prompt("y/n "); err == nil { - if answer == "n" { - return errors.New(i18n.VpnStartTerminatedByUser) - } else if answer == "y" { - err := h.daemonInstaller.Install() - - if errors.Is(err, daemonInstaller.ErrElevatedPrivileges) { - return nil - } - - if err != nil { - return err - } - fmt.Println(i18n.DaemonInstallSuccess) - - // let's wait for daemon start - time.Sleep(3 * time.Second) - return h.tryStartVpn(ctx, projectId, userId, config) - } else { - fmt.Println(i18n.VpnStartUserIsUnableToWriteYorN) - continue - } - } else if err == liner.ErrPromptAborted { - return errors.New(i18n.VpnStartTerminatedByUser) - } else { - return err - } - } - } - - utils.PrintVpnStatus(response) - return nil -} diff --git a/src/cliAction/statusVpn/handler.go b/src/cliAction/statusVpn/handler.go deleted file mode 100644 index 89988378..00000000 --- a/src/cliAction/statusVpn/handler.go +++ /dev/null @@ -1,51 +0,0 @@ -package statusVpn - -import ( - "context" - "fmt" - - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/daemon" - - "github.com/zeropsio/zcli/src/i18n" - - "github.com/zeropsio/zcli/src/utils" -) - -type Config struct { -} - -type RunConfig struct { -} - -type Handler struct { - config Config - zeropsDaemonClient daemon.ZeropsDaemonProtocolClient -} - -func New( - config Config, - zeropsDaemonClient daemon.ZeropsDaemonProtocolClient, -) *Handler { - return &Handler{ - config: config, - zeropsDaemonClient: zeropsDaemonClient, - } -} - -func (h *Handler) Run(ctx context.Context, _ RunConfig) error { - - response, err := h.zeropsDaemonClient.StatusVpn(ctx, &daemon.StatusVpnRequest{}) - daemonInstalled, err := proto.DaemonError(err) - if err != nil { - return err - } - - if !daemonInstalled { - fmt.Println(i18n.VpnDaemonUnavailable) - return nil - } - - utils.PrintVpnStatus(response) - return nil -} diff --git a/src/cliAction/stopVpn/handler.go b/src/cliAction/stopVpn/handler.go deleted file mode 100644 index 340b4d51..00000000 --- a/src/cliAction/stopVpn/handler.go +++ /dev/null @@ -1,56 +0,0 @@ -package stopVpn - -import ( - "context" - "fmt" - - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/daemon" - - "github.com/zeropsio/zcli/src/i18n" -) - -type Config struct { -} - -type RunConfig struct { -} - -type Handler struct { - config Config - zeropsDaemonClient daemon.ZeropsDaemonProtocolClient -} - -func New( - config Config, - zeropsDaemonClient daemon.ZeropsDaemonProtocolClient, -) *Handler { - return &Handler{ - config: config, - zeropsDaemonClient: zeropsDaemonClient, - } -} - -func (h *Handler) Run(ctx context.Context, _ RunConfig) error { - - response, err := h.zeropsDaemonClient.StopVpn(ctx, &daemon.StopVpnRequest{}) - daemonInstalled, err := proto.DaemonError(err) - if err != nil { - return err - } - - if !daemonInstalled { - fmt.Println(i18n.VpnDaemonUnavailable) - return nil - } - - if response.GetTunnelState() == daemon.TunnelState_TUNNEL_SET_INACTIVE { - fmt.Println(i18n.VpnStopSuccess) - if response.GetAdditionalInfo() != "" { - fmt.Println(i18n.VpnStopAdditionalInfo) - fmt.Println(response.GetAdditionalInfo()) - } - } - - return nil -} diff --git a/src/cliStorage/handler.go b/src/cliStorage/handler.go index 3b1a1b57..d49d16fb 100644 --- a/src/cliStorage/handler.go +++ b/src/cliStorage/handler.go @@ -1,13 +1,19 @@ package cliStorage -import "github.com/zeropsio/zcli/src/utils/storage" +import ( + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/region" + "github.com/zeropsio/zcli/src/storage" + "github.com/zeropsio/zerops-go/types/uuid" +) type Handler struct { *storage.Handler[Data] } type Data struct { - ProjectId string - ServerIp string - Token string + Token string + RegionData region.RegionItem + ScopeProjectId uuid.ProjectIdNull + VpnKeys map[uuid.ProjectId]entity.VpnKey } diff --git a/src/cmd/args.go b/src/cmd/args.go deleted file mode 100644 index 86d54bcd..00000000 --- a/src/cmd/args.go +++ /dev/null @@ -1,41 +0,0 @@ -package cmd - -import ( - "fmt" - - "github.com/zeropsio/zcli/src/i18n" - - "github.com/spf13/cobra" -) - -func MinimumNArgs(num int) cobra.PositionalArgs { - return customPositionalArgs(cobra.MinimumNArgs(num)) -} - -func ExactNArgs(num int) cobra.PositionalArgs { - return customPositionalArgs(cobra.ExactArgs(num)) -} - -func customPositionalArgs(fn cobra.PositionalArgs) cobra.PositionalArgs { - return func(cmd *cobra.Command, args []string) error { - err := fn(cmd, args) - if err != nil { - return fmt.Errorf("%w\nUsage: %s", err, buildUsage(cmd)) - } - return nil - } -} - -func buildUsage(cmd *cobra.Command) string { - parent := cmd.Parent() - var parentUsage string - if parent != nil { - parentUsage = buildUsage(parent) - parentUsage += " " - } - return parentUsage + cmd.Use -} - -func helpText(add string) string { - return i18n.DisplayHelp + add -} diff --git a/src/cmd/bucket.go b/src/cmd/bucket.go deleted file mode 100644 index fdde1923..00000000 --- a/src/cmd/bucket.go +++ /dev/null @@ -1,27 +0,0 @@ -package cmd - -import ( - "errors" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/i18n" -) - -func bucketCmd() *cobra.Command { - cmd := &cobra.Command{Use: "bucket", Short: i18n.CmdBucket} - - cmd.AddCommand(bucketZeropsCmd(), bucketS3Cmd()) - cmd.Flags().BoolP("help", "h", false, helpText(i18n.GroupHelp)) - return cmd -} - -func getXAmzAcl(cmd *cobra.Command) (string, error) { - xAmzAcl := params.GetString(cmd, "x-amz-acl") - switch xAmzAcl { - case "", "private", "public-read", "public-read-write", "authenticated-read": - return xAmzAcl, nil - } - - return "", errors.New(i18n.BucketGenericXAmzAclInvalid) -} diff --git a/src/cmd/bucketS3.go b/src/cmd/bucketS3.go deleted file mode 100644 index 8dbebcce..00000000 --- a/src/cmd/bucketS3.go +++ /dev/null @@ -1,75 +0,0 @@ -package cmd - -import ( - "context" - "errors" - "os" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/region" -) - -func bucketS3Cmd() *cobra.Command { - cmd := &cobra.Command{Use: "s3", Short: i18n.CmdBucketS3} - - cmd.AddCommand(bucketS3CreateCmd(), bucketS3DeleteCmd()) - cmd.Flags().BoolP("help", "h", false, helpText(i18n.GroupHelp)) - return cmd -} - -func getRegion(ctx context.Context, cmd *cobra.Command) (region.Data, error) { - retriever, err := createRegionRetriever(ctx) - if err != nil { - return region.Data{}, err - } - - // prefer region from command parameter or env - selectedRegion := params.GetString(cmd, "region") - - // if not provided, try to use the region user is logged to - if selectedRegion == "" { - reg, err := retriever.RetrieveFromFile() - if err != nil { - return region.Data{}, err - } - if reg.Name != "" { - return reg, nil - } - } - - // if no region is found, get a default region - regionURL := params.GetString(cmd, "regionURL") - return retriever.RetrieveFromURL(regionURL, selectedRegion) -} - -func getAccessKeys(cmd *cobra.Command, serviceName string) (string, string, error) { - accessKeyId := params.GetString(cmd, "accessKeyId") - secretAccessKey := params.GetString(cmd, "secretAccessKey") - - // only one of the flags is set - if (accessKeyId == "" && secretAccessKey != "") || (accessKeyId != "" && secretAccessKey == "") { - return "", "", errors.New(i18n.BucketS3FlagBothMandatory) - } - - if accessKeyId == "" && secretAccessKey == "" { - if val, ok := os.LookupEnv(serviceName + "_accessKeyId"); ok { - accessKeyId = val - } - if val, ok := os.LookupEnv(serviceName + "_secretAccessKey"); ok { - secretAccessKey = val - } - - // only one of the env variables was set - if (accessKeyId == "" && secretAccessKey != "") || (accessKeyId != "" && secretAccessKey == "") { - return "", "", errors.New(i18n.BucketS3EnvBothMandatory) - } - } - - if accessKeyId == "" || secretAccessKey == "" { - return "", "", errors.New(i18n.BucketS3FlagBothMandatory) - } - - return accessKeyId, secretAccessKey, nil -} diff --git a/src/cmd/bucketS3Create.go b/src/cmd/bucketS3Create.go deleted file mode 100644 index 0df2a1dd..00000000 --- a/src/cmd/bucketS3Create.go +++ /dev/null @@ -1,71 +0,0 @@ -package cmd - -import ( - "context" - "fmt" - "strings" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/bucket/s3" - "github.com/zeropsio/zcli/src/i18n" -) - -func bucketS3CreateCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "create serviceName bucketName [flags]", - Short: i18n.CmdBucketCreate, - Args: ExactNArgs(2), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - xAmzAcl, err := getXAmzAcl(cmd) - if err != nil { - return err - } - - accessKeyId, secretAccessKey, err := getAccessKeys(cmd, args[0]) - if err != nil { - return err - } - - reg, err := getRegion(ctx, cmd) - if err != nil { - return err - } - - bucketName := fmt.Sprintf("%s.%s", strings.ToLower(accessKeyId), args[1]) - - fmt.Printf(i18n.BucketCreateCreatingDirect, bucketName) - fmt.Println(i18n.BucketGenericBucketNamePrefixed) - - b := bucketS3.New(bucketS3.Config{ - S3StorageAddress: reg.S3StorageAddress, - }) - return b.Create(ctx, bucketS3.RunConfig{ - ServiceStackName: args[0], - BucketName: bucketName, - XAmzAcl: xAmzAcl, - AccessKeyId: accessKeyId, - SecretAccessKey: secretAccessKey, - }) - }, - } - params.RegisterString(cmd, "x-amz-acl", "", i18n.BucketGenericXAmzAcl) - params.RegisterString(cmd, "accessKeyId", "", i18n.BucketS3AccessKeyId) - params.RegisterString(cmd, "secretAccessKey", "", i18n.BucketS3SecretAccessKey) - params.RegisterString(cmd, "region", "", i18n.BucketS3Region) - - params.RegisterString(cmd, "regionURL", defaultRegionUrl, i18n.RegionUrlFlag) - cmd.Flags().BoolP("help", "h", false, helpText(i18n.BucketCreateHelp)) - cmd.SetHelpFunc(func(command *cobra.Command, strings []string) { - if err := command.Flags().MarkHidden("regionURL"); err != nil { - return - } - command.Parent().HelpFunc()(command, strings) - }) - - return cmd -} diff --git a/src/cmd/bucketS3Delete.go b/src/cmd/bucketS3Delete.go deleted file mode 100644 index 05a46487..00000000 --- a/src/cmd/bucketS3Delete.go +++ /dev/null @@ -1,65 +0,0 @@ -package cmd - -import ( - "context" - "fmt" - "strings" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/bucket/s3" - "github.com/zeropsio/zcli/src/i18n" -) - -func bucketS3DeleteCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "delete serviceName bucketName [flags]", - Short: i18n.CmdBucketDelete, - Args: ExactNArgs(2), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - accessKeyId, secretAccessKey, err := getAccessKeys(cmd, args[0]) - if err != nil { - return err - } - - reg, err := getRegion(ctx, cmd) - if err != nil { - return err - } - - bucketName := fmt.Sprintf("%s.%s", strings.ToLower(accessKeyId), args[1]) - - fmt.Printf(i18n.BucketDeleteDeletingDirect, bucketName) - fmt.Println(i18n.BucketGenericBucketNamePrefixed) - - b := bucketS3.New(bucketS3.Config{ - S3StorageAddress: reg.S3StorageAddress, - }) - return b.Delete(ctx, bucketS3.RunConfig{ - ServiceStackName: args[0], - BucketName: bucketName, - AccessKeyId: accessKeyId, - SecretAccessKey: secretAccessKey, - }) - }, - } - params.RegisterString(cmd, "x-amz-acl", "", i18n.BucketGenericXAmzAcl) - params.RegisterString(cmd, "accessKeyId", "", i18n.BucketS3AccessKeyId) - params.RegisterString(cmd, "secretAccessKey", "", i18n.BucketS3SecretAccessKey) - params.RegisterString(cmd, "region", "", i18n.BucketS3Region) - - params.RegisterString(cmd, "regionURL", defaultRegionUrl, i18n.RegionUrlFlag) - cmd.Flags().BoolP("help", "h", false, helpText(i18n.BucketDeleteHelp)) - cmd.SetHelpFunc(func(command *cobra.Command, strings []string) { - if err := command.Flags().MarkHidden("regionURL"); err != nil { - return - } - command.Parent().HelpFunc()(command, strings) - }) - - return cmd -} diff --git a/src/cmd/bucketZerops.go b/src/cmd/bucketZerops.go deleted file mode 100644 index d4661d5c..00000000 --- a/src/cmd/bucketZerops.go +++ /dev/null @@ -1,15 +0,0 @@ -package cmd - -import ( - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/i18n" -) - -func bucketZeropsCmd() *cobra.Command { - cmd := &cobra.Command{Use: "zerops", Short: i18n.CmdBucketZerops} - - cmd.AddCommand(bucketZeropsCreateCmd(), bucketZeropsDeleteCmd()) - cmd.Flags().BoolP("help", "h", false, helpText(i18n.GroupHelp)) - return cmd -} diff --git a/src/cmd/bucketZeropsCreate.go b/src/cmd/bucketZeropsCreate.go deleted file mode 100644 index 81acbf1d..00000000 --- a/src/cmd/bucketZeropsCreate.go +++ /dev/null @@ -1,81 +0,0 @@ -package cmd - -import ( - "context" - "time" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/bucket/zerops" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -func bucketZeropsCreateCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "create projectNameOrId serviceName bucketName [flags]", - Short: i18n.CmdBucketCreate, - Args: ExactNArgs(3), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - xAmzAcl, err := getXAmzAcl(cmd) - if err != nil { - return err - } - - storage, err := createCliStorage() - if err != nil { - return err - } - - token, err := getToken(storage) - if err != nil { - return err - } - - region, err := createRegionRetriever(ctx) - if err != nil { - return err - } - - reg, err := region.RetrieveFromFile() - if err != nil { - return err - } - - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( - ctx, - reg.GrpcApiAddress, - token, - ) - if err != nil { - return err - } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - b := bucketZerops.New(bucketZerops.Config{}, client, apiGrpcClient, sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}) - return b.Create(ctx, bucketZerops.RunConfig{ - ProjectNameOrId: args[0], - ServiceStackName: args[1], - BucketName: args[2], - XAmzAcl: xAmzAcl, - }) - }, - } - params.RegisterString(cmd, "x-amz-acl", "", i18n.BucketGenericXAmzAcl) - - cmd.Flags().BoolP("help", "h", false, helpText(i18n.BucketCreateHelp)) - return cmd -} diff --git a/src/cmd/bucketZeropsDelete.go b/src/cmd/bucketZeropsDelete.go deleted file mode 100644 index c53c7ee7..00000000 --- a/src/cmd/bucketZeropsDelete.go +++ /dev/null @@ -1,74 +0,0 @@ -package cmd - -import ( - "context" - "time" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/bucket/zerops" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -func bucketZeropsDeleteCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "delete projectNameOrId serviceName bucketName [flags]", - Short: i18n.CmdBucketDelete, - Args: ExactNArgs(3), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - - token, err := getToken(storage) - if err != nil { - return err - } - - region, err := createRegionRetriever(ctx) - if err != nil { - return err - } - - reg, err := region.RetrieveFromFile() - if err != nil { - return err - } - - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( - ctx, - reg.GrpcApiAddress, - token, - ) - if err != nil { - return err - } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - b := bucketZerops.New(bucketZerops.Config{}, client, apiGrpcClient, sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}) - return b.Delete(ctx, bucketZerops.RunConfig{ - ProjectNameOrId: args[0], - ServiceStackName: args[1], - BucketName: args[2], - }) - }, - } - - cmd.Flags().BoolP("help", "h", false, helpText(i18n.BucketDeleteHelp)) - return cmd -} diff --git a/src/cmd/daemon.go b/src/cmd/daemon.go deleted file mode 100644 index b3b2b0b0..00000000 --- a/src/cmd/daemon.go +++ /dev/null @@ -1,23 +0,0 @@ -package cmd - -import ( - "github.com/zeropsio/zcli/src/i18n" - - "github.com/spf13/cobra" -) - -func daemonCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "daemon", - Short: i18n.CmdDaemon, - SilenceUsage: true, - } - - cmd.AddCommand(daemonRunCmd()) - cmd.AddCommand(daemonInstallCmd()) - cmd.AddCommand(daemonRemoveCmd()) - - cmd.Flags().BoolP("help", "h", false, helpText(i18n.GroupHelp)) - - return cmd -} diff --git a/src/cmd/daemonInstall.go b/src/cmd/daemonInstall.go deleted file mode 100644 index 768ba3c5..00000000 --- a/src/cmd/daemonInstall.go +++ /dev/null @@ -1,37 +0,0 @@ -package cmd - -import ( - "context" - - "github.com/zeropsio/zcli/src/cliAction/installDaemon" - - "github.com/spf13/cobra" - "github.com/zeropsio/zcli/src/daemonInstaller" - "github.com/zeropsio/zcli/src/i18n" -) - -func daemonInstallCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "install", - Short: i18n.CmdDaemonInstall, - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(cmd.Context()) - regSignals(cancel) - - installer, err := daemonInstaller.New(daemonInstaller.Config{}) - if err != nil { - return err - } - - return installDaemon.New( - installDaemon.Config{}, - installer, - ). - Run(ctx, installDaemon.RunConfig{}) - }, - } - - cmd.PersistentFlags().BoolP("help", "h", false, helpText(i18n.DaemonInstallHelp)) - return cmd -} diff --git a/src/cmd/daemonRemove.go b/src/cmd/daemonRemove.go deleted file mode 100644 index e6713352..00000000 --- a/src/cmd/daemonRemove.go +++ /dev/null @@ -1,53 +0,0 @@ -package cmd - -import ( - "context" - - "github.com/zeropsio/zcli/src/proto/daemon" - - "github.com/zeropsio/zcli/src/cliAction/removeDaemon" - "github.com/zeropsio/zcli/src/cliAction/stopVpn" - "github.com/zeropsio/zcli/src/daemonInstaller" - - "github.com/zeropsio/zcli/src/i18n" - - "github.com/spf13/cobra" -) - -func daemonRemoveCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "remove", - Short: i18n.CmdDaemonRemove, - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(cmd.Context()) - regSignals(cancel) - - daemonClient, daemonCloseFunc, err := daemon.CreateClient(ctx) - if err != nil { - return err - } - defer daemonCloseFunc() - - installer, err := daemonInstaller.New(daemonInstaller.Config{}) - if err != nil { - return err - } - - stopVpn := stopVpn.New( - stopVpn.Config{}, - daemonClient, - ) - - return removeDaemon.New( - removeDaemon.Config{}, - installer, - stopVpn, - ). - Run(ctx, removeDaemon.RunConfig{}) - }, - } - - cmd.PersistentFlags().BoolP("help", "h", false, helpText(i18n.DaemonRemoveHelp)) - return cmd -} diff --git a/src/cmd/daemonRun.go b/src/cmd/daemonRun.go deleted file mode 100644 index c3ae5596..00000000 --- a/src/cmd/daemonRun.go +++ /dev/null @@ -1,84 +0,0 @@ -package cmd - -import ( - "context" - "sync" - - "github.com/spf13/cobra" - "github.com/zeropsio/zcli/src/i18n" -) - -func daemonRunCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "run", - Short: i18n.CmdDaemonRun, - SilenceUsage: true, - RunE: run, - } - - cmd.PersistentFlags().BoolP("help", "h", false, helpText(i18n.DaemonRunHelp)) - return cmd -} - -func daemonRun(ctx context.Context) error { - cancelCtx, cancel := context.WithCancel(ctx) - regSignals(cancel) - - if err := prepareEnvironment(); err != nil { - return err - } - - logger, err := createLogger() - if err != nil { - return err - } - - storage, err := createDaemonStorage() - if err != nil { - return err - } - - var wg sync.WaitGroup - - vpnHandler := createVpn(storage, logger) - - if err := vpnHandler.ReloadVpn(cancelCtx); err != nil { - return err - } - - grpcServer, err := createDaemonGrpcServer(vpnHandler) - if err != nil { - return err - } - - wg.Add(1) - go func() { - defer wg.Done() - err := grpcServer.Run(cancelCtx) - if err != nil { - logger.Error(err) - cancel() - } - }() - - vpnProlong := createVpnProlong(storage, logger) - wg.Add(1) - go func() { - defer wg.Done() - err := vpnProlong.Run(cancelCtx) - if err != nil { - logger.Error(err) - cancel() - } - }() - - logger.Info("daemon is running") - - wg.Wait() - - vpnHandler.DnsClean(context.Background()) - - logger.Info("daemon ended") - - return nil -} diff --git a/src/cmd/daemonRun_other.go b/src/cmd/daemonRun_other.go deleted file mode 100644 index a932fc81..00000000 --- a/src/cmd/daemonRun_other.go +++ /dev/null @@ -1,34 +0,0 @@ -//go:build !windows -// +build !windows - -package cmd - -import ( - "os" - "path/filepath" - - "github.com/spf13/cobra" - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/daemonServer" - "github.com/zeropsio/zcli/src/vpn" -) - -func createDaemonGrpcServer(vpn *vpn.Handler) (*daemonServer.Handler, error) { - socketDir := filepath.Dir(constants.DaemonAddress) - err := os.MkdirAll(socketDir, 0755) - if err != nil { - return nil, err - } - - return daemonServer.New(daemonServer.Config{ - Socket: constants.DaemonAddress, - }, vpn), nil -} - -func prepareEnvironment() error { - return nil -} - -func run(cmd *cobra.Command, _ []string) error { - return daemonRun(cmd.Context()) -} diff --git a/src/cmd/daemonRun_windows.go b/src/cmd/daemonRun_windows.go deleted file mode 100644 index 399462c5..00000000 --- a/src/cmd/daemonRun_windows.go +++ /dev/null @@ -1,84 +0,0 @@ -//go:build windows -// +build windows - -package cmd - -import ( - "context" - "errors" - "os" - "strings" - "sync" - - "github.com/judwhite/go-svc" - "github.com/spf13/cobra" - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/daemonServer" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/vpn" -) - -func createDaemonGrpcServer(vpn *vpn.Handler) (*daemonServer.Handler, error) { - return daemonServer.New(daemonServer.Config{ - Address: constants.DaemonAddress, - }, - vpn, - ), nil -} - -func prepareEnvironment() error { - path, found := os.LookupEnv("PATH") - if !found { - return errors.New(i18n.PathNotFound) - } - path = strings.Join(append(strings.Split(path, ";"), constants.WireguardPath), ";") - err := os.Setenv("PATH", path) - if err != nil { - return err - } - - err = os.MkdirAll(constants.DaemonInstallDir, 0777) - return err -} - -type program struct { - cmd *cobra.Command - args []string - err error - - wg sync.WaitGroup - cancel context.CancelFunc - ctx context.Context -} - -func (p *program) Init(environment svc.Environment) error { - return nil -} - -func (p *program) Start() error { - p.wg.Add(1) - go func() { - defer p.wg.Done() - defer p.cancel() - p.err = daemonRun(p.ctx) - }() - return nil -} - -func (p *program) Stop() error { - p.cancel() - p.wg.Wait() - return nil -} - -func run(cmd *cobra.Command, args []string) error { - pr := &program{ - cmd: cmd, - args: args, - } - pr.ctx, pr.cancel = context.WithCancel(cmd.Context()) - if err := svc.Run(pr); err != nil { - return err - } - return pr.err -} diff --git a/src/cmd/deploy.go b/src/cmd/deploy.go deleted file mode 100644 index 472826ee..00000000 --- a/src/cmd/deploy.go +++ /dev/null @@ -1,92 +0,0 @@ -package cmd - -import ( - "context" - "time" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/buildDeploy" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/archiveClient" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -func deployCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "deploy projectNameOrId serviceName pathToFileOrDir [pathToFileOrDir] [flags]", - Short: i18n.CmdDeployDesc, - Long: i18n.CmdDeployDesc + "\n\n" + i18n.DeployDescLong + "\n\n" + i18n.DeployHintPush, - SilenceUsage: true, - Args: MinimumNArgs(3), - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(cmd.Context()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - token, err := getToken(storage) - if err != nil { - return err - } - - region, err := createRegionRetriever(ctx) - if err != nil { - return err - } - - reg, err := region.RetrieveFromFile() - if err != nil { - return err - } - - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( - ctx, - reg.GrpcApiAddress, - token, - ) - if err != nil { - return err - } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - arch := archiveClient.New(archiveClient.Config{}) - - return buildDeploy.New( - buildDeploy.Config{}, - client, - arch, - apiGrpcClient, - sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}, - ).Deploy(ctx, buildDeploy.RunConfig{ - ArchiveFilePath: params.GetString(cmd, "archiveFilePath"), - WorkingDir: params.GetString(cmd, "workingDir"), - VersionName: params.GetString(cmd, "versionName"), - ZeropsYamlPath: params.GetString(cmd, "zeropsYamlPath"), - ProjectNameOrId: args[0], - ServiceStackName: args[1], - PathsForPacking: args[2:], - }) - }, - } - - params.RegisterString(cmd, "workingDir", "./", i18n.BuildWorkingDir) - params.RegisterString(cmd, "archiveFilePath", "", i18n.BuildArchiveFilePath) - params.RegisterString(cmd, "versionName", "", i18n.BuildVersionName) - params.RegisterString(cmd, "zeropsYamlPath", "", i18n.ZeropsYamlLocation) - - cmd.Flags().BoolP("help", "h", false, helpText(i18n.DeployHelp)) - - return cmd -} diff --git a/src/cmd/di.go b/src/cmd/di.go deleted file mode 100644 index 61aa17fa..00000000 --- a/src/cmd/di.go +++ /dev/null @@ -1,90 +0,0 @@ -package cmd - -import ( - "context" - "errors" - "time" - - "github.com/zeropsio/zcli/src/cliStorage" - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/daemonStorage" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/prolongVpn" - "github.com/zeropsio/zcli/src/region" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/logger" - "github.com/zeropsio/zcli/src/utils/storage" - "github.com/zeropsio/zcli/src/vpn" -) - -func getToken(storage *cliStorage.Handler) (string, error) { - token := BuiltinToken - if storage.Data().Token != "" { - token = storage.Data().Token - } - if token == "" { - return token, errors.New(i18n.UnauthenticatedUser) - } - return token, nil -} - -func createLogger() (*logger.Handler, error) { - return logger.New(logger.Config{ - FilePath: constants.LogFilePath, - }) -} - -func createCliStorage() (*cliStorage.Handler, error) { - filePath, err := constants.CliLoginData() - if err != nil { - return nil, err - } - s, err := storage.New[cliStorage.Data]( - storage.Config{ - FilePath: filePath, - }, - ) - return &cliStorage.Handler{Handler: s}, err -} - -func createDaemonStorage() (*daemonStorage.Handler, error) { - s, err := storage.New[daemonStorage.Data]( - storage.Config{ - FilePath: constants.DaemonStorageFilePath, - }, - ) - return &daemonStorage.Handler{Handler: s}, err -} - -func createRegionRetriever(ctx context.Context) (*region.Handler, error) { - filepath, err := constants.CliRegionData() - if err != nil { - return nil, err - } - s, err := storage.New[region.Data]( - storage.Config{FilePath: filepath}, - ) - return region.New(httpClient.New(ctx, httpClient.Config{HttpTimeout: time.Minute * 5}), s), err -} - -func createVpn( - storage *daemonStorage.Handler, - logger *logger.Handler, -) *vpn.Handler { - return vpn.New( - vpn.Config{ - VpnCheckInterval: time.Second * 3, - VpnCheckRetryCount: 3, - VpnCheckTimeout: time.Second * 60, - }, - logger, - storage, - ) -} - -func createVpnProlong( - storage *daemonStorage.Handler, - logger *logger.Handler, -) *prolongVpn.Handler { - return prolongVpn.New(storage, logger) -} diff --git a/src/cmd/init.go b/src/cmd/init.go deleted file mode 100644 index f4a291ec..00000000 --- a/src/cmd/init.go +++ /dev/null @@ -1,79 +0,0 @@ -package cmd - -import ( - _ "embed" - "errors" - "fmt" - "os" - "regexp" - "text/template" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/i18n" -) - -//go:embed resources/zerops_yml.tmpl -var zeropsYml string - -var initTemplate = template.Must(template.New("zeropsYml").Parse(zeropsYml)) - -type templateData struct { - Name string -} - -var nameRegex = regexp.MustCompile("^[a-z][a-z0-9]{0,39}$") - -func initCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "init [name]", - Short: "initializes zerops project", - Long: `initializes zerops project by creating empty zerops.yml`, - Example: "init app", - Args: cobra.MaximumNArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - var name string - if len(args) == 1 { - name = args[0] - } - if name == "" { - fmt.Printf(i18n.PromptEnterZeropsServiceName + "\n\n") - promptName, err := prompt[string](i18n.PromptName) - if err != nil { - return err - } - name = promptName - } - if !nameRegex.MatchString(name) { - return errors.New(i18n.PromptInvalidHostname + " See: https://docs.zerops.io/documentation/export-import/project-service-export-import.html#yaml-specification") - } - file, err := os.Create("zerops.yml") - if err != nil { - return err - } - defer file.Close() - return initTemplate.Execute( - file, - templateData{ - Name: name, - }, - ) - }, - SilenceUsage: true, - } - - return cmd -} - -func prompt[T any](prompt string) (T, error) { - fmt.Print("\t" + prompt + ": ") - var t T - n, err := fmt.Scan(&t) - if err != nil { - return t, err - } - if n == 0 { - return t, errors.New(i18n.PromptInvalidInput) - } - return t, nil -} diff --git a/src/cmd/log.go b/src/cmd/log.go deleted file mode 100644 index 65003807..00000000 --- a/src/cmd/log.go +++ /dev/null @@ -1,20 +0,0 @@ -package cmd - -import ( - "github.com/zeropsio/zcli/src/i18n" - - "github.com/spf13/cobra" -) - -func logCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "log", - Short: i18n.CmdLog, - SilenceUsage: true, - } - - cmd.AddCommand(logShowCmd()) - cmd.Flags().BoolP("help", "h", false, helpText(i18n.GroupHelp)) - - return cmd -} diff --git a/src/cmd/logShow.go b/src/cmd/logShow.go deleted file mode 100644 index 00855db2..00000000 --- a/src/cmd/logShow.go +++ /dev/null @@ -1,65 +0,0 @@ -package cmd - -import ( - "fmt" - "io" - "os" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" - - "github.com/spf13/cobra" -) - -func logShowCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "show", - Short: i18n.CmdLogShow, - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - - f, err := os.OpenFile(constants.LogFilePath, os.O_RDONLY, 0777) - if err != nil { - return err - } - - line := "" - var cursor int64 = 0 - stat, _ := f.Stat() - filesize := stat.Size() - - lines := []string{} - for { - cursor -= 1 - f.Seek(cursor, io.SeekEnd) - - char := make([]byte, 1) - f.Read(char) - - if cursor != -1 && (char[0] == 10 || char[0] == 13) { // stop if we find a line - if len(lines) > 10 { - break - } - lines = append([]string{line}, lines...) - line = "" - } - - line = fmt.Sprintf("%s%s", string(char), line) // there is more efficient way - - if cursor == -filesize { // stop if we are at the begining - lines = append([]string{line}, lines...) - break - } - } - - for _, line := range lines { - fmt.Print(line) - } - - return nil - }, - } - - cmd.Flags().BoolP("help", "h", false, helpText(i18n.LogShowHelp)) - return cmd -} diff --git a/src/cmd/login.go b/src/cmd/login.go index 72c01f34..d5f5094c 100644 --- a/src/cmd/login.go +++ b/src/cmd/login.go @@ -4,97 +4,107 @@ import ( "context" "time" - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/login" + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/cliStorage" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/constants" + "github.com/zeropsio/zcli/src/httpClient" "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" + "github.com/zeropsio/zcli/src/region" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" ) -func loginCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "login token [flags]\n OR\n zcli login username password [flags]", - Short: i18n.CmdLogin, - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) (err error) { - ctx, cancel := context.WithCancel(cmd.Context()) - regSignals(cancel) +func loginCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("login"). + Short(i18n.T(i18n.CmdLogin)). + StringFlag("regionUrl", constants.DefaultRegionUrl, i18n.T(i18n.RegionUrlFlag), cmdBuilder.HiddenFlag()). + StringFlag("region", "", i18n.T(i18n.RegionFlag), cmdBuilder.HiddenFlag()). + HelpFlag(i18n.T(i18n.LoginHelp)). + Arg("token"). + GuestRunFunc(func(ctx context.Context, cmdData *cmdBuilder.GuestCmdData) error { + uxBlocks := cmdData.UxBlocks + + regionRetriever := region.New(httpClient.New(ctx, httpClient.Config{HttpTimeout: time.Minute * 5})) - storage, err := createCliStorage() + regions, err := regionRetriever.RetrieveAllFromURL(ctx, cmdData.Params.GetString("regionUrl")) if err != nil { return err } - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Second * 60, - }) - - region, err := createRegionRetriever(ctx) + reg, err := getLoginRegion(ctx, uxBlocks, regions, cmdData.Params.GetString("region")) if err != nil { return err } - regionURL := params.GetString(cmd, "regionURL") - regionName := params.GetString(cmd, "region") + restApiClient := zeropsRestApiClient.NewAuthorizedClient(cmdData.Args["token"][0], "https://"+reg.Address) - reg, err := region.RetrieveFromURLAndSave(regionURL, regionName) + response, err := restApiClient.GetUserInfo(ctx) if err != nil { return err } - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) + output, err := response.Output() + if err != nil { + return err + } - email, password, token := getCredentials(cmd, args) - - return login.New( - login.Config{ - RestApiAddress: reg.RestApiAddress, - GrpcApiAddress: reg.GrpcApiAddress, - }, - storage, - client, - apiClientFactory, - ).Run(ctx, login.RunConfig{ - ZeropsEmail: email, - ZeropsPassword: password, - ZeropsToken: token, + _, err = cmdData.CliStorage.Update(func(data cliStorage.Data) cliStorage.Data { + data.Token = cmdData.Args["token"][0] + data.RegionData = reg + return data }) - }, - } + if err != nil { + return err + } + + uxBlocks.PrintInfo(styles.SuccessLine(i18n.T(i18n.LoginSuccess, output.FullName, output.Email))) - params.RegisterString(cmd, "zeropsLogin", "", i18n.ZeropsLoginFlag) - params.RegisterString(cmd, "zeropsPassword", "", i18n.ZeropsPwdFlag) - params.RegisterString(cmd, "zeropsToken", "", i18n.ZeropsTokenFlag) - params.RegisterString(cmd, "region", "", i18n.RegionFlag) - params.RegisterString(cmd, "regionURL", defaultRegionUrl, i18n.RegionUrlFlag) + return nil + }) +} - cmd.Flags().BoolP("help", "h", false, helpText(i18n.LoginHelp)) - cmd.SetHelpFunc(func(command *cobra.Command, strings []string) { - if err := command.Flags().MarkHidden("regionURL"); err != nil { - return +func getLoginRegion( + ctx context.Context, + uxBlocks uxBlock.UxBlocks, + regions []region.RegionItem, + selectedRegion string, +) (region.RegionItem, error) { + if selectedRegion != "" { + for _, reg := range regions { + if reg.Name == selectedRegion { + return reg, nil + } } - command.Parent().HelpFunc()(command, strings) - }) + return region.RegionItem{}, errors.New(i18n.T(i18n.RegionNotFound, selectedRegion)) + } - return cmd -} + for _, reg := range regions { + if reg.IsDefault { + return reg, nil + } + } + + header := (&uxBlock.TableRow{}).AddStringCells(i18n.T(i18n.RegionTableColumnName)) -func getCredentials(cmd *cobra.Command, args []string) (login, password, token string) { - login = params.GetString(cmd, "zeropsLogin") - password = params.GetString(cmd, "zeropsPassword") - token = params.GetString(cmd, "zeropsToken") - if len(args) == 2 { - login = args[0] - password = args[1] - token = "" + tableBody := &uxBlock.TableBody{} + for _, reg := range regions { + tableBody.AddStringsRow( + reg.Name, + ) } - if len(args) == 1 { - token = args[0] - login = "" - password = "" + + regionIndex, err := uxBlocks.Select( + ctx, + tableBody, + uxBlock.SelectLabel(i18n.T(i18n.ProjectSelectorPrompt)), + uxBlock.SelectTableHeader(header), + ) + if err != nil { + return region.RegionItem{}, err } - return + + return regions[regionIndex[0]], nil } diff --git a/src/cmd/project.go b/src/cmd/project.go index 69ef15dd..477c8da6 100644 --- a/src/cmd/project.go +++ b/src/cmd/project.go @@ -1,14 +1,19 @@ package cmd import ( - "github.com/spf13/cobra" + "github.com/zeropsio/zcli/src/cmdBuilder" "github.com/zeropsio/zcli/src/i18n" ) -func projectCmd() *cobra.Command { - cmd := &cobra.Command{Use: "project", Short: i18n.CmdProject} - - cmd.AddCommand(projectStartCmd(), projectStopCmd(), projectDeleteCmd(), projectImportCmd()) - cmd.Flags().BoolP("help", "h", false, helpText(i18n.GroupHelp)) - return cmd +func projectCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("project"). + Short(i18n.T(i18n.CmdProject)). + HelpFlag(i18n.T(i18n.ProjectHelp)). + AddChildrenCmd(projectListCmd()). + AddChildrenCmd(projectStartCmd()). + AddChildrenCmd(projectStopCmd()). + AddChildrenCmd(projectDeleteCmd()). + AddChildrenCmd(projectServiceImportCmd()). + AddChildrenCmd(projectImportCmd()) } diff --git a/src/cmd/projectDelete.go b/src/cmd/projectDelete.go index b6e00237..9cf092b1 100644 --- a/src/cmd/projectDelete.go +++ b/src/cmd/projectDelete.go @@ -2,82 +2,62 @@ package cmd import ( "context" - "time" - "github.com/spf13/cobra" + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/dto/input/path" - "github.com/zeropsio/zcli/src/cliAction/startStopDelete" - "github.com/zeropsio/zcli/src/constants" "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" ) -func projectDeleteCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "delete projectNameOrId [flags]", - Short: i18n.CmdProjectDelete, - Args: ExactNArgs(1), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - token, err := getToken(storage) - if err != nil { - return err +func projectDeleteCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("delete"). + Short(i18n.T(i18n.CmdProjectDelete)). + ScopeLevel(scope.Project). + Arg(scope.ProjectArgName, cmdBuilder.OptionalArg()). + BoolFlag("confirm", false, i18n.T(i18n.ConfirmFlag)). + HelpFlag(i18n.T(i18n.ProjectDeleteHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + if !cmdData.Params.GetBool("confirm") { + err := uxHelpers.YesNoPromptDestructive(ctx, cmdData.UxBlocks, i18n.T(i18n.ProjectDeleteConfirm, cmdData.Project.Name)) + if err != nil { + return err + } } - region, err := createRegionRetriever(ctx) + deleteProjectResponse, err := cmdData.RestApiClient.DeleteProject( + ctx, + path.ProjectId{ + Id: cmdData.Project.ID, + }, + ) if err != nil { return err } - reg, err := region.RetrieveFromFile() + responseOutput, err := deleteProjectResponse.Output() if err != nil { return err } - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( + processId := responseOutput.Id + + err = uxHelpers.ProcessCheckWithSpinner( ctx, - reg.GrpcApiAddress, - token, + cmdData.UxBlocks, + []uxHelpers.Process{{ + F: uxHelpers.CheckZeropsProcess(processId, cmdData.RestApiClient), + RunningMessage: i18n.T(i18n.ProjectDeleting), + ErrorMessageMessage: i18n.T(i18n.ProjectDeleting), + SuccessMessage: i18n.T(i18n.ProjectDeleted), + }}, ) if err != nil { return err } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - handler := startStopDelete.New(startStopDelete.Config{}, client, apiGrpcClient, sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}) - - cmdData := startStopDelete.CmdType{ - Start: i18n.ProjectDelete, - Finish: i18n.ProjectDeleted, - Execute: handler.ProjectDelete, - } - - return handler.Run(ctx, startStopDelete.RunConfig{ - ProjectNameOrId: args[0], - Confirm: params.GetBool(cmd, "confirm"), - ParentCmd: constants.Project, - CmdData: cmdData, - }) - }, - } - params.RegisterBool(cmd, "confirm", false, i18n.ConfirmDelete) - cmd.Flags().BoolP("help", "h", false, helpText(i18n.ProjectDeleteHelp)) - return cmd + return nil + }) } diff --git a/src/cmd/projectImport.go b/src/cmd/projectImport.go index ce6eb819..bbdb382a 100644 --- a/src/cmd/projectImport.go +++ b/src/cmd/projectImport.go @@ -2,78 +2,108 @@ package cmd import ( "context" - "time" - "github.com/zeropsio/zcli/src/cliAction/importProjectService" - "github.com/zeropsio/zcli/src/constants" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/entity/repository" "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" - - "github.com/spf13/cobra" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zcli/src/yamlReader" + "github.com/zeropsio/zerops-go/dto/input/body" + "github.com/zeropsio/zerops-go/types" + "github.com/zeropsio/zerops-go/types/uuid" ) -func projectImportCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "import pathToImportFile [flags]", - Short: i18n.CmdProjectImport, - Long: i18n.ProjectImportLong, - Args: ExactNArgs(1), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - storage, err := createCliStorage() +const projectImportArgName = "importYamlPath" + +func projectImportCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("project-import"). + Short(i18n.T(i18n.CmdProjectImport)). + Long(i18n.T(i18n.CmdProjectImportLong)). + Arg(projectImportArgName). + StringFlag("orgId", "", i18n.T(i18n.OrgIdFlag)). + StringFlag("workingDie", "./", i18n.T(i18n.BuildWorkingDir)). + HelpFlag(i18n.T(i18n.ProjectImportHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + uxBlocks := cmdData.UxBlocks + + orgId, err := getOrgId(ctx, cmdData) if err != nil { return err } - token, err := getToken(storage) + + yamlContent, err := yamlReader.ReadContent( + uxBlocks, + cmdData.Args[projectImportArgName][0], + cmdData.Params.GetString("workingDir"), + ) if err != nil { return err } - region, err := createRegionRetriever(ctx) + importProjectResponse, err := cmdData.RestApiClient.PostProjectImport( + ctx, + body.ProjectImport{ + ClientId: orgId, + Yaml: types.Text(yamlContent), + }, + ) if err != nil { return err } - reg, err := region.RetrieveFromFile() + responseOutput, err := importProjectResponse.Output() if err != nil { return err } - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( - ctx, - reg.GrpcApiAddress, - token, - ) + var processes []uxHelpers.Process + for _, service := range responseOutput.ServiceStacks { + for _, process := range service.Processes { + processes = append(processes, uxHelpers.Process{ + F: uxHelpers.CheckZeropsProcess(process.Id, cmdData.RestApiClient), + RunningMessage: service.Name.String() + ": " + process.ActionName.String(), + ErrorMessageMessage: service.Name.String() + ": " + process.ActionName.String(), + SuccessMessage: service.Name.String() + ": " + process.ActionName.String(), + }) + } + } + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.ServiceCount, len(responseOutput.ServiceStacks)))) + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.QueuedProcesses, len(processes)))) + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.CoreServices))) + + err = uxHelpers.ProcessCheckWithSpinner(ctx, cmdData.UxBlocks, processes) if err != nil { return err } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - return importProjectService.New( - importProjectService.Config{}, client, apiGrpcClient, sdkConfig.Config{}, - ).Import(ctx, importProjectService.RunConfig{ - WorkingDir: constants.WorkingDir, - ImportYamlPath: args[0], - ClientId: params.GetString(cmd, "clientId"), - ParentCmd: constants.Project, - }) - }, + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.ProjectImported))) + + return nil + }) +} + +func getOrgId(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) (uuid.ClientId, error) { + orgId := uuid.ClientId(cmdData.Params.GetString("orgId")) + if orgId != "" { + return orgId, nil } - params.RegisterString(cmd, "clientId", "", i18n.ClientId) - cmd.Flags().BoolP("help", "h", false, helpText(i18n.ProjectImportHelp)) + orgs, err := repository.GetAllOrgs(ctx, cmdData.RestApiClient) + if err != nil { + return "", err + } + + if len(orgs) == 1 { + return orgs[0].ID, nil + } + + selectedOrg, err := uxHelpers.PrintOrgSelector(ctx, cmdData.UxBlocks, cmdData.RestApiClient) + if err != nil { + return "", err + } - return cmd + return selectedOrg.ID, nil } diff --git a/src/cmd/projectList.go b/src/cmd/projectList.go new file mode 100644 index 00000000..e98c7688 --- /dev/null +++ b/src/cmd/projectList.go @@ -0,0 +1,24 @@ +package cmd + +import ( + "context" + + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxHelpers" +) + +func projectListCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("list"). + Short(i18n.T(i18n.CmdProjectList)). + HelpFlag(i18n.T(i18n.ProjectListHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + err := uxHelpers.PrintProjectList(ctx, cmdData.UxBlocks, cmdData.RestApiClient) + if err != nil { + return err + } + + return nil + }) +} diff --git a/src/cmd/projectServiceImport.go b/src/cmd/projectServiceImport.go new file mode 100644 index 00000000..961d760e --- /dev/null +++ b/src/cmd/projectServiceImport.go @@ -0,0 +1,73 @@ +package cmd + +import ( + "context" + + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zcli/src/yamlReader" + "github.com/zeropsio/zerops-go/dto/input/body" + "github.com/zeropsio/zerops-go/types" +) + +const serviceImportArgName = "importYamlPath" + +func projectServiceImportCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("service-import"). + Short(i18n.T(i18n.CmdServiceImport)). + ScopeLevel(scope.Project). + Arg(serviceImportArgName). + HelpFlag(i18n.T(i18n.ProjectServiceImportHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + uxBlocks := cmdData.UxBlocks + + yamlContent, err := yamlReader.ReadContent(uxBlocks, cmdData.Args[serviceImportArgName][0], "./") + if err != nil { + return err + } + + importServiceResponse, err := cmdData.RestApiClient.PostServiceStackImport( + ctx, + body.ServiceStackImport{ + ProjectId: cmdData.Project.ID, + Yaml: types.Text(yamlContent), + }, + ) + if err != nil { + return err + } + + responseOutput, err := importServiceResponse.Output() + if err != nil { + return err + } + + var processes []uxHelpers.Process + for _, service := range responseOutput.ServiceStacks { + for _, process := range service.Processes { + processes = append(processes, uxHelpers.Process{ + F: uxHelpers.CheckZeropsProcess(process.Id, cmdData.RestApiClient), + RunningMessage: service.Name.String() + ": " + process.ActionName.String(), + ErrorMessageMessage: service.Name.String() + ": " + process.ActionName.String(), + SuccessMessage: service.Name.String() + ": " + process.ActionName.String(), + }) + } + } + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.ServiceCount, len(responseOutput.ServiceStacks)))) + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.QueuedProcesses, len(processes)))) + + err = uxHelpers.ProcessCheckWithSpinner(ctx, cmdData.UxBlocks, processes) + if err != nil { + return err + } + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.ServiceImported))) + + return nil + }) +} diff --git a/src/cmd/projectStart.go b/src/cmd/projectStart.go index d92852aa..4967b509 100644 --- a/src/cmd/projectStart.go +++ b/src/cmd/projectStart.go @@ -2,81 +2,53 @@ package cmd import ( "context" - "time" - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/startStopDelete" - "github.com/zeropsio/zcli/src/constants" + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/dto/input/path" ) -func projectStartCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "start projectNameOrId [flags]", - Short: i18n.CmdProjectStart, - Args: ExactNArgs(1), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - token, err := getToken(storage) +func projectStartCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("start"). + Short(i18n.T(i18n.CmdProjectStart)). + ScopeLevel(scope.Project). + Arg(scope.ProjectArgName, cmdBuilder.OptionalArg()). + HelpFlag(i18n.T(i18n.ProjectStartHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + startProjectResponse, err := cmdData.RestApiClient.PutProjectStart( + ctx, + path.ProjectId{ + Id: cmdData.Project.ID, + }, + ) if err != nil { return err } - region, err := createRegionRetriever(ctx) + responseOutput, err := startProjectResponse.Output() if err != nil { return err } - reg, err := region.RetrieveFromFile() - if err != nil { - return err - } + processId := responseOutput.Id - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( + err = uxHelpers.ProcessCheckWithSpinner( ctx, - reg.GrpcApiAddress, - token, + cmdData.UxBlocks, + []uxHelpers.Process{{ + F: uxHelpers.CheckZeropsProcess(processId, cmdData.RestApiClient), + RunningMessage: i18n.T(i18n.ProjectStarting), + ErrorMessageMessage: i18n.T(i18n.ProjectStarting), + SuccessMessage: i18n.T(i18n.ProjectStarted), + }}, ) if err != nil { return err } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - handler := startStopDelete.New(startStopDelete.Config{}, client, apiGrpcClient, sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}) - - cmdData := startStopDelete.CmdType{ - Start: i18n.ProjectStart, - Finish: i18n.ProjectStarted, - Execute: handler.ProjectStart, - } - - return handler.Run(ctx, startStopDelete.RunConfig{ - ProjectNameOrId: args[0], - ParentCmd: constants.Project, - Confirm: true, - CmdData: cmdData, - }) - }, - } - cmd.Flags().BoolP("help", "h", false, helpText(i18n.ProjectStartHelp)) - return cmd + return nil + }) } diff --git a/src/cmd/projectStop.go b/src/cmd/projectStop.go index 841be6f8..83e5b364 100644 --- a/src/cmd/projectStop.go +++ b/src/cmd/projectStop.go @@ -2,81 +2,54 @@ package cmd import ( "context" - "time" - "github.com/spf13/cobra" + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/dto/input/path" - "github.com/zeropsio/zcli/src/cliAction/startStopDelete" - "github.com/zeropsio/zcli/src/constants" "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" ) -func projectStopCmd() *cobra.Command { - cmdStop := &cobra.Command{ - Use: "stop projectNameOrId [flags]", - Short: i18n.CmdProjectStop, - Args: ExactNArgs(1), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - token, err := getToken(storage) +func projectStopCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("stop"). + Short(i18n.T(i18n.CmdProjectStop)). + ScopeLevel(scope.Project). + Arg(scope.ProjectArgName, cmdBuilder.OptionalArg()). + HelpFlag(i18n.T(i18n.ProjectStopHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + stopProjectResponse, err := cmdData.RestApiClient.PutProjectStop( + ctx, + path.ProjectId{ + Id: cmdData.Project.ID, + }, + ) if err != nil { return err } - region, err := createRegionRetriever(ctx) + responseOutput, err := stopProjectResponse.Output() if err != nil { return err } - reg, err := region.RetrieveFromFile() - if err != nil { - return err - } + processId := responseOutput.Id - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( + err = uxHelpers.ProcessCheckWithSpinner( ctx, - reg.GrpcApiAddress, - token, + cmdData.UxBlocks, + []uxHelpers.Process{{ + F: uxHelpers.CheckZeropsProcess(processId, cmdData.RestApiClient), + RunningMessage: i18n.T(i18n.ProjectStopping), + ErrorMessageMessage: i18n.T(i18n.ProjectStopping), + SuccessMessage: i18n.T(i18n.ProjectStopped), + }}, ) if err != nil { return err } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - handler := startStopDelete.New(startStopDelete.Config{}, client, apiGrpcClient, sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}) - - cmdData := startStopDelete.CmdType{ - Start: i18n.ProjectStop, - Finish: i18n.ProjectStopped, - Execute: handler.ProjectStop, - } - - return handler.Run(ctx, startStopDelete.RunConfig{ - ProjectNameOrId: args[0], - ParentCmd: constants.Project, - Confirm: true, - CmdData: cmdData, - }) - }, - } - cmdStop.Flags().BoolP("help", "h", false, helpText(i18n.ProjectStopHelp)) - return cmdStop + return nil + }) } diff --git a/src/cmd/push.go b/src/cmd/push.go deleted file mode 100644 index e01622e0..00000000 --- a/src/cmd/push.go +++ /dev/null @@ -1,102 +0,0 @@ -package cmd - -import ( - "context" - "time" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/buildDeploy" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/archiveClient" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -func pushCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "push projectNameOrId serviceName [flags]", - Short: i18n.CmdPushDesc, - Long: i18n.CmdPushDesc + "\n\n" + i18n.PushDescLong, - Args: ExactNArgs(2), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(cmd.Context()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - token, err := getToken(storage) - if err != nil { - return err - } - - region, err := createRegionRetriever(ctx) - if err != nil { - return err - } - - reg, err := region.RetrieveFromFile() - if err != nil { - return err - } - - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( - ctx, - reg.GrpcApiAddress, - token, - ) - if err != nil { - return err - } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - arch := archiveClient.New(archiveClient.Config{ - DeployGitFolder: params.GetBool(cmd, "deployGitFolder"), - }) - - return buildDeploy.New( - buildDeploy.Config{}, - client, - arch, - apiGrpcClient, - sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}, - ).Push(ctx, buildDeploy.RunConfig{ - ArchiveFilePath: params.GetString(cmd, "archiveFilePath"), - WorkingDir: params.GetString(cmd, "workingDir"), - VersionName: params.GetString(cmd, "versionName"), - SourceName: params.GetString(cmd, "source"), - ProjectNameOrId: args[0], - ServiceStackName: args[1], - }) - }, - } - - params.RegisterString(cmd, "workingDir", "./", i18n.BuildWorkingDir) - params.RegisterString(cmd, "archiveFilePath", "", i18n.BuildArchiveFilePath) - params.RegisterString(cmd, "versionName", "", i18n.BuildVersionName) - params.RegisterString(cmd, "source", "", i18n.SourceName) - params.RegisterBool(cmd, "deployGitFolder", false, i18n.UploadGitFolder) - - cmd.Flags().BoolP("help", "h", false, helpText(i18n.PushHelp)) - - cmd.SetHelpFunc(func(command *cobra.Command, strings []string) { - err := command.Flags().MarkHidden("source") - if err != nil { - return - } - command.Parent().HelpFunc()(command, strings) - }) - - return cmd -} diff --git a/src/cmd/regionList.go b/src/cmd/regionList.go deleted file mode 100644 index 6d4135ec..00000000 --- a/src/cmd/regionList.go +++ /dev/null @@ -1,63 +0,0 @@ -package cmd - -import ( - "context" - "fmt" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/i18n" -) - -const defaultRegionUrl = "https://api.app.zerops.io/api/rest/public/region/zcli" - -func regionList() *cobra.Command { - cmd := &cobra.Command{ - Use: "region", - Short: i18n.CmdRegion, - } - - listCmd := &cobra.Command{ - Use: "list", - Short: i18n.CmdRegionList, - SilenceUsage: true, - Args: cobra.NoArgs, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(cmd.Context()) - regSignals(cancel) - - region, err := createRegionRetriever(ctx) - if err != nil { - return err - } - - regionURL := params.GetString(cmd, "regionURL") - regions, err := region.RetrieveAllFromURL(regionURL) - if err != nil { - return err - } - - for _, r := range regions { - fmt.Print(r.Name) - if r.IsDefault { - fmt.Print(" [default]") - } - fmt.Println() - } - return nil - }, - } - params.RegisterString(listCmd, "regionURL", defaultRegionUrl, "zerops region") - listCmd.Flags().BoolP("help", "h", false, helpText(i18n.RegionListHelp)) - - listCmd.SetHelpFunc(func(command *cobra.Command, strings []string) { - if err := command.Flags().MarkHidden("regionURL"); err != nil { - return - } - command.Parent().HelpFunc()(command, strings) - }) - cmd.AddCommand(listCmd) - - cmd.Flags().BoolP("help", "h", false, helpText(i18n.GroupHelp)) - return cmd -} diff --git a/src/cmd/resources/zerops_yml.tmpl b/src/cmd/resources/zerops_yml.tmpl deleted file mode 100644 index f39ce69e..00000000 --- a/src/cmd/resources/zerops_yml.tmpl +++ /dev/null @@ -1,28 +0,0 @@ -# Service hostname to which the application will be deployed. -{{ .Name }}: - # The part used for the build phase to produce a final application runtime. - build: - # Which technology should be used as a base one for creating a build container. - base: [ ] - # Which commands should be run to install additional or custom dependencies. - prepare: - # Which commands should be run to build the application. - build: - # Which files or directories of the application build should be stored for the next build. - cache: [] - # Which files and directories should be copied from a build container into a runtime container. - deploy: [] - # The part used to run the application runtime after a successful deployment. - run: - # Which commands should be run to install additional libraries or tools. - prepare: - # Which commands to run after a launch or each restart of a runtime container instance. - init: - # Replacement of template patterns in static files with environment variable values. - envReplace: - # Specification of files / folders to search for delimiters. - target: [ ] - # Specification of one or more delimiters (quote YAML special characters). - delimiter: [ ] - # A command that should start your service. - start: diff --git a/src/cmd/root.go b/src/cmd/root.go index aedb8152..5d5fac2f 100644 --- a/src/cmd/root.go +++ b/src/cmd/root.go @@ -1,69 +1,19 @@ package cmd import ( - "context" - "os" - "os/signal" - "syscall" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/support" - paramsPackage "github.com/zeropsio/zcli/src/utils/params" -) - -var ( - params *paramsPackage.Handler + "github.com/zeropsio/zcli/src/cmdBuilder" ) -var BuiltinToken string - func ExecuteCmd() error { - params = paramsPackage.New() - - rootCmd := &cobra.Command{ - Use: "zcli", - CompletionOptions: cobra.CompletionOptions{HiddenDefaultCmd: true}, - SilenceErrors: true, - } - - rootCmd.AddCommand(initCommand()) - rootCmd.AddCommand(deployCmd()) - rootCmd.AddCommand(pushCmd()) - rootCmd.AddCommand(vpnCmd()) - rootCmd.AddCommand(loginCmd()) - rootCmd.AddCommand(logCmd()) - rootCmd.AddCommand(daemonCmd()) - rootCmd.AddCommand(versionCmd()) - rootCmd.AddCommand(regionList()) - rootCmd.AddCommand(projectCmd()) - rootCmd.AddCommand(serviceCmd()) - rootCmd.AddCommand(bucketCmd()) - - rootCmd.Flags().BoolP("help", "h", false, helpText(i18n.GroupHelp)) - - err := params.InitViper() - if err != nil { - return err - } - - ctx := support.Context(context.Background()) - err = rootCmd.ExecuteContext(ctx) - if err != nil { - return err - } - - return nil -} - -func regSignals(contextCancel func()) { - sigs := make(chan os.Signal, 1) + builder := cmdBuilder.NewCmdBuilder() - signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) + builder.AddCommand(loginCmd()) + builder.AddCommand(versionCmd()) + builder.AddCommand(scopeCmd()) + builder.AddCommand(projectCmd()) + builder.AddCommand(serviceCmd()) + builder.AddCommand(statusCmd()) + builder.AddCommand(vpnCmd()) - go func() { - <-sigs - contextCancel() - }() + return builder.CreateAndExecuteRootCobraCmd() } diff --git a/src/cmd/scope.go b/src/cmd/scope.go new file mode 100644 index 00000000..e2a9b8d2 --- /dev/null +++ b/src/cmd/scope.go @@ -0,0 +1,15 @@ +package cmd + +import ( + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/i18n" +) + +func scopeCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("scope"). + Short(i18n.T(i18n.CmdScope)). + HelpFlag(i18n.T(i18n.ScopeHelp)). + AddChildrenCmd(scopeProjectCmd()). + AddChildrenCmd(scopeResetCmd()) +} diff --git a/src/cmd/scope/scope.go b/src/cmd/scope/scope.go new file mode 100644 index 00000000..91ce7309 --- /dev/null +++ b/src/cmd/scope/scope.go @@ -0,0 +1,11 @@ +package scope + +var Project *project +var Service *service + +func init() { + Project = &project{} + Service = &service{ + parent: Project, + } +} diff --git a/src/cmd/scope/scopeProject.go b/src/cmd/scope/scopeProject.go new file mode 100644 index 00000000..80e7eb5f --- /dev/null +++ b/src/cmd/scope/scopeProject.go @@ -0,0 +1,88 @@ +package scope + +import ( + "context" + + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/entity/repository" + "github.com/zeropsio/zcli/src/errorsx" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/errorCode" + "github.com/zeropsio/zerops-go/types/uuid" +) + +type project struct { +} + +const ProjectArgName = "projectId" + +func (p *project) GetParent() cmdBuilder.ScopeLevel { + return nil +} + +func (p *project) AddCommandFlags(cmd *cmdBuilder.Cmd) { + cmd.StringFlag(ProjectArgName, "", i18n.T(i18n.ProjectIdFlag)) +} + +func (p *project) LoadSelectedScope(ctx context.Context, cmd *cmdBuilder.Cmd, cmdData *cmdBuilder.LoggedUserCmdData) error { + infoText := i18n.SelectedProject + var project *entity.Project + var err error + + // project scope is set + if cmdData.CliStorage.Data().ScopeProjectId.Filled() { + projectId, _ := cmdData.CliStorage.Data().ScopeProjectId.Get() + + project, err = repository.GetProjectById(ctx, cmdData.RestApiClient, projectId) + if err != nil { + return errorsx.Convert( + err, + errorsx.ConvertInvalidUserInput("id", i18n.T(i18n.ErrorInvalidScopedProjectId)), + errorsx.ConvertErrorCode(errorCode.ProjectNotFound, i18n.T(i18n.ScopedProjectNotFound)), + ) + } + + infoText = i18n.ScopedProject + } + + if projectId, exists := cmdData.Args[ProjectArgName]; exists { + project, err = repository.GetProjectById(ctx, cmdData.RestApiClient, uuid.ProjectId(projectId[0])) + if err != nil { + return errorsx.Convert( + err, + errorsx.ConvertInvalidUserInput("id", i18n.T(i18n.ErrorInvalidProjectId)), + ) + } + + infoText = i18n.SelectedProject + } + + // service id is passed as a flag + if projectId := cmdData.Params.GetString(ProjectArgName); projectId != "" { + project, err = repository.GetProjectById(ctx, cmdData.RestApiClient, uuid.ProjectId(projectId)) + if err != nil { + return errorsx.Convert( + err, + errorsx.ConvertInvalidUserInput("id", i18n.T(i18n.ErrorInvalidProjectId)), + ) + } + + infoText = i18n.SelectedProject + } + + if project == nil { + // interactive selector of a project + project, err = uxHelpers.PrintProjectSelector(ctx, cmdData.UxBlocks, cmdData.RestApiClient) + if err != nil { + return err + } + } + + cmdData.Project = project + cmdData.UxBlocks.PrintInfo(styles.InfoWithValueLine(i18n.T(infoText), cmdData.Project.Name.String())) + + return nil +} diff --git a/src/cmd/scope/scopeService.go b/src/cmd/scope/scopeService.go new file mode 100644 index 00000000..f547b36f --- /dev/null +++ b/src/cmd/scope/scopeService.go @@ -0,0 +1,72 @@ +package scope + +import ( + "context" + + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/entity/repository" + "github.com/zeropsio/zcli/src/errorsx" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/types/uuid" +) + +type service struct { + parent cmdBuilder.ScopeLevel +} + +func (s *service) GetParent() cmdBuilder.ScopeLevel { + return s.parent +} + +const ServiceArgName = "serviceIdOrName" +const serviceFlagName = "serviceId" + +func (s *service) AddCommandFlags(cmd *cmdBuilder.Cmd) { + cmd.StringFlag(serviceFlagName, "", i18n.T(i18n.ServiceIdFlag)) +} + +func (s *service) LoadSelectedScope(ctx context.Context, _ *cmdBuilder.Cmd, cmdData *cmdBuilder.LoggedUserCmdData) error { + infoText := i18n.SelectedService + var service *entity.Service + var err error + + if serviceIdOrName, exists := cmdData.Args[ServiceArgName]; exists { + service, err = repository.GetServiceByIdOrName(ctx, cmdData.RestApiClient, cmdData.Project.ID, serviceIdOrName[0]) + if err != nil { + return errorsx.Convert( + err, + errorsx.ConvertInvalidUserInput("id", i18n.T(i18n.ErrorInvalidServiceIdOrName)), + ) + } + } + + // service id is passed as a flag + if serviceId := cmdData.Params.GetString(serviceFlagName); serviceId != "" { + service, err = repository.GetServiceById( + ctx, + cmdData.RestApiClient, + uuid.ServiceStackId(serviceId), + ) + if err != nil { + return errorsx.Convert( + err, + errorsx.ConvertInvalidUserInput("id", i18n.T(i18n.ErrorInvalidServiceId)), + ) + } + } + + // interactive selector of service + if service == nil { + service, err = uxHelpers.PrintServiceSelector(ctx, cmdData.UxBlocks, cmdData.RestApiClient, *cmdData.Project) + if err != nil { + return err + } + } + + cmdData.Service = service + cmdData.UxBlocks.PrintInfo(styles.InfoWithValueLine(i18n.T(infoText), cmdData.Service.Name.String())) + return nil +} diff --git a/src/cmd/scopeProject.go b/src/cmd/scopeProject.go new file mode 100644 index 00000000..e64437e8 --- /dev/null +++ b/src/cmd/scopeProject.go @@ -0,0 +1,69 @@ +package cmd + +import ( + "context" + + "github.com/zeropsio/zcli/src/cliStorage" + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/entity/repository" + "github.com/zeropsio/zcli/src/errorsx" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/errorCode" + "github.com/zeropsio/zerops-go/types/uuid" +) + +func scopeProjectCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("project"). + Short(i18n.T(i18n.CmdScopeProject)). + Arg(scope.ProjectArgName, cmdBuilder.OptionalArg()). + HelpFlag(i18n.T(i18n.ScopeProjectHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + projectId, projectSet := cmdData.CliStorage.Data().ScopeProjectId.Get() + if projectSet { + project, err := repository.GetProjectById(ctx, cmdData.RestApiClient, projectId) + if err != nil { + if errorsx.Check(err, errorsx.CheckErrorCode(errorCode.ProjectNotFound)) { + cmdData.UxBlocks.PrintWarning(styles.WarningLine(err.Error())) + } else { + return err + } + } else { + cmdData.UxBlocks.PrintInfo(styles.InfoWithValueLine(i18n.T(i18n.PreviouslyScopedProject), project.Name.String())) + } + } + + infoText := i18n.SelectedProject + var project *entity.Project + var err error + + if len(cmdData.Args) > 0 { + project, err = repository.GetProjectById(ctx, cmdData.RestApiClient, uuid.ProjectId(cmdData.Args["projectId"][0])) + if err != nil { + return err + } + } else { + // interactive selector of a project + project, err = uxHelpers.PrintProjectSelector(ctx, cmdData.UxBlocks, cmdData.RestApiClient) + if err != nil { + return err + } + } + + _, err = cmdData.CliStorage.Update(func(data cliStorage.Data) cliStorage.Data { + data.ScopeProjectId = project.ID.ProjectIdNull() + return data + }) + if err != nil { + return err + } + + cmdData.UxBlocks.PrintInfo(styles.InfoWithValueLine(i18n.T(infoText), project.Name.String())) + + return nil + }) +} diff --git a/src/cmd/scopeReset.go b/src/cmd/scopeReset.go new file mode 100644 index 00000000..e32291e5 --- /dev/null +++ b/src/cmd/scopeReset.go @@ -0,0 +1,31 @@ +package cmd + +import ( + "context" + + "github.com/zeropsio/zcli/src/cliStorage" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zerops-go/types/uuid" +) + +func scopeResetCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("reset"). + Short(i18n.T(i18n.CmdScopeReset)). + HelpFlag(i18n.T(i18n.ScopeResetHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + _, err := cmdData.CliStorage.Update(func(data cliStorage.Data) cliStorage.Data { + data.ScopeProjectId = uuid.ProjectIdNull{} + return data + }) + if err != nil { + return err + } + + cmdData.UxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.ScopeReset))) + + return nil + }) +} diff --git a/src/cmd/service.go b/src/cmd/service.go index ac3e4ae1..785a3ef2 100644 --- a/src/cmd/service.go +++ b/src/cmd/service.go @@ -1,14 +1,20 @@ package cmd import ( - "github.com/spf13/cobra" + "github.com/zeropsio/zcli/src/cmdBuilder" "github.com/zeropsio/zcli/src/i18n" ) -func serviceCmd() *cobra.Command { - cmd := &cobra.Command{Use: "service", Short: i18n.CmdService} - - cmd.AddCommand(serviceStartCmd(), serviceStopCmd(), serviceDeleteCmd(), serviceImportCmd(), serviceLogCmd()) - cmd.Flags().BoolP("help", "h", false, helpText(i18n.GroupHelp)) - return cmd +func serviceCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("service"). + Short(i18n.T(i18n.CmdService)). + HelpFlag(i18n.T(i18n.ServiceHelp)). + AddChildrenCmd(serviceDeleteCmd()). + AddChildrenCmd(serviceListCmd()). + AddChildrenCmd(serviceLogCmd()). + AddChildrenCmd(serviceStartCmd()). + AddChildrenCmd(serviceStopCmd()). + AddChildrenCmd(servicePushCmd()). + AddChildrenCmd(serviceDeployCmd()) } diff --git a/src/cmd/serviceDelete.go b/src/cmd/serviceDelete.go index 908a96f5..f975d1a7 100644 --- a/src/cmd/serviceDelete.go +++ b/src/cmd/serviceDelete.go @@ -2,84 +2,61 @@ package cmd import ( "context" - "time" - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/startStopDelete" - "github.com/zeropsio/zcli/src/constants" + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/dto/input/path" ) -func serviceDeleteCmd() *cobra.Command { - cmdDelete := &cobra.Command{ - Use: "delete projectNameOrId serviceName [flags]", - Short: i18n.CmdServiceDelete, - Args: ExactNArgs(2), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - token, err := getToken(storage) - if err != nil { - return err +func serviceDeleteCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("delete"). + Short(i18n.T(i18n.CmdServiceDelete)). + ScopeLevel(scope.Service). + Arg(scope.ServiceArgName, cmdBuilder.OptionalArg()). + BoolFlag("confirm", false, i18n.T(i18n.ConfirmFlag)). + HelpFlag(i18n.T(i18n.ServiceDeleteHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + if !cmdData.Params.GetBool("confirm") { + err := uxHelpers.YesNoPromptDestructive(ctx, cmdData.UxBlocks, i18n.T(i18n.ServiceDeleteConfirm, cmdData.Service.Name)) + if err != nil { + return err + } } - region, err := createRegionRetriever(ctx) + deleteServiceResponse, err := cmdData.RestApiClient.DeleteServiceStack( + ctx, + path.ServiceStackId{ + Id: cmdData.Service.ID, + }, + ) if err != nil { return err } - reg, err := region.RetrieveFromFile() + responseOutput, err := deleteServiceResponse.Output() if err != nil { return err } - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( + processId := responseOutput.Id + + err = uxHelpers.ProcessCheckWithSpinner( ctx, - reg.GrpcApiAddress, - token, + cmdData.UxBlocks, + []uxHelpers.Process{{ + F: uxHelpers.CheckZeropsProcess(processId, cmdData.RestApiClient), + RunningMessage: i18n.T(i18n.ServiceDeleting), + ErrorMessageMessage: i18n.T(i18n.ServiceDeleting), + SuccessMessage: i18n.T(i18n.ServiceDeleted), + }}, ) if err != nil { return err } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - handler := startStopDelete.New(startStopDelete.Config{}, client, apiGrpcClient, sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}) - - cmdData := startStopDelete.CmdType{ - Start: i18n.ServiceDelete, - Finish: i18n.ServiceDeleted, - Execute: handler.ServiceDelete, - } - - return handler.Run(ctx, startStopDelete.RunConfig{ - ProjectNameOrId: args[0], - ServiceName: args[1], - Confirm: params.GetBool(cmd, "confirm"), - ParentCmd: constants.Service, - CmdData: cmdData, - }) - }, - } - - params.RegisterBool(cmdDelete, "confirm", false, i18n.ConfirmDelete) - cmdDelete.Flags().BoolP("help", "h", false, helpText(i18n.ServiceDeleteHelp)) - return cmdDelete + return nil + }) } diff --git a/src/cmd/serviceDeploy.go b/src/cmd/serviceDeploy.go new file mode 100644 index 00000000..34720923 --- /dev/null +++ b/src/cmd/serviceDeploy.go @@ -0,0 +1,169 @@ +package cmd + +import ( + "context" + "encoding/base64" + "io" + "time" + + "github.com/zeropsio/zcli/src/archiveClient" + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/httpClient" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/dto/input/body" + "github.com/zeropsio/zerops-go/dto/input/path" + "github.com/zeropsio/zerops-go/types" +) + +func serviceDeployCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("deploy"). + Short(i18n.T(i18n.CmdDeployDesc)). + Long(i18n.T(i18n.CmdDeployDesc)+"\n\n"+i18n.T(i18n.DeployDescLong)+"\n\n"+i18n.T(i18n.DeployHintPush)). + ScopeLevel(scope.Service). + Arg("pathToFileOrDir", cmdBuilder.ArrayArg()). + StringFlag("workingDir", "./", i18n.T(i18n.BuildWorkingDir)). + StringFlag("archiveFilePath", "", i18n.T(i18n.BuildArchiveFilePath)). + StringFlag("versionName", "", i18n.T(i18n.BuildVersionName)). + StringFlag("zeropsYamlPath", "", i18n.T(i18n.ZeropsYamlLocation)). + BoolFlag("deployGitFolder", false, i18n.T(i18n.ZeropsYamlLocation)). + HelpFlag(i18n.T(i18n.ServiceDeployHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + uxBlocks := cmdData.UxBlocks + + arch := archiveClient.New(archiveClient.Config{ + DeployGitFolder: cmdData.Params.GetBool("deployGitFolder"), + }) + + configContent, err := getValidConfigContent( + uxBlocks, + cmdData.Params.GetString("workingDir"), + cmdData.Params.GetString("zeropsYamlPath"), + ) + if err != nil { + return err + } + + err = validateZeropsYamlContent(ctx, cmdData.RestApiClient, cmdData.Service, configContent) + if err != nil { + return err + } + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.BuildDeployCreatingPackageStart))) + + files, err := arch.FindFilesByRules( + uxBlocks, + cmdData.Params.GetString("workingDir"), + cmdData.Args["pathToFileOrDir"], + ) + if err != nil { + return err + } + + var reader io.Reader + pipeReader, writer := io.Pipe() + defer pipeReader.Close() + reader = pipeReader + + tarErrChan := make(chan error, 1) + + go arch.TarFiles(writer, files, tarErrChan) + + if cmdData.Params.GetString("archiveFilePath") != "" { + packageFile, err := openPackageFile( + cmdData.Params.GetString("archiveFilePath"), + cmdData.Params.GetString("workingDir"), + ) + if err != nil { + return err + } + reader = io.TeeReader(reader, packageFile) + } + + appVersion, err := createAppVersion( + ctx, + cmdData.RestApiClient, + cmdData.Service, + cmdData.Params.GetString("versionName"), + ) + if err != nil { + return err + } + + // TODO - janhajek merge with sdk client? + httpClient := httpClient.New(ctx, httpClient.Config{ + HttpTimeout: time.Minute * 15, + }) + + err = uxHelpers.ProcessCheckWithSpinner( + ctx, + cmdData.UxBlocks, + []uxHelpers.Process{{ + F: func(ctx context.Context) error { + if err := packageUpload(ctx, httpClient, appVersion.UploadUrl.String(), reader); err != nil { + // if an error occurred while packing the app, return that error + select { + case err := <-tarErrChan: + return err + default: + return err + } + } + + // wait for packing and saving to finish (should already be done after the package upload has finished) + if tarErr := <-tarErrChan; tarErr != nil { + return tarErr + } + + return nil + }, + RunningMessage: i18n.T(i18n.BuildDeployUploadingPackageStart), + ErrorMessageMessage: i18n.T(i18n.BuildDeployUploadPackageFailed), + SuccessMessage: i18n.T(i18n.BuildDeployUploadingPackageDone), + }}, + ) + if err != nil { + return err + } + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.BuildDeployDeployingStart))) + + deployResponse, err := cmdData.RestApiClient.PutAppVersionDeploy( + ctx, + path.AppVersionId{ + Id: appVersion.Id, + }, + body.PutAppVersionDeploy{ + ZeropsYaml: types.NewMediumTextNull(base64.StdEncoding.EncodeToString(configContent)), + }, + ) + if err != nil { + return err + } + + deployProcess, err := deployResponse.Output() + if err != nil { + return err + } + + err = uxHelpers.ProcessCheckWithSpinner( + ctx, + cmdData.UxBlocks, + []uxHelpers.Process{{ + F: uxHelpers.CheckZeropsProcess(deployProcess.Id, cmdData.RestApiClient), + RunningMessage: i18n.T(i18n.PushRunning), + ErrorMessageMessage: i18n.T(i18n.PushRunning), + SuccessMessage: i18n.T(i18n.PushFinished), + }}, + ) + + if err != nil { + return err + } + + return nil + }) +} diff --git a/src/cmd/serviceImport.go b/src/cmd/serviceImport.go deleted file mode 100644 index b42f4f23..00000000 --- a/src/cmd/serviceImport.go +++ /dev/null @@ -1,75 +0,0 @@ -package cmd - -import ( - "context" - "time" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/importProjectService" - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -func serviceImportCmd() *cobra.Command { - cmdImport := &cobra.Command{ - Use: "import projectNameOrId pathToImportFile [flags]", - Short: i18n.CmdServiceImport, - Args: ExactNArgs(2), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - token, err := getToken(storage) - if err != nil { - return err - } - - region, err := createRegionRetriever(ctx) - if err != nil { - return err - } - - reg, err := region.RetrieveFromFile() - if err != nil { - return err - } - - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( - ctx, - reg.GrpcApiAddress, - token, - ) - if err != nil { - return err - } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - return importProjectService.New( - importProjectService.Config{}, client, apiGrpcClient, sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}, - ).Import(ctx, importProjectService.RunConfig{ - WorkingDir: constants.WorkingDir, - ProjectNameOrId: args[0], - ImportYamlPath: args[1], - ParentCmd: constants.Service, - }) - }, - } - cmdImport.Flags().BoolP("help", "h", false, helpText(i18n.ServiceImportHelp)) - return cmdImport -} diff --git a/src/cmd/serviceList.go b/src/cmd/serviceList.go new file mode 100644 index 00000000..89ccaeeb --- /dev/null +++ b/src/cmd/serviceList.go @@ -0,0 +1,27 @@ +package cmd + +import ( + "context" + + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxHelpers" +) + +func serviceListCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("list"). + Short(i18n.T(i18n.CmdServiceList)). + ScopeLevel(scope.Project). + Arg(scope.ProjectArgName, cmdBuilder.OptionalArg()). + HelpFlag(i18n.T(i18n.ServiceListHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + err := uxHelpers.PrintServiceList(ctx, cmdData.UxBlocks, cmdData.RestApiClient, *cmdData.Project) + if err != nil { + return err + } + + return nil + }) +} diff --git a/src/cmd/serviceLog.go b/src/cmd/serviceLog.go index 0db7efb0..3d11caa4 100644 --- a/src/cmd/serviceLog.go +++ b/src/cmd/serviceLog.go @@ -2,90 +2,80 @@ package cmd import ( "context" - "time" - "github.com/spf13/cobra" + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/entity/repository" + "github.com/zeropsio/zcli/src/serviceLogs" + "github.com/zeropsio/zerops-go/types/enum" - "github.com/zeropsio/zcli/src/cliAction/serviceLogs" "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" ) -func serviceLogCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "log projectNameOrId serviceName [flags]", - Short: i18n.CmdServiceLog, - Long: i18n.CmdServiceLogLong + i18n.ServiceLogAdditional, - Args: ExactNArgs(2), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - token, err := getToken(storage) - if err != nil { - return err - } - - region, err := createRegionRetriever(ctx) - if err != nil { - return err - } - - reg, err := region.RetrieveFromFile() - if err != nil { - return err - } - - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( - ctx, - reg.GrpcApiAddress, - token, +func serviceLogCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("log"). + Short(i18n.T(i18n.CmdServiceLog)). + Long(i18n.T(i18n.CmdServiceLogLong)+i18n.T(i18n.ServiceLogAdditional)). + ScopeLevel(scope.Service). + IntFlag("limit", 100, i18n.T(i18n.LogLimitFlag)). + StringFlag("minimumSeverity", "", i18n.T(i18n.LogMinSeverityFlag)). + StringFlag("messageType", "APPLICATION", i18n.T(i18n.LogMsgTypeFlag)). + StringFlag("format", "FULL", i18n.T(i18n.LogFormatFlag)). + StringFlag("formatTemplate", "", i18n.T(i18n.LogFormatTemplateFlag)). + BoolFlag("follow", false, i18n.T(i18n.LogFollowFlag)). + BoolFlag("showBuildLogs", false, i18n.T(i18n.LogShowBuildFlag)). + HelpFlag(i18n.T(i18n.ServiceLogHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + handler := serviceLogs.New( + serviceLogs.Config{}, + cmdData.RestApiClient, ) - if err != nil { - return err - } - defer closeFunc() - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) + serviceId := cmdData.Service.ID + if cmdData.Params.GetBool("showBuildLogs") { + appVersions, err := repository.GetLatestAppVersionByService(ctx, cmdData.RestApiClient, *cmdData.Service) + if err != nil { + return err + } + if len(appVersions) == 0 { + return errors.New(i18n.T(i18n.LogNoBuildFound)) + } - handler := serviceLogs.New(serviceLogs.Config{}, client, apiGrpcClient, sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}) + app := appVersions[0] + status := app.Status + if status == enum.AppVersionStatusEnumUploading || app.Build == nil { + return errors.New(i18n.T(i18n.LogBuildStatusUploading)) + } - severityLevel := serviceLogs.Levels{{"EMERGENCY", "0"}, {"ALERT", "1"}, {"CRITICAL", "2"}, {"ERROR", "3"}, {"WARNING", "4"}, {"NOTICE", "5"}, {"INFORMATIONAL", "6"}, {"DEBUG", "7"}} + var filled bool + serviceId, filled = app.Build.ServiceStackId.Get() + if !filled { + return errors.New(i18n.T(i18n.LogNoBuildFound)) + } + } return handler.Run(ctx, serviceLogs.RunConfig{ - ProjectNameOrId: args[0], - ServiceName: args[1], - Limit: params.GetUint32("limit"), - MinSeverity: params.GetString(cmd, "minimumSeverity"), - MsgType: params.GetString(cmd, "messageType"), - Format: params.GetString(cmd, "format"), - FormatTemplate: params.GetString(cmd, "formatTemplate"), - Follow: params.GetBool(cmd, "follow"), - Levels: severityLevel, + Project: *cmdData.Project, + ServiceId: serviceId, + Limit: uint32(cmdData.Params.GetInt("limit")), + MinSeverity: cmdData.Params.GetString("minimumSeverity"), + MsgType: cmdData.Params.GetString("messageType"), + Format: cmdData.Params.GetString("format"), + FormatTemplate: cmdData.Params.GetString("formatTemplate"), + Follow: cmdData.Params.GetBool("follow"), + // TODO - janhajek better place? + Levels: serviceLogs.Levels{ + {"EMERGENCY", "0"}, + {"ALERT", "1"}, + {"CRITICAL", "2"}, + {"ERROR", "3"}, + {"WARNING", "4"}, + {"NOTICE", "5"}, + {"INFORMATIONAL", "6"}, + {"DEBUG", "7"}, + }, }) - }, - } - - params.RegisterUInt32(cmd, "limit", 100, i18n.LogLimitFlag) - params.RegisterString(cmd, "minimumSeverity", "", i18n.LogMinSeverityFlag) - params.RegisterString(cmd, "messageType", "APPLICATION", i18n.LogMsgTypeFlag) - params.RegisterString(cmd, "format", "FULL", i18n.LogFormatFlag) - params.RegisterString(cmd, "formatTemplate", "", i18n.LogFormatTemplateFlag) - params.RegisterBool(cmd, "follow", false, i18n.LogFollowFlag) - - cmd.Flags().BoolP("help", "h", false, helpText(i18n.ServiceLogHelp)) - - return cmd + }) } diff --git a/src/cmd/servicePush.go b/src/cmd/servicePush.go new file mode 100644 index 00000000..bbdda28d --- /dev/null +++ b/src/cmd/servicePush.go @@ -0,0 +1,175 @@ +package cmd + +import ( + "context" + "encoding/base64" + "io" + "time" + + "github.com/zeropsio/zcli/src/archiveClient" + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/httpClient" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/dto/input/body" + "github.com/zeropsio/zerops-go/dto/input/path" + "github.com/zeropsio/zerops-go/types" +) + +func servicePushCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("push"). + Short(i18n.T(i18n.CmdPushDesc)). + Long(i18n.T(i18n.CmdPushDesc)+"\n\n"+i18n.T(i18n.PushDescLong)). + ScopeLevel(scope.Service). + StringFlag("workingDir", "./", i18n.T(i18n.BuildWorkingDir)). + StringFlag("archiveFilePath", "", i18n.T(i18n.BuildArchiveFilePath)). + StringFlag("versionName", "", i18n.T(i18n.BuildVersionName)). + StringFlag("source", "", i18n.T(i18n.SourceName)). + StringFlag("zeropsYamlPath", "", i18n.T(i18n.ZeropsYamlLocation)). + BoolFlag("deployGitFolder", false, i18n.T(i18n.UploadGitFolder)). + HelpFlag(i18n.T(i18n.ServicePushHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + uxBlocks := cmdData.UxBlocks + + arch := archiveClient.New(archiveClient.Config{ + DeployGitFolder: cmdData.Params.GetBool("deployGitFolder"), + }) + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.BuildDeployCreatingPackageStart))) + + configContent, err := getValidConfigContent( + uxBlocks, + cmdData.Params.GetString("workingDir"), + cmdData.Params.GetString("zeropsYamlPath"), + ) + if err != nil { + return err + } + + err = validateZeropsYamlContent(ctx, cmdData.RestApiClient, cmdData.Service, configContent) + if err != nil { + return err + } + + files, err := arch.FindGitFiles(cmdData.Params.GetString("workingDir")) + if err != nil { + return err + } + + var reader io.Reader + pipeReader, writer := io.Pipe() + defer pipeReader.Close() + reader = pipeReader + + tarErrChan := make(chan error, 1) + + go arch.TarFiles(writer, files, tarErrChan) + + if cmdData.Params.GetString("archiveFilePath") != "" { + packageFile, err := openPackageFile( + cmdData.Params.GetString("archiveFilePath"), + cmdData.Params.GetString("workingDir"), + ) + if err != nil { + return err + } + reader = io.TeeReader(reader, packageFile) + } + + appVersion, err := createAppVersion( + ctx, + cmdData.RestApiClient, + cmdData.Service, + cmdData.Params.GetString("versionName"), + ) + if err != nil { + return err + } + + // TODO - janhajek merge with sdk client + httpClient := httpClient.New(ctx, httpClient.Config{ + HttpTimeout: time.Minute * 15, + }) + + err = uxHelpers.ProcessCheckWithSpinner( + ctx, + cmdData.UxBlocks, + []uxHelpers.Process{{ + F: func(ctx context.Context) error { + if err := packageUpload(ctx, httpClient, appVersion.UploadUrl.String(), reader); err != nil { + // if an error occurred while packing the app, return that error + select { + case err := <-tarErrChan: + return err + default: + return err + } + } + + // wait for packing and saving to finish (should already be done after the package upload has finished) + if tarErr := <-tarErrChan; tarErr != nil { + return tarErr + } + + return nil + }, + RunningMessage: i18n.T(i18n.BuildDeployUploadingPackageStart), + ErrorMessageMessage: i18n.T(i18n.BuildDeployUploadPackageFailed), + SuccessMessage: i18n.T(i18n.BuildDeployUploadingPackageDone), + }}, + ) + if err != nil { + return err + } + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.BuildDeployCreatingPackageDone))) + + if cmdData.Params.GetString("archiveFilePath") != "" { + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.BuildDeployPackageSavedInto, cmdData.Params.GetString("archiveFilePath")))) + } + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.BuildDeployDeployingStart))) + + sourceName := cmdData.Params.GetString("source") + if sourceName == "" { + sourceName = cmdData.Service.Name.String() + } + + deployResponse, err := cmdData.RestApiClient.PutAppVersionBuildAndDeploy(ctx, + path.AppVersionId{ + Id: appVersion.Id, + }, + body.PutAppVersionBuildAndDeploy{ + ZeropsYaml: types.MediumText(base64.StdEncoding.EncodeToString(configContent)), + Source: types.NewStringNull(sourceName), + }, + ) + if err != nil { + return err + } + + deployProcess, err := deployResponse.Output() + if err != nil { + return err + } + + err = uxHelpers.ProcessCheckWithSpinner( + ctx, + cmdData.UxBlocks, + []uxHelpers.Process{{ + F: uxHelpers.CheckZeropsProcess(deployProcess.Id, cmdData.RestApiClient), + RunningMessage: i18n.T(i18n.PushRunning), + ErrorMessageMessage: i18n.T(i18n.PushRunning), + SuccessMessage: i18n.T(i18n.PushFinished), + }}, + ) + if err != nil { + return err + } + + return nil + }) +} diff --git a/src/cmd/servicePushDeployShared.go b/src/cmd/servicePushDeployShared.go new file mode 100644 index 00000000..f4fa4190 --- /dev/null +++ b/src/cmd/servicePushDeployShared.go @@ -0,0 +1,151 @@ +package cmd + +import ( + "context" + "io" + "net/http" + "os" + "path/filepath" + + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/httpClient" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" + "github.com/zeropsio/zerops-go/dto/input/body" + "github.com/zeropsio/zerops-go/dto/output" + "github.com/zeropsio/zerops-go/types" +) + +const ZeropsYamlFileName = "zerops.yml" + +func createAppVersion( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, + service *entity.Service, + versionName string, +) (output.PostAppVersion, error) { + appVersionResponse, err := restApiClient.PostAppVersion( + ctx, + body.PostAppVersion{ + ServiceStackId: service.ID, + Name: func() types.StringNull { + if versionName != "" { + return types.NewStringNull(versionName) + } + return types.StringNull{} + }(), + }, + ) + if err != nil { + return output.PostAppVersion{}, err + } + appVersion, err := appVersionResponse.Output() + if err != nil { + return output.PostAppVersion{}, err + } + + return appVersion, nil +} + +func openPackageFile(archiveFilePath string, workingDir string) (*os.File, error) { + workingDir, err := filepath.Abs(workingDir) + if err != nil { + return nil, err + } + + archiveFilePath = filepath.Join(workingDir, archiveFilePath) + + filePath, err := filepath.Abs(archiveFilePath) + if err != nil { + return nil, err + } + + // check if the target file exists + _, err = os.Stat(filePath) + if err != nil && !os.IsNotExist(err) { + return nil, err + } + if err == nil { + return nil, errors.Errorf(i18n.T(i18n.ArchClientFileAlreadyExists), archiveFilePath) + } + + file, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE, 0660) + if err != nil { + return nil, err + } + + return file, nil +} + +func packageUpload(ctx context.Context, client *httpClient.Handler, uploadUrl string, reader io.Reader) error { + cephResponse, err := client.PutStream(ctx, uploadUrl, reader, httpClient.ContentType("application/gzip")) + if err != nil { + return err + } + if cephResponse.StatusCode != http.StatusCreated { + return errors.New(i18n.T(i18n.BuildDeployUploadPackageFailed)) + } + + return nil +} + +func getValidConfigContent(uxBlocks uxBlock.UxBlocks, workingDir string, zeropsYamlPath string) ([]byte, error) { + workingDir, err := filepath.Abs(workingDir) + if err != nil { + return nil, err + } + + if zeropsYamlPath != "" { + workingDir = filepath.Join(workingDir, zeropsYamlPath) + } + + zeropsYamlPath = filepath.Join(workingDir, ZeropsYamlFileName) + + zeropsYamlStat, err := os.Stat(zeropsYamlPath) + if err != nil { + if os.IsNotExist(err) { + return nil, errors.New(i18n.T(i18n.BuildDeployZeropsYamlNotFound, zeropsYamlPath)) + } + return nil, err + } + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.BuildDeployZeropsYamlFound, zeropsYamlPath))) + + if zeropsYamlStat.Size() == 0 { + return nil, errors.New(i18n.T(i18n.BuildDeployZeropsYamlEmpty)) + } + if zeropsYamlStat.Size() > 10*1024 { + return nil, errors.New(i18n.T(i18n.BuildDeployZeropsYamlTooLarge)) + } + + yamlContent, err := os.ReadFile(zeropsYamlPath) + if err != nil { + return nil, err + } + + return yamlContent, nil +} + +func validateZeropsYamlContent( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, + service *entity.Service, + yamlContent []byte, +) error { + resp, err := restApiClient.PostServiceStackZeropsYamlValidation(ctx, body.ZeropsYamlValidation{ + ServiceStackName: service.Name, + ServiceStackTypeId: service.ServiceTypeId, + ZeropsYaml: types.NewMediumText(string(yamlContent)), + }) + if err != nil { + return err + } + if _, err = resp.Output(); err != nil { + return err + } + + return nil +} diff --git a/src/cmd/serviceStart.go b/src/cmd/serviceStart.go index 3721d67d..5e75140e 100644 --- a/src/cmd/serviceStart.go +++ b/src/cmd/serviceStart.go @@ -2,81 +2,53 @@ package cmd import ( "context" - "time" - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/startStopDelete" - "github.com/zeropsio/zcli/src/constants" + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/dto/input/path" ) -func serviceStartCmd() *cobra.Command { - cmdStart := &cobra.Command{ - Use: "start projectNameOrId serviceName [flags]", - Short: i18n.CmdServiceStart, - Args: ExactNArgs(2), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - token, err := getToken(storage) +func serviceStartCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("start"). + Short(i18n.T(i18n.CmdServiceStart)). + ScopeLevel(scope.Service). + Arg(scope.ServiceArgName, cmdBuilder.OptionalArg(), cmdBuilder.OptionalArgLabel("{serviceName | serviceId}")). + HelpFlag(i18n.T(i18n.ServiceStartHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + startServiceResponse, err := cmdData.RestApiClient.PutServiceStackStart( + ctx, + path.ServiceStackId{ + Id: cmdData.Service.ID, + }, + ) if err != nil { return err } - region, err := createRegionRetriever(ctx) + responseOutput, err := startServiceResponse.Output() if err != nil { return err } - reg, err := region.RetrieveFromFile() - if err != nil { - return err - } + processId := responseOutput.Id - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( + err = uxHelpers.ProcessCheckWithSpinner( ctx, - reg.GrpcApiAddress, - token, + cmdData.UxBlocks, + []uxHelpers.Process{{ + F: uxHelpers.CheckZeropsProcess(processId, cmdData.RestApiClient), + RunningMessage: i18n.T(i18n.ServiceStarting), + ErrorMessageMessage: i18n.T(i18n.ServiceStarting), + SuccessMessage: i18n.T(i18n.ServiceStarted), + }}, ) if err != nil { return err } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - handler := startStopDelete.New(startStopDelete.Config{}, client, apiGrpcClient, sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}) - - cmdData := startStopDelete.CmdType{ - Start: i18n.ServiceStart, - Finish: i18n.ServiceStarted, - Execute: handler.ServiceStart, - } - return handler.Run(ctx, startStopDelete.RunConfig{ - ProjectNameOrId: args[0], - ServiceName: args[1], - ParentCmd: constants.Service, - Confirm: true, - CmdData: cmdData, - }) - }, - } - cmdStart.Flags().BoolP("help", "h", false, helpText(i18n.ServiceStartHelp)) - return cmdStart + return nil + }) } diff --git a/src/cmd/serviceStop.go b/src/cmd/serviceStop.go index c3250ee9..cd9548d3 100644 --- a/src/cmd/serviceStop.go +++ b/src/cmd/serviceStop.go @@ -2,86 +2,54 @@ package cmd import ( "context" - "time" - "github.com/spf13/cobra" + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/uxHelpers" + "github.com/zeropsio/zerops-go/dto/input/path" - "github.com/zeropsio/zcli/src/cliAction/startStopDelete" - "github.com/zeropsio/zcli/src/constants" "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/sdkConfig" ) -func serviceStopCmd() *cobra.Command { - cmdStop := &cobra.Command{ - Use: "stop projectNameOrId serviceName [flags]", - Short: i18n.CmdServiceStop, - Args: ExactNArgs(2), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(context.Background()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - token, err := getToken(storage) +func serviceStopCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("stop"). + Short(i18n.T(i18n.CmdServiceStop)). + ScopeLevel(scope.Service). + Arg(scope.ServiceArgName, cmdBuilder.OptionalArg()). + HelpFlag(i18n.T(i18n.ServiceStopHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + stopServiceResponse, err := cmdData.RestApiClient.PutServiceStackStop( + ctx, + path.ServiceStackId{ + Id: cmdData.Service.ID, + }, + ) if err != nil { return err } - region, err := createRegionRetriever(ctx) + responseOutput, err := stopServiceResponse.Output() if err != nil { return err } - reg, err := region.RetrieveFromFile() - if err != nil { - return err - } + processId := responseOutput.Id - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{ - CaCertificateUrl: reg.CaCertificateUrl, - }) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( + err = uxHelpers.ProcessCheckWithSpinner( ctx, - reg.GrpcApiAddress, - token, + cmdData.UxBlocks, + []uxHelpers.Process{{ + F: uxHelpers.CheckZeropsProcess(processId, cmdData.RestApiClient), + RunningMessage: i18n.T(i18n.ServiceStopping), + ErrorMessageMessage: i18n.T(i18n.ServiceStopping), + SuccessMessage: i18n.T(i18n.ServiceStopped), + }}, ) if err != nil { return err } - defer closeFunc() - - client := httpClient.New(ctx, httpClient.Config{ - HttpTimeout: time.Minute * 15, - }) - - handler := startStopDelete.New( - startStopDelete.Config{}, - client, - apiGrpcClient, - sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}, - ) - - cmdData := startStopDelete.CmdType{ - Start: i18n.ServiceStop, - Finish: i18n.ServiceStopped, - Execute: handler.ServiceStop, - } - return handler.Run(ctx, startStopDelete.RunConfig{ - ProjectNameOrId: args[0], - ServiceName: args[1], - ParentCmd: constants.Service, - Confirm: true, - CmdData: cmdData, - }) - }, - } - cmdStop.Flags().BoolP("help", "h", false, helpText(i18n.ServiceStopHelp)) - return cmdStop + return nil + }) } diff --git a/src/cmd/status.go b/src/cmd/status.go new file mode 100644 index 00000000..d38e1ff5 --- /dev/null +++ b/src/cmd/status.go @@ -0,0 +1,15 @@ +package cmd + +import ( + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/i18n" +) + +func statusCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("status"). + Short(i18n.T(i18n.CmdStatus)). + HelpFlag(i18n.T(i18n.StatusHelp)). + AddChildrenCmd(statusShowDebugLogsCmd()). + AddChildrenCmd(statusInfoCmd()) +} diff --git a/src/cmd/statusInfo.go b/src/cmd/statusInfo.go new file mode 100644 index 00000000..2e4094cb --- /dev/null +++ b/src/cmd/statusInfo.go @@ -0,0 +1,55 @@ +package cmd + +import ( + "context" + _ "embed" + + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/constants" + repository2 "github.com/zeropsio/zcli/src/entity/repository" + "github.com/zeropsio/zcli/src/errorsx" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/uxBlock/styles" +) + +func statusInfoCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("info"). + Short(i18n.T(i18n.CmdStatusInfo)). + HelpFlag(i18n.T(i18n.StatusInfoHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + body := &uxBlock.TableBody{} + + cliDataFilePath, err := constants.CliDataFilePath() + if err != nil { + cliDataFilePath = err.Error() + } + body.AddStringsRow(i18n.T(i18n.StatusInfoCliDataFilePath), cliDataFilePath) + + logFilePath, err := constants.LogFilePath() + if err != nil { + logFilePath = err.Error() + } + body.AddStringsRow(i18n.T(i18n.StatusInfoLogFilePath), logFilePath) + + if cmdData.CliStorage.Data().ScopeProjectId.Filled() { + // project scope is set + projectId, _ := cmdData.CliStorage.Data().ScopeProjectId.Get() + project, err := repository2.GetProjectById(ctx, cmdData.RestApiClient, projectId) + if err != nil { + if errorsx.IsUserError(err) { + cmdData.UxBlocks.PrintWarning(styles.WarningLine(i18n.T(i18n.ScopedProjectNotFound))) + } + + return err + } + + body.AddStringsRow(i18n.T(i18n.ScopedProject), project.Name.String()) + } + + cmdData.UxBlocks.Table(body) + + return nil + }) +} diff --git a/src/cmd/statusShowDebugLogs.go b/src/cmd/statusShowDebugLogs.go new file mode 100644 index 00000000..85e06743 --- /dev/null +++ b/src/cmd/statusShowDebugLogs.go @@ -0,0 +1,77 @@ +package cmd + +import ( + "context" + "fmt" + "io" + "os" + + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/constants" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" +) + +func statusShowDebugLogsCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("show-debug-logs"). + Short(i18n.T(i18n.CmdStatusShowDebugLogs)). + HelpFlag(i18n.T(i18n.StatusShowDebugLogsHelp)). + GuestRunFunc(func(ctx context.Context, cmdData *cmdBuilder.GuestCmdData) error { + logFilePath, err := constants.LogFilePath() + if err != nil { + return err + } + + f, err := os.OpenFile(logFilePath, os.O_RDONLY, 0777) + if err != nil { + return err + } + + line := "" + var cursor int64 = 0 + stat, _ := f.Stat() + filesize := stat.Size() + + if filesize == 0 { + cmdData.UxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.DebugLogsNotFound))) + return nil + } + + lines := []string{} + for { + cursor -= 1 + _, err = f.Seek(cursor, io.SeekEnd) + if err != nil { + return err + } + + char := make([]byte, 1) + _, err = f.Read(char) + if err != nil { + return err + } + + if cursor != -1 && (char[0] == 10 || char[0] == 13) { // stop if we find a line + if len(lines) > 10 { + break + } + lines = append([]string{line}, lines...) + line = "" + } + + line = fmt.Sprintf("%s%s", string(char), line) + + if cursor == -filesize { // stop if we are at the beginning + lines = append([]string{line}, lines...) + break + } + } + + for _, line := range lines { + fmt.Print(line) + } + + return nil + }) +} diff --git a/src/cmd/version.go b/src/cmd/version.go index 43b11665..b34cc389 100644 --- a/src/cmd/version.go +++ b/src/cmd/version.go @@ -1,24 +1,24 @@ package cmd import ( + "context" "fmt" "runtime" - "github.com/spf13/cobra" + "github.com/zeropsio/zcli/src/cmdBuilder" "github.com/zeropsio/zcli/src/i18n" ) var Version string -func versionCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "version", - Short: i18n.CmdVersion, - SilenceUsage: true, - Run: func(cmd *cobra.Command, args []string) { +func versionCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("version"). + Short(i18n.T(i18n.CmdVersion)). + HelpFlag(i18n.T(i18n.VersionHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { fmt.Printf("zcli version %s (%s) %s/%s\n", Version, runtime.Version(), runtime.GOOS, runtime.GOARCH) - }, - } - cmd.Flags().BoolP("help", "h", false, helpText(i18n.VersionHelp)) - return cmd + + return nil + }) } diff --git a/src/cmd/vpn.go b/src/cmd/vpn.go index 4a82fcd0..3f7a8bf3 100644 --- a/src/cmd/vpn.go +++ b/src/cmd/vpn.go @@ -1,22 +1,15 @@ package cmd import ( + "github.com/zeropsio/zcli/src/cmdBuilder" "github.com/zeropsio/zcli/src/i18n" - - "github.com/spf13/cobra" ) -func vpnCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "vpn", - Short: i18n.CmdVpn, - SilenceUsage: true, - } - - cmd.AddCommand(vpnStartCmd()) - cmd.AddCommand(vpnStopCmd()) - cmd.AddCommand(vpnStatusCmd()) - - cmd.Flags().BoolP("help", "h", false, helpText(i18n.GroupHelp)) - return cmd +func vpnCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("vpn"). + Short(i18n.T(i18n.CmdVpn)). + HelpFlag(i18n.T(i18n.VpnHelp)). + AddChildrenCmd(vpnConnectCmd()). + AddChildrenCmd(vpnDisconnectCmd()) } diff --git a/src/cmd/vpnConnect.go b/src/cmd/vpnConnect.go new file mode 100644 index 00000000..578e1c5d --- /dev/null +++ b/src/cmd/vpnConnect.go @@ -0,0 +1,161 @@ +package cmd + +import ( + "context" + "os" + "os/exec" + "text/template" + "time" + + "github.com/zeropsio/zcli/src/cliStorage" + "github.com/zeropsio/zcli/src/cmd/scope" + "github.com/zeropsio/zcli/src/cmdRunner" + "github.com/zeropsio/zcli/src/constants" + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zerops-go/dto/input/body" + "github.com/zeropsio/zerops-go/dto/input/path" + "github.com/zeropsio/zerops-go/types" + "github.com/zeropsio/zerops-go/types/uuid" + "golang.zx2c4.com/wireguard/wgctrl/wgtypes" + + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" +) + +func vpnConnectCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("connect"). + Short(i18n.T(i18n.CmdVpnConnect)). + ScopeLevel(scope.Project). + Arg(scope.ProjectArgName, cmdBuilder.OptionalArg()). + HelpFlag(i18n.T(i18n.VpnConnectHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + uxBlocks := cmdData.UxBlocks + + privateKey, err := getOrCreatePrivateVpnKey(cmdData) + if err != nil { + return err + } + + publicKey := privateKey.PublicKey() + + postProjectResponse, err := cmdData.RestApiClient.PostProjectVpn( + ctx, + path.ProjectId{Id: cmdData.Project.ID}, + body.PostProjectVpn{PublicKey: types.String(publicKey.String())}, + ) + if err != nil { + return err + } + + vpnSettings, err := postProjectResponse.Output() + if err != nil { + return err + } + + filePath, err := constants.WgConfigFilePath() + if err != nil { + return err + } + + f, err := os.Create(filePath) + if err != nil { + return err + } + err = func() error { + defer f.Close() + + templ := template.Must(template.New("wg template").Parse(vpnTmpl)) + + return templ.Execute(f, map[string]interface{}{ + "PrivateKey": privateKey.String(), + "PublicKey": vpnSettings.Project.PublicKey, + "AssignedIpv4Address": vpnSettings.Peer.Ipv4.AssignedIpAddress, + "AssignedIpv6Address": vpnSettings.Peer.Ipv6.AssignedIpAddress, + "Ipv4NetworkGateway": vpnSettings.Project.Ipv4.Network.Gateway, + "ProjectIpv4Network": vpnSettings.Project.Ipv4.Network.Network, + "ProjectIpv6Network": vpnSettings.Project.Ipv6.Network.Network, + "Ipv4Network": vpnSettings.Peer.Ipv4.Network.Network, + "Ipv6Network": vpnSettings.Peer.Ipv6.Network.Network, + "ProjectIpv4SharedEndpoint": vpnSettings.Project.Ipv4.SharedEndpoint, + }) + }() + if err != nil { + return err + } + + uxBlocks.PrintInfo(styles.InfoWithValueLine(i18n.T(i18n.VpnConfigSaved), filePath)) + + _, err = cmdData.CliStorage.Update(func(data cliStorage.Data) cliStorage.Data { + if data.VpnKeys == nil { + data.VpnKeys = make(map[uuid.ProjectId]entity.VpnKey) + } + data.VpnKeys[cmdData.Project.ID] = entity.VpnKey{ + ProjectId: cmdData.Project.ID, + Key: privateKey.String(), + CreatedAt: time.Now(), + } + + return data + }) + if err != nil { + return err + } + + // TODO - janhajek check if vpn is disconnected + // TODO - janhajek get somehow a meaningful output + // TODO - janhajek check if wg-quick is installed + // TODO - janhajek a configurable path to wg-quick + c := exec.CommandContext(ctx, "wg-quick", "up", filePath) + _, err = cmdRunner.Run(c) + if err != nil { + return err + } + + // TODO - janhajek ping {{.Ipv4NetworkGateway}} + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.VpnConnected))) + + return nil + }) +} + +func getOrCreatePrivateVpnKey(cmdData *cmdBuilder.LoggedUserCmdData) (wgtypes.Key, error) { + projectId := cmdData.Project.ID + + if vpnKey, exists := cmdData.VpnKeys[projectId]; exists { + wgKey, err := wgtypes.ParseKey(vpnKey.Key) + if err == nil { + return wgKey, nil + } + + cmdData.UxBlocks.PrintWarning(styles.WarningLine(i18n.T(i18n.VpnPrivateKeyCorrupted))) + } + + vpnKey, err := wgtypes.GeneratePrivateKey() + if err != nil { + return wgtypes.Key{}, err + } + + cmdData.UxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.VpnPrivateKeyCreated))) + + return vpnKey, nil +} + +var vpnTmpl = ` +[Interface] +PrivateKey = {{.PrivateKey}} + +Address = {{if .AssignedIpv4Address}}{{.AssignedIpv4Address}}/32{{end}}, {{.AssignedIpv6Address}}/128 +DNS = {{.Ipv4NetworkGateway}}, zerops + +[Peer] +PublicKey = {{.PublicKey}} + +AllowedIPs = {{if .ProjectIpv4Network}}{{.ProjectIpv4Network}},{{end}} {{.ProjectIpv6Network}}, {{if .Ipv4Network}}{{.Ipv4Network}}, {{end}}{{.Ipv6Network}} + +Endpoint = {{.ProjectIpv4SharedEndpoint}} + +PersistentKeepalive = 5 +` diff --git a/src/cmd/vpnDisconnect.go b/src/cmd/vpnDisconnect.go new file mode 100644 index 00000000..bf3ac775 --- /dev/null +++ b/src/cmd/vpnDisconnect.go @@ -0,0 +1,35 @@ +package cmd + +import ( + "context" + "os/exec" + + "github.com/zeropsio/zcli/src/cmdBuilder" + "github.com/zeropsio/zcli/src/cmdRunner" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" +) + +func vpnDisconnectCmd() *cmdBuilder.Cmd { + return cmdBuilder.NewCmd(). + Use("disconnect"). + Short(i18n.T(i18n.CmdVpnDisconnect)). + HelpFlag(i18n.T(i18n.VpnDisconnectHelp)). + LoggedUserRunFunc(func(ctx context.Context, cmdData *cmdBuilder.LoggedUserCmdData) error { + uxBlocks := cmdData.UxBlocks + + // TODO - janhajek check if vpn is connected + // TODO - janhajek get somehow a meaningful output + // TODO - janhajek check if wg-quick is installed + // TODO - janhajek a configurable path to wg-quick + c := exec.CommandContext(ctx, "wg-quick", "down", "zerops") + _, err := cmdRunner.Run(c) + if err != nil { + return err + } + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.VpnDisconnected))) + + return nil + }) +} diff --git a/src/cmd/vpnStart.go b/src/cmd/vpnStart.go deleted file mode 100644 index a6abb852..00000000 --- a/src/cmd/vpnStart.go +++ /dev/null @@ -1,124 +0,0 @@ -package cmd - -import ( - "context" - "errors" - "regexp" - "strconv" - - "github.com/spf13/cobra" - - "github.com/zeropsio/zcli/src/cliAction/startVpn" - "github.com/zeropsio/zcli/src/daemonInstaller" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -func vpnStartCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "start projectNameOrId", - Short: i18n.CmdVpnStart, - Long: i18n.VpnStartLong, - SilenceUsage: true, - Args: ExactNArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(cmd.Context()) - regSignals(cancel) - - storage, err := createCliStorage() - if err != nil { - return err - } - token, err := getToken(storage) - if err != nil { - return err - } - - region, err := createRegionRetriever(ctx) - if err != nil { - return err - } - - reg, err := region.RetrieveFromFile() - if err != nil { - return err - } - - caCertUrl := reg.CaCertificateUrl - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{CaCertificateUrl: caCertUrl}) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient( - ctx, - reg.GrpcApiAddress, - token, - ) - if err != nil { - return err - } - defer closeFunc() - - installer, err := daemonInstaller.New(daemonInstaller.Config{}) - if err != nil { - return err - } - - preferredPortMin, preferredPortMax, err := getMinMaxPort(params.GetString(cmd, "preferredPort")) - if err != nil { - return err - } - - return startVpn.New( - startVpn.Config{ - GrpcApiAddress: reg.GrpcApiAddress, - VpnAddress: reg.VpnApiAddress, - }, - apiGrpcClient, - installer, - sdkConfig.Config{Token: token, RegionUrl: reg.RestApiAddress}, - ).Run(ctx, startVpn.RunConfig{ - ProjectNameOrId: args[0], - Token: token, - Mtu: params.GetUint32("mtu"), - PreferredPortMin: preferredPortMin, - PreferredPortMax: preferredPortMax, - CaCertificateUrl: caCertUrl, - }) - }, - } - - params.RegisterUInt32(cmd, "mtu", 1420, i18n.MtuFlag) - params.RegisterString(cmd, "preferredPort", "-", i18n.PreferredPortFlag) - cmd.Flags().BoolP("help", "h", false, helpText(i18n.VpnStartHelp)) - - return cmd -} - -func getMinMaxPort(in string) (uint32, uint32, error) { - if in == "" { - return 0, 0, nil - } - if in == "-" { - return 0, 0, nil - } - parts := regexp.MustCompile("^([1-9][0-9]{0,4})?-([1-9][0-9]{0,4})?$").FindStringSubmatch(in) - if len(parts) != 3 { - return 0, 0, errors.New("invalid port range") - } - - var min int - var err error - if parts[1] != "" { - min, err = strconv.Atoi(parts[1]) - if err != nil { - return 0, 0, err - } - } - var max int - if parts[2] != "" { - max, err = strconv.Atoi(parts[2]) - if err != nil { - return 0, 0, err - } - } - return uint32(min), uint32(max), nil -} diff --git a/src/cmd/vpnStatus.go b/src/cmd/vpnStatus.go deleted file mode 100644 index 43551030..00000000 --- a/src/cmd/vpnStatus.go +++ /dev/null @@ -1,38 +0,0 @@ -package cmd - -import ( - "context" - - "github.com/zeropsio/zcli/src/proto/daemon" - - "github.com/zeropsio/zcli/src/i18n" - - "github.com/zeropsio/zcli/src/cliAction/statusVpn" - - "github.com/spf13/cobra" -) - -func vpnStatusCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "status", - Short: i18n.CmdVpnStatus, - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(cmd.Context()) - regSignals(cancel) - - daemonClient, daemonCloseFunc, err := daemon.CreateClient(ctx) - if err != nil { - return err - } - defer daemonCloseFunc() - - return statusVpn.New( - statusVpn.Config{}, - daemonClient, - ).Run(ctx, statusVpn.RunConfig{}) - }, - } - cmd.Flags().BoolP("help", "h", false, helpText(i18n.VpnStatusHelp)) - return cmd -} diff --git a/src/cmd/vpnStop.go b/src/cmd/vpnStop.go deleted file mode 100644 index aad1e241..00000000 --- a/src/cmd/vpnStop.go +++ /dev/null @@ -1,38 +0,0 @@ -package cmd - -import ( - "context" - - "github.com/zeropsio/zcli/src/proto/daemon" - - "github.com/zeropsio/zcli/src/i18n" - - "github.com/zeropsio/zcli/src/cliAction/stopVpn" - - "github.com/spf13/cobra" -) - -func vpnStopCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "stop", - Short: i18n.CmdVpnStop, - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - ctx, cancel := context.WithCancel(cmd.Context()) - regSignals(cancel) - - daemonClient, daemonCloseFunc, err := daemon.CreateClient(ctx) - if err != nil { - return err - } - defer daemonCloseFunc() - - return stopVpn.New( - stopVpn.Config{}, - daemonClient, - ).Run(ctx, stopVpn.RunConfig{}) - }, - } - cmd.Flags().BoolP("help", "h", false, helpText(i18n.VpnStopHelp)) - return cmd -} diff --git a/src/cmdBuilder/cmd.go b/src/cmdBuilder/cmd.go new file mode 100644 index 00000000..fab3fd30 --- /dev/null +++ b/src/cmdBuilder/cmd.go @@ -0,0 +1,167 @@ +package cmdBuilder + +import ( + "context" +) + +type loggedUserRunFunc func(ctx context.Context, cmdData *LoggedUserCmdData) error +type guestRunFunc func(ctx context.Context, cmdData *GuestCmdData) error + +type ScopeLevel interface { + AddCommandFlags(*Cmd) + LoadSelectedScope(ctx context.Context, cmd *Cmd, cmdData *LoggedUserCmdData) error + GetParent() ScopeLevel +} + +type Cmd struct { + use string + short string + long string + loggedUserRunFunc loggedUserRunFunc + guestRunFunc guestRunFunc + silenceUsage bool + + scopeLevel ScopeLevel + args []cmdArg + flags []cmdFlag + + childrenCmds []*Cmd +} + +type cmdArg struct { + name string + optional bool + isArray bool + optionalLabel string +} + +type cmdFlag struct { + name string + defaultValue interface{} + description string + hidden bool + shorthand string +} + +func NewCmd() *Cmd { + return &Cmd{ + silenceUsage: true, + } +} + +func (cmd *Cmd) AddChildrenCmd(childrenCmd *Cmd) *Cmd { + cmd.childrenCmds = append(cmd.childrenCmds, childrenCmd) + return cmd +} + +func (cmd *Cmd) Use(use string) *Cmd { + cmd.use = use + return cmd +} + +func (cmd *Cmd) Short(short string) *Cmd { + cmd.short = short + return cmd +} + +func (cmd *Cmd) Long(long string) *Cmd { + cmd.long = long + return cmd +} + +func (cmd *Cmd) LoggedUserRunFunc(runFunc loggedUserRunFunc) *Cmd { + cmd.loggedUserRunFunc = runFunc + return cmd +} + +func (cmd *Cmd) GuestRunFunc(runFunc guestRunFunc) *Cmd { + cmd.guestRunFunc = runFunc + return cmd +} + +func (cmd *Cmd) SilenceUsage(silenceUsage bool) *Cmd { + cmd.silenceUsage = silenceUsage + return cmd +} + +func (cmd *Cmd) ScopeLevel(scopeLevel ScopeLevel) *Cmd { + cmd.scopeLevel = scopeLevel + return cmd +} + +type ArgOption = func(cfg *cmdArg) + +func OptionalArg() ArgOption { + return func(cfg *cmdArg) { + cfg.optional = true + } +} + +func ArrayArg() ArgOption { + return func(cfg *cmdArg) { + cfg.isArray = true + } +} + +func OptionalArgLabel(label string) ArgOption { + return func(cfg *cmdArg) { + cfg.optionalLabel = label + } +} + +func (cmd *Cmd) Arg(name string, auxOptions ...ArgOption) *Cmd { + cfg := cmdArg{ + name: name, + } + for _, opt := range auxOptions { + opt(&cfg) + } + + cmd.args = append(cmd.args, cfg) + return cmd +} + +type FlagOption = func(cfg *cmdFlag) + +func HiddenFlag() FlagOption { + return func(cfg *cmdFlag) { + cfg.hidden = true + } +} + +func ShortHand(shorthand string) FlagOption { + return func(cfg *cmdFlag) { + cfg.shorthand = shorthand + } +} + +func (cmd *Cmd) StringFlag(name string, defaultValue string, description string, auxOptions ...FlagOption) *Cmd { + return cmd.addFlag(name, defaultValue, description, auxOptions...) +} + +func (cmd *Cmd) IntFlag(name string, defaultValue int, description string, auxOptions ...FlagOption) *Cmd { + return cmd.addFlag(name, defaultValue, description, auxOptions...) +} + +func (cmd *Cmd) BoolFlag(name string, defaultValue bool, description string, auxOptions ...FlagOption) *Cmd { + return cmd.addFlag(name, defaultValue, description, auxOptions...) +} + +func (cmd *Cmd) HelpFlag(description string, auxOptions ...FlagOption) *Cmd { + auxOptions = append(auxOptions, ShortHand("h")) + return cmd.addFlag("help", false, description, auxOptions...) +} + +func (cmd *Cmd) addFlag(name string, defaultValue interface{}, description string, auxOptions ...FlagOption) *Cmd { + cfg := cmdFlag{ + name: name, + description: description, + defaultValue: defaultValue, + } + for _, opt := range auxOptions { + opt(&cfg) + } + + cmd.flags = append(cmd.flags, cfg) + return cmd +} diff --git a/src/cmdBuilder/cmdBuilder.go b/src/cmdBuilder/cmdBuilder.go new file mode 100644 index 00000000..4d5cfc69 --- /dev/null +++ b/src/cmdBuilder/cmdBuilder.go @@ -0,0 +1,13 @@ +package cmdBuilder + +type CmdBuilder struct { + commands []*Cmd +} + +func NewCmdBuilder() *CmdBuilder { + return &CmdBuilder{} +} + +func (b *CmdBuilder) AddCommand(cmd *Cmd) { + b.commands = append(b.commands, cmd) +} diff --git a/src/cmdBuilder/cmdBuilderBuildCobraCmd.go b/src/cmdBuilder/cmdBuilderBuildCobraCmd.go new file mode 100644 index 00000000..01b5d2ac --- /dev/null +++ b/src/cmdBuilder/cmdBuilderBuildCobraCmd.go @@ -0,0 +1,74 @@ +package cmdBuilder + +import ( + "fmt" + "strings" + + "github.com/spf13/cobra" + "github.com/zeropsio/zcli/src/cliStorage" + "github.com/zeropsio/zcli/src/flagParams" + "github.com/zeropsio/zcli/src/uxBlock" +) + +func (b *CmdBuilder) buildCobraCmd( + cmd *Cmd, + flagParams *flagParams.Handler, + uxBlocks uxBlock.UxBlocks, + cliStorage *cliStorage.Handler, +) (*cobra.Command, error) { + cobraCmd := &cobra.Command{ + Short: cmd.short, + SilenceUsage: cmd.silenceUsage, + } + + argNames := make([]string, len(cmd.args)) + for i, arg := range cmd.args { + argName := arg.name + if arg.optionalLabel != "" { + argName = arg.optionalLabel + } + if arg.optional { + argName = "[" + argName + "]" + } + argNames[i] = argName + } + cobraCmd.Use = strings.Join(append([]string{cmd.use}, argNames...), " ") + + for _, dep := range getScopeListFromRoot(cmd.scopeLevel) { + dep.AddCommandFlags(cmd) + } + + for _, flag := range cmd.flags { + switch defaultValue := flag.defaultValue.(type) { + case string: + flagParams.RegisterString(cobraCmd, flag.name, flag.shorthand, defaultValue, flag.description) + case int: + flagParams.RegisterInt(cobraCmd, flag.name, flag.shorthand, defaultValue, flag.description) + case bool: + flagParams.RegisterBool(cobraCmd, flag.name, flag.shorthand, defaultValue, flag.description) + default: + panic(fmt.Sprintf("unexpected type %T", flag.defaultValue)) + } + + if flag.hidden { + err := cobraCmd.Flags().MarkHidden(flag.name) + if err != nil { + return nil, err + } + } + } + + if cmd.guestRunFunc != nil || cmd.loggedUserRunFunc != nil { + cobraCmd.RunE = b.createCmdRunFunc(cmd, flagParams, uxBlocks, cliStorage) + } + + for _, childrenCmd := range cmd.childrenCmds { + cobraChildrenCmd, err := b.buildCobraCmd(childrenCmd, flagParams, uxBlocks, cliStorage) + if err != nil { + return nil, err + } + cobraCmd.AddCommand(cobraChildrenCmd) + } + + return cobraCmd, nil +} diff --git a/src/cmdBuilder/cmdBuilderCreateRunFunc.go b/src/cmdBuilder/cmdBuilderCreateRunFunc.go new file mode 100644 index 00000000..97c43646 --- /dev/null +++ b/src/cmdBuilder/cmdBuilderCreateRunFunc.go @@ -0,0 +1,171 @@ +package cmdBuilder + +import ( + "fmt" + "slices" + + "github.com/pkg/errors" + "github.com/spf13/cobra" + "github.com/zeropsio/zcli/src/cliStorage" + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/flagParams" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" + "github.com/zeropsio/zerops-go/types/uuid" +) + +type ParamsReader interface { + GetString(name string) string + GetInt(name string) int + GetBool(name string) bool +} + +type CmdParamReader struct { + cobraCmd *cobra.Command + paramsHandler *flagParams.Handler +} + +func newCmdParamReader(cobraCmd *cobra.Command, paramsHandler *flagParams.Handler) *CmdParamReader { + return &CmdParamReader{ + cobraCmd: cobraCmd, + paramsHandler: paramsHandler, + } +} + +func (r *CmdParamReader) GetString(name string) string { + return r.paramsHandler.GetString(r.cobraCmd, name) +} + +func (r *CmdParamReader) GetInt(name string) int { + return r.paramsHandler.GetInt(r.cobraCmd, name) +} + +func (r *CmdParamReader) GetBool(name string) bool { + return r.paramsHandler.GetBool(r.cobraCmd, name) +} + +type GuestCmdData struct { + CliStorage *cliStorage.Handler + UxBlocks uxBlock.UxBlocks + Args map[string][]string + Params ParamsReader +} + +type LoggedUserCmdData struct { + *GuestCmdData + RestApiClient *zeropsRestApiClient.Handler + + // optional params + Project *entity.Project + Service *entity.Service + + VpnKeys map[uuid.ProjectId]entity.VpnKey +} + +func (b *CmdBuilder) createCmdRunFunc( + cmd *Cmd, + flagParams *flagParams.Handler, + uxBlocks uxBlock.UxBlocks, + cliStorage *cliStorage.Handler, +) func(*cobra.Command, []string) error { + return func(cobraCmd *cobra.Command, args []string) (err error) { + ctx := cobraCmd.Context() + + uxBlocks.LogDebug(fmt.Sprintf("Command: %s", cobraCmd.CommandPath())) + + flagParams.InitViper() + + argsMap, err := convertArgs(cmd, args) + if err != nil { + return err + } + + guestCmdData := &GuestCmdData{ + CliStorage: cliStorage, + UxBlocks: uxBlocks, + Args: argsMap, + Params: newCmdParamReader(cobraCmd, flagParams), + } + + if cmd.loggedUserRunFunc != nil { + storedData := cliStorage.Data() + + token := storedData.Token + if token == "" { + return errors.New(i18n.T(i18n.UnauthenticatedUser)) + } + + cmdData := &LoggedUserCmdData{ + GuestCmdData: guestCmdData, + VpnKeys: storedData.VpnKeys, + } + + cmdData.RestApiClient = zeropsRestApiClient.NewAuthorizedClient(token, "https://"+storedData.RegionData.Address) + + for _, dep := range getScopeListFromRoot(cmd.scopeLevel) { + err := dep.LoadSelectedScope(ctx, cmd, cmdData) + if err != nil { + return err + } + } + return cmd.loggedUserRunFunc(ctx, cmdData) + } + + return cmd.guestRunFunc(ctx, guestCmdData) + } +} + +func convertArgs(cmd *Cmd, args []string) (map[string][]string, error) { + var requiredArgsCount int + var isArray bool + for i, arg := range cmd.args { + if arg.optional && i != len(cmd.args)-1 { + return nil, errors.Errorf(i18n.T(i18n.ArgsOnlyOneOptionalAllowed), arg.name) + } + if arg.isArray && i != len(cmd.args)-1 { + return nil, errors.Errorf(i18n.T(i18n.ArgsOnlyOneArrayAllowed), arg.name) + } + if !arg.optional { + requiredArgsCount++ + } + isArray = arg.isArray + } + + if len(args) < requiredArgsCount { + return nil, errors.Errorf(i18n.T(i18n.ArgsNotEnoughRequiredArgs), requiredArgsCount, len(args)) + } + + // the last arg is not an array, max number of given args can't be greater than the number of registered args + if !isArray && len(args) > len(cmd.args) { + return nil, errors.Errorf(i18n.T(i18n.ArgsTooManyArgs), len(cmd.args), len(args)) + } + + argsMap := make(map[string][]string) + for i, arg := range cmd.args { + if len(args) > i { + if arg.isArray { + argsMap[arg.name] = args[i:] + } else { + argsMap[arg.name] = []string{args[i]} + } + } + } + + return argsMap, nil +} + +func getScopeListFromRoot(dep ScopeLevel) []ScopeLevel { + var list []ScopeLevel + for { + if dep == nil { + break + } + list = append(list, dep) + dep = dep.GetParent() + } + + slices.Reverse(list) + + return list +} diff --git a/src/cmdBuilder/cmdBuilderCreateRunFunc_test.go b/src/cmdBuilder/cmdBuilderCreateRunFunc_test.go new file mode 100644 index 00000000..41f60710 --- /dev/null +++ b/src/cmdBuilder/cmdBuilderCreateRunFunc_test.go @@ -0,0 +1,179 @@ +package cmdBuilder + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestConvertArgs(t *testing.T) { + type args struct { + cmd *Cmd + args []string + } + tests := []struct { + name string + args args + want map[string][]string + wantErr string + }{ + { + name: "no args", + args: args{ + cmd: NewCmd(), + args: []string{}, + }, + want: map[string][]string{}, + wantErr: "", + }, + { + name: "one required arg", + args: args{ + cmd: (NewCmd()).Arg("arg1"), + args: []string{"value1"}, + }, + want: map[string][]string{"arg1": {"value1"}}, + wantErr: "", + }, + { + name: "one required arg, one optional arg, one value", + args: args{ + cmd: (NewCmd()).Arg("arg1").Arg("arg2", OptionalArg()), + args: []string{"value1"}, + }, + want: map[string][]string{"arg1": {"value1"}}, + wantErr: "", + }, + { + name: "one required arg, one optional arg, two values", + args: args{ + cmd: (NewCmd()).Arg("arg1").Arg("arg2", OptionalArg()), + args: []string{"value1", "value2"}, + }, + want: map[string][]string{"arg1": {"value1"}, "arg2": {"value2"}}, + wantErr: "", + }, + { + name: "one required arg, one optional array arg, one value", + args: args{ + cmd: (NewCmd()).Arg("arg1").Arg("arg2", ArrayArg(), OptionalArg()), + args: []string{"value1"}, + }, + want: map[string][]string{"arg1": {"value1"}}, + wantErr: "", + }, + { + name: "one required arg, one optional array arg, two values", + args: args{ + cmd: (NewCmd()).Arg("arg1").Arg("arg2", ArrayArg(), OptionalArg()), + args: []string{"value1", "value2"}, + }, + want: map[string][]string{"arg1": {"value1"}, "arg2": {"value2"}}, + wantErr: "", + }, + { + name: "one required arg, one array arg, two values", + args: args{ + cmd: (NewCmd()).Arg("arg1").Arg("arg2", ArrayArg()), + args: []string{"value1", "value2"}, + }, + want: map[string][]string{"arg1": {"value1"}, "arg2": {"value2"}}, + wantErr: "", + }, + { + name: "one required arg, one array arg, three values", + args: args{ + cmd: (NewCmd()).Arg("arg1").Arg("arg2", ArrayArg()), + args: []string{"value1", "value2", "value3"}, + }, + want: map[string][]string{"arg1": {"value1"}, "arg2": {"value2", "value3"}}, + wantErr: "", + }, + // errors + { + name: "no args, one value", + args: args{ + cmd: NewCmd(), + args: []string{"value1"}, + }, + want: nil, + wantErr: "expected no more than 0 arg(s), got 1", + }, + { + name: "one required arg, no value", + args: args{ + cmd: (NewCmd()).Arg("arg1"), + args: []string{}, + }, + want: nil, + wantErr: "expected at least 1 arg(s), got 0", + }, + { + name: "one required arg, one optional arg, no values", + args: args{ + cmd: (NewCmd()).Arg("arg1").Arg("arg2", OptionalArg()), + args: []string{}, + }, + want: nil, + wantErr: "expected at least 1 arg(s), got 0", + }, + { + name: "one required arg, one optional arg, three values", + args: args{ + cmd: (NewCmd()).Arg("arg1").Arg("arg2", OptionalArg()), + args: []string{"value1", "value2", "value3"}, + }, + want: nil, + wantErr: "expected no more than 2 arg(s), got 3", + }, + { + name: "one required arg, one optional array arg, no values", + args: args{ + cmd: (NewCmd()).Arg("arg1").Arg("arg2", ArrayArg(), OptionalArg()), + args: []string{}, + }, + want: nil, + wantErr: "expected at least 1 arg(s), got 0", + }, + { + name: "one required arg, one array arg, one value", + args: args{ + cmd: (NewCmd()).Arg("arg1").Arg("arg2", ArrayArg()), + args: []string{"value1"}, + }, + want: nil, + wantErr: "expected at least 2 arg(s), got 1", + }, + // settings errors + { + name: "optional arg must be the last one", + args: args{ + cmd: (NewCmd()).Arg("arg1", OptionalArg()).Arg("arg2"), + args: nil, + }, + want: nil, + wantErr: "optional arg arg1 can be only the last on", + }, + { + name: "array arg must be the last one", + args: args{ + cmd: (NewCmd()).Arg("arg1", ArrayArg()).Arg("arg2"), + args: nil, + }, + want: nil, + wantErr: "array arg arg1 can be only the last on", + }, + } + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + got, err := convertArgs(tt.args.cmd, tt.args.args) + if tt.wantErr != "" { + require.ErrorContains(t, err, tt.wantErr) + } else { + require.NoError(t, err) + } + require.Equal(t, tt.want, got) + }) + } +} diff --git a/src/cmdBuilder/cmdBuilderExecuteRootCmd.go b/src/cmdBuilder/cmdBuilderExecuteRootCmd.go new file mode 100644 index 00000000..4ae16837 --- /dev/null +++ b/src/cmdBuilder/cmdBuilderExecuteRootCmd.go @@ -0,0 +1,210 @@ +package cmdBuilder + +import ( + "context" + "fmt" + "os" + "os/signal" + "syscall" + + "github.com/mattn/go-isatty" + "github.com/pkg/errors" + "github.com/spf13/cobra" + "github.com/zeropsio/zcli/src/cliStorage" + "github.com/zeropsio/zcli/src/constants" + "github.com/zeropsio/zcli/src/errorsx" + "github.com/zeropsio/zcli/src/flagParams" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/logger" + "github.com/zeropsio/zcli/src/storage" + "github.com/zeropsio/zcli/src/support" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zerops-go/apiError" + "golang.org/x/term" + "gopkg.in/yaml.v3" +) + +func (b *CmdBuilder) CreateAndExecuteRootCobraCmd() (err error) { + ctx, cancel := context.WithCancel(context.Background()) + regSignals(cancel) + ctx = support.Context(ctx) + + isTerminal := isTerminal() + + width, _, err := term.GetSize(0) + if err != nil { + width = 100 + } + + outputLogger, debugFileLogger := createLoggers(isTerminal) + + uxBlocks := uxBlock.NewBlock(outputLogger, debugFileLogger, isTerminal, width, cancel) + + defer func() { + if err != nil { + printError(err, uxBlocks) + } + }() + + cliStorage, err := createCliStorage() + if err != nil { + return err + } + + flagParams := flagParams.New() + + rootCmd := createRootCommand() + + for _, cmd := range b.commands { + cobraCmd, err := b.buildCobraCmd(cmd, flagParams, uxBlocks, cliStorage) + if err != nil { + return err + } + rootCmd.AddCommand(cobraCmd) + } + + err = rootCmd.ExecuteContext(ctx) + if err != nil { + printError(err, uxBlocks) + } + + return nil +} + +func createRootCommand() *cobra.Command { + rootCmd := &cobra.Command{ + Use: "zcli", + CompletionOptions: cobra.CompletionOptions{HiddenDefaultCmd: true}, + SilenceErrors: true, + } + + rootCmd.SetHelpTemplate(`` + styles.CobraSectionColor().SetString("Usage:").String() + `{{if .Runnable}} + {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} + {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}} + +` + styles.CobraSectionColor().SetString("Aliases:").String() + ` + {{.NameAndAliases}}{{end}}{{if .HasExample}} + +` + styles.CobraSectionColor().SetString("Examples:").String() + ` +{{.Example}}{{end}}{{if .HasAvailableSubCommands}}{{$cmds := .Commands}}{{if eq (len .Groups) 0}} + +` + styles.CobraSectionColor().SetString("Available Commands:").String() + `{{range $cmds}}{{if (or .IsAvailableCommand (eq .Name "help"))}} + ` + styles.CobraItemNameColor().SetString("{{rpad .Name .NamePadding }}").String() + ` {{.Short}}{{end}}{{end}}{{else}}{{range $group := .Groups}} + +{{.Title}}{{range $cmds}}{{if (and (eq .GroupID $group.ID) (or .IsAvailableCommand (eq .Name "help")))}} + ` + styles.CobraItemNameColor().SetString("{{rpad .Name .NamePadding }}").String() + ` {{.Short}}{{end}}{{end}}{{end}}{{if not .AllChildCommandsHaveGroup}} + +` + styles.CobraSectionColor().SetString("Additional Commands:").String() + `{{range $cmds}}{{if (and (eq .GroupID "") (or .IsAvailableCommand (eq .Name "help")))}} + ` + styles.CobraItemNameColor().SetString("{{rpad .Name .NamePadding }}").String() + ` {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}} + +` + styles.CobraSectionColor().SetString("Flags:").String() + ` +{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}} + +` + styles.CobraSectionColor().SetString("Global Flags:").String() + ` +{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}} + +` + styles.CobraSectionColor().SetString("Additional help topics:").String() + `{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}} + ` + styles.CobraItemNameColor().SetString("{{rpad .CommandPath .CommandPathPadding}}").String() + ` {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}} + +` + styles.CobraSectionColor().SetString("Global Env Variables:").String() + ` + ` + styles.CobraItemNameColor().SetString(constants.CliLogFilePathEnvVar).String() + ` ` + i18n.T(i18n.CliLogFilePathEnvVar) + ` + ` + styles.CobraItemNameColor().SetString(constants.CliDataFilePathEnvVar).String() + ` ` + i18n.T(i18n.CliDataFilePathEnvVar) + ` + ` + styles.CobraItemNameColor().SetString(constants.CliTerminalMode).String() + ` ` + i18n.T(i18n.CliTerminalModeEnvVar) + ` + +Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} +`) + + return rootCmd +} + +func printError(err error, uxBlocks uxBlock.UxBlocks) { + uxBlocks.LogDebug(fmt.Sprintf("error: %+v", err)) + + if userErr := errorsx.AsUserError(err); userErr != nil { + uxBlocks.PrintError(styles.ErrorLine(err.Error())) + return + } + + var apiErr apiError.Error + if errors.As(err, &apiErr) { + uxBlocks.PrintError(styles.ErrorLine(apiErr.GetMessage())) + if apiErr.GetMeta() != nil { + meta, err := yaml.Marshal(apiErr.GetMeta()) + if err != nil { + uxBlocks.PrintError(styles.ErrorLine(fmt.Sprintf("couldn't parse meta of error: %s", apiErr.GetMessage()))) + } + uxBlocks.PrintError(styles.ErrorLine(string(meta))) + } + + return + } + + uxBlocks.PrintError(styles.ErrorLine(err.Error())) +} + +type terminalMode string + +const ( + TerminalModeAuto terminalMode = "auto" + TerminalModeDisabled terminalMode = "disabled" + TerminalModeEnabled terminalMode = "enabled" +) + +func isTerminal() bool { + env := os.Getenv(constants.CliTerminalMode) + + switch terminalMode(env) { + case TerminalModeAuto, "": + return isatty.IsTerminal(os.Stdout.Fd()) || isatty.IsCygwinTerminal(os.Stdout.Fd()) + case TerminalModeDisabled: + return false + case TerminalModeEnabled: + return true + default: + os.Stdout.WriteString(styles.WarningLine(i18n.T(i18n.UnknownTerminalMode, env)).String()) + + return isatty.IsTerminal(os.Stdout.Fd()) || isatty.IsCygwinTerminal(os.Stdout.Fd()) + } +} + +func createLoggers(isTerminal bool) (*logger.Handler, *logger.Handler) { + outputLogger := logger.NewOutputLogger(logger.OutputConfig{ + IsTerminal: isTerminal, + }) + + loggerFilePath, err := constants.LogFilePath() + if err != nil { + outputLogger.Warning(styles.WarningLine(err.Error())) + } + + debugFileLogger := logger.NewDebugFileLogger(logger.DebugFileConfig{ + FilePath: loggerFilePath, + }) + + return outputLogger, debugFileLogger +} + +func regSignals(contextCancel func()) { + sigs := make(chan os.Signal, 1) + + signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) + + go func() { + <-sigs + contextCancel() + }() +} + +func createCliStorage() (*cliStorage.Handler, error) { + filePath, err := constants.CliDataFilePath() + if err != nil { + return nil, err + } + s, err := storage.New[cliStorage.Data]( + storage.Config{ + FilePath: filePath, + }, + ) + return &cliStorage.Handler{Handler: s}, err +} diff --git a/src/utils/cmdRunner/run.go b/src/cmdRunner/run.go similarity index 61% rename from src/utils/cmdRunner/run.go rename to src/cmdRunner/run.go index e95b0287..e88dcd8f 100644 --- a/src/utils/cmdRunner/run.go +++ b/src/cmdRunner/run.go @@ -8,34 +8,34 @@ import ( "strings" ) -var IpAlreadySetErr = errors.New("RTNETLINK answers: File exists") -var CannotFindDeviceErr = errors.New(`Cannot find device "wg0"`) -var OperationNotPermitted = errors.New(`Operation not permitted`) +var ErrIpAlreadySet = errors.New("RTNETLINK answers: File exists") +var ErrCannotFindDevice = errors.New(`Cannot find device "wg0"`) +var ErrOperationNotPermitted = errors.New(`Operation not permitted`) type ExecErrInterface interface { error ExitCode() int } -type execErr struct { +type execError struct { cmd *exec.Cmd prev error exitCode int } -func (e execErr) Error() string { +func (e execError) Error() string { return e.cmd.String() + ": " + e.prev.Error() } -func (e execErr) ExitCode() int { +func (e execError) ExitCode() int { return e.exitCode } -func (e execErr) Unwrap() error { +func (e execError) Unwrap() error { return e.prev } -func (e execErr) Is(target error) bool { +func (e execError) Is(target error) bool { return errors.Is(e.prev, target) } @@ -48,11 +48,12 @@ func Run(cmd *exec.Cmd) ([]byte, ExecErrInterface) { if err := cmd.Run(); err != nil { exitCode := 0 - if exitError, ok := err.(*exec.ExitError); ok { + var exitError *exec.ExitError + if errors.As(err, &exitError) { exitCode = exitError.ExitCode() } - execError := &execErr{ + execError := &execError{ cmd: cmd, exitCode: exitCode, prev: err, @@ -64,12 +65,12 @@ func Run(cmd *exec.Cmd) ([]byte, ExecErrInterface) { errOutputString := string(errOutput.Bytes()[0 : errOutput.Len()-1]) - if strings.Contains(errOutputString, OperationNotPermitted.Error()) { - execError.prev = OperationNotPermitted + if strings.Contains(errOutputString, ErrOperationNotPermitted.Error()) { + execError.prev = ErrOperationNotPermitted return nil, execError } - for _, e := range []error{IpAlreadySetErr, CannotFindDeviceErr} { + for _, e := range []error{ErrIpAlreadySet, ErrCannotFindDevice} { if errOutputString == e.Error() { execError.prev = e return nil, execError diff --git a/src/cmdRunner/run_test.go b/src/cmdRunner/run_test.go new file mode 100644 index 00000000..4826974a --- /dev/null +++ b/src/cmdRunner/run_test.go @@ -0,0 +1,18 @@ +package cmdRunner + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestWrap(t *testing.T) { + err := &execError{ + prev: ErrOperationNotPermitted, + exitCode: 1, + } + + require.ErrorIs(t, err, ErrOperationNotPermitted) + require.NotErrorIs(t, err, ErrCannotFindDevice) + require.Equal(t, 1, err.ExitCode()) +} diff --git a/src/constants/darwin.go b/src/constants/darwin.go index 61efe8b3..e744a13b 100644 --- a/src/constants/darwin.go +++ b/src/constants/darwin.go @@ -3,9 +3,35 @@ package constants -const ( - LogFilePath = "/usr/local/var/log/zerops.log" - DaemonAddress = "/usr/local/var/zerops/daemon.sock" - DaemonStorageFilePath = "/usr/local/var/zerops/daemon.data" - DaemonInstallDir = "/usr/local/" +import ( + "os" + "path" ) + +func getDataFilePathsReceivers() []pathReceiver { + return []pathReceiver{ + receiverFromEnv(CliDataFilePathEnvVar), + receiverFromOsFunc(os.UserConfigDir, ZeropsDir, CliDataFileName), + receiverFromOsFunc(os.UserHomeDir, ZeropsDir, CliDataFileName), + } +} + +func getLogFilePathReceivers() []pathReceiver { + return []pathReceiver{ + receiverFromEnv(CliLogFilePathEnvVar), + receiverFromPath(path.Join("/usr/local/var/log/", ZeropsLogFile)), + receiverFromOsFunc(os.UserConfigDir, ZeropsDir, ZeropsLogFile), + receiverFromOsFunc(os.UserHomeDir, ZeropsDir, ZeropsLogFile), + } +} + +func getWgConfigFilePathReceivers() []pathReceiver { + return []pathReceiver{ + receiverFromEnv(CliWgConfigPathEnvVar), + receiverFromPath(path.Join("/etc/wireguard/", WgConfigFile)), + receiverFromPath(path.Join("/usr/local/etc/wireguard/", WgConfigFile)), + receiverFromPath(path.Join("/opt/homebrew/etc/wireguard/", WgConfigFile)), + receiverFromOsFunc(os.UserConfigDir, ZeropsDir, WgConfigFile), + receiverFromOsFunc(os.UserHomeDir, ZeropsDir, WgConfigFile), + } +} diff --git a/src/constants/dns.go b/src/constants/dns.go deleted file mode 100644 index ce25e42c..00000000 --- a/src/constants/dns.go +++ /dev/null @@ -1,6 +0,0 @@ -package constants - -const ( - ResolvFilePath = "/etc/resolv.conf" - ResolvconfOrderFilePath = "/etc/resolvconf/interface-order" -) diff --git a/src/constants/general.go b/src/constants/general.go deleted file mode 100644 index ce6d5d87..00000000 --- a/src/constants/general.go +++ /dev/null @@ -1,3 +0,0 @@ -package constants - -const VpnApiGrpcPort = "64510" diff --git a/src/constants/linux.go b/src/constants/linux.go index c52f27d4..c824f0b4 100644 --- a/src/constants/linux.go +++ b/src/constants/linux.go @@ -3,9 +3,35 @@ package constants -const ( - LogFilePath = "/var/log/zerops/zerops.log" - DaemonAddress = "/run/zerops/daemon.sock" - DaemonStorageFilePath = "/var/lib/zerops/daemon.data" - DaemonInstallDir = "/usr/local/" +import ( + "os" + "path" ) + +func getDataFilePathsReceivers() []pathReceiver { + return []pathReceiver{ + receiverFromEnv(CliDataFilePathEnvVar), + receiverFromOsFunc(os.UserConfigDir, ZeropsDir, CliDataFileName), + receiverFromOsFunc(os.UserHomeDir, ZeropsDir, CliDataFileName), + } +} + +func getLogFilePathReceivers() []pathReceiver { + return []pathReceiver{ + receiverFromEnv(CliLogFilePathEnvVar), + receiverFromPath(path.Join("/var/log/", ZeropsLogFile)), + receiverFromOsFunc(os.UserConfigDir, ZeropsDir, ZeropsLogFile), + receiverFromOsFunc(os.UserHomeDir, ZeropsDir, ZeropsLogFile), + } +} + +func getWgConfigFilePathReceivers() []pathReceiver { + return []pathReceiver{ + receiverFromEnv(CliWgConfigPathEnvVar), + receiverFromPath(path.Join("/etc/wireguard/", WgConfigFile)), + receiverFromPath(path.Join("/usr/local/etc/wireguard/", WgConfigFile)), + receiverFromPath(path.Join("/opt/homebrew/etc/wireguard/", WgConfigFile)), + receiverFromOsFunc(os.UserConfigDir, ZeropsDir, WgConfigFile), + receiverFromOsFunc(os.UserHomeDir, ZeropsDir, WgConfigFile), + } +} diff --git a/src/constants/params.go b/src/constants/params.go deleted file mode 100644 index e99715df..00000000 --- a/src/constants/params.go +++ /dev/null @@ -1,26 +0,0 @@ -package constants - -import ( - "os" - "path/filepath" -) - -func CliLoginData() (string, error) { - return cliStorageFilepath("cli.data") -} - -func CliRegionData() (string, error) { - return cliStorageFilepath("region.data") -} - -func CliStorageFilepath() (string, error) { - return cliStorageFilepath("") -} - -func cliStorageFilepath(filename string) (string, error) { - configDir, err := os.UserConfigDir() - if err != nil { - return "", err - } - return filepath.Join(configDir, "zerops", filename), nil -} diff --git a/src/constants/projectServiceActions.go b/src/constants/projectServiceActions.go deleted file mode 100644 index 1dffe436..00000000 --- a/src/constants/projectServiceActions.go +++ /dev/null @@ -1,14 +0,0 @@ -package constants - -const ( - Success = "✓ " - Starting = "→ " - WorkingDir = "./" -) - -type ParentCmd int - -const ( - Project ParentCmd = iota - Service -) diff --git a/src/constants/windows.go b/src/constants/windows.go index 07a726d8..a7bf82b7 100644 --- a/src/constants/windows.go +++ b/src/constants/windows.go @@ -5,24 +5,32 @@ package constants import ( "os" - "path/filepath" ) -var ( - LogFilePath, - DaemonStorageFilePath, - DaemonAddress, - DaemonInstallDir string -) +// this is here to make linter happy +var _ = ZeropsDir +var _ = receiverFromPath -const WireguardPath = `C:\Program Files\wireguard` +func getDataFilePathsReceivers() []pathReceiver { + return []pathReceiver{ + receiverFromEnv(CliDataFilePathEnvVar), + receiverFromOsFunc(os.UserConfigDir, "Zerops", CliDataFileName), + receiverFromOsFunc(os.UserHomeDir, "Zerops", CliDataFileName), + } +} -func init() { - appData, _ := os.UserConfigDir() - zeropsFolder := filepath.Join(appData, "Zerops") +func getLogFilePathReceivers() []pathReceiver { + return []pathReceiver{ + receiverFromEnv(CliLogFilePathEnvVar), + receiverFromOsFunc(os.UserConfigDir, "Zerops", ZeropsLogFile), + receiverFromOsFunc(os.UserHomeDir, "Zerops", ZeropsLogFile), + } +} - LogFilePath = filepath.Join(zeropsFolder, "zerops.log") - DaemonAddress = ":45677" - DaemonStorageFilePath = filepath.Join(zeropsFolder, "daemon.data") - DaemonInstallDir = zeropsFolder +func getWgConfigFilePathReceivers() []pathReceiver { + return []pathReceiver{ + receiverFromEnv(CliWgConfigPathEnvVar), + receiverFromOsFunc(os.UserConfigDir, "Zerops", WgConfigFile), + receiverFromOsFunc(os.UserHomeDir, "Zerops", WgConfigFile), + } } diff --git a/src/constants/zerops.go b/src/constants/zerops.go new file mode 100644 index 00000000..d8f24cf7 --- /dev/null +++ b/src/constants/zerops.go @@ -0,0 +1,108 @@ +package constants + +import ( + "os" + "path" + "path/filepath" + "strings" + + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/i18n" +) + +const ( + DefaultRegionUrl = "https://api.app.zerops.io/api/rest/public/region/zcli" + ZeropsDir = "zerops" + ZeropsLogFile = "zerops.log" + WgConfigFile = "zerops.conf" + CliDataFileName = "cli.data" + CliDataFilePathEnvVar = "ZEROPS_CLI_DATA_FILE_PATH" + CliLogFilePathEnvVar = "ZEROPS_CLI_LOG_FILE_PATH" + CliWgConfigPathEnvVar = "ZEROPS_WG_CONFIG_FILE_PATH" + CliTerminalMode = "ZEROPS_CLI_TERMINAL_MODE" +) + +type pathReceiver func() (path string, err error) + +func CliDataFilePath() (string, error) { + return checkReceivers(getDataFilePathsReceivers(), i18n.UnableToWriteCliData) +} + +func LogFilePath() (string, error) { + return checkReceivers(getLogFilePathReceivers(), i18n.UnableToWriteLogFile) +} + +func WgConfigFilePath() (string, error) { + return checkReceivers(getWgConfigFilePathReceivers(), i18n.UnableToWriteLogFile) +} + +func checkReceivers(pathReceivers []pathReceiver, errorText string) (string, error) { + path := findFirstWritablePath(pathReceivers) + if path == "" { + paths := make([]string, 0, len(pathReceivers)) + for _, p := range pathReceivers { + _, err := p() + paths = append(paths, err.Error()) + } + return "", errors.New(i18n.T(errorText, "\n"+strings.Join(paths, "\n")+"\n")) + } + return path, nil +} + +func receiverFromPath(path string) pathReceiver { + return func() (string, error) { + return checkPath(path) + } +} + +func receiverFromEnv(envName string) pathReceiver { + return func() (string, error) { + env := os.Getenv(envName) + if env == "" { + return "", errors.Errorf("env %s is empty", envName) + } + return checkPath(env) + } +} + +func receiverFromOsFunc(osFunc func() (string, error), elem ...string) pathReceiver { + return func() (string, error) { + dir, err := osFunc() + if err != nil { + return "", err + } + elem = append([]string{dir}, elem...) + + return filepath.Join(elem...), nil + } +} + +func findFirstWritablePath(paths []pathReceiver) string { + for _, p := range paths { + path, err := p() + if err == nil { + return path + } + } + + return "" +} + +func checkPath(filePath string) (string, error) { + dir := path.Dir(filePath) + + if err := os.MkdirAll(dir, 0775); err != nil { + return "", err + } + + f, err := os.OpenFile(filePath, os.O_RDONLY|os.O_CREATE, 0666) + if err != nil { + return "", err + } + err = f.Close() + if err != nil { + return "", err + } + + return filePath, nil +} diff --git a/src/daemonInstaller/daemon.go b/src/daemonInstaller/daemon.go deleted file mode 100644 index 1e54221b..00000000 --- a/src/daemonInstaller/daemon.go +++ /dev/null @@ -1,15 +0,0 @@ -package daemonInstaller - -import "errors" - -type daemon interface { - Install() error - Remove() error - IsInstalled() bool -} - -var ( - ErrElevatedPrivileges = errors.New("Installation continues in the new window") - ErrAlreadyInstalled = errors.New("Service has already been installed") - ErrNotInstalled = errors.New("Service is not installed") -) diff --git a/src/daemonInstaller/handler.go b/src/daemonInstaller/handler.go deleted file mode 100644 index 63cbe3b2..00000000 --- a/src/daemonInstaller/handler.go +++ /dev/null @@ -1,56 +0,0 @@ -package daemonInstaller - -import ( - "os/exec" - - "github.com/zeropsio/zcli/src/i18n" - - "github.com/zeropsio/zcli/src/utils/cmdRunner" -) - -type Config struct { -} - -type Handler struct { - daemon daemon -} - -func New(_ Config) (*Handler, error) { - daemon, err := newDaemon("zeropsdaemon", i18n.DaemonInstallerDesc, []string{"network.target"}) - if err != nil { - return nil, err - } - - return &Handler{ - daemon: daemon, - }, nil -} - -func (h *Handler) Install() error { - return h.daemon.Install() -} - -func (h *Handler) Remove() error { - return h.daemon.Remove() -} - -func (h *Handler) IsInstalled() bool { - return h.daemon.IsInstalled() -} - -func sudoCommands(cmds ...*exec.Cmd) error { - for _, cmd := range cmds { - sudoCmd := exec.Command("sudo", cmd.Args...) - sudoCmd.Env = cmd.Env - sudoCmd.Stdin = cmd.Stdin - sudoCmd.Stderr = cmd.Stderr - sudoCmd.Stdout = cmd.Stdout - sudoCmd.Dir = cmd.Dir - - _, err := cmdRunner.Run(sudoCmd) - if err != nil { - return err - } - } - return nil -} diff --git a/src/daemonInstaller/handler_darwin.go b/src/daemonInstaller/handler_darwin.go deleted file mode 100644 index 36bd6b6b..00000000 --- a/src/daemonInstaller/handler_darwin.go +++ /dev/null @@ -1,200 +0,0 @@ -//go:build darwin -// +build darwin - -package daemonInstaller - -import ( - "errors" - "os" - "os/exec" - "path" - "path/filepath" - "regexp" - "text/template" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" -) - -type darwinRecord struct { - name string - description string - dependencies []string -} - -func newDaemon(name, description string, dependencies []string) (daemon, error) { - return &darwinRecord{ - name: name, - description: description, - dependencies: dependencies, - }, nil -} - -const defaultPath = "/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin" - -func (daemon *darwinRecord) Install() error { - if daemon.IsInstalled() { - return ErrAlreadyInstalled - } - - _, err := exec.LookPath("wg") - if err != nil { - return errors.New(i18n.DaemonInstallWireguardNotFoundDarwin) - } - - _, err = exec.LookPath("wireguard-go") - if err != nil { - return errors.New(i18n.DaemonInstallWireguardNotFoundDarwin) - } - - cliBinaryPath, err := os.Executable() - if err != nil { - return err - } - - serviceFilePath := path.Join(os.TempDir(), daemon.name) - file, err := os.Create(serviceFilePath) - if err != nil { - return err - } - defer file.Close() - - logDir := filepath.Dir(constants.LogFilePath) - daemonStorageDir := filepath.Dir(constants.DaemonStorageFilePath) - - userPath, ok := os.LookupEnv("PATH") - if !ok { - userPath = defaultPath - } - - templ, err := template.New("propertyList").Parse(propertyList) - if err != nil { - return err - } - if err := templ.Execute( - file, - &struct { - BinaryPath string - Name string - LogFile string - WorkingDir string - PathEnv string - }{ - BinaryPath: path.Join(constants.DaemonInstallDir, daemon.name), - Name: daemon.name, - LogFile: constants.LogFilePath, - WorkingDir: daemonStorageDir, - PathEnv: userPath, - }, - ); err != nil { - return err - } - - { - err := sudoCommands( - exec.Command("cp", serviceFilePath, daemon.servicePath()), - exec.Command("cp", cliBinaryPath, path.Join(constants.DaemonInstallDir, daemon.name)), - exec.Command("mkdir", "-p", daemonStorageDir), - exec.Command("mkdir", "-p", logDir), - - exec.Command("launchctl", "load", daemon.servicePath()), - ) - if err != nil { - return err - } - } - - return nil -} - -func (daemon *darwinRecord) Remove() error { - - if !daemon.IsInstalled() { - return ErrNotInstalled - } - - if daemon.checkRunning() { - err := sudoCommands( - exec.Command("launchctl", "unload", daemon.servicePath()), - ) - if err != nil { - return err - } - } - - daemonStorageDir := filepath.Dir(constants.DaemonStorageFilePath) - - { - err := sudoCommands( - exec.Command("rm", "-f", daemon.servicePath()), - exec.Command("rm", "-f", path.Join(constants.DaemonInstallDir, daemon.name)), - exec.Command("rm", "-rf", daemonStorageDir), - ) - if err != nil { - return err - } - } - - return nil -} - -func (daemon *darwinRecord) IsInstalled() bool { - if _, err := os.Stat(daemon.servicePath()); err != nil { - return false - } - - return daemon.checkRunning() -} - -func (daemon *darwinRecord) checkRunning() bool { - output, err := exec.Command("sudo", "launchctl", "list", daemon.name).Output() - if err == nil { - if matched, err := regexp.MatchString(daemon.name, string(output)); err == nil && matched { - reg := regexp.MustCompile("PID\" = ([0-9]+);") - data := reg.FindStringSubmatch(string(output)) - if len(data) > 1 { - return true - } - return true - } - } - - return false -} - -func (daemon *darwinRecord) servicePath() string { - return "/Library/LaunchDaemons/" + daemon.name + ".plist" -} - -var propertyList = ` - - - - KeepAlive - - Label - {{.Name}} - ProgramArguments - - {{.BinaryPath}} - daemon - run - - RunAtLoad - - WorkingDirectory - {{.WorkingDir}} - StandardErrorPath - {{.LogFile}} - StandardOutPath - {{.LogFile}} - EnvironmentVariables - - PATH - {{.PathEnv}} - HOME - /etc - - - -` diff --git a/src/daemonInstaller/handler_linux.go b/src/daemonInstaller/handler_linux.go deleted file mode 100644 index e6dd6d77..00000000 --- a/src/daemonInstaller/handler_linux.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:build linux -// +build linux - -package daemonInstaller - -import ( - "errors" - "os" -) - -func newDaemon(name, description string, dependencies []string) (daemon, error) { - - if _, err := os.Stat("/run/systemd/system"); err == nil { - return &systemDRecord{ - name: name, - description: description, - dependencies: dependencies, - }, nil - } - return nil, errors.New("systemd is not installed") -} diff --git a/src/daemonInstaller/handler_linux_systemd.go b/src/daemonInstaller/handler_linux_systemd.go deleted file mode 100644 index 3e3b5e1c..00000000 --- a/src/daemonInstaller/handler_linux_systemd.go +++ /dev/null @@ -1,184 +0,0 @@ -//go:build linux - -package daemonInstaller - -import ( - _ "embed" - "errors" - "os" - "os/exec" - "path" - "path/filepath" - "regexp" - "strings" - "text/template" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/daemonStorage" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/vpn" -) - -type systemDRecord struct { - name string - description string - dependencies []string -} - -func (daemon *systemDRecord) Install() error { - if daemon.IsInstalled() { - return ErrAlreadyInstalled - } - - _, err := exec.LookPath("wg") - if err != nil { - return errors.New(i18n.DaemonInstallWireguardNotFound) - } - - tmpServiceFilePath := path.Join(os.TempDir(), daemon.serviceName()) - file, err := os.Create(tmpServiceFilePath) - if err != nil { - return err - } - defer file.Close() - - tmpl, err := template.New("systemdConfig").Parse(systemdConfig) - if err != nil { - return err - } - - // create read writes paths - logDir := filepath.Dir(constants.LogFilePath) - daemonStorageDir := filepath.Dir(constants.DaemonStorageFilePath) - readWritePaths := []string{ - logDir, - daemonStorageDir, - } - - dnsManagement, err := vpn.DnsDetect() - if err != nil { - return err - } - if dnsManagement == daemonStorage.LocalDnsManagementResolveConf { - dir := filepath.Dir(constants.ResolvconfOrderFilePath) - readWritePaths = append(readWritePaths, dir) - readWritePaths = append(readWritePaths, "/run/resolvconf/") - } - if dnsManagement == daemonStorage.LocalDnsManagementFile { - dir := filepath.Dir(constants.ResolvFilePath) - readWritePaths = append(readWritePaths, dir) - } - - runtimeDirectoryName := path.Base(path.Dir(constants.DaemonAddress)) - - if err := tmpl.Execute( - file, - &struct { - BinaryPath string - Description string - Dependencies string - LogDir string - RuntimeDirectoryName string - ReadWritePaths []string - }{ - BinaryPath: path.Join(constants.DaemonInstallDir, daemon.name), - Description: daemon.description, - Dependencies: strings.Join(daemon.dependencies, " "), - RuntimeDirectoryName: runtimeDirectoryName, - ReadWritePaths: readWritePaths, - }, - ); err != nil { - return err - } - - binaryPath, err := os.Executable() - if err != nil { - return err - } - - { - err := sudoCommands( - exec.Command("cp", tmpServiceFilePath, daemon.servicePath()), - exec.Command("rm", tmpServiceFilePath), - exec.Command("cp", binaryPath, path.Join(constants.DaemonInstallDir, daemon.name)), - exec.Command("mkdir", "-p", daemonStorageDir), - exec.Command("mkdir", "-p", logDir), - exec.Command("systemctl", "daemon-reload"), - exec.Command("systemctl", "enable", daemon.serviceName()), - exec.Command("systemctl", "start", daemon.serviceName()), - ) - if err != nil { - return err - } - } - - return nil -} - -func (daemon *systemDRecord) Remove() error { - if !daemon.IsInstalled() { - return ErrNotInstalled - } - - if daemon.checkRunning() { - err := sudoCommands( - exec.Command("systemctl", "stop", daemon.serviceName()), - exec.Command("systemctl", "disable", daemon.serviceName()), - ) - if err != nil { - return err - } - } - - logDir := filepath.Dir(constants.LogFilePath) - DaemonStorageDir := filepath.Dir(constants.DaemonStorageFilePath) - - { - err := sudoCommands( - exec.Command("rm", "-f", daemon.servicePath()), - exec.Command("rm", "-f", path.Join(constants.DaemonInstallDir, daemon.name)), - exec.Command("rm", "-rf", DaemonStorageDir), - exec.Command("rm", "-rf", logDir), - ) - if err != nil { - return err - } - } - - return nil -} - -func (daemon *systemDRecord) IsInstalled() bool { - if _, err := os.Stat(daemon.servicePath()); err != nil { - return false - } - err := exec.Command("systemctl", "check", daemon.name).Run() - return err == nil -} - -func (daemon *systemDRecord) serviceName() string { - return daemon.name + ".service" -} - -func (daemon *systemDRecord) servicePath() string { - return "/etc/systemd/system/" + daemon.serviceName() -} - -func (daemon *systemDRecord) checkRunning() bool { - output, err := exec.Command("sudo", "systemctl", "status", daemon.serviceName()).Output() - if err == nil { - if matched, err := regexp.MatchString("Active: active", string(output)); err == nil && matched { - reg := regexp.MustCompile("Main PID: ([0-9]+)") - data := reg.FindStringSubmatch(string(output)) - if len(data) > 1 { - return true - } - return true - } - } - - return false -} - -//go:embed templates/systemd.service.tmpl -var systemdConfig string diff --git a/src/daemonInstaller/handler_windows.go b/src/daemonInstaller/handler_windows.go deleted file mode 100644 index 44893774..00000000 --- a/src/daemonInstaller/handler_windows.go +++ /dev/null @@ -1,163 +0,0 @@ -//go:build windows -// +build windows - -package daemonInstaller - -import ( - "errors" - "fmt" - "os" - "path/filepath" - "strings" - "syscall" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/utils" - "golang.org/x/sys/windows" - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/mgr" -) - -type windowsRecord struct { - name string - description string - dependencies []string -} - -func newDaemon(name, description string, dependencies []string) (daemon, error) { - return &windowsRecord{ - name: name, - description: description, - dependencies: dependencies, - }, nil -} - -const errnoServiceAlreadyExists = syscall.Errno(1073) - -func (daemon *windowsRecord) Install() error { - exists, err := utils.FileExists(filepath.Join(constants.WireguardPath, "wireguard.exe")) - if err != nil || !exists { - return errors.New(i18n.DaemonInstallWireguardNotFound) - } - - err = checkAndRunAsAdmin() - if err != nil { - return err - } - - m, err := mgr.Connect() - if err != nil { - return err - } - defer m.Disconnect() - - binaryPath, err := os.Executable() - if err != nil { - return err - } - - ser, err := m.CreateService(daemon.name, binaryPath, mgr.Config{ - Description: daemon.description, - DisplayName: "zerops daemon", - StartType: mgr.StartAutomatic, - ServiceStartName: ".\\LocalSystem", - ErrorControl: mgr.ErrorNormal, - }, "daemon", "run") - - if errors.Is(err, errnoServiceAlreadyExists) { - ser, err = m.OpenService(daemon.name) - } - - if err != nil { - return err - } - defer ser.Close() - - return ser.Start() -} - -func (daemon *windowsRecord) Remove() error { - if !daemon.IsInstalled() { - return ErrNotInstalled - } - - err := checkAndRunAsAdmin() - if err != nil { - return err - } - - m, err := mgr.Connect() - if err != nil { - return err - } - defer m.Disconnect() - - ser, err := m.OpenService(daemon.name) - if err != nil { - return err - } - defer ser.Close() - - ser.Control(svc.Stop) - return ser.Delete() -} - -func (daemon *windowsRecord) IsInstalled() bool { - h, err := windows.OpenSCManager(nil, nil, windows.SC_MANAGER_CONNECT) - if err != nil { - return false - } - defer windows.Close(h) - - if err != nil { - return false - } - serviceName, err := syscall.UTF16PtrFromString(daemon.name) - if err != nil { - return false - } - ser, err := windows.OpenService(h, serviceName, windows.SERVICE_QUERY_STATUS) - if err != nil { - return false - } - defer windows.CloseServiceHandle(ser) - return true -} - -func checkAndRunAsAdmin() error { - if !runsUnderAdmin() { - err := runAsAdmin() - if err != nil { - return err - } - fmt.Println(i18n.DaemonElevated) - return ErrElevatedPrivileges - } - return nil -} - -func runAsAdmin() error { - verb := "runas" - exe, _ := os.Executable() - cwd, _ := os.Getwd() - args := strings.Join(append([]string{"/k", exe}, os.Args[1:]...), " ") - exe = "cmd.exe" - - verbPtr, _ := syscall.UTF16PtrFromString(verb) - exePtr, _ := syscall.UTF16PtrFromString(exe) - cwdPtr, _ := syscall.UTF16PtrFromString(cwd) - argPtr, _ := syscall.UTF16PtrFromString(args) - - var showCmd int32 = 1 //SW_NORMAL - - err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) - return err -} -func runsUnderAdmin() bool { - _, err := os.Open("\\\\.\\PHYSICALDRIVE0") - if err != nil { - return false - } - return true -} diff --git a/src/daemonInstaller/templates/systemd.service.tmpl b/src/daemonInstaller/templates/systemd.service.tmpl deleted file mode 100644 index 643ea59b..00000000 --- a/src/daemonInstaller/templates/systemd.service.tmpl +++ /dev/null @@ -1,31 +0,0 @@ -[Unit] -Description={{.Description}} -Requires={{.Dependencies}} -After={{.Dependencies}} - -[Service] -ExecStart={{.BinaryPath}} daemon run -ExecReload=/bin/kill -HUP $MAINPID -Restart=on-failure -User=root -Group=root -RestartSec=3 - -# Hardening -ProtectSystem=strict -ProtectKernelTunables=yes -ProtectControlGroups=yes -ProtectHome=yes -ProtectKernelModules=yes -PrivateTmp=yes -RestrictRealtime=yes -RestrictNamespaces=yes - -{{ range .ReadWritePaths -}} -ReadWritePaths={{ . }} -{{ end -}} -RuntimeDirectory={{.RuntimeDirectoryName}} -RuntimeDirectoryMode=0775 - -[Install] -WantedBy=multi-user.target \ No newline at end of file diff --git a/src/daemonServer/handler.go b/src/daemonServer/handler.go deleted file mode 100644 index 97674b02..00000000 --- a/src/daemonServer/handler.go +++ /dev/null @@ -1,111 +0,0 @@ -package daemonServer - -import ( - "context" - "errors" - "fmt" - "net" - "net/url" - "os" - "path/filepath" - "time" - - "github.com/zeropsio/zcli/src/proto/daemon" - "github.com/zeropsio/zcli/src/vpn" - "google.golang.org/grpc" -) - -type Config struct { - Socket string - Address string -} - -type Handler struct { - daemon.UnimplementedZeropsDaemonProtocolServer - - config Config - vpn *vpn.Handler -} - -func New(config Config, vpn *vpn.Handler) *Handler { - return &Handler{ - config: config, - vpn: vpn, - } -} - -func (h *Handler) Run(ctx context.Context) error { - address, err := url.Parse(h.config.Socket) - if err != nil { - return err - } - - err = removeUnusedServerSocket(address) - if err != nil { - return err - } - - var lis net.Listener - if h.config.Socket != "" { - lis, err = net.Listen("unix", h.config.Socket) - if err != nil { - return errors.New(fmt.Sprintf("failed to listen: %v", err)) - } - if err := os.Chmod(h.config.Socket, 0666); err != nil { - return errors.New(fmt.Sprintf("failed to chmod: %v", err)) - } - - } else if h.config.Address != "" { - lis, err = net.Listen("tcp", h.config.Address) - if err != nil { - return errors.New(fmt.Sprintf("failed to listen: %v", err)) - } - } - - var opts []grpc.ServerOption - grpcServer := grpc.NewServer(opts...) - daemon.RegisterZeropsDaemonProtocolServer(grpcServer, h) - - go func() { - grpcServer.Serve(lis) - }() - - <-ctx.Done() - - err = lis.Close() - if err != nil { - return errors.New(fmt.Sprintf("failed to close listen: %v", err)) - } - - grpcServer.GracefulStop() - - return nil -} - -func removeUnusedServerSocket(address *url.URL) error { - - socketDir := filepath.Dir(address.Path) - if err := os.MkdirAll(socketDir, 0755); err != nil { - return fmt.Errorf("unable to create socket directory (%s)", socketDir) - } - - if err := os.Chmod(socketDir, 0755); err != nil { - return fmt.Errorf("unable to change socket directory (%s) permissions", socketDir) - } - - if _, errFound := os.Stat(address.Path); errFound != nil { - return nil - } - - conn, err := net.DialTimeout("unix", address.Path, 1*time.Second) - if serverIsRunning := err == nil; serverIsRunning { - defer func() { _ = conn.Close() }() - return fmt.Errorf("socket %s already in use", address.String()) - } - - _ = os.Remove(address.Path) - if _, errFound := os.Stat(address.Path); errFound == nil { - return fmt.Errorf("unused socket %s can't be deleted", address.String()) - } - return nil -} diff --git a/src/daemonServer/handler_startVpn.go b/src/daemonServer/handler_startVpn.go deleted file mode 100644 index 8e529851..00000000 --- a/src/daemonServer/handler_startVpn.go +++ /dev/null @@ -1,27 +0,0 @@ -package daemonServer - -import ( - "context" - - "github.com/zeropsio/zcli/src/proto/daemon" -) - -func (h *Handler) StartVpn(ctx context.Context, request *daemon.StartVpnRequest) (*daemon.VpnStatus, error) { - - if err := h.vpn.StartVpn( - ctx, - request.GetApiAddress(), - request.GetVpnAddress(), - request.GetToken(), - request.GetProjectId(), - request.GetUserId(), - request.GetMtu(), - request.GetCaCertificateUrl(), - request.GetPreferredPortMin(), - request.GetPreferredPortMax(), - ); err != nil { - return nil, err - } - - return h.StatusVpn(ctx, &daemon.StatusVpnRequest{}) -} diff --git a/src/daemonServer/handler_statusVpn.go b/src/daemonServer/handler_statusVpn.go deleted file mode 100644 index c75d627b..00000000 --- a/src/daemonServer/handler_statusVpn.go +++ /dev/null @@ -1,11 +0,0 @@ -package daemonServer - -import ( - "context" - - "github.com/zeropsio/zcli/src/proto/daemon" -) - -func (h *Handler) StatusVpn(ctx context.Context, _ *daemon.StatusVpnRequest) (*daemon.VpnStatus, error) { - return h.vpn.StatusVpn(ctx) -} diff --git a/src/daemonServer/handler_stopVpn.go b/src/daemonServer/handler_stopVpn.go deleted file mode 100644 index 9c44f33a..00000000 --- a/src/daemonServer/handler_stopVpn.go +++ /dev/null @@ -1,14 +0,0 @@ -package daemonServer - -import ( - "context" - - "github.com/zeropsio/zcli/src/proto/daemon" -) - -func (h *Handler) StopVpn(ctx context.Context, _ *daemon.StopVpnRequest) (*daemon.VpnStatus, error) { - if err := h.vpn.StopVpn(ctx); err != nil { - return nil, err - } - return h.vpn.StatusVpn(ctx) -} diff --git a/src/daemonStorage/handler.go b/src/daemonStorage/handler.go deleted file mode 100644 index 7cd8536e..00000000 --- a/src/daemonStorage/handler.go +++ /dev/null @@ -1,46 +0,0 @@ -package daemonStorage - -import ( - "net" - "time" - - "github.com/zeropsio/zcli/src/utils/storage" -) - -type Handler struct { - *storage.Handler[Data] -} - -type LocalDnsManagement string - -const ( - LocalDnsManagementSystemdResolve LocalDnsManagement = "SYSTEMD_RESOLVE" - LocalDnsManagementResolveConf LocalDnsManagement = "RESOLVCONF" - LocalDnsManagementFile LocalDnsManagement = "FILE" - LocalDnsManagementNetworkSetup LocalDnsManagement = "NETWORKSETUP" - LocalDnsManagementUnknown LocalDnsManagement = "UNKNOWN" - LocalDnsManagementWindows LocalDnsManagement = "WINDOWS" -) - -type Data struct { - ProjectId string - UserId string - VpnNetwork net.IPNet - GrpcApiAddress string - GrpcVpnAddress string - GrpcTargetVpnAddress string - CaCertificateUrl string - Token string - PreferredPortMin uint32 - PreferredPortMax uint32 - - ServerIp net.IP - DnsIp net.IP - ClientIp net.IP - Mtu uint32 - DnsManagement LocalDnsManagement - - InterfaceName string - - Expiry time.Time -} diff --git a/src/entity/appVersion.go b/src/entity/appVersion.go new file mode 100644 index 00000000..3402bdd5 --- /dev/null +++ b/src/entity/appVersion.go @@ -0,0 +1,36 @@ +package entity + +import ( + "github.com/zeropsio/zerops-go/dto/output" + "github.com/zeropsio/zerops-go/types" + "github.com/zeropsio/zerops-go/types/enum" + "github.com/zeropsio/zerops-go/types/stringId" + "github.com/zeropsio/zerops-go/types/uuid" +) + +type AppVersion struct { + Id uuid.AppVersionId + ClientId uuid.ClientId + ProjectId uuid.ProjectId + ServiceId uuid.ServiceStackId + Source enum.AppVersionSourceEnum + Sequence types.Int + Status enum.AppVersionStatusEnum + Created types.DateTime + LastUpdate types.DateTime + Build *output.AppVersionBuild +} + +type AppVersionBuild struct { + ServiceStackId uuid.ServiceStackIdNull + ServiceStackName types.StringNull + ServiceStackTypeVersionId stringId.ServiceStackTypeVersionIdNull + PipelineStart types.DateTimeNull + PipelineFinish types.DateTimeNull + PipelineFailed types.DateTimeNull + ContainerCreationStart types.DateTimeNull + StartDate types.DateTimeNull + EndDate types.DateTimeNull + CacheUsed types.Bool + HasCurrentCache types.Bool +} diff --git a/src/entity/container.go b/src/entity/container.go new file mode 100644 index 00000000..44ff4964 --- /dev/null +++ b/src/entity/container.go @@ -0,0 +1,19 @@ +package entity + +import ( + "github.com/zeropsio/zerops-go/types" + "github.com/zeropsio/zerops-go/types/enum" + "github.com/zeropsio/zerops-go/types/uuid" +) + +type Container struct { + ID uuid.ContainerId + ClientId uuid.ClientId + ProjectId uuid.ProjectId + ServiceId uuid.ServiceStackId + Status enum.ContainerStatusEnum + Number types.Int + Name types.StringNull + Hostname types.StringNull + Created types.DateTime +} diff --git a/src/entity/org.go b/src/entity/org.go new file mode 100644 index 00000000..d70e049b --- /dev/null +++ b/src/entity/org.go @@ -0,0 +1,13 @@ +package entity + +import ( + "github.com/zeropsio/zerops-go/types" + "github.com/zeropsio/zerops-go/types/enum" + "github.com/zeropsio/zerops-go/types/uuid" +) + +type Org struct { + ID uuid.ClientId + Role enum.ClientUserRoleCodeEnum + Name types.String +} diff --git a/src/entity/project.go b/src/entity/project.go new file mode 100644 index 00000000..f5d39c37 --- /dev/null +++ b/src/entity/project.go @@ -0,0 +1,15 @@ +package entity + +import ( + "github.com/zeropsio/zerops-go/types" + "github.com/zeropsio/zerops-go/types/enum" + "github.com/zeropsio/zerops-go/types/uuid" +) + +type Project struct { + ID uuid.ProjectId + Name types.String + ClientId uuid.ClientId + Description types.Text + Status enum.ProjectStatusEnum +} diff --git a/src/entity/repository/appVersion.go b/src/entity/repository/appVersion.go new file mode 100644 index 00000000..36e98565 --- /dev/null +++ b/src/entity/repository/appVersion.go @@ -0,0 +1,112 @@ +package repository + +import ( + "context" + + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" + "github.com/zeropsio/zerops-go/dto/input/body" + "github.com/zeropsio/zerops-go/dto/output" + "github.com/zeropsio/zerops-go/types" +) + +func GetAllAppVersionByService( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, + service entity.Service, +) ([]entity.AppVersion, error) { + var searchData []body.EsSearchItem + searchData = append(searchData, body.EsSearchItem{ + Name: "clientId", + Operator: "eq", + Value: service.ClientId.TypedString(), + }, body.EsSearchItem{ + Name: "serviceStackId", + Operator: "eq", + Value: service.ID.TypedString(), + }, body.EsSearchItem{ + Name: "build.serviceStackId", + Operator: "ne", + Value: "", + }) + + response, err := restApiClient.PostAppVersionSearch(ctx, body.EsFilter{ + Search: searchData, + }) + if err != nil { + return nil, err + } + + resOutput, err := response.Output() + if err != nil { + return nil, err + } + + appVersions := make([]entity.AppVersion, 0, len(resOutput.Items)) + for _, appVersion := range resOutput.Items { + appVersions = append(appVersions, appVersionFromEsSearch(appVersion)) + } + + return appVersions, nil +} + +func GetLatestAppVersionByService( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, + service entity.Service, +) ([]entity.AppVersion, error) { + var searchData []body.EsSearchItem + searchData = append(searchData, body.EsSearchItem{ + Name: "clientId", + Operator: "eq", + Value: service.ClientId.TypedString(), + }, body.EsSearchItem{ + Name: "serviceStackId", + Operator: "eq", + Value: service.ID.TypedString(), + }, body.EsSearchItem{ + Name: "build.serviceStackId", + Operator: "ne", + Value: "", + }) + var sortData []body.EsSortItem + sortData = append(sortData, body.EsSortItem{ + Name: "sequence", + Ascending: types.NewBoolNull(false), + }) + + response, err := restApiClient.PostAppVersionSearch(ctx, body.EsFilter{ + Search: searchData, + Sort: sortData, + Limit: types.NewIntNull(1), + }) + if err != nil { + return nil, err + } + resOutput, err := response.Output() + if err != nil { + return nil, err + } + + appVersions := make([]entity.AppVersion, 0, len(resOutput.Items)) + for _, appVersion := range resOutput.Items { + appVersions = append(appVersions, appVersionFromEsSearch(appVersion)) + } + + return appVersions, nil +} + +func appVersionFromEsSearch(esAppVersion output.EsAppVersion) entity.AppVersion { + return entity.AppVersion{ + Id: esAppVersion.Id, + ClientId: esAppVersion.ClientId, + ProjectId: esAppVersion.ProjectId, + ServiceId: esAppVersion.ServiceStackId, + Source: esAppVersion.Source, + Sequence: esAppVersion.Sequence, + Status: esAppVersion.Status, + Created: esAppVersion.Created, + LastUpdate: esAppVersion.LastUpdate, + Build: esAppVersion.Build, + } +} diff --git a/src/entity/repository/container.go b/src/entity/repository/container.go new file mode 100644 index 00000000..aa957456 --- /dev/null +++ b/src/entity/repository/container.go @@ -0,0 +1,60 @@ +package repository + +import ( + "context" + + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" + "github.com/zeropsio/zerops-go/dto/input/body" + "github.com/zeropsio/zerops-go/dto/output" +) + +func GetAllContainers( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, + service entity.Service, +) ([]entity.Container, error) { + var searchData []body.EsSearchItem + searchData = append(searchData, body.EsSearchItem{ + Name: "clientId", + Operator: "eq", + Value: service.ClientId.TypedString(), + }, body.EsSearchItem{ + Name: "serviceStackId", + Operator: "eq", + Value: service.ID.TypedString(), + }) + + response, err := restApiClient.PostContainerSearch(ctx, body.EsFilter{ + Search: searchData, + }) + if err != nil { + return nil, err + } + + resOutput, err := response.Output() + if err != nil { + return nil, err + } + + containers := make([]entity.Container, 0, len(resOutput.Items)) + for _, container := range resOutput.Items { + containers = append(containers, containerFromEsSearch(container)) + } + + return containers, nil +} + +func containerFromEsSearch(esContainer output.EsContainer) entity.Container { + return entity.Container{ + ID: esContainer.Id, + ClientId: esContainer.ClientId, + ProjectId: esContainer.ProjectId, + ServiceId: esContainer.ServiceStackId, + Status: esContainer.Status, + Number: esContainer.Number, + Name: esContainer.Name, + Hostname: esContainer.Hostname, + Created: esContainer.Created, + } +} diff --git a/src/entity/repository/org.go b/src/entity/repository/org.go new file mode 100644 index 00000000..5954c9fb --- /dev/null +++ b/src/entity/repository/org.go @@ -0,0 +1,39 @@ +package repository + +import ( + "context" + + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" + "github.com/zeropsio/zerops-go/dto/output" +) + +func GetAllOrgs( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, +) ([]entity.Org, error) { + response, err := restApiClient.GetUserInfo(ctx) + if err != nil { + return nil, err + } + + resOutput, err := response.Output() + if err != nil { + return nil, err + } + + orgs := make([]entity.Org, 0, len(resOutput.ClientUserList)) + for _, client := range resOutput.ClientUserList { + orgs = append(orgs, orgFromEsSearch(client)) + } + + return orgs, nil +} + +func orgFromEsSearch(esClientUser output.ClientUserExtra) entity.Org { + return entity.Org{ + ID: esClientUser.ClientId, + Name: esClientUser.Client.AccountName, + Role: esClientUser.RoleCode, + } +} diff --git a/src/entity/repository/project.go b/src/entity/repository/project.go new file mode 100644 index 00000000..a20563cd --- /dev/null +++ b/src/entity/repository/project.go @@ -0,0 +1,87 @@ +package repository + +import ( + "context" + + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" + "github.com/zeropsio/zerops-go/dto/input/path" + "github.com/zeropsio/zerops-go/dto/output" + "github.com/zeropsio/zerops-go/types/uuid" +) + +func GetProjectById( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, + projectId uuid.ProjectId, +) (*entity.Project, error) { + projectResponse, err := restApiClient.GetProject(ctx, path.ProjectId{Id: projectId}) + if err != nil { + return nil, err + } + + projectOutput, err := projectResponse.Output() + if err != nil { + return nil, err + } + + project := projectFromApiOutput(projectOutput) + return &project, nil +} + +func GetAllProjects( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, +) ([]entity.Project, error) { + info, err := restApiClient.GetUserInfo(ctx) + if err != nil { + return nil, err + } + + output, err := info.Output() + if err != nil { + return nil, err + } + + var projects []entity.Project + for _, clientUser := range output.ClientUserList { + response, err := restApiClient.GetProjectsByClient(ctx, clientUser.ClientId) + if err != nil { + return nil, err + } + projectsResponse, err := response.Output() + if err != nil { + return nil, err + } + + for _, project := range projectsResponse.Items { + projects = append(projects, projectFromEsSearch(project)) + } + } + + return projects, nil +} + +func projectFromEsSearch(esProject zeropsRestApiClient.EsProject) entity.Project { + description, _ := esProject.Description.Get() + + return entity.Project{ + ID: esProject.Id, + Name: esProject.Name, + ClientId: esProject.ClientId, + Description: description, + Status: esProject.Status, + } +} + +func projectFromApiOutput(project output.Project) entity.Project { + description, _ := project.Description.Get() + + return entity.Project{ + ID: project.Id, + Name: project.Name, + ClientId: project.ClientId, + Description: description, + Status: project.Status, + } +} diff --git a/src/entity/repository/service.go b/src/entity/repository/service.go new file mode 100644 index 00000000..fb61ecd7 --- /dev/null +++ b/src/entity/repository/service.go @@ -0,0 +1,121 @@ +package repository + +import ( + "context" + + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/errorsx" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" + "github.com/zeropsio/zerops-go/dto/input/path" + "github.com/zeropsio/zerops-go/dto/output" + "github.com/zeropsio/zerops-go/types" + "github.com/zeropsio/zerops-go/types/uuid" +) + +func GetServiceByIdOrName( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, + projectId uuid.ProjectId, + serviceIdOrName string, +) (*entity.Service, error) { + service, err := GetServiceById(ctx, restApiClient, uuid.ServiceStackId(serviceIdOrName)) + if err != nil { + if errorsx.IsUserError(err) { + service, err = GetServiceByName(ctx, restApiClient, projectId, types.String(serviceIdOrName)) + if err != nil { + return nil, err + } + } + } + + return service, err +} + +func GetServiceById( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, + serviceId uuid.ServiceStackId, +) (*entity.Service, error) { + serviceResponse, err := restApiClient.GetServiceStack(ctx, path.ServiceStackId{Id: serviceId}) + if err != nil { + return nil, err + } + + serviceOutput, err := serviceResponse.Output() + if err != nil { + return nil, err + } + + service := serviceFromApiOutput(serviceOutput) + return &service, nil +} + +func GetServiceByName( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, + projectId uuid.ProjectId, + serviceName types.String, +) (*entity.Service, error) { + serviceResponse, err := restApiClient.GetServiceStackByName(ctx, path.GetServiceStackByName{ + ProjectId: projectId, + Name: serviceName, + }) + if err != nil { + return nil, err + } + + serviceOutput, err := serviceResponse.Output() + if err != nil { + return nil, err + } + + service := serviceFromApiOutput(serviceOutput) + return &service, nil +} + +func GetNonSystemServicesByProject( + ctx context.Context, + restApiClient *zeropsRestApiClient.Handler, + project entity.Project, +) ([]entity.Service, error) { + servicesResponse, err := restApiClient.GetServiceStackByProject(ctx, project.ID, project.ClientId) + if err != nil { + return nil, err + } + + servicesOutput, err := servicesResponse.Output() + if err != nil { + return nil, err + } + + services := make([]entity.Service, 0, len(servicesOutput.Items)) + for _, service := range servicesOutput.Items { + if !service.IsSystem { + services = append(services, serviceFromEsSearch(service)) + } + } + + return services, nil +} + +func serviceFromEsSearch(esServiceStack zeropsRestApiClient.EsServiceStack) entity.Service { + return entity.Service{ + ID: esServiceStack.Id, + ClientId: esServiceStack.ClientId, + Name: esServiceStack.Name, + Status: esServiceStack.Status, + ServiceTypeId: esServiceStack.ServiceStackTypeId, + ServiceTypeCategory: esServiceStack.ServiceStackTypeInfo.ServiceStackTypeCategory, + } +} + +func serviceFromApiOutput(service output.ServiceStack) entity.Service { + return entity.Service{ + ID: service.Id, + ClientId: service.Project.ClientId, + Name: service.Name, + Status: service.Status, + ServiceTypeId: service.ServiceStackTypeId, + ServiceTypeCategory: service.ServiceStackTypeInfo.ServiceStackTypeCategory, + } +} diff --git a/src/entity/service.go b/src/entity/service.go new file mode 100644 index 00000000..1fcf53d2 --- /dev/null +++ b/src/entity/service.go @@ -0,0 +1,17 @@ +package entity + +import ( + "github.com/zeropsio/zerops-go/types" + "github.com/zeropsio/zerops-go/types/enum" + "github.com/zeropsio/zerops-go/types/stringId" + "github.com/zeropsio/zerops-go/types/uuid" +) + +type Service struct { + ID uuid.ServiceStackId + ClientId uuid.ClientId + Name types.String + Status enum.ServiceStackStatusEnum + ServiceTypeId stringId.ServiceStackTypeId + ServiceTypeCategory enum.ServiceStackTypeCategoryEnum +} diff --git a/src/entity/vpnKey.go b/src/entity/vpnKey.go new file mode 100644 index 00000000..c2136fdd --- /dev/null +++ b/src/entity/vpnKey.go @@ -0,0 +1,13 @@ +package entity + +import ( + "time" + + "github.com/zeropsio/zerops-go/types/uuid" +) + +type VpnKey struct { + Key string + ProjectId uuid.ProjectId + CreatedAt time.Time +} diff --git a/src/errorsx/checker.go b/src/errorsx/checker.go new file mode 100644 index 00000000..09d0ecdd --- /dev/null +++ b/src/errorsx/checker.go @@ -0,0 +1,96 @@ +package errorsx + +import ( + "fmt" + + "github.com/pkg/errors" + "github.com/zeropsio/zerops-go/apiError" + "github.com/zeropsio/zerops-go/errorCode" +) + +type convertor func(err error) error +type check func(err error, errMessage string) error + +func Check(err error, checks ...check) bool { + if err == nil { + return false + } + + for _, check := range checks { + if err := check(err, ""); err != nil { + return true + } + } + + return false +} + +func Convert(err error, convertors ...convertor) error { + if err == nil { + return nil + } + + for _, convertor := range convertors { + if err := convertor(err); err != nil { + return err + } + } + + return err +} + +func CheckErrorCode(errorCode errorCode.ErrorCode) check { + return func(err error, errMessage string) error { + var apiErr apiError.Error + if !errors.As(err, &apiErr) { + return nil + } + if string(errorCode) != apiErr.GetErrorCode() { + return nil + } + + return NewUserError(errMessage, err) + } +} + +func CheckInvalidUserInput(parameterName string) check { + return func(err error, errMessage string) error { + var apiErr apiError.Error + if !errors.As(err, &apiErr) { + return nil + } + + if string(errorCode.InvalidUserInput) != apiErr.GetErrorCode() { + return nil + } + + meta, ok := apiErr.GetMeta().([]interface{}) + if !ok { + return nil + } + + for _, metaItem := range meta { + if metaItemTyped, ok := metaItem.(map[string]interface{}); ok { + if parameterValue, ok := metaItemTyped["parameter"]; ok { + if parameterValue == parameterName { + return NewUserError(fmt.Sprintf(errMessage, metaItemTyped["message"]), err) + } + } + } + } + + return nil + } +} + +func ConvertErrorCode(errorCode errorCode.ErrorCode, errMessage string) convertor { + return func(err error) error { + return CheckErrorCode(errorCode)(err, errMessage) + } +} + +func ConvertInvalidUserInput(parameterName string, errMessage string) convertor { + return func(err error) error { + return CheckInvalidUserInput(parameterName)(err, errMessage) + } +} diff --git a/src/errorsx/userError.go b/src/errorsx/userError.go new file mode 100644 index 00000000..e9ab2f99 --- /dev/null +++ b/src/errorsx/userError.go @@ -0,0 +1,45 @@ +package errorsx + +import ( + "github.com/pkg/errors" +) + +type UserError struct { + message string + previous error +} + +func NewUserError(message string, previous error) *UserError { + return &UserError{ + message: message, + previous: previous, + } +} + +func IsUserError(err error) bool { + return AsUserError(err) != nil +} + +func AsUserError(err error) *UserError { + var userError *UserError + if errors.As(err, &userError) { + return userError + } + return nil +} + +func (e *UserError) Error() string { + return e.message +} + +func (e *UserError) Unwrap() error { + return e.previous +} + +func (e *UserError) Is(target error) bool { + return e.previous == target +} + +func (e *UserError) As(target interface{}) bool { + return errors.As(e.previous, target) +} diff --git a/src/flagParams/handler.go b/src/flagParams/handler.go new file mode 100644 index 00000000..803fdd70 --- /dev/null +++ b/src/flagParams/handler.go @@ -0,0 +1,137 @@ +package flagParams + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" + "github.com/spf13/viper" + "github.com/zeropsio/zcli/src/constants" +) + +type Handler struct { + params map[string]interface{} + viper *viper.Viper +} + +func New() *Handler { + return &Handler{ + params: make(map[string]interface{}), + viper: viper.New(), + } +} + +func (h *Handler) getCmdId(cmd *cobra.Command, name string) string { + return cmd.Use + name +} + +func (h *Handler) RegisterString(cmd *cobra.Command, name, shorthand, defaultValue, description string) { + var paramValue string + + cmd.Flags().StringVarP(¶mValue, name, shorthand, defaultValue, description) + + h.params[h.getCmdId(cmd, name)] = func() *string { + if cmd.Flags().Lookup(name).Changed { + return ¶mValue + } + if val := h.viper.GetString(toSnakeCase(name)); val != "" { + return &val + } + return ¶mValue + } +} + +func (h *Handler) RegisterBool(cmd *cobra.Command, name, shorthand string, defaultValue bool, description string) { + var paramValue bool + + cmd.Flags().BoolVarP(¶mValue, name, shorthand, defaultValue, description) + + h.params[h.getCmdId(cmd, name)] = func() *bool { + if cmd.Flags().Lookup(name).Changed { + return ¶mValue + } + if val := h.viper.GetBool(toSnakeCase(name)); val { + return &val + } + return ¶mValue + } +} + +func (h *Handler) RegisterInt(cmd *cobra.Command, name, shorthand string, defaultValue int, description string) { + var paramValue int + + cmd.Flags().IntVarP(¶mValue, name, shorthand, defaultValue, description) + + h.params[h.getCmdId(cmd, name)] = func() *int { + if cmd.Flags().Lookup(name).Changed { + return ¶mValue + } + if val := h.viper.GetInt(toSnakeCase(name)); val != 0 { + return &val + } + return ¶mValue + } +} + +func (h *Handler) GetString(cmd *cobra.Command, name string) string { + id := h.getCmdId(cmd, name) + if param, exists := h.params[id]; exists { + if v, ok := param.(func() *string); ok { + return *v() + } + return "" + } + return "" +} + +func (h *Handler) GetInt(cmd *cobra.Command, name string) int { + id := h.getCmdId(cmd, name) + if param, exists := h.params[id]; exists { + if v, ok := param.(func() *int); ok { + return *v() + } + return 0 + } + return 0 +} + +func (h *Handler) GetBool(cmd *cobra.Command, name string) bool { + id := h.getCmdId(cmd, name) + if param, exists := h.params[id]; exists { + if v, ok := param.(func() *bool); ok { + return *v() + } + return false + } + return false +} + +func (h *Handler) InitViper() { + path, err := os.Getwd() + if err == nil { + h.viper.AddConfigPath(path) + } + cliDataPath, err := constants.CliDataFilePath() + if err == nil { + h.viper.AddConfigPath(cliDataPath) + } + + h.viper.SetConfigName("zcli.config") + h.viper.SetEnvPrefix("ZEROPS") + h.viper.AutomaticEnv() + + if err := h.viper.ReadInConfig(); err == nil { + fmt.Println("Using config file:", h.viper.ConfigFileUsed()) + } +} + +func toSnakeCase(flagName string) string { + var result string + for i, r := range flagName { + if i > 0 && r >= 'A' && r <= 'Z' { + result += "_" + } + result += string(r) + } + return result +} diff --git a/src/utils/httpClient/handler.go b/src/httpClient/handler.go similarity index 54% rename from src/utils/httpClient/handler.go rename to src/httpClient/handler.go index 1915799b..4003c488 100644 --- a/src/utils/httpClient/handler.go +++ b/src/httpClient/handler.go @@ -4,11 +4,10 @@ import ( "bytes" "context" "io" - "io/ioutil" "net/http" "time" - "github.com/zeropsio/zcli/src/utils/uuid" + "github.com/zeropsio/zcli/src/uuid" "github.com/zeropsio/zcli/src/support" ) @@ -46,37 +45,23 @@ func ContentType(contentType string) Option { } } -func BearerAuthorization(token string) Option { - return func(cfg *optionConfig) { - cfg.headers["Authorization"] = "Bearer " + token - } -} - type optionConfig struct { headers map[string]string } -func (h *Handler) PutStream(url string, body io.Reader, options ...Option) (Response, error) { - return h.doStream("PUT", url, body, options...) -} - -func (h *Handler) Put(url string, data []byte, options ...Option) (Response, error) { - return h.do("PUT", url, data, options...) -} - -func (h *Handler) Post(url string, data []byte, options ...Option) (Response, error) { - return h.do("POST", url, data, options...) +func (h *Handler) PutStream(ctx context.Context, url string, body io.Reader, options ...Option) (Response, error) { + return h.doStream(ctx, "PUT", url, body, options...) } -func (h *Handler) Get(url string, options ...Option) (Response, error) { - return h.do("GET", url, nil) +func (h *Handler) Get(ctx context.Context, url string, options ...Option) (Response, error) { + return h.do(ctx, "GET", url, nil) } -func (h *Handler) do(method string, url string, data []byte, options ...Option) (Response, error) { - return h.doStream(method, url, bytes.NewReader(data), options...) +func (h *Handler) do(ctx context.Context, method string, url string, data []byte, options ...Option) (Response, error) { + return h.doStream(ctx, method, url, bytes.NewReader(data), options...) } -func (h *Handler) doStream(method string, url string, body io.Reader, options ...Option) (Response, error) { +func (h *Handler) doStream(ctx context.Context, method string, url string, body io.Reader, options ...Option) (Response, error) { cfg := &optionConfig{ headers: map[string]string{ "Content-Type": "application/json", @@ -88,7 +73,7 @@ func (h *Handler) doStream(method string, url string, body io.Reader, options .. } client := &http.Client{Timeout: h.config.HttpTimeout} - req, err := http.NewRequest(method, url, body) + req, err := http.NewRequestWithContext(ctx, method, url, body) if err != nil { return Response{}, err } @@ -103,7 +88,7 @@ func (h *Handler) doStream(method string, url string, body io.Reader, options .. } defer resp.Body.Close() - bodyBytes, err := ioutil.ReadAll(resp.Body) + bodyBytes, err := io.ReadAll(resp.Body) if err != nil { return Response{}, err } diff --git a/src/i18n/en.go b/src/i18n/en.go index fdd8ae16..f9f42cb1 100644 --- a/src/i18n/en.go +++ b/src/i18n/en.go @@ -1,295 +1,285 @@ package i18n -import "fmt" - -const ( +var en = map[string]string{ // help - DisplayHelp = "Displays help for " - GroupHelp = "any command." - DaemonInstallHelp = "the daemon install command." - DaemonRemoveHelp = "the daemon remove command." - DaemonRunHelp = "the daemon run command." - DeployHelp = "the deploy command." - LogShowHelp = "the log show command." - LoginHelp = "the login command." - ProjectStartHelp = "the project start command." - ProjectStopHelp = "the project stop command." - ProjectDeleteHelp = "the project delete command." - ProjectImportHelp = "the project import command." - PushHelp = "the push command." - RegionListHelp = "the region list command." - ServiceStartHelp = "the service start command." - ServiceStopHelp = "the service stop command." - ServiceImportHelp = "the service import command." - ServiceDeleteHelp = "the service delete command." - ServiceLogHelp = "the service log command." - VersionHelp = "the version command." - VpnStartHelp = "the vpn start command." - VpnStopHelp = "the vpn stop command." - VpnStatusHelp = "the vpn status command." - BucketCreateHelp = "the bucket create command." - BucketDeleteHelp = "the bucket delete command." + DisplayHelp: "Displays help for ", + GroupHelp: "any command.", + DeployHelp: "the deploy command.", + LogShowHelp: "the log show command.", + LoginHelp: "the login command.", + ProjectHelp: "the project command.", + ProjectStartHelp: "the project start command.", + ProjectStopHelp: "the project stop command.", + ProjectListHelp: "the project list command.", + ScopeHelp: "the scope command.", + ScopeProjectHelp: "the scope project command.", + ScopeServiceHelp: "the scope project command.", + ScopeResetHelp: "the scope reset command.", + ProjectDeleteHelp: "the project delete command.", + ProjectImportHelp: "the project import command.", + ProjectServiceImportHelp: "the project service import command.", + ServiceHelp: "the service command.", + PushHelp: "the push command.", + RegionListHelp: "the region list command.", + ServiceStartHelp: "the service start command.", + ServiceStopHelp: "the service stop command.", + ServiceImportHelp: "the service import command.", + ServiceDeleteHelp: "the service delete command.", + ServiceLogHelp: "the service log command.", + ServiceDeployHelp: "the service deploy command.", + ServiceListHelp: "the service list command.", + ServicePushHelp: "the service push command.", + StatusHelp: "the status command.", + StatusInfoHelp: "the status info command.", + StatusShowDebugLogsHelp: "the status show debug logs command.", + VersionHelp: "the version command.", + BucketCreateHelp: "the bucket create command.", + BucketDeleteHelp: "the bucket delete command.", + VpnHelp: "the vpn command.", + VpnConnectHelp: "the vpn connect command.", + VpnDisconnectHelp: "the vpn disconnect command.", // cmd short - CmdDeployDesc = "Deploys your application to Zerops." - CmdPushDesc = "Builds your application in Zerops and deploys it." - CmdLogin = "Logs you into Zerops. Use a generated Zerops token or your login e-mail and password." - CmdVpn = "VPN commands group." - CmdVpnStart = "Starts a VPN session." - CmdVpnStop = "Stops the existing VPN session." - CmdVpnStatus = "Shows the status of the VPN session." - CmdLog = "zCLI log commands group." - CmdLogShow = "Shows zCLI logs." - CmdDaemon = "Zerops VPN daemon commands group." - CmdDaemonRun = "Runs Zerops VPN daemon." - CmdDaemonInstall = "Installs Zerops VPN daemon." - CmdDaemonRemove = "Removes Zerops VPN daemon." - CmdVersion = "Shows the current zCLI version." - CmdRegion = "Zerops region commands group." - CmdRegionList = "Lists all Zerops regions." - CmdProject = "Project commands group." - CmdService = "Zerops service commands group." - CmdProjectStart = "Starts the project and the services that were running before the project was stopped." - CmdProjectStop = "Stops the project and all of its services." - CmdProjectDelete = "Deletes the project and all of its services." - CmdProjectImport = "Creates a new project with one or more services." - CmdServiceImport = "Creates one or more Zerops services in an existing project." - CmdServiceStart = "Starts the Zerops service." - CmdServiceStop = "Stops the Zerops service." - CmdServiceDelete = "Deletes the Zerops service." - CmdServiceLog = "Get service runtime or build log to stdout." - CmdBucket = "S3 storage management" - CmdBucketZerops = "Management via Zerops API" - CmdBucketS3 = "Management directly via S3 API" - CmdBucketCreate = "Creates a bucket in an existing object storage." - CmdBucketDelete = "Deletes a bucket from an existing object storage." + CmdDeployDesc: "Deploys your application to Zerops.", + CmdPushDesc: "Builds your application in Zerops and deploys it.", + CmdLogin: "Logs you into Zerops. Use a generated Zerops token or your login e-mail and password.", + CmdStatus: "Status commands group.", + CmdStatusInfo: "Shows the current status of the Zerops CLI.", + CmdStatusShowDebugLogs: "Shows zCLI debug logs.", + CmdVersion: "Shows the current zCLI version.", + CmdRegion: "Zerops region commands group.", + CmdRegionList: "Lists all Zerops regions.", + CmdProject: "Project commands group.", + CmdService: "Zerops service commands group.", + CmdProjectStart: "Starts the project and the services that were running before the project was stopped.", + CmdProjectStop: "Stops the project and all of its services.", + CmdProjectList: "Lists all projects.", + CmdScope: "Scope commands group", + CmdScopeProject: "Sets the scope for project. All commands that require project ID will use the selected one.", + CmdScopeService: "Sets the scope for service. All commands that require service ID will use the selected one.", + CmdScopeReset: "Resets the scope for project and service.", + CmdProjectDelete: "Deletes a project and all of its services.", + CmdProjectImport: "Creates a new project with one or more services.", + CmdServiceList: "Lists all services in the project.", + CmdServiceImport: "Creates one or more Zerops services in an existing project.", + CmdServiceStart: "Starts the Zerops service.", + CmdServiceStop: "Stops the Zerops service.", + CmdServiceDelete: "Deletes the Zerops service.", + CmdServiceLog: "Get service runtime or build log to stdout.", + CmdBucket: "S3 storage management", + CmdBucketZerops: "Management via Zerops API", + CmdBucketS3: "Management directly via S3 API", + CmdBucketCreate: "Creates a bucket in an existing object storage.", + CmdBucketDelete: "Deletes a bucket from an existing object storage.", + CmdVpn: "VPN commands group", + CmdVpnConnect: "Connects to the Zerops VPN.", + CmdVpnDisconnect: "Disconnects from the Zerops VPN.", // cmd long - ProjectImportLong = "Creates a new project with one or more services according to the definition in the import YAML file." - DeployDescLong = "pathToFileOrDir defines a path to one or more directories and/or files relative to the working\ndirectory. The working directory is by default the current directory and can be changed\nusing the --workingDir flag. zCLI deploys selected directories and/or files to Zerops." - PushDescLong = "The command triggers the build pipeline defined in zerops.yml. Zerops.yml must be in the working\ndirectory. The working directory is by default the current directory and can be changed\nusing the --workingDir flag. zCLI uploads all files and subdirectories of the working\ndirectory to Zerops and starts the build pipeline. Files found in the .gitignore\nfile will be ignored.\n\nIf you just want to deploy your application to Zerops, use the zcli deploy command instead." - // CmdServiceLogFull = "Returns service runtime or build log to stdout with a streaming option. By default, the command returns the last 100 log messages from all service runtime containers and exits. Use --follow flag to continuously pool for new log messages.\n" - CmdServiceLogLong = "Returns service runtime or build log to stdout. By default, the command returns the last 100\nlog messages from all service runtime containers and exits.\n" - ServiceLogAdditional = "\nUse the alone in the command to return log messages from all runtime containers.\nSet @1 to return log messages from the first runtime container only.\nSet @build to return log messages from the last build if available." - VpnStartLong = "Starts a VPN session in the selected Zerops project. You can't be connected to multiple projects\nat the same time. If the previous VPN session is active, it will be stopped automatically\nand a new VPN session will start.\n" + CmdProjectImportLong: "Creates a new project with one or more services according to the definition in the import YAML file.", + DeployDescLong: "pathToFileOrDir defines a path to one or more directories and/or files relative to the working\ndirectory. The working directory is by default the current directory and can be changed\nusing the --workingDir flag. zCLI deploys selected directories and/or files to Zerops.", + PushDescLong: "The command triggers the build pipeline defined in zerops.yml. Zerops.yml must be in the working\ndirectory. The working directory is by default the current directory and can be changed\nusing the --workingDir flag. zCLI uploads all files and subdirectories of the working\ndirectory to Zerops and starts the build pipeline. Files found in the .gitignore\nfile will be ignored.\n\nIf you just want to deploy your application to Zerops, use the zcli deploy command instead.", + CmdServiceLogLong: "Returns service runtime or build log to stdout. By default, the command returns the last 100\nlog messages from all service runtime containers and exits.\n", + ServiceLogAdditional: "\nUse the alone in the command to return log messages from all runtime containers.\nSet @1 to return log messages from the first runtime container only.\nSet @build to return log messages from the last build if available.", // flags description - RegionFlag = "Choose one of Zerops regions. Use the \"zcli region list\" command to list all Zerops regions." - ZeropsLoginFlag = "Your login e-mail. Automatically filled if the ZEROPSLOGIN environment variable exists." - ZeropsPwdFlag = "Your password. Automatically filled if the ZEROPSPASSWORD environment variable exists." - ZeropsTokenFlag = "Zerops token. Automatically filled if the ZEROPSTOKEN environment variable exists." - RegionUrlFlag = "Zerops region file url." - BuildVersionName = "Adds a custom version name. Automatically filled if the VERSIONNAME environment variable exists." - SourceName = "Override zerops.yml service name." - BuildWorkingDir = "Sets a custom working directory. Default working directory is the current directory." - BuildArchiveFilePath = "If set, zCLI creates a tar.gz archive with the application code in the required path relative\nto the working directory. By default, no archive is created." - ZeropsYamlLocation = "Sets a custom path to the zerops.yml file relative to the working directory. By default zCLI\nlooks for zerops.yml in the working directory." - UploadGitFolder = "If set, zCLI the .git folder is also uploaded. By default, the .git folder is ignored." - ClientId = "If you have access to more than one client, you must specify the client ID for which the\nproject is to be created." - ConfirmDelete = "If set, zCLI will not ask for confirmation." - LogLimitFlag = "How many of the most recent log messages will be returned. Allowed interval is <1;1000>.\nDefault value = 100." - LogMinSeverityFlag = "Returns log messages with requested or higher severity. Set either severity number in the interval\n<0;7> or one of following severity codes:\nEMERGENCY, ALERT, CRITICAL, ERROR, WARNING, NOTICE, INFORMATIONAL, DEBUG." - LogMsgTypeFlag = "Select either APPLICATION or WEBSERVER log messages to be returned. Default value = APPLICATION." - LogFollowFlag = "If set, zCLI will continuously poll for new log messages. By default, the command will exit\nonce there are no more logs to display. To exit from this mode, use Control-C." - LogFormatFlag = "The format of returned log messages. Following formats are supported: \nFULL: This is the default format. Messages will be returned in the complete Syslog format. \nSHORT: Returns only timestamp and log message.\nJSON: Messages will be returned as one JSON object.\nJSONSTREAM: Messages will be returned as stream of JSON objects." - LogFormatTemplateFlag = "Set a custom log format. Can be used only with --format=FULL.\nExample: --formatTemplate=\"{{.timestamp}} {{.severity}} {{.facility}} {{.message}}\".\nSupports standard GoLang template format and functions." - MtuFlag = "Sets a custom MTU for VPN interface. Default value is 1420." - PreferredPortFlag = "????" - - // prompt - PromptEnterZeropsServiceName = "Enter hostname of zerops service" - PromptName = "name" - PromptInvalidInput = "Invalid input." - PromptInvalidHostname = "Name contains invalid characters." + RegionFlag: "Choose one of Zerops regions. Use the \"zcli region list\" command to list all Zerops regions.", + RegionUrlFlag: "Zerops region file url.", + BuildVersionName: "Adds a custom version name. Automatically filled if the VERSIONNAME environment variable exists.", + SourceName: "Override zerops.yml service name.", + BuildWorkingDir: "Sets a custom working directory. Default working directory is the current directory.", + BuildArchiveFilePath: "If set, zCLI creates a tar.gz archive with the application code in the required path relative\nto the working directory. By default, no archive is created.", + ZeropsYamlLocation: "Sets a custom path to the zerops.yml file relative to the working directory. By default zCLI\nlooks for zerops.yml in the working directory.", + UploadGitFolder: "If set, zCLI the .git folder is also uploaded. By default, the .git folder is ignored.", + OrgIdFlag: "If you have access to more than one organization, you must specify the org ID for which the\nproject is to be created.", + LogLimitFlag: "How many of the most recent log messages will be returned. Allowed interval is <1;1000>.\nDefault value = 100.", + LogMinSeverityFlag: "Returns log messages with requested or higher severity. Set either severity number in the interval\n<0;7> or one of following severity codes:\nEMERGENCY, ALERT, CRITICAL, ERROR, WARNING, NOTICE, INFORMATIONAL, DEBUG.", + LogMsgTypeFlag: "Select either APPLICATION or WEBSERVER log messages to be returned. Default value = APPLICATION.", + LogShowBuildFlag: "If set, zCLI will return build log messages instead of runtime log messages.", + LogFollowFlag: "If set, zCLI will continuously poll for new log messages. By default, the command will exit\nonce there are no more logs to display. To exit from this mode, use Control-C.", + LogFormatFlag: "The format of returned log messages. Following formats are supported: \nFULL: This is the default format. Messages will be returned in the complete Syslog format. \nSHORT: Returns only timestamp and log message.\nJSON: Messages will be returned as one JSON object.\nJSONSTREAM: Messages will be returned as stream of JSON objects.", + LogFormatTemplateFlag: "Set a custom log format. Can be used only with --format=FULL.\nExample: --formatTemplate=\"{{.timestamp}} {{.severity}} {{.facility}} {{.message}}\".\nSupports standard GoLang template format and functions.", + ConfirmFlag: "If set, zCLI will not ask for confirmation of destructive operations.", + ServiceIdFlag: "If you have access to more than one service, you must specify the service ID for which the\ncommand is to be executed.", + ProjectIdFlag: "If you have access to more than one project, you must specify the project ID for which the\ncommand is to be executed.", // process - ProcessInvalidState = "last command has finished with error, identifier for communication with our support: %s" - ProcessInvalidStateProcess = "process finished with error, identifier for communication with our support:" - QueuedProcesses = "queued processes: " - ProcessStart = "process started" - ProcessEnd = "process finished" + ProcessInvalidState: "last command has finished with error, identifier for communication with our support: %s", // archiveClient - ArchClientWorkingDirectory = "working directory: %s" - ArchClientMaxOneTilde = "only one ~(tilde) is allowed" - ArchClientPackingDirectory = "packing directory: %s" - ArchClientPackingFile = "packing file: %s" - ArchClientFileAlreadyExists = "file [%s] already exists" + ArchClientWorkingDirectory: "working directory: %s", + ArchClientMaxOneTilde: "only one ~(tilde) is allowed", + ArchClientPackingDirectory: "packing directory: %s", + ArchClientPackingFile: "packing file: %s", + ArchClientFileAlreadyExists: "file [%s] already exists", // login - LoginParamsMissing = "either login with password or token must be passed" - LoginSuccess = "you are logged in" - LoginVpnClosed = "vpn connection was closed" - RegionUrl = "zerops region file url" + LoginSuccess: "You are logged as %s <%s>", // region - RegionNotFound = "region not found" - - // client ID - MultipleClientIds = "you have assigned multiple client IDs, please use the --clientId flag" - AvailableClientIds = "your client IDs are: " - MissingClientId = "no client ID found four your account" + RegionNotFound: "Selected region %s not found", + RegionTableColumnName: "Name", // import - YamlCheck = "yaml file check started" - ImportYamlOk = "yaml file ok" - ImportYamlEmpty = "config file import yaml is empty" - ImportYamlTooLarge = "max. size of import yaml is 100 KB" - ImportYamlFound = "import yaml found" - ImportYamlNotFound = "import yaml not found" - ImportYamlCorrupted = "import yaml corrupted" - ServiceStackCount = "number of services to be added: " - CoreServices = "core services activation started" - ReadyToImportServices = "ready to import services" + ImportYamlOk: "Yaml file was checked", + ImportYamlEmpty: "Config file import yaml is empty", + ImportYamlTooLarge: "Max. size of import yaml is 100 KB", + ImportYamlFound: "Import yaml found", + ImportYamlNotFound: "Import yaml not found", + ImportYamlCorrupted: "Import yaml corrupted", + ServiceCount: "Number of services to be added: %d", + QueuedProcesses: "Queued processes: %d", + CoreServices: "Core services activation started", // delete cmd - DeleteCanceledByUser = "delete command canceled by user" + DeleteCanceledByUser: "delete command canceled by user", // project + service - ProjectNotFound = "project not found" - ProjectWrongId = "Please, provide correct project ID." - ProjectsWithSameName = "found multiple projects with the same name" - AvailableProjectIds = "available project IDs are: " - ProjectNameOrIdEmpty = "project name or ID must be filled" - ProjectDeleteConfirm = "Please confirm that you would like to delete the project (y/n): " - ServiceNotFound = "service not found" - ServiceNameIsEmpty = "service name must be filled" - ServiceDeleteConfirm = "Please confirm that you would like to delete the service (y/n): " - ProcessInit = " command initialized" - Success = " successfully" - ProjectStart = "project start" - ProjectStop = "project stop" - ProjectDelete = "project delete" - ProjectStarted = "project started" - ProjectStopped = "project stopped" - ProjectDeleted = "project deleted" - ProjectCreated = "project created" - ServiceStart = "service start" - ServiceStop = "service stop" - ServiceDelete = "service delete" - ServiceStarted = "service started" - ServiceStopped = "service stopped" - ServiceDeleted = "service deleted" - ProjectImported = "project imported" - ServiceImported = "service(s) imported" - LogLimitInvalid = "Invalid --limit value. Allowed interval is <1;1000>" - LogMinSeverityInvalid = "Invalid --minimumSeverity value." - LogMinSeverityStringLimitErr = "Allowed values are EMERGENCY, ALERT, CRITICAL, ERROR, WARNING, NOTICE, INFORMATIONAL, DEBUG." - LogMinSeverityNumLimitErr = "Allowed interval is <0;7>." - LogFormatInvalid = "Invalid --format value. Allowed values are FULL, SHORT, JSON, JSONSTREAM." - LogFormatTemplateMismatch = "--formatTemplate can be used only in combination with --format=FULL." - LogFormatStreamMismatch = "--format=JSON cannot be used in combination with --follow. Use --format=JSONSTREAM instead." - LogServiceNameInvalid = "Invalid serviceName value. Multiple @ characters are not supported. See -h for help." - LogFormatTemplateInvalid = "Invalid --formatTemplate content. The custom template failed with following error:" - LogFormatTemplateNoSpace = "Template items must be split by a (single) space." - LogSuffixInvalid = "Invalid serviceName value. Use @ to return log messages from the N-th runtime container only.\nUse @BUILD to return log messages from the last build if available." - LogRuntimeOnly = "This command can be used on runtime services only." - LogNoContainerFound = "No runtime container was found." - LogTooFewContainers = "There %s only %d runtime container%s at the moment. Select a lower container index." - LogNoBuildFound = "No build was found for this service." - LogBuildStatusUploading = "Service status UPLOADING, need to wait for app version data." - LogAccessFailed = "Request for access to logs failed." - LogMsgTypeInvalid = "Invalid --messageType value. Allowed values are APPLICATION, WEBSERVER." - LogReadingFailed = "Log reading failed." + ProjectDeleteConfirm: "Project %s will be deleted? \n Are you sure?", + ServiceDeleteConfirm: "Service %s will be deleted? \n Are you sure?", + ProjectStarting: "Project is being started", + ProjectStarted: "Project was started", + ProjectStopping: "Project is begin stopped", + ProjectStopped: "Project was stopped", + ProjectDeleting: "Project is being deleted", + ProjectDeleted: "Project was deleted", + ServiceStarting: "Service is being started", + ServiceStarted: "Service was started", + ServiceStopping: "Service is being stopped", + ServiceStopped: "Service was stopped", + ServiceDeleting: "Service is being deleted", + ServiceDeleted: "Service was deleted", + ProjectImported: "project imported", + ServiceImported: "service(s) imported", + + // service logs + LogLimitInvalid: "Invalid --limit value. Allowed interval is <1;1000>", + LogMinSeverityInvalid: "Invalid --minimumSeverity value.", + LogMinSeverityStringLimitErr: "Allowed values are EMERGENCY, ALERT, CRITICAL, ERROR, WARNING, NOTICE, INFORMATIONAL, DEBUG.", + LogMinSeverityNumLimitErr: "Allowed interval is <0;7>.", + LogFormatInvalid: "Invalid --format value. Allowed values are FULL, SHORT, JSON, JSONSTREAM.", + LogFormatTemplateMismatch: "--formatTemplate can be used only in combination with --format=FULL.", + LogFormatStreamMismatch: "--format=JSON cannot be used in combination with --follow. Use --format=JSONSTREAM instead.", + LogServiceNameInvalid: "Invalid serviceName value. Multiple @ characters are not supported. See -h for help.", + LogFormatTemplateInvalid: "Invalid --formatTemplate content. The custom template failed with following error:", + LogFormatTemplateNoSpace: "Template items must be split by a (single) space.", + LogSuffixInvalid: "Invalid serviceName value. Use @ to return log messages from the N-th runtime container only.\nUse @BUILD to return log messages from the last build if available.", + LogRuntimeOnly: "This command can be used on runtime services only.", + LogNoContainerFound: "No runtime container was found.", + LogTooFewContainers: "There %s only %d runtime container%s at the moment. Select a lower container index.", + LogNoBuildFound: "No build was found for this service.", + LogBuildStatusUploading: "Service status UPLOADING, need to wait for app version data.", + LogAccessFailed: "Request for access to logs failed.", + LogMsgTypeInvalid: "Invalid --messageType value. Allowed values are APPLICATION, WEBSERVER.", + LogReadingFailed: "Log reading failed.", + + // push + PushRunning: "Push is running", + PushFinished: "Push finished", // deploy - DeployHintPush = "To build your application in Zerops, use the zcli push command instead." - BuildDeployServiceStatus = "service status: %s" - BuildDeployCreatingPackageStart = "creating package" - BuildDeployCreatingPackageDone = "package created" - BuildDeployPackageSavedInto = "package file saved into: %s" - BuildDeployUploadingPackageStart = "uploading package" - BuildDeployUploadingPackageDone = "package uploaded" - BuildDeployUploadPackageFailed = "package upload failed" - BuildDeployDeployingStart = "deploying service" - BuildDeployZeropsYamlEmpty = "config file zerops.yml is empty" - BuildDeployZeropsYamlTooLarge = "max. size of zerops.yml is 10 KB" - BuildDeployZeropsYamlFound = "zerops.yml found" - BuildDeployZeropsYamlNotFound = "zerops.yml not found" - BuildDeploySuccess = "service deployed" + DeployHintPush: "To build your application in Zerops, use the zcli push command instead.", + BuildDeployCreatingPackageStart: "creating package", + BuildDeployCreatingPackageDone: "package created", + BuildDeployPackageSavedInto: "package file saved into: %s", + BuildDeployUploadingPackageStart: "uploading package", + BuildDeployUploadingPackageDone: "package uploaded", + BuildDeployUploadPackageFailed: "package upload failed", + BuildDeployDeployingStart: "deploying service", + BuildDeployZeropsYamlEmpty: "config file zerops.yml is empty", + BuildDeployZeropsYamlTooLarge: "max. size of zerops.yml is 10 KB", + BuildDeployZeropsYamlFound: "File zerops.yml found. Path: %s.", + BuildDeployZeropsYamlNotFound: "File zerops.yml not found. Expected path: %s.", - // vpn - VpnDaemonUnavailable = "Zerops VPN daemon needs to be installed on your machine to handle VPN connections." + // s3 + BucketGenericXAmzAcl: "Defines one of predefined grants, known as canned ACLs.\nValid values are: private, public-read, public-read-write, authenticated-read.", + BucketGenericXAmzAclInvalid: "Invalid --x-amz-acl value. Allowed values are: private, public-read, public-read-write, authenticated-read.", + BucketGenericOnlyForObjectStorage: "This command can be used on object storage services only.", + BucketGenericBucketNamePrefixed: "Bucket names are prefixed by object storage service ID to make the bucket names unique.\nLearn more about bucket naming conventions at https://docs.zerops.io/documentation/services/storage/s3.html#used-technology", + + BucketCreated: "Bucket created", + BucketCreateCreatingDirect: "Creating bucket %s directly on S3 API.", + BucketCreateCreatingZeropsApi: "Creating bucket %s using Zerops API.", - // vpn start - VpnStartInstallDaemonPrompt = "Do you want to install the VPN daemon?\nYou will be prompted for your root/administrator password to confirm the installation." - VpnStartTerminatedByUser = "when you are ready, try `/path/to/zcli daemon install`" - VpnStartUserIsUnableToWriteYorN = "type 'y' or 'n' please" - VpnStartWireguardUtunError = "we failed to start vpn, there is a possibility that you have another vpn. If so, try to shut it down" - VpnStartVpnNotReachable = "zerops vpn servers aren't reachable" - VpnStartTunnelIsNotAlive = "we failed to establish zerops vpn" - VpnStartUnableToConfigureNetworkInterface = "unable to configure network interface" - VpnStartUnableToUpdateRoutingTable = "unable to update routing table" - VpnStartNetworkInterfaceNotFound = "network interface not found" - VpnStartInvalidServerPublicKey = "invalid server public key" - VpnStartInvalidVpnAddress = "invalid VPN address" - VpnStartTunnelConfigurationFailed = "tunnel configuration failed" + BucketDeleteConfirm: "Bucket %s will be deleted? \n Are you sure?", + BucketDeleted: "Bucket deleted", + BucketDeleteDeletingDirect: "Deleting bucket %s directly on S3 API.", + BucketDeleteDeletingZeropsApi: "Deleting bucket %s using Zerops API.", - // vpn status - VpnStatusTunnelStatusActive = "wireguard tunnel is working properly" - VpnStatusTunnelStatusSetInactive = "wireguard tunnel isn't established, try `/path/to/zcli vpn start` command" - VpnStatusDnsStatusActive = "dns is working properly" - VpnStatusDnsStatusSetInactive = "dns isn't set, try `/path/to/zcli vpn start` command" - VpnStatusAdditionalInfo = "additional info:" - VpnStatusDnsCheckError = "we failed to check that dns is working correctly" - VpnStatusDnsNoCheckFunction = "there is no function for dns check" - VpnStatusDnsInterfaceNotFound = "vpn interface not found" - VpnStatusWireguardNotAvailable = "wireguard interface not available" + BucketS3AccessKeyId: "When using direct S3 API the accessKeyId to the Zerops object storage is required.\nAutomatically filled if the {serviceName}_accessKeyId environment variable exists.", + BucketS3SecretAccessKey: "When using direct S3 API the secretAccessKey to the Zerops object storage is required.\nAutomatically filled if the {serviceName}_secretAccessKey environment variable exists.", + BucketS3FlagBothMandatory: "If you are specifying accessKeyId or secretAccessKey, both flags are mandatory.", + BucketS3EnvBothMandatory: "If you are using env for accessKeyId or secretAccessKey, both env variables must be set.", + BucketS3RequestFailed: "S3 API request failed: %s", + BucketS3BucketAlreadyExists: "The bucket name already exists under a different object storage user. Set a different bucket name.", - // vpn stop - VpnStopSuccess = "vpn connection was closed" - VpnStopAdditionalInfo = "additional info:" - VpnStopAdditionalInfoMessage = "dns could be set by yourself, if so it must be removed manually" - VpnStopUnableToRemoveTunnelInterface = "unable to remove tunnel interface" + // status info + StatusInfoCliDataFilePath: "Zerops CLI data file path", + StatusInfoLogFilePath: "Zerops CLI log file path", - // daemon - DaemonInstallerDesc = "zerops daemon" - DaemonUnableToSaveConfiguration = "unable to save configuration" - DaemonElevated = "operation continues in a new window" - PathNotFound = "path not found" + // debug logs + DebugLogsNotFound: "Debug logs not found", + + // vpn + VpnConnected: "VPN connected", + VpnDisconnected: "VPN disconnected", + VpnConfigSaved: "VPN config saved", + VpnPrivateKeyCorrupted: "VPN private key corrupted, a new one will be created", + VpnPrivateKeyCreated: "VPN private key created", - // daemon install - DaemonInstallSuccess = "zerops daemon has been installed" - DaemonInstallWireguardNotFound = "wireguard was not found" - DaemonInstallWireguardNotFoundDarwin = "wireguard was not found, try `brew install wireguard-tools`" + //////////// + // global // + //////////// - // daemon remove - DaemonRemoveStopVpnUnavailable = "zerops daemon isn't running, vpn couldn't be removed" - DaemonRemoveSuccess = "zerops daemon has been removed" + CliTerminalModeEnvVar: "If enabled provides a rich UI to communicate with a user. Possible values: auto, enabled, disabled. Default value is auto.", + CliLogFilePathEnvVar: "Path to a log file.", + CliDataFilePathEnvVar: "Path to data file.", - // S3 - BucketGenericXAmzAcl = "Defines one of predefined grants, known as canned ACLs.\nValid values are: private, public-read, public-read-write, authenticated-read." - BucketGenericXAmzAclInvalid = "Invalid --x-amz-acl value. Allowed values are: private, public-read, public-read-write, authenticated-read." - BucketGenericOnlyForObjectStorage = "This command can be used on object storage services only." - BucketGenericBucketNamePrefixed = "Bucket names are prefixed by object storage service ID to make the bucket names unique.\nLearn more about bucket naming conventions at https://docs.zerops.io/documentation/services/storage/s3.html#used-technology" + UnknownTerminalMode: "Unknown terminal mode: %s. Falling back to auto-discovery. Possible values: auto, enabled, disabled.", + UnableToDecodeJsonFile: "Unable to decode json file: %s", + UnableToWriteCliData: "Unable to write zcli data, paths tested: %s", + UnableToWriteLogFile: "Unable to write zcli debug log file, paths tested: %s", - BucketCreated = "Bucket created" - BucketCreateCreatingDirect = "Creating bucket %s directly on S3 API.\n" - BucketCreateCreatingZeropsApi = "Creating bucket %s using Zerops API.\n" + // args + ArgsOnlyOneOptionalAllowed: "optional arg %s can be only the last one", + ArgsOnlyOneArrayAllowed: "array arg %s can be only the last one", + ArgsNotEnoughRequiredArgs: "expected at least %d arg(s), got %d", + ArgsTooManyArgs: "expected no more than %d arg(s), got %d", - BucketDeleted = "Bucket deleted" - BucketDeleteDeletingDirect = "Deleting bucket %s directly on S3 API.\n" - BucketDeleteDeletingZeropsApi = "Deleting bucket %s using Zerops API.\n" + // logger + LoggerUnableToOpenLogFileWarning: "Failed to open a log file, used path: %s", - BucketS3Region = "When using direct S3 API choose one of Zerops regions.\nUse the \"zcli region list\" command to list all Zerops regions.\nAutomatically filled if the REGION environment variable exists or the user is logged in." - BucketS3AccessKeyId = "When using direct S3 API the accessKeyId to the Zerops object storage is required.\nAutomatically filled if the {serviceName}_accessKeyId environment variable exists." - BucketS3SecretAccessKey = "When using direct S3 API the secretAccessKey to the Zerops object storage is required.\nAutomatically filled if the {serviceName}_secretAccessKey environment variable exists." - BucketS3FlagBothMandatory = "If you are specifying accessKeyId or secretAccessKey, both flags are mandatory." - BucketS3EnvBothMandatory = "If you are using env for accessKeyId or secretAccessKey, both env variables must be set." - BucketS3RequestFailed = "S3 API request failed: %s" - BucketS3BucketAlreadyExists = "The bucket name already exists under a different object storage user. Set a different bucket name." + // ux helpers + ProjectSelectorListEmpty: "You don't have any projects yet. Create a new project using `zcli project import` command.", + ProjectSelectorPrompt: "Please, select a project", + ProjectSelectorOutOfRangeError: "We couldn't find a project with the index you entered. Please, try again or contact our support team.", + ServiceSelectorListEmpty: "Project doesn't have any services yet. Create a new service using `zcli service import` command", + ServiceSelectorPrompt: "Please, select a service", + ServiceSelectorOutOfRangeError: "We couldn't find a service with the index you entered. Please, try again or contact our support team.", + OrgSelectorListEmpty: "You don't belong to any organization yet. Please, contact our support team.", + OrgSelectorPrompt: "Please, select an org", + OrgSelectorOutOfRangeError: "We couldn't find an org with the index you entered. Please, try again or contact our support team.", + SelectorAllowedOnlyInTerminal: "Interactive selection can be used only in terminal mode. Use command flags to specify missing parameters.", + PromptAllowedOnlyInTerminal: "Interactive prompt can be used only in terminal mode. Use --confirm=true flag to confirm it", - // generic - UnauthenticatedUser = `unauthenticated user, login before proceeding with this command -zcli login {token | username password} -more info: https://docs.zerops.io/documentation/cli/authorization.html` + UnauthenticatedUser: `unauthenticated user, login before proceeding with this command +zcli login {token} +more info: https://docs.zerops.io/documentation/cli/authorization.html`, - GrpcApiTimeout = "zerops api didn't respond within assigned time, try it again later" - GrpcVpnApiTimeout = "zerops vpn server didn't respond within assigned time, try it again later" + // scope + SelectedProject: "Selected project", + SelectedService: "Selected service", + ScopedProject: "Scoped project", + ScopedProjectNotFound: "Scoped project wasn't found, select a different project using `zcli scope project` command.", + PreviouslyScopedProject: "Previously scoped project", + ScopeReset: "Scope was reset", - HintChangeRegion = "hint: try to change your region (you can list available regions using `zcli region list`)" -) + DestructiveOperationConfirmationFailed: "You have to confirm a destructive operation.", -func AddHintChangeRegion(err error) error { - return fmt.Errorf("%w\n%s", err, HintChangeRegion) + // errors + ErrorInvalidProjectId: "Invalid project ID [%s]", + ErrorInvalidScopedProjectId: "Invalid ID of the scoped project [%s], select a different project using `zcli scope project` command.", + ErrorInvalidServiceId: "Invalid service ID [%s]", + ErrorInvalidServiceIdOrName: "Invalid service ID or name [%s]", + ErrorProjectIsNotActive: "Project is not active", } diff --git a/src/i18n/i18n.go b/src/i18n/i18n.go new file mode 100644 index 00000000..c714534a --- /dev/null +++ b/src/i18n/i18n.go @@ -0,0 +1,327 @@ +package i18n + +import "fmt" + +func T(textConst string, args ...interface{}) string { + translation, exists := en[textConst] + if !exists { + return "[missing translation] " + textConst + } + if len(args) > 0 { + return fmt.Sprintf(translation, args...) + } + return translation +} + +const ( + // help + DisplayHelp = "DisplayHelp" + GroupHelp = "GroupHelp" + DeployHelp = "DeployHelp" + LogShowHelp = "LogShowHelp" + LoginHelp = "LoginHelp" + ProjectHelp = "ProjectHelp" + ProjectStartHelp = "ProjectStartHelp" + ProjectStopHelp = "ProjectStopHelp" + ProjectListHelp = "ProjectListHelp" + ScopeHelp = "ScopeHelp" + ScopeProjectHelp = "ScopeProjectHelp" + ScopeServiceHelp = "ScopeServiceHelp" + ScopeResetHelp = "ScopeResetHelp" + ProjectDeleteHelp = "ProjectDeleteHelp" + ProjectImportHelp = "ProjectImportHelp" + ProjectServiceImportHelp = "ProjectServiceImportHelp" + ServiceHelp = "ServiceHelp" + PushHelp = "PushHelp" + RegionListHelp = "RegionListHelp" + ServiceStartHelp = "ServiceStartHelp" + ServiceStopHelp = "ServiceStopHelp" + ServiceImportHelp = "ServiceImportHelp" + ServiceDeleteHelp = "ServiceDeleteHelp" + ServiceLogHelp = "ServiceLogHelp" + ServiceDeployHelp = "ServiceDeployHelp" + ServiceListHelp = "ServiceListHelp" + ServicePushHelp = "ServicePushHelp" + StatusHelp = "StatusHelp" + StatusInfoHelp = "StatusInfoHelp" + StatusShowDebugLogsHelp = "StatusShowDebugLogsHelp" + VersionHelp = "VersionHelp" + BucketCreateHelp = "BucketCreateHelp" + BucketDeleteHelp = "BucketDeleteHelp" + VpnHelp = "VpnHelp" + VpnConnectHelp = "VpnConnectHelp" + VpnDisconnectHelp = "VpnDisconnectHelp" + + // cmd short + CmdDeployDesc = "CmdDeployDesc" + CmdPushDesc = "CmdPushDesc" + CmdLogin = "CmdLogin" + CmdStatus = "CmdStatus" + CmdStatusInfo = "CmdStatusInfo" + CmdStatusShowDebugLogs = "CmdStatusShowDebugLogs" + CmdVersion = "CmdVersion" + CmdRegion = "CmdRegion" + CmdRegionList = "CmdRegionList" + CmdProject = "CmdProject" + CmdService = "CmdService" + CmdProjectStart = "CmdProjectStart" + CmdProjectStop = "CmdProjectStop" + CmdProjectList = "CmdProjectList" + CmdScope = "CmdScope" + CmdScopeProject = "CmdScopeProject" + CmdScopeService = "CmdScopeService" + CmdScopeReset = "CmdScopeReset" + CmdProjectDelete = "CmdProjectDelete" + CmdProjectImport = "CmdProjectImport" + CmdServiceList = "CmdServiceList" + CmdServiceImport = "CmdServiceImport" + CmdServiceStart = "CmdServiceStart" + CmdServiceStop = "CmdServiceStop" + CmdServiceDelete = "CmdServiceDelete" + CmdServiceLog = "CmdServiceLog" + CmdBucket = "CmdBucket" + CmdBucketZerops = "CmdBucketZerops" + CmdBucketS3 = "" + CmdBucketCreate = "CmdBucketCreate" + CmdBucketDelete = "CmdBucketDelete" + CmdVpn = "CmdVpn" + CmdVpnConnect = "CmdVpnConnect" + CmdVpnDisconnect = "CmdVpnDisconnect" + + // cmd long + CmdProjectImportLong = "CmdProjectImportLong" + DeployDescLong = "DeployDescLong" + PushDescLong = "PushDescLong" + CmdServiceLogLong = "CmdServiceLogLong" + ServiceLogAdditional = "ServiceLogAdditional" + + // flags description + RegionFlag = "RegionFlag" + RegionUrlFlag = "RegionUrlFlag" + BuildVersionName = "BuildVersionName" + SourceName = "SourceName" + BuildWorkingDir = "BuildWorkingDir" + BuildArchiveFilePath = "BuildArchiveFilePath" + ZeropsYamlLocation = "ZeropsYamlLocation" + UploadGitFolder = "UploadGitFolder" + OrgIdFlag = "OrgIdFlag" + LogLimitFlag = "LogLimitFlag" + LogMinSeverityFlag = "LogMinSeverityFlag" + LogMsgTypeFlag = "LogMsgTypeFlag" + LogFollowFlag = "LogFollowFlag" + LogShowBuildFlag = "LogShowBuildFlag" + LogFormatFlag = "LogFormatFlag" + LogFormatTemplateFlag = "LogFormatTemplateFlag" + ConfirmFlag = "ConfirmFlag" + ServiceIdFlag = "ServiceIdFlag" + ProjectIdFlag = "ProjectIdFlag" + + // prompt + PromptEnterZeropsServiceName = "PromptEnterZeropsServiceName" + PromptName = "PromptName" + PromptInvalidInput = "PromptInvalidInput" + PromptInvalidHostname = "PromptInvalidHostname" + + // process + ProcessInvalidState = "ProcessInvalidState" + ProcessInvalidStateProcess = "ProcessInvalidStateProcess" + ProcessStart = "ProcessStart" + ProcessEnd = "ProcessEnd" + + // archiveClient + ArchClientWorkingDirectory = "ArchClientWorkingDirectory" + ArchClientMaxOneTilde = "ArchClientMaxOneTilde" + ArchClientPackingDirectory = "ArchClientPackingDirectory" + ArchClientPackingFile = "ArchClientPackingFile" + ArchClientFileAlreadyExists = "ArchClientFileAlreadyExists" + + // login + LoginSuccess = "LoginSuccess" + LoginIncorrectToken = "LoginIncorrectToken" + RegionUrl = "RegionUrl" + + // region + RegionNotFound = "RegionNotFound" + RegionTableColumnName = "RegionTableColumnName" + + // client ID + MultipleClientIds = "MultipleClientIds" + AvailableClientIds = "AvailableClientIds" + MissingClientId = "MissingClientId" + + // import + YamlCheck = "YamlCheck" + ImportYamlOk = "ImportYamlOk" + ImportYamlEmpty = "ImportYamlEmpty" + ImportYamlTooLarge = "ImportYamlTooLarge" + ImportYamlFound = "ImportYamlFound" + ImportYamlNotFound = "ImportYamlNotFound" + ImportYamlCorrupted = "ImportYamlCorrupted" + ServiceCount = "ServiceCount" + QueuedProcesses = "QueuedProcesses" + CoreServices = "CoreServices" + ReadyToImportServices = "ReadyToImportServices" + + // delete cmd + DeleteCanceledByUser = "DeleteCanceledByUser" + + // project + service + ProjectWrongId = "ProjectWrongId" + ProjectsWithSameName = "ProjectsWithSameName" + AvailableProjectIds = "AvailableProjectIds" + ProjectNameOrIdEmpty = "ProjectNameOrIdEmpty" + ProjectDeleteConfirm = "ProjectDeleteConfirm" + ServiceNameIsEmpty = "ServiceNameIsEmpty" + ServiceDeleteConfirm = "ServiceDeleteConfirm" + ProcessInit = "ProcessInit" + ProjectStarting = "ProjectStarting" + ProjectStarted = "ProjectStarted" + ProjectStopping = "ProjectStopping" + ProjectStopped = "ProjectStopped" + ProjectDeleting = "ProjectDeleting" + ProjectDeleted = "ProjectDeleted" + ServiceStarting = "ServiceStarting" + ServiceStarted = "ServiceStarted" + ServiceStopping = "ServiceStopping" + ServiceStopped = "ServiceStopped" + ServiceDeleting = "ServiceDeleting" + ServiceDeleted = "ServiceDeleted" + ProjectImported = "ProjectImported" + ServiceImported = "ServiceImported" + + // service logs + LogLimitInvalid = "LogLimitInvalid" + LogMinSeverityInvalid = "LogMinSeverityInvalid" + LogMinSeverityStringLimitErr = "LogMinSeverityStringLimitErr" + LogMinSeverityNumLimitErr = "LogMinSeverityNumLimitErr" + LogFormatInvalid = "LogFormatInvalid" + LogFormatTemplateMismatch = "LogFormatTemplateMismatch" + LogFormatStreamMismatch = "LogFormatStreamMismatch" + LogServiceNameInvalid = "LogServiceNameInvalid" + LogFormatTemplateInvalid = "LogFormatTemplateInvalid" + LogFormatTemplateNoSpace = "LogFormatTemplateNoSpace" + LogSuffixInvalid = "LogSuffixInvalid" + LogRuntimeOnly = "LogRuntimeOnly" + LogNoContainerFound = "LogNoContainerFound" + LogTooFewContainers = "LogTooFewContainers" + LogNoBuildFound = "LogNoBuildFound" + LogBuildStatusUploading = "LogBuildStatusUploading" + LogAccessFailed = "LogAccessFailed" + LogMsgTypeInvalid = "LogMsgTypeInvalid" + LogReadingFailed = "LogReadingFailed" + + // push + PushRunning = "PushRunning" + PushFinished = "PushFinished" + + // deploy + DeployHintPush = "DeployHintPush" + BuildDeployServiceStatus = "BuildDeployServiceStatus" + BuildDeployCreatingPackageStart = "BuildDeployCreatingPackageStart" + BuildDeployCreatingPackageDone = "BuildDeployCreatingPackageDone" + BuildDeployPackageSavedInto = "BuildDeployPackageSavedInto" + BuildDeployUploadingPackageStart = "BuildDeployUploadingPackageStart" + BuildDeployUploadingPackageDone = "BuildDeployUploadingPackageDone" + BuildDeployUploadPackageFailed = "BuildDeployUploadPackageFailed" + BuildDeployDeployingStart = "BuildDeployDeployingStart" + BuildDeployZeropsYamlEmpty = "BuildDeployZeropsYamlEmpty" + BuildDeployZeropsYamlTooLarge = "BuildDeployZeropsYamlTooLarge" + BuildDeployZeropsYamlFound = "BuildDeployZeropsYamlFound" + BuildDeployZeropsYamlNotFound = "BuildDeployZeropsYamlNotFound" + + // s3 + BucketGenericXAmzAcl = "BucketGenericXAmzAcl" + BucketGenericXAmzAclInvalid = "BucketGenericXAmzAclInvalid" + BucketGenericOnlyForObjectStorage = "BucketGenericOnlyForObjectStorage" + BucketGenericBucketNamePrefixed = "BucketGenericBucketNamePrefixed" + + BucketCreated = "BucketCreated" + BucketCreateCreatingDirect = "BucketCreateCreatingDirect" + BucketCreateCreatingZeropsApi = "BucketCreateCreatingZeropsApi" + + BucketDeleteConfirm = "BucketDeleteConfirm" + BucketDeleted = "BucketDeleted" + BucketDeleteDeletingDirect = "BucketDeleteDeletingDirect" + BucketDeleteDeletingZeropsApi = "BucketDeleteDeletingZeropsApi" + + BucketS3AccessKeyId = "AccessKeyId" + BucketS3SecretAccessKey = "SecretAccessKey" + BucketS3FlagBothMandatory = "FlagBothMandatory" + BucketS3EnvBothMandatory = "EnvBothMandatory" + BucketS3RequestFailed = "RequestFailed" + BucketS3BucketAlreadyExists = "BucketAlreadyExists" + + // status info + StatusInfoCliDataFilePath = "StatusInfoCliDataFilePath" + StatusInfoLogFilePath = "StatusInfoLogFilePath" + + // debug logs + DebugLogsNotFound = "DebugLogsNotFound" + + // vpn + VpnConnected = "VpnConnected" + VpnDisconnected = "VpnDisconnected" + VpnConfigSaved = "VpnConfigSaved" + VpnPrivateKeyCorrupted = "VpnPrivateKeyCorrupted" + VpnPrivateKeyCreated = "VpnPrivateKeyCreated" + + //////////// + // global // + //////////// + CliTerminalModeEnvVar = "TerminalModeEnv" + CliLogFilePathEnvVar = "CliLogFilePathEnvVar" + CliDataFilePathEnvVar = "CliDataFilePathEnvVar" + + UnknownTerminalMode = "UnknownTerminalMode" + UnableToDecodeJsonFile = "UnableToDecodeJsonFile" + UnableToWriteCliData = "UnableToWriteCliData" + UnableToWriteLogFile = "UnableToWriteLogFile" + + // args + ArgsOnlyOneOptionalAllowed = "ArgsOnlyOneOptionalAllowed" + ArgsOnlyOneArrayAllowed = "ArgsOnlyOneArrayAllowed" + ArgsNotEnoughRequiredArgs = "ArgsNotEnoughRequiredArgs" + ArgsTooManyArgs = "ArgsTooManyArgs" + + // logger + LoggerUnableToOpenLogFileWarning = "LoggerUnableToOpenLogFileWarning" + + // ux helpers + ProjectSelectorListEmpty = "ProjectSelectorListEmpty" + ProjectSelectorPrompt = "ProjectSelectorPrompt" + ProjectSelectorOutOfRangeError = "ProjectSelectorOutOfRangeError" + ServiceSelectorListEmpty = "ServiceSelectorListEmpty" + ServiceSelectorPrompt = "ServiceSelectorPrompt" + ServiceSelectorOutOfRangeError = "ServiceSelectorOutOfRangeError" + OrgSelectorListEmpty = "OrgSelectorListEmpty" + OrgSelectorPrompt = "OrgSelectorPrompt" + OrgSelectorOutOfRangeError = "OrgSelectorOutOfRangeError" + SelectorAllowedOnlyInTerminal = "SelectorAllowedOnlyInTerminal" + PromptAllowedOnlyInTerminal = "PromptAllowedOnlyInTerminal" + + UnauthenticatedUser = "UnauthenticatedUser" + + // scope + SelectedProject = "SelectedProject" + SelectedService = "SelectedService" + ScopedProject = "ScopedProject" + ScopedProjectNotFound = "ScopedProjectNotFound" + PreviouslyScopedProject = "PreviouslyScopedProject" + ScopeReset = "ScopeReset" + + DestructiveOperationConfirmationFailed = "DestructiveOperationConfirmationFailed" + + HintChangeRegion = "HintChangeRegion" + ScopedServiceNotFound = "ScopedServiceNotFound" + ProjectIdInvalidFormat = "ProjectIdInvalidFormat" + ProjectNotFound = "ProjectNotFound" + ServiceIdInvalidFormat = "ServiceIdInvalidFormat" + ServiceNotFound = "ServiceNotFound" + + // errors + ErrorInvalidProjectId = "ErrorInvalidProjectId" + ErrorInvalidScopedProjectId = "ErrorInvalidScopedProjectId" + ErrorInvalidServiceId = "ErrorInvalidServiceId" + ErrorInvalidServiceIdOrName = "ErrorInvalidServiceIdOrName" + ErrorProjectIsNotActive = "ErrorProjectIsNotActive" +) diff --git a/src/utils/logger/handler.go b/src/logger/handler.go similarity index 50% rename from src/utils/logger/handler.go rename to src/logger/handler.go index 54b62c7a..eea85fb8 100644 --- a/src/utils/logger/handler.go +++ b/src/logger/handler.go @@ -1,45 +1,61 @@ package logger import ( - "io/ioutil" - "os" - "path/filepath" + "io" "github.com/sirupsen/logrus" ) -type Config struct { - FilePath string -} - type Handler struct { - config Config - logrus *logrus.Logger } -func New(config Config) (*Handler, error) { - - dir := filepath.Dir(config.FilePath) - err := os.MkdirAll(dir, 0755) - if err != nil { - return nil, err - } +type OutputConfig struct { + IsTerminal bool +} +func NewOutputLogger(config OutputConfig) *Handler { l := logrus.New() - l.Out = ioutil.Discard + l.Out = io.Discard l.Level = logrus.DebugLevel - l.AddHook(&StdoutHook{levels: []logrus.Level{logrus.DebugLevel, logrus.InfoLevel, logrus.WarnLevel, logrus.ErrorLevel}}) - l.AddHook(&VarLogHook{ - path: config.FilePath, - levels: []logrus.Level{logrus.DebugLevel, logrus.InfoLevel, logrus.WarnLevel, logrus.ErrorLevel}, + + var formatter logrus.Formatter + if !config.IsTerminal { + formatter = &logrus.TextFormatter{DisableColors: true} + } + + l.AddHook(&StdoutHook{ + levels: []logrus.Level{logrus.DebugLevel, logrus.InfoLevel, logrus.WarnLevel, logrus.ErrorLevel}, + formatter: formatter, }) return &Handler{ - config: config, + logrus: l, + } +} + +type DebugFileConfig struct { + FilePath string +} +func NewDebugFileLogger(config DebugFileConfig) *Handler { + l := logrus.New() + l.Out = io.Discard + l.Level = logrus.DebugLevel + + if config.FilePath != "" { + l.AddHook(&VarLogHook{ + path: config.FilePath, + levels: []logrus.Level{logrus.DebugLevel, logrus.InfoLevel, logrus.WarnLevel, logrus.ErrorLevel}, + formatter: &logrus.TextFormatter{ + DisableColors: true, + }, + }) + } + + return &Handler{ logrus: l, - }, nil + } } func (h *Handler) Info(a ...interface{}) { diff --git a/src/utils/logger/hooks.go b/src/logger/hooks.go similarity index 66% rename from src/utils/logger/hooks.go rename to src/logger/hooks.go index 1355dcfb..e2bb39ce 100644 --- a/src/utils/logger/hooks.go +++ b/src/logger/hooks.go @@ -10,8 +10,9 @@ import ( ) type VarLogHook struct { - path string - levels []logrus.Level + path string + levels []logrus.Level + formatter logrus.Formatter lock sync.Mutex } @@ -23,7 +24,8 @@ func (hook *VarLogHook) Levels() []logrus.Level { func (hook *VarLogHook) Fire(entry *logrus.Entry) error { hook.lock.Lock() defer hook.lock.Unlock() - msg, err := (&logrus.TextFormatter{}).Format(entry) + + msg, err := hook.formatter.Format(entry) if err != nil { fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err) return err @@ -47,7 +49,8 @@ func (hook *VarLogHook) Fire(entry *logrus.Entry) error { } type StdoutHook struct { - levels []logrus.Level + levels []logrus.Level + formatter logrus.Formatter } func (hook *StdoutHook) Levels() []logrus.Level { @@ -55,16 +58,20 @@ func (hook *StdoutHook) Levels() []logrus.Level { } func (hook *StdoutHook) Fire(entry *logrus.Entry) error { - msg, err := (&logrus.TextFormatter{}).Format(entry) - if err != nil { - fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err) - return err + msg := []byte(entry.Message) + if hook.formatter != nil { + if formattedEntry, err := hook.formatter.Format(entry); err != nil { + fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err) + } else { + msg = formattedEntry + } + } else { + msg = append(msg, '\n') } if entry.Level <= logrus.ErrorLevel { - io.WriteString(os.Stderr, string(msg)) + os.Stderr.Write(msg) } else { - io.WriteString(os.Stdout, string(msg)) - + os.Stdout.Write(msg) } return nil } diff --git a/src/utils/logger/interface.go b/src/logger/interface.go similarity index 100% rename from src/utils/logger/interface.go rename to src/logger/interface.go diff --git a/src/metaError/errors.go b/src/metaError/errors.go deleted file mode 100644 index cbd780fc..00000000 --- a/src/metaError/errors.go +++ /dev/null @@ -1,32 +0,0 @@ -package metaError - -import ( - "errors" - "fmt" - "os" - "strings" - - "github.com/ghodss/yaml" -) - -type apiError interface { - GetMeta() any - GetMessage() string -} - -// Print prints out meta in the os.Stderr -func Print(err error) { - var apiErr apiError - if !errors.As(err, &apiErr) { - fmt.Fprintln(os.Stderr, "error:", err) - return - } - fmt.Fprintln(os.Stderr, "error:", strings.ToLower(apiErr.GetMessage())) - if apiErr.GetMeta() != nil { - meta, err := yaml.Marshal(apiErr.GetMeta()) - if err != nil { - fmt.Fprintln(os.Stderr, "couldn't parse meta") - } - fmt.Fprintln(os.Stderr, string(meta)) - } -} diff --git a/src/nettools/pickIP.go b/src/nettools/pickIP.go deleted file mode 100644 index 53c071fb..00000000 --- a/src/nettools/pickIP.go +++ /dev/null @@ -1,19 +0,0 @@ -package nettools - -import ( - "net" - "time" -) - -func PickIP(port string, ips ...net.IP) net.IP { - timeout := time.Second * 5 - for _, ip := range ips { - conn, err := net.DialTimeout("tcp", net.JoinHostPort(ip.String(), port), timeout) - if err != nil { - continue - } - conn.Close() - return ip - } - return nil -} diff --git a/src/nettools/ping.go b/src/nettools/ping.go deleted file mode 100644 index 573897e3..00000000 --- a/src/nettools/ping.go +++ /dev/null @@ -1,73 +0,0 @@ -package nettools - -import ( - "context" - "fmt" - "os/exec" - "runtime" - "strings" -) - -func HasIPv6PingCommand() bool { - if hasPing6Command() { - return true - } - if _, err := exec.LookPath("ping"); err == nil { - return true - } - return runtime.GOOS == "windows" -} - -func hasPing6Command() bool { - _, err := exec.LookPath("ping6") - return err == nil -} - -func Ping(ctx context.Context, address string) error { - cmd := []string{"ping6", "-c", "1", address} - if !hasPing6Command() { - cmd = []string{"ping", "-6", "-c", "1", address} - } - if runtime.GOOS == "windows" { - cmd = []string{"ping", "/n", "1", address} - } - - if out, err := exec.CommandContext(ctx, cmd[0], cmd[1:]...).Output(); err != nil { - return pingError(err, cmd, out) - } - return nil -} - -type PingError struct { - err error - cmd []string - output string -} - -func (p PingError) Err() error { - return p.err -} - -func (p PingError) Output() string { - return p.output -} - -func (p PingError) Cmd() string { - return strings.Join(p.cmd, " ") -} - -func (p PingError) Error() string { - return fmt.Sprintf("ping => err: %s, exec: %s, output: %s", p.err, p.Cmd(), p.output) -} - -func pingError( - err error, - cmd []string, - output []byte, -) error { - return PingError{ - err: err, - cmd: cmd, - output: string(output), - } -} diff --git a/src/nettools/read.go b/src/nettools/read.go deleted file mode 100644 index 5fa22b5c..00000000 --- a/src/nettools/read.go +++ /dev/null @@ -1,24 +0,0 @@ -package nettools - -import "net" - -func GetInterfaceNameByIp(interfaceIp net.IP) (string, bool, error) { - interfaces, err := net.Interfaces() - if err != nil { - return "", false, err - } - for _, in := range interfaces { - addresses, err := in.Addrs() - if err != nil { - return "", false, err - } - for _, address := range addresses { - if ip, isIp := address.(*net.IPNet); isIp { - if ip.IP.Equal(interfaceIp) { - return in.Name, true, nil - } - } - } - } - return "", false, nil -} diff --git a/src/prolongVpn/prolong.go b/src/prolongVpn/prolong.go deleted file mode 100644 index fb28754b..00000000 --- a/src/prolongVpn/prolong.go +++ /dev/null @@ -1,110 +0,0 @@ -package prolongVpn - -import ( - "context" - "errors" - "os" - "time" - - "github.com/zeropsio/zcli/src/daemonStorage" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/vpnproxy" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/logger" - "golang.zx2c4.com/wireguard/wgctrl" -) - -const ( - cronInterval = time.Minute - thresholdInterval = 10 * time.Minute -) - -type Handler struct { - storage *daemonStorage.Handler - log *logger.Handler -} - -func New(storage *daemonStorage.Handler, log *logger.Handler) *Handler { - return &Handler{ - storage: storage, - log: log, - } -} - -func (h *Handler) Run(ctx context.Context) error { - t := time.NewTicker(cronInterval) - defer t.Stop() - - for { - select { - case <-ctx.Done(): - return nil - case <-t.C: - h.log.Debug("checking prolong") - err := h.prolong(ctx) - if err != nil { - h.log.Warning("prolong: ", err) - } - } - } -} - -func (h *Handler) prolong(ctx context.Context) error { - data := h.storage.Data() - if data.InterfaceName == "" { - return nil - } - if data.Expiry.Sub(time.Now()) > thresholdInterval { - return nil - } - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{CaCertificateUrl: data.CaCertificateUrl}) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient(ctx, data.GrpcApiAddress, data.Token) - if err != nil { - return err - } - defer closeFunc() - - wgClient, err := wgctrl.New() - if err != nil { - return errors.New(i18n.VpnStatusWireguardNotAvailable) - } - defer wgClient.Close() - - device, err := wgClient.Device(data.InterfaceName) - if err != nil { - if errors.Is(err, os.ErrNotExist) { - return nil - } - return err - } - - businessResp, err := apiGrpcClient.PostVpnRequest(ctx, &zBusinessZeropsApiProtocol.PostVpnRequestRequest{ - Id: data.ProjectId, - ClientPublicKey: device.PublicKey.String(), - }) - if err := proto.BusinessError(businessResp, err); err != nil { - return err - } - expiry := businessResp.GetOutput().GetExpiry() - accessToken := businessResp.GetOutput().GetAccessToken() - - vpnClient, closeFn, err := vpnproxy.CreateClient(ctx, data.GrpcTargetVpnAddress) - if err != nil { - return err - } - vpnResp, err := vpnClient.ProlongVpn(ctx, &vpnproxy.ProlongVpnRequest{ - AccessToken: accessToken, - }) - closeFn() - if err := proto.VpnError(vpnResp, err); err != nil { - return err - } - - h.storage.Update(func(data daemonStorage.Data) daemonStorage.Data { - data.Expiry = zBusinessZeropsApiProtocol.FromProtoTimestamp(expiry) - return data - }) - - return nil -} diff --git a/src/proto/daemon/build-pb b/src/proto/daemon/build-pb deleted file mode 100755 index 5ce337f4..00000000 --- a/src/proto/daemon/build-pb +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -PTYPES=`go list -f '{{ .Dir }}' -m github.com/golang/protobuf` - -protoc \ - -I . \ - -I ${PTYPES}/ptypes \ - --go_out=paths=source_relative:. \ - --go-grpc_out=paths=source_relative:. *.proto - -if [ $? -ne 0 ]; then - echo FAIL - exit 1 -fi diff --git a/src/proto/daemon/build-pb-generate.go b/src/proto/daemon/build-pb-generate.go deleted file mode 100644 index ff561ad0..00000000 --- a/src/proto/daemon/build-pb-generate.go +++ /dev/null @@ -1,3 +0,0 @@ -package daemon - -//go:generate gomodrun /bin/bash build-pb diff --git a/src/proto/daemon/client.go b/src/proto/daemon/client.go deleted file mode 100644 index d25f6a54..00000000 --- a/src/proto/daemon/client.go +++ /dev/null @@ -1,18 +0,0 @@ -package daemon - -import ( - "context" - - "google.golang.org/grpc" -) - -func CreateClient(ctx context.Context) (_ ZeropsDaemonProtocolClient, closeFunc func(), err error) { - connection, err := grpc.DialContext(ctx, daemonDialAddress(), grpc.WithInsecure()) - if err != nil { - return nil, nil, err - } - - closeFunc = func() { _ = connection.Close() } - - return NewZeropsDaemonProtocolClient(connection), closeFunc, nil -} diff --git a/src/proto/daemon/client_address_darwin.go b/src/proto/daemon/client_address_darwin.go deleted file mode 100644 index 05c1780e..00000000 --- a/src/proto/daemon/client_address_darwin.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build darwin -// +build darwin - -package daemon - -import ( - "github.com/zeropsio/zcli/src/constants" -) - -func daemonDialAddress() string { - return "unix:///" + constants.DaemonAddress -} diff --git a/src/proto/daemon/client_address_linux.go b/src/proto/daemon/client_address_linux.go deleted file mode 100644 index 2833687e..00000000 --- a/src/proto/daemon/client_address_linux.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build linux -// +build linux - -package daemon - -import ( - "github.com/zeropsio/zcli/src/constants" -) - -func daemonDialAddress() string { - return "unix:///" + constants.DaemonAddress -} diff --git a/src/proto/daemon/client_address_windows.go b/src/proto/daemon/client_address_windows.go deleted file mode 100644 index 3a46116e..00000000 --- a/src/proto/daemon/client_address_windows.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build windows -// +build windows - -package daemon - -import ( - "github.com/zeropsio/zcli/src/constants" -) - -func daemonDialAddress() string { - return "localhost" + constants.DaemonAddress -} diff --git a/src/proto/daemon/zeropsDaemonProtocol.pb.go b/src/proto/daemon/zeropsDaemonProtocol.pb.go deleted file mode 100644 index 81e81193..00000000 --- a/src/proto/daemon/zeropsDaemonProtocol.pb.go +++ /dev/null @@ -1,546 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.1 -// protoc v3.21.3 -// source: zeropsDaemonProtocol.proto - -package daemon - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - 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 TunnelState int32 - -const ( - TunnelState_TUNNEL_SET_INACTIVE TunnelState = 0 - TunnelState_TUNNEL_ACTIVE TunnelState = 1 -) - -// Enum value maps for TunnelState. -var ( - TunnelState_name = map[int32]string{ - 0: "TUNNEL_SET_INACTIVE", - 1: "TUNNEL_ACTIVE", - } - TunnelState_value = map[string]int32{ - "TUNNEL_SET_INACTIVE": 0, - "TUNNEL_ACTIVE": 1, - } -) - -func (x TunnelState) Enum() *TunnelState { - p := new(TunnelState) - *p = x - return p -} - -func (x TunnelState) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (TunnelState) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsDaemonProtocol_proto_enumTypes[0].Descriptor() -} - -func (TunnelState) Type() protoreflect.EnumType { - return &file_zeropsDaemonProtocol_proto_enumTypes[0] -} - -func (x TunnelState) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use TunnelState.Descriptor instead. -func (TunnelState) EnumDescriptor() ([]byte, []int) { - return file_zeropsDaemonProtocol_proto_rawDescGZIP(), []int{0} -} - -type DnsState int32 - -const ( - DnsState_DNS_SET_INACTIVE DnsState = 0 - DnsState_DNS_ACTIVE DnsState = 1 -) - -// Enum value maps for DnsState. -var ( - DnsState_name = map[int32]string{ - 0: "DNS_SET_INACTIVE", - 1: "DNS_ACTIVE", - } - DnsState_value = map[string]int32{ - "DNS_SET_INACTIVE": 0, - "DNS_ACTIVE": 1, - } -) - -func (x DnsState) Enum() *DnsState { - p := new(DnsState) - *p = x - return p -} - -func (x DnsState) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (DnsState) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsDaemonProtocol_proto_enumTypes[1].Descriptor() -} - -func (DnsState) Type() protoreflect.EnumType { - return &file_zeropsDaemonProtocol_proto_enumTypes[1] -} - -func (x DnsState) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use DnsState.Descriptor instead. -func (DnsState) EnumDescriptor() ([]byte, []int) { - return file_zeropsDaemonProtocol_proto_rawDescGZIP(), []int{1} -} - -type VpnStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TunnelState TunnelState `protobuf:"varint,1,opt,name=tunnelState,proto3,enum=zeropsDaemonProtocol.TunnelState" json:"tunnelState,omitempty"` - DnsState DnsState `protobuf:"varint,2,opt,name=dnsState,proto3,enum=zeropsDaemonProtocol.DnsState" json:"dnsState,omitempty"` - AdditionalInfo string `protobuf:"bytes,3,opt,name=additionalInfo,proto3" json:"additionalInfo,omitempty"` -} - -func (x *VpnStatus) Reset() { - *x = VpnStatus{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsDaemonProtocol_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VpnStatus) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VpnStatus) ProtoMessage() {} - -func (x *VpnStatus) ProtoReflect() protoreflect.Message { - mi := &file_zeropsDaemonProtocol_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 VpnStatus.ProtoReflect.Descriptor instead. -func (*VpnStatus) Descriptor() ([]byte, []int) { - return file_zeropsDaemonProtocol_proto_rawDescGZIP(), []int{0} -} - -func (x *VpnStatus) GetTunnelState() TunnelState { - if x != nil { - return x.TunnelState - } - return TunnelState_TUNNEL_SET_INACTIVE -} - -func (x *VpnStatus) GetDnsState() DnsState { - if x != nil { - return x.DnsState - } - return DnsState_DNS_SET_INACTIVE -} - -func (x *VpnStatus) GetAdditionalInfo() string { - if x != nil { - return x.AdditionalInfo - } - return "" -} - -type StartVpnRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ApiAddress string `protobuf:"bytes,1,opt,name=apiAddress,proto3" json:"apiAddress,omitempty"` - VpnAddress string `protobuf:"bytes,2,opt,name=vpnAddress,proto3" json:"vpnAddress,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - Token string `protobuf:"bytes,4,opt,name=token,proto3" json:"token,omitempty"` - Mtu uint32 `protobuf:"varint,5,opt,name=mtu,proto3" json:"mtu,omitempty"` - UserId string `protobuf:"bytes,6,opt,name=userId,proto3" json:"userId,omitempty"` - CaCertificateUrl string `protobuf:"bytes,7,opt,name=caCertificateUrl,proto3" json:"caCertificateUrl,omitempty"` - PreferredPortMin uint32 `protobuf:"varint,8,opt,name=preferredPortMin,proto3" json:"preferredPortMin,omitempty"` - PreferredPortMax uint32 `protobuf:"varint,9,opt,name=preferredPortMax,proto3" json:"preferredPortMax,omitempty"` -} - -func (x *StartVpnRequest) Reset() { - *x = StartVpnRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsDaemonProtocol_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartVpnRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartVpnRequest) ProtoMessage() {} - -func (x *StartVpnRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsDaemonProtocol_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 StartVpnRequest.ProtoReflect.Descriptor instead. -func (*StartVpnRequest) Descriptor() ([]byte, []int) { - return file_zeropsDaemonProtocol_proto_rawDescGZIP(), []int{1} -} - -func (x *StartVpnRequest) GetApiAddress() string { - if x != nil { - return x.ApiAddress - } - return "" -} - -func (x *StartVpnRequest) GetVpnAddress() string { - if x != nil { - return x.VpnAddress - } - return "" -} - -func (x *StartVpnRequest) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *StartVpnRequest) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *StartVpnRequest) GetMtu() uint32 { - if x != nil { - return x.Mtu - } - return 0 -} - -func (x *StartVpnRequest) GetUserId() string { - if x != nil { - return x.UserId - } - return "" -} - -func (x *StartVpnRequest) GetCaCertificateUrl() string { - if x != nil { - return x.CaCertificateUrl - } - return "" -} - -func (x *StartVpnRequest) GetPreferredPortMin() uint32 { - if x != nil { - return x.PreferredPortMin - } - return 0 -} - -func (x *StartVpnRequest) GetPreferredPortMax() uint32 { - if x != nil { - return x.PreferredPortMax - } - return 0 -} - -type StopVpnRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *StopVpnRequest) Reset() { - *x = StopVpnRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsDaemonProtocol_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StopVpnRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StopVpnRequest) ProtoMessage() {} - -func (x *StopVpnRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsDaemonProtocol_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 StopVpnRequest.ProtoReflect.Descriptor instead. -func (*StopVpnRequest) Descriptor() ([]byte, []int) { - return file_zeropsDaemonProtocol_proto_rawDescGZIP(), []int{2} -} - -type StatusVpnRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *StatusVpnRequest) Reset() { - *x = StatusVpnRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsDaemonProtocol_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StatusVpnRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StatusVpnRequest) ProtoMessage() {} - -func (x *StatusVpnRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsDaemonProtocol_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 StatusVpnRequest.ProtoReflect.Descriptor instead. -func (*StatusVpnRequest) Descriptor() ([]byte, []int) { - return file_zeropsDaemonProtocol_proto_rawDescGZIP(), []int{3} -} - -var File_zeropsDaemonProtocol_proto protoreflect.FileDescriptor - -var file_zeropsDaemonProtocol_proto_rawDesc = []byte{ - 0x0a, 0x1a, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x7a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x22, 0xb4, 0x01, 0x0a, 0x09, 0x76, 0x70, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x43, 0x0a, 0x0b, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x44, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x74, 0x75, 0x6e, - 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x64, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x64, - 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x64, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, - 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xb3, 0x02, 0x0a, 0x0f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, - 0x0a, 0x61, 0x70, 0x69, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, - 0x0a, 0x76, 0x70, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x76, 0x70, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, - 0x6d, 0x74, 0x75, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x63, - 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x72, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x10, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, - 0x4d, 0x69, 0x6e, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, - 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x70, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x78, 0x22, - 0x10, 0x0a, 0x0e, 0x73, 0x74, 0x6f, 0x70, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x12, 0x0a, 0x10, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x70, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0x39, 0x0a, 0x0b, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x55, 0x4e, 0x4e, 0x45, 0x4c, 0x5f, 0x53, - 0x45, 0x54, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, - 0x0d, 0x54, 0x55, 0x4e, 0x4e, 0x45, 0x4c, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, - 0x2a, 0x30, 0x0a, 0x08, 0x64, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x10, - 0x44, 0x4e, 0x53, 0x5f, 0x53, 0x45, 0x54, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, - 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x4e, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, - 0x10, 0x01, 0x32, 0x92, 0x02, 0x0a, 0x14, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x44, 0x61, 0x65, - 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x52, 0x0a, 0x08, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x56, 0x70, 0x6e, 0x12, 0x25, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, - 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x76, 0x70, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x50, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x56, 0x70, 0x6e, 0x12, 0x24, 0x2e, 0x7a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x73, 0x74, 0x6f, 0x70, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x76, 0x70, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x54, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x70, 0x6e, 0x12, 0x26, - 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x70, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x44, - 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x76, 0x70, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x69, 0x6f, 0x2f, 0x7a, - 0x63, 0x6c, 0x69, 0x2f, 0x73, 0x72, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_zeropsDaemonProtocol_proto_rawDescOnce sync.Once - file_zeropsDaemonProtocol_proto_rawDescData = file_zeropsDaemonProtocol_proto_rawDesc -) - -func file_zeropsDaemonProtocol_proto_rawDescGZIP() []byte { - file_zeropsDaemonProtocol_proto_rawDescOnce.Do(func() { - file_zeropsDaemonProtocol_proto_rawDescData = protoimpl.X.CompressGZIP(file_zeropsDaemonProtocol_proto_rawDescData) - }) - return file_zeropsDaemonProtocol_proto_rawDescData -} - -var file_zeropsDaemonProtocol_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_zeropsDaemonProtocol_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_zeropsDaemonProtocol_proto_goTypes = []interface{}{ - (TunnelState)(0), // 0: zeropsDaemonProtocol.tunnelState - (DnsState)(0), // 1: zeropsDaemonProtocol.dnsState - (*VpnStatus)(nil), // 2: zeropsDaemonProtocol.vpnStatus - (*StartVpnRequest)(nil), // 3: zeropsDaemonProtocol.startVpnRequest - (*StopVpnRequest)(nil), // 4: zeropsDaemonProtocol.stopVpnRequest - (*StatusVpnRequest)(nil), // 5: zeropsDaemonProtocol.statusVpnRequest -} -var file_zeropsDaemonProtocol_proto_depIdxs = []int32{ - 0, // 0: zeropsDaemonProtocol.vpnStatus.tunnelState:type_name -> zeropsDaemonProtocol.tunnelState - 1, // 1: zeropsDaemonProtocol.vpnStatus.dnsState:type_name -> zeropsDaemonProtocol.dnsState - 3, // 2: zeropsDaemonProtocol.ZeropsDaemonProtocol.startVpn:input_type -> zeropsDaemonProtocol.startVpnRequest - 4, // 3: zeropsDaemonProtocol.ZeropsDaemonProtocol.stopVpn:input_type -> zeropsDaemonProtocol.stopVpnRequest - 5, // 4: zeropsDaemonProtocol.ZeropsDaemonProtocol.statusVpn:input_type -> zeropsDaemonProtocol.statusVpnRequest - 2, // 5: zeropsDaemonProtocol.ZeropsDaemonProtocol.startVpn:output_type -> zeropsDaemonProtocol.vpnStatus - 2, // 6: zeropsDaemonProtocol.ZeropsDaemonProtocol.stopVpn:output_type -> zeropsDaemonProtocol.vpnStatus - 2, // 7: zeropsDaemonProtocol.ZeropsDaemonProtocol.statusVpn:output_type -> zeropsDaemonProtocol.vpnStatus - 5, // [5:8] is the sub-list for method output_type - 2, // [2:5] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_zeropsDaemonProtocol_proto_init() } -func file_zeropsDaemonProtocol_proto_init() { - if File_zeropsDaemonProtocol_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_zeropsDaemonProtocol_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VpnStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsDaemonProtocol_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartVpnRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsDaemonProtocol_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopVpnRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsDaemonProtocol_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusVpnRequest); 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_zeropsDaemonProtocol_proto_rawDesc, - NumEnums: 2, - NumMessages: 4, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_zeropsDaemonProtocol_proto_goTypes, - DependencyIndexes: file_zeropsDaemonProtocol_proto_depIdxs, - EnumInfos: file_zeropsDaemonProtocol_proto_enumTypes, - MessageInfos: file_zeropsDaemonProtocol_proto_msgTypes, - }.Build() - File_zeropsDaemonProtocol_proto = out.File - file_zeropsDaemonProtocol_proto_rawDesc = nil - file_zeropsDaemonProtocol_proto_goTypes = nil - file_zeropsDaemonProtocol_proto_depIdxs = nil -} diff --git a/src/proto/daemon/zeropsDaemonProtocol.proto b/src/proto/daemon/zeropsDaemonProtocol.proto deleted file mode 100644 index c3be19d8..00000000 --- a/src/proto/daemon/zeropsDaemonProtocol.proto +++ /dev/null @@ -1,45 +0,0 @@ -syntax = "proto3"; - -option go_package = "github.com/zeropsio/zcli/src/protocol/daemon"; - -package zeropsDaemonProtocol; - -service ZeropsDaemonProtocol { - rpc startVpn (startVpnRequest) returns (vpnStatus); - rpc stopVpn (stopVpnRequest) returns (vpnStatus); - rpc statusVpn (statusVpnRequest) returns (vpnStatus); -} - -enum tunnelState { - TUNNEL_SET_INACTIVE = 0; - TUNNEL_ACTIVE = 1; -} - -enum dnsState { - DNS_SET_INACTIVE = 0; - DNS_ACTIVE = 1; -} - -message vpnStatus { - tunnelState tunnelState = 1; - dnsState dnsState = 2; - string additionalInfo = 3; -} - -message startVpnRequest { - string apiAddress = 1; - string vpnAddress = 2; - string projectId = 3; - string token = 4; - uint32 mtu = 5; - string userId = 6; - string caCertificateUrl = 7; - uint32 preferredPortMin = 8; - uint32 preferredPortMax = 9; -} - -message stopVpnRequest { -} - -message statusVpnRequest { -} diff --git a/src/proto/daemon/zeropsDaemonProtocol_grpc.pb.go b/src/proto/daemon/zeropsDaemonProtocol_grpc.pb.go deleted file mode 100644 index 0bcb4e82..00000000 --- a/src/proto/daemon/zeropsDaemonProtocol_grpc.pb.go +++ /dev/null @@ -1,177 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.21.3 -// source: zeropsDaemonProtocol.proto - -package daemon - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// 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 - -// ZeropsDaemonProtocolClient is the client API for ZeropsDaemonProtocol 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 ZeropsDaemonProtocolClient interface { - StartVpn(ctx context.Context, in *StartVpnRequest, opts ...grpc.CallOption) (*VpnStatus, error) - StopVpn(ctx context.Context, in *StopVpnRequest, opts ...grpc.CallOption) (*VpnStatus, error) - StatusVpn(ctx context.Context, in *StatusVpnRequest, opts ...grpc.CallOption) (*VpnStatus, error) -} - -type zeropsDaemonProtocolClient struct { - cc grpc.ClientConnInterface -} - -func NewZeropsDaemonProtocolClient(cc grpc.ClientConnInterface) ZeropsDaemonProtocolClient { - return &zeropsDaemonProtocolClient{cc} -} - -func (c *zeropsDaemonProtocolClient) StartVpn(ctx context.Context, in *StartVpnRequest, opts ...grpc.CallOption) (*VpnStatus, error) { - out := new(VpnStatus) - err := c.cc.Invoke(ctx, "/zeropsDaemonProtocol.ZeropsDaemonProtocol/startVpn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zeropsDaemonProtocolClient) StopVpn(ctx context.Context, in *StopVpnRequest, opts ...grpc.CallOption) (*VpnStatus, error) { - out := new(VpnStatus) - err := c.cc.Invoke(ctx, "/zeropsDaemonProtocol.ZeropsDaemonProtocol/stopVpn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zeropsDaemonProtocolClient) StatusVpn(ctx context.Context, in *StatusVpnRequest, opts ...grpc.CallOption) (*VpnStatus, error) { - out := new(VpnStatus) - err := c.cc.Invoke(ctx, "/zeropsDaemonProtocol.ZeropsDaemonProtocol/statusVpn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// ZeropsDaemonProtocolServer is the server API for ZeropsDaemonProtocol service. -// All implementations must embed UnimplementedZeropsDaemonProtocolServer -// for forward compatibility -type ZeropsDaemonProtocolServer interface { - StartVpn(context.Context, *StartVpnRequest) (*VpnStatus, error) - StopVpn(context.Context, *StopVpnRequest) (*VpnStatus, error) - StatusVpn(context.Context, *StatusVpnRequest) (*VpnStatus, error) - mustEmbedUnimplementedZeropsDaemonProtocolServer() -} - -// UnimplementedZeropsDaemonProtocolServer must be embedded to have forward compatible implementations. -type UnimplementedZeropsDaemonProtocolServer struct { -} - -func (UnimplementedZeropsDaemonProtocolServer) StartVpn(context.Context, *StartVpnRequest) (*VpnStatus, error) { - return nil, status.Errorf(codes.Unimplemented, "method StartVpn not implemented") -} -func (UnimplementedZeropsDaemonProtocolServer) StopVpn(context.Context, *StopVpnRequest) (*VpnStatus, error) { - return nil, status.Errorf(codes.Unimplemented, "method StopVpn not implemented") -} -func (UnimplementedZeropsDaemonProtocolServer) StatusVpn(context.Context, *StatusVpnRequest) (*VpnStatus, error) { - return nil, status.Errorf(codes.Unimplemented, "method StatusVpn not implemented") -} -func (UnimplementedZeropsDaemonProtocolServer) mustEmbedUnimplementedZeropsDaemonProtocolServer() {} - -// UnsafeZeropsDaemonProtocolServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to ZeropsDaemonProtocolServer will -// result in compilation errors. -type UnsafeZeropsDaemonProtocolServer interface { - mustEmbedUnimplementedZeropsDaemonProtocolServer() -} - -func RegisterZeropsDaemonProtocolServer(s grpc.ServiceRegistrar, srv ZeropsDaemonProtocolServer) { - s.RegisterService(&ZeropsDaemonProtocol_ServiceDesc, srv) -} - -func _ZeropsDaemonProtocol_StartVpn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(StartVpnRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZeropsDaemonProtocolServer).StartVpn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zeropsDaemonProtocol.ZeropsDaemonProtocol/startVpn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZeropsDaemonProtocolServer).StartVpn(ctx, req.(*StartVpnRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZeropsDaemonProtocol_StopVpn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(StopVpnRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZeropsDaemonProtocolServer).StopVpn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zeropsDaemonProtocol.ZeropsDaemonProtocol/stopVpn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZeropsDaemonProtocolServer).StopVpn(ctx, req.(*StopVpnRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZeropsDaemonProtocol_StatusVpn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(StatusVpnRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZeropsDaemonProtocolServer).StatusVpn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zeropsDaemonProtocol.ZeropsDaemonProtocol/statusVpn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZeropsDaemonProtocolServer).StatusVpn(ctx, req.(*StatusVpnRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// ZeropsDaemonProtocol_ServiceDesc is the grpc.ServiceDesc for ZeropsDaemonProtocol service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var ZeropsDaemonProtocol_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "zeropsDaemonProtocol.ZeropsDaemonProtocol", - HandlerType: (*ZeropsDaemonProtocolServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "startVpn", - Handler: _ZeropsDaemonProtocol_StartVpn_Handler, - }, - { - MethodName: "stopVpn", - Handler: _ZeropsDaemonProtocol_StopVpn_Handler, - }, - { - MethodName: "statusVpn", - Handler: _ZeropsDaemonProtocol_StatusVpn_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "zeropsDaemonProtocol.proto", -} diff --git a/src/proto/errors.go b/src/proto/errors.go deleted file mode 100644 index f480c805..00000000 --- a/src/proto/errors.go +++ /dev/null @@ -1,140 +0,0 @@ -package proto - -import ( - "encoding/json" - "errors" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/vpnproxy" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" -) - -type HandleGrpcErrorOption func(*handleGrpcErrorConfig) - -type handleGrpcErrorConfig struct { - customTimeoutMessage string -} - -type Error struct { - Message string - Meta any -} - -func (e Error) Error() string { - return e.Message -} - -func (e Error) GetMessage() string { - return e.Message -} - -func (e Error) GetMeta() any { - return e.Meta -} - -type errorCode interface { - GetCodeInt() int - GetMeta() []byte - GetMessage() string -} - -type response[E errorCode] interface { - GetError() E -} - -func BusinessError[R response[*zBusinessZeropsApiProtocol.Error]]( - resp R, - err error, - options ...HandleGrpcErrorOption, -) error { - return GrpcError[*zBusinessZeropsApiProtocol.Error](resp, err, options...) -} - -func VpnError[R response[*vpnproxy.Error]]( - resp R, - err error, - options ...HandleGrpcErrorOption, -) error { - return GrpcError[*vpnproxy.Error](resp, err, options...) -} - -func GrpcError[T errorCode, R response[T]]( - resp R, - err error, - options ...HandleGrpcErrorOption, -) error { - config := handleGrpcErrorConfig{ - customTimeoutMessage: i18n.GrpcApiTimeout, - } - for _, o := range options { - o(&config) - } - - if err := handleGrpcError(err, config); err != nil { - return err - } - - noErrorCode := 0 - if resp.GetError().GetCodeInt() != noErrorCode { - zcliErr := Error{ - Message: resp.GetError().GetMessage(), - } - if meta := resp.GetError().GetMeta(); meta != nil { - zcliErr.Meta = json.RawMessage(meta) - } - return zcliErr - } - - return nil -} - -type Err struct { - Msg string - *status.Status -} - -func (e Err) Error() string { - if e.Msg != "" { - return e.Msg - } - return e.Status.Message() -} - -func IsUnauthenticated(err error) bool { - var e Err - if errors.As(err, &e) { - return e.Status.Code() == codes.Unauthenticated - } - return false -} - -func handleGrpcError(err error, config handleGrpcErrorConfig) error { - if err != nil { - if s, ok := status.FromError(err); ok { - err := Err{Status: s} - if s.Code() == codes.DeadlineExceeded { - err.Msg = config.customTimeoutMessage - } - return err - } - } - return nil -} - -func DaemonError( - err error, -) (daemonInstalled bool, _ error) { - if err != nil { - if s, ok := status.FromError(err); ok { - if s.Code() == codes.Unavailable { - return false, nil - } - return true, errors.New(s.Message()) - } - return true, err - } - return true, nil -} diff --git a/src/proto/unary/interceptor.go b/src/proto/unary/interceptor.go deleted file mode 100644 index b1d83f85..00000000 --- a/src/proto/unary/interceptor.go +++ /dev/null @@ -1,40 +0,0 @@ -package unary - -import ( - "context" - "fmt" - "time" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/zeropsio/zcli/src/utils/uuid" - "google.golang.org/grpc/metadata" - - "github.com/zeropsio/zcli/src/support" - - "google.golang.org/grpc" -) - -func TimeoutInterceptor(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { - timeoutCtx, cancel := context.WithTimeout(ctx, time.Second*60) - defer cancel() - return invoker(timeoutCtx, method, req, reply, cc, opts...) -} - -func SupportInterceptor(isInternal func(any) bool) grpc.UnaryClientInterceptor { - return func(ctx context.Context, method string, req, res interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { - supportID, ok := support.GetID(ctx) - if !ok { - supportID = uuid.GetShort() - } - ctx = metadata.AppendToOutgoingContext(ctx, support.Key, supportID) - err := invoker(ctx, method, req, res, cc, opts...) - code := status.Code(err) - if code == codes.Unknown || code == codes.Unavailable || isInternal(res) { - fmt.Println("support id: ", supportID) - return err - } - return err - } -} diff --git a/src/proto/vpnproxy/build-pb b/src/proto/vpnproxy/build-pb deleted file mode 100755 index c6fe0d17..00000000 --- a/src/proto/vpnproxy/build-pb +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -PTYPES=`go list -f '{{ .Dir }}' -m github.com/golang/protobuf` - -protoc \ - -I . \ - -I ${PTYPES}/ptypes \ - --go_out=plugins=grpc,paths=source_relative:. *.proto - -if [ $? -ne 0 ]; then - echo FAIL - exit 1 -fi diff --git a/src/proto/vpnproxy/build-pb-generate.go b/src/proto/vpnproxy/build-pb-generate.go deleted file mode 100644 index e7310a7b..00000000 --- a/src/proto/vpnproxy/build-pb-generate.go +++ /dev/null @@ -1,3 +0,0 @@ -package vpnproxy - -//go:generate gomodrun /bin/bash build-pb diff --git a/src/proto/vpnproxy/client.go b/src/proto/vpnproxy/client.go deleted file mode 100644 index 9d4b9e3a..00000000 --- a/src/proto/vpnproxy/client.go +++ /dev/null @@ -1,25 +0,0 @@ -package vpnproxy - -import ( - "context" - - "github.com/zeropsio/zcli/src/proto/unary" - - "google.golang.org/grpc" -) - -func CreateClient(ctx context.Context, targetAddress string) (_ ZeropsVpnProtocolClient, closeFunc func(), _ error) { - conn, err := grpc.DialContext( - ctx, - targetAddress, - grpc.WithInsecure(), - grpc.WithChainUnaryInterceptor(unary.TimeoutInterceptor, unary.SupportInterceptor(IsInternal)), - ) - if err != nil { - return nil, nil, err - } - - return NewZeropsVpnProtocolClient(conn), func() { - _ = conn.Close() - }, nil -} diff --git a/src/proto/vpnproxy/protocol_extra.go b/src/proto/vpnproxy/protocol_extra.go deleted file mode 100644 index 78a69ed6..00000000 --- a/src/proto/vpnproxy/protocol_extra.go +++ /dev/null @@ -1,60 +0,0 @@ -package vpnproxy - -import ( - "net" - "time" -) - -func FromProtoIP(m *IP) net.IP { - return m.GetAddress() -} - -func ToProtoIP(ip net.IP) *IP { - return &IP{ - Address: ip, - } -} - -func ToProtoIpNet(ipNet *net.IPNet) *IPRange { - return &IPRange{ - Ip: ipNet.IP, - Mask: ipNet.Mask, - } -} - -func ToProtoTimestamp(t time.Time) *Timestamp { - if t.IsZero() { - return &Timestamp{} - } - return &Timestamp{IsSet: true, Seconds: t.Unix(), Nanos: int32(t.Nanosecond())} -} - -func FromProtoTimestamp(t *Timestamp) time.Time { - if !t.GetIsSet() { - return time.Time{} - } - return time.Unix(t.GetSeconds(), int64(t.GetNanos())) -} - -func FromProtoIPRange(m *IPRange) net.IPNet { - return net.IPNet{ - IP: m.GetIp(), - Mask: m.GetMask(), - } -} - -func IsInternal(resp interface{}) bool { - errorGetter, ok := resp.(interface{ GetError() *Error }) - if !ok { - return true - } - return errorGetter.GetError().GetCode() == ErrorCode_INTERNAL_SERVER_ERROR -} - -func (x *Error) GetCodeInt() int { - return int(x.GetCode()) -} - -func (x *Error) GetMeta() []byte { - return nil -} diff --git a/src/proto/vpnproxy/zeropsVpnProtocol.pb.go b/src/proto/vpnproxy/zeropsVpnProtocol.pb.go deleted file mode 100644 index 83e12b29..00000000 --- a/src/proto/vpnproxy/zeropsVpnProtocol.pb.go +++ /dev/null @@ -1,1012 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.23.0 -// protoc v3.7.1 -// source: zeropsVpnProtocol.proto - -package vpnproxy - -import ( - context "context" - proto "github.com/golang/protobuf/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - 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) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -type ErrorCode int32 - -const ( - ErrorCode_NO_ERROR ErrorCode = 0 - ErrorCode_INTERNAL_SERVER_ERROR ErrorCode = 1 - ErrorCode_INSTANCE_NOT_FOUND ErrorCode = 2 - ErrorCode_PROXY_IS_FULL ErrorCode = 3 - ErrorCode_INVALID_ACCESS_TOKEN ErrorCode = 4 - ErrorCode_VPN_SESSION_EXPIRED ErrorCode = 5 - ErrorCode_MAX_PARALLEL_VPN_LIMIT ErrorCode = 6 - ErrorCode_INVALID_PREFERRED_PORT ErrorCode = 7 - ErrorCode_PREFERRED_PORT_UNAVAILABLE ErrorCode = 8 -) - -// Enum value maps for ErrorCode. -var ( - ErrorCode_name = map[int32]string{ - 0: "NO_ERROR", - 1: "INTERNAL_SERVER_ERROR", - 2: "INSTANCE_NOT_FOUND", - 3: "PROXY_IS_FULL", - 4: "INVALID_ACCESS_TOKEN", - 5: "VPN_SESSION_EXPIRED", - 6: "MAX_PARALLEL_VPN_LIMIT", - 7: "INVALID_PREFERRED_PORT", - 8: "PREFERRED_PORT_UNAVAILABLE", - } - ErrorCode_value = map[string]int32{ - "NO_ERROR": 0, - "INTERNAL_SERVER_ERROR": 1, - "INSTANCE_NOT_FOUND": 2, - "PROXY_IS_FULL": 3, - "INVALID_ACCESS_TOKEN": 4, - "VPN_SESSION_EXPIRED": 5, - "MAX_PARALLEL_VPN_LIMIT": 6, - "INVALID_PREFERRED_PORT": 7, - "PREFERRED_PORT_UNAVAILABLE": 8, - } -) - -func (x ErrorCode) Enum() *ErrorCode { - p := new(ErrorCode) - *p = x - return p -} - -func (x ErrorCode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ErrorCode) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsVpnProtocol_proto_enumTypes[0].Descriptor() -} - -func (ErrorCode) Type() protoreflect.EnumType { - return &file_zeropsVpnProtocol_proto_enumTypes[0] -} - -func (x ErrorCode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ErrorCode.Descriptor instead. -func (ErrorCode) EnumDescriptor() ([]byte, []int) { - return file_zeropsVpnProtocol_proto_rawDescGZIP(), []int{0} -} - -type Error struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Code ErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=zeropsVpnProtocol.ErrorCode" json:"code,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *Error) Reset() { - *x = Error{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsVpnProtocol_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Error) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Error) ProtoMessage() {} - -func (x *Error) ProtoReflect() protoreflect.Message { - mi := &file_zeropsVpnProtocol_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 Error.ProtoReflect.Descriptor instead. -func (*Error) Descriptor() ([]byte, []int) { - return file_zeropsVpnProtocol_proto_rawDescGZIP(), []int{0} -} - -func (x *Error) GetCode() ErrorCode { - if x != nil { - return x.Code - } - return ErrorCode_NO_ERROR -} - -func (x *Error) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type IP struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address []byte `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` -} - -func (x *IP) Reset() { - *x = IP{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsVpnProtocol_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IP) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IP) ProtoMessage() {} - -func (x *IP) ProtoReflect() protoreflect.Message { - mi := &file_zeropsVpnProtocol_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 IP.ProtoReflect.Descriptor instead. -func (*IP) Descriptor() ([]byte, []int) { - return file_zeropsVpnProtocol_proto_rawDescGZIP(), []int{1} -} - -func (x *IP) GetAddress() []byte { - if x != nil { - return x.Address - } - return nil -} - -type IPRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ip []byte `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` - Mask []byte `protobuf:"bytes,2,opt,name=mask,proto3" json:"mask,omitempty"` -} - -func (x *IPRange) Reset() { - *x = IPRange{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsVpnProtocol_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IPRange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IPRange) ProtoMessage() {} - -func (x *IPRange) ProtoReflect() protoreflect.Message { - mi := &file_zeropsVpnProtocol_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 IPRange.ProtoReflect.Descriptor instead. -func (*IPRange) Descriptor() ([]byte, []int) { - return file_zeropsVpnProtocol_proto_rawDescGZIP(), []int{2} -} - -func (x *IPRange) GetIp() []byte { - if x != nil { - return x.Ip - } - return nil -} - -func (x *IPRange) GetMask() []byte { - if x != nil { - return x.Mask - } - return nil -} - -type Timestamp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsSet bool `protobuf:"varint,1,opt,name=isSet,proto3" json:"isSet,omitempty"` - Seconds int64 `protobuf:"varint,2,opt,name=seconds,proto3" json:"seconds,omitempty"` - Nanos int32 `protobuf:"varint,3,opt,name=nanos,proto3" json:"nanos,omitempty"` -} - -func (x *Timestamp) Reset() { - *x = Timestamp{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsVpnProtocol_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Timestamp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Timestamp) ProtoMessage() {} - -func (x *Timestamp) ProtoReflect() protoreflect.Message { - mi := &file_zeropsVpnProtocol_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 Timestamp.ProtoReflect.Descriptor instead. -func (*Timestamp) Descriptor() ([]byte, []int) { - return file_zeropsVpnProtocol_proto_rawDescGZIP(), []int{3} -} - -func (x *Timestamp) GetIsSet() bool { - if x != nil { - return x.IsSet - } - return false -} - -func (x *Timestamp) GetSeconds() int64 { - if x != nil { - return x.Seconds - } - return 0 -} - -func (x *Timestamp) GetNanos() int32 { - if x != nil { - return x.Nanos - } - return 0 -} - -type StartVpnRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AccessToken string `protobuf:"bytes,1,opt,name=accessToken,proto3" json:"accessToken,omitempty"` - PreferredPortMin uint32 `protobuf:"varint,2,opt,name=preferredPortMin,proto3" json:"preferredPortMin,omitempty"` - PreferredPortMax uint32 `protobuf:"varint,3,opt,name=preferredPortMax,proto3" json:"preferredPortMax,omitempty"` -} - -func (x *StartVpnRequest) Reset() { - *x = StartVpnRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsVpnProtocol_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartVpnRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartVpnRequest) ProtoMessage() {} - -func (x *StartVpnRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsVpnProtocol_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 StartVpnRequest.ProtoReflect.Descriptor instead. -func (*StartVpnRequest) Descriptor() ([]byte, []int) { - return file_zeropsVpnProtocol_proto_rawDescGZIP(), []int{4} -} - -func (x *StartVpnRequest) GetAccessToken() string { - if x != nil { - return x.AccessToken - } - return "" -} - -func (x *StartVpnRequest) GetPreferredPortMin() uint32 { - if x != nil { - return x.PreferredPortMin - } - return 0 -} - -func (x *StartVpnRequest) GetPreferredPortMax() uint32 { - if x != nil { - return x.PreferredPortMax - } - return 0 -} - -type StartVpnResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Vpn *StartVpnOutDto `protobuf:"bytes,2,opt,name=vpn,proto3" json:"vpn,omitempty"` -} - -func (x *StartVpnResponse) Reset() { - *x = StartVpnResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsVpnProtocol_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartVpnResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartVpnResponse) ProtoMessage() {} - -func (x *StartVpnResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsVpnProtocol_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 StartVpnResponse.ProtoReflect.Descriptor instead. -func (*StartVpnResponse) Descriptor() ([]byte, []int) { - return file_zeropsVpnProtocol_proto_rawDescGZIP(), []int{5} -} - -func (x *StartVpnResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *StartVpnResponse) GetVpn() *StartVpnOutDto { - if x != nil { - return x.Vpn - } - return nil -} - -type StartVpnOutDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Port int64 `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"` - ServerPublicKey string `protobuf:"bytes,2,opt,name=serverPublicKey,proto3" json:"serverPublicKey,omitempty"` - AssignedClientIp *IP `protobuf:"bytes,3,opt,name=assignedClientIp,proto3" json:"assignedClientIp,omitempty"` - ServerIp *IP `protobuf:"bytes,4,opt,name=serverIp,proto3" json:"serverIp,omitempty"` - VpnIpRange *IPRange `protobuf:"bytes,5,opt,name=vpnIpRange,proto3" json:"vpnIpRange,omitempty"` - DnsIp *IP `protobuf:"bytes,6,opt,name=dnsIp,proto3" json:"dnsIp,omitempty"` -} - -func (x *StartVpnOutDto) Reset() { - *x = StartVpnOutDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsVpnProtocol_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartVpnOutDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartVpnOutDto) ProtoMessage() {} - -func (x *StartVpnOutDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsVpnProtocol_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 StartVpnOutDto.ProtoReflect.Descriptor instead. -func (*StartVpnOutDto) Descriptor() ([]byte, []int) { - return file_zeropsVpnProtocol_proto_rawDescGZIP(), []int{6} -} - -func (x *StartVpnOutDto) GetPort() int64 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *StartVpnOutDto) GetServerPublicKey() string { - if x != nil { - return x.ServerPublicKey - } - return "" -} - -func (x *StartVpnOutDto) GetAssignedClientIp() *IP { - if x != nil { - return x.AssignedClientIp - } - return nil -} - -func (x *StartVpnOutDto) GetServerIp() *IP { - if x != nil { - return x.ServerIp - } - return nil -} - -func (x *StartVpnOutDto) GetVpnIpRange() *IPRange { - if x != nil { - return x.VpnIpRange - } - return nil -} - -func (x *StartVpnOutDto) GetDnsIp() *IP { - if x != nil { - return x.DnsIp - } - return nil -} - -type ProlongVpnRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AccessToken string `protobuf:"bytes,1,opt,name=accessToken,proto3" json:"accessToken,omitempty"` -} - -func (x *ProlongVpnRequest) Reset() { - *x = ProlongVpnRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsVpnProtocol_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ProlongVpnRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProlongVpnRequest) ProtoMessage() {} - -func (x *ProlongVpnRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsVpnProtocol_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 ProlongVpnRequest.ProtoReflect.Descriptor instead. -func (*ProlongVpnRequest) Descriptor() ([]byte, []int) { - return file_zeropsVpnProtocol_proto_rawDescGZIP(), []int{7} -} - -func (x *ProlongVpnRequest) GetAccessToken() string { - if x != nil { - return x.AccessToken - } - return "" -} - -type ProlongVpnResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *ProlongVpnResponse) Reset() { - *x = ProlongVpnResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsVpnProtocol_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ProlongVpnResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProlongVpnResponse) ProtoMessage() {} - -func (x *ProlongVpnResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsVpnProtocol_proto_msgTypes[8] - 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 ProlongVpnResponse.ProtoReflect.Descriptor instead. -func (*ProlongVpnResponse) Descriptor() ([]byte, []int) { - return file_zeropsVpnProtocol_proto_rawDescGZIP(), []int{8} -} - -func (x *ProlongVpnResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -var File_zeropsVpnProtocol_proto protoreflect.FileDescriptor - -var file_zeropsVpnProtocol_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x7a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x56, 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x53, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x30, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, 0x70, 0x6e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x1e, 0x0a, 0x02, 0x49, 0x50, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x22, 0x2d, 0x0a, 0x07, 0x49, 0x50, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x70, 0x12, 0x12, 0x0a, 0x04, - 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x6b, - 0x22, 0x51, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, - 0x05, 0x69, 0x73, 0x53, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, - 0x53, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x61, - 0x6e, 0x6f, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x56, 0x70, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x72, 0x65, - 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x69, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x10, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x6f, - 0x72, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, - 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x10, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x61, - 0x78, 0x22, 0x77, 0x0a, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, 0x70, 0x6e, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x03, 0x76, 0x70, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, 0x70, 0x6e, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x56, 0x70, 0x6e, 0x4f, - 0x75, 0x74, 0x44, 0x74, 0x6f, 0x52, 0x03, 0x76, 0x70, 0x6e, 0x22, 0xad, 0x02, 0x0a, 0x0e, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x56, 0x70, 0x6e, 0x4f, 0x75, 0x74, 0x44, 0x74, 0x6f, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x6f, 0x72, - 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x10, 0x61, - 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, 0x70, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x50, 0x52, 0x10, 0x61, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x70, 0x12, 0x31, - 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x50, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, - 0x70, 0x12, 0x3a, 0x0a, 0x0a, 0x76, 0x70, 0x6e, 0x49, 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, 0x70, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x50, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x52, 0x0a, 0x76, 0x70, 0x6e, 0x49, 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2b, 0x0a, - 0x05, 0x64, 0x6e, 0x73, 0x49, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x7a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x49, 0x50, 0x52, 0x05, 0x64, 0x6e, 0x73, 0x49, 0x70, 0x22, 0x35, 0x0a, 0x11, 0x70, 0x72, - 0x6f, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x22, 0x44, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x70, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, - 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2a, 0xea, 0x01, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x5f, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x16, - 0x0a, 0x12, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, - 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x5f, - 0x49, 0x53, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x4f, 0x4b, 0x45, - 0x4e, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x50, 0x4e, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1a, 0x0a, 0x16, - 0x4d, 0x41, 0x58, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4c, 0x4c, 0x45, 0x4c, 0x5f, 0x56, 0x50, 0x4e, - 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x06, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x56, 0x41, - 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x45, 0x52, 0x52, 0x45, 0x44, 0x5f, 0x50, 0x4f, - 0x52, 0x54, 0x10, 0x07, 0x12, 0x1e, 0x0a, 0x1a, 0x50, 0x52, 0x45, 0x46, 0x45, 0x52, 0x52, 0x45, - 0x44, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, - 0x4c, 0x45, 0x10, 0x08, 0x32, 0xc3, 0x01, 0x0a, 0x11, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, - 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x53, 0x0a, 0x08, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x56, 0x70, 0x6e, 0x12, 0x22, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, - 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x7a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x56, 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x59, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x70, 0x6e, 0x12, 0x24, 0x2e, - 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x6c, 0x6f, 0x6e, 0x67, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x56, 0x70, 0x6e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x6c, 0x6f, 0x6e, 0x67, 0x56, - 0x70, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x2d, - 0x69, 0x6f, 0x2f, 0x7a, 0x63, 0x6c, 0x69, 0x2f, 0x73, 0x72, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x76, 0x70, 0x6e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_zeropsVpnProtocol_proto_rawDescOnce sync.Once - file_zeropsVpnProtocol_proto_rawDescData = file_zeropsVpnProtocol_proto_rawDesc -) - -func file_zeropsVpnProtocol_proto_rawDescGZIP() []byte { - file_zeropsVpnProtocol_proto_rawDescOnce.Do(func() { - file_zeropsVpnProtocol_proto_rawDescData = protoimpl.X.CompressGZIP(file_zeropsVpnProtocol_proto_rawDescData) - }) - return file_zeropsVpnProtocol_proto_rawDescData -} - -var file_zeropsVpnProtocol_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_zeropsVpnProtocol_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_zeropsVpnProtocol_proto_goTypes = []interface{}{ - (ErrorCode)(0), // 0: zeropsVpnProtocol.errorCode - (*Error)(nil), // 1: zeropsVpnProtocol.error - (*IP)(nil), // 2: zeropsVpnProtocol.IP - (*IPRange)(nil), // 3: zeropsVpnProtocol.IPRange - (*Timestamp)(nil), // 4: zeropsVpnProtocol.Timestamp - (*StartVpnRequest)(nil), // 5: zeropsVpnProtocol.startVpnRequest - (*StartVpnResponse)(nil), // 6: zeropsVpnProtocol.startVpnResponse - (*StartVpnOutDto)(nil), // 7: zeropsVpnProtocol.startVpnOutDto - (*ProlongVpnRequest)(nil), // 8: zeropsVpnProtocol.prolongVpnRequest - (*ProlongVpnResponse)(nil), // 9: zeropsVpnProtocol.prolongVpnResponse -} -var file_zeropsVpnProtocol_proto_depIdxs = []int32{ - 0, // 0: zeropsVpnProtocol.error.code:type_name -> zeropsVpnProtocol.errorCode - 1, // 1: zeropsVpnProtocol.startVpnResponse.error:type_name -> zeropsVpnProtocol.error - 7, // 2: zeropsVpnProtocol.startVpnResponse.vpn:type_name -> zeropsVpnProtocol.startVpnOutDto - 2, // 3: zeropsVpnProtocol.startVpnOutDto.assignedClientIp:type_name -> zeropsVpnProtocol.IP - 2, // 4: zeropsVpnProtocol.startVpnOutDto.serverIp:type_name -> zeropsVpnProtocol.IP - 3, // 5: zeropsVpnProtocol.startVpnOutDto.vpnIpRange:type_name -> zeropsVpnProtocol.IPRange - 2, // 6: zeropsVpnProtocol.startVpnOutDto.dnsIp:type_name -> zeropsVpnProtocol.IP - 1, // 7: zeropsVpnProtocol.prolongVpnResponse.error:type_name -> zeropsVpnProtocol.error - 5, // 8: zeropsVpnProtocol.ZeropsVpnProtocol.startVpn:input_type -> zeropsVpnProtocol.startVpnRequest - 8, // 9: zeropsVpnProtocol.ZeropsVpnProtocol.prolongVpn:input_type -> zeropsVpnProtocol.prolongVpnRequest - 6, // 10: zeropsVpnProtocol.ZeropsVpnProtocol.startVpn:output_type -> zeropsVpnProtocol.startVpnResponse - 9, // 11: zeropsVpnProtocol.ZeropsVpnProtocol.prolongVpn:output_type -> zeropsVpnProtocol.prolongVpnResponse - 10, // [10:12] is the sub-list for method output_type - 8, // [8:10] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name -} - -func init() { file_zeropsVpnProtocol_proto_init() } -func file_zeropsVpnProtocol_proto_init() { - if File_zeropsVpnProtocol_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_zeropsVpnProtocol_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Error); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsVpnProtocol_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IP); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsVpnProtocol_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IPRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsVpnProtocol_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Timestamp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsVpnProtocol_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartVpnRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsVpnProtocol_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartVpnResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsVpnProtocol_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartVpnOutDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsVpnProtocol_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProlongVpnRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsVpnProtocol_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProlongVpnResponse); 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_zeropsVpnProtocol_proto_rawDesc, - NumEnums: 1, - NumMessages: 9, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_zeropsVpnProtocol_proto_goTypes, - DependencyIndexes: file_zeropsVpnProtocol_proto_depIdxs, - EnumInfos: file_zeropsVpnProtocol_proto_enumTypes, - MessageInfos: file_zeropsVpnProtocol_proto_msgTypes, - }.Build() - File_zeropsVpnProtocol_proto = out.File - file_zeropsVpnProtocol_proto_rawDesc = nil - file_zeropsVpnProtocol_proto_goTypes = nil - file_zeropsVpnProtocol_proto_depIdxs = nil -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConnInterface - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion6 - -// ZeropsVpnProtocolClient is the client API for ZeropsVpnProtocol service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type ZeropsVpnProtocolClient interface { - StartVpn(ctx context.Context, in *StartVpnRequest, opts ...grpc.CallOption) (*StartVpnResponse, error) - ProlongVpn(ctx context.Context, in *ProlongVpnRequest, opts ...grpc.CallOption) (*ProlongVpnResponse, error) -} - -type zeropsVpnProtocolClient struct { - cc grpc.ClientConnInterface -} - -func NewZeropsVpnProtocolClient(cc grpc.ClientConnInterface) ZeropsVpnProtocolClient { - return &zeropsVpnProtocolClient{cc} -} - -func (c *zeropsVpnProtocolClient) StartVpn(ctx context.Context, in *StartVpnRequest, opts ...grpc.CallOption) (*StartVpnResponse, error) { - out := new(StartVpnResponse) - err := c.cc.Invoke(ctx, "/zeropsVpnProtocol.ZeropsVpnProtocol/startVpn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zeropsVpnProtocolClient) ProlongVpn(ctx context.Context, in *ProlongVpnRequest, opts ...grpc.CallOption) (*ProlongVpnResponse, error) { - out := new(ProlongVpnResponse) - err := c.cc.Invoke(ctx, "/zeropsVpnProtocol.ZeropsVpnProtocol/prolongVpn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// ZeropsVpnProtocolServer is the server API for ZeropsVpnProtocol service. -type ZeropsVpnProtocolServer interface { - StartVpn(context.Context, *StartVpnRequest) (*StartVpnResponse, error) - ProlongVpn(context.Context, *ProlongVpnRequest) (*ProlongVpnResponse, error) -} - -// UnimplementedZeropsVpnProtocolServer can be embedded to have forward compatible implementations. -type UnimplementedZeropsVpnProtocolServer struct { -} - -func (*UnimplementedZeropsVpnProtocolServer) StartVpn(context.Context, *StartVpnRequest) (*StartVpnResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method StartVpn not implemented") -} -func (*UnimplementedZeropsVpnProtocolServer) ProlongVpn(context.Context, *ProlongVpnRequest) (*ProlongVpnResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProlongVpn not implemented") -} - -func RegisterZeropsVpnProtocolServer(s *grpc.Server, srv ZeropsVpnProtocolServer) { - s.RegisterService(&_ZeropsVpnProtocol_serviceDesc, srv) -} - -func _ZeropsVpnProtocol_StartVpn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(StartVpnRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZeropsVpnProtocolServer).StartVpn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zeropsVpnProtocol.ZeropsVpnProtocol/StartVpn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZeropsVpnProtocolServer).StartVpn(ctx, req.(*StartVpnRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZeropsVpnProtocol_ProlongVpn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ProlongVpnRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZeropsVpnProtocolServer).ProlongVpn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zeropsVpnProtocol.ZeropsVpnProtocol/ProlongVpn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZeropsVpnProtocolServer).ProlongVpn(ctx, req.(*ProlongVpnRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _ZeropsVpnProtocol_serviceDesc = grpc.ServiceDesc{ - ServiceName: "zeropsVpnProtocol.ZeropsVpnProtocol", - HandlerType: (*ZeropsVpnProtocolServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "startVpn", - Handler: _ZeropsVpnProtocol_StartVpn_Handler, - }, - { - MethodName: "prolongVpn", - Handler: _ZeropsVpnProtocol_ProlongVpn_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "zeropsVpnProtocol.proto", -} diff --git a/src/proto/vpnproxy/zeropsVpnProtocol.proto b/src/proto/vpnproxy/zeropsVpnProtocol.proto deleted file mode 100644 index 9ff825dc..00000000 --- a/src/proto/vpnproxy/zeropsVpnProtocol.proto +++ /dev/null @@ -1,70 +0,0 @@ -syntax = "proto3"; - -option go_package = "github.com/zeropsio/zcli/src/protocol/vpnproxy"; - -package zeropsVpnProtocol; - -service ZeropsVpnProtocol { - rpc startVpn (startVpnRequest) returns (startVpnResponse); - rpc prolongVpn (prolongVpnRequest) returns (prolongVpnResponse); -} - -message error { - errorCode code = 1; - string message = 2; -} - -enum errorCode { - NO_ERROR = 0; - INTERNAL_SERVER_ERROR = 1; - INSTANCE_NOT_FOUND = 2; - PROXY_IS_FULL = 3; - INVALID_ACCESS_TOKEN = 4; - VPN_SESSION_EXPIRED = 5; - MAX_PARALLEL_VPN_LIMIT = 6; - INVALID_PREFERRED_PORT = 7; - PREFERRED_PORT_UNAVAILABLE = 8; -} - -message IP { - bytes address = 1; -} - -message IPRange { - bytes ip = 1; - bytes mask = 2; -} - -message Timestamp { - bool isSet = 1; - int64 seconds = 2; - int32 nanos = 3; -} - -message startVpnRequest { - string accessToken = 1; - uint32 preferredPortMin = 2; - uint32 preferredPortMax = 3; -} - -message startVpnResponse { - error error = 1; - startVpnOutDto vpn = 2; -} - -message startVpnOutDto { - int64 port = 1; - string serverPublicKey = 2; - IP assignedClientIp = 3; - IP serverIp = 4; - IPRange vpnIpRange = 5; - IP dnsIp = 6; -} - -message prolongVpnRequest { - string accessToken = 1; -} - -message prolongVpnResponse { - error error = 1; -} diff --git a/src/proto/zBusinessZeropsApiProtocol/build-pb b/src/proto/zBusinessZeropsApiProtocol/build-pb deleted file mode 100755 index 362d771c..00000000 --- a/src/proto/zBusinessZeropsApiProtocol/build-pb +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -protoc \ - -I . \ - -I ../../../include/ \ - --go_opt=paths=source_relative \ - --go_out=paths=source_relative:. \ - --go-grpc_out=paths=source_relative:. \ - *.proto - -if [ $? -ne 0 ]; then - echo FAIL - exit 1 -fi diff --git a/src/proto/zBusinessZeropsApiProtocol/build-pb-generate.go b/src/proto/zBusinessZeropsApiProtocol/build-pb-generate.go deleted file mode 100644 index ff7030c1..00000000 --- a/src/proto/zBusinessZeropsApiProtocol/build-pb-generate.go +++ /dev/null @@ -1,3 +0,0 @@ -package zBusinessZeropsApiProtocol - -//go:generate gomodrun /bin/bash build-pb diff --git a/src/proto/zBusinessZeropsApiProtocol/client.go b/src/proto/zBusinessZeropsApiProtocol/client.go deleted file mode 100644 index 19d3af98..00000000 --- a/src/proto/zBusinessZeropsApiProtocol/client.go +++ /dev/null @@ -1,100 +0,0 @@ -package zBusinessZeropsApiProtocol - -import ( - "context" - "crypto/x509" - "fmt" - "io/ioutil" - "net/http" - "strings" - - "golang.org/x/oauth2" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" - "google.golang.org/grpc/credentials/oauth" - "google.golang.org/grpc/security/advancedtls" - - "github.com/zeropsio/zcli/src/proto/unary" -) - -type Config struct { - CaCertificateUrl string -} - -type Handler struct { - config Config -} - -func New( - config Config, -) *Handler { - return &Handler{ - config: config, - } -} - -func (h *Handler) CreateClient(ctx context.Context, grpcApiAddress string, token string) (_ ZBusinessZeropsApiProtocolClient, closeFunc func(), err error) { - tlsCreds, err := h.createTLSCredentials() - if err != nil { - return nil, nil, err - } - connection, err := grpc.DialContext( - ctx, - grpcApiAddress, - grpc.WithPerRPCCredentials(h.createBearerCredentials(token)), - grpc.WithTransportCredentials(tlsCreds), - grpc.WithChainUnaryInterceptor(unary.TimeoutInterceptor, unary.SupportInterceptor(IsInternal)), - ) - - if err != nil { - return - } - - closeFunc = func() { _ = connection.Close() } - - return NewZBusinessZeropsApiProtocolClient(connection), closeFunc, nil - -} - -const serverNamePrefix = "zbusinessapi" - -func verifyPeerServerName(p *advancedtls.VerificationFuncParams) (*advancedtls.VerificationResults, error) { - if p.Leaf == nil { - return nil, fmt.Errorf("missing leaf certificate") - } - for _, name := range p.Leaf.DNSNames { - if strings.HasPrefix(name, serverNamePrefix) { - return &advancedtls.VerificationResults{}, nil - } - } - return nil, fmt.Errorf("certificate is valid for prefix %s, got %s", serverNamePrefix, p.Leaf.DNSNames) -} - -func (h *Handler) createBearerCredentials(token string) credentials.PerRPCCredentials { - return oauth.NewOauthAccess(&oauth2.Token{AccessToken: token, TokenType: "Bearer"}) -} - -func (h *Handler) createTLSCredentials() (credentials.TransportCredentials, error) { - resp, err := http.Get(h.config.CaCertificateUrl) - if err != nil { - return nil, fmt.Errorf("get caCertificate => %s", err.Error()) - } - defer resp.Body.Close() - caCertBytes, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, fmt.Errorf("read caCertificate response => %s", err.Error()) - } - - certPool := x509.NewCertPool() - if !certPool.AppendCertsFromPEM(caCertBytes) { - return nil, fmt.Errorf("failed to add server CA certificate") - } - - return advancedtls.NewClientCreds(&advancedtls.ClientOptions{ - RootOptions: advancedtls.RootCertificateOptions{ - RootCACerts: certPool, - }, - VerifyPeer: verifyPeerServerName, - VType: advancedtls.CertVerification, - }) -} diff --git a/src/proto/zBusinessZeropsApiProtocol/protocol_extra.go b/src/proto/zBusinessZeropsApiProtocol/protocol_extra.go deleted file mode 100644 index c2af2266..00000000 --- a/src/proto/zBusinessZeropsApiProtocol/protocol_extra.go +++ /dev/null @@ -1,31 +0,0 @@ -package zBusinessZeropsApiProtocol - -import ( - "time" -) - -func ToProtoTimestamp(t time.Time) *Timestamp { - if t.IsZero() { - return &Timestamp{} - } - return &Timestamp{IsSet: true, Seconds: t.Unix(), Nanos: int32(t.Nanosecond())} -} - -func FromProtoTimestamp(t *Timestamp) time.Time { - if !t.GetIsSet() { - return time.Time{} - } - return time.Unix(t.GetSeconds(), int64(t.GetNanos())) -} - -func IsInternal(resp interface{}) bool { - errorGetter, ok := resp.(interface{ GetError() *Error }) - if !ok { - return true - } - return errorGetter.GetError().GetCode() == ErrorCode_INTERNAL_SERVER_ERROR -} - -func (x *Error) GetCodeInt() int { - return int(x.GetCode()) -} diff --git a/src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol.pb.go b/src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol.pb.go deleted file mode 100644 index 96072c1c..00000000 --- a/src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol.pb.go +++ /dev/null @@ -1,17302 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.1 -// protoc v3.21.3 -// source: zeropsApiProtocol.proto - -package zBusinessZeropsApiProtocol - -import ( - reflect "reflect" - sync "sync" - - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" -) - -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 ErrorCode int32 - -const ( - ErrorCode_NO_ERROR ErrorCode = 0 - ErrorCode_INTERNAL_SERVER_ERROR ErrorCode = 1 - ErrorCode_NOT_FOUND ErrorCode = 326 - ErrorCode_INVALID_USER_INPUT ErrorCode = 2 - ErrorCode_INVALID_USER_INPUT_WITH_TEXT ErrorCode = 3 - ErrorCode_NOT_AUTHORIZED ErrorCode = 4 - ErrorCode_INSUFFICIENT_PRIVILEGES ErrorCode = 5 - ErrorCode_REFRESH_TOKEN_INVALID ErrorCode = 6 - ErrorCode_ENDPOINT_NOT_FOUND ErrorCode = 7 - ErrorCode_POTENTIALLY_FRAUD_BEHAVIOR_DETECTED ErrorCode = 8 - ErrorCode_RE_CAPTCHA_RESPONSE_INVALID ErrorCode = 9 - ErrorCode_DOWNLOAD_TOKEN_INVALID_OR_EXPIRED ErrorCode = 10 - ErrorCode_INCORRECT_USER_CREDENTIALS ErrorCode = 11 - ErrorCode_NO_RIGHTS_TO_SELECTED_ACTION ErrorCode = 12 - ErrorCode_FILE_SIZE_LIMIT_EXCEEDED ErrorCode = 13 - ErrorCode_ADDITIONAL_VERIFICATION_FAILED ErrorCode = 14 - ErrorCode_AT_LEAST_ONE_MANAGER ErrorCode = 191 - ErrorCode_ACTIVE_USER_MUST_BE_CONNECTED_TO_AT_LEAST_ONE_CLIENT ErrorCode = 15 - ErrorCode_INVALID_CREDENTIALS ErrorCode = 16 - ErrorCode_PASSWORD_TOO_SHORT ErrorCode = 270 - ErrorCode_PASSWORD_TOO_LONG ErrorCode = 269 - ErrorCode_NO_ACTIVE_CONNECTION_TO_ANY_CLIENT ErrorCode = 18 - ErrorCode_NO_ACTIVE_CONNECTION_TO_CURRENT_CLIENT ErrorCode = 19 - ErrorCode_TOKEN_EXPIRED ErrorCode = 20 - ErrorCode_CLIENT_NOT_FOUND ErrorCode = 21 - ErrorCode_NO_ACCESS_TO_ZEROPS ErrorCode = 22 - ErrorCode_USER_NOT_FOUND ErrorCode = 23 - ErrorCode_INVALID_DOCUMENT_ROOT ErrorCode = 24 - ErrorCode_INVALID_ENTRYPOINT ErrorCode = 25 - ErrorCode_INVALID_INIT_COMMANDS ErrorCode = 280 - ErrorCode_DOWNLOAD_EXPIRED ErrorCode = 26 - ErrorCode_MULTIPLE_ACCOUNTS_CONNECTED ErrorCode = 334 - ErrorCode_USER_DATA_NOT_FOUND ErrorCode = 27 - ErrorCode_USER_DATA_KEY_INVALID ErrorCode = 28 - ErrorCode_USER_DATA_CONTENT_INVALID ErrorCode = 29 - ErrorCode_USER_DATA_USE_OF_SYSTEM_KEY ErrorCode = 180 - ErrorCode_USER_DATA_DELETE_FORBIDDEN ErrorCode = 30 - ErrorCode_USER_DATA_DUPLICATE_KEY ErrorCode = 31 - ErrorCode_USER_DATA_SYNC_RUNNING ErrorCode = 32 - ErrorCode_USER_DATA_VERSION_MISMATCH ErrorCode = 168 - ErrorCode_USER_TOKEN_NOT_FOUND ErrorCode = 227 - ErrorCode_USER_ACCOUNT_NOT_FOUND ErrorCode = 34 - ErrorCode_TEMPLATE_NOT_FOUND ErrorCode = 35 - ErrorCode_COUNTRY_CALLING_CODE_DOES_NOT_MATCH_PHONE_NUMBER ErrorCode = 36 - ErrorCode_INVALID_PHONE_NUMBER ErrorCode = 37 - ErrorCode_INVALID_USER_ROLE ErrorCode = 38 - ErrorCode_INVALID_CLIENT_USER_GROUP_COMBINATION ErrorCode = 39 - ErrorCode_EMAIL_EXISTS ErrorCode = 40 - ErrorCode_USER_ALREADY_CONNECTED_TO_COMPANY ErrorCode = 41 - ErrorCode_COUNTRY_NOT_FOUND ErrorCode = 42 - ErrorCode_RECORD_NOT_FOUND ErrorCode = 43 - ErrorCode_MAXIMUM_NUMBER_OF_CLIENT_EXCEEDED ErrorCode = 44 - ErrorCode_USER_IS_NOT_IN_BEING_DELETED_STATUS ErrorCode = 45 - ErrorCode_UNABLE_TO_DELETE_YOUR_OWN_ACCOUNT ErrorCode = 46 - ErrorCode_CLIENT_USER_CONNECTION_NOT_FOUND ErrorCode = 47 - ErrorCode_CLIENT_USER_CONNECTION_HAS_BEEN_DELETED ErrorCode = 48 - ErrorCode_BAD_OR_EXPIRED_ACTIVATION_LINK ErrorCode = 49 - ErrorCode_UNABLE_TO_EDIT_DELETED_USER ErrorCode = 50 - ErrorCode_CLIENT_USER_ALREADY_BEEN_DELETED ErrorCode = 51 - ErrorCode_LANGUAGE_NOT_FOUND ErrorCode = 52 - ErrorCode_LANGUAGE_NOT_SUPPORTED ErrorCode = 53 - ErrorCode_DUPLICATED_USER ErrorCode = 54 - ErrorCode_RECORD_IS_READ_ONLY ErrorCode = 55 - ErrorCode_RECORD_IS_DELETED ErrorCode = 56 - ErrorCode_RECORD_COMMON_KEY_EDIT ErrorCode = 57 - ErrorCode_SERVICE_STACK_NOT_FOUND ErrorCode = 61 - ErrorCode_SERVICE_STACK_TYPE_NOT_FOUND ErrorCode = 62 - ErrorCode_SERVICE_STACK_TYPE_VERSION_NOT_FOUND ErrorCode = 63 - ErrorCode_SERVICE_STACK_TYPE_VERSION_IS_NOT_ACTIVE ErrorCode = 64 - ErrorCode_SERVICE_STACK_TYPE_VERSION_REMOVE_DEFAULT ErrorCode = 65 - ErrorCode_SERVICE_STACK_TYPE_INVALID_VERSION ErrorCode = 66 - ErrorCode_SERVICE_STACK_IS_FAILED ErrorCode = 67 - ErrorCode_SERVICE_STACK_IS_SYSTEM_NOT_SUPPORTED ErrorCode = 68 - ErrorCode_SERVICE_STACK_CUSTOM_PORTS_ENABLED_REQUIRED ErrorCode = 69 - ErrorCode_SERVICE_STACK_TYPE_VERSION_NOT_MATCH_WITH_STACK_TYPE ErrorCode = 70 - ErrorCode_SERVICE_STACK_STORAGE_DISK_MAX_LIMIT ErrorCode = 71 - ErrorCode_SERVICE_STACK_STORAGE_DISK_MIN_LIMIT ErrorCode = 72 - ErrorCode_SERVICE_STACK_OBJECT_STORAGE_QUOTA_NOT_FOUND ErrorCode = 73 - ErrorCode_SERVICE_STACK_INIT_COMMANDS_NOT_FOUND ErrorCode = 281 - ErrorCode_SERVICE_STACK_TYPE_OBJECT_STORAGE_REQUIRED ErrorCode = 74 - ErrorCode_SERVICE_STACK_TYPE_OBJECT_STORAGE_FORBIDDEN ErrorCode = 75 - ErrorCode_SERVICE_STACK_TYPE_SHARED_STORAGE_FORBIDDEN ErrorCode = 76 - ErrorCode_SERVICE_STACK_TYPE_STANDARD_FORBIDDEN ErrorCode = 242 - ErrorCode_SERVICE_STACK_IS_READY_TO_DEPLOY ErrorCode = 77 - ErrorCode_SERVICE_STACK_IS_NOT_HTTP ErrorCode = 78 - ErrorCode_SERVICE_STACK_RELOAD_NOT_AVAILABLE ErrorCode = 79 - ErrorCode_SERVICE_STACK_NGINX_CONFIG ErrorCode = 194 - ErrorCode_SERVICE_STACK_SUBDOMAIN_ACCESS_ALREADY_DISABLED ErrorCode = 81 - ErrorCode_SERVICE_STACK_CREATING ErrorCode = 178 - ErrorCode_SERVICE_STACK_UPGRADING ErrorCode = 179 - ErrorCode_SERVICE_STACK_INVALID_CATEGORY ErrorCode = 203 - ErrorCode_SERVICE_STACK_STATUS_NOT_SUPPORTED ErrorCode = 265 - ErrorCode_SERVICE_STACK_USER_NAME_INVALID ErrorCode = 282 - ErrorCode_ACTIVE_SERVICE_STACK_REQUIRED ErrorCode = 283 - ErrorCode_USER_APPLICATION_RUNTIME_SERVICE_STACK_REQUIRED ErrorCode = 284 - ErrorCode_SHARED_STORAGE_NONEMPTY_CONNECTED_STACKS_FORBIDDEN ErrorCode = 329 - ErrorCode_SHARED_STORAGE_SERVICE_STACK_INACTIVE ErrorCode = 328 - ErrorCode_PROCESS_NOT_FOUND ErrorCode = 82 - ErrorCode_PROCESS_IS_ALREADY_OVER ErrorCode = 83 - ErrorCode_PROCESS_IS_ALREADY_RUNNING ErrorCode = 85 - ErrorCode_UNABLE_TO_CREATE_PROCESS ErrorCode = 87 - ErrorCode_CREATE_PROCESS_QUEUED_PROJECT_PROCESS_COUNT_EXCEEDED ErrorCode = 323 - ErrorCode_MANUAL_REPAIR_REQUIRED ErrorCode = 59 - ErrorCode_NOTHING_TO_SYNC ErrorCode = 60 - ErrorCode_IS_NOT_POSSIBLE_TO_EDIT_ANOTHER_USER ErrorCode = 58 - ErrorCode_ACTIVE_SERVICE_STACK_EXISTS_IN_PROJECT ErrorCode = 88 - ErrorCode_INVALID_OLD_PASSWORD ErrorCode = 89 - ErrorCode_PROJECT_STATUS_NOT_SUPPORTED ErrorCode = 90 - ErrorCode_PROJECT_NOT_FOUND ErrorCode = 91 - ErrorCode_PROJECT_IS_NOT_ACTIVE ErrorCode = 167 - ErrorCode_SERVICE_STACK_NAME_UNAVAILABLE ErrorCode = 92 - ErrorCode_SERVICE_STACK_NAME_INVALID ErrorCode = 93 - ErrorCode_CORE_SERVICE_STACK_TYPE_VERSION_NOT_FOUND ErrorCode = 94 - ErrorCode_L7_HTTP_BALANCER_SERVICE_STACK_TYPE_VERSION_NOT_FOUND ErrorCode = 95 - ErrorCode_PROJECT_WILL_BE_DELETED ErrorCode = 96 - ErrorCode_PROJECT_WILL_BE_STARTED ErrorCode = 256 - ErrorCode_PROJECT_WILL_BE_STOPPED ErrorCode = 257 - ErrorCode_STACK_WILL_BE_DELETED ErrorCode = 97 - ErrorCode_STACK_OF_PROJECT_WILL_BE_DELETED ErrorCode = 286 - ErrorCode_STACK_OF_PROJECT_WILL_BE_CREATED ErrorCode = 287 - ErrorCode_USER_DATA_OF_PROJECT_WILL_BE_SYNCED ErrorCode = 288 - ErrorCode_PUBLIC_HTTP_ROUTING_NOT_FOUND ErrorCode = 98 - ErrorCode_PUBLIC_HTTP_ROUTING_AT_LEAST_ONE_DOMAIN_REQUIRED ErrorCode = 99 - ErrorCode_PUBLIC_HTTP_ROUTING_DUPLICATE_DOMAIN_NAME ErrorCode = 100 - ErrorCode_PUBLIC_HTTP_ROUTING_DUPLICATE_FALLBACK ErrorCode = 101 - ErrorCode_PUBLIC_HTTP_ROUTING_DUPLICATE_DOMAIN_NAME_IN_ANOTHER_ROUTING ErrorCode = 102 - ErrorCode_PUBLIC_HTTP_ROUTING_DUPLICATE_FALLBACK_IN_ANOTHER_ROUTING ErrorCode = 103 - ErrorCode_PUBLIC_HTTP_ROUTING_DUPLICATE_LOCATION_PATHS ErrorCode = 104 - ErrorCode_PUBLIC_HTTP_ROUTING_ITEMS_LIMIT ErrorCode = 105 - ErrorCode_PUBLIC_HTTP_ROUTING_LOCATIONS_LIMIT ErrorCode = 106 - ErrorCode_PUBLIC_HTTP_ROUTING_DOMAINS_LIMIT ErrorCode = 107 - ErrorCode_PUBLIC_HTTP_ROUTING_INVALID_DOMAIN_NAME_FQDN ErrorCode = 108 - ErrorCode_PUBLIC_HTTP_ROUTING_SSL_FALLBACK ErrorCode = 109 - ErrorCode_PUBLIC_HTTP_ROUTING_LOCATION_DOES_NOT_FOUND ErrorCode = 110 - ErrorCode_PUBLIC_HTTP_ROUTING_INVALID_LOCATIONS_PREFIX ErrorCode = 111 - ErrorCode_PUBLIC_HTTP_ROUTING_MULTIPLE_SERVICE_STACK_ACCESS_POINTS ErrorCode = 112 - ErrorCode_PUBLIC_HTTP_ROUTING_SERVICE_STACK_ACCESS_POINT_NOT_FOUND ErrorCode = 113 - ErrorCode_PUBLIC_HTTP_ROUTING_REQUEST_ONLY_TCP_PORT ErrorCode = 114 - ErrorCode_PUBLIC_HTTP_ROUTING_SERVICE_STACK_DOES_NOT_SUPPORT_HTTP ErrorCode = 115 - ErrorCode_PUBLIC_HTTP_ROUTING_FORBIDDEN_ZEROPS_SUBDOMAIN_SUFFIX ErrorCode = 327 - ErrorCode_NO_PUBLIC_HTTP_ROUTING_IN_L7_HTTP_BALANCING ErrorCode = 116 - ErrorCode_SSL_NOT_SUPPORTED ErrorCode = 117 - ErrorCode_REGISTERED_DOMAIN_HOST_LIMIT_REACHED ErrorCode = 118 - ErrorCode_PUBLIC_SUFFIX_LIST_CONTROL_FAILED ErrorCode = 119 - ErrorCode_PORT_NOT_SUPPORTED ErrorCode = 120 - ErrorCode_PUBLIC_HTTP_ROUTING_SYNC_RUNNING ErrorCode = 121 - ErrorCode_PUBLIC_HTTP_ROUTING_VERSION_MISMATCH ErrorCode = 169 - ErrorCode_PORT_OUT_OF_RANGE ErrorCode = 122 - ErrorCode_PORT_PROTOCOL_INVALID ErrorCode = 123 - ErrorCode_PORT_SCHEME_INVALID ErrorCode = 124 - ErrorCode_UDP_PROTOCOL_SCHEME_MISMATCH ErrorCode = 125 - ErrorCode_PUBLIC_IP_REQUEST_NOT_FOUND ErrorCode = 126 - ErrorCode_PUBLIC_IP_REQUEST_ONLY_ONE ErrorCode = 128 - ErrorCode_PUBLIC_IP_REQUEST_RELEASE_RUNNING ErrorCode = 130 - ErrorCode_USER_NOTIFICATION_NOT_FOUND ErrorCode = 131 - ErrorCode_PUBLIC_PORT_ROUTING_NOT_FOUND ErrorCode = 132 - ErrorCode_PUBLIC_IP_TYPE_NOT_SUPPORTED ErrorCode = 133 - ErrorCode_PORT_AND_PROTOCOL_COMBINATION_NOT_SUPPORTED ErrorCode = 134 - ErrorCode_PUBLIC_PORT_ROUTING_DUPLICATE_RULE ErrorCode = 135 - ErrorCode_INTERNAL_PORT_DUPLICATE_RULE ErrorCode = 181 - ErrorCode_PUBLIC_PORT_ROUTING_SYNC_RUNNING ErrorCode = 136 - ErrorCode_PUBLIC_PORT_ROUTING_INVALID_IP_FORMAT ErrorCode = 137 - ErrorCode_PUBLIC_PORT_ROUTING_FIREWALL_POLICY_CONFLICT ErrorCode = 138 - ErrorCode_PUBLIC_PORT_ROUTING_VERSION_MISMATCH ErrorCode = 170 - ErrorCode_PUBLIC_PORT_ROUTING_UNABLE_TO_EDIT_DELETED_RECORD ErrorCode = 139 - ErrorCode_PUBLIC_PORT_ROUTING_UNABLE_TO_EDIT_PORTS_ON_SYSTEM_SERVICE ErrorCode = 190 - ErrorCode_DRIVER_NOT_FOUND ErrorCode = 140 - ErrorCode_DRIVER_ENTITY_IS_NOT_SERVICE_STACK ErrorCode = 141 - ErrorCode_DRIVER_ALREADY_SET ErrorCode = 142 - ErrorCode_CLIENT_USER_CONNECTION_ALREADY_EXISTS ErrorCode = 143 - ErrorCode_USER_ALREADY_ASSIGNED ErrorCode = 144 - ErrorCode_SERVICE_STACK_TYPE_USER_STORAGE_REQUIRED ErrorCode = 145 - ErrorCode_APP_VERSION_NOT_FOUND ErrorCode = 146 - ErrorCode_APP_VERSION_INVALID_STATUS ErrorCode = 147 - ErrorCode_DEPLOY_PROCESS_ALREADY_CREATED ErrorCode = 148 - ErrorCode_OBJECT_CONTENT_LENGTH_ZERO ErrorCode = 149 - ErrorCode_OBJECT_MIME_TYPE_NOT_SUPPORTED ErrorCode = 150 - ErrorCode_OBJECT_NOT_FOUND ErrorCode = 151 - ErrorCode_MAX_OBJECT_DISK_SIZE_ESTIMATE_EXCEEDED ErrorCode = 152 - ErrorCode_APP_VERSION_IS_ACTIVE ErrorCode = 226 - ErrorCode_APP_VERSION_NO_ACTIVE_FOUND ErrorCode = 310 - ErrorCode_APP_VERSION_IS_BEING_DEPLOYED ErrorCode = 196 - ErrorCode_APP_VERSION_IS_BEING_BUILT ErrorCode = 197 - ErrorCode_APP_VERSION_IS_NOT_BEING_UPLOADED ErrorCode = 198 - ErrorCode_APP_VERSION_DEPLOYING_FAILED ErrorCode = 199 - ErrorCode_APP_VERSION_BUILDING_FAILED ErrorCode = 200 - ErrorCode_APP_VERSION_YAML_PARSE_FAILED ErrorCode = 225 - ErrorCode_APP_VERSION_YAML_CONFIG_REQUIRED ErrorCode = 324 - ErrorCode_APP_VERSION_DATA_NOT_AVAILABLE ErrorCode = 285 - ErrorCode_APP_VERSION_ACTIVE_HAS_DEFAULT_RUNTIME ErrorCode = 306 - ErrorCode_SHARED_STORAGE_NOT_FOUND ErrorCode = 153 - ErrorCode_SHARED_STORAGE_INVALID_PROJECT ErrorCode = 154 - ErrorCode_SERVICE_STACK_CONNECTION_NOT_FOUND ErrorCode = 155 - ErrorCode_SHARED_STORAGE_INVALID_CATEGORY ErrorCode = 156 - ErrorCode_USER_SERVICE_STACK_INVALID_CATEGORY ErrorCode = 157 - ErrorCode_IDENTICAL_SHARED_STORAGE_AND_SERVICE_STACK ErrorCode = 158 - ErrorCode_CLIENT_ID_PROJECT_SERVICE_STACK_MISSING ErrorCode = 159 - ErrorCode_DIFFERENT_PROJECT_IDS ErrorCode = 160 - ErrorCode_STATS_HISTORY_SEARCH_LIMIT_INVALID ErrorCode = 171 - ErrorCode_STATS_HISTORY_SEARCH_TIME_GROUP_BY_INVALID ErrorCode = 192 - ErrorCode_STATS_HISTORY_SEARCH_ID_FILTER_INVALID ErrorCode = 172 - ErrorCode_STATS_HISTORY_SEARCH_PROJECT_ID_REQUIRED ErrorCode = 173 - ErrorCode_STATS_HISTORY_SEARCH_SUBSCRIPTION_NOT_SUPPORTED ErrorCode = 174 - ErrorCode_STATS_HISTORY_SEARCH_HISTORY_LIMIT_REACHED ErrorCode = 193 - ErrorCode_STATS_HISTORY_SEARCH_RANGE_INVALID ErrorCode = 274 - ErrorCode_STATS_HISTORY_SEARCH_EITHER_RANGE_OR_LIMIT_REQUIRED ErrorCode = 278 - ErrorCode_STATS_HISTORY_SEARCH_FULL_RANGE_REQUIRED ErrorCode = 276 - ErrorCode_TRANSACTION_DEBIT_SEARCH_LIMIT_INVALID ErrorCode = 260 - ErrorCode_TRANSACTION_DEBIT_SEARCH_TIME_GROUP_BY_INVALID ErrorCode = 261 - ErrorCode_TRANSACTION_DEBIT_SEARCH_RANGE_INVALID ErrorCode = 273 - ErrorCode_TRANSACTION_DEBIT_SEARCH_CLIENT_ID_REQUIRED ErrorCode = 262 - ErrorCode_TRANSACTION_DEBIT_SEARCH_ID_FILTER_INVALID ErrorCode = 263 - ErrorCode_TRANSACTION_DEBIT_SEARCH_EITHER_RANGE_OR_LIMIT_REQUIRED ErrorCode = 277 - ErrorCode_TRANSACTION_DEBIT_SEARCH_FULL_RANGE_REQUIRED ErrorCode = 272 - ErrorCode_TRANSACTION_DEBIT_SEARCH_TILL_AND_FROM_DATE_TIMEZONES_DIFFER ErrorCode = 300 - ErrorCode_TRANSACTION_DEBIT_SEARCH_UNKNOWN_TIMEZONE ErrorCode = 301 - ErrorCode_TRANSACTION_DEBIT_SEARCH_INVALID_FILTER ErrorCode = 271 - ErrorCode_GITHUB_VERIFICATION_EXPIRED ErrorCode = 188 - ErrorCode_INVALID_GITHUB_TOKEN_ACTION ErrorCode = 182 - ErrorCode_GITHUB_REQUEST_FAILED ErrorCode = 183 - ErrorCode_GITHUB_AUTHORIZATION_REQUIRED ErrorCode = 184 - ErrorCode_GITHUB_EMAIL_ACCESS_REQUIRED ErrorCode = 185 - ErrorCode_GITHUB_NO_VERIFIED_EMAIL_FOUND ErrorCode = 186 - ErrorCode_GITHUB_REPOSITORY_ACCESS_REQUIRED ErrorCode = 187 - ErrorCode_GITHUB_RATE_LIMIT_EXCEEDED ErrorCode = 189 - ErrorCode_SERVICE_STACK_NO_GITHUB_INTEGRATION ErrorCode = 206 - ErrorCode_BRANCH_NAME_REQUIRED ErrorCode = 207 - ErrorCode_TRIGGER_BUILD_REQUIRES_BRANCH_EVENT_TYPE ErrorCode = 268 - ErrorCode_USER_SERVICE_STACK_REQUIRED ErrorCode = 208 - ErrorCode_NO_EXTERNAL_REPOSITORY_INTEGRATION ErrorCode = 209 - ErrorCode_GITHUB_BRANCH_DELETED ErrorCode = 210 - ErrorCode_GITHUB_WEBHOOK_DELETED ErrorCode = 211 - ErrorCode_GITHUB_WEBHOOK_INVALID_PARAMETERS ErrorCode = 212 - ErrorCode_UNEXPECTED_GITHUB_FILE_ENCODING ErrorCode = 218 - ErrorCode_ZEROPS_BUILD_FILE_NOT_FOUND ErrorCode = 219 - ErrorCode_INCORRECT_WEBHOOK_SECRET ErrorCode = 213 - ErrorCode_UNSUPPORTED_WEBHOOK_EVENT_TYPE ErrorCode = 214 - ErrorCode_REPOSITORY_DOES_NOT_MATCH_SERVICE_STACK_SETTINGS ErrorCode = 215 - ErrorCode_PROJECT_STATUS_NOT_IN_NEW_CREATING_ACTIVE ErrorCode = 216 - ErrorCode_GITHUB_PUSH_IGNORED ErrorCode = 217 - ErrorCode_ZEROPS_BUILD_FILE_TOO_LARGE ErrorCode = 204 - ErrorCode_SAME_SERVICE_STACK_TYPE_USED ErrorCode = 205 - ErrorCode_GITHUB_WRONG_REPOSITORY_FULL_NAME_FORMAT ErrorCode = 220 - ErrorCode_GITHUB_WEBHOOKS_LIMIT_EXCEEDED ErrorCode = 221 - ErrorCode_AVATAR_UPLOAD_FORBIDDEN_IMAGE_TYPE ErrorCode = 222 - ErrorCode_AVATAR_UPLOAD_MAX_SIZE ErrorCode = 223 - ErrorCode_AVATAR_UPLOAD_FILE_NOT_FOUND ErrorCode = 224 - ErrorCode_GITLAB_RATE_LIMIT_EXCEEDED ErrorCode = 228 - ErrorCode_GITLAB_VERIFICATION_EXPIRED ErrorCode = 229 - ErrorCode_INVALID_GITLAB_TOKEN_ACTION ErrorCode = 230 - ErrorCode_GITLAB_REQUEST_FAILED ErrorCode = 231 - ErrorCode_GITLAB_AUTHORIZATION_REQUIRED ErrorCode = 232 - ErrorCode_GITLAB_FULL_API_ACCESS_REQUIRED ErrorCode = 233 - ErrorCode_MULTIPLE_INTEGRATIONS_ARE_FORBIDDEN ErrorCode = 234 - ErrorCode_GITLAB_BRANCH_DELETED ErrorCode = 235 - ErrorCode_GITLAB_WEBHOOK_DELETED ErrorCode = 236 - ErrorCode_GITLAB_WEBHOOK_INVALID_PARAMETERS ErrorCode = 237 - ErrorCode_SERVICE_STACK_NO_GITLAB_INTEGRATION ErrorCode = 238 - ErrorCode_GITLAB_PUSH_IGNORED ErrorCode = 239 - ErrorCode_YAML_FIELD_LENGTH_ERROR ErrorCode = 240 - ErrorCode_YAML_WRONG_USE_FIELD_TYPE ErrorCode = 241 - ErrorCode_VAT_NUMBER_NOT_IN_EUCOUNTRY ErrorCode = 254 - ErrorCode_COMPANY_NOT_FOUND_IN_EU ErrorCode = 258 - ErrorCode_VAT_NUMBER_MISSING ErrorCode = 244 - ErrorCode_PAYMENT_IN_PROGRESS ErrorCode = 245 - ErrorCode_DUPLICATE_VAT_NUMBER ErrorCode = 250 - ErrorCode_DUPLICATE_COMPANY_NUMBER ErrorCode = 302 - ErrorCode_CURRENCY_CHANGE ErrorCode = 303 - ErrorCode_ADMIN_USER_ACCOUNT_EXISTS ErrorCode = 266 - ErrorCode_CREDIT_LIMIT_REACHED ErrorCode = 246 - ErrorCode_INSUFFICIENT_CREDIT ErrorCode = 247 - ErrorCode_PROJECT_LOCK_FAILED ErrorCode = 248 - ErrorCode_PROJECT_UPDATE_FAILED ErrorCode = 249 - ErrorCode_MAXIMUM_AMOUNT_EXCEEDED ErrorCode = 267 - ErrorCode_PAYMENT_FAILED_ERROR ErrorCode = 252 - ErrorCode_PAYMENT_NOT_FOUND ErrorCode = 253 - ErrorCode_ADDON_NOT_FOUND ErrorCode = 255 - ErrorCode_INVOICE_NOT_FOUND ErrorCode = 259 - ErrorCode_PRICE_LIST_NOT_FOUND ErrorCode = 264 - ErrorCode_COST_LIMIT_TOO_SMALL ErrorCode = 279 - ErrorCode_PROJECT_IMPORT_INVALID_YAML ErrorCode = 289 - ErrorCode_PROJECT_IMPORT_INVALID_CONFIG_STRUCTURE ErrorCode = 290 - ErrorCode_PROJECT_IMPORT_INVALID_PARAMETER ErrorCode = 295 - ErrorCode_PROJECT_IMPORT_INVALID_TYPE_VERSION ErrorCode = 292 - ErrorCode_PROJECT_IMPORT_MISSING_PARAMETER ErrorCode = 293 - ErrorCode_PROJECT_IMPORT_UNABLE_TO_CREATE_SERVICE_STACK ErrorCode = 294 - ErrorCode_PROJECT_IMPORT_PROJECT_INCLUDED ErrorCode = 296 - ErrorCode_PROJECT_IMPORT_PROJECT_MISSING ErrorCode = 297 - ErrorCode_PROJECT_IMPORT_MISSING_SERVICE ErrorCode = 298 - ErrorCode_INVALID_CUSTOM_AUTOSCALING_VALUE ErrorCode = 309 - ErrorCode_INVALID_CUSTOM_AUTOSCALING_CPU_RAM_RATIO ErrorCode = 335 - ErrorCode_CUSTOM_VERTICAL_AUTOSCALING_FORBIDDEN_FOR_THIS_STACK_CATEGORY ErrorCode = 305 - ErrorCode_CUSTOM_HORIZONTAL_AUTOSCALING_FORBIDDEN_FOR_THIS_STACK_CATEGORY ErrorCode = 307 - ErrorCode_CUSTOM_HORIZONTAL_AUTOSCALING_FORBIDDEN_IN_NON_HA_MODE ErrorCode = 308 - ErrorCode_ACTION_FORBIDDEN_FOR_THIS_STACK_CATEGORY ErrorCode = 311 - ErrorCode_MODE_UPDATE_FORBIDDEN_FOR_THIS_STACK_CATEGORY ErrorCode = 312 - ErrorCode_YAML_VALIDATION_INVALID_YAML ErrorCode = 304 - ErrorCode_UNEXPECTED_YAML_ENCODING ErrorCode = 325 - ErrorCode_BUCKET_ALREADY_EXISTS ErrorCode = 336 - ErrorCode_S3_API_REQUEST_FAILED ErrorCode = 337 - ErrorCode_USER_ID_WAS_NOT_FOUND ErrorCode = 161 - ErrorCode_AUTHOR_ID_WAS_NOT_FOUND ErrorCode = 162 - ErrorCode_USER_DOES_NOT_HAVE_ACTIVE_CONNECTION_TO_ANY_CLIENT ErrorCode = 163 - ErrorCode_USER_HAS_NOT_ACCESS_TO_ZEROPS ErrorCode = 164 - ErrorCode_INVALID_EMAIL_TOKEN ErrorCode = 195 - ErrorCode_CLIENT_CREATE_FAILED ErrorCode = 321 - ErrorCode_CLIENT_ID_TOO_LONG ErrorCode = 322 - ErrorCode_TRANSFER_ID_TOO_LONG ErrorCode = 316 - ErrorCode_EMAIL_IS_INVALID ErrorCode = 313 - ErrorCode_USER_ACCOUNT_DELETED ErrorCode = 314 - ErrorCode_NO_CONTABO_CLIENT_CONNECTED ErrorCode = 315 - ErrorCode_AMBIGUOUS_USER ErrorCode = 330 - ErrorCode_AMBIGUOUS_USER_SIGN_IN ErrorCode = 331 - ErrorCode_UNSUPPORTED_CURRENCY ErrorCode = 317 - ErrorCode_INVALID_CURRENCY_CODE ErrorCode = 320 - ErrorCode_TRANSFER_PARAM_MISMATCH ErrorCode = 318 - ErrorCode_INVALID_AMOUNT ErrorCode = 333 -) - -// Enum value maps for ErrorCode. -var ( - ErrorCode_name = map[int32]string{ - 0: "NO_ERROR", - 1: "INTERNAL_SERVER_ERROR", - 326: "NOT_FOUND", - 2: "INVALID_USER_INPUT", - 3: "INVALID_USER_INPUT_WITH_TEXT", - 4: "NOT_AUTHORIZED", - 5: "INSUFFICIENT_PRIVILEGES", - 6: "REFRESH_TOKEN_INVALID", - 7: "ENDPOINT_NOT_FOUND", - 8: "POTENTIALLY_FRAUD_BEHAVIOR_DETECTED", - 9: "RE_CAPTCHA_RESPONSE_INVALID", - 10: "DOWNLOAD_TOKEN_INVALID_OR_EXPIRED", - 11: "INCORRECT_USER_CREDENTIALS", - 12: "NO_RIGHTS_TO_SELECTED_ACTION", - 13: "FILE_SIZE_LIMIT_EXCEEDED", - 14: "ADDITIONAL_VERIFICATION_FAILED", - 191: "AT_LEAST_ONE_MANAGER", - 15: "ACTIVE_USER_MUST_BE_CONNECTED_TO_AT_LEAST_ONE_CLIENT", - 16: "INVALID_CREDENTIALS", - 270: "PASSWORD_TOO_SHORT", - 269: "PASSWORD_TOO_LONG", - 18: "NO_ACTIVE_CONNECTION_TO_ANY_CLIENT", - 19: "NO_ACTIVE_CONNECTION_TO_CURRENT_CLIENT", - 20: "TOKEN_EXPIRED", - 21: "CLIENT_NOT_FOUND", - 22: "NO_ACCESS_TO_ZEROPS", - 23: "USER_NOT_FOUND", - 24: "INVALID_DOCUMENT_ROOT", - 25: "INVALID_ENTRYPOINT", - 280: "INVALID_INIT_COMMANDS", - 26: "DOWNLOAD_EXPIRED", - 334: "MULTIPLE_ACCOUNTS_CONNECTED", - 27: "USER_DATA_NOT_FOUND", - 28: "USER_DATA_KEY_INVALID", - 29: "USER_DATA_CONTENT_INVALID", - 180: "USER_DATA_USE_OF_SYSTEM_KEY", - 30: "USER_DATA_DELETE_FORBIDDEN", - 31: "USER_DATA_DUPLICATE_KEY", - 32: "USER_DATA_SYNC_RUNNING", - 168: "USER_DATA_VERSION_MISMATCH", - 227: "USER_TOKEN_NOT_FOUND", - 34: "USER_ACCOUNT_NOT_FOUND", - 35: "TEMPLATE_NOT_FOUND", - 36: "COUNTRY_CALLING_CODE_DOES_NOT_MATCH_PHONE_NUMBER", - 37: "INVALID_PHONE_NUMBER", - 38: "INVALID_USER_ROLE", - 39: "INVALID_CLIENT_USER_GROUP_COMBINATION", - 40: "EMAIL_EXISTS", - 41: "USER_ALREADY_CONNECTED_TO_COMPANY", - 42: "COUNTRY_NOT_FOUND", - 43: "RECORD_NOT_FOUND", - 44: "MAXIMUM_NUMBER_OF_CLIENT_EXCEEDED", - 45: "USER_IS_NOT_IN_BEING_DELETED_STATUS", - 46: "UNABLE_TO_DELETE_YOUR_OWN_ACCOUNT", - 47: "CLIENT_USER_CONNECTION_NOT_FOUND", - 48: "CLIENT_USER_CONNECTION_HAS_BEEN_DELETED", - 49: "BAD_OR_EXPIRED_ACTIVATION_LINK", - 50: "UNABLE_TO_EDIT_DELETED_USER", - 51: "CLIENT_USER_ALREADY_BEEN_DELETED", - 52: "LANGUAGE_NOT_FOUND", - 53: "LANGUAGE_NOT_SUPPORTED", - 54: "DUPLICATED_USER", - 55: "RECORD_IS_READ_ONLY", - 56: "RECORD_IS_DELETED", - 57: "RECORD_COMMON_KEY_EDIT", - 61: "SERVICE_STACK_NOT_FOUND", - 62: "SERVICE_STACK_TYPE_NOT_FOUND", - 63: "SERVICE_STACK_TYPE_VERSION_NOT_FOUND", - 64: "SERVICE_STACK_TYPE_VERSION_IS_NOT_ACTIVE", - 65: "SERVICE_STACK_TYPE_VERSION_REMOVE_DEFAULT", - 66: "SERVICE_STACK_TYPE_INVALID_VERSION", - 67: "SERVICE_STACK_IS_FAILED", - 68: "SERVICE_STACK_IS_SYSTEM_NOT_SUPPORTED", - 69: "SERVICE_STACK_CUSTOM_PORTS_ENABLED_REQUIRED", - 70: "SERVICE_STACK_TYPE_VERSION_NOT_MATCH_WITH_STACK_TYPE", - 71: "SERVICE_STACK_STORAGE_DISK_MAX_LIMIT", - 72: "SERVICE_STACK_STORAGE_DISK_MIN_LIMIT", - 73: "SERVICE_STACK_OBJECT_STORAGE_QUOTA_NOT_FOUND", - 281: "SERVICE_STACK_INIT_COMMANDS_NOT_FOUND", - 74: "SERVICE_STACK_TYPE_OBJECT_STORAGE_REQUIRED", - 75: "SERVICE_STACK_TYPE_OBJECT_STORAGE_FORBIDDEN", - 76: "SERVICE_STACK_TYPE_SHARED_STORAGE_FORBIDDEN", - 242: "SERVICE_STACK_TYPE_STANDARD_FORBIDDEN", - 77: "SERVICE_STACK_IS_READY_TO_DEPLOY", - 78: "SERVICE_STACK_IS_NOT_HTTP", - 79: "SERVICE_STACK_RELOAD_NOT_AVAILABLE", - 194: "SERVICE_STACK_NGINX_CONFIG", - 81: "SERVICE_STACK_SUBDOMAIN_ACCESS_ALREADY_DISABLED", - 178: "SERVICE_STACK_CREATING", - 179: "SERVICE_STACK_UPGRADING", - 203: "SERVICE_STACK_INVALID_CATEGORY", - 265: "SERVICE_STACK_STATUS_NOT_SUPPORTED", - 282: "SERVICE_STACK_USER_NAME_INVALID", - 283: "ACTIVE_SERVICE_STACK_REQUIRED", - 284: "USER_APPLICATION_RUNTIME_SERVICE_STACK_REQUIRED", - 329: "SHARED_STORAGE_NONEMPTY_CONNECTED_STACKS_FORBIDDEN", - 328: "SHARED_STORAGE_SERVICE_STACK_INACTIVE", - 82: "PROCESS_NOT_FOUND", - 83: "PROCESS_IS_ALREADY_OVER", - 85: "PROCESS_IS_ALREADY_RUNNING", - 87: "UNABLE_TO_CREATE_PROCESS", - 323: "CREATE_PROCESS_QUEUED_PROJECT_PROCESS_COUNT_EXCEEDED", - 59: "MANUAL_REPAIR_REQUIRED", - 60: "NOTHING_TO_SYNC", - 58: "IS_NOT_POSSIBLE_TO_EDIT_ANOTHER_USER", - 88: "ACTIVE_SERVICE_STACK_EXISTS_IN_PROJECT", - 89: "INVALID_OLD_PASSWORD", - 90: "PROJECT_STATUS_NOT_SUPPORTED", - 91: "PROJECT_NOT_FOUND", - 167: "PROJECT_IS_NOT_ACTIVE", - 92: "SERVICE_STACK_NAME_UNAVAILABLE", - 93: "SERVICE_STACK_NAME_INVALID", - 94: "CORE_SERVICE_STACK_TYPE_VERSION_NOT_FOUND", - 95: "L7_HTTP_BALANCER_SERVICE_STACK_TYPE_VERSION_NOT_FOUND", - 96: "PROJECT_WILL_BE_DELETED", - 256: "PROJECT_WILL_BE_STARTED", - 257: "PROJECT_WILL_BE_STOPPED", - 97: "STACK_WILL_BE_DELETED", - 286: "STACK_OF_PROJECT_WILL_BE_DELETED", - 287: "STACK_OF_PROJECT_WILL_BE_CREATED", - 288: "USER_DATA_OF_PROJECT_WILL_BE_SYNCED", - 98: "PUBLIC_HTTP_ROUTING_NOT_FOUND", - 99: "PUBLIC_HTTP_ROUTING_AT_LEAST_ONE_DOMAIN_REQUIRED", - 100: "PUBLIC_HTTP_ROUTING_DUPLICATE_DOMAIN_NAME", - 101: "PUBLIC_HTTP_ROUTING_DUPLICATE_FALLBACK", - 102: "PUBLIC_HTTP_ROUTING_DUPLICATE_DOMAIN_NAME_IN_ANOTHER_ROUTING", - 103: "PUBLIC_HTTP_ROUTING_DUPLICATE_FALLBACK_IN_ANOTHER_ROUTING", - 104: "PUBLIC_HTTP_ROUTING_DUPLICATE_LOCATION_PATHS", - 105: "PUBLIC_HTTP_ROUTING_ITEMS_LIMIT", - 106: "PUBLIC_HTTP_ROUTING_LOCATIONS_LIMIT", - 107: "PUBLIC_HTTP_ROUTING_DOMAINS_LIMIT", - 108: "PUBLIC_HTTP_ROUTING_INVALID_DOMAIN_NAME_FQDN", - 109: "PUBLIC_HTTP_ROUTING_SSL_FALLBACK", - 110: "PUBLIC_HTTP_ROUTING_LOCATION_DOES_NOT_FOUND", - 111: "PUBLIC_HTTP_ROUTING_INVALID_LOCATIONS_PREFIX", - 112: "PUBLIC_HTTP_ROUTING_MULTIPLE_SERVICE_STACK_ACCESS_POINTS", - 113: "PUBLIC_HTTP_ROUTING_SERVICE_STACK_ACCESS_POINT_NOT_FOUND", - 114: "PUBLIC_HTTP_ROUTING_REQUEST_ONLY_TCP_PORT", - 115: "PUBLIC_HTTP_ROUTING_SERVICE_STACK_DOES_NOT_SUPPORT_HTTP", - 327: "PUBLIC_HTTP_ROUTING_FORBIDDEN_ZEROPS_SUBDOMAIN_SUFFIX", - 116: "NO_PUBLIC_HTTP_ROUTING_IN_L7_HTTP_BALANCING", - 117: "SSL_NOT_SUPPORTED", - 118: "REGISTERED_DOMAIN_HOST_LIMIT_REACHED", - 119: "PUBLIC_SUFFIX_LIST_CONTROL_FAILED", - 120: "PORT_NOT_SUPPORTED", - 121: "PUBLIC_HTTP_ROUTING_SYNC_RUNNING", - 169: "PUBLIC_HTTP_ROUTING_VERSION_MISMATCH", - 122: "PORT_OUT_OF_RANGE", - 123: "PORT_PROTOCOL_INVALID", - 124: "PORT_SCHEME_INVALID", - 125: "UDP_PROTOCOL_SCHEME_MISMATCH", - 126: "PUBLIC_IP_REQUEST_NOT_FOUND", - 128: "PUBLIC_IP_REQUEST_ONLY_ONE", - 130: "PUBLIC_IP_REQUEST_RELEASE_RUNNING", - 131: "USER_NOTIFICATION_NOT_FOUND", - 132: "PUBLIC_PORT_ROUTING_NOT_FOUND", - 133: "PUBLIC_IP_TYPE_NOT_SUPPORTED", - 134: "PORT_AND_PROTOCOL_COMBINATION_NOT_SUPPORTED", - 135: "PUBLIC_PORT_ROUTING_DUPLICATE_RULE", - 181: "INTERNAL_PORT_DUPLICATE_RULE", - 136: "PUBLIC_PORT_ROUTING_SYNC_RUNNING", - 137: "PUBLIC_PORT_ROUTING_INVALID_IP_FORMAT", - 138: "PUBLIC_PORT_ROUTING_FIREWALL_POLICY_CONFLICT", - 170: "PUBLIC_PORT_ROUTING_VERSION_MISMATCH", - 139: "PUBLIC_PORT_ROUTING_UNABLE_TO_EDIT_DELETED_RECORD", - 190: "PUBLIC_PORT_ROUTING_UNABLE_TO_EDIT_PORTS_ON_SYSTEM_SERVICE", - 140: "DRIVER_NOT_FOUND", - 141: "DRIVER_ENTITY_IS_NOT_SERVICE_STACK", - 142: "DRIVER_ALREADY_SET", - 143: "CLIENT_USER_CONNECTION_ALREADY_EXISTS", - 144: "USER_ALREADY_ASSIGNED", - 145: "SERVICE_STACK_TYPE_USER_STORAGE_REQUIRED", - 146: "APP_VERSION_NOT_FOUND", - 147: "APP_VERSION_INVALID_STATUS", - 148: "DEPLOY_PROCESS_ALREADY_CREATED", - 149: "OBJECT_CONTENT_LENGTH_ZERO", - 150: "OBJECT_MIME_TYPE_NOT_SUPPORTED", - 151: "OBJECT_NOT_FOUND", - 152: "MAX_OBJECT_DISK_SIZE_ESTIMATE_EXCEEDED", - 226: "APP_VERSION_IS_ACTIVE", - 310: "APP_VERSION_NO_ACTIVE_FOUND", - 196: "APP_VERSION_IS_BEING_DEPLOYED", - 197: "APP_VERSION_IS_BEING_BUILT", - 198: "APP_VERSION_IS_NOT_BEING_UPLOADED", - 199: "APP_VERSION_DEPLOYING_FAILED", - 200: "APP_VERSION_BUILDING_FAILED", - 225: "APP_VERSION_YAML_PARSE_FAILED", - 324: "APP_VERSION_YAML_CONFIG_REQUIRED", - 285: "APP_VERSION_DATA_NOT_AVAILABLE", - 306: "APP_VERSION_ACTIVE_HAS_DEFAULT_RUNTIME", - 153: "SHARED_STORAGE_NOT_FOUND", - 154: "SHARED_STORAGE_INVALID_PROJECT", - 155: "SERVICE_STACK_CONNECTION_NOT_FOUND", - 156: "SHARED_STORAGE_INVALID_CATEGORY", - 157: "USER_SERVICE_STACK_INVALID_CATEGORY", - 158: "IDENTICAL_SHARED_STORAGE_AND_SERVICE_STACK", - 159: "CLIENT_ID_PROJECT_SERVICE_STACK_MISSING", - 160: "DIFFERENT_PROJECT_IDS", - 171: "STATS_HISTORY_SEARCH_LIMIT_INVALID", - 192: "STATS_HISTORY_SEARCH_TIME_GROUP_BY_INVALID", - 172: "STATS_HISTORY_SEARCH_ID_FILTER_INVALID", - 173: "STATS_HISTORY_SEARCH_PROJECT_ID_REQUIRED", - 174: "STATS_HISTORY_SEARCH_SUBSCRIPTION_NOT_SUPPORTED", - 193: "STATS_HISTORY_SEARCH_HISTORY_LIMIT_REACHED", - 274: "STATS_HISTORY_SEARCH_RANGE_INVALID", - 278: "STATS_HISTORY_SEARCH_EITHER_RANGE_OR_LIMIT_REQUIRED", - 276: "STATS_HISTORY_SEARCH_FULL_RANGE_REQUIRED", - 260: "TRANSACTION_DEBIT_SEARCH_LIMIT_INVALID", - 261: "TRANSACTION_DEBIT_SEARCH_TIME_GROUP_BY_INVALID", - 273: "TRANSACTION_DEBIT_SEARCH_RANGE_INVALID", - 262: "TRANSACTION_DEBIT_SEARCH_CLIENT_ID_REQUIRED", - 263: "TRANSACTION_DEBIT_SEARCH_ID_FILTER_INVALID", - 277: "TRANSACTION_DEBIT_SEARCH_EITHER_RANGE_OR_LIMIT_REQUIRED", - 272: "TRANSACTION_DEBIT_SEARCH_FULL_RANGE_REQUIRED", - 300: "TRANSACTION_DEBIT_SEARCH_TILL_AND_FROM_DATE_TIMEZONES_DIFFER", - 301: "TRANSACTION_DEBIT_SEARCH_UNKNOWN_TIMEZONE", - 271: "TRANSACTION_DEBIT_SEARCH_INVALID_FILTER", - 188: "GITHUB_VERIFICATION_EXPIRED", - 182: "INVALID_GITHUB_TOKEN_ACTION", - 183: "GITHUB_REQUEST_FAILED", - 184: "GITHUB_AUTHORIZATION_REQUIRED", - 185: "GITHUB_EMAIL_ACCESS_REQUIRED", - 186: "GITHUB_NO_VERIFIED_EMAIL_FOUND", - 187: "GITHUB_REPOSITORY_ACCESS_REQUIRED", - 189: "GITHUB_RATE_LIMIT_EXCEEDED", - 206: "SERVICE_STACK_NO_GITHUB_INTEGRATION", - 207: "BRANCH_NAME_REQUIRED", - 268: "TRIGGER_BUILD_REQUIRES_BRANCH_EVENT_TYPE", - 208: "USER_SERVICE_STACK_REQUIRED", - 209: "NO_EXTERNAL_REPOSITORY_INTEGRATION", - 210: "GITHUB_BRANCH_DELETED", - 211: "GITHUB_WEBHOOK_DELETED", - 212: "GITHUB_WEBHOOK_INVALID_PARAMETERS", - 218: "UNEXPECTED_GITHUB_FILE_ENCODING", - 219: "ZEROPS_BUILD_FILE_NOT_FOUND", - 213: "INCORRECT_WEBHOOK_SECRET", - 214: "UNSUPPORTED_WEBHOOK_EVENT_TYPE", - 215: "REPOSITORY_DOES_NOT_MATCH_SERVICE_STACK_SETTINGS", - 216: "PROJECT_STATUS_NOT_IN_NEW_CREATING_ACTIVE", - 217: "GITHUB_PUSH_IGNORED", - 204: "ZEROPS_BUILD_FILE_TOO_LARGE", - 205: "SAME_SERVICE_STACK_TYPE_USED", - 220: "GITHUB_WRONG_REPOSITORY_FULL_NAME_FORMAT", - 221: "GITHUB_WEBHOOKS_LIMIT_EXCEEDED", - 222: "AVATAR_UPLOAD_FORBIDDEN_IMAGE_TYPE", - 223: "AVATAR_UPLOAD_MAX_SIZE", - 224: "AVATAR_UPLOAD_FILE_NOT_FOUND", - 228: "GITLAB_RATE_LIMIT_EXCEEDED", - 229: "GITLAB_VERIFICATION_EXPIRED", - 230: "INVALID_GITLAB_TOKEN_ACTION", - 231: "GITLAB_REQUEST_FAILED", - 232: "GITLAB_AUTHORIZATION_REQUIRED", - 233: "GITLAB_FULL_API_ACCESS_REQUIRED", - 234: "MULTIPLE_INTEGRATIONS_ARE_FORBIDDEN", - 235: "GITLAB_BRANCH_DELETED", - 236: "GITLAB_WEBHOOK_DELETED", - 237: "GITLAB_WEBHOOK_INVALID_PARAMETERS", - 238: "SERVICE_STACK_NO_GITLAB_INTEGRATION", - 239: "GITLAB_PUSH_IGNORED", - 240: "YAML_FIELD_LENGTH_ERROR", - 241: "YAML_WRONG_USE_FIELD_TYPE", - 254: "VAT_NUMBER_NOT_IN_EUCOUNTRY", - 258: "COMPANY_NOT_FOUND_IN_EU", - 244: "VAT_NUMBER_MISSING", - 245: "PAYMENT_IN_PROGRESS", - 250: "DUPLICATE_VAT_NUMBER", - 302: "DUPLICATE_COMPANY_NUMBER", - 303: "CURRENCY_CHANGE", - 266: "ADMIN_USER_ACCOUNT_EXISTS", - 246: "CREDIT_LIMIT_REACHED", - 247: "INSUFFICIENT_CREDIT", - 248: "PROJECT_LOCK_FAILED", - 249: "PROJECT_UPDATE_FAILED", - 267: "MAXIMUM_AMOUNT_EXCEEDED", - 252: "PAYMENT_FAILED_ERROR", - 253: "PAYMENT_NOT_FOUND", - 255: "ADDON_NOT_FOUND", - 259: "INVOICE_NOT_FOUND", - 264: "PRICE_LIST_NOT_FOUND", - 279: "COST_LIMIT_TOO_SMALL", - 289: "PROJECT_IMPORT_INVALID_YAML", - 290: "PROJECT_IMPORT_INVALID_CONFIG_STRUCTURE", - 295: "PROJECT_IMPORT_INVALID_PARAMETER", - 292: "PROJECT_IMPORT_INVALID_TYPE_VERSION", - 293: "PROJECT_IMPORT_MISSING_PARAMETER", - 294: "PROJECT_IMPORT_UNABLE_TO_CREATE_SERVICE_STACK", - 296: "PROJECT_IMPORT_PROJECT_INCLUDED", - 297: "PROJECT_IMPORT_PROJECT_MISSING", - 298: "PROJECT_IMPORT_MISSING_SERVICE", - 309: "INVALID_CUSTOM_AUTOSCALING_VALUE", - 335: "INVALID_CUSTOM_AUTOSCALING_CPU_RAM_RATIO", - 305: "CUSTOM_VERTICAL_AUTOSCALING_FORBIDDEN_FOR_THIS_STACK_CATEGORY", - 307: "CUSTOM_HORIZONTAL_AUTOSCALING_FORBIDDEN_FOR_THIS_STACK_CATEGORY", - 308: "CUSTOM_HORIZONTAL_AUTOSCALING_FORBIDDEN_IN_NON_HA_MODE", - 311: "ACTION_FORBIDDEN_FOR_THIS_STACK_CATEGORY", - 312: "MODE_UPDATE_FORBIDDEN_FOR_THIS_STACK_CATEGORY", - 304: "YAML_VALIDATION_INVALID_YAML", - 325: "UNEXPECTED_YAML_ENCODING", - 336: "BUCKET_ALREADY_EXISTS", - 337: "S3_API_REQUEST_FAILED", - 161: "USER_ID_WAS_NOT_FOUND", - 162: "AUTHOR_ID_WAS_NOT_FOUND", - 163: "USER_DOES_NOT_HAVE_ACTIVE_CONNECTION_TO_ANY_CLIENT", - 164: "USER_HAS_NOT_ACCESS_TO_ZEROPS", - 195: "INVALID_EMAIL_TOKEN", - 321: "CLIENT_CREATE_FAILED", - 322: "CLIENT_ID_TOO_LONG", - 316: "TRANSFER_ID_TOO_LONG", - 313: "EMAIL_IS_INVALID", - 314: "USER_ACCOUNT_DELETED", - 315: "NO_CONTABO_CLIENT_CONNECTED", - 330: "AMBIGUOUS_USER", - 331: "AMBIGUOUS_USER_SIGN_IN", - 317: "UNSUPPORTED_CURRENCY", - 320: "INVALID_CURRENCY_CODE", - 318: "TRANSFER_PARAM_MISMATCH", - 333: "INVALID_AMOUNT", - } - ErrorCode_value = map[string]int32{ - "NO_ERROR": 0, - "INTERNAL_SERVER_ERROR": 1, - "NOT_FOUND": 326, - "INVALID_USER_INPUT": 2, - "INVALID_USER_INPUT_WITH_TEXT": 3, - "NOT_AUTHORIZED": 4, - "INSUFFICIENT_PRIVILEGES": 5, - "REFRESH_TOKEN_INVALID": 6, - "ENDPOINT_NOT_FOUND": 7, - "POTENTIALLY_FRAUD_BEHAVIOR_DETECTED": 8, - "RE_CAPTCHA_RESPONSE_INVALID": 9, - "DOWNLOAD_TOKEN_INVALID_OR_EXPIRED": 10, - "INCORRECT_USER_CREDENTIALS": 11, - "NO_RIGHTS_TO_SELECTED_ACTION": 12, - "FILE_SIZE_LIMIT_EXCEEDED": 13, - "ADDITIONAL_VERIFICATION_FAILED": 14, - "AT_LEAST_ONE_MANAGER": 191, - "ACTIVE_USER_MUST_BE_CONNECTED_TO_AT_LEAST_ONE_CLIENT": 15, - "INVALID_CREDENTIALS": 16, - "PASSWORD_TOO_SHORT": 270, - "PASSWORD_TOO_LONG": 269, - "NO_ACTIVE_CONNECTION_TO_ANY_CLIENT": 18, - "NO_ACTIVE_CONNECTION_TO_CURRENT_CLIENT": 19, - "TOKEN_EXPIRED": 20, - "CLIENT_NOT_FOUND": 21, - "NO_ACCESS_TO_ZEROPS": 22, - "USER_NOT_FOUND": 23, - "INVALID_DOCUMENT_ROOT": 24, - "INVALID_ENTRYPOINT": 25, - "INVALID_INIT_COMMANDS": 280, - "DOWNLOAD_EXPIRED": 26, - "MULTIPLE_ACCOUNTS_CONNECTED": 334, - "USER_DATA_NOT_FOUND": 27, - "USER_DATA_KEY_INVALID": 28, - "USER_DATA_CONTENT_INVALID": 29, - "USER_DATA_USE_OF_SYSTEM_KEY": 180, - "USER_DATA_DELETE_FORBIDDEN": 30, - "USER_DATA_DUPLICATE_KEY": 31, - "USER_DATA_SYNC_RUNNING": 32, - "USER_DATA_VERSION_MISMATCH": 168, - "USER_TOKEN_NOT_FOUND": 227, - "USER_ACCOUNT_NOT_FOUND": 34, - "TEMPLATE_NOT_FOUND": 35, - "COUNTRY_CALLING_CODE_DOES_NOT_MATCH_PHONE_NUMBER": 36, - "INVALID_PHONE_NUMBER": 37, - "INVALID_USER_ROLE": 38, - "INVALID_CLIENT_USER_GROUP_COMBINATION": 39, - "EMAIL_EXISTS": 40, - "USER_ALREADY_CONNECTED_TO_COMPANY": 41, - "COUNTRY_NOT_FOUND": 42, - "RECORD_NOT_FOUND": 43, - "MAXIMUM_NUMBER_OF_CLIENT_EXCEEDED": 44, - "USER_IS_NOT_IN_BEING_DELETED_STATUS": 45, - "UNABLE_TO_DELETE_YOUR_OWN_ACCOUNT": 46, - "CLIENT_USER_CONNECTION_NOT_FOUND": 47, - "CLIENT_USER_CONNECTION_HAS_BEEN_DELETED": 48, - "BAD_OR_EXPIRED_ACTIVATION_LINK": 49, - "UNABLE_TO_EDIT_DELETED_USER": 50, - "CLIENT_USER_ALREADY_BEEN_DELETED": 51, - "LANGUAGE_NOT_FOUND": 52, - "LANGUAGE_NOT_SUPPORTED": 53, - "DUPLICATED_USER": 54, - "RECORD_IS_READ_ONLY": 55, - "RECORD_IS_DELETED": 56, - "RECORD_COMMON_KEY_EDIT": 57, - "SERVICE_STACK_NOT_FOUND": 61, - "SERVICE_STACK_TYPE_NOT_FOUND": 62, - "SERVICE_STACK_TYPE_VERSION_NOT_FOUND": 63, - "SERVICE_STACK_TYPE_VERSION_IS_NOT_ACTIVE": 64, - "SERVICE_STACK_TYPE_VERSION_REMOVE_DEFAULT": 65, - "SERVICE_STACK_TYPE_INVALID_VERSION": 66, - "SERVICE_STACK_IS_FAILED": 67, - "SERVICE_STACK_IS_SYSTEM_NOT_SUPPORTED": 68, - "SERVICE_STACK_CUSTOM_PORTS_ENABLED_REQUIRED": 69, - "SERVICE_STACK_TYPE_VERSION_NOT_MATCH_WITH_STACK_TYPE": 70, - "SERVICE_STACK_STORAGE_DISK_MAX_LIMIT": 71, - "SERVICE_STACK_STORAGE_DISK_MIN_LIMIT": 72, - "SERVICE_STACK_OBJECT_STORAGE_QUOTA_NOT_FOUND": 73, - "SERVICE_STACK_INIT_COMMANDS_NOT_FOUND": 281, - "SERVICE_STACK_TYPE_OBJECT_STORAGE_REQUIRED": 74, - "SERVICE_STACK_TYPE_OBJECT_STORAGE_FORBIDDEN": 75, - "SERVICE_STACK_TYPE_SHARED_STORAGE_FORBIDDEN": 76, - "SERVICE_STACK_TYPE_STANDARD_FORBIDDEN": 242, - "SERVICE_STACK_IS_READY_TO_DEPLOY": 77, - "SERVICE_STACK_IS_NOT_HTTP": 78, - "SERVICE_STACK_RELOAD_NOT_AVAILABLE": 79, - "SERVICE_STACK_NGINX_CONFIG": 194, - "SERVICE_STACK_SUBDOMAIN_ACCESS_ALREADY_DISABLED": 81, - "SERVICE_STACK_CREATING": 178, - "SERVICE_STACK_UPGRADING": 179, - "SERVICE_STACK_INVALID_CATEGORY": 203, - "SERVICE_STACK_STATUS_NOT_SUPPORTED": 265, - "SERVICE_STACK_USER_NAME_INVALID": 282, - "ACTIVE_SERVICE_STACK_REQUIRED": 283, - "USER_APPLICATION_RUNTIME_SERVICE_STACK_REQUIRED": 284, - "SHARED_STORAGE_NONEMPTY_CONNECTED_STACKS_FORBIDDEN": 329, - "SHARED_STORAGE_SERVICE_STACK_INACTIVE": 328, - "PROCESS_NOT_FOUND": 82, - "PROCESS_IS_ALREADY_OVER": 83, - "PROCESS_IS_ALREADY_RUNNING": 85, - "UNABLE_TO_CREATE_PROCESS": 87, - "CREATE_PROCESS_QUEUED_PROJECT_PROCESS_COUNT_EXCEEDED": 323, - "MANUAL_REPAIR_REQUIRED": 59, - "NOTHING_TO_SYNC": 60, - "IS_NOT_POSSIBLE_TO_EDIT_ANOTHER_USER": 58, - "ACTIVE_SERVICE_STACK_EXISTS_IN_PROJECT": 88, - "INVALID_OLD_PASSWORD": 89, - "PROJECT_STATUS_NOT_SUPPORTED": 90, - "PROJECT_NOT_FOUND": 91, - "PROJECT_IS_NOT_ACTIVE": 167, - "SERVICE_STACK_NAME_UNAVAILABLE": 92, - "SERVICE_STACK_NAME_INVALID": 93, - "CORE_SERVICE_STACK_TYPE_VERSION_NOT_FOUND": 94, - "L7_HTTP_BALANCER_SERVICE_STACK_TYPE_VERSION_NOT_FOUND": 95, - "PROJECT_WILL_BE_DELETED": 96, - "PROJECT_WILL_BE_STARTED": 256, - "PROJECT_WILL_BE_STOPPED": 257, - "STACK_WILL_BE_DELETED": 97, - "STACK_OF_PROJECT_WILL_BE_DELETED": 286, - "STACK_OF_PROJECT_WILL_BE_CREATED": 287, - "USER_DATA_OF_PROJECT_WILL_BE_SYNCED": 288, - "PUBLIC_HTTP_ROUTING_NOT_FOUND": 98, - "PUBLIC_HTTP_ROUTING_AT_LEAST_ONE_DOMAIN_REQUIRED": 99, - "PUBLIC_HTTP_ROUTING_DUPLICATE_DOMAIN_NAME": 100, - "PUBLIC_HTTP_ROUTING_DUPLICATE_FALLBACK": 101, - "PUBLIC_HTTP_ROUTING_DUPLICATE_DOMAIN_NAME_IN_ANOTHER_ROUTING": 102, - "PUBLIC_HTTP_ROUTING_DUPLICATE_FALLBACK_IN_ANOTHER_ROUTING": 103, - "PUBLIC_HTTP_ROUTING_DUPLICATE_LOCATION_PATHS": 104, - "PUBLIC_HTTP_ROUTING_ITEMS_LIMIT": 105, - "PUBLIC_HTTP_ROUTING_LOCATIONS_LIMIT": 106, - "PUBLIC_HTTP_ROUTING_DOMAINS_LIMIT": 107, - "PUBLIC_HTTP_ROUTING_INVALID_DOMAIN_NAME_FQDN": 108, - "PUBLIC_HTTP_ROUTING_SSL_FALLBACK": 109, - "PUBLIC_HTTP_ROUTING_LOCATION_DOES_NOT_FOUND": 110, - "PUBLIC_HTTP_ROUTING_INVALID_LOCATIONS_PREFIX": 111, - "PUBLIC_HTTP_ROUTING_MULTIPLE_SERVICE_STACK_ACCESS_POINTS": 112, - "PUBLIC_HTTP_ROUTING_SERVICE_STACK_ACCESS_POINT_NOT_FOUND": 113, - "PUBLIC_HTTP_ROUTING_REQUEST_ONLY_TCP_PORT": 114, - "PUBLIC_HTTP_ROUTING_SERVICE_STACK_DOES_NOT_SUPPORT_HTTP": 115, - "PUBLIC_HTTP_ROUTING_FORBIDDEN_ZEROPS_SUBDOMAIN_SUFFIX": 327, - "NO_PUBLIC_HTTP_ROUTING_IN_L7_HTTP_BALANCING": 116, - "SSL_NOT_SUPPORTED": 117, - "REGISTERED_DOMAIN_HOST_LIMIT_REACHED": 118, - "PUBLIC_SUFFIX_LIST_CONTROL_FAILED": 119, - "PORT_NOT_SUPPORTED": 120, - "PUBLIC_HTTP_ROUTING_SYNC_RUNNING": 121, - "PUBLIC_HTTP_ROUTING_VERSION_MISMATCH": 169, - "PORT_OUT_OF_RANGE": 122, - "PORT_PROTOCOL_INVALID": 123, - "PORT_SCHEME_INVALID": 124, - "UDP_PROTOCOL_SCHEME_MISMATCH": 125, - "PUBLIC_IP_REQUEST_NOT_FOUND": 126, - "PUBLIC_IP_REQUEST_ONLY_ONE": 128, - "PUBLIC_IP_REQUEST_RELEASE_RUNNING": 130, - "USER_NOTIFICATION_NOT_FOUND": 131, - "PUBLIC_PORT_ROUTING_NOT_FOUND": 132, - "PUBLIC_IP_TYPE_NOT_SUPPORTED": 133, - "PORT_AND_PROTOCOL_COMBINATION_NOT_SUPPORTED": 134, - "PUBLIC_PORT_ROUTING_DUPLICATE_RULE": 135, - "INTERNAL_PORT_DUPLICATE_RULE": 181, - "PUBLIC_PORT_ROUTING_SYNC_RUNNING": 136, - "PUBLIC_PORT_ROUTING_INVALID_IP_FORMAT": 137, - "PUBLIC_PORT_ROUTING_FIREWALL_POLICY_CONFLICT": 138, - "PUBLIC_PORT_ROUTING_VERSION_MISMATCH": 170, - "PUBLIC_PORT_ROUTING_UNABLE_TO_EDIT_DELETED_RECORD": 139, - "PUBLIC_PORT_ROUTING_UNABLE_TO_EDIT_PORTS_ON_SYSTEM_SERVICE": 190, - "DRIVER_NOT_FOUND": 140, - "DRIVER_ENTITY_IS_NOT_SERVICE_STACK": 141, - "DRIVER_ALREADY_SET": 142, - "CLIENT_USER_CONNECTION_ALREADY_EXISTS": 143, - "USER_ALREADY_ASSIGNED": 144, - "SERVICE_STACK_TYPE_USER_STORAGE_REQUIRED": 145, - "APP_VERSION_NOT_FOUND": 146, - "APP_VERSION_INVALID_STATUS": 147, - "DEPLOY_PROCESS_ALREADY_CREATED": 148, - "OBJECT_CONTENT_LENGTH_ZERO": 149, - "OBJECT_MIME_TYPE_NOT_SUPPORTED": 150, - "OBJECT_NOT_FOUND": 151, - "MAX_OBJECT_DISK_SIZE_ESTIMATE_EXCEEDED": 152, - "APP_VERSION_IS_ACTIVE": 226, - "APP_VERSION_NO_ACTIVE_FOUND": 310, - "APP_VERSION_IS_BEING_DEPLOYED": 196, - "APP_VERSION_IS_BEING_BUILT": 197, - "APP_VERSION_IS_NOT_BEING_UPLOADED": 198, - "APP_VERSION_DEPLOYING_FAILED": 199, - "APP_VERSION_BUILDING_FAILED": 200, - "APP_VERSION_YAML_PARSE_FAILED": 225, - "APP_VERSION_YAML_CONFIG_REQUIRED": 324, - "APP_VERSION_DATA_NOT_AVAILABLE": 285, - "APP_VERSION_ACTIVE_HAS_DEFAULT_RUNTIME": 306, - "SHARED_STORAGE_NOT_FOUND": 153, - "SHARED_STORAGE_INVALID_PROJECT": 154, - "SERVICE_STACK_CONNECTION_NOT_FOUND": 155, - "SHARED_STORAGE_INVALID_CATEGORY": 156, - "USER_SERVICE_STACK_INVALID_CATEGORY": 157, - "IDENTICAL_SHARED_STORAGE_AND_SERVICE_STACK": 158, - "CLIENT_ID_PROJECT_SERVICE_STACK_MISSING": 159, - "DIFFERENT_PROJECT_IDS": 160, - "STATS_HISTORY_SEARCH_LIMIT_INVALID": 171, - "STATS_HISTORY_SEARCH_TIME_GROUP_BY_INVALID": 192, - "STATS_HISTORY_SEARCH_ID_FILTER_INVALID": 172, - "STATS_HISTORY_SEARCH_PROJECT_ID_REQUIRED": 173, - "STATS_HISTORY_SEARCH_SUBSCRIPTION_NOT_SUPPORTED": 174, - "STATS_HISTORY_SEARCH_HISTORY_LIMIT_REACHED": 193, - "STATS_HISTORY_SEARCH_RANGE_INVALID": 274, - "STATS_HISTORY_SEARCH_EITHER_RANGE_OR_LIMIT_REQUIRED": 278, - "STATS_HISTORY_SEARCH_FULL_RANGE_REQUIRED": 276, - "TRANSACTION_DEBIT_SEARCH_LIMIT_INVALID": 260, - "TRANSACTION_DEBIT_SEARCH_TIME_GROUP_BY_INVALID": 261, - "TRANSACTION_DEBIT_SEARCH_RANGE_INVALID": 273, - "TRANSACTION_DEBIT_SEARCH_CLIENT_ID_REQUIRED": 262, - "TRANSACTION_DEBIT_SEARCH_ID_FILTER_INVALID": 263, - "TRANSACTION_DEBIT_SEARCH_EITHER_RANGE_OR_LIMIT_REQUIRED": 277, - "TRANSACTION_DEBIT_SEARCH_FULL_RANGE_REQUIRED": 272, - "TRANSACTION_DEBIT_SEARCH_TILL_AND_FROM_DATE_TIMEZONES_DIFFER": 300, - "TRANSACTION_DEBIT_SEARCH_UNKNOWN_TIMEZONE": 301, - "TRANSACTION_DEBIT_SEARCH_INVALID_FILTER": 271, - "GITHUB_VERIFICATION_EXPIRED": 188, - "INVALID_GITHUB_TOKEN_ACTION": 182, - "GITHUB_REQUEST_FAILED": 183, - "GITHUB_AUTHORIZATION_REQUIRED": 184, - "GITHUB_EMAIL_ACCESS_REQUIRED": 185, - "GITHUB_NO_VERIFIED_EMAIL_FOUND": 186, - "GITHUB_REPOSITORY_ACCESS_REQUIRED": 187, - "GITHUB_RATE_LIMIT_EXCEEDED": 189, - "SERVICE_STACK_NO_GITHUB_INTEGRATION": 206, - "BRANCH_NAME_REQUIRED": 207, - "TRIGGER_BUILD_REQUIRES_BRANCH_EVENT_TYPE": 268, - "USER_SERVICE_STACK_REQUIRED": 208, - "NO_EXTERNAL_REPOSITORY_INTEGRATION": 209, - "GITHUB_BRANCH_DELETED": 210, - "GITHUB_WEBHOOK_DELETED": 211, - "GITHUB_WEBHOOK_INVALID_PARAMETERS": 212, - "UNEXPECTED_GITHUB_FILE_ENCODING": 218, - "ZEROPS_BUILD_FILE_NOT_FOUND": 219, - "INCORRECT_WEBHOOK_SECRET": 213, - "UNSUPPORTED_WEBHOOK_EVENT_TYPE": 214, - "REPOSITORY_DOES_NOT_MATCH_SERVICE_STACK_SETTINGS": 215, - "PROJECT_STATUS_NOT_IN_NEW_CREATING_ACTIVE": 216, - "GITHUB_PUSH_IGNORED": 217, - "ZEROPS_BUILD_FILE_TOO_LARGE": 204, - "SAME_SERVICE_STACK_TYPE_USED": 205, - "GITHUB_WRONG_REPOSITORY_FULL_NAME_FORMAT": 220, - "GITHUB_WEBHOOKS_LIMIT_EXCEEDED": 221, - "AVATAR_UPLOAD_FORBIDDEN_IMAGE_TYPE": 222, - "AVATAR_UPLOAD_MAX_SIZE": 223, - "AVATAR_UPLOAD_FILE_NOT_FOUND": 224, - "GITLAB_RATE_LIMIT_EXCEEDED": 228, - "GITLAB_VERIFICATION_EXPIRED": 229, - "INVALID_GITLAB_TOKEN_ACTION": 230, - "GITLAB_REQUEST_FAILED": 231, - "GITLAB_AUTHORIZATION_REQUIRED": 232, - "GITLAB_FULL_API_ACCESS_REQUIRED": 233, - "MULTIPLE_INTEGRATIONS_ARE_FORBIDDEN": 234, - "GITLAB_BRANCH_DELETED": 235, - "GITLAB_WEBHOOK_DELETED": 236, - "GITLAB_WEBHOOK_INVALID_PARAMETERS": 237, - "SERVICE_STACK_NO_GITLAB_INTEGRATION": 238, - "GITLAB_PUSH_IGNORED": 239, - "YAML_FIELD_LENGTH_ERROR": 240, - "YAML_WRONG_USE_FIELD_TYPE": 241, - "VAT_NUMBER_NOT_IN_EUCOUNTRY": 254, - "COMPANY_NOT_FOUND_IN_EU": 258, - "VAT_NUMBER_MISSING": 244, - "PAYMENT_IN_PROGRESS": 245, - "DUPLICATE_VAT_NUMBER": 250, - "DUPLICATE_COMPANY_NUMBER": 302, - "CURRENCY_CHANGE": 303, - "ADMIN_USER_ACCOUNT_EXISTS": 266, - "CREDIT_LIMIT_REACHED": 246, - "INSUFFICIENT_CREDIT": 247, - "PROJECT_LOCK_FAILED": 248, - "PROJECT_UPDATE_FAILED": 249, - "MAXIMUM_AMOUNT_EXCEEDED": 267, - "PAYMENT_FAILED_ERROR": 252, - "PAYMENT_NOT_FOUND": 253, - "ADDON_NOT_FOUND": 255, - "INVOICE_NOT_FOUND": 259, - "PRICE_LIST_NOT_FOUND": 264, - "COST_LIMIT_TOO_SMALL": 279, - "PROJECT_IMPORT_INVALID_YAML": 289, - "PROJECT_IMPORT_INVALID_CONFIG_STRUCTURE": 290, - "PROJECT_IMPORT_INVALID_PARAMETER": 295, - "PROJECT_IMPORT_INVALID_TYPE_VERSION": 292, - "PROJECT_IMPORT_MISSING_PARAMETER": 293, - "PROJECT_IMPORT_UNABLE_TO_CREATE_SERVICE_STACK": 294, - "PROJECT_IMPORT_PROJECT_INCLUDED": 296, - "PROJECT_IMPORT_PROJECT_MISSING": 297, - "PROJECT_IMPORT_MISSING_SERVICE": 298, - "INVALID_CUSTOM_AUTOSCALING_VALUE": 309, - "INVALID_CUSTOM_AUTOSCALING_CPU_RAM_RATIO": 335, - "CUSTOM_VERTICAL_AUTOSCALING_FORBIDDEN_FOR_THIS_STACK_CATEGORY": 305, - "CUSTOM_HORIZONTAL_AUTOSCALING_FORBIDDEN_FOR_THIS_STACK_CATEGORY": 307, - "CUSTOM_HORIZONTAL_AUTOSCALING_FORBIDDEN_IN_NON_HA_MODE": 308, - "ACTION_FORBIDDEN_FOR_THIS_STACK_CATEGORY": 311, - "MODE_UPDATE_FORBIDDEN_FOR_THIS_STACK_CATEGORY": 312, - "YAML_VALIDATION_INVALID_YAML": 304, - "UNEXPECTED_YAML_ENCODING": 325, - "BUCKET_ALREADY_EXISTS": 336, - "S3_API_REQUEST_FAILED": 337, - "USER_ID_WAS_NOT_FOUND": 161, - "AUTHOR_ID_WAS_NOT_FOUND": 162, - "USER_DOES_NOT_HAVE_ACTIVE_CONNECTION_TO_ANY_CLIENT": 163, - "USER_HAS_NOT_ACCESS_TO_ZEROPS": 164, - "INVALID_EMAIL_TOKEN": 195, - "CLIENT_CREATE_FAILED": 321, - "CLIENT_ID_TOO_LONG": 322, - "TRANSFER_ID_TOO_LONG": 316, - "EMAIL_IS_INVALID": 313, - "USER_ACCOUNT_DELETED": 314, - "NO_CONTABO_CLIENT_CONNECTED": 315, - "AMBIGUOUS_USER": 330, - "AMBIGUOUS_USER_SIGN_IN": 331, - "UNSUPPORTED_CURRENCY": 317, - "INVALID_CURRENCY_CODE": 320, - "TRANSFER_PARAM_MISMATCH": 318, - "INVALID_AMOUNT": 333, - } -) - -func (x ErrorCode) Enum() *ErrorCode { - p := new(ErrorCode) - *p = x - return p -} - -func (x ErrorCode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ErrorCode) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[0].Descriptor() -} - -func (ErrorCode) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[0] -} - -func (x ErrorCode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ErrorCode.Descriptor instead. -func (ErrorCode) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{0} -} - -type AppVersionGithubIntegrationEventType int32 - -const ( - AppVersionGithubIntegrationEventType_APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_UNKNOWN AppVersionGithubIntegrationEventType = 0 - AppVersionGithubIntegrationEventType_APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_BRANCH AppVersionGithubIntegrationEventType = 1 - AppVersionGithubIntegrationEventType_APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_TAG AppVersionGithubIntegrationEventType = 2 -) - -// Enum value maps for AppVersionGithubIntegrationEventType. -var ( - AppVersionGithubIntegrationEventType_name = map[int32]string{ - 0: "APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_UNKNOWN", - 1: "APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_BRANCH", - 2: "APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_TAG", - } - AppVersionGithubIntegrationEventType_value = map[string]int32{ - "APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_UNKNOWN": 0, - "APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_BRANCH": 1, - "APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_TAG": 2, - } -) - -func (x AppVersionGithubIntegrationEventType) Enum() *AppVersionGithubIntegrationEventType { - p := new(AppVersionGithubIntegrationEventType) - *p = x - return p -} - -func (x AppVersionGithubIntegrationEventType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (AppVersionGithubIntegrationEventType) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[1].Descriptor() -} - -func (AppVersionGithubIntegrationEventType) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[1] -} - -func (x AppVersionGithubIntegrationEventType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use AppVersionGithubIntegrationEventType.Descriptor instead. -func (AppVersionGithubIntegrationEventType) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{1} -} - -type AppVersionGitlabIntegrationEventType int32 - -const ( - AppVersionGitlabIntegrationEventType_APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_UNKNOWN AppVersionGitlabIntegrationEventType = 0 - AppVersionGitlabIntegrationEventType_APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_BRANCH AppVersionGitlabIntegrationEventType = 1 - AppVersionGitlabIntegrationEventType_APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_TAG AppVersionGitlabIntegrationEventType = 2 -) - -// Enum value maps for AppVersionGitlabIntegrationEventType. -var ( - AppVersionGitlabIntegrationEventType_name = map[int32]string{ - 0: "APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_UNKNOWN", - 1: "APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_BRANCH", - 2: "APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_TAG", - } - AppVersionGitlabIntegrationEventType_value = map[string]int32{ - "APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_UNKNOWN": 0, - "APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_BRANCH": 1, - "APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_TAG": 2, - } -) - -func (x AppVersionGitlabIntegrationEventType) Enum() *AppVersionGitlabIntegrationEventType { - p := new(AppVersionGitlabIntegrationEventType) - *p = x - return p -} - -func (x AppVersionGitlabIntegrationEventType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (AppVersionGitlabIntegrationEventType) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[2].Descriptor() -} - -func (AppVersionGitlabIntegrationEventType) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[2] -} - -func (x AppVersionGitlabIntegrationEventType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use AppVersionGitlabIntegrationEventType.Descriptor instead. -func (AppVersionGitlabIntegrationEventType) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{2} -} - -type AppVersionSource int32 - -const ( - AppVersionSource_APP_VERSION_SOURCE_UNKNOWN AppVersionSource = 0 - AppVersionSource_APP_VERSION_SOURCE_CLI AppVersionSource = 1 - AppVersionSource_APP_VERSION_SOURCE_GUI AppVersionSource = 2 - AppVersionSource_APP_VERSION_SOURCE_GITHUB AppVersionSource = 3 - AppVersionSource_APP_VERSION_SOURCE_GITLAB AppVersionSource = 4 - AppVersionSource_APP_VERSION_SOURCE_GIT AppVersionSource = 5 -) - -// Enum value maps for AppVersionSource. -var ( - AppVersionSource_name = map[int32]string{ - 0: "APP_VERSION_SOURCE_UNKNOWN", - 1: "APP_VERSION_SOURCE_CLI", - 2: "APP_VERSION_SOURCE_GUI", - 3: "APP_VERSION_SOURCE_GITHUB", - 4: "APP_VERSION_SOURCE_GITLAB", - 5: "APP_VERSION_SOURCE_GIT", - } - AppVersionSource_value = map[string]int32{ - "APP_VERSION_SOURCE_UNKNOWN": 0, - "APP_VERSION_SOURCE_CLI": 1, - "APP_VERSION_SOURCE_GUI": 2, - "APP_VERSION_SOURCE_GITHUB": 3, - "APP_VERSION_SOURCE_GITLAB": 4, - "APP_VERSION_SOURCE_GIT": 5, - } -) - -func (x AppVersionSource) Enum() *AppVersionSource { - p := new(AppVersionSource) - *p = x - return p -} - -func (x AppVersionSource) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (AppVersionSource) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[3].Descriptor() -} - -func (AppVersionSource) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[3] -} - -func (x AppVersionSource) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use AppVersionSource.Descriptor instead. -func (AppVersionSource) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{3} -} - -type AppVersionStatus int32 - -const ( - AppVersionStatus_APP_VERSION_STATUS_UNKNOWN AppVersionStatus = 0 - AppVersionStatus_APP_VERSION_STATUS_UPLOADING AppVersionStatus = 1 - AppVersionStatus_APP_VERSION_STATUS_WAITING_TO_DEPLOY AppVersionStatus = 2 - AppVersionStatus_APP_VERSION_STATUS_DEPLOYING AppVersionStatus = 3 - AppVersionStatus_APP_VERSION_STATUS_DEPLOY_FAILED AppVersionStatus = 4 - AppVersionStatus_APP_VERSION_STATUS_ACTIVE AppVersionStatus = 5 - AppVersionStatus_APP_VERSION_STATUS_BACKUP AppVersionStatus = 6 - AppVersionStatus_APP_VERSION_STATUS_BUILDING AppVersionStatus = 7 - AppVersionStatus_APP_VERSION_STATUS_WAITING_TO_BUILD AppVersionStatus = 8 - AppVersionStatus_APP_VERSION_STATUS_BUILD_FAILED AppVersionStatus = 9 - AppVersionStatus_APP_VERSION_STATUS_PREPARING_RUNTIME AppVersionStatus = 10 - AppVersionStatus_APP_VERSION_STATUS_PREPARING_RUNTIME_FAILED AppVersionStatus = 11 - AppVersionStatus_APP_VERSION_STATUS_BUILD_VALIDATION_FAILED AppVersionStatus = 12 -) - -// Enum value maps for AppVersionStatus. -var ( - AppVersionStatus_name = map[int32]string{ - 0: "APP_VERSION_STATUS_UNKNOWN", - 1: "APP_VERSION_STATUS_UPLOADING", - 2: "APP_VERSION_STATUS_WAITING_TO_DEPLOY", - 3: "APP_VERSION_STATUS_DEPLOYING", - 4: "APP_VERSION_STATUS_DEPLOY_FAILED", - 5: "APP_VERSION_STATUS_ACTIVE", - 6: "APP_VERSION_STATUS_BACKUP", - 7: "APP_VERSION_STATUS_BUILDING", - 8: "APP_VERSION_STATUS_WAITING_TO_BUILD", - 9: "APP_VERSION_STATUS_BUILD_FAILED", - 10: "APP_VERSION_STATUS_PREPARING_RUNTIME", - 11: "APP_VERSION_STATUS_PREPARING_RUNTIME_FAILED", - 12: "APP_VERSION_STATUS_BUILD_VALIDATION_FAILED", - } - AppVersionStatus_value = map[string]int32{ - "APP_VERSION_STATUS_UNKNOWN": 0, - "APP_VERSION_STATUS_UPLOADING": 1, - "APP_VERSION_STATUS_WAITING_TO_DEPLOY": 2, - "APP_VERSION_STATUS_DEPLOYING": 3, - "APP_VERSION_STATUS_DEPLOY_FAILED": 4, - "APP_VERSION_STATUS_ACTIVE": 5, - "APP_VERSION_STATUS_BACKUP": 6, - "APP_VERSION_STATUS_BUILDING": 7, - "APP_VERSION_STATUS_WAITING_TO_BUILD": 8, - "APP_VERSION_STATUS_BUILD_FAILED": 9, - "APP_VERSION_STATUS_PREPARING_RUNTIME": 10, - "APP_VERSION_STATUS_PREPARING_RUNTIME_FAILED": 11, - "APP_VERSION_STATUS_BUILD_VALIDATION_FAILED": 12, - } -) - -func (x AppVersionStatus) Enum() *AppVersionStatus { - p := new(AppVersionStatus) - *p = x - return p -} - -func (x AppVersionStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (AppVersionStatus) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[4].Descriptor() -} - -func (AppVersionStatus) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[4] -} - -func (x AppVersionStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use AppVersionStatus.Descriptor instead. -func (AppVersionStatus) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{4} -} - -type ClientUserLightRoleCode int32 - -const ( - ClientUserLightRoleCode_CLIENT_USER_LIGHT_ROLE_CODE_UNKNOWN ClientUserLightRoleCode = 0 - ClientUserLightRoleCode_CLIENT_USER_LIGHT_ROLE_CODE_MANAGER ClientUserLightRoleCode = 1 -) - -// Enum value maps for ClientUserLightRoleCode. -var ( - ClientUserLightRoleCode_name = map[int32]string{ - 0: "CLIENT_USER_LIGHT_ROLE_CODE_UNKNOWN", - 1: "CLIENT_USER_LIGHT_ROLE_CODE_MANAGER", - } - ClientUserLightRoleCode_value = map[string]int32{ - "CLIENT_USER_LIGHT_ROLE_CODE_UNKNOWN": 0, - "CLIENT_USER_LIGHT_ROLE_CODE_MANAGER": 1, - } -) - -func (x ClientUserLightRoleCode) Enum() *ClientUserLightRoleCode { - p := new(ClientUserLightRoleCode) - *p = x - return p -} - -func (x ClientUserLightRoleCode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ClientUserLightRoleCode) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[5].Descriptor() -} - -func (ClientUserLightRoleCode) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[5] -} - -func (x ClientUserLightRoleCode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ClientUserLightRoleCode.Descriptor instead. -func (ClientUserLightRoleCode) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{5} -} - -type ClientUserLightStatus int32 - -const ( - ClientUserLightStatus_CLIENT_USER_LIGHT_STATUS_UNKNOWN ClientUserLightStatus = 0 - ClientUserLightStatus_CLIENT_USER_LIGHT_STATUS_ACTIVE ClientUserLightStatus = 1 - ClientUserLightStatus_CLIENT_USER_LIGHT_STATUS_WAITING_AUTHORIZATION ClientUserLightStatus = 2 - ClientUserLightStatus_CLIENT_USER_LIGHT_STATUS_BEING_DELETED ClientUserLightStatus = 3 -) - -// Enum value maps for ClientUserLightStatus. -var ( - ClientUserLightStatus_name = map[int32]string{ - 0: "CLIENT_USER_LIGHT_STATUS_UNKNOWN", - 1: "CLIENT_USER_LIGHT_STATUS_ACTIVE", - 2: "CLIENT_USER_LIGHT_STATUS_WAITING_AUTHORIZATION", - 3: "CLIENT_USER_LIGHT_STATUS_BEING_DELETED", - } - ClientUserLightStatus_value = map[string]int32{ - "CLIENT_USER_LIGHT_STATUS_UNKNOWN": 0, - "CLIENT_USER_LIGHT_STATUS_ACTIVE": 1, - "CLIENT_USER_LIGHT_STATUS_WAITING_AUTHORIZATION": 2, - "CLIENT_USER_LIGHT_STATUS_BEING_DELETED": 3, - } -) - -func (x ClientUserLightStatus) Enum() *ClientUserLightStatus { - p := new(ClientUserLightStatus) - *p = x - return p -} - -func (x ClientUserLightStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ClientUserLightStatus) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[6].Descriptor() -} - -func (ClientUserLightStatus) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[6] -} - -func (x ClientUserLightStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ClientUserLightStatus.Descriptor instead. -func (ClientUserLightStatus) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{6} -} - -type GithubIntegrationEventType int32 - -const ( - GithubIntegrationEventType_GITHUB_INTEGRATION_EVENT_TYPE_UNKNOWN GithubIntegrationEventType = 0 - GithubIntegrationEventType_GITHUB_INTEGRATION_EVENT_TYPE_BRANCH GithubIntegrationEventType = 1 - GithubIntegrationEventType_GITHUB_INTEGRATION_EVENT_TYPE_TAG GithubIntegrationEventType = 2 -) - -// Enum value maps for GithubIntegrationEventType. -var ( - GithubIntegrationEventType_name = map[int32]string{ - 0: "GITHUB_INTEGRATION_EVENT_TYPE_UNKNOWN", - 1: "GITHUB_INTEGRATION_EVENT_TYPE_BRANCH", - 2: "GITHUB_INTEGRATION_EVENT_TYPE_TAG", - } - GithubIntegrationEventType_value = map[string]int32{ - "GITHUB_INTEGRATION_EVENT_TYPE_UNKNOWN": 0, - "GITHUB_INTEGRATION_EVENT_TYPE_BRANCH": 1, - "GITHUB_INTEGRATION_EVENT_TYPE_TAG": 2, - } -) - -func (x GithubIntegrationEventType) Enum() *GithubIntegrationEventType { - p := new(GithubIntegrationEventType) - *p = x - return p -} - -func (x GithubIntegrationEventType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (GithubIntegrationEventType) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[7].Descriptor() -} - -func (GithubIntegrationEventType) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[7] -} - -func (x GithubIntegrationEventType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use GithubIntegrationEventType.Descriptor instead. -func (GithubIntegrationEventType) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{7} -} - -type GitlabIntegrationEventType int32 - -const ( - GitlabIntegrationEventType_GITLAB_INTEGRATION_EVENT_TYPE_UNKNOWN GitlabIntegrationEventType = 0 - GitlabIntegrationEventType_GITLAB_INTEGRATION_EVENT_TYPE_BRANCH GitlabIntegrationEventType = 1 - GitlabIntegrationEventType_GITLAB_INTEGRATION_EVENT_TYPE_TAG GitlabIntegrationEventType = 2 -) - -// Enum value maps for GitlabIntegrationEventType. -var ( - GitlabIntegrationEventType_name = map[int32]string{ - 0: "GITLAB_INTEGRATION_EVENT_TYPE_UNKNOWN", - 1: "GITLAB_INTEGRATION_EVENT_TYPE_BRANCH", - 2: "GITLAB_INTEGRATION_EVENT_TYPE_TAG", - } - GitlabIntegrationEventType_value = map[string]int32{ - "GITLAB_INTEGRATION_EVENT_TYPE_UNKNOWN": 0, - "GITLAB_INTEGRATION_EVENT_TYPE_BRANCH": 1, - "GITLAB_INTEGRATION_EVENT_TYPE_TAG": 2, - } -) - -func (x GitlabIntegrationEventType) Enum() *GitlabIntegrationEventType { - p := new(GitlabIntegrationEventType) - *p = x - return p -} - -func (x GitlabIntegrationEventType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (GitlabIntegrationEventType) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[8].Descriptor() -} - -func (GitlabIntegrationEventType) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[8] -} - -func (x GitlabIntegrationEventType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use GitlabIntegrationEventType.Descriptor instead. -func (GitlabIntegrationEventType) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{8} -} - -type ProcessStatus int32 - -const ( - ProcessStatus_PROCESS_STATUS_UNKNOWN ProcessStatus = 0 - ProcessStatus_PROCESS_STATUS_PENDING ProcessStatus = 1 - ProcessStatus_PROCESS_STATUS_RUNNING ProcessStatus = 2 - ProcessStatus_PROCESS_STATUS_ROLLBACKING ProcessStatus = 3 - ProcessStatus_PROCESS_STATUS_CANCELING ProcessStatus = 4 - ProcessStatus_PROCESS_STATUS_FINISHED ProcessStatus = 5 - ProcessStatus_PROCESS_STATUS_FAILED ProcessStatus = 6 - ProcessStatus_PROCESS_STATUS_CANCELED ProcessStatus = 7 -) - -// Enum value maps for ProcessStatus. -var ( - ProcessStatus_name = map[int32]string{ - 0: "PROCESS_STATUS_UNKNOWN", - 1: "PROCESS_STATUS_PENDING", - 2: "PROCESS_STATUS_RUNNING", - 3: "PROCESS_STATUS_ROLLBACKING", - 4: "PROCESS_STATUS_CANCELING", - 5: "PROCESS_STATUS_FINISHED", - 6: "PROCESS_STATUS_FAILED", - 7: "PROCESS_STATUS_CANCELED", - } - ProcessStatus_value = map[string]int32{ - "PROCESS_STATUS_UNKNOWN": 0, - "PROCESS_STATUS_PENDING": 1, - "PROCESS_STATUS_RUNNING": 2, - "PROCESS_STATUS_ROLLBACKING": 3, - "PROCESS_STATUS_CANCELING": 4, - "PROCESS_STATUS_FINISHED": 5, - "PROCESS_STATUS_FAILED": 6, - "PROCESS_STATUS_CANCELED": 7, - } -) - -func (x ProcessStatus) Enum() *ProcessStatus { - p := new(ProcessStatus) - *p = x - return p -} - -func (x ProcessStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ProcessStatus) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[9].Descriptor() -} - -func (ProcessStatus) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[9] -} - -func (x ProcessStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ProcessStatus.Descriptor instead. -func (ProcessStatus) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{9} -} - -type ProjectStatus int32 - -const ( - ProjectStatus_PROJECT_STATUS_UNKNOWN ProjectStatus = 0 - ProjectStatus_PROJECT_STATUS_NEW ProjectStatus = 1 - ProjectStatus_PROJECT_STATUS_CREATING ProjectStatus = 2 - ProjectStatus_PROJECT_STATUS_ACTIVE ProjectStatus = 3 - ProjectStatus_PROJECT_STATUS_DELETING ProjectStatus = 4 - ProjectStatus_PROJECT_STATUS_FAILED ProjectStatus = 5 - ProjectStatus_PROJECT_STATUS_STOPPING ProjectStatus = 6 - ProjectStatus_PROJECT_STATUS_STOPPED ProjectStatus = 7 - ProjectStatus_PROJECT_STATUS_STARTING ProjectStatus = 8 -) - -// Enum value maps for ProjectStatus. -var ( - ProjectStatus_name = map[int32]string{ - 0: "PROJECT_STATUS_UNKNOWN", - 1: "PROJECT_STATUS_NEW", - 2: "PROJECT_STATUS_CREATING", - 3: "PROJECT_STATUS_ACTIVE", - 4: "PROJECT_STATUS_DELETING", - 5: "PROJECT_STATUS_FAILED", - 6: "PROJECT_STATUS_STOPPING", - 7: "PROJECT_STATUS_STOPPED", - 8: "PROJECT_STATUS_STARTING", - } - ProjectStatus_value = map[string]int32{ - "PROJECT_STATUS_UNKNOWN": 0, - "PROJECT_STATUS_NEW": 1, - "PROJECT_STATUS_CREATING": 2, - "PROJECT_STATUS_ACTIVE": 3, - "PROJECT_STATUS_DELETING": 4, - "PROJECT_STATUS_FAILED": 5, - "PROJECT_STATUS_STOPPING": 6, - "PROJECT_STATUS_STOPPED": 7, - "PROJECT_STATUS_STARTING": 8, - } -) - -func (x ProjectStatus) Enum() *ProjectStatus { - p := new(ProjectStatus) - *p = x - return p -} - -func (x ProjectStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ProjectStatus) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[10].Descriptor() -} - -func (ProjectStatus) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[10] -} - -func (x ProjectStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ProjectStatus.Descriptor instead. -func (ProjectStatus) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{10} -} - -type PublicHttpRoutingDomainDnsCheckStatus int32 - -const ( - PublicHttpRoutingDomainDnsCheckStatus_PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_UNKNOWN PublicHttpRoutingDomainDnsCheckStatus = 0 - PublicHttpRoutingDomainDnsCheckStatus_PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_PENDING PublicHttpRoutingDomainDnsCheckStatus = 1 - PublicHttpRoutingDomainDnsCheckStatus_PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_CHECKING PublicHttpRoutingDomainDnsCheckStatus = 2 - PublicHttpRoutingDomainDnsCheckStatus_PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_OK PublicHttpRoutingDomainDnsCheckStatus = 3 - PublicHttpRoutingDomainDnsCheckStatus_PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_FAILED PublicHttpRoutingDomainDnsCheckStatus = 4 - PublicHttpRoutingDomainDnsCheckStatus_PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_IGNORED PublicHttpRoutingDomainDnsCheckStatus = 5 -) - -// Enum value maps for PublicHttpRoutingDomainDnsCheckStatus. -var ( - PublicHttpRoutingDomainDnsCheckStatus_name = map[int32]string{ - 0: "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_UNKNOWN", - 1: "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_PENDING", - 2: "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_CHECKING", - 3: "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_OK", - 4: "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_FAILED", - 5: "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_IGNORED", - } - PublicHttpRoutingDomainDnsCheckStatus_value = map[string]int32{ - "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_UNKNOWN": 0, - "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_PENDING": 1, - "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_CHECKING": 2, - "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_OK": 3, - "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_FAILED": 4, - "PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_IGNORED": 5, - } -) - -func (x PublicHttpRoutingDomainDnsCheckStatus) Enum() *PublicHttpRoutingDomainDnsCheckStatus { - p := new(PublicHttpRoutingDomainDnsCheckStatus) - *p = x - return p -} - -func (x PublicHttpRoutingDomainDnsCheckStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (PublicHttpRoutingDomainDnsCheckStatus) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[11].Descriptor() -} - -func (PublicHttpRoutingDomainDnsCheckStatus) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[11] -} - -func (x PublicHttpRoutingDomainDnsCheckStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use PublicHttpRoutingDomainDnsCheckStatus.Descriptor instead. -func (PublicHttpRoutingDomainDnsCheckStatus) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{11} -} - -type PublicHttpRoutingDomainSslStatus int32 - -const ( - PublicHttpRoutingDomainSslStatus_PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_UNKNOWN PublicHttpRoutingDomainSslStatus = 0 - PublicHttpRoutingDomainSslStatus_PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_INACTIVE PublicHttpRoutingDomainSslStatus = 1 - PublicHttpRoutingDomainSslStatus_PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_BEING_INSTALLED PublicHttpRoutingDomainSslStatus = 2 - PublicHttpRoutingDomainSslStatus_PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_WAITING_FOR_DNS PublicHttpRoutingDomainSslStatus = 3 - PublicHttpRoutingDomainSslStatus_PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_ACTIVE PublicHttpRoutingDomainSslStatus = 4 - PublicHttpRoutingDomainSslStatus_PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_INSTALLATION_FAILED PublicHttpRoutingDomainSslStatus = 5 -) - -// Enum value maps for PublicHttpRoutingDomainSslStatus. -var ( - PublicHttpRoutingDomainSslStatus_name = map[int32]string{ - 0: "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_UNKNOWN", - 1: "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_INACTIVE", - 2: "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_BEING_INSTALLED", - 3: "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_WAITING_FOR_DNS", - 4: "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_ACTIVE", - 5: "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_INSTALLATION_FAILED", - } - PublicHttpRoutingDomainSslStatus_value = map[string]int32{ - "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_UNKNOWN": 0, - "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_INACTIVE": 1, - "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_BEING_INSTALLED": 2, - "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_WAITING_FOR_DNS": 3, - "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_ACTIVE": 4, - "PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_INSTALLATION_FAILED": 5, - } -) - -func (x PublicHttpRoutingDomainSslStatus) Enum() *PublicHttpRoutingDomainSslStatus { - p := new(PublicHttpRoutingDomainSslStatus) - *p = x - return p -} - -func (x PublicHttpRoutingDomainSslStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (PublicHttpRoutingDomainSslStatus) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[12].Descriptor() -} - -func (PublicHttpRoutingDomainSslStatus) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[12] -} - -func (x PublicHttpRoutingDomainSslStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use PublicHttpRoutingDomainSslStatus.Descriptor instead. -func (PublicHttpRoutingDomainSslStatus) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{12} -} - -type ServicePortProtocol int32 - -const ( - ServicePortProtocol_SERVICE_PORT_PROTOCOL_UNKNOWN ServicePortProtocol = 0 - ServicePortProtocol_SERVICE_PORT_PROTOCOL_tcp ServicePortProtocol = 1 - ServicePortProtocol_SERVICE_PORT_PROTOCOL_udp ServicePortProtocol = 2 -) - -// Enum value maps for ServicePortProtocol. -var ( - ServicePortProtocol_name = map[int32]string{ - 0: "SERVICE_PORT_PROTOCOL_UNKNOWN", - 1: "SERVICE_PORT_PROTOCOL_tcp", - 2: "SERVICE_PORT_PROTOCOL_udp", - } - ServicePortProtocol_value = map[string]int32{ - "SERVICE_PORT_PROTOCOL_UNKNOWN": 0, - "SERVICE_PORT_PROTOCOL_tcp": 1, - "SERVICE_PORT_PROTOCOL_udp": 2, - } -) - -func (x ServicePortProtocol) Enum() *ServicePortProtocol { - p := new(ServicePortProtocol) - *p = x - return p -} - -func (x ServicePortProtocol) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServicePortProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[13].Descriptor() -} - -func (ServicePortProtocol) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[13] -} - -func (x ServicePortProtocol) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServicePortProtocol.Descriptor instead. -func (ServicePortProtocol) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{13} -} - -type ServicePortScheme int32 - -const ( - ServicePortScheme_SERVICE_PORT_SCHEME_UNKNOWN ServicePortScheme = 0 - ServicePortScheme_SERVICE_PORT_SCHEME_tcp ServicePortScheme = 1 - ServicePortScheme_SERVICE_PORT_SCHEME_udp ServicePortScheme = 2 - ServicePortScheme_SERVICE_PORT_SCHEME_http ServicePortScheme = 3 - ServicePortScheme_SERVICE_PORT_SCHEME_https ServicePortScheme = 4 - ServicePortScheme_SERVICE_PORT_SCHEME_redis ServicePortScheme = 5 - ServicePortScheme_SERVICE_PORT_SCHEME_mysql ServicePortScheme = 7 - ServicePortScheme_SERVICE_PORT_SCHEME_udpinflux ServicePortScheme = 8 - ServicePortScheme_SERVICE_PORT_SCHEME_mongodb ServicePortScheme = 9 - ServicePortScheme_SERVICE_PORT_SCHEME_postgresql ServicePortScheme = 10 - ServicePortScheme_SERVICE_PORT_SCHEME_amqp ServicePortScheme = 11 - ServicePortScheme_SERVICE_PORT_SCHEME_stomp ServicePortScheme = 12 - ServicePortScheme_SERVICE_PORT_SCHEME_mqtt ServicePortScheme = 13 -) - -// Enum value maps for ServicePortScheme. -var ( - ServicePortScheme_name = map[int32]string{ - 0: "SERVICE_PORT_SCHEME_UNKNOWN", - 1: "SERVICE_PORT_SCHEME_tcp", - 2: "SERVICE_PORT_SCHEME_udp", - 3: "SERVICE_PORT_SCHEME_http", - 4: "SERVICE_PORT_SCHEME_https", - 5: "SERVICE_PORT_SCHEME_redis", - 7: "SERVICE_PORT_SCHEME_mysql", - 8: "SERVICE_PORT_SCHEME_udpinflux", - 9: "SERVICE_PORT_SCHEME_mongodb", - 10: "SERVICE_PORT_SCHEME_postgresql", - 11: "SERVICE_PORT_SCHEME_amqp", - 12: "SERVICE_PORT_SCHEME_stomp", - 13: "SERVICE_PORT_SCHEME_mqtt", - } - ServicePortScheme_value = map[string]int32{ - "SERVICE_PORT_SCHEME_UNKNOWN": 0, - "SERVICE_PORT_SCHEME_tcp": 1, - "SERVICE_PORT_SCHEME_udp": 2, - "SERVICE_PORT_SCHEME_http": 3, - "SERVICE_PORT_SCHEME_https": 4, - "SERVICE_PORT_SCHEME_redis": 5, - "SERVICE_PORT_SCHEME_mysql": 7, - "SERVICE_PORT_SCHEME_udpinflux": 8, - "SERVICE_PORT_SCHEME_mongodb": 9, - "SERVICE_PORT_SCHEME_postgresql": 10, - "SERVICE_PORT_SCHEME_amqp": 11, - "SERVICE_PORT_SCHEME_stomp": 12, - "SERVICE_PORT_SCHEME_mqtt": 13, - } -) - -func (x ServicePortScheme) Enum() *ServicePortScheme { - p := new(ServicePortScheme) - *p = x - return p -} - -func (x ServicePortScheme) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServicePortScheme) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[14].Descriptor() -} - -func (ServicePortScheme) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[14] -} - -func (x ServicePortScheme) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServicePortScheme.Descriptor instead. -func (ServicePortScheme) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{14} -} - -type ServiceStackConnectionStatus int32 - -const ( - ServiceStackConnectionStatus_SERVICE_STACK_CONNECTION_STATUS_UNKNOWN ServiceStackConnectionStatus = 0 - ServiceStackConnectionStatus_SERVICE_STACK_CONNECTION_STATUS_CREATING ServiceStackConnectionStatus = 1 - ServiceStackConnectionStatus_SERVICE_STACK_CONNECTION_STATUS_ACTIVE ServiceStackConnectionStatus = 2 - ServiceStackConnectionStatus_SERVICE_STACK_CONNECTION_STATUS_DELETING ServiceStackConnectionStatus = 3 -) - -// Enum value maps for ServiceStackConnectionStatus. -var ( - ServiceStackConnectionStatus_name = map[int32]string{ - 0: "SERVICE_STACK_CONNECTION_STATUS_UNKNOWN", - 1: "SERVICE_STACK_CONNECTION_STATUS_CREATING", - 2: "SERVICE_STACK_CONNECTION_STATUS_ACTIVE", - 3: "SERVICE_STACK_CONNECTION_STATUS_DELETING", - } - ServiceStackConnectionStatus_value = map[string]int32{ - "SERVICE_STACK_CONNECTION_STATUS_UNKNOWN": 0, - "SERVICE_STACK_CONNECTION_STATUS_CREATING": 1, - "SERVICE_STACK_CONNECTION_STATUS_ACTIVE": 2, - "SERVICE_STACK_CONNECTION_STATUS_DELETING": 3, - } -) - -func (x ServiceStackConnectionStatus) Enum() *ServiceStackConnectionStatus { - p := new(ServiceStackConnectionStatus) - *p = x - return p -} - -func (x ServiceStackConnectionStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServiceStackConnectionStatus) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[15].Descriptor() -} - -func (ServiceStackConnectionStatus) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[15] -} - -func (x ServiceStackConnectionStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServiceStackConnectionStatus.Descriptor instead. -func (ServiceStackConnectionStatus) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{15} -} - -type ServiceStackMode int32 - -const ( - ServiceStackMode_SERVICE_STACK_MODE_UNKNOWN ServiceStackMode = 0 - ServiceStackMode_SERVICE_STACK_MODE_HA ServiceStackMode = 1 - ServiceStackMode_SERVICE_STACK_MODE_NON_HA ServiceStackMode = 2 -) - -// Enum value maps for ServiceStackMode. -var ( - ServiceStackMode_name = map[int32]string{ - 0: "SERVICE_STACK_MODE_UNKNOWN", - 1: "SERVICE_STACK_MODE_HA", - 2: "SERVICE_STACK_MODE_NON_HA", - } - ServiceStackMode_value = map[string]int32{ - "SERVICE_STACK_MODE_UNKNOWN": 0, - "SERVICE_STACK_MODE_HA": 1, - "SERVICE_STACK_MODE_NON_HA": 2, - } -) - -func (x ServiceStackMode) Enum() *ServiceStackMode { - p := new(ServiceStackMode) - *p = x - return p -} - -func (x ServiceStackMode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServiceStackMode) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[16].Descriptor() -} - -func (ServiceStackMode) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[16] -} - -func (x ServiceStackMode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServiceStackMode.Descriptor instead. -func (ServiceStackMode) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{16} -} - -type ServiceStackStatus int32 - -const ( - ServiceStackStatus_SERVICE_STACK_STATUS_UNKNOWN ServiceStackStatus = 0 - ServiceStackStatus_SERVICE_STACK_STATUS_NEW ServiceStackStatus = 1 - ServiceStackStatus_SERVICE_STACK_STATUS_CREATING ServiceStackStatus = 2 - ServiceStackStatus_SERVICE_STACK_STATUS_ACTIVE ServiceStackStatus = 3 - ServiceStackStatus_SERVICE_STACK_STATUS_STOPPING ServiceStackStatus = 4 - ServiceStackStatus_SERVICE_STACK_STATUS_STOPPED ServiceStackStatus = 5 - ServiceStackStatus_SERVICE_STACK_STATUS_STARTING ServiceStackStatus = 6 - ServiceStackStatus_SERVICE_STACK_STATUS_RESTARTING ServiceStackStatus = 7 - ServiceStackStatus_SERVICE_STACK_STATUS_RELOADING ServiceStackStatus = 8 - ServiceStackStatus_SERVICE_STACK_STATUS_DELETING ServiceStackStatus = 9 - ServiceStackStatus_SERVICE_STACK_STATUS_DELETED ServiceStackStatus = 10 - ServiceStackStatus_SERVICE_STACK_STATUS_FAILED ServiceStackStatus = 11 - ServiceStackStatus_SERVICE_STACK_STATUS_ACTION_FAILED ServiceStackStatus = 29 - ServiceStackStatus_SERVICE_STACK_STATUS_UPGRADING ServiceStackStatus = 13 - ServiceStackStatus_SERVICE_STACK_STATUS_READY_TO_DEPLOY ServiceStackStatus = 14 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_CREATING ServiceStackStatus = 18 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_ACTIVE ServiceStackStatus = 35 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_STOPPING ServiceStackStatus = 21 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_STOPPED ServiceStackStatus = 22 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_STARTING ServiceStackStatus = 23 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_RESTARTING ServiceStackStatus = 24 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_RELOADING ServiceStackStatus = 25 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_DELETING ServiceStackStatus = 15 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_DELETED ServiceStackStatus = 36 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_FAILED ServiceStackStatus = 16 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_ACTION_FAILED ServiceStackStatus = 28 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_REPAIRING ServiceStackStatus = 17 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_CONTAINER_FAILED ServiceStackStatus = 19 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_MOVING_CONTAINER ServiceStackStatus = 20 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_UPGRADING ServiceStackStatus = 26 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_SCALING ServiceStackStatus = 37 - ServiceStackStatus_SERVICE_STACK_STATUS_SERVICE_REPAIR_FAILED ServiceStackStatus = 38 - ServiceStackStatus_SERVICE_STACK_STATUS_REPAIRING ServiceStackStatus = 30 - ServiceStackStatus_SERVICE_STACK_STATUS_CONTAINER_FAILED ServiceStackStatus = 31 - ServiceStackStatus_SERVICE_STACK_STATUS_MOVING_CONTAINER ServiceStackStatus = 32 - ServiceStackStatus_SERVICE_STACK_STATUS_SCALING ServiceStackStatus = 33 - ServiceStackStatus_SERVICE_STACK_STATUS_REPAIR_FAILED ServiceStackStatus = 34 -) - -// Enum value maps for ServiceStackStatus. -var ( - ServiceStackStatus_name = map[int32]string{ - 0: "SERVICE_STACK_STATUS_UNKNOWN", - 1: "SERVICE_STACK_STATUS_NEW", - 2: "SERVICE_STACK_STATUS_CREATING", - 3: "SERVICE_STACK_STATUS_ACTIVE", - 4: "SERVICE_STACK_STATUS_STOPPING", - 5: "SERVICE_STACK_STATUS_STOPPED", - 6: "SERVICE_STACK_STATUS_STARTING", - 7: "SERVICE_STACK_STATUS_RESTARTING", - 8: "SERVICE_STACK_STATUS_RELOADING", - 9: "SERVICE_STACK_STATUS_DELETING", - 10: "SERVICE_STACK_STATUS_DELETED", - 11: "SERVICE_STACK_STATUS_FAILED", - 29: "SERVICE_STACK_STATUS_ACTION_FAILED", - 13: "SERVICE_STACK_STATUS_UPGRADING", - 14: "SERVICE_STACK_STATUS_READY_TO_DEPLOY", - 18: "SERVICE_STACK_STATUS_SERVICE_CREATING", - 35: "SERVICE_STACK_STATUS_SERVICE_ACTIVE", - 21: "SERVICE_STACK_STATUS_SERVICE_STOPPING", - 22: "SERVICE_STACK_STATUS_SERVICE_STOPPED", - 23: "SERVICE_STACK_STATUS_SERVICE_STARTING", - 24: "SERVICE_STACK_STATUS_SERVICE_RESTARTING", - 25: "SERVICE_STACK_STATUS_SERVICE_RELOADING", - 15: "SERVICE_STACK_STATUS_SERVICE_DELETING", - 36: "SERVICE_STACK_STATUS_SERVICE_DELETED", - 16: "SERVICE_STACK_STATUS_SERVICE_FAILED", - 28: "SERVICE_STACK_STATUS_SERVICE_ACTION_FAILED", - 17: "SERVICE_STACK_STATUS_SERVICE_REPAIRING", - 19: "SERVICE_STACK_STATUS_SERVICE_CONTAINER_FAILED", - 20: "SERVICE_STACK_STATUS_SERVICE_MOVING_CONTAINER", - 26: "SERVICE_STACK_STATUS_SERVICE_UPGRADING", - 37: "SERVICE_STACK_STATUS_SERVICE_SCALING", - 38: "SERVICE_STACK_STATUS_SERVICE_REPAIR_FAILED", - 30: "SERVICE_STACK_STATUS_REPAIRING", - 31: "SERVICE_STACK_STATUS_CONTAINER_FAILED", - 32: "SERVICE_STACK_STATUS_MOVING_CONTAINER", - 33: "SERVICE_STACK_STATUS_SCALING", - 34: "SERVICE_STACK_STATUS_REPAIR_FAILED", - } - ServiceStackStatus_value = map[string]int32{ - "SERVICE_STACK_STATUS_UNKNOWN": 0, - "SERVICE_STACK_STATUS_NEW": 1, - "SERVICE_STACK_STATUS_CREATING": 2, - "SERVICE_STACK_STATUS_ACTIVE": 3, - "SERVICE_STACK_STATUS_STOPPING": 4, - "SERVICE_STACK_STATUS_STOPPED": 5, - "SERVICE_STACK_STATUS_STARTING": 6, - "SERVICE_STACK_STATUS_RESTARTING": 7, - "SERVICE_STACK_STATUS_RELOADING": 8, - "SERVICE_STACK_STATUS_DELETING": 9, - "SERVICE_STACK_STATUS_DELETED": 10, - "SERVICE_STACK_STATUS_FAILED": 11, - "SERVICE_STACK_STATUS_ACTION_FAILED": 29, - "SERVICE_STACK_STATUS_UPGRADING": 13, - "SERVICE_STACK_STATUS_READY_TO_DEPLOY": 14, - "SERVICE_STACK_STATUS_SERVICE_CREATING": 18, - "SERVICE_STACK_STATUS_SERVICE_ACTIVE": 35, - "SERVICE_STACK_STATUS_SERVICE_STOPPING": 21, - "SERVICE_STACK_STATUS_SERVICE_STOPPED": 22, - "SERVICE_STACK_STATUS_SERVICE_STARTING": 23, - "SERVICE_STACK_STATUS_SERVICE_RESTARTING": 24, - "SERVICE_STACK_STATUS_SERVICE_RELOADING": 25, - "SERVICE_STACK_STATUS_SERVICE_DELETING": 15, - "SERVICE_STACK_STATUS_SERVICE_DELETED": 36, - "SERVICE_STACK_STATUS_SERVICE_FAILED": 16, - "SERVICE_STACK_STATUS_SERVICE_ACTION_FAILED": 28, - "SERVICE_STACK_STATUS_SERVICE_REPAIRING": 17, - "SERVICE_STACK_STATUS_SERVICE_CONTAINER_FAILED": 19, - "SERVICE_STACK_STATUS_SERVICE_MOVING_CONTAINER": 20, - "SERVICE_STACK_STATUS_SERVICE_UPGRADING": 26, - "SERVICE_STACK_STATUS_SERVICE_SCALING": 37, - "SERVICE_STACK_STATUS_SERVICE_REPAIR_FAILED": 38, - "SERVICE_STACK_STATUS_REPAIRING": 30, - "SERVICE_STACK_STATUS_CONTAINER_FAILED": 31, - "SERVICE_STACK_STATUS_MOVING_CONTAINER": 32, - "SERVICE_STACK_STATUS_SCALING": 33, - "SERVICE_STACK_STATUS_REPAIR_FAILED": 34, - } -) - -func (x ServiceStackStatus) Enum() *ServiceStackStatus { - p := new(ServiceStackStatus) - *p = x - return p -} - -func (x ServiceStackStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServiceStackStatus) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[17].Descriptor() -} - -func (ServiceStackStatus) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[17] -} - -func (x ServiceStackStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServiceStackStatus.Descriptor instead. -func (ServiceStackStatus) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{17} -} - -type ServiceStackTypeCategory int32 - -const ( - ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_UNKNOWN ServiceStackTypeCategory = 0 - ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_CORE ServiceStackTypeCategory = 1 - ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_HTTP_L7_BALANCER ServiceStackTypeCategory = 2 - ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_STANDARD ServiceStackTypeCategory = 3 - ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_USER ServiceStackTypeCategory = 4 - ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_SHARED_STORAGE ServiceStackTypeCategory = 5 - ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_OBJECT_STORAGE ServiceStackTypeCategory = 6 - ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_BUILD ServiceStackTypeCategory = 7 - ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_INTERNAL ServiceStackTypeCategory = 8 - ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_PREPARE_RUNTIME ServiceStackTypeCategory = 9 -) - -// Enum value maps for ServiceStackTypeCategory. -var ( - ServiceStackTypeCategory_name = map[int32]string{ - 0: "SERVICE_STACK_TYPE_CATEGORY_UNKNOWN", - 1: "SERVICE_STACK_TYPE_CATEGORY_CORE", - 2: "SERVICE_STACK_TYPE_CATEGORY_HTTP_L7_BALANCER", - 3: "SERVICE_STACK_TYPE_CATEGORY_STANDARD", - 4: "SERVICE_STACK_TYPE_CATEGORY_USER", - 5: "SERVICE_STACK_TYPE_CATEGORY_SHARED_STORAGE", - 6: "SERVICE_STACK_TYPE_CATEGORY_OBJECT_STORAGE", - 7: "SERVICE_STACK_TYPE_CATEGORY_BUILD", - 8: "SERVICE_STACK_TYPE_CATEGORY_INTERNAL", - 9: "SERVICE_STACK_TYPE_CATEGORY_PREPARE_RUNTIME", - } - ServiceStackTypeCategory_value = map[string]int32{ - "SERVICE_STACK_TYPE_CATEGORY_UNKNOWN": 0, - "SERVICE_STACK_TYPE_CATEGORY_CORE": 1, - "SERVICE_STACK_TYPE_CATEGORY_HTTP_L7_BALANCER": 2, - "SERVICE_STACK_TYPE_CATEGORY_STANDARD": 3, - "SERVICE_STACK_TYPE_CATEGORY_USER": 4, - "SERVICE_STACK_TYPE_CATEGORY_SHARED_STORAGE": 5, - "SERVICE_STACK_TYPE_CATEGORY_OBJECT_STORAGE": 6, - "SERVICE_STACK_TYPE_CATEGORY_BUILD": 7, - "SERVICE_STACK_TYPE_CATEGORY_INTERNAL": 8, - "SERVICE_STACK_TYPE_CATEGORY_PREPARE_RUNTIME": 9, - } -) - -func (x ServiceStackTypeCategory) Enum() *ServiceStackTypeCategory { - p := new(ServiceStackTypeCategory) - *p = x - return p -} - -func (x ServiceStackTypeCategory) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServiceStackTypeCategory) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[18].Descriptor() -} - -func (ServiceStackTypeCategory) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[18] -} - -func (x ServiceStackTypeCategory) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServiceStackTypeCategory.Descriptor instead. -func (ServiceStackTypeCategory) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{18} -} - -type UserDataType int32 - -const ( - UserDataType_USER_DATA_TYPE_UNKNOWN UserDataType = 0 - UserDataType_USER_DATA_TYPE_RESTRICTED UserDataType = 1 - UserDataType_USER_DATA_TYPE_COMMON UserDataType = 2 - UserDataType_USER_DATA_TYPE_USER UserDataType = 3 - UserDataType_USER_DATA_TYPE_INTERNAL UserDataType = 4 -) - -// Enum value maps for UserDataType. -var ( - UserDataType_name = map[int32]string{ - 0: "USER_DATA_TYPE_UNKNOWN", - 1: "USER_DATA_TYPE_RESTRICTED", - 2: "USER_DATA_TYPE_COMMON", - 3: "USER_DATA_TYPE_USER", - 4: "USER_DATA_TYPE_INTERNAL", - } - UserDataType_value = map[string]int32{ - "USER_DATA_TYPE_UNKNOWN": 0, - "USER_DATA_TYPE_RESTRICTED": 1, - "USER_DATA_TYPE_COMMON": 2, - "USER_DATA_TYPE_USER": 3, - "USER_DATA_TYPE_INTERNAL": 4, - } -) - -func (x UserDataType) Enum() *UserDataType { - p := new(UserDataType) - *p = x - return p -} - -func (x UserDataType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (UserDataType) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[19].Descriptor() -} - -func (UserDataType) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[19] -} - -func (x UserDataType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use UserDataType.Descriptor instead. -func (UserDataType) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{19} -} - -type UserDataVersion int32 - -const ( - UserDataVersion_USER_DATA_VERSION_UNKNOWN UserDataVersion = 0 - UserDataVersion_USER_DATA_VERSION_USER UserDataVersion = 1 - UserDataVersion_USER_DATA_VERSION_INFRASTRUCTURE UserDataVersion = 2 -) - -// Enum value maps for UserDataVersion. -var ( - UserDataVersion_name = map[int32]string{ - 0: "USER_DATA_VERSION_UNKNOWN", - 1: "USER_DATA_VERSION_USER", - 2: "USER_DATA_VERSION_INFRASTRUCTURE", - } - UserDataVersion_value = map[string]int32{ - "USER_DATA_VERSION_UNKNOWN": 0, - "USER_DATA_VERSION_USER": 1, - "USER_DATA_VERSION_INFRASTRUCTURE": 2, - } -) - -func (x UserDataVersion) Enum() *UserDataVersion { - p := new(UserDataVersion) - *p = x - return p -} - -func (x UserDataVersion) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (UserDataVersion) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[20].Descriptor() -} - -func (UserDataVersion) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[20] -} - -func (x UserDataVersion) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use UserDataVersion.Descriptor instead. -func (UserDataVersion) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{20} -} - -type UserJsonObjectType int32 - -const ( - UserJsonObjectType_USER_JSON_OBJECT_TYPE_UNKNOWN UserJsonObjectType = 0 - UserJsonObjectType_USER_JSON_OBJECT_TYPE_GITHUB UserJsonObjectType = 1 - UserJsonObjectType_USER_JSON_OBJECT_TYPE_GITLAB UserJsonObjectType = 4 - UserJsonObjectType_USER_JSON_OBJECT_TYPE_USER UserJsonObjectType = 2 - UserJsonObjectType_USER_JSON_OBJECT_TYPE_SYSTEM UserJsonObjectType = 3 -) - -// Enum value maps for UserJsonObjectType. -var ( - UserJsonObjectType_name = map[int32]string{ - 0: "USER_JSON_OBJECT_TYPE_UNKNOWN", - 1: "USER_JSON_OBJECT_TYPE_GITHUB", - 4: "USER_JSON_OBJECT_TYPE_GITLAB", - 2: "USER_JSON_OBJECT_TYPE_USER", - 3: "USER_JSON_OBJECT_TYPE_SYSTEM", - } - UserJsonObjectType_value = map[string]int32{ - "USER_JSON_OBJECT_TYPE_UNKNOWN": 0, - "USER_JSON_OBJECT_TYPE_GITHUB": 1, - "USER_JSON_OBJECT_TYPE_GITLAB": 4, - "USER_JSON_OBJECT_TYPE_USER": 2, - "USER_JSON_OBJECT_TYPE_SYSTEM": 3, - } -) - -func (x UserJsonObjectType) Enum() *UserJsonObjectType { - p := new(UserJsonObjectType) - *p = x - return p -} - -func (x UserJsonObjectType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (UserJsonObjectType) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[21].Descriptor() -} - -func (UserJsonObjectType) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[21] -} - -func (x UserJsonObjectType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use UserJsonObjectType.Descriptor instead. -func (UserJsonObjectType) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{21} -} - -type UserStatus int32 - -const ( - UserStatus_USER_STATUS_UNKNOWN UserStatus = 0 - UserStatus_USER_STATUS_ACTIVE UserStatus = 1 - UserStatus_USER_STATUS_DELETED UserStatus = 2 -) - -// Enum value maps for UserStatus. -var ( - UserStatus_name = map[int32]string{ - 0: "USER_STATUS_UNKNOWN", - 1: "USER_STATUS_ACTIVE", - 2: "USER_STATUS_DELETED", - } - UserStatus_value = map[string]int32{ - "USER_STATUS_UNKNOWN": 0, - "USER_STATUS_ACTIVE": 1, - "USER_STATUS_DELETED": 2, - } -) - -func (x UserStatus) Enum() *UserStatus { - p := new(UserStatus) - *p = x - return p -} - -func (x UserStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (UserStatus) Descriptor() protoreflect.EnumDescriptor { - return file_zeropsApiProtocol_proto_enumTypes[22].Descriptor() -} - -func (UserStatus) Type() protoreflect.EnumType { - return &file_zeropsApiProtocol_proto_enumTypes[22] -} - -func (x UserStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use UserStatus.Descriptor instead. -func (UserStatus) EnumDescriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{22} -} - -type Error struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Code ErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=zBusinessZeropsApiProtocol.ErrorCode" json:"code,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` - Meta []byte `protobuf:"bytes,3,opt,name=meta,proto3" json:"meta,omitempty"` -} - -func (x *Error) Reset() { - *x = Error{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Error) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Error) ProtoMessage() {} - -func (x *Error) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_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 Error.ProtoReflect.Descriptor instead. -func (*Error) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{0} -} - -func (x *Error) GetCode() ErrorCode { - if x != nil { - return x.Code - } - return ErrorCode_NO_ERROR -} - -func (x *Error) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -func (x *Error) GetMeta() []byte { - if x != nil { - return x.Meta - } - return nil -} - -type ErrorNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *Error `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *ErrorNull) Reset() { - *x = ErrorNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ErrorNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ErrorNull) ProtoMessage() {} - -func (x *ErrorNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_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 ErrorNull.ProtoReflect.Descriptor instead. -func (*ErrorNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{1} -} - -func (x *ErrorNull) GetValue() *Error { - if x != nil { - return x.Value - } - return nil -} - -func (x *ErrorNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type Timestamp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsSet bool `protobuf:"varint,1,opt,name=isSet,proto3" json:"isSet,omitempty"` - Seconds int64 `protobuf:"varint,2,opt,name=seconds,proto3" json:"seconds,omitempty"` - Nanos int32 `protobuf:"varint,3,opt,name=nanos,proto3" json:"nanos,omitempty"` -} - -func (x *Timestamp) Reset() { - *x = Timestamp{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Timestamp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Timestamp) ProtoMessage() {} - -func (x *Timestamp) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_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 Timestamp.ProtoReflect.Descriptor instead. -func (*Timestamp) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{2} -} - -func (x *Timestamp) GetIsSet() bool { - if x != nil { - return x.IsSet - } - return false -} - -func (x *Timestamp) GetSeconds() int64 { - if x != nil { - return x.Seconds - } - return 0 -} - -func (x *Timestamp) GetNanos() int32 { - if x != nil { - return x.Nanos - } - return 0 -} - -type DeleteProjectRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteProjectRequest) Reset() { - *x = DeleteProjectRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteProjectRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteProjectRequest) ProtoMessage() {} - -func (x *DeleteProjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_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 DeleteProjectRequest.ProtoReflect.Descriptor instead. -func (*DeleteProjectRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{3} -} - -func (x *DeleteProjectRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type DeleteServiceStackRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteServiceStackRequest) Reset() { - *x = DeleteServiceStackRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteServiceStackRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteServiceStackRequest) ProtoMessage() {} - -func (x *DeleteServiceStackRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_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 DeleteServiceStackRequest.ProtoReflect.Descriptor instead. -func (*DeleteServiceStackRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{4} -} - -func (x *DeleteServiceStackRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type GetProcessRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *GetProcessRequest) Reset() { - *x = GetProcessRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetProcessRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetProcessRequest) ProtoMessage() {} - -func (x *GetProcessRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_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 GetProcessRequest.ProtoReflect.Descriptor instead. -func (*GetProcessRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{5} -} - -func (x *GetProcessRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type GetProjectsByNameRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *GetProjectsByNameRequest) Reset() { - *x = GetProjectsByNameRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetProjectsByNameRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetProjectsByNameRequest) ProtoMessage() {} - -func (x *GetProjectsByNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_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 GetProjectsByNameRequest.ProtoReflect.Descriptor instead. -func (*GetProjectsByNameRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{6} -} - -func (x *GetProjectsByNameRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type GetServiceStackRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *GetServiceStackRequest) Reset() { - *x = GetServiceStackRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServiceStackRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServiceStackRequest) ProtoMessage() {} - -func (x *GetServiceStackRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_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 GetServiceStackRequest.ProtoReflect.Descriptor instead. -func (*GetServiceStackRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{7} -} - -func (x *GetServiceStackRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type GetServiceStackByNameRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ProjectId string `protobuf:"bytes,2,opt,name=projectId,proto3" json:"projectId,omitempty"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *GetServiceStackByNameRequest) Reset() { - *x = GetServiceStackByNameRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServiceStackByNameRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServiceStackByNameRequest) ProtoMessage() {} - -func (x *GetServiceStackByNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[8] - 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 GetServiceStackByNameRequest.ProtoReflect.Descriptor instead. -func (*GetServiceStackByNameRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{8} -} - -func (x *GetServiceStackByNameRequest) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *GetServiceStackByNameRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type GetUserInfoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *GetUserInfoRequest) Reset() { - *x = GetUserInfoRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetUserInfoRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetUserInfoRequest) ProtoMessage() {} - -func (x *GetUserInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[9] - 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 GetUserInfoRequest.ProtoReflect.Descriptor instead. -func (*GetUserInfoRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{9} -} - -type PostAppVersionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServiceStackId string `protobuf:"bytes,1,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Name *StringNull `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *PostAppVersionRequest) Reset() { - *x = PostAppVersionRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostAppVersionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostAppVersionRequest) ProtoMessage() {} - -func (x *PostAppVersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[10] - 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 PostAppVersionRequest.ProtoReflect.Descriptor instead. -func (*PostAppVersionRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{10} -} - -func (x *PostAppVersionRequest) GetServiceStackId() string { - if x != nil { - return x.ServiceStackId - } - return "" -} - -func (x *PostAppVersionRequest) GetName() *StringNull { - if x != nil { - return x.Name - } - return nil -} - -type PostProjectImportRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ClientId string `protobuf:"bytes,1,opt,name=clientId,proto3" json:"clientId,omitempty"` - Yaml string `protobuf:"bytes,2,opt,name=yaml,proto3" json:"yaml,omitempty"` -} - -func (x *PostProjectImportRequest) Reset() { - *x = PostProjectImportRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostProjectImportRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostProjectImportRequest) ProtoMessage() {} - -func (x *PostProjectImportRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[11] - 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 PostProjectImportRequest.ProtoReflect.Descriptor instead. -func (*PostProjectImportRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{11} -} - -func (x *PostProjectImportRequest) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *PostProjectImportRequest) GetYaml() string { - if x != nil { - return x.Yaml - } - return "" -} - -type PostPublicHttpRoutingRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ProjectId string `protobuf:"bytes,1,opt,name=projectId,proto3" json:"projectId,omitempty"` - SslEnabled bool `protobuf:"varint,2,opt,name=sslEnabled,proto3" json:"sslEnabled,omitempty"` - Domains []string `protobuf:"bytes,3,rep,name=domains,proto3" json:"domains,omitempty"` - Locations []*PublicHttpRoutingLocationPost `protobuf:"bytes,4,rep,name=locations,proto3" json:"locations,omitempty"` -} - -func (x *PostPublicHttpRoutingRequest) Reset() { - *x = PostPublicHttpRoutingRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostPublicHttpRoutingRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostPublicHttpRoutingRequest) ProtoMessage() {} - -func (x *PostPublicHttpRoutingRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[12] - 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 PostPublicHttpRoutingRequest.ProtoReflect.Descriptor instead. -func (*PostPublicHttpRoutingRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{12} -} - -func (x *PostPublicHttpRoutingRequest) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PostPublicHttpRoutingRequest) GetSslEnabled() bool { - if x != nil { - return x.SslEnabled - } - return false -} - -func (x *PostPublicHttpRoutingRequest) GetDomains() []string { - if x != nil { - return x.Domains - } - return nil -} - -func (x *PostPublicHttpRoutingRequest) GetLocations() []*PublicHttpRoutingLocationPost { - if x != nil { - return x.Locations - } - return nil -} - -type PostServiceStackImportRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ProjectId string `protobuf:"bytes,1,opt,name=projectId,proto3" json:"projectId,omitempty"` - Yaml string `protobuf:"bytes,2,opt,name=yaml,proto3" json:"yaml,omitempty"` -} - -func (x *PostServiceStackImportRequest) Reset() { - *x = PostServiceStackImportRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostServiceStackImportRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostServiceStackImportRequest) ProtoMessage() {} - -func (x *PostServiceStackImportRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[13] - 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 PostServiceStackImportRequest.ProtoReflect.Descriptor instead. -func (*PostServiceStackImportRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{13} -} - -func (x *PostServiceStackImportRequest) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PostServiceStackImportRequest) GetYaml() string { - if x != nil { - return x.Yaml - } - return "" -} - -type PostVpnRequestRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientPublicKey string `protobuf:"bytes,2,opt,name=clientPublicKey,proto3" json:"clientPublicKey,omitempty"` -} - -func (x *PostVpnRequestRequest) Reset() { - *x = PostVpnRequestRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostVpnRequestRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostVpnRequestRequest) ProtoMessage() {} - -func (x *PostVpnRequestRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[14] - 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 PostVpnRequestRequest.ProtoReflect.Descriptor instead. -func (*PostVpnRequestRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{14} -} - -func (x *PostVpnRequestRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PostVpnRequestRequest) GetClientPublicKey() string { - if x != nil { - return x.ClientPublicKey - } - return "" -} - -type PublicHttpRoutingLocationPost struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` - ServiceStackId string `protobuf:"bytes,3,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` -} - -func (x *PublicHttpRoutingLocationPost) Reset() { - *x = PublicHttpRoutingLocationPost{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PublicHttpRoutingLocationPost) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PublicHttpRoutingLocationPost) ProtoMessage() {} - -func (x *PublicHttpRoutingLocationPost) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[15] - 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 PublicHttpRoutingLocationPost.ProtoReflect.Descriptor instead. -func (*PublicHttpRoutingLocationPost) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{15} -} - -func (x *PublicHttpRoutingLocationPost) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -func (x *PublicHttpRoutingLocationPost) GetPort() int32 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *PublicHttpRoutingLocationPost) GetServiceStackId() string { - if x != nil { - return x.ServiceStackId - } - return "" -} - -type PutAppVersionBuildAndDeployRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - BuildConfigContent string `protobuf:"bytes,5,opt,name=buildConfigContent,proto3" json:"buildConfigContent,omitempty"` - Source *StringNull `protobuf:"bytes,7,opt,name=source,proto3" json:"source,omitempty"` -} - -func (x *PutAppVersionBuildAndDeployRequest) Reset() { - *x = PutAppVersionBuildAndDeployRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutAppVersionBuildAndDeployRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutAppVersionBuildAndDeployRequest) ProtoMessage() {} - -func (x *PutAppVersionBuildAndDeployRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[16] - 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 PutAppVersionBuildAndDeployRequest.ProtoReflect.Descriptor instead. -func (*PutAppVersionBuildAndDeployRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{16} -} - -func (x *PutAppVersionBuildAndDeployRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PutAppVersionBuildAndDeployRequest) GetBuildConfigContent() string { - if x != nil { - return x.BuildConfigContent - } - return "" -} - -func (x *PutAppVersionBuildAndDeployRequest) GetSource() *StringNull { - if x != nil { - return x.Source - } - return nil -} - -type PutAppVersionDeployRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ConfigContent *StringNull `protobuf:"bytes,3,opt,name=configContent,proto3" json:"configContent,omitempty"` - Source *StringNull `protobuf:"bytes,4,opt,name=source,proto3" json:"source,omitempty"` -} - -func (x *PutAppVersionDeployRequest) Reset() { - *x = PutAppVersionDeployRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutAppVersionDeployRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutAppVersionDeployRequest) ProtoMessage() {} - -func (x *PutAppVersionDeployRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[17] - 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 PutAppVersionDeployRequest.ProtoReflect.Descriptor instead. -func (*PutAppVersionDeployRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{17} -} - -func (x *PutAppVersionDeployRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PutAppVersionDeployRequest) GetConfigContent() *StringNull { - if x != nil { - return x.ConfigContent - } - return nil -} - -func (x *PutAppVersionDeployRequest) GetSource() *StringNull { - if x != nil { - return x.Source - } - return nil -} - -type PutProjectStartRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *PutProjectStartRequest) Reset() { - *x = PutProjectStartRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutProjectStartRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutProjectStartRequest) ProtoMessage() {} - -func (x *PutProjectStartRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[18] - 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 PutProjectStartRequest.ProtoReflect.Descriptor instead. -func (*PutProjectStartRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{18} -} - -func (x *PutProjectStartRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type PutProjectStopRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *PutProjectStopRequest) Reset() { - *x = PutProjectStopRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutProjectStopRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutProjectStopRequest) ProtoMessage() {} - -func (x *PutProjectStopRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[19] - 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 PutProjectStopRequest.ProtoReflect.Descriptor instead. -func (*PutProjectStopRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{19} -} - -func (x *PutProjectStopRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type PutServiceStackRestartRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *PutServiceStackRestartRequest) Reset() { - *x = PutServiceStackRestartRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutServiceStackRestartRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutServiceStackRestartRequest) ProtoMessage() {} - -func (x *PutServiceStackRestartRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[20] - 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 PutServiceStackRestartRequest.ProtoReflect.Descriptor instead. -func (*PutServiceStackRestartRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{20} -} - -func (x *PutServiceStackRestartRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type PutServiceStackStartRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *PutServiceStackStartRequest) Reset() { - *x = PutServiceStackStartRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutServiceStackStartRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutServiceStackStartRequest) ProtoMessage() {} - -func (x *PutServiceStackStartRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[21] - 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 PutServiceStackStartRequest.ProtoReflect.Descriptor instead. -func (*PutServiceStackStartRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{21} -} - -func (x *PutServiceStackStartRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type PutServiceStackStopRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *PutServiceStackStopRequest) Reset() { - *x = PutServiceStackStopRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutServiceStackStopRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutServiceStackStopRequest) ProtoMessage() {} - -func (x *PutServiceStackStopRequest) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[22] - 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 PutServiceStackStopRequest.ProtoReflect.Descriptor instead. -func (*PutServiceStackStopRequest) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{22} -} - -func (x *PutServiceStackStopRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type DeleteProjectResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *DeleteProjectResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *DeleteProjectResponse) Reset() { - *x = DeleteProjectResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteProjectResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteProjectResponse) ProtoMessage() {} - -func (x *DeleteProjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[23] - 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 DeleteProjectResponse.ProtoReflect.Descriptor instead. -func (*DeleteProjectResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{23} -} - -func (x *DeleteProjectResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *DeleteProjectResponse) GetOutput() *DeleteProjectResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type DeleteProjectResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,4,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Project *ProjectLightJsonObject `protobuf:"bytes,5,opt,name=project,proto3" json:"project,omitempty"` - ServiceStacks []*ServiceStackLightJsonObject `protobuf:"bytes,6,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` - Status ProcessStatus `protobuf:"varint,7,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProcessStatus" json:"status,omitempty"` - Sequence int32 `protobuf:"varint,8,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreatedByUser *UserJsonObject `protobuf:"bytes,9,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - CanceledByUser *UserJsonObjectNull `protobuf:"bytes,10,opt,name=canceledByUser,proto3" json:"canceledByUser,omitempty"` - ActionName string `protobuf:"bytes,11,opt,name=actionName,proto3" json:"actionName,omitempty"` - Created *Timestamp `protobuf:"bytes,12,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,13,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Started *TimestampNull `protobuf:"bytes,14,opt,name=started,proto3" json:"started,omitempty"` - Finished *TimestampNull `protobuf:"bytes,15,opt,name=finished,proto3" json:"finished,omitempty"` - CreatedBySystem bool `protobuf:"varint,16,opt,name=createdBySystem,proto3" json:"createdBySystem,omitempty"` - AppVersion *AppVersionJsonObjectNull `protobuf:"bytes,17,opt,name=appVersion,proto3" json:"appVersion,omitempty"` -} - -func (x *DeleteProjectResponseDto) Reset() { - *x = DeleteProjectResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteProjectResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteProjectResponseDto) ProtoMessage() {} - -func (x *DeleteProjectResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[24] - 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 DeleteProjectResponseDto.ProtoReflect.Descriptor instead. -func (*DeleteProjectResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{24} -} - -func (x *DeleteProjectResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *DeleteProjectResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *DeleteProjectResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *DeleteProjectResponseDto) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *DeleteProjectResponseDto) GetProject() *ProjectLightJsonObject { - if x != nil { - return x.Project - } - return nil -} - -func (x *DeleteProjectResponseDto) GetServiceStacks() []*ServiceStackLightJsonObject { - if x != nil { - return x.ServiceStacks - } - return nil -} - -func (x *DeleteProjectResponseDto) GetStatus() ProcessStatus { - if x != nil { - return x.Status - } - return ProcessStatus_PROCESS_STATUS_UNKNOWN -} - -func (x *DeleteProjectResponseDto) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *DeleteProjectResponseDto) GetCreatedByUser() *UserJsonObject { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *DeleteProjectResponseDto) GetCanceledByUser() *UserJsonObjectNull { - if x != nil { - return x.CanceledByUser - } - return nil -} - -func (x *DeleteProjectResponseDto) GetActionName() string { - if x != nil { - return x.ActionName - } - return "" -} - -func (x *DeleteProjectResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *DeleteProjectResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *DeleteProjectResponseDto) GetStarted() *TimestampNull { - if x != nil { - return x.Started - } - return nil -} - -func (x *DeleteProjectResponseDto) GetFinished() *TimestampNull { - if x != nil { - return x.Finished - } - return nil -} - -func (x *DeleteProjectResponseDto) GetCreatedBySystem() bool { - if x != nil { - return x.CreatedBySystem - } - return false -} - -func (x *DeleteProjectResponseDto) GetAppVersion() *AppVersionJsonObjectNull { - if x != nil { - return x.AppVersion - } - return nil -} - -type DeleteServiceStackResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *DeleteServiceStackResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *DeleteServiceStackResponse) Reset() { - *x = DeleteServiceStackResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteServiceStackResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteServiceStackResponse) ProtoMessage() {} - -func (x *DeleteServiceStackResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[25] - 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 DeleteServiceStackResponse.ProtoReflect.Descriptor instead. -func (*DeleteServiceStackResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{25} -} - -func (x *DeleteServiceStackResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *DeleteServiceStackResponse) GetOutput() *DeleteServiceStackResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type DeleteServiceStackResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,4,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Project *ProjectLightJsonObject `protobuf:"bytes,5,opt,name=project,proto3" json:"project,omitempty"` - ServiceStacks []*ServiceStackLightJsonObject `protobuf:"bytes,6,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` - Status ProcessStatus `protobuf:"varint,7,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProcessStatus" json:"status,omitempty"` - Sequence int32 `protobuf:"varint,8,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreatedByUser *UserJsonObject `protobuf:"bytes,9,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - CanceledByUser *UserJsonObjectNull `protobuf:"bytes,10,opt,name=canceledByUser,proto3" json:"canceledByUser,omitempty"` - ActionName string `protobuf:"bytes,11,opt,name=actionName,proto3" json:"actionName,omitempty"` - Created *Timestamp `protobuf:"bytes,12,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,13,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Started *TimestampNull `protobuf:"bytes,14,opt,name=started,proto3" json:"started,omitempty"` - Finished *TimestampNull `protobuf:"bytes,15,opt,name=finished,proto3" json:"finished,omitempty"` - CreatedBySystem bool `protobuf:"varint,16,opt,name=createdBySystem,proto3" json:"createdBySystem,omitempty"` - AppVersion *AppVersionJsonObjectNull `protobuf:"bytes,17,opt,name=appVersion,proto3" json:"appVersion,omitempty"` -} - -func (x *DeleteServiceStackResponseDto) Reset() { - *x = DeleteServiceStackResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteServiceStackResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteServiceStackResponseDto) ProtoMessage() {} - -func (x *DeleteServiceStackResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[26] - 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 DeleteServiceStackResponseDto.ProtoReflect.Descriptor instead. -func (*DeleteServiceStackResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{26} -} - -func (x *DeleteServiceStackResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *DeleteServiceStackResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *DeleteServiceStackResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *DeleteServiceStackResponseDto) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *DeleteServiceStackResponseDto) GetProject() *ProjectLightJsonObject { - if x != nil { - return x.Project - } - return nil -} - -func (x *DeleteServiceStackResponseDto) GetServiceStacks() []*ServiceStackLightJsonObject { - if x != nil { - return x.ServiceStacks - } - return nil -} - -func (x *DeleteServiceStackResponseDto) GetStatus() ProcessStatus { - if x != nil { - return x.Status - } - return ProcessStatus_PROCESS_STATUS_UNKNOWN -} - -func (x *DeleteServiceStackResponseDto) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *DeleteServiceStackResponseDto) GetCreatedByUser() *UserJsonObject { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *DeleteServiceStackResponseDto) GetCanceledByUser() *UserJsonObjectNull { - if x != nil { - return x.CanceledByUser - } - return nil -} - -func (x *DeleteServiceStackResponseDto) GetActionName() string { - if x != nil { - return x.ActionName - } - return "" -} - -func (x *DeleteServiceStackResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *DeleteServiceStackResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *DeleteServiceStackResponseDto) GetStarted() *TimestampNull { - if x != nil { - return x.Started - } - return nil -} - -func (x *DeleteServiceStackResponseDto) GetFinished() *TimestampNull { - if x != nil { - return x.Finished - } - return nil -} - -func (x *DeleteServiceStackResponseDto) GetCreatedBySystem() bool { - if x != nil { - return x.CreatedBySystem - } - return false -} - -func (x *DeleteServiceStackResponseDto) GetAppVersion() *AppVersionJsonObjectNull { - if x != nil { - return x.AppVersion - } - return nil -} - -type GetProcessResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *GetProcessResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *GetProcessResponse) Reset() { - *x = GetProcessResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetProcessResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetProcessResponse) ProtoMessage() {} - -func (x *GetProcessResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[27] - 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 GetProcessResponse.ProtoReflect.Descriptor instead. -func (*GetProcessResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{27} -} - -func (x *GetProcessResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *GetProcessResponse) GetOutput() *GetProcessResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type GetProcessResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,14,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,15,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Project *ProjectLightJsonObject `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` - ServiceStacks []*ServiceStackLightJsonObject `protobuf:"bytes,4,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` - Status ProcessStatus `protobuf:"varint,5,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProcessStatus" json:"status,omitempty"` - Sequence int32 `protobuf:"varint,16,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreatedByUser *UserJsonObject `protobuf:"bytes,6,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - CanceledByUser *UserJsonObjectNull `protobuf:"bytes,7,opt,name=canceledByUser,proto3" json:"canceledByUser,omitempty"` - ActionName string `protobuf:"bytes,8,opt,name=actionName,proto3" json:"actionName,omitempty"` - Created *Timestamp `protobuf:"bytes,10,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,11,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Started *TimestampNull `protobuf:"bytes,17,opt,name=started,proto3" json:"started,omitempty"` - Finished *TimestampNull `protobuf:"bytes,18,opt,name=finished,proto3" json:"finished,omitempty"` - CreatedBySystem bool `protobuf:"varint,12,opt,name=createdBySystem,proto3" json:"createdBySystem,omitempty"` - AppVersion *AppVersionJsonObjectNull `protobuf:"bytes,13,opt,name=appVersion,proto3" json:"appVersion,omitempty"` -} - -func (x *GetProcessResponseDto) Reset() { - *x = GetProcessResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetProcessResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetProcessResponseDto) ProtoMessage() {} - -func (x *GetProcessResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[28] - 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 GetProcessResponseDto.ProtoReflect.Descriptor instead. -func (*GetProcessResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{28} -} - -func (x *GetProcessResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *GetProcessResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *GetProcessResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *GetProcessResponseDto) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *GetProcessResponseDto) GetProject() *ProjectLightJsonObject { - if x != nil { - return x.Project - } - return nil -} - -func (x *GetProcessResponseDto) GetServiceStacks() []*ServiceStackLightJsonObject { - if x != nil { - return x.ServiceStacks - } - return nil -} - -func (x *GetProcessResponseDto) GetStatus() ProcessStatus { - if x != nil { - return x.Status - } - return ProcessStatus_PROCESS_STATUS_UNKNOWN -} - -func (x *GetProcessResponseDto) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *GetProcessResponseDto) GetCreatedByUser() *UserJsonObject { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *GetProcessResponseDto) GetCanceledByUser() *UserJsonObjectNull { - if x != nil { - return x.CanceledByUser - } - return nil -} - -func (x *GetProcessResponseDto) GetActionName() string { - if x != nil { - return x.ActionName - } - return "" -} - -func (x *GetProcessResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *GetProcessResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *GetProcessResponseDto) GetStarted() *TimestampNull { - if x != nil { - return x.Started - } - return nil -} - -func (x *GetProcessResponseDto) GetFinished() *TimestampNull { - if x != nil { - return x.Finished - } - return nil -} - -func (x *GetProcessResponseDto) GetCreatedBySystem() bool { - if x != nil { - return x.CreatedBySystem - } - return false -} - -func (x *GetProcessResponseDto) GetAppVersion() *AppVersionJsonObjectNull { - if x != nil { - return x.AppVersion - } - return nil -} - -type GetProjectsByNameResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *GetProjectsByNameResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *GetProjectsByNameResponse) Reset() { - *x = GetProjectsByNameResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetProjectsByNameResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetProjectsByNameResponse) ProtoMessage() {} - -func (x *GetProjectsByNameResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[29] - 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 GetProjectsByNameResponse.ProtoReflect.Descriptor instead. -func (*GetProjectsByNameResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{29} -} - -func (x *GetProjectsByNameResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *GetProjectsByNameResponse) GetOutput() *GetProjectsByNameResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type GetProjectsByNameResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Projects []*Project `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects,omitempty"` -} - -func (x *GetProjectsByNameResponseDto) Reset() { - *x = GetProjectsByNameResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetProjectsByNameResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetProjectsByNameResponseDto) ProtoMessage() {} - -func (x *GetProjectsByNameResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[30] - 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 GetProjectsByNameResponseDto.ProtoReflect.Descriptor instead. -func (*GetProjectsByNameResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{30} -} - -func (x *GetProjectsByNameResponseDto) GetProjects() []*Project { - if x != nil { - return x.Projects - } - return nil -} - -type GetServiceStackResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *GetServiceStackResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *GetServiceStackResponse) Reset() { - *x = GetServiceStackResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServiceStackResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServiceStackResponse) ProtoMessage() {} - -func (x *GetServiceStackResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[31] - 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 GetServiceStackResponse.ProtoReflect.Descriptor instead. -func (*GetServiceStackResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{31} -} - -func (x *GetServiceStackResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *GetServiceStackResponse) GetOutput() *GetServiceStackResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type GetServiceStackResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Status ServiceStackStatus `protobuf:"varint,2,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ServiceStackStatus" json:"status,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - ServiceStackTypeInfo *ServiceStackInfoJsonObject `protobuf:"bytes,4,opt,name=serviceStackTypeInfo,proto3" json:"serviceStackTypeInfo,omitempty"` - ServiceStackTypeId string `protobuf:"bytes,5,opt,name=serviceStackTypeId,proto3" json:"serviceStackTypeId,omitempty"` - ServiceStackTypeVersionId string `protobuf:"bytes,6,opt,name=serviceStackTypeVersionId,proto3" json:"serviceStackTypeVersionId,omitempty"` - IsSystem bool `protobuf:"varint,7,opt,name=isSystem,proto3" json:"isSystem,omitempty"` - StartOnProjectStart bool `protobuf:"varint,31,opt,name=startOnProjectStart,proto3" json:"startOnProjectStart,omitempty"` - GithubIntegration *GithubIntegrationNull `protobuf:"bytes,26,opt,name=githubIntegration,proto3" json:"githubIntegration,omitempty"` - GitlabIntegration *GitlabIntegrationNull `protobuf:"bytes,29,opt,name=gitlabIntegration,proto3" json:"gitlabIntegration,omitempty"` - CustomAutoscaling *CustomAutoscalingNull `protobuf:"bytes,33,opt,name=customAutoscaling,proto3" json:"customAutoscaling,omitempty"` - Ports []*ServicePort `protobuf:"bytes,8,rep,name=ports,proto3" json:"ports,omitempty"` - RequestedPorts *RequestedPortsJsonObject `protobuf:"bytes,9,opt,name=requestedPorts,proto3" json:"requestedPorts,omitempty"` - Created *Timestamp `protobuf:"bytes,10,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,11,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Mode ServiceStackMode `protobuf:"varint,12,opt,name=mode,proto3,enum=zBusinessZeropsApiProtocol.ServiceStackMode" json:"mode,omitempty"` - CustomPortsEnabled bool `protobuf:"varint,13,opt,name=customPortsEnabled,proto3" json:"customPortsEnabled,omitempty"` - SubdomainAccess bool `protobuf:"varint,14,opt,name=subdomainAccess,proto3" json:"subdomainAccess,omitempty"` - ReloadAvailable bool `protobuf:"varint,15,opt,name=reloadAvailable,proto3" json:"reloadAvailable,omitempty"` - VersionNumber string `protobuf:"bytes,16,opt,name=versionNumber,proto3" json:"versionNumber,omitempty"` - ProjectId string `protobuf:"bytes,32,opt,name=projectId,proto3" json:"projectId,omitempty"` - Project *ProjectLight `protobuf:"bytes,17,opt,name=project,proto3" json:"project,omitempty"` - ConnectedStacks []*ServiceStackConnectedServiceStack `protobuf:"bytes,18,rep,name=connectedStacks,proto3" json:"connectedStacks,omitempty"` - UserData []*UserDataLight `protobuf:"bytes,34,rep,name=userData,proto3" json:"userData,omitempty"` - ActiveAppVersion *AppVersionLightNull `protobuf:"bytes,19,opt,name=activeAppVersion,proto3" json:"activeAppVersion,omitempty"` - HasUnsyncedUserDataRecord bool `protobuf:"varint,20,opt,name=hasUnsyncedUserDataRecord,proto3" json:"hasUnsyncedUserDataRecord,omitempty"` - HasUnsyncedPublicHttpRoutingRecord bool `protobuf:"varint,21,opt,name=hasUnsyncedPublicHttpRoutingRecord,proto3" json:"hasUnsyncedPublicHttpRoutingRecord,omitempty"` - HasUnsyncedPublicPortRecord bool `protobuf:"varint,22,opt,name=hasUnsyncedPublicPortRecord,proto3" json:"hasUnsyncedPublicPortRecord,omitempty"` - HasPublicPortRoutingAccess bool `protobuf:"varint,24,opt,name=hasPublicPortRoutingAccess,proto3" json:"hasPublicPortRoutingAccess,omitempty"` - HasPublicHttpRoutingAccess bool `protobuf:"varint,25,opt,name=hasPublicHttpRoutingAccess,proto3" json:"hasPublicHttpRoutingAccess,omitempty"` - ActivePublicHttpRoutingCount *Int32Null `protobuf:"bytes,27,opt,name=activePublicHttpRoutingCount,proto3" json:"activePublicHttpRoutingCount,omitempty"` - ActivePublicPortRoutingCount *Int32Null `protobuf:"bytes,28,opt,name=activePublicPortRoutingCount,proto3" json:"activePublicPortRoutingCount,omitempty"` -} - -func (x *GetServiceStackResponseDto) Reset() { - *x = GetServiceStackResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServiceStackResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServiceStackResponseDto) ProtoMessage() {} - -func (x *GetServiceStackResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[32] - 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 GetServiceStackResponseDto.ProtoReflect.Descriptor instead. -func (*GetServiceStackResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{32} -} - -func (x *GetServiceStackResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *GetServiceStackResponseDto) GetStatus() ServiceStackStatus { - if x != nil { - return x.Status - } - return ServiceStackStatus_SERVICE_STACK_STATUS_UNKNOWN -} - -func (x *GetServiceStackResponseDto) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *GetServiceStackResponseDto) GetServiceStackTypeInfo() *ServiceStackInfoJsonObject { - if x != nil { - return x.ServiceStackTypeInfo - } - return nil -} - -func (x *GetServiceStackResponseDto) GetServiceStackTypeId() string { - if x != nil { - return x.ServiceStackTypeId - } - return "" -} - -func (x *GetServiceStackResponseDto) GetServiceStackTypeVersionId() string { - if x != nil { - return x.ServiceStackTypeVersionId - } - return "" -} - -func (x *GetServiceStackResponseDto) GetIsSystem() bool { - if x != nil { - return x.IsSystem - } - return false -} - -func (x *GetServiceStackResponseDto) GetStartOnProjectStart() bool { - if x != nil { - return x.StartOnProjectStart - } - return false -} - -func (x *GetServiceStackResponseDto) GetGithubIntegration() *GithubIntegrationNull { - if x != nil { - return x.GithubIntegration - } - return nil -} - -func (x *GetServiceStackResponseDto) GetGitlabIntegration() *GitlabIntegrationNull { - if x != nil { - return x.GitlabIntegration - } - return nil -} - -func (x *GetServiceStackResponseDto) GetCustomAutoscaling() *CustomAutoscalingNull { - if x != nil { - return x.CustomAutoscaling - } - return nil -} - -func (x *GetServiceStackResponseDto) GetPorts() []*ServicePort { - if x != nil { - return x.Ports - } - return nil -} - -func (x *GetServiceStackResponseDto) GetRequestedPorts() *RequestedPortsJsonObject { - if x != nil { - return x.RequestedPorts - } - return nil -} - -func (x *GetServiceStackResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *GetServiceStackResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *GetServiceStackResponseDto) GetMode() ServiceStackMode { - if x != nil { - return x.Mode - } - return ServiceStackMode_SERVICE_STACK_MODE_UNKNOWN -} - -func (x *GetServiceStackResponseDto) GetCustomPortsEnabled() bool { - if x != nil { - return x.CustomPortsEnabled - } - return false -} - -func (x *GetServiceStackResponseDto) GetSubdomainAccess() bool { - if x != nil { - return x.SubdomainAccess - } - return false -} - -func (x *GetServiceStackResponseDto) GetReloadAvailable() bool { - if x != nil { - return x.ReloadAvailable - } - return false -} - -func (x *GetServiceStackResponseDto) GetVersionNumber() string { - if x != nil { - return x.VersionNumber - } - return "" -} - -func (x *GetServiceStackResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *GetServiceStackResponseDto) GetProject() *ProjectLight { - if x != nil { - return x.Project - } - return nil -} - -func (x *GetServiceStackResponseDto) GetConnectedStacks() []*ServiceStackConnectedServiceStack { - if x != nil { - return x.ConnectedStacks - } - return nil -} - -func (x *GetServiceStackResponseDto) GetUserData() []*UserDataLight { - if x != nil { - return x.UserData - } - return nil -} - -func (x *GetServiceStackResponseDto) GetActiveAppVersion() *AppVersionLightNull { - if x != nil { - return x.ActiveAppVersion - } - return nil -} - -func (x *GetServiceStackResponseDto) GetHasUnsyncedUserDataRecord() bool { - if x != nil { - return x.HasUnsyncedUserDataRecord - } - return false -} - -func (x *GetServiceStackResponseDto) GetHasUnsyncedPublicHttpRoutingRecord() bool { - if x != nil { - return x.HasUnsyncedPublicHttpRoutingRecord - } - return false -} - -func (x *GetServiceStackResponseDto) GetHasUnsyncedPublicPortRecord() bool { - if x != nil { - return x.HasUnsyncedPublicPortRecord - } - return false -} - -func (x *GetServiceStackResponseDto) GetHasPublicPortRoutingAccess() bool { - if x != nil { - return x.HasPublicPortRoutingAccess - } - return false -} - -func (x *GetServiceStackResponseDto) GetHasPublicHttpRoutingAccess() bool { - if x != nil { - return x.HasPublicHttpRoutingAccess - } - return false -} - -func (x *GetServiceStackResponseDto) GetActivePublicHttpRoutingCount() *Int32Null { - if x != nil { - return x.ActivePublicHttpRoutingCount - } - return nil -} - -func (x *GetServiceStackResponseDto) GetActivePublicPortRoutingCount() *Int32Null { - if x != nil { - return x.ActivePublicPortRoutingCount - } - return nil -} - -type GetServiceStackByNameResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *GetServiceStackByNameResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *GetServiceStackByNameResponse) Reset() { - *x = GetServiceStackByNameResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServiceStackByNameResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServiceStackByNameResponse) ProtoMessage() {} - -func (x *GetServiceStackByNameResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[33] - 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 GetServiceStackByNameResponse.ProtoReflect.Descriptor instead. -func (*GetServiceStackByNameResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{33} -} - -func (x *GetServiceStackByNameResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *GetServiceStackByNameResponse) GetOutput() *GetServiceStackByNameResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type GetServiceStackByNameResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Status ServiceStackStatus `protobuf:"varint,2,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ServiceStackStatus" json:"status,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - ServiceStackTypeInfo *ServiceStackInfoJsonObject `protobuf:"bytes,4,opt,name=serviceStackTypeInfo,proto3" json:"serviceStackTypeInfo,omitempty"` - ServiceStackTypeId string `protobuf:"bytes,5,opt,name=serviceStackTypeId,proto3" json:"serviceStackTypeId,omitempty"` - ServiceStackTypeVersionId string `protobuf:"bytes,6,opt,name=serviceStackTypeVersionId,proto3" json:"serviceStackTypeVersionId,omitempty"` - IsSystem bool `protobuf:"varint,7,opt,name=isSystem,proto3" json:"isSystem,omitempty"` - StartOnProjectStart bool `protobuf:"varint,31,opt,name=startOnProjectStart,proto3" json:"startOnProjectStart,omitempty"` - GithubIntegration *GithubIntegrationNull `protobuf:"bytes,26,opt,name=githubIntegration,proto3" json:"githubIntegration,omitempty"` - GitlabIntegration *GitlabIntegrationNull `protobuf:"bytes,29,opt,name=gitlabIntegration,proto3" json:"gitlabIntegration,omitempty"` - CustomAutoscaling *CustomAutoscalingNull `protobuf:"bytes,33,opt,name=customAutoscaling,proto3" json:"customAutoscaling,omitempty"` - Ports []*ServicePort `protobuf:"bytes,8,rep,name=ports,proto3" json:"ports,omitempty"` - RequestedPorts *RequestedPortsJsonObject `protobuf:"bytes,9,opt,name=requestedPorts,proto3" json:"requestedPorts,omitempty"` - Created *Timestamp `protobuf:"bytes,10,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,11,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Mode ServiceStackMode `protobuf:"varint,12,opt,name=mode,proto3,enum=zBusinessZeropsApiProtocol.ServiceStackMode" json:"mode,omitempty"` - CustomPortsEnabled bool `protobuf:"varint,13,opt,name=customPortsEnabled,proto3" json:"customPortsEnabled,omitempty"` - SubdomainAccess bool `protobuf:"varint,14,opt,name=subdomainAccess,proto3" json:"subdomainAccess,omitempty"` - ReloadAvailable bool `protobuf:"varint,15,opt,name=reloadAvailable,proto3" json:"reloadAvailable,omitempty"` - VersionNumber string `protobuf:"bytes,16,opt,name=versionNumber,proto3" json:"versionNumber,omitempty"` - ProjectId string `protobuf:"bytes,32,opt,name=projectId,proto3" json:"projectId,omitempty"` - Project *ProjectLight `protobuf:"bytes,17,opt,name=project,proto3" json:"project,omitempty"` - ConnectedStacks []*ServiceStackConnectedServiceStack `protobuf:"bytes,18,rep,name=connectedStacks,proto3" json:"connectedStacks,omitempty"` - UserData []*UserDataLight `protobuf:"bytes,34,rep,name=userData,proto3" json:"userData,omitempty"` - ActiveAppVersion *AppVersionLightNull `protobuf:"bytes,19,opt,name=activeAppVersion,proto3" json:"activeAppVersion,omitempty"` - HasUnsyncedUserDataRecord bool `protobuf:"varint,20,opt,name=hasUnsyncedUserDataRecord,proto3" json:"hasUnsyncedUserDataRecord,omitempty"` - HasUnsyncedPublicHttpRoutingRecord bool `protobuf:"varint,21,opt,name=hasUnsyncedPublicHttpRoutingRecord,proto3" json:"hasUnsyncedPublicHttpRoutingRecord,omitempty"` - HasUnsyncedPublicPortRecord bool `protobuf:"varint,22,opt,name=hasUnsyncedPublicPortRecord,proto3" json:"hasUnsyncedPublicPortRecord,omitempty"` - HasPublicPortRoutingAccess bool `protobuf:"varint,24,opt,name=hasPublicPortRoutingAccess,proto3" json:"hasPublicPortRoutingAccess,omitempty"` - HasPublicHttpRoutingAccess bool `protobuf:"varint,25,opt,name=hasPublicHttpRoutingAccess,proto3" json:"hasPublicHttpRoutingAccess,omitempty"` - ActivePublicHttpRoutingCount *Int32Null `protobuf:"bytes,27,opt,name=activePublicHttpRoutingCount,proto3" json:"activePublicHttpRoutingCount,omitempty"` - ActivePublicPortRoutingCount *Int32Null `protobuf:"bytes,28,opt,name=activePublicPortRoutingCount,proto3" json:"activePublicPortRoutingCount,omitempty"` -} - -func (x *GetServiceStackByNameResponseDto) Reset() { - *x = GetServiceStackByNameResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServiceStackByNameResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServiceStackByNameResponseDto) ProtoMessage() {} - -func (x *GetServiceStackByNameResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[34] - 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 GetServiceStackByNameResponseDto.ProtoReflect.Descriptor instead. -func (*GetServiceStackByNameResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{34} -} - -func (x *GetServiceStackByNameResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *GetServiceStackByNameResponseDto) GetStatus() ServiceStackStatus { - if x != nil { - return x.Status - } - return ServiceStackStatus_SERVICE_STACK_STATUS_UNKNOWN -} - -func (x *GetServiceStackByNameResponseDto) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *GetServiceStackByNameResponseDto) GetServiceStackTypeInfo() *ServiceStackInfoJsonObject { - if x != nil { - return x.ServiceStackTypeInfo - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetServiceStackTypeId() string { - if x != nil { - return x.ServiceStackTypeId - } - return "" -} - -func (x *GetServiceStackByNameResponseDto) GetServiceStackTypeVersionId() string { - if x != nil { - return x.ServiceStackTypeVersionId - } - return "" -} - -func (x *GetServiceStackByNameResponseDto) GetIsSystem() bool { - if x != nil { - return x.IsSystem - } - return false -} - -func (x *GetServiceStackByNameResponseDto) GetStartOnProjectStart() bool { - if x != nil { - return x.StartOnProjectStart - } - return false -} - -func (x *GetServiceStackByNameResponseDto) GetGithubIntegration() *GithubIntegrationNull { - if x != nil { - return x.GithubIntegration - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetGitlabIntegration() *GitlabIntegrationNull { - if x != nil { - return x.GitlabIntegration - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetCustomAutoscaling() *CustomAutoscalingNull { - if x != nil { - return x.CustomAutoscaling - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetPorts() []*ServicePort { - if x != nil { - return x.Ports - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetRequestedPorts() *RequestedPortsJsonObject { - if x != nil { - return x.RequestedPorts - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetMode() ServiceStackMode { - if x != nil { - return x.Mode - } - return ServiceStackMode_SERVICE_STACK_MODE_UNKNOWN -} - -func (x *GetServiceStackByNameResponseDto) GetCustomPortsEnabled() bool { - if x != nil { - return x.CustomPortsEnabled - } - return false -} - -func (x *GetServiceStackByNameResponseDto) GetSubdomainAccess() bool { - if x != nil { - return x.SubdomainAccess - } - return false -} - -func (x *GetServiceStackByNameResponseDto) GetReloadAvailable() bool { - if x != nil { - return x.ReloadAvailable - } - return false -} - -func (x *GetServiceStackByNameResponseDto) GetVersionNumber() string { - if x != nil { - return x.VersionNumber - } - return "" -} - -func (x *GetServiceStackByNameResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *GetServiceStackByNameResponseDto) GetProject() *ProjectLight { - if x != nil { - return x.Project - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetConnectedStacks() []*ServiceStackConnectedServiceStack { - if x != nil { - return x.ConnectedStacks - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetUserData() []*UserDataLight { - if x != nil { - return x.UserData - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetActiveAppVersion() *AppVersionLightNull { - if x != nil { - return x.ActiveAppVersion - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetHasUnsyncedUserDataRecord() bool { - if x != nil { - return x.HasUnsyncedUserDataRecord - } - return false -} - -func (x *GetServiceStackByNameResponseDto) GetHasUnsyncedPublicHttpRoutingRecord() bool { - if x != nil { - return x.HasUnsyncedPublicHttpRoutingRecord - } - return false -} - -func (x *GetServiceStackByNameResponseDto) GetHasUnsyncedPublicPortRecord() bool { - if x != nil { - return x.HasUnsyncedPublicPortRecord - } - return false -} - -func (x *GetServiceStackByNameResponseDto) GetHasPublicPortRoutingAccess() bool { - if x != nil { - return x.HasPublicPortRoutingAccess - } - return false -} - -func (x *GetServiceStackByNameResponseDto) GetHasPublicHttpRoutingAccess() bool { - if x != nil { - return x.HasPublicHttpRoutingAccess - } - return false -} - -func (x *GetServiceStackByNameResponseDto) GetActivePublicHttpRoutingCount() *Int32Null { - if x != nil { - return x.ActivePublicHttpRoutingCount - } - return nil -} - -func (x *GetServiceStackByNameResponseDto) GetActivePublicPortRoutingCount() *Int32Null { - if x != nil { - return x.ActivePublicPortRoutingCount - } - return nil -} - -type GetUserInfoResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *GetUserInfoResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *GetUserInfoResponse) Reset() { - *x = GetUserInfoResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetUserInfoResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetUserInfoResponse) ProtoMessage() {} - -func (x *GetUserInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[35] - 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 GetUserInfoResponse.ProtoReflect.Descriptor instead. -func (*GetUserInfoResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{35} -} - -func (x *GetUserInfoResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *GetUserInfoResponse) GetOutput() *GetUserInfoResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type GetUserInfoResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` - FullName string `protobuf:"bytes,3,opt,name=fullName,proto3" json:"fullName,omitempty"` - FirstName string `protobuf:"bytes,4,opt,name=firstName,proto3" json:"firstName,omitempty"` - LastName string `protobuf:"bytes,5,opt,name=lastName,proto3" json:"lastName,omitempty"` - Avatar *UserAvatarNull `protobuf:"bytes,13,opt,name=avatar,proto3" json:"avatar,omitempty"` - CountryCallingCode *Int32Null `protobuf:"bytes,6,opt,name=countryCallingCode,proto3" json:"countryCallingCode,omitempty"` - PhoneNumber *Int32Null `protobuf:"bytes,7,opt,name=phoneNumber,proto3" json:"phoneNumber,omitempty"` - Language *Language `protobuf:"bytes,8,opt,name=language,proto3" json:"language,omitempty"` - Created *Timestamp `protobuf:"bytes,9,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,10,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Status UserStatus `protobuf:"varint,11,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.UserStatus" json:"status,omitempty"` - ClientUserList []*ClientUserExtra `protobuf:"bytes,12,rep,name=clientUserList,proto3" json:"clientUserList,omitempty"` - PasswordIsSet bool `protobuf:"varint,14,opt,name=passwordIsSet,proto3" json:"passwordIsSet,omitempty"` -} - -func (x *GetUserInfoResponseDto) Reset() { - *x = GetUserInfoResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetUserInfoResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetUserInfoResponseDto) ProtoMessage() {} - -func (x *GetUserInfoResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[36] - 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 GetUserInfoResponseDto.ProtoReflect.Descriptor instead. -func (*GetUserInfoResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{36} -} - -func (x *GetUserInfoResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *GetUserInfoResponseDto) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *GetUserInfoResponseDto) GetFullName() string { - if x != nil { - return x.FullName - } - return "" -} - -func (x *GetUserInfoResponseDto) GetFirstName() string { - if x != nil { - return x.FirstName - } - return "" -} - -func (x *GetUserInfoResponseDto) GetLastName() string { - if x != nil { - return x.LastName - } - return "" -} - -func (x *GetUserInfoResponseDto) GetAvatar() *UserAvatarNull { - if x != nil { - return x.Avatar - } - return nil -} - -func (x *GetUserInfoResponseDto) GetCountryCallingCode() *Int32Null { - if x != nil { - return x.CountryCallingCode - } - return nil -} - -func (x *GetUserInfoResponseDto) GetPhoneNumber() *Int32Null { - if x != nil { - return x.PhoneNumber - } - return nil -} - -func (x *GetUserInfoResponseDto) GetLanguage() *Language { - if x != nil { - return x.Language - } - return nil -} - -func (x *GetUserInfoResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *GetUserInfoResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *GetUserInfoResponseDto) GetStatus() UserStatus { - if x != nil { - return x.Status - } - return UserStatus_USER_STATUS_UNKNOWN -} - -func (x *GetUserInfoResponseDto) GetClientUserList() []*ClientUserExtra { - if x != nil { - return x.ClientUserList - } - return nil -} - -func (x *GetUserInfoResponseDto) GetPasswordIsSet() bool { - if x != nil { - return x.PasswordIsSet - } - return false -} - -type PostAppVersionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PostAppVersionResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PostAppVersionResponse) Reset() { - *x = PostAppVersionResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostAppVersionResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostAppVersionResponse) ProtoMessage() {} - -func (x *PostAppVersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[37] - 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 PostAppVersionResponse.ProtoReflect.Descriptor instead. -func (*PostAppVersionResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{37} -} - -func (x *PostAppVersionResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PostAppVersionResponse) GetOutput() *PostAppVersionResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PostAppVersionResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId string `protobuf:"bytes,4,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Build *AppVersionBuildNull `protobuf:"bytes,13,opt,name=build,proto3" json:"build,omitempty"` - Sequence int32 `protobuf:"varint,5,opt,name=sequence,proto3" json:"sequence,omitempty"` - Status AppVersionStatus `protobuf:"varint,6,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.AppVersionStatus" json:"status,omitempty"` - UserDataList []*AppVersionUserData `protobuf:"bytes,7,rep,name=userDataList,proto3" json:"userDataList,omitempty"` - Created *Timestamp `protobuf:"bytes,8,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,9,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - UploadUrl string `protobuf:"bytes,10,opt,name=uploadUrl,proto3" json:"uploadUrl,omitempty"` -} - -func (x *PostAppVersionResponseDto) Reset() { - *x = PostAppVersionResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostAppVersionResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostAppVersionResponseDto) ProtoMessage() {} - -func (x *PostAppVersionResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[38] - 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 PostAppVersionResponseDto.ProtoReflect.Descriptor instead. -func (*PostAppVersionResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{38} -} - -func (x *PostAppVersionResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PostAppVersionResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *PostAppVersionResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PostAppVersionResponseDto) GetServiceStackId() string { - if x != nil { - return x.ServiceStackId - } - return "" -} - -func (x *PostAppVersionResponseDto) GetBuild() *AppVersionBuildNull { - if x != nil { - return x.Build - } - return nil -} - -func (x *PostAppVersionResponseDto) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *PostAppVersionResponseDto) GetStatus() AppVersionStatus { - if x != nil { - return x.Status - } - return AppVersionStatus_APP_VERSION_STATUS_UNKNOWN -} - -func (x *PostAppVersionResponseDto) GetUserDataList() []*AppVersionUserData { - if x != nil { - return x.UserDataList - } - return nil -} - -func (x *PostAppVersionResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *PostAppVersionResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *PostAppVersionResponseDto) GetUploadUrl() string { - if x != nil { - return x.UploadUrl - } - return "" -} - -type PostProjectImportResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PostProjectImportResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PostProjectImportResponse) Reset() { - *x = PostProjectImportResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostProjectImportResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostProjectImportResponse) ProtoMessage() {} - -func (x *PostProjectImportResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[39] - 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 PostProjectImportResponse.ProtoReflect.Descriptor instead. -func (*PostProjectImportResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{39} -} - -func (x *PostProjectImportResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PostProjectImportResponse) GetOutput() *PostProjectImportResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PostProjectImportResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ProjectId string `protobuf:"bytes,1,opt,name=projectId,proto3" json:"projectId,omitempty"` - ProjectName string `protobuf:"bytes,2,opt,name=projectName,proto3" json:"projectName,omitempty"` - ServiceStacks []*ProjectImportServiceStack `protobuf:"bytes,3,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` -} - -func (x *PostProjectImportResponseDto) Reset() { - *x = PostProjectImportResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostProjectImportResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostProjectImportResponseDto) ProtoMessage() {} - -func (x *PostProjectImportResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[40] - 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 PostProjectImportResponseDto.ProtoReflect.Descriptor instead. -func (*PostProjectImportResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{40} -} - -func (x *PostProjectImportResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PostProjectImportResponseDto) GetProjectName() string { - if x != nil { - return x.ProjectName - } - return "" -} - -func (x *PostProjectImportResponseDto) GetServiceStacks() []*ProjectImportServiceStack { - if x != nil { - return x.ServiceStacks - } - return nil -} - -type PostPublicHttpRoutingResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PostPublicHttpRoutingResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PostPublicHttpRoutingResponse) Reset() { - *x = PostPublicHttpRoutingResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostPublicHttpRoutingResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostPublicHttpRoutingResponse) ProtoMessage() {} - -func (x *PostPublicHttpRoutingResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[41] - 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 PostPublicHttpRoutingResponse.ProtoReflect.Descriptor instead. -func (*PostPublicHttpRoutingResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{41} -} - -func (x *PostPublicHttpRoutingResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PostPublicHttpRoutingResponse) GetOutput() *PostPublicHttpRoutingResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PostPublicHttpRoutingResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - SslEnabled bool `protobuf:"varint,4,opt,name=sslEnabled,proto3" json:"sslEnabled,omitempty"` - Domains []*PublicHttpRoutingDomain `protobuf:"bytes,5,rep,name=domains,proto3" json:"domains,omitempty"` - Locations []*PublicHttpRoutingLocation `protobuf:"bytes,6,rep,name=locations,proto3" json:"locations,omitempty"` - Created *Timestamp `protobuf:"bytes,7,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,8,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - IsSynced bool `protobuf:"varint,9,opt,name=isSynced,proto3" json:"isSynced,omitempty"` - IsEditable bool `protobuf:"varint,11,opt,name=isEditable,proto3" json:"isEditable,omitempty"` - DeleteOnSync bool `protobuf:"varint,12,opt,name=deleteOnSync,proto3" json:"deleteOnSync,omitempty"` -} - -func (x *PostPublicHttpRoutingResponseDto) Reset() { - *x = PostPublicHttpRoutingResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostPublicHttpRoutingResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostPublicHttpRoutingResponseDto) ProtoMessage() {} - -func (x *PostPublicHttpRoutingResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[42] - 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 PostPublicHttpRoutingResponseDto.ProtoReflect.Descriptor instead. -func (*PostPublicHttpRoutingResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{42} -} - -func (x *PostPublicHttpRoutingResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PostPublicHttpRoutingResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *PostPublicHttpRoutingResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PostPublicHttpRoutingResponseDto) GetSslEnabled() bool { - if x != nil { - return x.SslEnabled - } - return false -} - -func (x *PostPublicHttpRoutingResponseDto) GetDomains() []*PublicHttpRoutingDomain { - if x != nil { - return x.Domains - } - return nil -} - -func (x *PostPublicHttpRoutingResponseDto) GetLocations() []*PublicHttpRoutingLocation { - if x != nil { - return x.Locations - } - return nil -} - -func (x *PostPublicHttpRoutingResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *PostPublicHttpRoutingResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *PostPublicHttpRoutingResponseDto) GetIsSynced() bool { - if x != nil { - return x.IsSynced - } - return false -} - -func (x *PostPublicHttpRoutingResponseDto) GetIsEditable() bool { - if x != nil { - return x.IsEditable - } - return false -} - -func (x *PostPublicHttpRoutingResponseDto) GetDeleteOnSync() bool { - if x != nil { - return x.DeleteOnSync - } - return false -} - -type PostServiceStackImportResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PostServiceStackImportResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PostServiceStackImportResponse) Reset() { - *x = PostServiceStackImportResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostServiceStackImportResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostServiceStackImportResponse) ProtoMessage() {} - -func (x *PostServiceStackImportResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[43] - 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 PostServiceStackImportResponse.ProtoReflect.Descriptor instead. -func (*PostServiceStackImportResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{43} -} - -func (x *PostServiceStackImportResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PostServiceStackImportResponse) GetOutput() *PostServiceStackImportResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PostServiceStackImportResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ProjectId string `protobuf:"bytes,1,opt,name=projectId,proto3" json:"projectId,omitempty"` - ProjectName string `protobuf:"bytes,2,opt,name=projectName,proto3" json:"projectName,omitempty"` - ServiceStacks []*ProjectImportServiceStack `protobuf:"bytes,3,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` -} - -func (x *PostServiceStackImportResponseDto) Reset() { - *x = PostServiceStackImportResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[44] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostServiceStackImportResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostServiceStackImportResponseDto) ProtoMessage() {} - -func (x *PostServiceStackImportResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[44] - 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 PostServiceStackImportResponseDto.ProtoReflect.Descriptor instead. -func (*PostServiceStackImportResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{44} -} - -func (x *PostServiceStackImportResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PostServiceStackImportResponseDto) GetProjectName() string { - if x != nil { - return x.ProjectName - } - return "" -} - -func (x *PostServiceStackImportResponseDto) GetServiceStacks() []*ProjectImportServiceStack { - if x != nil { - return x.ServiceStacks - } - return nil -} - -type PostVpnRequestResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PostVpnRequestResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PostVpnRequestResponse) Reset() { - *x = PostVpnRequestResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[45] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostVpnRequestResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostVpnRequestResponse) ProtoMessage() {} - -func (x *PostVpnRequestResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[45] - 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 PostVpnRequestResponse.ProtoReflect.Descriptor instead. -func (*PostVpnRequestResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{45} -} - -func (x *PostVpnRequestResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PostVpnRequestResponse) GetOutput() *PostVpnRequestResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PostVpnRequestResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AccessToken string `protobuf:"bytes,1,opt,name=accessToken,proto3" json:"accessToken,omitempty"` - Expiry *Timestamp `protobuf:"bytes,2,opt,name=expiry,proto3" json:"expiry,omitempty"` -} - -func (x *PostVpnRequestResponseDto) Reset() { - *x = PostVpnRequestResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[46] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostVpnRequestResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostVpnRequestResponseDto) ProtoMessage() {} - -func (x *PostVpnRequestResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[46] - 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 PostVpnRequestResponseDto.ProtoReflect.Descriptor instead. -func (*PostVpnRequestResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{46} -} - -func (x *PostVpnRequestResponseDto) GetAccessToken() string { - if x != nil { - return x.AccessToken - } - return "" -} - -func (x *PostVpnRequestResponseDto) GetExpiry() *Timestamp { - if x != nil { - return x.Expiry - } - return nil -} - -type PutAppVersionBuildAndDeployResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PutAppVersionBuildAndDeployResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PutAppVersionBuildAndDeployResponse) Reset() { - *x = PutAppVersionBuildAndDeployResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutAppVersionBuildAndDeployResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutAppVersionBuildAndDeployResponse) ProtoMessage() {} - -func (x *PutAppVersionBuildAndDeployResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[47] - 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 PutAppVersionBuildAndDeployResponse.ProtoReflect.Descriptor instead. -func (*PutAppVersionBuildAndDeployResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{47} -} - -func (x *PutAppVersionBuildAndDeployResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PutAppVersionBuildAndDeployResponse) GetOutput() *PutAppVersionBuildAndDeployResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PutAppVersionBuildAndDeployResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,14,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,15,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Project *ProjectLightJsonObject `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` - ServiceStacks []*ServiceStackLightJsonObject `protobuf:"bytes,4,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` - Status ProcessStatus `protobuf:"varint,5,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProcessStatus" json:"status,omitempty"` - Sequence int32 `protobuf:"varint,16,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreatedByUser *UserJsonObject `protobuf:"bytes,6,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - CanceledByUser *UserJsonObjectNull `protobuf:"bytes,7,opt,name=canceledByUser,proto3" json:"canceledByUser,omitempty"` - ActionName string `protobuf:"bytes,8,opt,name=actionName,proto3" json:"actionName,omitempty"` - Created *Timestamp `protobuf:"bytes,10,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,11,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Started *TimestampNull `protobuf:"bytes,17,opt,name=started,proto3" json:"started,omitempty"` - Finished *TimestampNull `protobuf:"bytes,18,opt,name=finished,proto3" json:"finished,omitempty"` - CreatedBySystem bool `protobuf:"varint,12,opt,name=createdBySystem,proto3" json:"createdBySystem,omitempty"` - AppVersion *AppVersionJsonObjectNull `protobuf:"bytes,13,opt,name=appVersion,proto3" json:"appVersion,omitempty"` -} - -func (x *PutAppVersionBuildAndDeployResponseDto) Reset() { - *x = PutAppVersionBuildAndDeployResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutAppVersionBuildAndDeployResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutAppVersionBuildAndDeployResponseDto) ProtoMessage() {} - -func (x *PutAppVersionBuildAndDeployResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[48] - 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 PutAppVersionBuildAndDeployResponseDto.ProtoReflect.Descriptor instead. -func (*PutAppVersionBuildAndDeployResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{48} -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetProject() *ProjectLightJsonObject { - if x != nil { - return x.Project - } - return nil -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetServiceStacks() []*ServiceStackLightJsonObject { - if x != nil { - return x.ServiceStacks - } - return nil -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetStatus() ProcessStatus { - if x != nil { - return x.Status - } - return ProcessStatus_PROCESS_STATUS_UNKNOWN -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetCreatedByUser() *UserJsonObject { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetCanceledByUser() *UserJsonObjectNull { - if x != nil { - return x.CanceledByUser - } - return nil -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetActionName() string { - if x != nil { - return x.ActionName - } - return "" -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetStarted() *TimestampNull { - if x != nil { - return x.Started - } - return nil -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetFinished() *TimestampNull { - if x != nil { - return x.Finished - } - return nil -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetCreatedBySystem() bool { - if x != nil { - return x.CreatedBySystem - } - return false -} - -func (x *PutAppVersionBuildAndDeployResponseDto) GetAppVersion() *AppVersionJsonObjectNull { - if x != nil { - return x.AppVersion - } - return nil -} - -type PutAppVersionDeployResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PutAppVersionDeployResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PutAppVersionDeployResponse) Reset() { - *x = PutAppVersionDeployResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutAppVersionDeployResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutAppVersionDeployResponse) ProtoMessage() {} - -func (x *PutAppVersionDeployResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[49] - 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 PutAppVersionDeployResponse.ProtoReflect.Descriptor instead. -func (*PutAppVersionDeployResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{49} -} - -func (x *PutAppVersionDeployResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PutAppVersionDeployResponse) GetOutput() *PutAppVersionDeployResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PutAppVersionDeployResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,14,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,15,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Project *ProjectLightJsonObject `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` - ServiceStacks []*ServiceStackLightJsonObject `protobuf:"bytes,4,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` - Status ProcessStatus `protobuf:"varint,5,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProcessStatus" json:"status,omitempty"` - Sequence int32 `protobuf:"varint,16,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreatedByUser *UserJsonObject `protobuf:"bytes,6,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - CanceledByUser *UserJsonObjectNull `protobuf:"bytes,7,opt,name=canceledByUser,proto3" json:"canceledByUser,omitempty"` - ActionName string `protobuf:"bytes,8,opt,name=actionName,proto3" json:"actionName,omitempty"` - Created *Timestamp `protobuf:"bytes,10,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,11,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Started *TimestampNull `protobuf:"bytes,17,opt,name=started,proto3" json:"started,omitempty"` - Finished *TimestampNull `protobuf:"bytes,18,opt,name=finished,proto3" json:"finished,omitempty"` - CreatedBySystem bool `protobuf:"varint,12,opt,name=createdBySystem,proto3" json:"createdBySystem,omitempty"` - AppVersion *AppVersionJsonObjectNull `protobuf:"bytes,13,opt,name=appVersion,proto3" json:"appVersion,omitempty"` -} - -func (x *PutAppVersionDeployResponseDto) Reset() { - *x = PutAppVersionDeployResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[50] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutAppVersionDeployResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutAppVersionDeployResponseDto) ProtoMessage() {} - -func (x *PutAppVersionDeployResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[50] - 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 PutAppVersionDeployResponseDto.ProtoReflect.Descriptor instead. -func (*PutAppVersionDeployResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{50} -} - -func (x *PutAppVersionDeployResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PutAppVersionDeployResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *PutAppVersionDeployResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PutAppVersionDeployResponseDto) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *PutAppVersionDeployResponseDto) GetProject() *ProjectLightJsonObject { - if x != nil { - return x.Project - } - return nil -} - -func (x *PutAppVersionDeployResponseDto) GetServiceStacks() []*ServiceStackLightJsonObject { - if x != nil { - return x.ServiceStacks - } - return nil -} - -func (x *PutAppVersionDeployResponseDto) GetStatus() ProcessStatus { - if x != nil { - return x.Status - } - return ProcessStatus_PROCESS_STATUS_UNKNOWN -} - -func (x *PutAppVersionDeployResponseDto) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *PutAppVersionDeployResponseDto) GetCreatedByUser() *UserJsonObject { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *PutAppVersionDeployResponseDto) GetCanceledByUser() *UserJsonObjectNull { - if x != nil { - return x.CanceledByUser - } - return nil -} - -func (x *PutAppVersionDeployResponseDto) GetActionName() string { - if x != nil { - return x.ActionName - } - return "" -} - -func (x *PutAppVersionDeployResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *PutAppVersionDeployResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *PutAppVersionDeployResponseDto) GetStarted() *TimestampNull { - if x != nil { - return x.Started - } - return nil -} - -func (x *PutAppVersionDeployResponseDto) GetFinished() *TimestampNull { - if x != nil { - return x.Finished - } - return nil -} - -func (x *PutAppVersionDeployResponseDto) GetCreatedBySystem() bool { - if x != nil { - return x.CreatedBySystem - } - return false -} - -func (x *PutAppVersionDeployResponseDto) GetAppVersion() *AppVersionJsonObjectNull { - if x != nil { - return x.AppVersion - } - return nil -} - -type PutProjectStartResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PutProjectStartResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PutProjectStartResponse) Reset() { - *x = PutProjectStartResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[51] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutProjectStartResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutProjectStartResponse) ProtoMessage() {} - -func (x *PutProjectStartResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[51] - 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 PutProjectStartResponse.ProtoReflect.Descriptor instead. -func (*PutProjectStartResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{51} -} - -func (x *PutProjectStartResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PutProjectStartResponse) GetOutput() *PutProjectStartResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PutProjectStartResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,4,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Project *ProjectLightJsonObject `protobuf:"bytes,5,opt,name=project,proto3" json:"project,omitempty"` - ServiceStacks []*ServiceStackLightJsonObject `protobuf:"bytes,6,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` - Status ProcessStatus `protobuf:"varint,7,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProcessStatus" json:"status,omitempty"` - Sequence int32 `protobuf:"varint,8,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreatedByUser *UserJsonObject `protobuf:"bytes,9,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - CanceledByUser *UserJsonObjectNull `protobuf:"bytes,10,opt,name=canceledByUser,proto3" json:"canceledByUser,omitempty"` - ActionName string `protobuf:"bytes,11,opt,name=actionName,proto3" json:"actionName,omitempty"` - Created *Timestamp `protobuf:"bytes,12,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,13,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Started *TimestampNull `protobuf:"bytes,14,opt,name=started,proto3" json:"started,omitempty"` - Finished *TimestampNull `protobuf:"bytes,15,opt,name=finished,proto3" json:"finished,omitempty"` - CreatedBySystem bool `protobuf:"varint,16,opt,name=createdBySystem,proto3" json:"createdBySystem,omitempty"` - AppVersion *AppVersionJsonObjectNull `protobuf:"bytes,17,opt,name=appVersion,proto3" json:"appVersion,omitempty"` -} - -func (x *PutProjectStartResponseDto) Reset() { - *x = PutProjectStartResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[52] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutProjectStartResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutProjectStartResponseDto) ProtoMessage() {} - -func (x *PutProjectStartResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[52] - 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 PutProjectStartResponseDto.ProtoReflect.Descriptor instead. -func (*PutProjectStartResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{52} -} - -func (x *PutProjectStartResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PutProjectStartResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *PutProjectStartResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PutProjectStartResponseDto) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *PutProjectStartResponseDto) GetProject() *ProjectLightJsonObject { - if x != nil { - return x.Project - } - return nil -} - -func (x *PutProjectStartResponseDto) GetServiceStacks() []*ServiceStackLightJsonObject { - if x != nil { - return x.ServiceStacks - } - return nil -} - -func (x *PutProjectStartResponseDto) GetStatus() ProcessStatus { - if x != nil { - return x.Status - } - return ProcessStatus_PROCESS_STATUS_UNKNOWN -} - -func (x *PutProjectStartResponseDto) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *PutProjectStartResponseDto) GetCreatedByUser() *UserJsonObject { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *PutProjectStartResponseDto) GetCanceledByUser() *UserJsonObjectNull { - if x != nil { - return x.CanceledByUser - } - return nil -} - -func (x *PutProjectStartResponseDto) GetActionName() string { - if x != nil { - return x.ActionName - } - return "" -} - -func (x *PutProjectStartResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *PutProjectStartResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *PutProjectStartResponseDto) GetStarted() *TimestampNull { - if x != nil { - return x.Started - } - return nil -} - -func (x *PutProjectStartResponseDto) GetFinished() *TimestampNull { - if x != nil { - return x.Finished - } - return nil -} - -func (x *PutProjectStartResponseDto) GetCreatedBySystem() bool { - if x != nil { - return x.CreatedBySystem - } - return false -} - -func (x *PutProjectStartResponseDto) GetAppVersion() *AppVersionJsonObjectNull { - if x != nil { - return x.AppVersion - } - return nil -} - -type PutProjectStopResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PutProjectStopResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PutProjectStopResponse) Reset() { - *x = PutProjectStopResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutProjectStopResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutProjectStopResponse) ProtoMessage() {} - -func (x *PutProjectStopResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[53] - 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 PutProjectStopResponse.ProtoReflect.Descriptor instead. -func (*PutProjectStopResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{53} -} - -func (x *PutProjectStopResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PutProjectStopResponse) GetOutput() *PutProjectStopResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PutProjectStopResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,4,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Project *ProjectLightJsonObject `protobuf:"bytes,5,opt,name=project,proto3" json:"project,omitempty"` - ServiceStacks []*ServiceStackLightJsonObject `protobuf:"bytes,6,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` - Status ProcessStatus `protobuf:"varint,7,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProcessStatus" json:"status,omitempty"` - Sequence int32 `protobuf:"varint,8,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreatedByUser *UserJsonObject `protobuf:"bytes,9,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - CanceledByUser *UserJsonObjectNull `protobuf:"bytes,10,opt,name=canceledByUser,proto3" json:"canceledByUser,omitempty"` - ActionName string `protobuf:"bytes,11,opt,name=actionName,proto3" json:"actionName,omitempty"` - Created *Timestamp `protobuf:"bytes,12,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,13,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Started *TimestampNull `protobuf:"bytes,14,opt,name=started,proto3" json:"started,omitempty"` - Finished *TimestampNull `protobuf:"bytes,15,opt,name=finished,proto3" json:"finished,omitempty"` - CreatedBySystem bool `protobuf:"varint,16,opt,name=createdBySystem,proto3" json:"createdBySystem,omitempty"` - AppVersion *AppVersionJsonObjectNull `protobuf:"bytes,17,opt,name=appVersion,proto3" json:"appVersion,omitempty"` -} - -func (x *PutProjectStopResponseDto) Reset() { - *x = PutProjectStopResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutProjectStopResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutProjectStopResponseDto) ProtoMessage() {} - -func (x *PutProjectStopResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[54] - 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 PutProjectStopResponseDto.ProtoReflect.Descriptor instead. -func (*PutProjectStopResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{54} -} - -func (x *PutProjectStopResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PutProjectStopResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *PutProjectStopResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PutProjectStopResponseDto) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *PutProjectStopResponseDto) GetProject() *ProjectLightJsonObject { - if x != nil { - return x.Project - } - return nil -} - -func (x *PutProjectStopResponseDto) GetServiceStacks() []*ServiceStackLightJsonObject { - if x != nil { - return x.ServiceStacks - } - return nil -} - -func (x *PutProjectStopResponseDto) GetStatus() ProcessStatus { - if x != nil { - return x.Status - } - return ProcessStatus_PROCESS_STATUS_UNKNOWN -} - -func (x *PutProjectStopResponseDto) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *PutProjectStopResponseDto) GetCreatedByUser() *UserJsonObject { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *PutProjectStopResponseDto) GetCanceledByUser() *UserJsonObjectNull { - if x != nil { - return x.CanceledByUser - } - return nil -} - -func (x *PutProjectStopResponseDto) GetActionName() string { - if x != nil { - return x.ActionName - } - return "" -} - -func (x *PutProjectStopResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *PutProjectStopResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *PutProjectStopResponseDto) GetStarted() *TimestampNull { - if x != nil { - return x.Started - } - return nil -} - -func (x *PutProjectStopResponseDto) GetFinished() *TimestampNull { - if x != nil { - return x.Finished - } - return nil -} - -func (x *PutProjectStopResponseDto) GetCreatedBySystem() bool { - if x != nil { - return x.CreatedBySystem - } - return false -} - -func (x *PutProjectStopResponseDto) GetAppVersion() *AppVersionJsonObjectNull { - if x != nil { - return x.AppVersion - } - return nil -} - -type PutServiceStackRestartResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PutServiceStackRestartResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PutServiceStackRestartResponse) Reset() { - *x = PutServiceStackRestartResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[55] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutServiceStackRestartResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutServiceStackRestartResponse) ProtoMessage() {} - -func (x *PutServiceStackRestartResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[55] - 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 PutServiceStackRestartResponse.ProtoReflect.Descriptor instead. -func (*PutServiceStackRestartResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{55} -} - -func (x *PutServiceStackRestartResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PutServiceStackRestartResponse) GetOutput() *PutServiceStackRestartResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PutServiceStackRestartResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,4,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Project *ProjectLightJsonObject `protobuf:"bytes,5,opt,name=project,proto3" json:"project,omitempty"` - ServiceStacks []*ServiceStackLightJsonObject `protobuf:"bytes,6,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` - Status ProcessStatus `protobuf:"varint,7,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProcessStatus" json:"status,omitempty"` - Sequence int32 `protobuf:"varint,8,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreatedByUser *UserJsonObject `protobuf:"bytes,9,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - CanceledByUser *UserJsonObjectNull `protobuf:"bytes,10,opt,name=canceledByUser,proto3" json:"canceledByUser,omitempty"` - ActionName string `protobuf:"bytes,11,opt,name=actionName,proto3" json:"actionName,omitempty"` - Created *Timestamp `protobuf:"bytes,12,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,13,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Started *TimestampNull `protobuf:"bytes,14,opt,name=started,proto3" json:"started,omitempty"` - Finished *TimestampNull `protobuf:"bytes,15,opt,name=finished,proto3" json:"finished,omitempty"` - CreatedBySystem bool `protobuf:"varint,16,opt,name=createdBySystem,proto3" json:"createdBySystem,omitempty"` - AppVersion *AppVersionJsonObjectNull `protobuf:"bytes,17,opt,name=appVersion,proto3" json:"appVersion,omitempty"` -} - -func (x *PutServiceStackRestartResponseDto) Reset() { - *x = PutServiceStackRestartResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutServiceStackRestartResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutServiceStackRestartResponseDto) ProtoMessage() {} - -func (x *PutServiceStackRestartResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[56] - 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 PutServiceStackRestartResponseDto.ProtoReflect.Descriptor instead. -func (*PutServiceStackRestartResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{56} -} - -func (x *PutServiceStackRestartResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PutServiceStackRestartResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *PutServiceStackRestartResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PutServiceStackRestartResponseDto) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *PutServiceStackRestartResponseDto) GetProject() *ProjectLightJsonObject { - if x != nil { - return x.Project - } - return nil -} - -func (x *PutServiceStackRestartResponseDto) GetServiceStacks() []*ServiceStackLightJsonObject { - if x != nil { - return x.ServiceStacks - } - return nil -} - -func (x *PutServiceStackRestartResponseDto) GetStatus() ProcessStatus { - if x != nil { - return x.Status - } - return ProcessStatus_PROCESS_STATUS_UNKNOWN -} - -func (x *PutServiceStackRestartResponseDto) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *PutServiceStackRestartResponseDto) GetCreatedByUser() *UserJsonObject { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *PutServiceStackRestartResponseDto) GetCanceledByUser() *UserJsonObjectNull { - if x != nil { - return x.CanceledByUser - } - return nil -} - -func (x *PutServiceStackRestartResponseDto) GetActionName() string { - if x != nil { - return x.ActionName - } - return "" -} - -func (x *PutServiceStackRestartResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *PutServiceStackRestartResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *PutServiceStackRestartResponseDto) GetStarted() *TimestampNull { - if x != nil { - return x.Started - } - return nil -} - -func (x *PutServiceStackRestartResponseDto) GetFinished() *TimestampNull { - if x != nil { - return x.Finished - } - return nil -} - -func (x *PutServiceStackRestartResponseDto) GetCreatedBySystem() bool { - if x != nil { - return x.CreatedBySystem - } - return false -} - -func (x *PutServiceStackRestartResponseDto) GetAppVersion() *AppVersionJsonObjectNull { - if x != nil { - return x.AppVersion - } - return nil -} - -type PutServiceStackStartResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PutServiceStackStartResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PutServiceStackStartResponse) Reset() { - *x = PutServiceStackStartResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[57] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutServiceStackStartResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutServiceStackStartResponse) ProtoMessage() {} - -func (x *PutServiceStackStartResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[57] - 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 PutServiceStackStartResponse.ProtoReflect.Descriptor instead. -func (*PutServiceStackStartResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{57} -} - -func (x *PutServiceStackStartResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PutServiceStackStartResponse) GetOutput() *PutServiceStackStartResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PutServiceStackStartResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,4,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Project *ProjectLightJsonObject `protobuf:"bytes,5,opt,name=project,proto3" json:"project,omitempty"` - ServiceStacks []*ServiceStackLightJsonObject `protobuf:"bytes,6,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` - Status ProcessStatus `protobuf:"varint,7,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProcessStatus" json:"status,omitempty"` - Sequence int32 `protobuf:"varint,8,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreatedByUser *UserJsonObject `protobuf:"bytes,9,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - CanceledByUser *UserJsonObjectNull `protobuf:"bytes,10,opt,name=canceledByUser,proto3" json:"canceledByUser,omitempty"` - ActionName string `protobuf:"bytes,11,opt,name=actionName,proto3" json:"actionName,omitempty"` - Created *Timestamp `protobuf:"bytes,12,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,13,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Started *TimestampNull `protobuf:"bytes,14,opt,name=started,proto3" json:"started,omitempty"` - Finished *TimestampNull `protobuf:"bytes,15,opt,name=finished,proto3" json:"finished,omitempty"` - CreatedBySystem bool `protobuf:"varint,16,opt,name=createdBySystem,proto3" json:"createdBySystem,omitempty"` - AppVersion *AppVersionJsonObjectNull `protobuf:"bytes,17,opt,name=appVersion,proto3" json:"appVersion,omitempty"` -} - -func (x *PutServiceStackStartResponseDto) Reset() { - *x = PutServiceStackStartResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[58] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutServiceStackStartResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutServiceStackStartResponseDto) ProtoMessage() {} - -func (x *PutServiceStackStartResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[58] - 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 PutServiceStackStartResponseDto.ProtoReflect.Descriptor instead. -func (*PutServiceStackStartResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{58} -} - -func (x *PutServiceStackStartResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PutServiceStackStartResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *PutServiceStackStartResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PutServiceStackStartResponseDto) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *PutServiceStackStartResponseDto) GetProject() *ProjectLightJsonObject { - if x != nil { - return x.Project - } - return nil -} - -func (x *PutServiceStackStartResponseDto) GetServiceStacks() []*ServiceStackLightJsonObject { - if x != nil { - return x.ServiceStacks - } - return nil -} - -func (x *PutServiceStackStartResponseDto) GetStatus() ProcessStatus { - if x != nil { - return x.Status - } - return ProcessStatus_PROCESS_STATUS_UNKNOWN -} - -func (x *PutServiceStackStartResponseDto) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *PutServiceStackStartResponseDto) GetCreatedByUser() *UserJsonObject { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *PutServiceStackStartResponseDto) GetCanceledByUser() *UserJsonObjectNull { - if x != nil { - return x.CanceledByUser - } - return nil -} - -func (x *PutServiceStackStartResponseDto) GetActionName() string { - if x != nil { - return x.ActionName - } - return "" -} - -func (x *PutServiceStackStartResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *PutServiceStackStartResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *PutServiceStackStartResponseDto) GetStarted() *TimestampNull { - if x != nil { - return x.Started - } - return nil -} - -func (x *PutServiceStackStartResponseDto) GetFinished() *TimestampNull { - if x != nil { - return x.Finished - } - return nil -} - -func (x *PutServiceStackStartResponseDto) GetCreatedBySystem() bool { - if x != nil { - return x.CreatedBySystem - } - return false -} - -func (x *PutServiceStackStartResponseDto) GetAppVersion() *AppVersionJsonObjectNull { - if x != nil { - return x.AppVersion - } - return nil -} - -type PutServiceStackStopResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error *Error `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Output *PutServiceStackStopResponseDto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` -} - -func (x *PutServiceStackStopResponse) Reset() { - *x = PutServiceStackStopResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[59] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutServiceStackStopResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutServiceStackStopResponse) ProtoMessage() {} - -func (x *PutServiceStackStopResponse) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[59] - 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 PutServiceStackStopResponse.ProtoReflect.Descriptor instead. -func (*PutServiceStackStopResponse) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{59} -} - -func (x *PutServiceStackStopResponse) GetError() *Error { - if x != nil { - return x.Error - } - return nil -} - -func (x *PutServiceStackStopResponse) GetOutput() *PutServiceStackStopResponseDto { - if x != nil { - return x.Output - } - return nil -} - -type PutServiceStackStopResponseDto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,4,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Project *ProjectLightJsonObject `protobuf:"bytes,5,opt,name=project,proto3" json:"project,omitempty"` - ServiceStacks []*ServiceStackLightJsonObject `protobuf:"bytes,6,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` - Status ProcessStatus `protobuf:"varint,7,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProcessStatus" json:"status,omitempty"` - Sequence int32 `protobuf:"varint,8,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreatedByUser *UserJsonObject `protobuf:"bytes,9,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - CanceledByUser *UserJsonObjectNull `protobuf:"bytes,10,opt,name=canceledByUser,proto3" json:"canceledByUser,omitempty"` - ActionName string `protobuf:"bytes,11,opt,name=actionName,proto3" json:"actionName,omitempty"` - Created *Timestamp `protobuf:"bytes,12,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,13,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Started *TimestampNull `protobuf:"bytes,14,opt,name=started,proto3" json:"started,omitempty"` - Finished *TimestampNull `protobuf:"bytes,15,opt,name=finished,proto3" json:"finished,omitempty"` - CreatedBySystem bool `protobuf:"varint,16,opt,name=createdBySystem,proto3" json:"createdBySystem,omitempty"` - AppVersion *AppVersionJsonObjectNull `protobuf:"bytes,17,opt,name=appVersion,proto3" json:"appVersion,omitempty"` -} - -func (x *PutServiceStackStopResponseDto) Reset() { - *x = PutServiceStackStopResponseDto{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[60] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutServiceStackStopResponseDto) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutServiceStackStopResponseDto) ProtoMessage() {} - -func (x *PutServiceStackStopResponseDto) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[60] - 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 PutServiceStackStopResponseDto.ProtoReflect.Descriptor instead. -func (*PutServiceStackStopResponseDto) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{60} -} - -func (x *PutServiceStackStopResponseDto) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PutServiceStackStopResponseDto) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *PutServiceStackStopResponseDto) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *PutServiceStackStopResponseDto) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *PutServiceStackStopResponseDto) GetProject() *ProjectLightJsonObject { - if x != nil { - return x.Project - } - return nil -} - -func (x *PutServiceStackStopResponseDto) GetServiceStacks() []*ServiceStackLightJsonObject { - if x != nil { - return x.ServiceStacks - } - return nil -} - -func (x *PutServiceStackStopResponseDto) GetStatus() ProcessStatus { - if x != nil { - return x.Status - } - return ProcessStatus_PROCESS_STATUS_UNKNOWN -} - -func (x *PutServiceStackStopResponseDto) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *PutServiceStackStopResponseDto) GetCreatedByUser() *UserJsonObject { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *PutServiceStackStopResponseDto) GetCanceledByUser() *UserJsonObjectNull { - if x != nil { - return x.CanceledByUser - } - return nil -} - -func (x *PutServiceStackStopResponseDto) GetActionName() string { - if x != nil { - return x.ActionName - } - return "" -} - -func (x *PutServiceStackStopResponseDto) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *PutServiceStackStopResponseDto) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *PutServiceStackStopResponseDto) GetStarted() *TimestampNull { - if x != nil { - return x.Started - } - return nil -} - -func (x *PutServiceStackStopResponseDto) GetFinished() *TimestampNull { - if x != nil { - return x.Finished - } - return nil -} - -func (x *PutServiceStackStopResponseDto) GetCreatedBySystem() bool { - if x != nil { - return x.CreatedBySystem - } - return false -} - -func (x *PutServiceStackStopResponseDto) GetAppVersion() *AppVersionJsonObjectNull { - if x != nil { - return x.AppVersion - } - return nil -} - -type AppVersionBuild struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServiceStackId *StringNull `protobuf:"bytes,1,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - ServiceStackName *StringNull `protobuf:"bytes,2,opt,name=serviceStackName,proto3" json:"serviceStackName,omitempty"` - ServiceStackTypeVersionId *StringNull `protobuf:"bytes,3,opt,name=serviceStackTypeVersionId,proto3" json:"serviceStackTypeVersionId,omitempty"` - PipelineStart *TimestampNull `protobuf:"bytes,10,opt,name=pipelineStart,proto3" json:"pipelineStart,omitempty"` - PipelineFinish *TimestampNull `protobuf:"bytes,11,opt,name=pipelineFinish,proto3" json:"pipelineFinish,omitempty"` - PipelineFailed *TimestampNull `protobuf:"bytes,12,opt,name=pipelineFailed,proto3" json:"pipelineFailed,omitempty"` - ContainerCreationStart *TimestampNull `protobuf:"bytes,9,opt,name=containerCreationStart,proto3" json:"containerCreationStart,omitempty"` - StartDate *TimestampNull `protobuf:"bytes,4,opt,name=startDate,proto3" json:"startDate,omitempty"` - EndDate *TimestampNull `protobuf:"bytes,5,opt,name=endDate,proto3" json:"endDate,omitempty"` - CacheUsed bool `protobuf:"varint,6,opt,name=cacheUsed,proto3" json:"cacheUsed,omitempty"` - HasCurrentCache bool `protobuf:"varint,7,opt,name=hasCurrentCache,proto3" json:"hasCurrentCache,omitempty"` -} - -func (x *AppVersionBuild) Reset() { - *x = AppVersionBuild{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[61] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionBuild) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionBuild) ProtoMessage() {} - -func (x *AppVersionBuild) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[61] - 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 AppVersionBuild.ProtoReflect.Descriptor instead. -func (*AppVersionBuild) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{61} -} - -func (x *AppVersionBuild) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *AppVersionBuild) GetServiceStackName() *StringNull { - if x != nil { - return x.ServiceStackName - } - return nil -} - -func (x *AppVersionBuild) GetServiceStackTypeVersionId() *StringNull { - if x != nil { - return x.ServiceStackTypeVersionId - } - return nil -} - -func (x *AppVersionBuild) GetPipelineStart() *TimestampNull { - if x != nil { - return x.PipelineStart - } - return nil -} - -func (x *AppVersionBuild) GetPipelineFinish() *TimestampNull { - if x != nil { - return x.PipelineFinish - } - return nil -} - -func (x *AppVersionBuild) GetPipelineFailed() *TimestampNull { - if x != nil { - return x.PipelineFailed - } - return nil -} - -func (x *AppVersionBuild) GetContainerCreationStart() *TimestampNull { - if x != nil { - return x.ContainerCreationStart - } - return nil -} - -func (x *AppVersionBuild) GetStartDate() *TimestampNull { - if x != nil { - return x.StartDate - } - return nil -} - -func (x *AppVersionBuild) GetEndDate() *TimestampNull { - if x != nil { - return x.EndDate - } - return nil -} - -func (x *AppVersionBuild) GetCacheUsed() bool { - if x != nil { - return x.CacheUsed - } - return false -} - -func (x *AppVersionBuild) GetHasCurrentCache() bool { - if x != nil { - return x.HasCurrentCache - } - return false -} - -type AppVersionGithubIntegration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventType AppVersionGithubIntegrationEventType `protobuf:"varint,1,opt,name=eventType,proto3,enum=zBusinessZeropsApiProtocol.AppVersionGithubIntegrationEventType" json:"eventType,omitempty"` - BranchName *StringNull `protobuf:"bytes,2,opt,name=branchName,proto3" json:"branchName,omitempty"` - Pusher string `protobuf:"bytes,3,opt,name=pusher,proto3" json:"pusher,omitempty"` - Commit string `protobuf:"bytes,4,opt,name=commit,proto3" json:"commit,omitempty"` - RepositoryFullName string `protobuf:"bytes,5,opt,name=repositoryFullName,proto3" json:"repositoryFullName,omitempty"` - TagName *StringNull `protobuf:"bytes,6,opt,name=tagName,proto3" json:"tagName,omitempty"` -} - -func (x *AppVersionGithubIntegration) Reset() { - *x = AppVersionGithubIntegration{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[62] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionGithubIntegration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionGithubIntegration) ProtoMessage() {} - -func (x *AppVersionGithubIntegration) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[62] - 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 AppVersionGithubIntegration.ProtoReflect.Descriptor instead. -func (*AppVersionGithubIntegration) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{62} -} - -func (x *AppVersionGithubIntegration) GetEventType() AppVersionGithubIntegrationEventType { - if x != nil { - return x.EventType - } - return AppVersionGithubIntegrationEventType_APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_UNKNOWN -} - -func (x *AppVersionGithubIntegration) GetBranchName() *StringNull { - if x != nil { - return x.BranchName - } - return nil -} - -func (x *AppVersionGithubIntegration) GetPusher() string { - if x != nil { - return x.Pusher - } - return "" -} - -func (x *AppVersionGithubIntegration) GetCommit() string { - if x != nil { - return x.Commit - } - return "" -} - -func (x *AppVersionGithubIntegration) GetRepositoryFullName() string { - if x != nil { - return x.RepositoryFullName - } - return "" -} - -func (x *AppVersionGithubIntegration) GetTagName() *StringNull { - if x != nil { - return x.TagName - } - return nil -} - -type AppVersionGitlabIntegration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventType AppVersionGitlabIntegrationEventType `protobuf:"varint,1,opt,name=eventType,proto3,enum=zBusinessZeropsApiProtocol.AppVersionGitlabIntegrationEventType" json:"eventType,omitempty"` - BranchName *StringNull `protobuf:"bytes,2,opt,name=branchName,proto3" json:"branchName,omitempty"` - Pusher string `protobuf:"bytes,3,opt,name=pusher,proto3" json:"pusher,omitempty"` - Commit string `protobuf:"bytes,4,opt,name=commit,proto3" json:"commit,omitempty"` - RepositoryFullName string `protobuf:"bytes,5,opt,name=repositoryFullName,proto3" json:"repositoryFullName,omitempty"` - TagName *StringNull `protobuf:"bytes,6,opt,name=tagName,proto3" json:"tagName,omitempty"` -} - -func (x *AppVersionGitlabIntegration) Reset() { - *x = AppVersionGitlabIntegration{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[63] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionGitlabIntegration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionGitlabIntegration) ProtoMessage() {} - -func (x *AppVersionGitlabIntegration) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[63] - 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 AppVersionGitlabIntegration.ProtoReflect.Descriptor instead. -func (*AppVersionGitlabIntegration) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{63} -} - -func (x *AppVersionGitlabIntegration) GetEventType() AppVersionGitlabIntegrationEventType { - if x != nil { - return x.EventType - } - return AppVersionGitlabIntegrationEventType_APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_UNKNOWN -} - -func (x *AppVersionGitlabIntegration) GetBranchName() *StringNull { - if x != nil { - return x.BranchName - } - return nil -} - -func (x *AppVersionGitlabIntegration) GetPusher() string { - if x != nil { - return x.Pusher - } - return "" -} - -func (x *AppVersionGitlabIntegration) GetCommit() string { - if x != nil { - return x.Commit - } - return "" -} - -func (x *AppVersionGitlabIntegration) GetRepositoryFullName() string { - if x != nil { - return x.RepositoryFullName - } - return "" -} - -func (x *AppVersionGitlabIntegration) GetTagName() *StringNull { - if x != nil { - return x.TagName - } - return nil -} - -type AppVersionJsonObject struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,15,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - ProjectId *StringNull `protobuf:"bytes,16,opt,name=projectId,proto3" json:"projectId,omitempty"` - Status AppVersionStatus `protobuf:"varint,9,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.AppVersionStatus" json:"status,omitempty"` - Source AppVersionSource `protobuf:"varint,2,opt,name=source,proto3,enum=zBusinessZeropsApiProtocol.AppVersionSource" json:"source,omitempty"` - Sequence int32 `protobuf:"varint,3,opt,name=sequence,proto3" json:"sequence,omitempty"` - Name *StringNull `protobuf:"bytes,10,opt,name=name,proto3" json:"name,omitempty"` - Created *TimestampNull `protobuf:"bytes,11,opt,name=created,proto3" json:"created,omitempty"` - Build *AppVersionBuildNull `protobuf:"bytes,4,opt,name=build,proto3" json:"build,omitempty"` - PrepareCustomRuntime *PrepareCustomRuntimeNull `protobuf:"bytes,13,opt,name=prepareCustomRuntime,proto3" json:"prepareCustomRuntime,omitempty"` - GithubIntegration *AppVersionGithubIntegrationNull `protobuf:"bytes,5,opt,name=githubIntegration,proto3" json:"githubIntegration,omitempty"` - GitlabIntegration *AppVersionGitlabIntegrationNull `protobuf:"bytes,6,opt,name=gitlabIntegration,proto3" json:"gitlabIntegration,omitempty"` - CreatedByUser *UserJsonObjectNull `protobuf:"bytes,7,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - ActivationDate *TimestampNull `protobuf:"bytes,8,opt,name=activationDate,proto3" json:"activationDate,omitempty"` - PublicGitSource *AppVersionPublicGitSourceNull `protobuf:"bytes,12,opt,name=publicGitSource,proto3" json:"publicGitSource,omitempty"` - ConfigContent *StringNull `protobuf:"bytes,14,opt,name=configContent,proto3" json:"configContent,omitempty"` -} - -func (x *AppVersionJsonObject) Reset() { - *x = AppVersionJsonObject{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[64] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionJsonObject) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionJsonObject) ProtoMessage() {} - -func (x *AppVersionJsonObject) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[64] - 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 AppVersionJsonObject.ProtoReflect.Descriptor instead. -func (*AppVersionJsonObject) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{64} -} - -func (x *AppVersionJsonObject) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *AppVersionJsonObject) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *AppVersionJsonObject) GetProjectId() *StringNull { - if x != nil { - return x.ProjectId - } - return nil -} - -func (x *AppVersionJsonObject) GetStatus() AppVersionStatus { - if x != nil { - return x.Status - } - return AppVersionStatus_APP_VERSION_STATUS_UNKNOWN -} - -func (x *AppVersionJsonObject) GetSource() AppVersionSource { - if x != nil { - return x.Source - } - return AppVersionSource_APP_VERSION_SOURCE_UNKNOWN -} - -func (x *AppVersionJsonObject) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *AppVersionJsonObject) GetName() *StringNull { - if x != nil { - return x.Name - } - return nil -} - -func (x *AppVersionJsonObject) GetCreated() *TimestampNull { - if x != nil { - return x.Created - } - return nil -} - -func (x *AppVersionJsonObject) GetBuild() *AppVersionBuildNull { - if x != nil { - return x.Build - } - return nil -} - -func (x *AppVersionJsonObject) GetPrepareCustomRuntime() *PrepareCustomRuntimeNull { - if x != nil { - return x.PrepareCustomRuntime - } - return nil -} - -func (x *AppVersionJsonObject) GetGithubIntegration() *AppVersionGithubIntegrationNull { - if x != nil { - return x.GithubIntegration - } - return nil -} - -func (x *AppVersionJsonObject) GetGitlabIntegration() *AppVersionGitlabIntegrationNull { - if x != nil { - return x.GitlabIntegration - } - return nil -} - -func (x *AppVersionJsonObject) GetCreatedByUser() *UserJsonObjectNull { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *AppVersionJsonObject) GetActivationDate() *TimestampNull { - if x != nil { - return x.ActivationDate - } - return nil -} - -func (x *AppVersionJsonObject) GetPublicGitSource() *AppVersionPublicGitSourceNull { - if x != nil { - return x.PublicGitSource - } - return nil -} - -func (x *AppVersionJsonObject) GetConfigContent() *StringNull { - if x != nil { - return x.ConfigContent - } - return nil -} - -type AppVersionLight struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Status AppVersionStatus `protobuf:"varint,2,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.AppVersionStatus" json:"status,omitempty"` - Created *Timestamp `protobuf:"bytes,3,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,4,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` -} - -func (x *AppVersionLight) Reset() { - *x = AppVersionLight{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[65] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionLight) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionLight) ProtoMessage() {} - -func (x *AppVersionLight) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[65] - 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 AppVersionLight.ProtoReflect.Descriptor instead. -func (*AppVersionLight) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{65} -} - -func (x *AppVersionLight) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *AppVersionLight) GetStatus() AppVersionStatus { - if x != nil { - return x.Status - } - return AppVersionStatus_APP_VERSION_STATUS_UNKNOWN -} - -func (x *AppVersionLight) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *AppVersionLight) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -type AppVersionPublicGitSource struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GitUrl string `protobuf:"bytes,1,opt,name=gitUrl,proto3" json:"gitUrl,omitempty"` - BranchName string `protobuf:"bytes,2,opt,name=branchName,proto3" json:"branchName,omitempty"` -} - -func (x *AppVersionPublicGitSource) Reset() { - *x = AppVersionPublicGitSource{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[66] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionPublicGitSource) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionPublicGitSource) ProtoMessage() {} - -func (x *AppVersionPublicGitSource) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[66] - 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 AppVersionPublicGitSource.ProtoReflect.Descriptor instead. -func (*AppVersionPublicGitSource) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{66} -} - -func (x *AppVersionPublicGitSource) GetGitUrl() string { - if x != nil { - return x.GitUrl - } - return "" -} - -func (x *AppVersionPublicGitSource) GetBranchName() string { - if x != nil { - return x.BranchName - } - return "" -} - -type AppVersionUserData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` - Type UserDataType `protobuf:"varint,3,opt,name=type,proto3,enum=zBusinessZeropsApiProtocol.UserDataType" json:"type,omitempty"` -} - -func (x *AppVersionUserData) Reset() { - *x = AppVersionUserData{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[67] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionUserData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionUserData) ProtoMessage() {} - -func (x *AppVersionUserData) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[67] - 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 AppVersionUserData.ProtoReflect.Descriptor instead. -func (*AppVersionUserData) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{67} -} - -func (x *AppVersionUserData) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *AppVersionUserData) GetContent() string { - if x != nil { - return x.Content - } - return "" -} - -func (x *AppVersionUserData) GetType() UserDataType { - if x != nil { - return x.Type - } - return UserDataType_USER_DATA_TYPE_UNKNOWN -} - -type ClientAvatar struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LargeAvatarUrl *StringNull `protobuf:"bytes,1,opt,name=largeAvatarUrl,proto3" json:"largeAvatarUrl,omitempty"` - SmallAvatarUrl *StringNull `protobuf:"bytes,2,opt,name=smallAvatarUrl,proto3" json:"smallAvatarUrl,omitempty"` - ExternalAvatarUrl *StringNull `protobuf:"bytes,3,opt,name=externalAvatarUrl,proto3" json:"externalAvatarUrl,omitempty"` -} - -func (x *ClientAvatar) Reset() { - *x = ClientAvatar{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[68] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientAvatar) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientAvatar) ProtoMessage() {} - -func (x *ClientAvatar) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[68] - 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 ClientAvatar.ProtoReflect.Descriptor instead. -func (*ClientAvatar) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{68} -} - -func (x *ClientAvatar) GetLargeAvatarUrl() *StringNull { - if x != nil { - return x.LargeAvatarUrl - } - return nil -} - -func (x *ClientAvatar) GetSmallAvatarUrl() *StringNull { - if x != nil { - return x.SmallAvatarUrl - } - return nil -} - -func (x *ClientAvatar) GetExternalAvatarUrl() *StringNull { - if x != nil { - return x.ExternalAvatarUrl - } - return nil -} - -type ClientExtra struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - CompanyName string `protobuf:"bytes,2,opt,name=companyName,proto3" json:"companyName,omitempty"` - CompanyNumber *StringNull `protobuf:"bytes,3,opt,name=companyNumber,proto3" json:"companyNumber,omitempty"` - VatNumber *StringNull `protobuf:"bytes,4,opt,name=vatNumber,proto3" json:"vatNumber,omitempty"` - Avatar *ClientAvatarNull `protobuf:"bytes,5,opt,name=avatar,proto3" json:"avatar,omitempty"` - AccountName string `protobuf:"bytes,6,opt,name=accountName,proto3" json:"accountName,omitempty"` -} - -func (x *ClientExtra) Reset() { - *x = ClientExtra{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[69] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientExtra) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientExtra) ProtoMessage() {} - -func (x *ClientExtra) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[69] - 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 ClientExtra.ProtoReflect.Descriptor instead. -func (*ClientExtra) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{69} -} - -func (x *ClientExtra) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ClientExtra) GetCompanyName() string { - if x != nil { - return x.CompanyName - } - return "" -} - -func (x *ClientExtra) GetCompanyNumber() *StringNull { - if x != nil { - return x.CompanyNumber - } - return nil -} - -func (x *ClientExtra) GetVatNumber() *StringNull { - if x != nil { - return x.VatNumber - } - return nil -} - -func (x *ClientExtra) GetAvatar() *ClientAvatarNull { - if x != nil { - return x.Avatar - } - return nil -} - -func (x *ClientExtra) GetAccountName() string { - if x != nil { - return x.AccountName - } - return "" -} - -type ClientUserExtra struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - UserId string `protobuf:"bytes,3,opt,name=userId,proto3" json:"userId,omitempty"` - Status ClientUserLightStatus `protobuf:"varint,4,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ClientUserLightStatus" json:"status,omitempty"` - RoleCode ClientUserLightRoleCode `protobuf:"varint,5,opt,name=roleCode,proto3,enum=zBusinessZeropsApiProtocol.ClientUserLightRoleCode" json:"roleCode,omitempty"` - Client *ClientExtra `protobuf:"bytes,6,opt,name=client,proto3" json:"client,omitempty"` - User *UserLight `protobuf:"bytes,7,opt,name=user,proto3" json:"user,omitempty"` -} - -func (x *ClientUserExtra) Reset() { - *x = ClientUserExtra{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[70] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientUserExtra) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientUserExtra) ProtoMessage() {} - -func (x *ClientUserExtra) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[70] - 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 ClientUserExtra.ProtoReflect.Descriptor instead. -func (*ClientUserExtra) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{70} -} - -func (x *ClientUserExtra) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ClientUserExtra) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *ClientUserExtra) GetUserId() string { - if x != nil { - return x.UserId - } - return "" -} - -func (x *ClientUserExtra) GetStatus() ClientUserLightStatus { - if x != nil { - return x.Status - } - return ClientUserLightStatus_CLIENT_USER_LIGHT_STATUS_UNKNOWN -} - -func (x *ClientUserExtra) GetRoleCode() ClientUserLightRoleCode { - if x != nil { - return x.RoleCode - } - return ClientUserLightRoleCode_CLIENT_USER_LIGHT_ROLE_CODE_UNKNOWN -} - -func (x *ClientUserExtra) GetClient() *ClientExtra { - if x != nil { - return x.Client - } - return nil -} - -func (x *ClientUserExtra) GetUser() *UserLight { - if x != nil { - return x.User - } - return nil -} - -type CustomAutoscaling struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - VerticalAutoscaling *VerticalAutoscalingNull `protobuf:"bytes,1,opt,name=verticalAutoscaling,proto3" json:"verticalAutoscaling,omitempty"` - HorizontalAutoscaling *HorizontalAutoscalingNull `protobuf:"bytes,2,opt,name=horizontalAutoscaling,proto3" json:"horizontalAutoscaling,omitempty"` -} - -func (x *CustomAutoscaling) Reset() { - *x = CustomAutoscaling{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[71] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CustomAutoscaling) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CustomAutoscaling) ProtoMessage() {} - -func (x *CustomAutoscaling) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[71] - 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 CustomAutoscaling.ProtoReflect.Descriptor instead. -func (*CustomAutoscaling) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{71} -} - -func (x *CustomAutoscaling) GetVerticalAutoscaling() *VerticalAutoscalingNull { - if x != nil { - return x.VerticalAutoscaling - } - return nil -} - -func (x *CustomAutoscaling) GetHorizontalAutoscaling() *HorizontalAutoscalingNull { - if x != nil { - return x.HorizontalAutoscaling - } - return nil -} - -type GithubIntegration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` - AuthorizationRequired bool `protobuf:"varint,2,opt,name=authorizationRequired,proto3" json:"authorizationRequired,omitempty"` - BranchName *StringNull `protobuf:"bytes,3,opt,name=branchName,proto3" json:"branchName,omitempty"` - EventType GithubIntegrationEventType `protobuf:"varint,5,opt,name=eventType,proto3,enum=zBusinessZeropsApiProtocol.GithubIntegrationEventType" json:"eventType,omitempty"` - IsActive bool `protobuf:"varint,6,opt,name=isActive,proto3" json:"isActive,omitempty"` - RepositoryFullName string `protobuf:"bytes,7,opt,name=repositoryFullName,proto3" json:"repositoryFullName,omitempty"` - WebhookId *Int32Null `protobuf:"bytes,9,opt,name=webhookId,proto3" json:"webhookId,omitempty"` -} - -func (x *GithubIntegration) Reset() { - *x = GithubIntegration{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[72] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GithubIntegration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GithubIntegration) ProtoMessage() {} - -func (x *GithubIntegration) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[72] - 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 GithubIntegration.ProtoReflect.Descriptor instead. -func (*GithubIntegration) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{72} -} - -func (x *GithubIntegration) GetUserId() string { - if x != nil { - return x.UserId - } - return "" -} - -func (x *GithubIntegration) GetAuthorizationRequired() bool { - if x != nil { - return x.AuthorizationRequired - } - return false -} - -func (x *GithubIntegration) GetBranchName() *StringNull { - if x != nil { - return x.BranchName - } - return nil -} - -func (x *GithubIntegration) GetEventType() GithubIntegrationEventType { - if x != nil { - return x.EventType - } - return GithubIntegrationEventType_GITHUB_INTEGRATION_EVENT_TYPE_UNKNOWN -} - -func (x *GithubIntegration) GetIsActive() bool { - if x != nil { - return x.IsActive - } - return false -} - -func (x *GithubIntegration) GetRepositoryFullName() string { - if x != nil { - return x.RepositoryFullName - } - return "" -} - -func (x *GithubIntegration) GetWebhookId() *Int32Null { - if x != nil { - return x.WebhookId - } - return nil -} - -type GitlabIntegration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` - AuthorizationRequired bool `protobuf:"varint,2,opt,name=authorizationRequired,proto3" json:"authorizationRequired,omitempty"` - BranchName *StringNull `protobuf:"bytes,3,opt,name=branchName,proto3" json:"branchName,omitempty"` - EventType GitlabIntegrationEventType `protobuf:"varint,4,opt,name=eventType,proto3,enum=zBusinessZeropsApiProtocol.GitlabIntegrationEventType" json:"eventType,omitempty"` - IsActive bool `protobuf:"varint,5,opt,name=isActive,proto3" json:"isActive,omitempty"` - RepositoryFullName string `protobuf:"bytes,6,opt,name=repositoryFullName,proto3" json:"repositoryFullName,omitempty"` - WebhookId *Int32Null `protobuf:"bytes,7,opt,name=webhookId,proto3" json:"webhookId,omitempty"` -} - -func (x *GitlabIntegration) Reset() { - *x = GitlabIntegration{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[73] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GitlabIntegration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GitlabIntegration) ProtoMessage() {} - -func (x *GitlabIntegration) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[73] - 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 GitlabIntegration.ProtoReflect.Descriptor instead. -func (*GitlabIntegration) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{73} -} - -func (x *GitlabIntegration) GetUserId() string { - if x != nil { - return x.UserId - } - return "" -} - -func (x *GitlabIntegration) GetAuthorizationRequired() bool { - if x != nil { - return x.AuthorizationRequired - } - return false -} - -func (x *GitlabIntegration) GetBranchName() *StringNull { - if x != nil { - return x.BranchName - } - return nil -} - -func (x *GitlabIntegration) GetEventType() GitlabIntegrationEventType { - if x != nil { - return x.EventType - } - return GitlabIntegrationEventType_GITLAB_INTEGRATION_EVENT_TYPE_UNKNOWN -} - -func (x *GitlabIntegration) GetIsActive() bool { - if x != nil { - return x.IsActive - } - return false -} - -func (x *GitlabIntegration) GetRepositoryFullName() string { - if x != nil { - return x.RepositoryFullName - } - return "" -} - -func (x *GitlabIntegration) GetWebhookId() *Int32Null { - if x != nil { - return x.WebhookId - } - return nil -} - -type HorizontalAutoscaling struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MaxContainerCount int32 `protobuf:"varint,1,opt,name=maxContainerCount,proto3" json:"maxContainerCount,omitempty"` - MinContainerCount int32 `protobuf:"varint,2,opt,name=minContainerCount,proto3" json:"minContainerCount,omitempty"` -} - -func (x *HorizontalAutoscaling) Reset() { - *x = HorizontalAutoscaling{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[74] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HorizontalAutoscaling) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HorizontalAutoscaling) ProtoMessage() {} - -func (x *HorizontalAutoscaling) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[74] - 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 HorizontalAutoscaling.ProtoReflect.Descriptor instead. -func (*HorizontalAutoscaling) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{74} -} - -func (x *HorizontalAutoscaling) GetMaxContainerCount() int32 { - if x != nil { - return x.MaxContainerCount - } - return 0 -} - -func (x *HorizontalAutoscaling) GetMinContainerCount() int32 { - if x != nil { - return x.MinContainerCount - } - return 0 -} - -type Language struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *Language) Reset() { - *x = Language{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[75] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Language) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Language) ProtoMessage() {} - -func (x *Language) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[75] - 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 Language.ProtoReflect.Descriptor instead. -func (*Language) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{75} -} - -func (x *Language) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Language) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type LocationServiceStackInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServiceStackName string `protobuf:"bytes,1,opt,name=serviceStackName,proto3" json:"serviceStackName,omitempty"` - ServiceStackTypeName string `protobuf:"bytes,2,opt,name=serviceStackTypeName,proto3" json:"serviceStackTypeName,omitempty"` - ServiceStackTypeVersionName string `protobuf:"bytes,3,opt,name=serviceStackTypeVersionName,proto3" json:"serviceStackTypeVersionName,omitempty"` -} - -func (x *LocationServiceStackInfo) Reset() { - *x = LocationServiceStackInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[76] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LocationServiceStackInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LocationServiceStackInfo) ProtoMessage() {} - -func (x *LocationServiceStackInfo) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[76] - 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 LocationServiceStackInfo.ProtoReflect.Descriptor instead. -func (*LocationServiceStackInfo) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{76} -} - -func (x *LocationServiceStackInfo) GetServiceStackName() string { - if x != nil { - return x.ServiceStackName - } - return "" -} - -func (x *LocationServiceStackInfo) GetServiceStackTypeName() string { - if x != nil { - return x.ServiceStackTypeName - } - return "" -} - -func (x *LocationServiceStackInfo) GetServiceStackTypeVersionName() string { - if x != nil { - return x.ServiceStackTypeVersionName - } - return "" -} - -type PrepareCustomRuntime struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ContainerCreationStart *TimestampNull `protobuf:"bytes,8,opt,name=containerCreationStart,proto3" json:"containerCreationStart,omitempty"` - StartDate *TimestampNull `protobuf:"bytes,1,opt,name=startDate,proto3" json:"startDate,omitempty"` - EndDate *TimestampNull `protobuf:"bytes,2,opt,name=endDate,proto3" json:"endDate,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,5,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - ServiceStackName *StringNull `protobuf:"bytes,6,opt,name=serviceStackName,proto3" json:"serviceStackName,omitempty"` -} - -func (x *PrepareCustomRuntime) Reset() { - *x = PrepareCustomRuntime{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[77] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrepareCustomRuntime) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrepareCustomRuntime) ProtoMessage() {} - -func (x *PrepareCustomRuntime) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[77] - 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 PrepareCustomRuntime.ProtoReflect.Descriptor instead. -func (*PrepareCustomRuntime) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{77} -} - -func (x *PrepareCustomRuntime) GetContainerCreationStart() *TimestampNull { - if x != nil { - return x.ContainerCreationStart - } - return nil -} - -func (x *PrepareCustomRuntime) GetStartDate() *TimestampNull { - if x != nil { - return x.StartDate - } - return nil -} - -func (x *PrepareCustomRuntime) GetEndDate() *TimestampNull { - if x != nil { - return x.EndDate - } - return nil -} - -func (x *PrepareCustomRuntime) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *PrepareCustomRuntime) GetServiceStackName() *StringNull { - if x != nil { - return x.ServiceStackName - } - return nil -} - -type Process struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId *StringNull `protobuf:"bytes,4,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Project *ProjectLightJsonObject `protobuf:"bytes,5,opt,name=project,proto3" json:"project,omitempty"` - ServiceStacks []*ServiceStackLightJsonObject `protobuf:"bytes,6,rep,name=serviceStacks,proto3" json:"serviceStacks,omitempty"` - Status ProcessStatus `protobuf:"varint,7,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProcessStatus" json:"status,omitempty"` - Sequence int32 `protobuf:"varint,8,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreatedByUser *UserJsonObject `protobuf:"bytes,9,opt,name=createdByUser,proto3" json:"createdByUser,omitempty"` - CanceledByUser *UserJsonObjectNull `protobuf:"bytes,10,opt,name=canceledByUser,proto3" json:"canceledByUser,omitempty"` - ActionName string `protobuf:"bytes,11,opt,name=actionName,proto3" json:"actionName,omitempty"` - Created *Timestamp `protobuf:"bytes,12,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,13,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - Started *TimestampNull `protobuf:"bytes,14,opt,name=started,proto3" json:"started,omitempty"` - Finished *TimestampNull `protobuf:"bytes,15,opt,name=finished,proto3" json:"finished,omitempty"` - CreatedBySystem bool `protobuf:"varint,16,opt,name=createdBySystem,proto3" json:"createdBySystem,omitempty"` - AppVersion *AppVersionJsonObjectNull `protobuf:"bytes,17,opt,name=appVersion,proto3" json:"appVersion,omitempty"` -} - -func (x *Process) Reset() { - *x = Process{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[78] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Process) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Process) ProtoMessage() {} - -func (x *Process) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[78] - 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 Process.ProtoReflect.Descriptor instead. -func (*Process) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{78} -} - -func (x *Process) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Process) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *Process) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *Process) GetServiceStackId() *StringNull { - if x != nil { - return x.ServiceStackId - } - return nil -} - -func (x *Process) GetProject() *ProjectLightJsonObject { - if x != nil { - return x.Project - } - return nil -} - -func (x *Process) GetServiceStacks() []*ServiceStackLightJsonObject { - if x != nil { - return x.ServiceStacks - } - return nil -} - -func (x *Process) GetStatus() ProcessStatus { - if x != nil { - return x.Status - } - return ProcessStatus_PROCESS_STATUS_UNKNOWN -} - -func (x *Process) GetSequence() int32 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *Process) GetCreatedByUser() *UserJsonObject { - if x != nil { - return x.CreatedByUser - } - return nil -} - -func (x *Process) GetCanceledByUser() *UserJsonObjectNull { - if x != nil { - return x.CanceledByUser - } - return nil -} - -func (x *Process) GetActionName() string { - if x != nil { - return x.ActionName - } - return "" -} - -func (x *Process) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *Process) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *Process) GetStarted() *TimestampNull { - if x != nil { - return x.Started - } - return nil -} - -func (x *Process) GetFinished() *TimestampNull { - if x != nil { - return x.Finished - } - return nil -} - -func (x *Process) GetCreatedBySystem() bool { - if x != nil { - return x.CreatedBySystem - } - return false -} - -func (x *Process) GetAppVersion() *AppVersionJsonObjectNull { - if x != nil { - return x.AppVersion - } - return nil -} - -type Project struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Description *StringNull `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` - TagList []string `protobuf:"bytes,5,rep,name=tagList,proto3" json:"tagList,omitempty"` - Status ProjectStatus `protobuf:"varint,6,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProjectStatus" json:"status,omitempty"` - Created *Timestamp `protobuf:"bytes,7,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,8,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - PublicIpV4 *StringNull `protobuf:"bytes,9,opt,name=publicIpV4,proto3" json:"publicIpV4,omitempty"` - PublicIpV6 *StringNull `protobuf:"bytes,10,opt,name=publicIpV6,proto3" json:"publicIpV6,omitempty"` - ZeropsSubdomainHost *StringNull `protobuf:"bytes,13,opt,name=zeropsSubdomainHost,proto3" json:"zeropsSubdomainHost,omitempty"` - AutoStartup bool `protobuf:"varint,14,opt,name=autoStartup,proto3" json:"autoStartup,omitempty"` -} - -func (x *Project) Reset() { - *x = Project{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[79] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Project) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Project) ProtoMessage() {} - -func (x *Project) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[79] - 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 Project.ProtoReflect.Descriptor instead. -func (*Project) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{79} -} - -func (x *Project) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Project) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *Project) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Project) GetDescription() *StringNull { - if x != nil { - return x.Description - } - return nil -} - -func (x *Project) GetTagList() []string { - if x != nil { - return x.TagList - } - return nil -} - -func (x *Project) GetStatus() ProjectStatus { - if x != nil { - return x.Status - } - return ProjectStatus_PROJECT_STATUS_UNKNOWN -} - -func (x *Project) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *Project) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *Project) GetPublicIpV4() *StringNull { - if x != nil { - return x.PublicIpV4 - } - return nil -} - -func (x *Project) GetPublicIpV6() *StringNull { - if x != nil { - return x.PublicIpV6 - } - return nil -} - -func (x *Project) GetZeropsSubdomainHost() *StringNull { - if x != nil { - return x.ZeropsSubdomainHost - } - return nil -} - -func (x *Project) GetAutoStartup() bool { - if x != nil { - return x.AutoStartup - } - return false -} - -type ProjectImportServiceStack struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Error *ErrorNull `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` - Processes []*Process `protobuf:"bytes,4,rep,name=processes,proto3" json:"processes,omitempty"` -} - -func (x *ProjectImportServiceStack) Reset() { - *x = ProjectImportServiceStack{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[80] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ProjectImportServiceStack) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProjectImportServiceStack) ProtoMessage() {} - -func (x *ProjectImportServiceStack) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[80] - 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 ProjectImportServiceStack.ProtoReflect.Descriptor instead. -func (*ProjectImportServiceStack) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{80} -} - -func (x *ProjectImportServiceStack) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ProjectImportServiceStack) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ProjectImportServiceStack) GetError() *ErrorNull { - if x != nil { - return x.Error - } - return nil -} - -func (x *ProjectImportServiceStack) GetProcesses() []*Process { - if x != nil { - return x.Processes - } - return nil -} - -type ProjectLight struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Description *StringNull `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` - TagList []string `protobuf:"bytes,5,rep,name=tagList,proto3" json:"tagList,omitempty"` - Status ProjectStatus `protobuf:"varint,6,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProjectStatus" json:"status,omitempty"` - Created *Timestamp `protobuf:"bytes,7,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,8,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` -} - -func (x *ProjectLight) Reset() { - *x = ProjectLight{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[81] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ProjectLight) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProjectLight) ProtoMessage() {} - -func (x *ProjectLight) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[81] - 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 ProjectLight.ProtoReflect.Descriptor instead. -func (*ProjectLight) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{81} -} - -func (x *ProjectLight) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ProjectLight) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *ProjectLight) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ProjectLight) GetDescription() *StringNull { - if x != nil { - return x.Description - } - return nil -} - -func (x *ProjectLight) GetTagList() []string { - if x != nil { - return x.TagList - } - return nil -} - -func (x *ProjectLight) GetStatus() ProjectStatus { - if x != nil { - return x.Status - } - return ProjectStatus_PROJECT_STATUS_UNKNOWN -} - -func (x *ProjectLight) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *ProjectLight) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -type ProjectLightJsonObject struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Description *StringNull `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` - TagList []string `protobuf:"bytes,5,rep,name=tagList,proto3" json:"tagList,omitempty"` - Status ProjectStatus `protobuf:"varint,6,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ProjectStatus" json:"status,omitempty"` - Created *Timestamp `protobuf:"bytes,7,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,8,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` -} - -func (x *ProjectLightJsonObject) Reset() { - *x = ProjectLightJsonObject{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[82] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ProjectLightJsonObject) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProjectLightJsonObject) ProtoMessage() {} - -func (x *ProjectLightJsonObject) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[82] - 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 ProjectLightJsonObject.ProtoReflect.Descriptor instead. -func (*ProjectLightJsonObject) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{82} -} - -func (x *ProjectLightJsonObject) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ProjectLightJsonObject) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *ProjectLightJsonObject) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ProjectLightJsonObject) GetDescription() *StringNull { - if x != nil { - return x.Description - } - return nil -} - -func (x *ProjectLightJsonObject) GetTagList() []string { - if x != nil { - return x.TagList - } - return nil -} - -func (x *ProjectLightJsonObject) GetStatus() ProjectStatus { - if x != nil { - return x.Status - } - return ProjectStatus_PROJECT_STATUS_UNKNOWN -} - -func (x *ProjectLightJsonObject) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *ProjectLightJsonObject) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -type PublicHttpRoutingDomain struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DomainName string `protobuf:"bytes,1,opt,name=domainName,proto3" json:"domainName,omitempty"` - DnsCheckStatus PublicHttpRoutingDomainDnsCheckStatus `protobuf:"varint,2,opt,name=dnsCheckStatus,proto3,enum=zBusinessZeropsApiProtocol.PublicHttpRoutingDomainDnsCheckStatus" json:"dnsCheckStatus,omitempty"` - SslStatus PublicHttpRoutingDomainSslStatus `protobuf:"varint,3,opt,name=sslStatus,proto3,enum=zBusinessZeropsApiProtocol.PublicHttpRoutingDomainSslStatus" json:"sslStatus,omitempty"` -} - -func (x *PublicHttpRoutingDomain) Reset() { - *x = PublicHttpRoutingDomain{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[83] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PublicHttpRoutingDomain) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PublicHttpRoutingDomain) ProtoMessage() {} - -func (x *PublicHttpRoutingDomain) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[83] - 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 PublicHttpRoutingDomain.ProtoReflect.Descriptor instead. -func (*PublicHttpRoutingDomain) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{83} -} - -func (x *PublicHttpRoutingDomain) GetDomainName() string { - if x != nil { - return x.DomainName - } - return "" -} - -func (x *PublicHttpRoutingDomain) GetDnsCheckStatus() PublicHttpRoutingDomainDnsCheckStatus { - if x != nil { - return x.DnsCheckStatus - } - return PublicHttpRoutingDomainDnsCheckStatus_PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_UNKNOWN -} - -func (x *PublicHttpRoutingDomain) GetSslStatus() PublicHttpRoutingDomainSslStatus { - if x != nil { - return x.SslStatus - } - return PublicHttpRoutingDomainSslStatus_PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_UNKNOWN -} - -type PublicHttpRoutingLocation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` - ServiceStackId string `protobuf:"bytes,3,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - ServiceStackInfo *LocationServiceStackInfo `protobuf:"bytes,4,opt,name=serviceStackInfo,proto3" json:"serviceStackInfo,omitempty"` -} - -func (x *PublicHttpRoutingLocation) Reset() { - *x = PublicHttpRoutingLocation{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[84] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PublicHttpRoutingLocation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PublicHttpRoutingLocation) ProtoMessage() {} - -func (x *PublicHttpRoutingLocation) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[84] - 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 PublicHttpRoutingLocation.ProtoReflect.Descriptor instead. -func (*PublicHttpRoutingLocation) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{84} -} - -func (x *PublicHttpRoutingLocation) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -func (x *PublicHttpRoutingLocation) GetPort() int32 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *PublicHttpRoutingLocation) GetServiceStackId() string { - if x != nil { - return x.ServiceStackId - } - return "" -} - -func (x *PublicHttpRoutingLocation) GetServiceStackInfo() *LocationServiceStackInfo { - if x != nil { - return x.ServiceStackInfo - } - return nil -} - -type RequestedPortsJsonObject struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsActive bool `protobuf:"varint,1,opt,name=isActive,proto3" json:"isActive,omitempty"` - RequestedPorts []*ServicePort `protobuf:"bytes,2,rep,name=requestedPorts,proto3" json:"requestedPorts,omitempty"` -} - -func (x *RequestedPortsJsonObject) Reset() { - *x = RequestedPortsJsonObject{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[85] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RequestedPortsJsonObject) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RequestedPortsJsonObject) ProtoMessage() {} - -func (x *RequestedPortsJsonObject) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[85] - 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 RequestedPortsJsonObject.ProtoReflect.Descriptor instead. -func (*RequestedPortsJsonObject) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{85} -} - -func (x *RequestedPortsJsonObject) GetIsActive() bool { - if x != nil { - return x.IsActive - } - return false -} - -func (x *RequestedPortsJsonObject) GetRequestedPorts() []*ServicePort { - if x != nil { - return x.RequestedPorts - } - return nil -} - -type ScalingResource struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CpuCoreCount int32 `protobuf:"varint,1,opt,name=cpuCoreCount,proto3" json:"cpuCoreCount,omitempty"` - MemoryGBytes float32 `protobuf:"fixed32,2,opt,name=memoryGBytes,proto3" json:"memoryGBytes,omitempty"` - DiskGBytes float32 `protobuf:"fixed32,3,opt,name=diskGBytes,proto3" json:"diskGBytes,omitempty"` -} - -func (x *ScalingResource) Reset() { - *x = ScalingResource{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[86] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ScalingResource) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ScalingResource) ProtoMessage() {} - -func (x *ScalingResource) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[86] - 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 ScalingResource.ProtoReflect.Descriptor instead. -func (*ScalingResource) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{86} -} - -func (x *ScalingResource) GetCpuCoreCount() int32 { - if x != nil { - return x.CpuCoreCount - } - return 0 -} - -func (x *ScalingResource) GetMemoryGBytes() float32 { - if x != nil { - return x.MemoryGBytes - } - return 0 -} - -func (x *ScalingResource) GetDiskGBytes() float32 { - if x != nil { - return x.DiskGBytes - } - return 0 -} - -type ServicePort struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Protocol ServicePortProtocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=zBusinessZeropsApiProtocol.ServicePortProtocol" json:"protocol,omitempty"` - Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - Scheme ServicePortScheme `protobuf:"varint,4,opt,name=scheme,proto3,enum=zBusinessZeropsApiProtocol.ServicePortScheme" json:"scheme,omitempty"` - ServiceId *StringNull `protobuf:"bytes,5,opt,name=serviceId,proto3" json:"serviceId,omitempty"` -} - -func (x *ServicePort) Reset() { - *x = ServicePort{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[87] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServicePort) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServicePort) ProtoMessage() {} - -func (x *ServicePort) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[87] - 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 ServicePort.ProtoReflect.Descriptor instead. -func (*ServicePort) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{87} -} - -func (x *ServicePort) GetProtocol() ServicePortProtocol { - if x != nil { - return x.Protocol - } - return ServicePortProtocol_SERVICE_PORT_PROTOCOL_UNKNOWN -} - -func (x *ServicePort) GetPort() int32 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *ServicePort) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *ServicePort) GetScheme() ServicePortScheme { - if x != nil { - return x.Scheme - } - return ServicePortScheme_SERVICE_PORT_SCHEME_UNKNOWN -} - -func (x *ServicePort) GetServiceId() *StringNull { - if x != nil { - return x.ServiceId - } - return nil -} - -type ServiceStackConnectedServiceStack struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServiceStack *ServiceStackLight `protobuf:"bytes,1,opt,name=serviceStack,proto3" json:"serviceStack,omitempty"` - Status ServiceStackConnectionStatus `protobuf:"varint,2,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ServiceStackConnectionStatus" json:"status,omitempty"` -} - -func (x *ServiceStackConnectedServiceStack) Reset() { - *x = ServiceStackConnectedServiceStack{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[88] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceStackConnectedServiceStack) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceStackConnectedServiceStack) ProtoMessage() {} - -func (x *ServiceStackConnectedServiceStack) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[88] - 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 ServiceStackConnectedServiceStack.ProtoReflect.Descriptor instead. -func (*ServiceStackConnectedServiceStack) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{88} -} - -func (x *ServiceStackConnectedServiceStack) GetServiceStack() *ServiceStackLight { - if x != nil { - return x.ServiceStack - } - return nil -} - -func (x *ServiceStackConnectedServiceStack) GetStatus() ServiceStackConnectionStatus { - if x != nil { - return x.Status - } - return ServiceStackConnectionStatus_SERVICE_STACK_CONNECTION_STATUS_UNKNOWN -} - -type ServiceStackInfoJsonObject struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServiceStackTypeName string `protobuf:"bytes,1,opt,name=serviceStackTypeName,proto3" json:"serviceStackTypeName,omitempty"` - ServiceStackTypeCategory ServiceStackTypeCategory `protobuf:"varint,2,opt,name=serviceStackTypeCategory,proto3,enum=zBusinessZeropsApiProtocol.ServiceStackTypeCategory" json:"serviceStackTypeCategory,omitempty"` - ServiceStackTypeVersionName string `protobuf:"bytes,3,opt,name=serviceStackTypeVersionName,proto3" json:"serviceStackTypeVersionName,omitempty"` -} - -func (x *ServiceStackInfoJsonObject) Reset() { - *x = ServiceStackInfoJsonObject{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[89] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceStackInfoJsonObject) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceStackInfoJsonObject) ProtoMessage() {} - -func (x *ServiceStackInfoJsonObject) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[89] - 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 ServiceStackInfoJsonObject.ProtoReflect.Descriptor instead. -func (*ServiceStackInfoJsonObject) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{89} -} - -func (x *ServiceStackInfoJsonObject) GetServiceStackTypeName() string { - if x != nil { - return x.ServiceStackTypeName - } - return "" -} - -func (x *ServiceStackInfoJsonObject) GetServiceStackTypeCategory() ServiceStackTypeCategory { - if x != nil { - return x.ServiceStackTypeCategory - } - return ServiceStackTypeCategory_SERVICE_STACK_TYPE_CATEGORY_UNKNOWN -} - -func (x *ServiceStackInfoJsonObject) GetServiceStackTypeVersionName() string { - if x != nil { - return x.ServiceStackTypeVersionName - } - return "" -} - -type ServiceStackLight struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Status ServiceStackStatus `protobuf:"varint,2,opt,name=status,proto3,enum=zBusinessZeropsApiProtocol.ServiceStackStatus" json:"status,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - ServiceStackTypeInfo *ServiceStackInfoJsonObject `protobuf:"bytes,4,opt,name=serviceStackTypeInfo,proto3" json:"serviceStackTypeInfo,omitempty"` - ServiceStackTypeId string `protobuf:"bytes,5,opt,name=serviceStackTypeId,proto3" json:"serviceStackTypeId,omitempty"` - ServiceStackTypeVersionId string `protobuf:"bytes,6,opt,name=serviceStackTypeVersionId,proto3" json:"serviceStackTypeVersionId,omitempty"` - IsSystem bool `protobuf:"varint,7,opt,name=isSystem,proto3" json:"isSystem,omitempty"` - StartOnProjectStart bool `protobuf:"varint,11,opt,name=startOnProjectStart,proto3" json:"startOnProjectStart,omitempty"` - GithubIntegration *GithubIntegrationNull `protobuf:"bytes,8,opt,name=githubIntegration,proto3" json:"githubIntegration,omitempty"` - GitlabIntegration *GitlabIntegrationNull `protobuf:"bytes,9,opt,name=gitlabIntegration,proto3" json:"gitlabIntegration,omitempty"` - CustomAutoscaling *CustomAutoscalingNull `protobuf:"bytes,12,opt,name=customAutoscaling,proto3" json:"customAutoscaling,omitempty"` -} - -func (x *ServiceStackLight) Reset() { - *x = ServiceStackLight{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[90] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceStackLight) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceStackLight) ProtoMessage() {} - -func (x *ServiceStackLight) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[90] - 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 ServiceStackLight.ProtoReflect.Descriptor instead. -func (*ServiceStackLight) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{90} -} - -func (x *ServiceStackLight) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ServiceStackLight) GetStatus() ServiceStackStatus { - if x != nil { - return x.Status - } - return ServiceStackStatus_SERVICE_STACK_STATUS_UNKNOWN -} - -func (x *ServiceStackLight) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ServiceStackLight) GetServiceStackTypeInfo() *ServiceStackInfoJsonObject { - if x != nil { - return x.ServiceStackTypeInfo - } - return nil -} - -func (x *ServiceStackLight) GetServiceStackTypeId() string { - if x != nil { - return x.ServiceStackTypeId - } - return "" -} - -func (x *ServiceStackLight) GetServiceStackTypeVersionId() string { - if x != nil { - return x.ServiceStackTypeVersionId - } - return "" -} - -func (x *ServiceStackLight) GetIsSystem() bool { - if x != nil { - return x.IsSystem - } - return false -} - -func (x *ServiceStackLight) GetStartOnProjectStart() bool { - if x != nil { - return x.StartOnProjectStart - } - return false -} - -func (x *ServiceStackLight) GetGithubIntegration() *GithubIntegrationNull { - if x != nil { - return x.GithubIntegration - } - return nil -} - -func (x *ServiceStackLight) GetGitlabIntegration() *GitlabIntegrationNull { - if x != nil { - return x.GitlabIntegration - } - return nil -} - -func (x *ServiceStackLight) GetCustomAutoscaling() *CustomAutoscalingNull { - if x != nil { - return x.CustomAutoscaling - } - return nil -} - -type ServiceStackLightJsonObject struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Created *Timestamp `protobuf:"bytes,2,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,3,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - ProjectId string `protobuf:"bytes,4,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackTypeId string `protobuf:"bytes,5,opt,name=serviceStackTypeId,proto3" json:"serviceStackTypeId,omitempty"` - ServiceStackTypeVersionId string `protobuf:"bytes,6,opt,name=serviceStackTypeVersionId,proto3" json:"serviceStackTypeVersionId,omitempty"` - DriverId *StringNull `protobuf:"bytes,7,opt,name=driverId,proto3" json:"driverId,omitempty"` - Name string `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` - ServiceStackTypeInfo *ServiceStackInfoJsonObject `protobuf:"bytes,9,opt,name=serviceStackTypeInfo,proto3" json:"serviceStackTypeInfo,omitempty"` - Ports []*ServicePort `protobuf:"bytes,10,rep,name=ports,proto3" json:"ports,omitempty"` -} - -func (x *ServiceStackLightJsonObject) Reset() { - *x = ServiceStackLightJsonObject{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[91] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceStackLightJsonObject) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceStackLightJsonObject) ProtoMessage() {} - -func (x *ServiceStackLightJsonObject) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[91] - 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 ServiceStackLightJsonObject.ProtoReflect.Descriptor instead. -func (*ServiceStackLightJsonObject) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{91} -} - -func (x *ServiceStackLightJsonObject) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ServiceStackLightJsonObject) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *ServiceStackLightJsonObject) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *ServiceStackLightJsonObject) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *ServiceStackLightJsonObject) GetServiceStackTypeId() string { - if x != nil { - return x.ServiceStackTypeId - } - return "" -} - -func (x *ServiceStackLightJsonObject) GetServiceStackTypeVersionId() string { - if x != nil { - return x.ServiceStackTypeVersionId - } - return "" -} - -func (x *ServiceStackLightJsonObject) GetDriverId() *StringNull { - if x != nil { - return x.DriverId - } - return nil -} - -func (x *ServiceStackLightJsonObject) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ServiceStackLightJsonObject) GetServiceStackTypeInfo() *ServiceStackInfoJsonObject { - if x != nil { - return x.ServiceStackTypeInfo - } - return nil -} - -func (x *ServiceStackLightJsonObject) GetPorts() []*ServicePort { - if x != nil { - return x.Ports - } - return nil -} - -type UserAvatar struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LargeAvatarUrl *StringNull `protobuf:"bytes,1,opt,name=largeAvatarUrl,proto3" json:"largeAvatarUrl,omitempty"` - SmallAvatarUrl *StringNull `protobuf:"bytes,2,opt,name=smallAvatarUrl,proto3" json:"smallAvatarUrl,omitempty"` - ExternalAvatarUrl *StringNull `protobuf:"bytes,3,opt,name=externalAvatarUrl,proto3" json:"externalAvatarUrl,omitempty"` -} - -func (x *UserAvatar) Reset() { - *x = UserAvatar{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[92] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UserAvatar) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UserAvatar) ProtoMessage() {} - -func (x *UserAvatar) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[92] - 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 UserAvatar.ProtoReflect.Descriptor instead. -func (*UserAvatar) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{92} -} - -func (x *UserAvatar) GetLargeAvatarUrl() *StringNull { - if x != nil { - return x.LargeAvatarUrl - } - return nil -} - -func (x *UserAvatar) GetSmallAvatarUrl() *StringNull { - if x != nil { - return x.SmallAvatarUrl - } - return nil -} - -func (x *UserAvatar) GetExternalAvatarUrl() *StringNull { - if x != nil { - return x.ExternalAvatarUrl - } - return nil -} - -type UserDataLight struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=clientId,proto3" json:"clientId,omitempty"` - ProjectId string `protobuf:"bytes,3,opt,name=projectId,proto3" json:"projectId,omitempty"` - ServiceStackId string `protobuf:"bytes,4,opt,name=serviceStackId,proto3" json:"serviceStackId,omitempty"` - Key string `protobuf:"bytes,5,opt,name=key,proto3" json:"key,omitempty"` - Content string `protobuf:"bytes,6,opt,name=content,proto3" json:"content,omitempty"` - Type UserDataType `protobuf:"varint,7,opt,name=type,proto3,enum=zBusinessZeropsApiProtocol.UserDataType" json:"type,omitempty"` - Created *Timestamp `protobuf:"bytes,8,opt,name=created,proto3" json:"created,omitempty"` - LastUpdate *Timestamp `protobuf:"bytes,9,opt,name=lastUpdate,proto3" json:"lastUpdate,omitempty"` - IsSynced bool `protobuf:"varint,10,opt,name=isSynced,proto3" json:"isSynced,omitempty"` - DeleteOnSync bool `protobuf:"varint,11,opt,name=deleteOnSync,proto3" json:"deleteOnSync,omitempty"` - Version UserDataVersion `protobuf:"varint,12,opt,name=version,proto3,enum=zBusinessZeropsApiProtocol.UserDataVersion" json:"version,omitempty"` - LastSync *TimestampNull `protobuf:"bytes,13,opt,name=lastSync,proto3" json:"lastSync,omitempty"` -} - -func (x *UserDataLight) Reset() { - *x = UserDataLight{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[93] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UserDataLight) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UserDataLight) ProtoMessage() {} - -func (x *UserDataLight) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[93] - 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 UserDataLight.ProtoReflect.Descriptor instead. -func (*UserDataLight) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{93} -} - -func (x *UserDataLight) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *UserDataLight) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *UserDataLight) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *UserDataLight) GetServiceStackId() string { - if x != nil { - return x.ServiceStackId - } - return "" -} - -func (x *UserDataLight) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *UserDataLight) GetContent() string { - if x != nil { - return x.Content - } - return "" -} - -func (x *UserDataLight) GetType() UserDataType { - if x != nil { - return x.Type - } - return UserDataType_USER_DATA_TYPE_UNKNOWN -} - -func (x *UserDataLight) GetCreated() *Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *UserDataLight) GetLastUpdate() *Timestamp { - if x != nil { - return x.LastUpdate - } - return nil -} - -func (x *UserDataLight) GetIsSynced() bool { - if x != nil { - return x.IsSynced - } - return false -} - -func (x *UserDataLight) GetDeleteOnSync() bool { - if x != nil { - return x.DeleteOnSync - } - return false -} - -func (x *UserDataLight) GetVersion() UserDataVersion { - if x != nil { - return x.Version - } - return UserDataVersion_USER_DATA_VERSION_UNKNOWN -} - -func (x *UserDataLight) GetLastSync() *TimestampNull { - if x != nil { - return x.LastSync - } - return nil -} - -type UserJsonObject struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type UserJsonObjectType `protobuf:"varint,5,opt,name=type,proto3,enum=zBusinessZeropsApiProtocol.UserJsonObjectType" json:"type,omitempty"` - Id *StringNull `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Email *StringNull `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` - FirstName *StringNull `protobuf:"bytes,3,opt,name=firstName,proto3" json:"firstName,omitempty"` - FullName *StringNull `protobuf:"bytes,4,opt,name=fullName,proto3" json:"fullName,omitempty"` - Avatar *UserAvatarNull `protobuf:"bytes,6,opt,name=avatar,proto3" json:"avatar,omitempty"` -} - -func (x *UserJsonObject) Reset() { - *x = UserJsonObject{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[94] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UserJsonObject) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UserJsonObject) ProtoMessage() {} - -func (x *UserJsonObject) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[94] - 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 UserJsonObject.ProtoReflect.Descriptor instead. -func (*UserJsonObject) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{94} -} - -func (x *UserJsonObject) GetType() UserJsonObjectType { - if x != nil { - return x.Type - } - return UserJsonObjectType_USER_JSON_OBJECT_TYPE_UNKNOWN -} - -func (x *UserJsonObject) GetId() *StringNull { - if x != nil { - return x.Id - } - return nil -} - -func (x *UserJsonObject) GetEmail() *StringNull { - if x != nil { - return x.Email - } - return nil -} - -func (x *UserJsonObject) GetFirstName() *StringNull { - if x != nil { - return x.FirstName - } - return nil -} - -func (x *UserJsonObject) GetFullName() *StringNull { - if x != nil { - return x.FullName - } - return nil -} - -func (x *UserJsonObject) GetAvatar() *UserAvatarNull { - if x != nil { - return x.Avatar - } - return nil -} - -type UserLight struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` - FullName string `protobuf:"bytes,3,opt,name=fullName,proto3" json:"fullName,omitempty"` - FirstName string `protobuf:"bytes,4,opt,name=firstName,proto3" json:"firstName,omitempty"` - LastName string `protobuf:"bytes,5,opt,name=lastName,proto3" json:"lastName,omitempty"` - Avatar *UserAvatarNull `protobuf:"bytes,6,opt,name=avatar,proto3" json:"avatar,omitempty"` -} - -func (x *UserLight) Reset() { - *x = UserLight{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[95] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UserLight) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UserLight) ProtoMessage() {} - -func (x *UserLight) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[95] - 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 UserLight.ProtoReflect.Descriptor instead. -func (*UserLight) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{95} -} - -func (x *UserLight) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *UserLight) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *UserLight) GetFullName() string { - if x != nil { - return x.FullName - } - return "" -} - -func (x *UserLight) GetFirstName() string { - if x != nil { - return x.FirstName - } - return "" -} - -func (x *UserLight) GetLastName() string { - if x != nil { - return x.LastName - } - return "" -} - -func (x *UserLight) GetAvatar() *UserAvatarNull { - if x != nil { - return x.Avatar - } - return nil -} - -type VerticalAutoscaling struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MaxResource *ScalingResource `protobuf:"bytes,1,opt,name=maxResource,proto3" json:"maxResource,omitempty"` - MinResource *ScalingResource `protobuf:"bytes,2,opt,name=minResource,proto3" json:"minResource,omitempty"` -} - -func (x *VerticalAutoscaling) Reset() { - *x = VerticalAutoscaling{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[96] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VerticalAutoscaling) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VerticalAutoscaling) ProtoMessage() {} - -func (x *VerticalAutoscaling) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[96] - 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 VerticalAutoscaling.ProtoReflect.Descriptor instead. -func (*VerticalAutoscaling) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{96} -} - -func (x *VerticalAutoscaling) GetMaxResource() *ScalingResource { - if x != nil { - return x.MaxResource - } - return nil -} - -func (x *VerticalAutoscaling) GetMinResource() *ScalingResource { - if x != nil { - return x.MinResource - } - return nil -} - -type AppVersionBuildNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *AppVersionBuild `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *AppVersionBuildNull) Reset() { - *x = AppVersionBuildNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[97] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionBuildNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionBuildNull) ProtoMessage() {} - -func (x *AppVersionBuildNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[97] - 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 AppVersionBuildNull.ProtoReflect.Descriptor instead. -func (*AppVersionBuildNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{97} -} - -func (x *AppVersionBuildNull) GetValue() *AppVersionBuild { - if x != nil { - return x.Value - } - return nil -} - -func (x *AppVersionBuildNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type AppVersionGithubIntegrationNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *AppVersionGithubIntegration `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *AppVersionGithubIntegrationNull) Reset() { - *x = AppVersionGithubIntegrationNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[98] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionGithubIntegrationNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionGithubIntegrationNull) ProtoMessage() {} - -func (x *AppVersionGithubIntegrationNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[98] - 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 AppVersionGithubIntegrationNull.ProtoReflect.Descriptor instead. -func (*AppVersionGithubIntegrationNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{98} -} - -func (x *AppVersionGithubIntegrationNull) GetValue() *AppVersionGithubIntegration { - if x != nil { - return x.Value - } - return nil -} - -func (x *AppVersionGithubIntegrationNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type AppVersionGitlabIntegrationNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *AppVersionGitlabIntegration `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *AppVersionGitlabIntegrationNull) Reset() { - *x = AppVersionGitlabIntegrationNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[99] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionGitlabIntegrationNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionGitlabIntegrationNull) ProtoMessage() {} - -func (x *AppVersionGitlabIntegrationNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[99] - 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 AppVersionGitlabIntegrationNull.ProtoReflect.Descriptor instead. -func (*AppVersionGitlabIntegrationNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{99} -} - -func (x *AppVersionGitlabIntegrationNull) GetValue() *AppVersionGitlabIntegration { - if x != nil { - return x.Value - } - return nil -} - -func (x *AppVersionGitlabIntegrationNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type AppVersionJsonObjectNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *AppVersionJsonObject `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *AppVersionJsonObjectNull) Reset() { - *x = AppVersionJsonObjectNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[100] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionJsonObjectNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionJsonObjectNull) ProtoMessage() {} - -func (x *AppVersionJsonObjectNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[100] - 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 AppVersionJsonObjectNull.ProtoReflect.Descriptor instead. -func (*AppVersionJsonObjectNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{100} -} - -func (x *AppVersionJsonObjectNull) GetValue() *AppVersionJsonObject { - if x != nil { - return x.Value - } - return nil -} - -func (x *AppVersionJsonObjectNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type AppVersionLightNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *AppVersionLight `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *AppVersionLightNull) Reset() { - *x = AppVersionLightNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[101] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionLightNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionLightNull) ProtoMessage() {} - -func (x *AppVersionLightNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[101] - 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 AppVersionLightNull.ProtoReflect.Descriptor instead. -func (*AppVersionLightNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{101} -} - -func (x *AppVersionLightNull) GetValue() *AppVersionLight { - if x != nil { - return x.Value - } - return nil -} - -func (x *AppVersionLightNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type AppVersionPublicGitSourceNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *AppVersionPublicGitSource `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *AppVersionPublicGitSourceNull) Reset() { - *x = AppVersionPublicGitSourceNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[102] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AppVersionPublicGitSourceNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AppVersionPublicGitSourceNull) ProtoMessage() {} - -func (x *AppVersionPublicGitSourceNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[102] - 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 AppVersionPublicGitSourceNull.ProtoReflect.Descriptor instead. -func (*AppVersionPublicGitSourceNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{102} -} - -func (x *AppVersionPublicGitSourceNull) GetValue() *AppVersionPublicGitSource { - if x != nil { - return x.Value - } - return nil -} - -func (x *AppVersionPublicGitSourceNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type ClientAvatarNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *ClientAvatar `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *ClientAvatarNull) Reset() { - *x = ClientAvatarNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[103] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientAvatarNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientAvatarNull) ProtoMessage() {} - -func (x *ClientAvatarNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[103] - 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 ClientAvatarNull.ProtoReflect.Descriptor instead. -func (*ClientAvatarNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{103} -} - -func (x *ClientAvatarNull) GetValue() *ClientAvatar { - if x != nil { - return x.Value - } - return nil -} - -func (x *ClientAvatarNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type CustomAutoscalingNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *CustomAutoscaling `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *CustomAutoscalingNull) Reset() { - *x = CustomAutoscalingNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[104] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CustomAutoscalingNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CustomAutoscalingNull) ProtoMessage() {} - -func (x *CustomAutoscalingNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[104] - 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 CustomAutoscalingNull.ProtoReflect.Descriptor instead. -func (*CustomAutoscalingNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{104} -} - -func (x *CustomAutoscalingNull) GetValue() *CustomAutoscaling { - if x != nil { - return x.Value - } - return nil -} - -func (x *CustomAutoscalingNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type GithubIntegrationNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *GithubIntegration `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *GithubIntegrationNull) Reset() { - *x = GithubIntegrationNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[105] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GithubIntegrationNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GithubIntegrationNull) ProtoMessage() {} - -func (x *GithubIntegrationNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[105] - 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 GithubIntegrationNull.ProtoReflect.Descriptor instead. -func (*GithubIntegrationNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{105} -} - -func (x *GithubIntegrationNull) GetValue() *GithubIntegration { - if x != nil { - return x.Value - } - return nil -} - -func (x *GithubIntegrationNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type GitlabIntegrationNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *GitlabIntegration `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *GitlabIntegrationNull) Reset() { - *x = GitlabIntegrationNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[106] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GitlabIntegrationNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GitlabIntegrationNull) ProtoMessage() {} - -func (x *GitlabIntegrationNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[106] - 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 GitlabIntegrationNull.ProtoReflect.Descriptor instead. -func (*GitlabIntegrationNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{106} -} - -func (x *GitlabIntegrationNull) GetValue() *GitlabIntegration { - if x != nil { - return x.Value - } - return nil -} - -func (x *GitlabIntegrationNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type HorizontalAutoscalingNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *HorizontalAutoscaling `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *HorizontalAutoscalingNull) Reset() { - *x = HorizontalAutoscalingNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[107] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HorizontalAutoscalingNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HorizontalAutoscalingNull) ProtoMessage() {} - -func (x *HorizontalAutoscalingNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[107] - 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 HorizontalAutoscalingNull.ProtoReflect.Descriptor instead. -func (*HorizontalAutoscalingNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{107} -} - -func (x *HorizontalAutoscalingNull) GetValue() *HorizontalAutoscaling { - if x != nil { - return x.Value - } - return nil -} - -func (x *HorizontalAutoscalingNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type Int32Null struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value int32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *Int32Null) Reset() { - *x = Int32Null{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[108] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Int32Null) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Int32Null) ProtoMessage() {} - -func (x *Int32Null) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[108] - 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 Int32Null.ProtoReflect.Descriptor instead. -func (*Int32Null) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{108} -} - -func (x *Int32Null) GetValue() int32 { - if x != nil { - return x.Value - } - return 0 -} - -func (x *Int32Null) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type PrepareCustomRuntimeNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *PrepareCustomRuntime `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *PrepareCustomRuntimeNull) Reset() { - *x = PrepareCustomRuntimeNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[109] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrepareCustomRuntimeNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrepareCustomRuntimeNull) ProtoMessage() {} - -func (x *PrepareCustomRuntimeNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[109] - 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 PrepareCustomRuntimeNull.ProtoReflect.Descriptor instead. -func (*PrepareCustomRuntimeNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{109} -} - -func (x *PrepareCustomRuntimeNull) GetValue() *PrepareCustomRuntime { - if x != nil { - return x.Value - } - return nil -} - -func (x *PrepareCustomRuntimeNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type StringNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *StringNull) Reset() { - *x = StringNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[110] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StringNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StringNull) ProtoMessage() {} - -func (x *StringNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[110] - 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 StringNull.ProtoReflect.Descriptor instead. -func (*StringNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{110} -} - -func (x *StringNull) GetValue() string { - if x != nil { - return x.Value - } - return "" -} - -func (x *StringNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type TimestampNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *Timestamp `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *TimestampNull) Reset() { - *x = TimestampNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[111] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TimestampNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TimestampNull) ProtoMessage() {} - -func (x *TimestampNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[111] - 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 TimestampNull.ProtoReflect.Descriptor instead. -func (*TimestampNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{111} -} - -func (x *TimestampNull) GetValue() *Timestamp { - if x != nil { - return x.Value - } - return nil -} - -func (x *TimestampNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type UserAvatarNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *UserAvatar `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *UserAvatarNull) Reset() { - *x = UserAvatarNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[112] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UserAvatarNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UserAvatarNull) ProtoMessage() {} - -func (x *UserAvatarNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[112] - 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 UserAvatarNull.ProtoReflect.Descriptor instead. -func (*UserAvatarNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{112} -} - -func (x *UserAvatarNull) GetValue() *UserAvatar { - if x != nil { - return x.Value - } - return nil -} - -func (x *UserAvatarNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type UserJsonObjectNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *UserJsonObject `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *UserJsonObjectNull) Reset() { - *x = UserJsonObjectNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[113] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UserJsonObjectNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UserJsonObjectNull) ProtoMessage() {} - -func (x *UserJsonObjectNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[113] - 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 UserJsonObjectNull.ProtoReflect.Descriptor instead. -func (*UserJsonObjectNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{113} -} - -func (x *UserJsonObjectNull) GetValue() *UserJsonObject { - if x != nil { - return x.Value - } - return nil -} - -func (x *UserJsonObjectNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -type VerticalAutoscalingNull struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value *VerticalAutoscaling `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` -} - -func (x *VerticalAutoscalingNull) Reset() { - *x = VerticalAutoscalingNull{} - if protoimpl.UnsafeEnabled { - mi := &file_zeropsApiProtocol_proto_msgTypes[114] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VerticalAutoscalingNull) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VerticalAutoscalingNull) ProtoMessage() {} - -func (x *VerticalAutoscalingNull) ProtoReflect() protoreflect.Message { - mi := &file_zeropsApiProtocol_proto_msgTypes[114] - 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 VerticalAutoscalingNull.ProtoReflect.Descriptor instead. -func (*VerticalAutoscalingNull) Descriptor() ([]byte, []int) { - return file_zeropsApiProtocol_proto_rawDescGZIP(), []int{114} -} - -func (x *VerticalAutoscalingNull) GetValue() *VerticalAutoscaling { - if x != nil { - return x.Value - } - return nil -} - -func (x *VerticalAutoscalingNull) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -var File_zeropsApiProtocol_proto protoreflect.FileDescriptor - -var file_zeropsApiProtocol_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x70, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x39, - 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x5a, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x22, 0x51, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x53, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x69, 0x73, 0x53, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x22, 0x26, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2b, - 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x23, 0x0a, 0x11, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x22, 0x2e, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, - 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x28, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x50, 0x0a, 0x1c, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x42, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, - 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x7b, 0x0a, 0x15, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x4a, 0x0a, 0x18, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x22, 0xcf, 0x01, 0x0a, 0x1c, - 0x50, 0x6f, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x73, - 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, - 0x73, 0x73, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x73, 0x12, 0x57, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, - 0x73, 0x74, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x51, 0x0a, - 0x1d, 0x50, 0x6f, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x79, 0x61, 0x6d, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x79, 0x61, 0x6d, 0x6c, - 0x22, 0x51, 0x0a, 0x15, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x22, 0x6f, 0x0a, 0x1d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, - 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6f, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x49, 0x64, 0x22, 0xa4, 0x01, 0x0a, 0x22, 0x50, 0x75, 0x74, 0x41, 0x70, 0x70, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x6e, 0x64, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x12, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, - 0x75, 0x6c, 0x6c, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x1a, - 0x50, 0x75, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x0d, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x28, 0x0a, 0x16, 0x50, 0x75, 0x74, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x27, 0x0a, 0x15, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2f, 0x0a, 0x1d, 0x50, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2d, 0x0a, 0x1b, - 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2c, 0x0a, 0x1a, 0x50, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x9e, 0x01, 0x0a, 0x15, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4c, 0x0a, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, - 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x9e, 0x08, 0x0a, 0x18, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, - 0x6c, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, - 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x5d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x41, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x50, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x56, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, - 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, - 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, - 0x43, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x07, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, - 0x6c, 0x52, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x54, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, - 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa8, 0x01, 0x0a, 0x1a, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x51, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0xa3, 0x08, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, - 0x6c, 0x6c, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, - 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x5d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x12, - 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x50, - 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, - 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, - 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x43, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x07, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, - 0x6c, 0x6c, 0x52, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x54, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x98, 0x01, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x49, 0x0a, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, - 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x9b, 0x08, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, - 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5d, 0x0a, 0x0d, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, - 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, - 0x6c, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, - 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x45, - 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x08, 0x66, 0x69, 0x6e, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, - 0x54, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa6, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x5f, - 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x4e, - 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x12, 0x3f, - 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, - 0xa2, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x22, 0xf9, 0x10, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x6a, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, - 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x0a, 0x12, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x19, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x6e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x1f, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x13, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x5f, 0x0a, 0x11, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x11, 0x67, 0x69, 0x74, 0x6c, - 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x11, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x21, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, - 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, - 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x3d, 0x0a, 0x05, 0x70, 0x6f, - 0x72, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, - 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x4a, 0x73, 0x6f, - 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, - 0x40, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6f, 0x72, 0x74, 0x73, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x72, - 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, - 0x69, 0x67, 0x68, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x67, 0x0a, - 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, - 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x22, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, - 0x67, 0x68, 0x74, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x5b, 0x0a, - 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, - 0x69, 0x67, 0x68, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x19, 0x68, 0x61, - 0x73, 0x55, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x68, - 0x61, 0x73, 0x55, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x4e, 0x0a, 0x22, 0x68, 0x61, 0x73, 0x55, - 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, - 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x15, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x22, 0x68, 0x61, 0x73, 0x55, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, - 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x1b, 0x68, 0x61, 0x73, 0x55, - 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x50, 0x6f, 0x72, - 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x68, - 0x61, 0x73, 0x55, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x3e, 0x0a, 0x1a, 0x68, 0x61, - 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, - 0x68, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x3e, 0x0a, 0x1a, 0x68, 0x61, - 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, - 0x68, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x69, 0x0a, 0x1c, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x6e, - 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x69, 0x0a, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, - 0x6c, 0x6c, 0x52, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x50, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x22, 0xae, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x54, 0x0a, 0x06, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x22, 0xff, 0x10, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x6a, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x36, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x4a, 0x73, - 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, - 0x0a, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, - 0x70, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x3c, - 0x0a, 0x19, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, - 0x70, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x19, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, - 0x79, 0x70, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x69, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x69, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x4f, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, - 0x1f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x6e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x5f, 0x0a, 0x11, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x11, 0x67, - 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x67, 0x69, 0x74, 0x6c, 0x61, - 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x11, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, - 0x67, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x75, 0x74, 0x6f, 0x73, - 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x3d, 0x0a, - 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x5c, 0x0a, 0x0e, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, - 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, - 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x40, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2c, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, - 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6f, - 0x72, 0x74, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, - 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x28, - 0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x41, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, - 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x20, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x67, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x75, 0x73, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x22, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x5b, 0x0a, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x10, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, - 0x19, 0x68, 0x61, 0x73, 0x55, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x19, 0x68, 0x61, 0x73, 0x55, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x4e, 0x0a, 0x22, 0x68, - 0x61, 0x73, 0x55, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x22, 0x68, 0x61, 0x73, 0x55, 0x6e, 0x73, 0x79, - 0x6e, 0x63, 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x1b, 0x68, - 0x61, 0x73, 0x55, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x1b, 0x68, 0x61, 0x73, 0x55, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x3e, 0x0a, - 0x1a, 0x68, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x1a, 0x68, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, - 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x3e, 0x0a, - 0x1a, 0x68, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x1a, 0x68, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, - 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x69, 0x0a, - 0x1c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, - 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x1b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x1c, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, - 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x69, 0x0a, 0x1c, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x75, 0x74, - 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x6e, 0x74, 0x33, - 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x22, 0xfd, 0x05, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, - 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, - 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, - 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x4e, - 0x75, 0x6c, 0x6c, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x55, 0x0a, 0x12, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x12, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0b, - 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x08, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x4c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x3f, 0x0a, - 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, - 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x53, 0x0a, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x0e, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x70, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x49, 0x73, 0x53, 0x65, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0d, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x49, 0x73, 0x53, 0x65, 0x74, - 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x22, 0xb0, 0x04, 0x0a, 0x19, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x70, 0x70, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, - 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4e, - 0x75, 0x6c, 0x6c, 0x52, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x52, 0x0a, 0x0c, - 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, - 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, - 0x61, 0x64, 0x55, 0x72, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x22, 0xa6, 0x01, 0x0a, 0x19, 0x50, 0x6f, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x50, 0x0a, - 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, - 0xbb, 0x01, 0x0a, 0x1c, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, - 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x20, - 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x5b, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x0d, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x22, 0xae, 0x01, - 0x0a, 0x1d, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, - 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x98, - 0x04, 0x0a, 0x20, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, - 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1e, 0x0a, - 0x0a, 0x73, 0x73, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0a, 0x73, 0x73, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x4d, 0x0a, - 0x07, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x52, 0x07, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x53, 0x0a, 0x09, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, - 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x53, - 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, - 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x45, 0x64, 0x69, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x45, 0x64, 0x69, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, - 0x6e, 0x53, 0x79, 0x6e, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x4f, 0x6e, 0x53, 0x79, 0x6e, 0x63, 0x22, 0xb0, 0x01, 0x0a, 0x1e, 0x50, 0x6f, - 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x55, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x63, 0x6b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0xc0, 0x01, 0x0a, - 0x21, 0x50, 0x6f, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, - 0x74, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, - 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x5b, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x22, - 0xa0, 0x01, 0x0a, 0x16, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x22, 0x7c, 0x0a, 0x19, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x12, - 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x3d, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, - 0x22, 0xba, 0x01, 0x0a, 0x23, 0x50, 0x75, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x6e, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x12, 0x5a, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x42, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, - 0x75, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x41, 0x6e, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0xac, 0x08, - 0x0a, 0x26, 0x50, 0x75, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x41, 0x6e, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, - 0x6c, 0x6c, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, - 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x5d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x12, - 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x50, - 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, - 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, - 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x43, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x07, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, - 0x6c, 0x6c, 0x52, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x54, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xaa, 0x01, 0x0a, - 0x1b, 0x50, 0x75, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x52, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, - 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0xa4, 0x08, 0x0a, 0x1e, 0x50, 0x75, - 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x67, 0x68, - 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, - 0x73, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, - 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, - 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x63, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x07, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, - 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x08, 0x66, 0x69, 0x6e, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x54, 0x0a, 0x0a, 0x61, 0x70, - 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0xa2, 0x01, 0x0a, 0x17, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0xa0, 0x08, 0x0a, 0x1a, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x4e, - 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x4c, - 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5d, 0x0a, 0x0d, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x67, - 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x0e, - 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x07, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, - 0x64, 0x12, 0x45, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x08, - 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x12, 0x54, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x73, - 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0a, 0x61, 0x70, - 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x50, 0x75, 0x74, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x9f, 0x08, 0x0a, 0x19, - 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, - 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, - 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x5d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, - 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x50, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, - 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, - 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, - 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x12, 0x43, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x07, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, - 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, - 0x75, 0x6c, 0x6c, 0x52, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x28, 0x0a, - 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, - 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x54, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, - 0x6c, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xb0, 0x01, - 0x0a, 0x1e, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x55, 0x0a, 0x06, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x22, 0xa7, 0x08, 0x0a, 0x21, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, - 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, - 0x12, 0x4c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5d, - 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4c, - 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x41, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0d, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x56, - 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, - 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x43, - 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x12, 0x54, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0a, - 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xac, 0x01, 0x0a, 0x1c, 0x50, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x53, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, - 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0xa5, 0x08, 0x0a, 0x1f, 0x50, 0x75, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x67, - 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x63, 0x6b, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x55, 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, - 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, - 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, - 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x63, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, - 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, - 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, - 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, - 0x6c, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x08, 0x66, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x54, 0x0a, 0x0a, 0x61, - 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0xaa, 0x01, 0x0a, 0x1b, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x52, 0x0a, 0x06, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x44, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0xa4, - 0x08, 0x0a, 0x1e, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x74, - 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5d, 0x0a, 0x0d, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, - 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, - 0x6c, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, - 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x45, - 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x08, 0x66, 0x69, 0x6e, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, - 0x54, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xcb, 0x06, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x52, 0x0a, 0x10, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x10, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x64, 0x0a, - 0x19, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, - 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x19, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x51, 0x0a, 0x0e, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x12, 0x51, 0x0a, 0x0e, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x61, 0x0a, 0x16, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x16, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x47, 0x0a, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x09, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, - 0x6c, 0x6c, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, - 0x61, 0x63, 0x68, 0x65, 0x55, 0x73, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x63, 0x61, 0x63, 0x68, 0x65, 0x55, 0x73, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x68, 0x61, 0x73, - 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0f, 0x68, 0x61, 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x22, 0xe7, 0x02, 0x0a, 0x1b, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x5e, 0x0a, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x40, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, - 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x75, 0x73, 0x68, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x75, 0x73, - 0x68, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, - 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x07, 0x74, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xe7, 0x02, - 0x0a, 0x1b, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x69, 0x74, 0x6c, - 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5e, 0x0a, - 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x40, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, - 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x46, 0x0a, - 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, - 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x73, 0x68, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x75, 0x73, 0x68, 0x65, 0x72, 0x12, 0x16, 0x0a, - 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x12, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x75, 0x6c, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x07, - 0x74, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc8, 0x09, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, - 0x12, 0x44, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x44, 0x0a, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x3a, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x45, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4e, 0x75, 0x6c, 0x6c, 0x52, - 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x68, 0x0a, 0x14, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, - 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x14, 0x70, 0x72, 0x65, 0x70, - 0x61, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x12, 0x69, 0x0a, 0x11, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x11, 0x67, - 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x69, - 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, - 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, - 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x0e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, - 0x0e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, - 0x63, 0x0a, 0x0f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x47, 0x69, 0x74, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x47, 0x69, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, - 0x75, 0x6c, 0x6c, 0x52, 0x0f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x47, 0x69, 0x74, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, - 0x75, 0x6c, 0x6c, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x22, 0xef, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x44, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x07, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, - 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x22, 0x53, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x47, 0x69, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x69, 0x74, 0x55, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x67, 0x69, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x61, - 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, - 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x7e, 0x0a, 0x12, 0x41, 0x70, 0x70, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x84, 0x02, 0x0a, 0x0c, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x4e, 0x0a, 0x0e, 0x6c, 0x61, - 0x72, 0x67, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x6c, 0x61, 0x72, 0x67, - 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x6d, - 0x61, 0x6c, 0x6c, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x73, 0x6d, 0x61, 0x6c, - 0x6c, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x54, 0x0a, 0x11, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, - 0x22, 0xbb, 0x02, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x72, 0x61, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, - 0x6c, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x44, 0x0a, 0x09, 0x76, 0x61, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x09, 0x76, 0x61, 0x74, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, - 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x20, 0x0a, 0x0b, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xed, - 0x02, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, 0x78, 0x74, - 0x72, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, - 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x4f, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x67, 0x68, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x06, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0xe7, - 0x01, 0x0a, 0x11, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, - 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x65, 0x0a, 0x13, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, - 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x33, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x56, - 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, - 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x13, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, - 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x6b, 0x0a, 0x15, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, - 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, - 0x61, 0x6c, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, - 0x6c, 0x52, 0x15, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x75, 0x74, - 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x22, 0x90, 0x03, 0x0a, 0x11, 0x47, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x46, 0x0a, 0x0a, - 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x79, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x75, - 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, - 0x6b, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x09, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0x90, 0x03, 0x0a, 0x11, - 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, - 0x46, 0x0a, 0x0a, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0a, 0x62, 0x72, 0x61, - 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, - 0x79, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x77, 0x65, 0x62, - 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, - 0x75, 0x6c, 0x6c, 0x52, 0x09, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0x73, - 0x0a, 0x15, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x6f, - 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0x2e, 0x0a, 0x08, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x18, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x14, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x40, 0x0a, 0x1b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x54, 0x79, 0x70, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x22, 0xab, 0x03, 0x0a, 0x14, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x61, 0x0a, 0x16, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x16, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x47, - 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x09, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, - 0x75, 0x6c, 0x6c, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x52, 0x0a, 0x10, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x10, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x8d, 0x08, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x67, 0x68, - 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x5d, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x55, - 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, - 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, - 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0e, 0x63, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x07, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, - 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x08, 0x66, 0x69, 0x6e, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x42, 0x79, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x54, 0x0a, 0x0a, 0x61, 0x70, - 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x84, 0x05, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x67, 0x4c, 0x69, 0x73, - 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x70, 0x56, 0x34, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, - 0x70, 0x56, 0x34, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x70, 0x56, - 0x36, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, - 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x70, 0x56, 0x36, 0x12, 0x58, 0x0a, 0x13, 0x7a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x6f, - 0x73, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x13, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x75, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x75, 0x74, 0x6f, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x22, 0xbf, 0x01, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x75, 0x6c, 0x6c, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0xfd, 0x02, 0x0a, 0x0c, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x41, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, - 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x87, 0x03, 0x0a, 0x16, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, - 0x6c, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, - 0x0a, 0x07, 0x74, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x07, 0x74, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, - 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x22, 0x80, 0x02, 0x0a, 0x17, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, - 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x69, 0x0a, 0x0e, 0x64, 0x6e, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x41, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x6e, 0x73, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x64, 0x6e, 0x73, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x5a, 0x0a, 0x09, 0x73, 0x73, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x53, 0x73, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x73, 0x73, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xcd, 0x01, 0x0a, 0x19, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x49, 0x64, 0x12, 0x60, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x87, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, - 0x4f, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, - 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, - 0x22, 0x79, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x70, 0x75, 0x43, 0x6f, - 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x47, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x6d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x47, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, - 0x69, 0x73, 0x6b, 0x47, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x0a, 0x64, 0x69, 0x73, 0x6b, 0x47, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x9d, 0x02, 0x0a, 0x0b, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x4b, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, - 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x06, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x21, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x12, 0x50, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x84, 0x02, 0x0a, 0x1a, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x70, 0x0a, 0x18, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x43, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x79, 0x52, 0x18, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, - 0x79, 0x70, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x40, 0x0a, 0x1b, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x1b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, - 0x70, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xca, 0x05, - 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4c, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x6a, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, - 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x0a, 0x12, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x19, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x6e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x13, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x5f, 0x0a, 0x11, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x11, 0x67, 0x69, 0x74, 0x6c, - 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x11, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, - 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, - 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x22, 0xc4, 0x04, 0x0a, 0x1b, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x67, 0x68, 0x74, - 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, - 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, - 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, - 0x12, 0x3c, 0x0a, 0x19, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x54, 0x79, 0x70, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x19, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x54, 0x79, 0x70, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x42, - 0x0a, 0x08, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x08, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x6a, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x6e, - 0x66, 0x6f, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x14, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x3d, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x22, 0x82, 0x02, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, - 0x12, 0x4e, 0x0a, 0x0e, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, - 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x0e, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, - 0x12, 0x4e, 0x0a, 0x0e, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, - 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x0e, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, - 0x12, 0x54, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x76, 0x61, 0x74, - 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, - 0x75, 0x6c, 0x6c, 0x52, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x76, 0x61, - 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x22, 0xc1, 0x04, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x4f, 0x6e, 0x53, 0x79, 0x6e, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x6e, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x45, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x22, 0x98, 0x03, 0x0a, 0x0e, 0x55, - 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x42, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, - 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x36, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x05, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, - 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x44, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, - 0x6c, 0x6c, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, - 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x42, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x06, 0x61, - 0x76, 0x61, 0x74, 0x61, 0x72, 0x22, 0xcb, 0x01, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6c, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x42, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x4e, 0x75, 0x6c, 0x6c, 0x52, 0x06, 0x61, 0x76, 0x61, - 0x74, 0x61, 0x72, 0x22, 0xb3, 0x01, 0x0a, 0x13, 0x56, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, - 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x4d, 0x0a, 0x0b, 0x6d, - 0x61, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x63, - 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0b, 0x6d, - 0x61, 0x78, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4d, 0x0a, 0x0b, 0x6d, 0x69, - 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x63, 0x61, - 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0b, 0x6d, 0x69, - 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x6e, 0x0a, 0x13, 0x41, 0x70, 0x70, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4e, 0x75, 0x6c, 0x6c, - 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x86, 0x01, 0x0a, 0x1f, 0x41, 0x70, - 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x4d, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x22, 0x86, 0x01, 0x0a, 0x1f, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x69, 0x74, - 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x78, 0x0a, 0x18, 0x41, - 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x73, - 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x6e, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x41, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x82, 0x01, 0x0a, 0x1d, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x47, 0x69, 0x74, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x4b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x47, 0x69, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x68, 0x0a, 0x10, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x3e, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x22, 0x72, 0x0a, 0x15, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x41, 0x75, - 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x43, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x72, 0x0a, 0x15, 0x47, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, - 0x6c, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x72, 0x0a, 0x15, - 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x22, 0x7a, 0x0a, 0x19, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x75, - 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x47, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, - 0x6e, 0x74, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x37, 0x0a, 0x09, - 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x78, 0x0a, 0x18, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, - 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4e, 0x75, 0x6c, - 0x6c, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, - 0x65, 0x70, 0x61, 0x72, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, - 0x38, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x62, 0x0a, 0x0d, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x64, 0x0a, - 0x0e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x4e, 0x75, 0x6c, 0x6c, 0x12, - 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x22, 0x6c, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x40, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x22, 0x76, 0x0a, 0x17, 0x56, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x41, 0x75, 0x74, - 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x12, 0x45, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2a, 0xf4, 0x5a, 0x0a, 0x09, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x5f, 0x45, 0x52, - 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, - 0x4c, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, - 0x12, 0x0e, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0xc6, 0x02, - 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x55, 0x53, 0x45, 0x52, - 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x56, 0x41, - 0x4c, 0x49, 0x44, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x57, - 0x49, 0x54, 0x48, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, - 0x54, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1b, - 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, 0x43, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x50, - 0x52, 0x49, 0x56, 0x49, 0x4c, 0x45, 0x47, 0x45, 0x53, 0x10, 0x05, 0x12, 0x19, 0x0a, 0x15, 0x52, - 0x45, 0x46, 0x52, 0x45, 0x53, 0x48, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x5f, 0x49, 0x4e, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x10, 0x06, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x4e, 0x44, 0x50, 0x4f, 0x49, - 0x4e, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x07, 0x12, 0x27, - 0x0a, 0x23, 0x50, 0x4f, 0x54, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x4c, 0x59, 0x5f, 0x46, 0x52, - 0x41, 0x55, 0x44, 0x5f, 0x42, 0x45, 0x48, 0x41, 0x56, 0x49, 0x4f, 0x52, 0x5f, 0x44, 0x45, 0x54, - 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x5f, 0x43, 0x41, - 0x50, 0x54, 0x43, 0x48, 0x41, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x5f, 0x49, - 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x09, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x4f, 0x57, 0x4e, - 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, - 0x49, 0x44, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x45, 0x44, 0x10, 0x0a, 0x12, - 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x55, 0x53, 0x45, - 0x52, 0x5f, 0x43, 0x52, 0x45, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x53, 0x10, 0x0b, 0x12, - 0x20, 0x0a, 0x1c, 0x4e, 0x4f, 0x5f, 0x52, 0x49, 0x47, 0x48, 0x54, 0x53, 0x5f, 0x54, 0x4f, 0x5f, - 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, - 0x0c, 0x12, 0x1c, 0x0a, 0x18, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x4c, - 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x0d, 0x12, - 0x22, 0x0a, 0x1e, 0x41, 0x44, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x5f, 0x56, 0x45, - 0x52, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, - 0x44, 0x10, 0x0e, 0x12, 0x19, 0x0a, 0x14, 0x41, 0x54, 0x5f, 0x4c, 0x45, 0x41, 0x53, 0x54, 0x5f, - 0x4f, 0x4e, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x52, 0x10, 0xbf, 0x01, 0x12, 0x38, - 0x0a, 0x34, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4d, 0x55, - 0x53, 0x54, 0x5f, 0x42, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, - 0x54, 0x4f, 0x5f, 0x41, 0x54, 0x5f, 0x4c, 0x45, 0x41, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, - 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x10, 0x0f, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4e, 0x56, 0x41, - 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x52, 0x45, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x53, 0x10, - 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x5f, 0x54, 0x4f, - 0x4f, 0x5f, 0x53, 0x48, 0x4f, 0x52, 0x54, 0x10, 0x8e, 0x02, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, - 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x4f, 0x4e, 0x47, 0x10, - 0x8d, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x4e, 0x4f, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, - 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x4f, 0x5f, 0x41, 0x4e, - 0x59, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x10, 0x12, 0x12, 0x2a, 0x0a, 0x26, 0x4e, 0x4f, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x54, 0x4f, 0x5f, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4c, - 0x49, 0x45, 0x4e, 0x54, 0x10, 0x13, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x5f, - 0x45, 0x58, 0x50, 0x49, 0x52, 0x45, 0x44, 0x10, 0x14, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4c, 0x49, - 0x45, 0x4e, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x15, 0x12, - 0x17, 0x0a, 0x13, 0x4e, 0x4f, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x4f, 0x5f, - 0x5a, 0x45, 0x52, 0x4f, 0x50, 0x53, 0x10, 0x16, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x53, 0x45, 0x52, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x17, 0x12, 0x19, 0x0a, 0x15, - 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x44, 0x4f, 0x43, 0x55, 0x4d, 0x45, 0x4e, 0x54, - 0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x10, 0x18, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x56, 0x41, 0x4c, - 0x49, 0x44, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x10, 0x19, 0x12, - 0x1a, 0x0a, 0x15, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x5f, - 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x53, 0x10, 0x98, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x44, - 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x45, 0x44, 0x10, - 0x1a, 0x12, 0x20, 0x0a, 0x1b, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x41, 0x43, - 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, - 0x10, 0xce, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x1b, 0x12, 0x19, 0x0a, 0x15, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x49, 0x4e, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x1c, 0x12, 0x1d, 0x0a, 0x19, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x4e, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x10, 0x1d, 0x12, 0x20, 0x0a, 0x1b, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x5f, 0x55, 0x53, 0x45, 0x5f, 0x4f, 0x46, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, - 0x4d, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0xb4, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x53, 0x45, 0x52, - 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x46, 0x4f, 0x52, - 0x42, 0x49, 0x44, 0x44, 0x45, 0x4e, 0x10, 0x1e, 0x12, 0x1b, 0x0a, 0x17, 0x55, 0x53, 0x45, 0x52, - 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, - 0x4b, 0x45, 0x59, 0x10, 0x1f, 0x12, 0x1a, 0x0a, 0x16, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, - 0x20, 0x12, 0x1f, 0x0a, 0x1a, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x56, - 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, - 0xa8, 0x01, 0x12, 0x19, 0x0a, 0x14, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0xe3, 0x01, 0x12, 0x1a, 0x0a, - 0x16, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x22, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x45, 0x4d, - 0x50, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, - 0x23, 0x12, 0x34, 0x0a, 0x30, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x43, 0x41, 0x4c, - 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x44, 0x4f, 0x45, 0x53, 0x5f, 0x4e, - 0x4f, 0x54, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, - 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x24, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, - 0x49, 0x44, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, - 0x25, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x55, 0x53, 0x45, - 0x52, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x10, 0x26, 0x12, 0x29, 0x0a, 0x25, 0x49, 0x4e, 0x56, 0x41, - 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x43, 0x4f, 0x4d, 0x42, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x10, 0x27, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x45, 0x58, 0x49, - 0x53, 0x54, 0x53, 0x10, 0x28, 0x12, 0x25, 0x0a, 0x21, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x4c, - 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, - 0x54, 0x4f, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x4e, 0x59, 0x10, 0x29, 0x12, 0x15, 0x0a, 0x11, - 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x52, 0x59, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x2a, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x2b, 0x12, 0x25, 0x0a, 0x21, 0x4d, 0x41, 0x58, - 0x49, 0x4d, 0x55, 0x4d, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x4f, 0x46, 0x5f, 0x43, - 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x2c, - 0x12, 0x27, 0x0a, 0x23, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x49, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x49, 0x4e, 0x5f, 0x42, 0x45, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x2d, 0x12, 0x25, 0x0a, 0x21, 0x55, 0x4e, 0x41, - 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x59, 0x4f, - 0x55, 0x52, 0x5f, 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x2e, - 0x12, 0x24, 0x0a, 0x20, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, - 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x2f, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, - 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x48, 0x41, 0x53, 0x5f, 0x42, 0x45, 0x45, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, - 0x44, 0x10, 0x30, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x41, 0x44, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x58, - 0x50, 0x49, 0x52, 0x45, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x31, 0x12, 0x1f, 0x0a, 0x1b, 0x55, 0x4e, 0x41, 0x42, 0x4c, - 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x44, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, - 0x44, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x32, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x4c, 0x49, 0x45, - 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, - 0x42, 0x45, 0x45, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x33, 0x12, 0x16, - 0x0a, 0x12, 0x4c, 0x41, 0x4e, 0x47, 0x55, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, - 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x34, 0x12, 0x1a, 0x0a, 0x16, 0x4c, 0x41, 0x4e, 0x47, 0x55, 0x41, - 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, - 0x10, 0x35, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x44, - 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x36, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x45, 0x43, 0x4f, 0x52, - 0x44, 0x5f, 0x49, 0x53, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x37, - 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x49, 0x53, 0x5f, 0x44, 0x45, - 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x38, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x45, 0x43, 0x4f, 0x52, - 0x44, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x4f, 0x4e, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x44, 0x49, - 0x54, 0x10, 0x39, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x3d, - 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, - 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, - 0x10, 0x3e, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x3f, 0x12, 0x2c, 0x0a, 0x28, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x53, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x40, 0x12, 0x2d, 0x0a, 0x29, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, - 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x41, 0x12, 0x26, 0x0a, 0x22, 0x53, 0x45, 0x52, - 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x10, - 0x42, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x43, 0x4b, 0x5f, 0x49, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x43, 0x12, 0x29, - 0x0a, 0x25, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, - 0x49, 0x53, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x55, - 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x44, 0x12, 0x2f, 0x0a, 0x2b, 0x53, 0x45, 0x52, - 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, - 0x4d, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x53, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x5f, - 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x45, 0x12, 0x38, 0x0a, 0x34, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x4d, 0x41, 0x54, - 0x43, 0x48, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x10, 0x46, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x44, 0x49, - 0x53, 0x4b, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x47, 0x12, 0x28, - 0x0a, 0x24, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, - 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x4d, 0x49, 0x4e, - 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x48, 0x12, 0x30, 0x0a, 0x2c, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, - 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x5f, 0x4e, - 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x49, 0x12, 0x2a, 0x0a, 0x25, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x49, 0x54, - 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x99, 0x02, 0x12, 0x2e, 0x0a, 0x2a, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, - 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, - 0x49, 0x52, 0x45, 0x44, 0x10, 0x4a, 0x12, 0x2f, 0x0a, 0x2b, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, - 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x42, - 0x49, 0x44, 0x44, 0x45, 0x4e, 0x10, 0x4b, 0x12, 0x2f, 0x0a, 0x2b, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x48, - 0x41, 0x52, 0x45, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x46, 0x4f, 0x52, - 0x42, 0x49, 0x44, 0x44, 0x45, 0x4e, 0x10, 0x4c, 0x12, 0x2a, 0x0a, 0x25, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x5f, 0x46, 0x4f, 0x52, 0x42, 0x49, 0x44, 0x44, 0x45, - 0x4e, 0x10, 0xf2, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x49, 0x53, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x54, - 0x4f, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x10, 0x4d, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x49, 0x53, 0x5f, 0x4e, - 0x4f, 0x54, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, 0x4e, 0x12, 0x26, 0x0a, 0x22, 0x53, 0x45, 0x52, - 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x52, 0x45, 0x4c, 0x4f, 0x41, - 0x44, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, - 0x4f, 0x12, 0x1f, 0x0a, 0x1a, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x43, 0x4b, 0x5f, 0x4e, 0x47, 0x49, 0x4e, 0x58, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, - 0xc2, 0x01, 0x12, 0x33, 0x0a, 0x2f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x55, 0x42, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x41, 0x43, - 0x43, 0x45, 0x53, 0x53, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x44, 0x49, 0x53, - 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x51, 0x12, 0x1b, 0x0a, 0x16, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, - 0x47, 0x10, 0xb2, 0x01, 0x12, 0x1c, 0x0a, 0x17, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, - 0xb3, 0x01, 0x12, 0x23, 0x0a, 0x1e, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x41, 0x54, 0x45, - 0x47, 0x4f, 0x52, 0x59, 0x10, 0xcb, 0x01, 0x12, 0x27, 0x0a, 0x22, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x89, 0x02, - 0x12, 0x24, 0x0a, 0x1f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, - 0x4b, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, - 0x4c, 0x49, 0x44, 0x10, 0x9a, 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, - 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x52, - 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x9b, 0x02, 0x12, 0x34, 0x0a, 0x2f, 0x55, 0x53, - 0x45, 0x52, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, - 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x9c, 0x02, - 0x12, 0x37, 0x0a, 0x32, 0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, - 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, - 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x53, 0x5f, 0x46, 0x4f, 0x52, - 0x42, 0x49, 0x44, 0x44, 0x45, 0x4e, 0x10, 0xc9, 0x02, 0x12, 0x2a, 0x0a, 0x25, 0x53, 0x48, 0x41, - 0x52, 0x45, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, - 0x56, 0x45, 0x10, 0xc8, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x52, 0x12, 0x1b, 0x0a, 0x17, - 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x49, 0x53, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, - 0x44, 0x59, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x10, 0x53, 0x12, 0x1e, 0x0a, 0x1a, 0x50, 0x52, 0x4f, - 0x43, 0x45, 0x53, 0x53, 0x5f, 0x49, 0x53, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, - 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x55, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x4e, 0x41, - 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, - 0x4f, 0x43, 0x45, 0x53, 0x53, 0x10, 0x57, 0x12, 0x39, 0x0a, 0x34, 0x43, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, - 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, - 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, - 0xc3, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x52, 0x45, 0x50, - 0x41, 0x49, 0x52, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x3b, 0x12, 0x13, - 0x0a, 0x0f, 0x4e, 0x4f, 0x54, 0x48, 0x49, 0x4e, 0x47, 0x5f, 0x54, 0x4f, 0x5f, 0x53, 0x59, 0x4e, - 0x43, 0x10, 0x3c, 0x12, 0x28, 0x0a, 0x24, 0x49, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x4f, - 0x53, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x44, 0x49, 0x54, 0x5f, 0x41, - 0x4e, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x3a, 0x12, 0x2a, 0x0a, - 0x26, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x5f, 0x49, 0x4e, 0x5f, - 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x58, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x4f, 0x4c, 0x44, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, - 0x44, 0x10, 0x59, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, - 0x54, 0x45, 0x44, 0x10, 0x5a, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x5b, 0x12, 0x1a, 0x0a, 0x15, - 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x41, - 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0xa7, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x55, - 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x5c, 0x12, 0x1e, 0x0a, 0x1a, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x4e, 0x41, - 0x4d, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x5d, 0x12, 0x2d, 0x0a, 0x29, - 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x5e, 0x12, 0x39, 0x0a, 0x35, 0x4c, - 0x37, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x52, 0x5f, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, - 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x5f, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, - 0x54, 0x5f, 0x57, 0x49, 0x4c, 0x4c, 0x5f, 0x42, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, - 0x44, 0x10, 0x60, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x57, - 0x49, 0x4c, 0x4c, 0x5f, 0x42, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x80, - 0x02, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x57, 0x49, 0x4c, - 0x4c, 0x5f, 0x42, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x81, 0x02, 0x12, - 0x19, 0x0a, 0x15, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x57, 0x49, 0x4c, 0x4c, 0x5f, 0x42, 0x45, - 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x61, 0x12, 0x25, 0x0a, 0x20, 0x53, 0x54, - 0x41, 0x43, 0x4b, 0x5f, 0x4f, 0x46, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x57, - 0x49, 0x4c, 0x4c, 0x5f, 0x42, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x9e, - 0x02, 0x12, 0x25, 0x0a, 0x20, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x4f, 0x46, 0x5f, 0x50, 0x52, - 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x57, 0x49, 0x4c, 0x4c, 0x5f, 0x42, 0x45, 0x5f, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x9f, 0x02, 0x12, 0x28, 0x0a, 0x23, 0x55, 0x53, 0x45, 0x52, - 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x4f, 0x46, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, - 0x5f, 0x57, 0x49, 0x4c, 0x4c, 0x5f, 0x42, 0x45, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x45, 0x44, 0x10, - 0xa0, 0x02, 0x12, 0x21, 0x0a, 0x1d, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, - 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x62, 0x12, 0x34, 0x0a, 0x30, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, - 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x54, 0x5f, - 0x4c, 0x45, 0x41, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, - 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x63, 0x12, 0x2d, 0x0a, 0x29, 0x50, - 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, - 0x4e, 0x47, 0x5f, 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, 0x4d, - 0x41, 0x49, 0x4e, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x64, 0x12, 0x2a, 0x0a, 0x26, 0x50, 0x55, - 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, - 0x47, 0x5f, 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x4c, 0x4c, - 0x42, 0x41, 0x43, 0x4b, 0x10, 0x65, 0x12, 0x40, 0x0a, 0x3c, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, - 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x55, - 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x4e, - 0x41, 0x4d, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x41, 0x4e, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x52, - 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x66, 0x12, 0x3d, 0x0a, 0x39, 0x50, 0x55, 0x42, 0x4c, - 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, - 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, - 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x5f, 0x41, 0x4e, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x52, 0x4f, - 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x67, 0x12, 0x30, 0x0a, 0x2c, 0x50, 0x55, 0x42, 0x4c, 0x49, - 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, - 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x50, 0x41, 0x54, 0x48, 0x53, 0x10, 0x68, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x55, 0x42, - 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, - 0x5f, 0x49, 0x54, 0x45, 0x4d, 0x53, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x69, 0x12, 0x27, - 0x0a, 0x23, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, - 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, - 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x6a, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x55, 0x42, 0x4c, 0x49, - 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, - 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x53, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x6b, 0x12, 0x30, - 0x0a, 0x2c, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, - 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x44, 0x4f, - 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x46, 0x51, 0x44, 0x4e, 0x10, 0x6c, - 0x12, 0x24, 0x0a, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, - 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x46, 0x41, 0x4c, 0x4c, - 0x42, 0x41, 0x43, 0x4b, 0x10, 0x6d, 0x12, 0x2f, 0x0a, 0x2b, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, - 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4c, 0x4f, - 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x4f, 0x45, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x6e, 0x12, 0x30, 0x0a, 0x2c, 0x50, 0x55, 0x42, 0x4c, 0x49, - 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x49, - 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, - 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x10, 0x6f, 0x12, 0x3c, 0x0a, 0x38, 0x50, 0x55, 0x42, - 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, - 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x50, - 0x4f, 0x49, 0x4e, 0x54, 0x53, 0x10, 0x70, 0x12, 0x3c, 0x0a, 0x38, 0x50, 0x55, 0x42, 0x4c, 0x49, - 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, - 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x41, 0x43, 0x43, - 0x45, 0x53, 0x53, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x71, 0x12, 0x2d, 0x0a, 0x29, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, - 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x51, - 0x55, 0x45, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x5f, 0x54, 0x43, 0x50, 0x5f, 0x50, 0x4f, - 0x52, 0x54, 0x10, 0x72, 0x12, 0x3b, 0x0a, 0x37, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, - 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x44, 0x4f, 0x45, 0x53, 0x5f, 0x4e, - 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, - 0x73, 0x12, 0x3a, 0x0a, 0x35, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, - 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x42, 0x49, 0x44, 0x44, - 0x45, 0x4e, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x50, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x44, 0x4f, 0x4d, - 0x41, 0x49, 0x4e, 0x5f, 0x53, 0x55, 0x46, 0x46, 0x49, 0x58, 0x10, 0xc7, 0x02, 0x12, 0x2f, 0x0a, - 0x2b, 0x4e, 0x4f, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, - 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x5f, 0x4c, 0x37, 0x5f, 0x48, 0x54, - 0x54, 0x50, 0x5f, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x49, 0x4e, 0x47, 0x10, 0x74, 0x12, 0x15, - 0x0a, 0x11, 0x53, 0x53, 0x4c, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, - 0x54, 0x45, 0x44, 0x10, 0x75, 0x12, 0x28, 0x0a, 0x24, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, - 0x52, 0x45, 0x44, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x5f, - 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x43, 0x48, 0x45, 0x44, 0x10, 0x76, 0x12, - 0x25, 0x0a, 0x21, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x53, 0x55, 0x46, 0x46, 0x49, 0x58, - 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x46, 0x41, - 0x49, 0x4c, 0x45, 0x44, 0x10, 0x77, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4e, - 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x78, 0x12, 0x24, - 0x0a, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, - 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, - 0x4e, 0x47, 0x10, 0x79, 0x12, 0x29, 0x0a, 0x24, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, - 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x56, 0x45, 0x52, 0x53, - 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0xa9, 0x01, 0x12, - 0x15, 0x0a, 0x11, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4f, 0x55, 0x54, 0x5f, 0x4f, 0x46, 0x5f, 0x52, - 0x41, 0x4e, 0x47, 0x45, 0x10, 0x7a, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x50, - 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, - 0x7b, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x45, - 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x7c, 0x12, 0x20, 0x0a, 0x1c, 0x55, 0x44, - 0x50, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x4d, - 0x45, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x7d, 0x12, 0x1f, 0x0a, 0x1b, - 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x49, 0x50, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, - 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x7e, 0x12, 0x1f, 0x0a, - 0x1a, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x49, 0x50, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, - 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x5f, 0x4f, 0x4e, 0x45, 0x10, 0x80, 0x01, 0x12, 0x26, - 0x0a, 0x21, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x49, 0x50, 0x5f, 0x52, 0x45, 0x51, 0x55, - 0x45, 0x53, 0x54, 0x5f, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, - 0x49, 0x4e, 0x47, 0x10, 0x82, 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, - 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x83, 0x01, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x55, 0x42, 0x4c, - 0x49, 0x43, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x84, 0x01, 0x12, 0x21, 0x0a, 0x1c, - 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x49, 0x50, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, - 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x85, 0x01, 0x12, - 0x30, 0x0a, 0x2b, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x54, - 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x42, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x86, - 0x01, 0x12, 0x27, 0x0a, 0x22, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x50, 0x4f, 0x52, 0x54, - 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, - 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x10, 0x87, 0x01, 0x12, 0x21, 0x0a, 0x1c, 0x49, 0x4e, - 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x55, 0x50, 0x4c, - 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x10, 0xb5, 0x01, 0x12, 0x25, 0x0a, - 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x52, 0x4f, 0x55, - 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, - 0x47, 0x10, 0x88, 0x01, 0x12, 0x2a, 0x0a, 0x25, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x50, - 0x4f, 0x52, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x41, - 0x4c, 0x49, 0x44, 0x5f, 0x49, 0x50, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x10, 0x89, 0x01, - 0x12, 0x31, 0x0a, 0x2c, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, - 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x49, 0x52, 0x45, 0x57, 0x41, 0x4c, 0x4c, - 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x4c, 0x49, 0x43, 0x54, - 0x10, 0x8a, 0x01, 0x12, 0x29, 0x0a, 0x24, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x50, 0x4f, - 0x52, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0xaa, 0x01, 0x12, 0x36, - 0x0a, 0x31, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x52, 0x4f, - 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x4f, 0x5f, - 0x45, 0x44, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x43, - 0x4f, 0x52, 0x44, 0x10, 0x8b, 0x01, 0x12, 0x3f, 0x0a, 0x3a, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, - 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, - 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x44, 0x49, 0x54, 0x5f, 0x50, 0x4f, 0x52, - 0x54, 0x53, 0x5f, 0x4f, 0x4e, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x53, 0x45, 0x52, - 0x56, 0x49, 0x43, 0x45, 0x10, 0xbe, 0x01, 0x12, 0x15, 0x0a, 0x10, 0x44, 0x52, 0x49, 0x56, 0x45, - 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x8c, 0x01, 0x12, 0x27, - 0x0a, 0x22, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, - 0x49, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x43, 0x4b, 0x10, 0x8d, 0x01, 0x12, 0x17, 0x0a, 0x12, 0x44, 0x52, 0x49, 0x56, 0x45, - 0x52, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x8e, 0x01, - 0x12, 0x2a, 0x0a, 0x25, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, - 0x44, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x8f, 0x01, 0x12, 0x1a, 0x0a, 0x15, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x41, 0x53, 0x53, - 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x90, 0x01, 0x12, 0x2d, 0x0a, 0x28, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, - 0x53, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, - 0x49, 0x52, 0x45, 0x44, 0x10, 0x91, 0x01, 0x12, 0x1a, 0x0a, 0x15, 0x41, 0x50, 0x50, 0x5f, 0x56, - 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, - 0x10, 0x92, 0x01, 0x12, 0x1f, 0x0a, 0x1a, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x10, 0x93, 0x01, 0x12, 0x23, 0x0a, 0x1e, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x5f, 0x50, - 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x43, - 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x94, 0x01, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x42, 0x4a, - 0x45, 0x43, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x4e, 0x47, - 0x54, 0x48, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x95, 0x01, 0x12, 0x23, 0x0a, 0x1e, 0x4f, 0x42, - 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x49, 0x4d, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, - 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x96, 0x01, 0x12, - 0x15, 0x0a, 0x10, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x97, 0x01, 0x12, 0x2b, 0x0a, 0x26, 0x4d, 0x41, 0x58, 0x5f, 0x4f, 0x42, - 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x45, - 0x53, 0x54, 0x49, 0x4d, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, - 0x10, 0x98, 0x01, 0x12, 0x1a, 0x0a, 0x15, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x49, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0xe2, 0x01, 0x12, - 0x20, 0x0a, 0x1b, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, - 0x4f, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0xb6, - 0x02, 0x12, 0x22, 0x0a, 0x1d, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x49, 0x53, 0x5f, 0x42, 0x45, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, - 0x45, 0x44, 0x10, 0xc4, 0x01, 0x12, 0x1f, 0x0a, 0x1a, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, - 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x53, 0x5f, 0x42, 0x45, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x55, - 0x49, 0x4c, 0x54, 0x10, 0xc5, 0x01, 0x12, 0x26, 0x0a, 0x21, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, - 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45, 0x49, - 0x4e, 0x47, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x45, 0x44, 0x10, 0xc6, 0x01, 0x12, 0x21, - 0x0a, 0x1c, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, - 0x50, 0x4c, 0x4f, 0x59, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0xc7, - 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, - 0x10, 0xc8, 0x01, 0x12, 0x22, 0x0a, 0x1d, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x59, 0x41, 0x4d, 0x4c, 0x5f, 0x50, 0x41, 0x52, 0x53, 0x45, 0x5f, 0x46, 0x41, - 0x49, 0x4c, 0x45, 0x44, 0x10, 0xe1, 0x01, 0x12, 0x25, 0x0a, 0x20, 0x41, 0x50, 0x50, 0x5f, 0x56, - 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x59, 0x41, 0x4d, 0x4c, 0x5f, 0x43, 0x4f, 0x4e, 0x46, - 0x49, 0x47, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0xc4, 0x02, 0x12, 0x23, - 0x0a, 0x1e, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, - 0x10, 0x9d, 0x02, 0x12, 0x2b, 0x0a, 0x26, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x48, 0x41, 0x53, 0x5f, 0x44, 0x45, - 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0xb2, 0x02, - 0x12, 0x1d, 0x0a, 0x18, 0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, - 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x99, 0x01, 0x12, - 0x23, 0x0a, 0x1e, 0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, - 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, - 0x54, 0x10, 0x9a, 0x01, 0x12, 0x27, 0x0a, 0x22, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x9b, 0x01, 0x12, 0x24, 0x0a, - 0x1f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, - 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, - 0x10, 0x9c, 0x01, 0x12, 0x28, 0x0a, 0x23, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x10, 0x9d, 0x01, 0x12, 0x2f, 0x0a, - 0x2a, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, - 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x10, 0x9e, 0x01, 0x12, 0x2c, - 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4a, - 0x45, 0x43, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, - 0x4b, 0x5f, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x10, 0x9f, 0x01, 0x12, 0x1a, 0x0a, 0x15, - 0x44, 0x49, 0x46, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, - 0x54, 0x5f, 0x49, 0x44, 0x53, 0x10, 0xa0, 0x01, 0x12, 0x27, 0x0a, 0x22, 0x53, 0x54, 0x41, 0x54, - 0x53, 0x5f, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, - 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0xab, - 0x01, 0x12, 0x2f, 0x0a, 0x2a, 0x53, 0x54, 0x41, 0x54, 0x53, 0x5f, 0x48, 0x49, 0x53, 0x54, 0x4f, - 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x47, - 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x42, 0x59, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, - 0xc0, 0x01, 0x12, 0x2b, 0x0a, 0x26, 0x53, 0x54, 0x41, 0x54, 0x53, 0x5f, 0x48, 0x49, 0x53, 0x54, - 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x49, 0x44, 0x5f, 0x46, 0x49, - 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0xac, 0x01, 0x12, - 0x2d, 0x0a, 0x28, 0x53, 0x54, 0x41, 0x54, 0x53, 0x5f, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, - 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, - 0x49, 0x44, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0xad, 0x01, 0x12, 0x34, - 0x0a, 0x2f, 0x53, 0x54, 0x41, 0x54, 0x53, 0x5f, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x5f, - 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, - 0x44, 0x10, 0xae, 0x01, 0x12, 0x2f, 0x0a, 0x2a, 0x53, 0x54, 0x41, 0x54, 0x53, 0x5f, 0x48, 0x49, - 0x53, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x48, 0x49, 0x53, - 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x43, 0x48, - 0x45, 0x44, 0x10, 0xc1, 0x01, 0x12, 0x27, 0x0a, 0x22, 0x53, 0x54, 0x41, 0x54, 0x53, 0x5f, 0x48, - 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x52, 0x41, - 0x4e, 0x47, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x92, 0x02, 0x12, 0x38, - 0x0a, 0x33, 0x53, 0x54, 0x41, 0x54, 0x53, 0x5f, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x5f, - 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x45, 0x49, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x52, 0x41, - 0x4e, 0x47, 0x45, 0x5f, 0x4f, 0x52, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x51, - 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x96, 0x02, 0x12, 0x2d, 0x0a, 0x28, 0x53, 0x54, 0x41, 0x54, - 0x53, 0x5f, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, - 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, - 0x49, 0x52, 0x45, 0x44, 0x10, 0x94, 0x02, 0x12, 0x2b, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x42, 0x49, 0x54, 0x5f, 0x53, 0x45, 0x41, - 0x52, 0x43, 0x48, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x10, 0x84, 0x02, 0x12, 0x33, 0x0a, 0x2e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x42, 0x49, 0x54, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, - 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x42, 0x59, 0x5f, 0x49, - 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x85, 0x02, 0x12, 0x2b, 0x0a, 0x26, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x42, 0x49, 0x54, 0x5f, 0x53, - 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, - 0x4c, 0x49, 0x44, 0x10, 0x91, 0x02, 0x12, 0x30, 0x0a, 0x2b, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, - 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x42, 0x49, 0x54, 0x5f, 0x53, 0x45, 0x41, 0x52, - 0x43, 0x48, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x5f, 0x52, 0x45, 0x51, - 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x86, 0x02, 0x12, 0x2f, 0x0a, 0x2a, 0x54, 0x52, 0x41, 0x4e, - 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x42, 0x49, 0x54, 0x5f, 0x53, 0x45, - 0x41, 0x52, 0x43, 0x48, 0x5f, 0x49, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x49, - 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x87, 0x02, 0x12, 0x3c, 0x0a, 0x37, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x42, 0x49, 0x54, 0x5f, 0x53, - 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x45, 0x49, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x52, 0x41, 0x4e, - 0x47, 0x45, 0x5f, 0x4f, 0x52, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x51, 0x55, - 0x49, 0x52, 0x45, 0x44, 0x10, 0x95, 0x02, 0x12, 0x31, 0x0a, 0x2c, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x42, 0x49, 0x54, 0x5f, 0x53, 0x45, 0x41, - 0x52, 0x43, 0x48, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x52, - 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x90, 0x02, 0x12, 0x41, 0x0a, 0x3c, 0x54, 0x52, - 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x42, 0x49, 0x54, 0x5f, - 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x54, 0x49, 0x4c, 0x4c, 0x5f, 0x41, 0x4e, 0x44, 0x5f, - 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x5a, 0x4f, - 0x4e, 0x45, 0x53, 0x5f, 0x44, 0x49, 0x46, 0x46, 0x45, 0x52, 0x10, 0xac, 0x02, 0x12, 0x2e, 0x0a, - 0x29, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x42, - 0x49, 0x54, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x5a, 0x4f, 0x4e, 0x45, 0x10, 0xad, 0x02, 0x12, 0x2c, 0x0a, - 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x42, - 0x49, 0x54, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x10, 0x8f, 0x02, 0x12, 0x20, 0x0a, 0x1b, 0x47, - 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x45, 0x44, 0x10, 0xbc, 0x01, 0x12, 0x20, 0x0a, - 0x1b, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, - 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xb6, 0x01, 0x12, - 0x1a, 0x0a, 0x15, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, - 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0xb7, 0x01, 0x12, 0x22, 0x0a, 0x1d, 0x47, - 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0xb8, 0x01, 0x12, - 0x21, 0x0a, 0x1c, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, - 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, - 0xb9, 0x01, 0x12, 0x23, 0x0a, 0x1e, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x4e, 0x4f, 0x5f, - 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x46, - 0x4f, 0x55, 0x4e, 0x44, 0x10, 0xba, 0x01, 0x12, 0x26, 0x0a, 0x21, 0x47, 0x49, 0x54, 0x48, 0x55, - 0x42, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x41, 0x43, 0x43, - 0x45, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0xbb, 0x01, 0x12, - 0x1f, 0x0a, 0x1a, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4c, - 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0xbd, 0x01, - 0x12, 0x28, 0x0a, 0x23, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, - 0x4b, 0x5f, 0x4e, 0x4f, 0x5f, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x49, 0x4e, 0x54, 0x45, - 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xce, 0x01, 0x12, 0x19, 0x0a, 0x14, 0x42, 0x52, - 0x41, 0x4e, 0x43, 0x48, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, - 0x45, 0x44, 0x10, 0xcf, 0x01, 0x12, 0x2d, 0x0a, 0x28, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, - 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x53, 0x5f, - 0x42, 0x52, 0x41, 0x4e, 0x43, 0x48, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x10, 0x8c, 0x02, 0x12, 0x20, 0x0a, 0x1b, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x52, - 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, - 0x52, 0x45, 0x44, 0x10, 0xd0, 0x01, 0x12, 0x27, 0x0a, 0x22, 0x4e, 0x4f, 0x5f, 0x45, 0x58, 0x54, - 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x4f, 0x52, 0x59, - 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xd1, 0x01, 0x12, - 0x1a, 0x0a, 0x15, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x42, 0x52, 0x41, 0x4e, 0x43, 0x48, - 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xd2, 0x01, 0x12, 0x1b, 0x0a, 0x16, 0x47, - 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x57, 0x45, 0x42, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x44, 0x45, - 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xd3, 0x01, 0x12, 0x26, 0x0a, 0x21, 0x47, 0x49, 0x54, 0x48, - 0x55, 0x42, 0x5f, 0x57, 0x45, 0x42, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, - 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x10, 0xd4, 0x01, - 0x12, 0x24, 0x0a, 0x1f, 0x55, 0x4e, 0x45, 0x58, 0x50, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x47, - 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, - 0x49, 0x4e, 0x47, 0x10, 0xda, 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x5a, 0x45, 0x52, 0x4f, 0x50, 0x53, - 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0xdb, 0x01, 0x12, 0x1d, 0x0a, 0x18, 0x49, 0x4e, 0x43, 0x4f, - 0x52, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x57, 0x45, 0x42, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x53, 0x45, - 0x43, 0x52, 0x45, 0x54, 0x10, 0xd5, 0x01, 0x12, 0x23, 0x0a, 0x1e, 0x55, 0x4e, 0x53, 0x55, 0x50, - 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x5f, 0x57, 0x45, 0x42, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x45, - 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0xd6, 0x01, 0x12, 0x35, 0x0a, 0x30, - 0x52, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x44, 0x4f, 0x45, 0x53, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x53, - 0x10, 0xd7, 0x01, 0x12, 0x2e, 0x0a, 0x29, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x4e, 0x45, 0x57, - 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, - 0x10, 0xd8, 0x01, 0x12, 0x18, 0x0a, 0x13, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x50, 0x55, - 0x53, 0x48, 0x5f, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x44, 0x10, 0xd9, 0x01, 0x12, 0x20, 0x0a, - 0x1b, 0x5a, 0x45, 0x52, 0x4f, 0x50, 0x53, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x46, 0x49, - 0x4c, 0x45, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x41, 0x52, 0x47, 0x45, 0x10, 0xcc, 0x01, 0x12, - 0x21, 0x0a, 0x1c, 0x53, 0x41, 0x4d, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x44, 0x10, - 0xcd, 0x01, 0x12, 0x2d, 0x0a, 0x28, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x57, 0x52, 0x4f, - 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x46, 0x55, - 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x10, 0xdc, - 0x01, 0x12, 0x23, 0x0a, 0x1e, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x57, 0x45, 0x42, 0x48, - 0x4f, 0x4f, 0x4b, 0x53, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, - 0x44, 0x45, 0x44, 0x10, 0xdd, 0x01, 0x12, 0x27, 0x0a, 0x22, 0x41, 0x56, 0x41, 0x54, 0x41, 0x52, - 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x46, 0x4f, 0x52, 0x42, 0x49, 0x44, 0x44, 0x45, - 0x4e, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0xde, 0x01, 0x12, - 0x1b, 0x0a, 0x16, 0x41, 0x56, 0x41, 0x54, 0x41, 0x52, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, - 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0xdf, 0x01, 0x12, 0x21, 0x0a, 0x1c, - 0x41, 0x56, 0x41, 0x54, 0x41, 0x52, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x46, 0x49, - 0x4c, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0xe0, 0x01, 0x12, - 0x1f, 0x0a, 0x1a, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4c, - 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0xe4, 0x01, - 0x12, 0x20, 0x0a, 0x1b, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, - 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x45, 0x44, 0x10, - 0xe5, 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x47, 0x49, - 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x10, 0xe6, 0x01, 0x12, 0x1a, 0x0a, 0x15, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x52, - 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0xe7, 0x01, - 0x12, 0x22, 0x0a, 0x1d, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x4f, - 0x52, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, - 0x44, 0x10, 0xe8, 0x01, 0x12, 0x24, 0x0a, 0x1f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x46, - 0x55, 0x4c, 0x4c, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x52, - 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0xe9, 0x01, 0x12, 0x28, 0x0a, 0x23, 0x4d, 0x55, - 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x53, 0x5f, 0x41, 0x52, 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x42, 0x49, 0x44, 0x44, 0x45, - 0x4e, 0x10, 0xea, 0x01, 0x12, 0x1a, 0x0a, 0x15, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x42, - 0x52, 0x41, 0x4e, 0x43, 0x48, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xeb, 0x01, - 0x12, 0x1b, 0x0a, 0x16, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x57, 0x45, 0x42, 0x48, 0x4f, - 0x4f, 0x4b, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xec, 0x01, 0x12, 0x26, 0x0a, - 0x21, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x57, 0x45, 0x42, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, - 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, - 0x52, 0x53, 0x10, 0xed, 0x01, 0x12, 0x28, 0x0a, 0x23, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x4e, 0x4f, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, - 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xee, 0x01, 0x12, - 0x18, 0x0a, 0x13, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x50, 0x55, 0x53, 0x48, 0x5f, 0x49, - 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x44, 0x10, 0xef, 0x01, 0x12, 0x1c, 0x0a, 0x17, 0x59, 0x41, 0x4d, - 0x4c, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x5f, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x10, 0xf0, 0x01, 0x12, 0x1e, 0x0a, 0x19, 0x59, 0x41, 0x4d, 0x4c, 0x5f, - 0x57, 0x52, 0x4f, 0x4e, 0x47, 0x5f, 0x55, 0x53, 0x45, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x10, 0xf1, 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x56, 0x41, 0x54, 0x5f, 0x4e, - 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x45, 0x55, 0x43, - 0x4f, 0x55, 0x4e, 0x54, 0x52, 0x59, 0x10, 0xfe, 0x01, 0x12, 0x1c, 0x0a, 0x17, 0x43, 0x4f, 0x4d, - 0x50, 0x41, 0x4e, 0x59, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x49, - 0x4e, 0x5f, 0x45, 0x55, 0x10, 0x82, 0x02, 0x12, 0x17, 0x0a, 0x12, 0x56, 0x41, 0x54, 0x5f, 0x4e, - 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x10, 0xf4, 0x01, - 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x50, - 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0xf5, 0x01, 0x12, 0x19, 0x0a, 0x14, 0x44, 0x55, - 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x41, 0x54, 0x5f, 0x4e, 0x55, 0x4d, 0x42, - 0x45, 0x52, 0x10, 0xfa, 0x01, 0x12, 0x1d, 0x0a, 0x18, 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, - 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x4e, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, - 0x52, 0x10, 0xae, 0x02, 0x12, 0x14, 0x0a, 0x0f, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x43, 0x59, - 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xaf, 0x02, 0x12, 0x1e, 0x0a, 0x19, 0x41, 0x44, - 0x4d, 0x49, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, - 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x8a, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x43, 0x52, - 0x45, 0x44, 0x49, 0x54, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x43, 0x48, - 0x45, 0x44, 0x10, 0xf6, 0x01, 0x12, 0x18, 0x0a, 0x13, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, - 0x43, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x44, 0x49, 0x54, 0x10, 0xf7, 0x01, 0x12, - 0x18, 0x0a, 0x13, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, - 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0xf8, 0x01, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x52, 0x4f, - 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, - 0x45, 0x44, 0x10, 0xf9, 0x01, 0x12, 0x1c, 0x0a, 0x17, 0x4d, 0x41, 0x58, 0x49, 0x4d, 0x55, 0x4d, - 0x5f, 0x41, 0x4d, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, - 0x10, 0x8b, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, - 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0xfc, 0x01, 0x12, 0x16, - 0x0a, 0x11, 0x50, 0x41, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0xfd, 0x01, 0x12, 0x14, 0x0a, 0x0f, 0x41, 0x44, 0x44, 0x4f, 0x4e, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0xff, 0x01, 0x12, 0x16, 0x0a, 0x11, - 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x83, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x52, 0x49, 0x43, 0x45, 0x5f, 0x4c, 0x49, - 0x53, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x88, 0x02, 0x12, - 0x19, 0x0a, 0x14, 0x43, 0x4f, 0x53, 0x54, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x54, 0x4f, - 0x4f, 0x5f, 0x53, 0x4d, 0x41, 0x4c, 0x4c, 0x10, 0x97, 0x02, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x52, - 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x49, 0x4e, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x59, 0x41, 0x4d, 0x4c, 0x10, 0xa1, 0x02, 0x12, 0x2c, 0x0a, 0x27, - 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x49, - 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x53, 0x54, - 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, 0x10, 0xa2, 0x02, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x52, - 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x49, 0x4e, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0xa7, - 0x02, 0x12, 0x28, 0x0a, 0x23, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x4d, 0x50, - 0x4f, 0x52, 0x54, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0xa4, 0x02, 0x12, 0x25, 0x0a, 0x20, 0x50, - 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x4d, 0x49, - 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, - 0xa5, 0x02, 0x12, 0x32, 0x0a, 0x2d, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x4d, - 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x55, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x43, - 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x43, 0x4b, 0x10, 0xa6, 0x02, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, - 0x54, 0x5f, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, - 0x5f, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x44, 0x10, 0xa8, 0x02, 0x12, 0x23, 0x0a, 0x1e, - 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x50, - 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x10, 0xa9, - 0x02, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x4d, 0x50, - 0x4f, 0x52, 0x54, 0x5f, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x10, 0xaa, 0x02, 0x12, 0x25, 0x0a, 0x20, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x53, 0x43, 0x41, - 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0xb5, 0x02, 0x12, 0x2d, 0x0a, - 0x28, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, - 0x41, 0x55, 0x54, 0x4f, 0x53, 0x43, 0x41, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x50, 0x55, 0x5f, - 0x52, 0x41, 0x4d, 0x5f, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x10, 0xcf, 0x02, 0x12, 0x42, 0x0a, 0x3d, - 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x56, 0x45, 0x52, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x5f, - 0x41, 0x55, 0x54, 0x4f, 0x53, 0x43, 0x41, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x42, - 0x49, 0x44, 0x44, 0x45, 0x4e, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x54, 0x48, 0x49, 0x53, 0x5f, 0x53, - 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x10, 0xb1, 0x02, - 0x12, 0x44, 0x0a, 0x3f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x48, 0x4f, 0x52, 0x49, 0x5a, - 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x53, 0x43, 0x41, 0x4c, 0x49, 0x4e, - 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x42, 0x49, 0x44, 0x44, 0x45, 0x4e, 0x5f, 0x46, 0x4f, 0x52, 0x5f, - 0x54, 0x48, 0x49, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, - 0x4f, 0x52, 0x59, 0x10, 0xb3, 0x02, 0x12, 0x3b, 0x0a, 0x36, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, - 0x5f, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x41, 0x55, 0x54, 0x4f, - 0x53, 0x43, 0x41, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x42, 0x49, 0x44, 0x44, 0x45, - 0x4e, 0x5f, 0x49, 0x4e, 0x5f, 0x4e, 0x4f, 0x4e, 0x5f, 0x48, 0x41, 0x5f, 0x4d, 0x4f, 0x44, 0x45, - 0x10, 0xb4, 0x02, 0x12, 0x2d, 0x0a, 0x28, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x4f, - 0x52, 0x42, 0x49, 0x44, 0x44, 0x45, 0x4e, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x54, 0x48, 0x49, 0x53, - 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x10, - 0xb7, 0x02, 0x12, 0x32, 0x0a, 0x2d, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, - 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x42, 0x49, 0x44, 0x44, 0x45, 0x4e, 0x5f, 0x46, 0x4f, 0x52, 0x5f, - 0x54, 0x48, 0x49, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, - 0x4f, 0x52, 0x59, 0x10, 0xb8, 0x02, 0x12, 0x21, 0x0a, 0x1c, 0x59, 0x41, 0x4d, 0x4c, 0x5f, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x5f, 0x59, 0x41, 0x4d, 0x4c, 0x10, 0xb0, 0x02, 0x12, 0x1d, 0x0a, 0x18, 0x55, 0x4e, 0x45, - 0x58, 0x50, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x59, 0x41, 0x4d, 0x4c, 0x5f, 0x45, 0x4e, 0x43, - 0x4f, 0x44, 0x49, 0x4e, 0x47, 0x10, 0xc5, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x42, 0x55, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, - 0x53, 0x10, 0xd0, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x53, 0x33, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x52, - 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0xd1, 0x02, - 0x12, 0x1a, 0x0a, 0x15, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x49, 0x44, 0x5f, 0x57, 0x41, 0x53, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0xa1, 0x01, 0x12, 0x1c, 0x0a, 0x17, - 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x5f, 0x49, 0x44, 0x5f, 0x57, 0x41, 0x53, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0xa2, 0x01, 0x12, 0x37, 0x0a, 0x32, 0x55, 0x53, - 0x45, 0x52, 0x5f, 0x44, 0x4f, 0x45, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x48, 0x41, 0x56, 0x45, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x54, 0x4f, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, - 0x10, 0xa3, 0x01, 0x12, 0x22, 0x0a, 0x1d, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x48, 0x41, 0x53, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x5a, 0x45, - 0x52, 0x4f, 0x50, 0x53, 0x10, 0xa4, 0x01, 0x12, 0x18, 0x0a, 0x13, 0x49, 0x4e, 0x56, 0x41, 0x4c, - 0x49, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xc3, - 0x01, 0x12, 0x19, 0x0a, 0x14, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, - 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0xc1, 0x02, 0x12, 0x17, 0x0a, 0x12, - 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x4f, - 0x4e, 0x47, 0x10, 0xc2, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, - 0x52, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x4f, 0x4e, 0x47, 0x10, 0xbc, 0x02, - 0x12, 0x15, 0x0a, 0x10, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x49, 0x53, 0x5f, 0x49, 0x4e, 0x56, - 0x41, 0x4c, 0x49, 0x44, 0x10, 0xb9, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, - 0xba, 0x02, 0x12, 0x20, 0x0a, 0x1b, 0x4e, 0x4f, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x42, 0x4f, - 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, - 0x44, 0x10, 0xbb, 0x02, 0x12, 0x13, 0x0a, 0x0e, 0x41, 0x4d, 0x42, 0x49, 0x47, 0x55, 0x4f, 0x55, - 0x53, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0xca, 0x02, 0x12, 0x1b, 0x0a, 0x16, 0x41, 0x4d, 0x42, - 0x49, 0x47, 0x55, 0x4f, 0x55, 0x53, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x49, 0x47, 0x4e, - 0x5f, 0x49, 0x4e, 0x10, 0xcb, 0x02, 0x12, 0x19, 0x0a, 0x14, 0x55, 0x4e, 0x53, 0x55, 0x50, 0x50, - 0x4f, 0x52, 0x54, 0x45, 0x44, 0x5f, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x43, 0x59, 0x10, 0xbd, - 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x55, 0x52, - 0x52, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0xc0, 0x02, 0x12, 0x1c, 0x0a, - 0x17, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x5f, - 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0xbe, 0x02, 0x12, 0x13, 0x0a, 0x0e, 0x49, - 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x4d, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0xcd, 0x02, - 0x2a, 0xc6, 0x01, 0x0a, 0x24, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x35, 0x0a, 0x31, 0x41, 0x50, 0x50, - 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, - 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, - 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x34, 0x0a, 0x30, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x52, - 0x41, 0x4e, 0x43, 0x48, 0x10, 0x01, 0x12, 0x31, 0x0a, 0x2d, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, - 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x54, 0x41, 0x47, 0x10, 0x02, 0x2a, 0xc6, 0x01, 0x0a, 0x24, 0x41, 0x70, - 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x35, 0x0a, 0x31, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, - 0x4e, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x34, 0x0a, 0x30, 0x41, 0x50, 0x50, - 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, - 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, - 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x52, 0x41, 0x4e, 0x43, 0x48, 0x10, 0x01, 0x12, - 0x31, 0x0a, 0x2d, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x47, - 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x41, 0x47, - 0x10, 0x02, 0x2a, 0xc4, 0x01, 0x0a, 0x10, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x50, 0x50, 0x5f, 0x56, - 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x50, 0x50, 0x5f, 0x56, - 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x43, 0x4c, - 0x49, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x55, 0x49, 0x10, 0x02, 0x12, - 0x1d, 0x0a, 0x19, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x03, 0x12, 0x1d, - 0x0a, 0x19, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x10, 0x04, 0x12, 0x1a, 0x0a, - 0x16, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x47, 0x49, 0x54, 0x10, 0x05, 0x2a, 0xfe, 0x03, 0x0a, 0x10, 0x41, 0x70, - 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, - 0x0a, 0x1a, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x20, - 0x0a, 0x1c, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, - 0x12, 0x28, 0x0a, 0x24, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x54, - 0x4f, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x50, - 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x24, 0x0a, 0x20, - 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, - 0x10, 0x04, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, - 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, - 0x05, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x10, 0x06, - 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x49, 0x4e, 0x47, 0x10, - 0x07, 0x12, 0x27, 0x0a, 0x23, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x49, 0x4e, 0x47, 0x5f, - 0x54, 0x4f, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x08, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x50, - 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x09, 0x12, - 0x28, 0x0a, 0x24, 0x41, 0x50, 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x5f, - 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x0a, 0x12, 0x2f, 0x0a, 0x2b, 0x41, 0x50, 0x50, - 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, - 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0b, 0x12, 0x2e, 0x0a, 0x2a, 0x41, 0x50, - 0x50, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, 0x6b, 0x0a, 0x17, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x6f, 0x6c, - 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, - 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x27, - 0x0a, 0x23, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4c, 0x49, - 0x47, 0x48, 0x54, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x4d, 0x41, - 0x4e, 0x41, 0x47, 0x45, 0x52, 0x10, 0x01, 0x2a, 0xc2, 0x01, 0x0a, 0x15, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, - 0x5f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4c, 0x49, 0x45, 0x4e, - 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x32, 0x0a, 0x2e, - 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4c, 0x49, 0x47, 0x48, - 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x49, 0x4e, 0x47, - 0x5f, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, - 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x4c, 0x49, 0x47, 0x48, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x45, 0x49, - 0x4e, 0x47, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x98, 0x01, 0x0a, - 0x1a, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x25, 0x47, - 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x28, 0x0a, 0x24, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, - 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, - 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x52, 0x41, 0x4e, 0x43, 0x48, 0x10, 0x01, - 0x12, 0x25, 0x0a, 0x21, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, - 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x54, 0x41, 0x47, 0x10, 0x02, 0x2a, 0x98, 0x01, 0x0a, 0x1a, 0x47, 0x69, 0x74, 0x6c, - 0x61, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x25, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, - 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, - 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x28, 0x0a, 0x24, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x49, 0x4e, 0x54, 0x45, - 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x42, 0x52, 0x41, 0x4e, 0x43, 0x48, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x47, - 0x49, 0x54, 0x4c, 0x41, 0x42, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x41, 0x47, - 0x10, 0x02, 0x2a, 0xf6, 0x01, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, - 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, - 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x1e, 0x0a, 0x1a, 0x50, 0x52, 0x4f, 0x43, - 0x45, 0x53, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x42, - 0x41, 0x43, 0x4b, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x43, - 0x45, 0x53, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, - 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, - 0x53, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, - 0x44, 0x10, 0x05, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x12, 0x1b, - 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x07, 0x2a, 0x89, 0x02, 0x0a, 0x0d, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, - 0x16, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x52, 0x4f, - 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x45, 0x57, 0x10, - 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x19, - 0x0a, 0x15, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, 0x4f, - 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, - 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, - 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x1a, - 0x0a, 0x16, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x07, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, - 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, 0x41, - 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x2a, 0xf8, 0x02, 0x0a, 0x25, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x44, 0x6e, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x37, 0x0a, 0x33, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, - 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, - 0x44, 0x4e, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x37, 0x0a, 0x33, 0x50, 0x55, - 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, - 0x47, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x44, 0x4e, 0x53, 0x5f, 0x43, 0x48, 0x45, - 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, - 0x47, 0x10, 0x01, 0x12, 0x38, 0x0a, 0x34, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, - 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, - 0x4e, 0x5f, 0x44, 0x4e, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x32, 0x0a, - 0x2e, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, - 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x44, 0x4e, 0x53, 0x5f, - 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4f, 0x4b, 0x10, - 0x03, 0x12, 0x36, 0x0a, 0x32, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, - 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, - 0x44, 0x4e, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x37, 0x0a, 0x33, 0x50, 0x55, 0x42, - 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, - 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x44, 0x4e, 0x53, 0x5f, 0x43, 0x48, 0x45, 0x43, - 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x44, - 0x10, 0x05, 0x2a, 0xf0, 0x02, 0x0a, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, - 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x73, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x31, 0x0a, 0x2d, 0x50, 0x55, 0x42, 0x4c, 0x49, - 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, - 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x32, 0x0a, 0x2e, 0x50, 0x55, - 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, - 0x47, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x39, - 0x0a, 0x35, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, - 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x53, 0x53, 0x4c, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x45, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x4e, - 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x39, 0x0a, 0x35, 0x50, 0x55, 0x42, - 0x4c, 0x49, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, - 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x44, - 0x4e, 0x53, 0x10, 0x03, 0x12, 0x30, 0x0a, 0x2c, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x48, - 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x4d, 0x41, - 0x49, 0x4e, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, - 0x54, 0x49, 0x56, 0x45, 0x10, 0x04, 0x12, 0x3d, 0x0a, 0x39, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, - 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, - 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x53, 0x53, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x49, - 0x4c, 0x45, 0x44, 0x10, 0x05, 0x2a, 0x76, 0x0a, 0x13, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x50, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x1d, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x50, 0x52, 0x4f, - 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, - 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x74, 0x63, 0x70, 0x10, 0x01, 0x12, 0x1d, - 0x0a, 0x19, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x50, - 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x75, 0x64, 0x70, 0x10, 0x02, 0x2a, 0xac, 0x03, - 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, - 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, - 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x45, 0x5f, 0x74, 0x63, 0x70, 0x10, - 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, - 0x54, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x45, 0x5f, 0x75, 0x64, 0x70, 0x10, 0x02, 0x12, 0x1c, - 0x0a, 0x18, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, - 0x43, 0x48, 0x45, 0x4d, 0x45, 0x5f, 0x68, 0x74, 0x74, 0x70, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, 0x48, - 0x45, 0x4d, 0x45, 0x5f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x10, 0x04, 0x12, 0x1d, 0x0a, 0x19, 0x53, - 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, 0x48, 0x45, - 0x4d, 0x45, 0x5f, 0x72, 0x65, 0x64, 0x69, 0x73, 0x10, 0x05, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x4d, - 0x45, 0x5f, 0x6d, 0x79, 0x73, 0x71, 0x6c, 0x10, 0x07, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x45, 0x52, - 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x45, - 0x5f, 0x75, 0x64, 0x70, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x10, 0x08, 0x12, 0x1f, 0x0a, 0x1b, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, 0x48, - 0x45, 0x4d, 0x45, 0x5f, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x10, 0x09, 0x12, 0x22, 0x0a, - 0x1e, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, - 0x48, 0x45, 0x4d, 0x45, 0x5f, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x71, 0x6c, 0x10, - 0x0a, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, - 0x54, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x45, 0x5f, 0x61, 0x6d, 0x71, 0x70, 0x10, 0x0b, 0x12, - 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, - 0x53, 0x43, 0x48, 0x45, 0x4d, 0x45, 0x5f, 0x73, 0x74, 0x6f, 0x6d, 0x70, 0x10, 0x0c, 0x12, 0x1c, - 0x0a, 0x18, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, - 0x43, 0x48, 0x45, 0x4d, 0x45, 0x5f, 0x6d, 0x71, 0x74, 0x74, 0x10, 0x0d, 0x2a, 0xd3, 0x01, 0x0a, - 0x1c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2b, 0x0a, - 0x27, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, - 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x2c, 0x0a, 0x28, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, - 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x2a, 0x0a, 0x26, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, - 0x56, 0x45, 0x10, 0x02, 0x12, 0x2c, 0x0a, 0x28, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x03, 0x2a, 0x6c, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x41, 0x10, - 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x43, 0x4b, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x5f, 0x48, 0x41, 0x10, 0x02, - 0x2a, 0xdc, 0x0b, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x45, 0x52, - 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x4e, 0x45, 0x57, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x53, - 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x20, - 0x0a, 0x1c, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x05, - 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, - 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, - 0x47, 0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x54, - 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x52, 0x45, 0x4c, 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x21, 0x0a, 0x1d, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, - 0x20, 0x0a, 0x1c, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, - 0x0a, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, - 0x10, 0x0b, 0x12, 0x26, 0x0a, 0x22, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x1d, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x0d, 0x12, 0x28, - 0x0a, 0x24, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x54, 0x4f, 0x5f, - 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x10, 0x0e, 0x12, 0x29, 0x0a, 0x25, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, - 0x47, 0x10, 0x12, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x23, 0x12, 0x29, 0x0a, 0x25, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x4f, - 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x15, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, - 0x16, 0x12, 0x29, 0x0a, 0x25, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x17, 0x12, 0x2b, 0x0a, 0x27, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x53, - 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x18, 0x12, 0x2a, 0x0a, 0x26, 0x53, 0x45, 0x52, - 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x4f, 0x41, 0x44, - 0x49, 0x4e, 0x47, 0x10, 0x19, 0x12, 0x29, 0x0a, 0x25, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x0f, - 0x12, 0x28, 0x0a, 0x24, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, - 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, - 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x24, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, - 0x44, 0x10, 0x10, 0x12, 0x2e, 0x0a, 0x2a, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, - 0x44, 0x10, 0x1c, 0x12, 0x2a, 0x0a, 0x26, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x11, 0x12, - 0x31, 0x0a, 0x2d, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, - 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, - 0x10, 0x13, 0x12, 0x31, 0x0a, 0x2d, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x56, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, - 0x4e, 0x45, 0x52, 0x10, 0x14, 0x12, 0x2a, 0x0a, 0x26, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, - 0x1a, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, - 0x45, 0x5f, 0x53, 0x43, 0x41, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x25, 0x12, 0x2e, 0x0a, 0x2a, 0x53, - 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x41, - 0x49, 0x52, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x26, 0x12, 0x22, 0x0a, 0x1e, 0x53, - 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x50, 0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x1e, 0x12, - 0x29, 0x0a, 0x25, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, - 0x52, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x1f, 0x12, 0x29, 0x0a, 0x25, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x4d, 0x4f, 0x56, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, - 0x4e, 0x45, 0x52, 0x10, 0x20, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x43, - 0x41, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x21, 0x12, 0x26, 0x0a, 0x22, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x52, 0x45, 0x50, 0x41, 0x49, 0x52, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x22, 0x2a, - 0xcd, 0x03, 0x0a, 0x18, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x54, 0x79, 0x70, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x23, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, - 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0x01, 0x12, 0x30, 0x0a, 0x2c, 0x53, - 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, - 0x4c, 0x37, 0x5f, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x52, 0x10, 0x02, 0x12, 0x28, 0x0a, - 0x24, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, - 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10, 0x03, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, - 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x04, 0x12, 0x2e, 0x0a, - 0x2a, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x48, 0x41, - 0x52, 0x45, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x05, 0x12, 0x2e, 0x0a, - 0x2a, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x4f, 0x42, 0x4a, - 0x45, 0x43, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x06, 0x12, 0x25, 0x0a, - 0x21, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x42, 0x55, 0x49, - 0x4c, 0x44, 0x10, 0x07, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, - 0x4f, 0x52, 0x59, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x08, 0x12, 0x2f, - 0x0a, 0x2b, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x50, 0x52, - 0x45, 0x50, 0x41, 0x52, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x09, 0x2a, - 0x9a, 0x01, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1a, 0x0a, 0x16, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, - 0x45, 0x53, 0x54, 0x52, 0x49, 0x43, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x55, - 0x53, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, - 0x4d, 0x4d, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x03, 0x12, - 0x1b, 0x0a, 0x17, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x04, 0x2a, 0x72, 0x0a, 0x0f, - 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x1d, 0x0a, 0x19, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x56, 0x45, 0x52, - 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1a, - 0x0a, 0x16, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x56, 0x45, 0x52, 0x53, - 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x55, 0x53, - 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x49, 0x4e, 0x46, 0x52, 0x41, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, 0x10, 0x02, - 0x2a, 0xbd, 0x01, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x4a, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x55, 0x53, - 0x45, 0x52, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x10, 0x04, 0x12, 0x1e, - 0x0a, 0x1a, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x42, 0x4a, 0x45, - 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x02, 0x12, 0x20, - 0x0a, 0x1c, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x5f, 0x4f, 0x42, 0x4a, 0x45, - 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x10, 0x03, - 0x2a, 0x56, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, - 0x0a, 0x13, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, - 0x17, 0x0a, 0x13, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, - 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x02, 0x32, 0xdf, 0x13, 0x0a, 0x1a, 0x5a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x86, 0x01, 0x0a, 0x13, 0x50, 0x75, 0x74, 0x41, - 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, - 0x36, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, - 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, - 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x9e, 0x01, 0x0a, 0x1b, 0x50, 0x75, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x6e, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x12, 0x3e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, - 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x41, 0x6e, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3f, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, - 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x41, 0x6e, 0x64, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x77, 0x0a, 0x0e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0d, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x30, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, - 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, - 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x80, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, - 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, 0x0f, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x77, 0x0a, 0x0e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, - 0x70, 0x12, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, - 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, - 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x34, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x6f, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, - 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x15, 0x50, 0x6f, 0x73, - 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x12, 0x38, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x50, 0x6f, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x7a, - 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x48, 0x74, 0x74, 0x70, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x32, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, - 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, - 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x35, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x36, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x13, 0x50, 0x75, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x6f, - 0x70, 0x12, 0x36, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, - 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x14, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x37, 0x2e, 0x7a, 0x42, - 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, - 0x01, 0x0a, 0x16, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x39, 0x2e, 0x7a, 0x42, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x8c, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, - 0x6b, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x8f, 0x01, 0x0a, 0x16, 0x50, 0x6f, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x39, 0x2e, 0x7a, 0x42, 0x75, - 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x63, 0x6b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x2e, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2f, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, - 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x47, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x77, 0x0a, 0x0e, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x31, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, - 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x5a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x56, 0x70, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x43, 0x5a, 0x41, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x7a, 0x65, 0x72, 0x6f, 0x70, 0x73, 0x2d, - 0x69, 0x6f, 0x2f, 0x7a, 0x63, 0x6c, 0x69, 0x2f, 0x73, 0x72, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x7a, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5a, 0x65, - 0x72, 0x6f, 0x70, 0x73, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_zeropsApiProtocol_proto_rawDescOnce sync.Once - file_zeropsApiProtocol_proto_rawDescData = file_zeropsApiProtocol_proto_rawDesc -) - -func file_zeropsApiProtocol_proto_rawDescGZIP() []byte { - file_zeropsApiProtocol_proto_rawDescOnce.Do(func() { - file_zeropsApiProtocol_proto_rawDescData = protoimpl.X.CompressGZIP(file_zeropsApiProtocol_proto_rawDescData) - }) - return file_zeropsApiProtocol_proto_rawDescData -} - -var file_zeropsApiProtocol_proto_enumTypes = make([]protoimpl.EnumInfo, 23) -var file_zeropsApiProtocol_proto_msgTypes = make([]protoimpl.MessageInfo, 115) -var file_zeropsApiProtocol_proto_goTypes = []interface{}{ - (ErrorCode)(0), // 0: zBusinessZeropsApiProtocol.ErrorCode - (AppVersionGithubIntegrationEventType)(0), // 1: zBusinessZeropsApiProtocol.AppVersionGithubIntegrationEventType - (AppVersionGitlabIntegrationEventType)(0), // 2: zBusinessZeropsApiProtocol.AppVersionGitlabIntegrationEventType - (AppVersionSource)(0), // 3: zBusinessZeropsApiProtocol.AppVersionSource - (AppVersionStatus)(0), // 4: zBusinessZeropsApiProtocol.AppVersionStatus - (ClientUserLightRoleCode)(0), // 5: zBusinessZeropsApiProtocol.ClientUserLightRoleCode - (ClientUserLightStatus)(0), // 6: zBusinessZeropsApiProtocol.ClientUserLightStatus - (GithubIntegrationEventType)(0), // 7: zBusinessZeropsApiProtocol.GithubIntegrationEventType - (GitlabIntegrationEventType)(0), // 8: zBusinessZeropsApiProtocol.GitlabIntegrationEventType - (ProcessStatus)(0), // 9: zBusinessZeropsApiProtocol.ProcessStatus - (ProjectStatus)(0), // 10: zBusinessZeropsApiProtocol.ProjectStatus - (PublicHttpRoutingDomainDnsCheckStatus)(0), // 11: zBusinessZeropsApiProtocol.PublicHttpRoutingDomainDnsCheckStatus - (PublicHttpRoutingDomainSslStatus)(0), // 12: zBusinessZeropsApiProtocol.PublicHttpRoutingDomainSslStatus - (ServicePortProtocol)(0), // 13: zBusinessZeropsApiProtocol.ServicePortProtocol - (ServicePortScheme)(0), // 14: zBusinessZeropsApiProtocol.ServicePortScheme - (ServiceStackConnectionStatus)(0), // 15: zBusinessZeropsApiProtocol.ServiceStackConnectionStatus - (ServiceStackMode)(0), // 16: zBusinessZeropsApiProtocol.ServiceStackMode - (ServiceStackStatus)(0), // 17: zBusinessZeropsApiProtocol.ServiceStackStatus - (ServiceStackTypeCategory)(0), // 18: zBusinessZeropsApiProtocol.ServiceStackTypeCategory - (UserDataType)(0), // 19: zBusinessZeropsApiProtocol.UserDataType - (UserDataVersion)(0), // 20: zBusinessZeropsApiProtocol.UserDataVersion - (UserJsonObjectType)(0), // 21: zBusinessZeropsApiProtocol.UserJsonObjectType - (UserStatus)(0), // 22: zBusinessZeropsApiProtocol.UserStatus - (*Error)(nil), // 23: zBusinessZeropsApiProtocol.Error - (*ErrorNull)(nil), // 24: zBusinessZeropsApiProtocol.ErrorNull - (*Timestamp)(nil), // 25: zBusinessZeropsApiProtocol.Timestamp - (*DeleteProjectRequest)(nil), // 26: zBusinessZeropsApiProtocol.DeleteProjectRequest - (*DeleteServiceStackRequest)(nil), // 27: zBusinessZeropsApiProtocol.DeleteServiceStackRequest - (*GetProcessRequest)(nil), // 28: zBusinessZeropsApiProtocol.GetProcessRequest - (*GetProjectsByNameRequest)(nil), // 29: zBusinessZeropsApiProtocol.GetProjectsByNameRequest - (*GetServiceStackRequest)(nil), // 30: zBusinessZeropsApiProtocol.GetServiceStackRequest - (*GetServiceStackByNameRequest)(nil), // 31: zBusinessZeropsApiProtocol.GetServiceStackByNameRequest - (*GetUserInfoRequest)(nil), // 32: zBusinessZeropsApiProtocol.GetUserInfoRequest - (*PostAppVersionRequest)(nil), // 33: zBusinessZeropsApiProtocol.PostAppVersionRequest - (*PostProjectImportRequest)(nil), // 34: zBusinessZeropsApiProtocol.PostProjectImportRequest - (*PostPublicHttpRoutingRequest)(nil), // 35: zBusinessZeropsApiProtocol.PostPublicHttpRoutingRequest - (*PostServiceStackImportRequest)(nil), // 36: zBusinessZeropsApiProtocol.PostServiceStackImportRequest - (*PostVpnRequestRequest)(nil), // 37: zBusinessZeropsApiProtocol.PostVpnRequestRequest - (*PublicHttpRoutingLocationPost)(nil), // 38: zBusinessZeropsApiProtocol.PublicHttpRoutingLocationPost - (*PutAppVersionBuildAndDeployRequest)(nil), // 39: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployRequest - (*PutAppVersionDeployRequest)(nil), // 40: zBusinessZeropsApiProtocol.PutAppVersionDeployRequest - (*PutProjectStartRequest)(nil), // 41: zBusinessZeropsApiProtocol.PutProjectStartRequest - (*PutProjectStopRequest)(nil), // 42: zBusinessZeropsApiProtocol.PutProjectStopRequest - (*PutServiceStackRestartRequest)(nil), // 43: zBusinessZeropsApiProtocol.PutServiceStackRestartRequest - (*PutServiceStackStartRequest)(nil), // 44: zBusinessZeropsApiProtocol.PutServiceStackStartRequest - (*PutServiceStackStopRequest)(nil), // 45: zBusinessZeropsApiProtocol.PutServiceStackStopRequest - (*DeleteProjectResponse)(nil), // 46: zBusinessZeropsApiProtocol.DeleteProjectResponse - (*DeleteProjectResponseDto)(nil), // 47: zBusinessZeropsApiProtocol.DeleteProjectResponseDto - (*DeleteServiceStackResponse)(nil), // 48: zBusinessZeropsApiProtocol.DeleteServiceStackResponse - (*DeleteServiceStackResponseDto)(nil), // 49: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto - (*GetProcessResponse)(nil), // 50: zBusinessZeropsApiProtocol.GetProcessResponse - (*GetProcessResponseDto)(nil), // 51: zBusinessZeropsApiProtocol.GetProcessResponseDto - (*GetProjectsByNameResponse)(nil), // 52: zBusinessZeropsApiProtocol.GetProjectsByNameResponse - (*GetProjectsByNameResponseDto)(nil), // 53: zBusinessZeropsApiProtocol.GetProjectsByNameResponseDto - (*GetServiceStackResponse)(nil), // 54: zBusinessZeropsApiProtocol.GetServiceStackResponse - (*GetServiceStackResponseDto)(nil), // 55: zBusinessZeropsApiProtocol.GetServiceStackResponseDto - (*GetServiceStackByNameResponse)(nil), // 56: zBusinessZeropsApiProtocol.GetServiceStackByNameResponse - (*GetServiceStackByNameResponseDto)(nil), // 57: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto - (*GetUserInfoResponse)(nil), // 58: zBusinessZeropsApiProtocol.GetUserInfoResponse - (*GetUserInfoResponseDto)(nil), // 59: zBusinessZeropsApiProtocol.GetUserInfoResponseDto - (*PostAppVersionResponse)(nil), // 60: zBusinessZeropsApiProtocol.PostAppVersionResponse - (*PostAppVersionResponseDto)(nil), // 61: zBusinessZeropsApiProtocol.PostAppVersionResponseDto - (*PostProjectImportResponse)(nil), // 62: zBusinessZeropsApiProtocol.PostProjectImportResponse - (*PostProjectImportResponseDto)(nil), // 63: zBusinessZeropsApiProtocol.PostProjectImportResponseDto - (*PostPublicHttpRoutingResponse)(nil), // 64: zBusinessZeropsApiProtocol.PostPublicHttpRoutingResponse - (*PostPublicHttpRoutingResponseDto)(nil), // 65: zBusinessZeropsApiProtocol.PostPublicHttpRoutingResponseDto - (*PostServiceStackImportResponse)(nil), // 66: zBusinessZeropsApiProtocol.PostServiceStackImportResponse - (*PostServiceStackImportResponseDto)(nil), // 67: zBusinessZeropsApiProtocol.PostServiceStackImportResponseDto - (*PostVpnRequestResponse)(nil), // 68: zBusinessZeropsApiProtocol.PostVpnRequestResponse - (*PostVpnRequestResponseDto)(nil), // 69: zBusinessZeropsApiProtocol.PostVpnRequestResponseDto - (*PutAppVersionBuildAndDeployResponse)(nil), // 70: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponse - (*PutAppVersionBuildAndDeployResponseDto)(nil), // 71: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto - (*PutAppVersionDeployResponse)(nil), // 72: zBusinessZeropsApiProtocol.PutAppVersionDeployResponse - (*PutAppVersionDeployResponseDto)(nil), // 73: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto - (*PutProjectStartResponse)(nil), // 74: zBusinessZeropsApiProtocol.PutProjectStartResponse - (*PutProjectStartResponseDto)(nil), // 75: zBusinessZeropsApiProtocol.PutProjectStartResponseDto - (*PutProjectStopResponse)(nil), // 76: zBusinessZeropsApiProtocol.PutProjectStopResponse - (*PutProjectStopResponseDto)(nil), // 77: zBusinessZeropsApiProtocol.PutProjectStopResponseDto - (*PutServiceStackRestartResponse)(nil), // 78: zBusinessZeropsApiProtocol.PutServiceStackRestartResponse - (*PutServiceStackRestartResponseDto)(nil), // 79: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto - (*PutServiceStackStartResponse)(nil), // 80: zBusinessZeropsApiProtocol.PutServiceStackStartResponse - (*PutServiceStackStartResponseDto)(nil), // 81: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto - (*PutServiceStackStopResponse)(nil), // 82: zBusinessZeropsApiProtocol.PutServiceStackStopResponse - (*PutServiceStackStopResponseDto)(nil), // 83: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto - (*AppVersionBuild)(nil), // 84: zBusinessZeropsApiProtocol.AppVersionBuild - (*AppVersionGithubIntegration)(nil), // 85: zBusinessZeropsApiProtocol.AppVersionGithubIntegration - (*AppVersionGitlabIntegration)(nil), // 86: zBusinessZeropsApiProtocol.AppVersionGitlabIntegration - (*AppVersionJsonObject)(nil), // 87: zBusinessZeropsApiProtocol.AppVersionJsonObject - (*AppVersionLight)(nil), // 88: zBusinessZeropsApiProtocol.AppVersionLight - (*AppVersionPublicGitSource)(nil), // 89: zBusinessZeropsApiProtocol.AppVersionPublicGitSource - (*AppVersionUserData)(nil), // 90: zBusinessZeropsApiProtocol.AppVersionUserData - (*ClientAvatar)(nil), // 91: zBusinessZeropsApiProtocol.ClientAvatar - (*ClientExtra)(nil), // 92: zBusinessZeropsApiProtocol.ClientExtra - (*ClientUserExtra)(nil), // 93: zBusinessZeropsApiProtocol.ClientUserExtra - (*CustomAutoscaling)(nil), // 94: zBusinessZeropsApiProtocol.CustomAutoscaling - (*GithubIntegration)(nil), // 95: zBusinessZeropsApiProtocol.GithubIntegration - (*GitlabIntegration)(nil), // 96: zBusinessZeropsApiProtocol.GitlabIntegration - (*HorizontalAutoscaling)(nil), // 97: zBusinessZeropsApiProtocol.HorizontalAutoscaling - (*Language)(nil), // 98: zBusinessZeropsApiProtocol.Language - (*LocationServiceStackInfo)(nil), // 99: zBusinessZeropsApiProtocol.LocationServiceStackInfo - (*PrepareCustomRuntime)(nil), // 100: zBusinessZeropsApiProtocol.PrepareCustomRuntime - (*Process)(nil), // 101: zBusinessZeropsApiProtocol.Process - (*Project)(nil), // 102: zBusinessZeropsApiProtocol.Project - (*ProjectImportServiceStack)(nil), // 103: zBusinessZeropsApiProtocol.ProjectImportServiceStack - (*ProjectLight)(nil), // 104: zBusinessZeropsApiProtocol.ProjectLight - (*ProjectLightJsonObject)(nil), // 105: zBusinessZeropsApiProtocol.ProjectLightJsonObject - (*PublicHttpRoutingDomain)(nil), // 106: zBusinessZeropsApiProtocol.PublicHttpRoutingDomain - (*PublicHttpRoutingLocation)(nil), // 107: zBusinessZeropsApiProtocol.PublicHttpRoutingLocation - (*RequestedPortsJsonObject)(nil), // 108: zBusinessZeropsApiProtocol.RequestedPortsJsonObject - (*ScalingResource)(nil), // 109: zBusinessZeropsApiProtocol.ScalingResource - (*ServicePort)(nil), // 110: zBusinessZeropsApiProtocol.ServicePort - (*ServiceStackConnectedServiceStack)(nil), // 111: zBusinessZeropsApiProtocol.ServiceStackConnectedServiceStack - (*ServiceStackInfoJsonObject)(nil), // 112: zBusinessZeropsApiProtocol.ServiceStackInfoJsonObject - (*ServiceStackLight)(nil), // 113: zBusinessZeropsApiProtocol.ServiceStackLight - (*ServiceStackLightJsonObject)(nil), // 114: zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - (*UserAvatar)(nil), // 115: zBusinessZeropsApiProtocol.UserAvatar - (*UserDataLight)(nil), // 116: zBusinessZeropsApiProtocol.UserDataLight - (*UserJsonObject)(nil), // 117: zBusinessZeropsApiProtocol.UserJsonObject - (*UserLight)(nil), // 118: zBusinessZeropsApiProtocol.UserLight - (*VerticalAutoscaling)(nil), // 119: zBusinessZeropsApiProtocol.VerticalAutoscaling - (*AppVersionBuildNull)(nil), // 120: zBusinessZeropsApiProtocol.AppVersionBuildNull - (*AppVersionGithubIntegrationNull)(nil), // 121: zBusinessZeropsApiProtocol.AppVersionGithubIntegrationNull - (*AppVersionGitlabIntegrationNull)(nil), // 122: zBusinessZeropsApiProtocol.AppVersionGitlabIntegrationNull - (*AppVersionJsonObjectNull)(nil), // 123: zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - (*AppVersionLightNull)(nil), // 124: zBusinessZeropsApiProtocol.AppVersionLightNull - (*AppVersionPublicGitSourceNull)(nil), // 125: zBusinessZeropsApiProtocol.AppVersionPublicGitSourceNull - (*ClientAvatarNull)(nil), // 126: zBusinessZeropsApiProtocol.ClientAvatarNull - (*CustomAutoscalingNull)(nil), // 127: zBusinessZeropsApiProtocol.CustomAutoscalingNull - (*GithubIntegrationNull)(nil), // 128: zBusinessZeropsApiProtocol.GithubIntegrationNull - (*GitlabIntegrationNull)(nil), // 129: zBusinessZeropsApiProtocol.GitlabIntegrationNull - (*HorizontalAutoscalingNull)(nil), // 130: zBusinessZeropsApiProtocol.HorizontalAutoscalingNull - (*Int32Null)(nil), // 131: zBusinessZeropsApiProtocol.Int32Null - (*PrepareCustomRuntimeNull)(nil), // 132: zBusinessZeropsApiProtocol.PrepareCustomRuntimeNull - (*StringNull)(nil), // 133: zBusinessZeropsApiProtocol.StringNull - (*TimestampNull)(nil), // 134: zBusinessZeropsApiProtocol.TimestampNull - (*UserAvatarNull)(nil), // 135: zBusinessZeropsApiProtocol.UserAvatarNull - (*UserJsonObjectNull)(nil), // 136: zBusinessZeropsApiProtocol.UserJsonObjectNull - (*VerticalAutoscalingNull)(nil), // 137: zBusinessZeropsApiProtocol.VerticalAutoscalingNull -} -var file_zeropsApiProtocol_proto_depIdxs = []int32{ - 0, // 0: zBusinessZeropsApiProtocol.Error.code:type_name -> zBusinessZeropsApiProtocol.ErrorCode - 23, // 1: zBusinessZeropsApiProtocol.ErrorNull.value:type_name -> zBusinessZeropsApiProtocol.Error - 133, // 2: zBusinessZeropsApiProtocol.PostAppVersionRequest.name:type_name -> zBusinessZeropsApiProtocol.StringNull - 38, // 3: zBusinessZeropsApiProtocol.PostPublicHttpRoutingRequest.locations:type_name -> zBusinessZeropsApiProtocol.PublicHttpRoutingLocationPost - 133, // 4: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployRequest.source:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 5: zBusinessZeropsApiProtocol.PutAppVersionDeployRequest.configContent:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 6: zBusinessZeropsApiProtocol.PutAppVersionDeployRequest.source:type_name -> zBusinessZeropsApiProtocol.StringNull - 23, // 7: zBusinessZeropsApiProtocol.DeleteProjectResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 47, // 8: zBusinessZeropsApiProtocol.DeleteProjectResponse.output:type_name -> zBusinessZeropsApiProtocol.DeleteProjectResponseDto - 133, // 9: zBusinessZeropsApiProtocol.DeleteProjectResponseDto.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 105, // 10: zBusinessZeropsApiProtocol.DeleteProjectResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLightJsonObject - 114, // 11: zBusinessZeropsApiProtocol.DeleteProjectResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - 9, // 12: zBusinessZeropsApiProtocol.DeleteProjectResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ProcessStatus - 117, // 13: zBusinessZeropsApiProtocol.DeleteProjectResponseDto.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 136, // 14: zBusinessZeropsApiProtocol.DeleteProjectResponseDto.canceledByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 25, // 15: zBusinessZeropsApiProtocol.DeleteProjectResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 16: zBusinessZeropsApiProtocol.DeleteProjectResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 134, // 17: zBusinessZeropsApiProtocol.DeleteProjectResponseDto.started:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 18: zBusinessZeropsApiProtocol.DeleteProjectResponseDto.finished:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 123, // 19: zBusinessZeropsApiProtocol.DeleteProjectResponseDto.appVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - 23, // 20: zBusinessZeropsApiProtocol.DeleteServiceStackResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 49, // 21: zBusinessZeropsApiProtocol.DeleteServiceStackResponse.output:type_name -> zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto - 133, // 22: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 105, // 23: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLightJsonObject - 114, // 24: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - 9, // 25: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ProcessStatus - 117, // 26: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 136, // 27: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto.canceledByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 25, // 28: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 29: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 134, // 30: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto.started:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 31: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto.finished:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 123, // 32: zBusinessZeropsApiProtocol.DeleteServiceStackResponseDto.appVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - 23, // 33: zBusinessZeropsApiProtocol.GetProcessResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 51, // 34: zBusinessZeropsApiProtocol.GetProcessResponse.output:type_name -> zBusinessZeropsApiProtocol.GetProcessResponseDto - 133, // 35: zBusinessZeropsApiProtocol.GetProcessResponseDto.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 105, // 36: zBusinessZeropsApiProtocol.GetProcessResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLightJsonObject - 114, // 37: zBusinessZeropsApiProtocol.GetProcessResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - 9, // 38: zBusinessZeropsApiProtocol.GetProcessResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ProcessStatus - 117, // 39: zBusinessZeropsApiProtocol.GetProcessResponseDto.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 136, // 40: zBusinessZeropsApiProtocol.GetProcessResponseDto.canceledByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 25, // 41: zBusinessZeropsApiProtocol.GetProcessResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 42: zBusinessZeropsApiProtocol.GetProcessResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 134, // 43: zBusinessZeropsApiProtocol.GetProcessResponseDto.started:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 44: zBusinessZeropsApiProtocol.GetProcessResponseDto.finished:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 123, // 45: zBusinessZeropsApiProtocol.GetProcessResponseDto.appVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - 23, // 46: zBusinessZeropsApiProtocol.GetProjectsByNameResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 53, // 47: zBusinessZeropsApiProtocol.GetProjectsByNameResponse.output:type_name -> zBusinessZeropsApiProtocol.GetProjectsByNameResponseDto - 102, // 48: zBusinessZeropsApiProtocol.GetProjectsByNameResponseDto.projects:type_name -> zBusinessZeropsApiProtocol.Project - 23, // 49: zBusinessZeropsApiProtocol.GetServiceStackResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 55, // 50: zBusinessZeropsApiProtocol.GetServiceStackResponse.output:type_name -> zBusinessZeropsApiProtocol.GetServiceStackResponseDto - 17, // 51: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ServiceStackStatus - 112, // 52: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.serviceStackTypeInfo:type_name -> zBusinessZeropsApiProtocol.ServiceStackInfoJsonObject - 128, // 53: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.githubIntegration:type_name -> zBusinessZeropsApiProtocol.GithubIntegrationNull - 129, // 54: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.gitlabIntegration:type_name -> zBusinessZeropsApiProtocol.GitlabIntegrationNull - 127, // 55: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.customAutoscaling:type_name -> zBusinessZeropsApiProtocol.CustomAutoscalingNull - 110, // 56: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.ports:type_name -> zBusinessZeropsApiProtocol.ServicePort - 108, // 57: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.requestedPorts:type_name -> zBusinessZeropsApiProtocol.RequestedPortsJsonObject - 25, // 58: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 59: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 16, // 60: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.mode:type_name -> zBusinessZeropsApiProtocol.ServiceStackMode - 104, // 61: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLight - 111, // 62: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.connectedStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackConnectedServiceStack - 116, // 63: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.userData:type_name -> zBusinessZeropsApiProtocol.UserDataLight - 124, // 64: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.activeAppVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionLightNull - 131, // 65: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.activePublicHttpRoutingCount:type_name -> zBusinessZeropsApiProtocol.Int32Null - 131, // 66: zBusinessZeropsApiProtocol.GetServiceStackResponseDto.activePublicPortRoutingCount:type_name -> zBusinessZeropsApiProtocol.Int32Null - 23, // 67: zBusinessZeropsApiProtocol.GetServiceStackByNameResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 57, // 68: zBusinessZeropsApiProtocol.GetServiceStackByNameResponse.output:type_name -> zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto - 17, // 69: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ServiceStackStatus - 112, // 70: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.serviceStackTypeInfo:type_name -> zBusinessZeropsApiProtocol.ServiceStackInfoJsonObject - 128, // 71: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.githubIntegration:type_name -> zBusinessZeropsApiProtocol.GithubIntegrationNull - 129, // 72: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.gitlabIntegration:type_name -> zBusinessZeropsApiProtocol.GitlabIntegrationNull - 127, // 73: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.customAutoscaling:type_name -> zBusinessZeropsApiProtocol.CustomAutoscalingNull - 110, // 74: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.ports:type_name -> zBusinessZeropsApiProtocol.ServicePort - 108, // 75: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.requestedPorts:type_name -> zBusinessZeropsApiProtocol.RequestedPortsJsonObject - 25, // 76: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 77: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 16, // 78: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.mode:type_name -> zBusinessZeropsApiProtocol.ServiceStackMode - 104, // 79: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLight - 111, // 80: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.connectedStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackConnectedServiceStack - 116, // 81: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.userData:type_name -> zBusinessZeropsApiProtocol.UserDataLight - 124, // 82: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.activeAppVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionLightNull - 131, // 83: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.activePublicHttpRoutingCount:type_name -> zBusinessZeropsApiProtocol.Int32Null - 131, // 84: zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto.activePublicPortRoutingCount:type_name -> zBusinessZeropsApiProtocol.Int32Null - 23, // 85: zBusinessZeropsApiProtocol.GetUserInfoResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 59, // 86: zBusinessZeropsApiProtocol.GetUserInfoResponse.output:type_name -> zBusinessZeropsApiProtocol.GetUserInfoResponseDto - 135, // 87: zBusinessZeropsApiProtocol.GetUserInfoResponseDto.avatar:type_name -> zBusinessZeropsApiProtocol.UserAvatarNull - 131, // 88: zBusinessZeropsApiProtocol.GetUserInfoResponseDto.countryCallingCode:type_name -> zBusinessZeropsApiProtocol.Int32Null - 131, // 89: zBusinessZeropsApiProtocol.GetUserInfoResponseDto.phoneNumber:type_name -> zBusinessZeropsApiProtocol.Int32Null - 98, // 90: zBusinessZeropsApiProtocol.GetUserInfoResponseDto.language:type_name -> zBusinessZeropsApiProtocol.Language - 25, // 91: zBusinessZeropsApiProtocol.GetUserInfoResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 92: zBusinessZeropsApiProtocol.GetUserInfoResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 22, // 93: zBusinessZeropsApiProtocol.GetUserInfoResponseDto.status:type_name -> zBusinessZeropsApiProtocol.UserStatus - 93, // 94: zBusinessZeropsApiProtocol.GetUserInfoResponseDto.clientUserList:type_name -> zBusinessZeropsApiProtocol.ClientUserExtra - 23, // 95: zBusinessZeropsApiProtocol.PostAppVersionResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 61, // 96: zBusinessZeropsApiProtocol.PostAppVersionResponse.output:type_name -> zBusinessZeropsApiProtocol.PostAppVersionResponseDto - 120, // 97: zBusinessZeropsApiProtocol.PostAppVersionResponseDto.build:type_name -> zBusinessZeropsApiProtocol.AppVersionBuildNull - 4, // 98: zBusinessZeropsApiProtocol.PostAppVersionResponseDto.status:type_name -> zBusinessZeropsApiProtocol.AppVersionStatus - 90, // 99: zBusinessZeropsApiProtocol.PostAppVersionResponseDto.userDataList:type_name -> zBusinessZeropsApiProtocol.AppVersionUserData - 25, // 100: zBusinessZeropsApiProtocol.PostAppVersionResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 101: zBusinessZeropsApiProtocol.PostAppVersionResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 23, // 102: zBusinessZeropsApiProtocol.PostProjectImportResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 63, // 103: zBusinessZeropsApiProtocol.PostProjectImportResponse.output:type_name -> zBusinessZeropsApiProtocol.PostProjectImportResponseDto - 103, // 104: zBusinessZeropsApiProtocol.PostProjectImportResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ProjectImportServiceStack - 23, // 105: zBusinessZeropsApiProtocol.PostPublicHttpRoutingResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 65, // 106: zBusinessZeropsApiProtocol.PostPublicHttpRoutingResponse.output:type_name -> zBusinessZeropsApiProtocol.PostPublicHttpRoutingResponseDto - 106, // 107: zBusinessZeropsApiProtocol.PostPublicHttpRoutingResponseDto.domains:type_name -> zBusinessZeropsApiProtocol.PublicHttpRoutingDomain - 107, // 108: zBusinessZeropsApiProtocol.PostPublicHttpRoutingResponseDto.locations:type_name -> zBusinessZeropsApiProtocol.PublicHttpRoutingLocation - 25, // 109: zBusinessZeropsApiProtocol.PostPublicHttpRoutingResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 110: zBusinessZeropsApiProtocol.PostPublicHttpRoutingResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 23, // 111: zBusinessZeropsApiProtocol.PostServiceStackImportResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 67, // 112: zBusinessZeropsApiProtocol.PostServiceStackImportResponse.output:type_name -> zBusinessZeropsApiProtocol.PostServiceStackImportResponseDto - 103, // 113: zBusinessZeropsApiProtocol.PostServiceStackImportResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ProjectImportServiceStack - 23, // 114: zBusinessZeropsApiProtocol.PostVpnRequestResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 69, // 115: zBusinessZeropsApiProtocol.PostVpnRequestResponse.output:type_name -> zBusinessZeropsApiProtocol.PostVpnRequestResponseDto - 25, // 116: zBusinessZeropsApiProtocol.PostVpnRequestResponseDto.expiry:type_name -> zBusinessZeropsApiProtocol.Timestamp - 23, // 117: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 71, // 118: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponse.output:type_name -> zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto - 133, // 119: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 105, // 120: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLightJsonObject - 114, // 121: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - 9, // 122: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ProcessStatus - 117, // 123: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 136, // 124: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto.canceledByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 25, // 125: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 126: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 134, // 127: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto.started:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 128: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto.finished:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 123, // 129: zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponseDto.appVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - 23, // 130: zBusinessZeropsApiProtocol.PutAppVersionDeployResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 73, // 131: zBusinessZeropsApiProtocol.PutAppVersionDeployResponse.output:type_name -> zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto - 133, // 132: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 105, // 133: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLightJsonObject - 114, // 134: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - 9, // 135: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ProcessStatus - 117, // 136: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 136, // 137: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto.canceledByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 25, // 138: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 139: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 134, // 140: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto.started:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 141: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto.finished:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 123, // 142: zBusinessZeropsApiProtocol.PutAppVersionDeployResponseDto.appVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - 23, // 143: zBusinessZeropsApiProtocol.PutProjectStartResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 75, // 144: zBusinessZeropsApiProtocol.PutProjectStartResponse.output:type_name -> zBusinessZeropsApiProtocol.PutProjectStartResponseDto - 133, // 145: zBusinessZeropsApiProtocol.PutProjectStartResponseDto.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 105, // 146: zBusinessZeropsApiProtocol.PutProjectStartResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLightJsonObject - 114, // 147: zBusinessZeropsApiProtocol.PutProjectStartResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - 9, // 148: zBusinessZeropsApiProtocol.PutProjectStartResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ProcessStatus - 117, // 149: zBusinessZeropsApiProtocol.PutProjectStartResponseDto.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 136, // 150: zBusinessZeropsApiProtocol.PutProjectStartResponseDto.canceledByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 25, // 151: zBusinessZeropsApiProtocol.PutProjectStartResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 152: zBusinessZeropsApiProtocol.PutProjectStartResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 134, // 153: zBusinessZeropsApiProtocol.PutProjectStartResponseDto.started:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 154: zBusinessZeropsApiProtocol.PutProjectStartResponseDto.finished:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 123, // 155: zBusinessZeropsApiProtocol.PutProjectStartResponseDto.appVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - 23, // 156: zBusinessZeropsApiProtocol.PutProjectStopResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 77, // 157: zBusinessZeropsApiProtocol.PutProjectStopResponse.output:type_name -> zBusinessZeropsApiProtocol.PutProjectStopResponseDto - 133, // 158: zBusinessZeropsApiProtocol.PutProjectStopResponseDto.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 105, // 159: zBusinessZeropsApiProtocol.PutProjectStopResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLightJsonObject - 114, // 160: zBusinessZeropsApiProtocol.PutProjectStopResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - 9, // 161: zBusinessZeropsApiProtocol.PutProjectStopResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ProcessStatus - 117, // 162: zBusinessZeropsApiProtocol.PutProjectStopResponseDto.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 136, // 163: zBusinessZeropsApiProtocol.PutProjectStopResponseDto.canceledByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 25, // 164: zBusinessZeropsApiProtocol.PutProjectStopResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 165: zBusinessZeropsApiProtocol.PutProjectStopResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 134, // 166: zBusinessZeropsApiProtocol.PutProjectStopResponseDto.started:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 167: zBusinessZeropsApiProtocol.PutProjectStopResponseDto.finished:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 123, // 168: zBusinessZeropsApiProtocol.PutProjectStopResponseDto.appVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - 23, // 169: zBusinessZeropsApiProtocol.PutServiceStackRestartResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 79, // 170: zBusinessZeropsApiProtocol.PutServiceStackRestartResponse.output:type_name -> zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto - 133, // 171: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 105, // 172: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLightJsonObject - 114, // 173: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - 9, // 174: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ProcessStatus - 117, // 175: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 136, // 176: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto.canceledByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 25, // 177: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 178: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 134, // 179: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto.started:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 180: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto.finished:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 123, // 181: zBusinessZeropsApiProtocol.PutServiceStackRestartResponseDto.appVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - 23, // 182: zBusinessZeropsApiProtocol.PutServiceStackStartResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 81, // 183: zBusinessZeropsApiProtocol.PutServiceStackStartResponse.output:type_name -> zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto - 133, // 184: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 105, // 185: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLightJsonObject - 114, // 186: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - 9, // 187: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ProcessStatus - 117, // 188: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 136, // 189: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto.canceledByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 25, // 190: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 191: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 134, // 192: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto.started:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 193: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto.finished:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 123, // 194: zBusinessZeropsApiProtocol.PutServiceStackStartResponseDto.appVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - 23, // 195: zBusinessZeropsApiProtocol.PutServiceStackStopResponse.error:type_name -> zBusinessZeropsApiProtocol.Error - 83, // 196: zBusinessZeropsApiProtocol.PutServiceStackStopResponse.output:type_name -> zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto - 133, // 197: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 105, // 198: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto.project:type_name -> zBusinessZeropsApiProtocol.ProjectLightJsonObject - 114, // 199: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - 9, // 200: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto.status:type_name -> zBusinessZeropsApiProtocol.ProcessStatus - 117, // 201: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 136, // 202: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto.canceledByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 25, // 203: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 204: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 134, // 205: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto.started:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 206: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto.finished:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 123, // 207: zBusinessZeropsApiProtocol.PutServiceStackStopResponseDto.appVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - 133, // 208: zBusinessZeropsApiProtocol.AppVersionBuild.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 209: zBusinessZeropsApiProtocol.AppVersionBuild.serviceStackName:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 210: zBusinessZeropsApiProtocol.AppVersionBuild.serviceStackTypeVersionId:type_name -> zBusinessZeropsApiProtocol.StringNull - 134, // 211: zBusinessZeropsApiProtocol.AppVersionBuild.pipelineStart:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 212: zBusinessZeropsApiProtocol.AppVersionBuild.pipelineFinish:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 213: zBusinessZeropsApiProtocol.AppVersionBuild.pipelineFailed:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 214: zBusinessZeropsApiProtocol.AppVersionBuild.containerCreationStart:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 215: zBusinessZeropsApiProtocol.AppVersionBuild.startDate:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 216: zBusinessZeropsApiProtocol.AppVersionBuild.endDate:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 1, // 217: zBusinessZeropsApiProtocol.AppVersionGithubIntegration.eventType:type_name -> zBusinessZeropsApiProtocol.AppVersionGithubIntegrationEventType - 133, // 218: zBusinessZeropsApiProtocol.AppVersionGithubIntegration.branchName:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 219: zBusinessZeropsApiProtocol.AppVersionGithubIntegration.tagName:type_name -> zBusinessZeropsApiProtocol.StringNull - 2, // 220: zBusinessZeropsApiProtocol.AppVersionGitlabIntegration.eventType:type_name -> zBusinessZeropsApiProtocol.AppVersionGitlabIntegrationEventType - 133, // 221: zBusinessZeropsApiProtocol.AppVersionGitlabIntegration.branchName:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 222: zBusinessZeropsApiProtocol.AppVersionGitlabIntegration.tagName:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 223: zBusinessZeropsApiProtocol.AppVersionJsonObject.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 224: zBusinessZeropsApiProtocol.AppVersionJsonObject.projectId:type_name -> zBusinessZeropsApiProtocol.StringNull - 4, // 225: zBusinessZeropsApiProtocol.AppVersionJsonObject.status:type_name -> zBusinessZeropsApiProtocol.AppVersionStatus - 3, // 226: zBusinessZeropsApiProtocol.AppVersionJsonObject.source:type_name -> zBusinessZeropsApiProtocol.AppVersionSource - 133, // 227: zBusinessZeropsApiProtocol.AppVersionJsonObject.name:type_name -> zBusinessZeropsApiProtocol.StringNull - 134, // 228: zBusinessZeropsApiProtocol.AppVersionJsonObject.created:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 120, // 229: zBusinessZeropsApiProtocol.AppVersionJsonObject.build:type_name -> zBusinessZeropsApiProtocol.AppVersionBuildNull - 132, // 230: zBusinessZeropsApiProtocol.AppVersionJsonObject.prepareCustomRuntime:type_name -> zBusinessZeropsApiProtocol.PrepareCustomRuntimeNull - 121, // 231: zBusinessZeropsApiProtocol.AppVersionJsonObject.githubIntegration:type_name -> zBusinessZeropsApiProtocol.AppVersionGithubIntegrationNull - 122, // 232: zBusinessZeropsApiProtocol.AppVersionJsonObject.gitlabIntegration:type_name -> zBusinessZeropsApiProtocol.AppVersionGitlabIntegrationNull - 136, // 233: zBusinessZeropsApiProtocol.AppVersionJsonObject.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 134, // 234: zBusinessZeropsApiProtocol.AppVersionJsonObject.activationDate:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 125, // 235: zBusinessZeropsApiProtocol.AppVersionJsonObject.publicGitSource:type_name -> zBusinessZeropsApiProtocol.AppVersionPublicGitSourceNull - 133, // 236: zBusinessZeropsApiProtocol.AppVersionJsonObject.configContent:type_name -> zBusinessZeropsApiProtocol.StringNull - 4, // 237: zBusinessZeropsApiProtocol.AppVersionLight.status:type_name -> zBusinessZeropsApiProtocol.AppVersionStatus - 25, // 238: zBusinessZeropsApiProtocol.AppVersionLight.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 239: zBusinessZeropsApiProtocol.AppVersionLight.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 19, // 240: zBusinessZeropsApiProtocol.AppVersionUserData.type:type_name -> zBusinessZeropsApiProtocol.UserDataType - 133, // 241: zBusinessZeropsApiProtocol.ClientAvatar.largeAvatarUrl:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 242: zBusinessZeropsApiProtocol.ClientAvatar.smallAvatarUrl:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 243: zBusinessZeropsApiProtocol.ClientAvatar.externalAvatarUrl:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 244: zBusinessZeropsApiProtocol.ClientExtra.companyNumber:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 245: zBusinessZeropsApiProtocol.ClientExtra.vatNumber:type_name -> zBusinessZeropsApiProtocol.StringNull - 126, // 246: zBusinessZeropsApiProtocol.ClientExtra.avatar:type_name -> zBusinessZeropsApiProtocol.ClientAvatarNull - 6, // 247: zBusinessZeropsApiProtocol.ClientUserExtra.status:type_name -> zBusinessZeropsApiProtocol.ClientUserLightStatus - 5, // 248: zBusinessZeropsApiProtocol.ClientUserExtra.roleCode:type_name -> zBusinessZeropsApiProtocol.ClientUserLightRoleCode - 92, // 249: zBusinessZeropsApiProtocol.ClientUserExtra.client:type_name -> zBusinessZeropsApiProtocol.ClientExtra - 118, // 250: zBusinessZeropsApiProtocol.ClientUserExtra.user:type_name -> zBusinessZeropsApiProtocol.UserLight - 137, // 251: zBusinessZeropsApiProtocol.CustomAutoscaling.verticalAutoscaling:type_name -> zBusinessZeropsApiProtocol.VerticalAutoscalingNull - 130, // 252: zBusinessZeropsApiProtocol.CustomAutoscaling.horizontalAutoscaling:type_name -> zBusinessZeropsApiProtocol.HorizontalAutoscalingNull - 133, // 253: zBusinessZeropsApiProtocol.GithubIntegration.branchName:type_name -> zBusinessZeropsApiProtocol.StringNull - 7, // 254: zBusinessZeropsApiProtocol.GithubIntegration.eventType:type_name -> zBusinessZeropsApiProtocol.GithubIntegrationEventType - 131, // 255: zBusinessZeropsApiProtocol.GithubIntegration.webhookId:type_name -> zBusinessZeropsApiProtocol.Int32Null - 133, // 256: zBusinessZeropsApiProtocol.GitlabIntegration.branchName:type_name -> zBusinessZeropsApiProtocol.StringNull - 8, // 257: zBusinessZeropsApiProtocol.GitlabIntegration.eventType:type_name -> zBusinessZeropsApiProtocol.GitlabIntegrationEventType - 131, // 258: zBusinessZeropsApiProtocol.GitlabIntegration.webhookId:type_name -> zBusinessZeropsApiProtocol.Int32Null - 134, // 259: zBusinessZeropsApiProtocol.PrepareCustomRuntime.containerCreationStart:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 260: zBusinessZeropsApiProtocol.PrepareCustomRuntime.startDate:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 261: zBusinessZeropsApiProtocol.PrepareCustomRuntime.endDate:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 133, // 262: zBusinessZeropsApiProtocol.PrepareCustomRuntime.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 263: zBusinessZeropsApiProtocol.PrepareCustomRuntime.serviceStackName:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 264: zBusinessZeropsApiProtocol.Process.serviceStackId:type_name -> zBusinessZeropsApiProtocol.StringNull - 105, // 265: zBusinessZeropsApiProtocol.Process.project:type_name -> zBusinessZeropsApiProtocol.ProjectLightJsonObject - 114, // 266: zBusinessZeropsApiProtocol.Process.serviceStacks:type_name -> zBusinessZeropsApiProtocol.ServiceStackLightJsonObject - 9, // 267: zBusinessZeropsApiProtocol.Process.status:type_name -> zBusinessZeropsApiProtocol.ProcessStatus - 117, // 268: zBusinessZeropsApiProtocol.Process.createdByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 136, // 269: zBusinessZeropsApiProtocol.Process.canceledByUser:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectNull - 25, // 270: zBusinessZeropsApiProtocol.Process.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 271: zBusinessZeropsApiProtocol.Process.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 134, // 272: zBusinessZeropsApiProtocol.Process.started:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 134, // 273: zBusinessZeropsApiProtocol.Process.finished:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 123, // 274: zBusinessZeropsApiProtocol.Process.appVersion:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObjectNull - 133, // 275: zBusinessZeropsApiProtocol.Project.description:type_name -> zBusinessZeropsApiProtocol.StringNull - 10, // 276: zBusinessZeropsApiProtocol.Project.status:type_name -> zBusinessZeropsApiProtocol.ProjectStatus - 25, // 277: zBusinessZeropsApiProtocol.Project.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 278: zBusinessZeropsApiProtocol.Project.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 133, // 279: zBusinessZeropsApiProtocol.Project.publicIpV4:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 280: zBusinessZeropsApiProtocol.Project.publicIpV6:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 281: zBusinessZeropsApiProtocol.Project.zeropsSubdomainHost:type_name -> zBusinessZeropsApiProtocol.StringNull - 24, // 282: zBusinessZeropsApiProtocol.ProjectImportServiceStack.error:type_name -> zBusinessZeropsApiProtocol.ErrorNull - 101, // 283: zBusinessZeropsApiProtocol.ProjectImportServiceStack.processes:type_name -> zBusinessZeropsApiProtocol.Process - 133, // 284: zBusinessZeropsApiProtocol.ProjectLight.description:type_name -> zBusinessZeropsApiProtocol.StringNull - 10, // 285: zBusinessZeropsApiProtocol.ProjectLight.status:type_name -> zBusinessZeropsApiProtocol.ProjectStatus - 25, // 286: zBusinessZeropsApiProtocol.ProjectLight.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 287: zBusinessZeropsApiProtocol.ProjectLight.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 133, // 288: zBusinessZeropsApiProtocol.ProjectLightJsonObject.description:type_name -> zBusinessZeropsApiProtocol.StringNull - 10, // 289: zBusinessZeropsApiProtocol.ProjectLightJsonObject.status:type_name -> zBusinessZeropsApiProtocol.ProjectStatus - 25, // 290: zBusinessZeropsApiProtocol.ProjectLightJsonObject.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 291: zBusinessZeropsApiProtocol.ProjectLightJsonObject.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 11, // 292: zBusinessZeropsApiProtocol.PublicHttpRoutingDomain.dnsCheckStatus:type_name -> zBusinessZeropsApiProtocol.PublicHttpRoutingDomainDnsCheckStatus - 12, // 293: zBusinessZeropsApiProtocol.PublicHttpRoutingDomain.sslStatus:type_name -> zBusinessZeropsApiProtocol.PublicHttpRoutingDomainSslStatus - 99, // 294: zBusinessZeropsApiProtocol.PublicHttpRoutingLocation.serviceStackInfo:type_name -> zBusinessZeropsApiProtocol.LocationServiceStackInfo - 110, // 295: zBusinessZeropsApiProtocol.RequestedPortsJsonObject.requestedPorts:type_name -> zBusinessZeropsApiProtocol.ServicePort - 13, // 296: zBusinessZeropsApiProtocol.ServicePort.protocol:type_name -> zBusinessZeropsApiProtocol.ServicePortProtocol - 14, // 297: zBusinessZeropsApiProtocol.ServicePort.scheme:type_name -> zBusinessZeropsApiProtocol.ServicePortScheme - 133, // 298: zBusinessZeropsApiProtocol.ServicePort.serviceId:type_name -> zBusinessZeropsApiProtocol.StringNull - 113, // 299: zBusinessZeropsApiProtocol.ServiceStackConnectedServiceStack.serviceStack:type_name -> zBusinessZeropsApiProtocol.ServiceStackLight - 15, // 300: zBusinessZeropsApiProtocol.ServiceStackConnectedServiceStack.status:type_name -> zBusinessZeropsApiProtocol.ServiceStackConnectionStatus - 18, // 301: zBusinessZeropsApiProtocol.ServiceStackInfoJsonObject.serviceStackTypeCategory:type_name -> zBusinessZeropsApiProtocol.ServiceStackTypeCategory - 17, // 302: zBusinessZeropsApiProtocol.ServiceStackLight.status:type_name -> zBusinessZeropsApiProtocol.ServiceStackStatus - 112, // 303: zBusinessZeropsApiProtocol.ServiceStackLight.serviceStackTypeInfo:type_name -> zBusinessZeropsApiProtocol.ServiceStackInfoJsonObject - 128, // 304: zBusinessZeropsApiProtocol.ServiceStackLight.githubIntegration:type_name -> zBusinessZeropsApiProtocol.GithubIntegrationNull - 129, // 305: zBusinessZeropsApiProtocol.ServiceStackLight.gitlabIntegration:type_name -> zBusinessZeropsApiProtocol.GitlabIntegrationNull - 127, // 306: zBusinessZeropsApiProtocol.ServiceStackLight.customAutoscaling:type_name -> zBusinessZeropsApiProtocol.CustomAutoscalingNull - 25, // 307: zBusinessZeropsApiProtocol.ServiceStackLightJsonObject.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 308: zBusinessZeropsApiProtocol.ServiceStackLightJsonObject.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 133, // 309: zBusinessZeropsApiProtocol.ServiceStackLightJsonObject.driverId:type_name -> zBusinessZeropsApiProtocol.StringNull - 112, // 310: zBusinessZeropsApiProtocol.ServiceStackLightJsonObject.serviceStackTypeInfo:type_name -> zBusinessZeropsApiProtocol.ServiceStackInfoJsonObject - 110, // 311: zBusinessZeropsApiProtocol.ServiceStackLightJsonObject.ports:type_name -> zBusinessZeropsApiProtocol.ServicePort - 133, // 312: zBusinessZeropsApiProtocol.UserAvatar.largeAvatarUrl:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 313: zBusinessZeropsApiProtocol.UserAvatar.smallAvatarUrl:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 314: zBusinessZeropsApiProtocol.UserAvatar.externalAvatarUrl:type_name -> zBusinessZeropsApiProtocol.StringNull - 19, // 315: zBusinessZeropsApiProtocol.UserDataLight.type:type_name -> zBusinessZeropsApiProtocol.UserDataType - 25, // 316: zBusinessZeropsApiProtocol.UserDataLight.created:type_name -> zBusinessZeropsApiProtocol.Timestamp - 25, // 317: zBusinessZeropsApiProtocol.UserDataLight.lastUpdate:type_name -> zBusinessZeropsApiProtocol.Timestamp - 20, // 318: zBusinessZeropsApiProtocol.UserDataLight.version:type_name -> zBusinessZeropsApiProtocol.UserDataVersion - 134, // 319: zBusinessZeropsApiProtocol.UserDataLight.lastSync:type_name -> zBusinessZeropsApiProtocol.TimestampNull - 21, // 320: zBusinessZeropsApiProtocol.UserJsonObject.type:type_name -> zBusinessZeropsApiProtocol.UserJsonObjectType - 133, // 321: zBusinessZeropsApiProtocol.UserJsonObject.id:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 322: zBusinessZeropsApiProtocol.UserJsonObject.email:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 323: zBusinessZeropsApiProtocol.UserJsonObject.firstName:type_name -> zBusinessZeropsApiProtocol.StringNull - 133, // 324: zBusinessZeropsApiProtocol.UserJsonObject.fullName:type_name -> zBusinessZeropsApiProtocol.StringNull - 135, // 325: zBusinessZeropsApiProtocol.UserJsonObject.avatar:type_name -> zBusinessZeropsApiProtocol.UserAvatarNull - 135, // 326: zBusinessZeropsApiProtocol.UserLight.avatar:type_name -> zBusinessZeropsApiProtocol.UserAvatarNull - 109, // 327: zBusinessZeropsApiProtocol.VerticalAutoscaling.maxResource:type_name -> zBusinessZeropsApiProtocol.ScalingResource - 109, // 328: zBusinessZeropsApiProtocol.VerticalAutoscaling.minResource:type_name -> zBusinessZeropsApiProtocol.ScalingResource - 84, // 329: zBusinessZeropsApiProtocol.AppVersionBuildNull.value:type_name -> zBusinessZeropsApiProtocol.AppVersionBuild - 85, // 330: zBusinessZeropsApiProtocol.AppVersionGithubIntegrationNull.value:type_name -> zBusinessZeropsApiProtocol.AppVersionGithubIntegration - 86, // 331: zBusinessZeropsApiProtocol.AppVersionGitlabIntegrationNull.value:type_name -> zBusinessZeropsApiProtocol.AppVersionGitlabIntegration - 87, // 332: zBusinessZeropsApiProtocol.AppVersionJsonObjectNull.value:type_name -> zBusinessZeropsApiProtocol.AppVersionJsonObject - 88, // 333: zBusinessZeropsApiProtocol.AppVersionLightNull.value:type_name -> zBusinessZeropsApiProtocol.AppVersionLight - 89, // 334: zBusinessZeropsApiProtocol.AppVersionPublicGitSourceNull.value:type_name -> zBusinessZeropsApiProtocol.AppVersionPublicGitSource - 91, // 335: zBusinessZeropsApiProtocol.ClientAvatarNull.value:type_name -> zBusinessZeropsApiProtocol.ClientAvatar - 94, // 336: zBusinessZeropsApiProtocol.CustomAutoscalingNull.value:type_name -> zBusinessZeropsApiProtocol.CustomAutoscaling - 95, // 337: zBusinessZeropsApiProtocol.GithubIntegrationNull.value:type_name -> zBusinessZeropsApiProtocol.GithubIntegration - 96, // 338: zBusinessZeropsApiProtocol.GitlabIntegrationNull.value:type_name -> zBusinessZeropsApiProtocol.GitlabIntegration - 97, // 339: zBusinessZeropsApiProtocol.HorizontalAutoscalingNull.value:type_name -> zBusinessZeropsApiProtocol.HorizontalAutoscaling - 100, // 340: zBusinessZeropsApiProtocol.PrepareCustomRuntimeNull.value:type_name -> zBusinessZeropsApiProtocol.PrepareCustomRuntime - 25, // 341: zBusinessZeropsApiProtocol.TimestampNull.value:type_name -> zBusinessZeropsApiProtocol.Timestamp - 115, // 342: zBusinessZeropsApiProtocol.UserAvatarNull.value:type_name -> zBusinessZeropsApiProtocol.UserAvatar - 117, // 343: zBusinessZeropsApiProtocol.UserJsonObjectNull.value:type_name -> zBusinessZeropsApiProtocol.UserJsonObject - 119, // 344: zBusinessZeropsApiProtocol.VerticalAutoscalingNull.value:type_name -> zBusinessZeropsApiProtocol.VerticalAutoscaling - 40, // 345: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutAppVersionDeploy:input_type -> zBusinessZeropsApiProtocol.PutAppVersionDeployRequest - 39, // 346: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutAppVersionBuildAndDeploy:input_type -> zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployRequest - 33, // 347: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PostAppVersion:input_type -> zBusinessZeropsApiProtocol.PostAppVersionRequest - 26, // 348: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.DeleteProject:input_type -> zBusinessZeropsApiProtocol.DeleteProjectRequest - 29, // 349: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.GetProjectsByName:input_type -> zBusinessZeropsApiProtocol.GetProjectsByNameRequest - 41, // 350: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutProjectStart:input_type -> zBusinessZeropsApiProtocol.PutProjectStartRequest - 42, // 351: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutProjectStop:input_type -> zBusinessZeropsApiProtocol.PutProjectStopRequest - 34, // 352: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PostProjectImport:input_type -> zBusinessZeropsApiProtocol.PostProjectImportRequest - 28, // 353: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.GetProcess:input_type -> zBusinessZeropsApiProtocol.GetProcessRequest - 35, // 354: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PostPublicHttpRouting:input_type -> zBusinessZeropsApiProtocol.PostPublicHttpRoutingRequest - 30, // 355: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.GetServiceStack:input_type -> zBusinessZeropsApiProtocol.GetServiceStackRequest - 27, // 356: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.DeleteServiceStack:input_type -> zBusinessZeropsApiProtocol.DeleteServiceStackRequest - 45, // 357: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutServiceStackStop:input_type -> zBusinessZeropsApiProtocol.PutServiceStackStopRequest - 44, // 358: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutServiceStackStart:input_type -> zBusinessZeropsApiProtocol.PutServiceStackStartRequest - 43, // 359: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutServiceStackRestart:input_type -> zBusinessZeropsApiProtocol.PutServiceStackRestartRequest - 31, // 360: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.GetServiceStackByName:input_type -> zBusinessZeropsApiProtocol.GetServiceStackByNameRequest - 36, // 361: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PostServiceStackImport:input_type -> zBusinessZeropsApiProtocol.PostServiceStackImportRequest - 32, // 362: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.GetUserInfo:input_type -> zBusinessZeropsApiProtocol.GetUserInfoRequest - 37, // 363: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PostVpnRequest:input_type -> zBusinessZeropsApiProtocol.PostVpnRequestRequest - 72, // 364: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutAppVersionDeploy:output_type -> zBusinessZeropsApiProtocol.PutAppVersionDeployResponse - 70, // 365: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutAppVersionBuildAndDeploy:output_type -> zBusinessZeropsApiProtocol.PutAppVersionBuildAndDeployResponse - 60, // 366: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PostAppVersion:output_type -> zBusinessZeropsApiProtocol.PostAppVersionResponse - 46, // 367: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.DeleteProject:output_type -> zBusinessZeropsApiProtocol.DeleteProjectResponse - 52, // 368: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.GetProjectsByName:output_type -> zBusinessZeropsApiProtocol.GetProjectsByNameResponse - 74, // 369: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutProjectStart:output_type -> zBusinessZeropsApiProtocol.PutProjectStartResponse - 76, // 370: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutProjectStop:output_type -> zBusinessZeropsApiProtocol.PutProjectStopResponse - 62, // 371: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PostProjectImport:output_type -> zBusinessZeropsApiProtocol.PostProjectImportResponse - 50, // 372: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.GetProcess:output_type -> zBusinessZeropsApiProtocol.GetProcessResponse - 64, // 373: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PostPublicHttpRouting:output_type -> zBusinessZeropsApiProtocol.PostPublicHttpRoutingResponse - 54, // 374: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.GetServiceStack:output_type -> zBusinessZeropsApiProtocol.GetServiceStackResponse - 48, // 375: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.DeleteServiceStack:output_type -> zBusinessZeropsApiProtocol.DeleteServiceStackResponse - 82, // 376: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutServiceStackStop:output_type -> zBusinessZeropsApiProtocol.PutServiceStackStopResponse - 80, // 377: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutServiceStackStart:output_type -> zBusinessZeropsApiProtocol.PutServiceStackStartResponse - 78, // 378: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PutServiceStackRestart:output_type -> zBusinessZeropsApiProtocol.PutServiceStackRestartResponse - 56, // 379: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.GetServiceStackByName:output_type -> zBusinessZeropsApiProtocol.GetServiceStackByNameResponse - 66, // 380: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PostServiceStackImport:output_type -> zBusinessZeropsApiProtocol.PostServiceStackImportResponse - 58, // 381: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.GetUserInfo:output_type -> zBusinessZeropsApiProtocol.GetUserInfoResponse - 68, // 382: zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol.PostVpnRequest:output_type -> zBusinessZeropsApiProtocol.PostVpnRequestResponse - 364, // [364:383] is the sub-list for method output_type - 345, // [345:364] is the sub-list for method input_type - 345, // [345:345] is the sub-list for extension type_name - 345, // [345:345] is the sub-list for extension extendee - 0, // [0:345] is the sub-list for field type_name -} - -func init() { file_zeropsApiProtocol_proto_init() } -func file_zeropsApiProtocol_proto_init() { - if File_zeropsApiProtocol_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_zeropsApiProtocol_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Error); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ErrorNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Timestamp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteProjectRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteServiceStackRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProcessRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectsByNameRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServiceStackRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServiceStackByNameRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUserInfoRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostAppVersionRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostProjectImportRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostPublicHttpRoutingRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostServiceStackImportRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostVpnRequestRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicHttpRoutingLocationPost); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutAppVersionBuildAndDeployRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutAppVersionDeployRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutProjectStartRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutProjectStopRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutServiceStackRestartRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutServiceStackStartRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutServiceStackStopRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteProjectResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteProjectResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteServiceStackResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteServiceStackResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProcessResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProcessResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectsByNameResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectsByNameResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServiceStackResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServiceStackResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServiceStackByNameResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServiceStackByNameResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUserInfoResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUserInfoResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostAppVersionResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostAppVersionResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostProjectImportResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostProjectImportResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostPublicHttpRoutingResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostPublicHttpRoutingResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostServiceStackImportResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostServiceStackImportResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostVpnRequestResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostVpnRequestResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutAppVersionBuildAndDeployResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutAppVersionBuildAndDeployResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutAppVersionDeployResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutAppVersionDeployResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutProjectStartResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutProjectStartResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutProjectStopResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutProjectStopResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutServiceStackRestartResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutServiceStackRestartResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutServiceStackStartResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutServiceStackStartResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutServiceStackStopResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutServiceStackStopResponseDto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionBuild); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionGithubIntegration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionGitlabIntegration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionJsonObject); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionLight); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionPublicGitSource); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionUserData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientAvatar); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientExtra); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientUserExtra); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CustomAutoscaling); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GithubIntegration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GitlabIntegration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HorizontalAutoscaling); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Language); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocationServiceStackInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrepareCustomRuntime); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Process); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Project); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectImportServiceStack); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectLight); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectLightJsonObject); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicHttpRoutingDomain); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicHttpRoutingLocation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RequestedPortsJsonObject); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ScalingResource); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServicePort); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceStackConnectedServiceStack); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceStackInfoJsonObject); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceStackLight); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceStackLightJsonObject); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserAvatar); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserDataLight); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserJsonObject); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserLight); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VerticalAutoscaling); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionBuildNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionGithubIntegrationNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionGitlabIntegrationNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionJsonObjectNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionLightNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppVersionPublicGitSourceNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientAvatarNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CustomAutoscalingNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GithubIntegrationNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GitlabIntegrationNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HorizontalAutoscalingNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Int32Null); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrepareCustomRuntimeNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StringNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TimestampNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserAvatarNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserJsonObjectNull); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_zeropsApiProtocol_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VerticalAutoscalingNull); 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_zeropsApiProtocol_proto_rawDesc, - NumEnums: 23, - NumMessages: 115, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_zeropsApiProtocol_proto_goTypes, - DependencyIndexes: file_zeropsApiProtocol_proto_depIdxs, - EnumInfos: file_zeropsApiProtocol_proto_enumTypes, - MessageInfos: file_zeropsApiProtocol_proto_msgTypes, - }.Build() - File_zeropsApiProtocol_proto = out.File - file_zeropsApiProtocol_proto_rawDesc = nil - file_zeropsApiProtocol_proto_goTypes = nil - file_zeropsApiProtocol_proto_depIdxs = nil -} diff --git a/src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol.proto b/src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol.proto deleted file mode 100644 index 06e82594..00000000 --- a/src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol.proto +++ /dev/null @@ -1,1662 +0,0 @@ -syntax = "proto3"; - -package zBusinessZeropsApiProtocol; -option go_package = "github.com/zeropsio/zcli/src/protocol/zBusinessZeropsApiProtocol"; - -service ZBusinessZeropsApiProtocol { - rpc PutAppVersionDeploy(PutAppVersionDeployRequest) returns (PutAppVersionDeployResponse); - rpc PutAppVersionBuildAndDeploy(PutAppVersionBuildAndDeployRequest) returns (PutAppVersionBuildAndDeployResponse); - rpc PostAppVersion(PostAppVersionRequest) returns (PostAppVersionResponse); - rpc DeleteProject(DeleteProjectRequest) returns (DeleteProjectResponse); - rpc GetProjectsByName(GetProjectsByNameRequest) returns (GetProjectsByNameResponse); - rpc PutProjectStart(PutProjectStartRequest) returns (PutProjectStartResponse); - rpc PutProjectStop(PutProjectStopRequest) returns (PutProjectStopResponse); - rpc PostProjectImport(PostProjectImportRequest) returns (PostProjectImportResponse); - rpc GetProcess(GetProcessRequest) returns (GetProcessResponse); - rpc PostPublicHttpRouting(PostPublicHttpRoutingRequest) returns (PostPublicHttpRoutingResponse); - rpc GetServiceStack(GetServiceStackRequest) returns (GetServiceStackResponse); - rpc DeleteServiceStack(DeleteServiceStackRequest) returns (DeleteServiceStackResponse); - rpc PutServiceStackStop(PutServiceStackStopRequest) returns (PutServiceStackStopResponse); - rpc PutServiceStackStart(PutServiceStackStartRequest) returns (PutServiceStackStartResponse); - rpc PutServiceStackRestart(PutServiceStackRestartRequest) returns (PutServiceStackRestartResponse); - rpc GetServiceStackByName(GetServiceStackByNameRequest) returns (GetServiceStackByNameResponse); - rpc PostServiceStackImport(PostServiceStackImportRequest) returns (PostServiceStackImportResponse); - rpc GetUserInfo(GetUserInfoRequest) returns (GetUserInfoResponse); - rpc PostVpnRequest(PostVpnRequestRequest) returns (PostVpnRequestResponse); -} - -message Error { - ErrorCode code = 1; - string message = 2; - bytes meta = 3; -} - -message ErrorNull { - Error value = 1; - bool valid = 2; -} - -enum ErrorCode { - NO_ERROR = 0; - INTERNAL_SERVER_ERROR = 1; - NOT_FOUND = 326; - INVALID_USER_INPUT = 2; - INVALID_USER_INPUT_WITH_TEXT = 3; - NOT_AUTHORIZED = 4; - INSUFFICIENT_PRIVILEGES = 5; - REFRESH_TOKEN_INVALID = 6; - ENDPOINT_NOT_FOUND = 7; - POTENTIALLY_FRAUD_BEHAVIOR_DETECTED = 8; - RE_CAPTCHA_RESPONSE_INVALID = 9; - DOWNLOAD_TOKEN_INVALID_OR_EXPIRED = 10; - INCORRECT_USER_CREDENTIALS = 11; - NO_RIGHTS_TO_SELECTED_ACTION = 12; - FILE_SIZE_LIMIT_EXCEEDED = 13; - ADDITIONAL_VERIFICATION_FAILED = 14; - AT_LEAST_ONE_MANAGER = 191; - ACTIVE_USER_MUST_BE_CONNECTED_TO_AT_LEAST_ONE_CLIENT = 15; - INVALID_CREDENTIALS = 16; - PASSWORD_TOO_SHORT = 270; - PASSWORD_TOO_LONG = 269; - NO_ACTIVE_CONNECTION_TO_ANY_CLIENT = 18; - NO_ACTIVE_CONNECTION_TO_CURRENT_CLIENT = 19; - TOKEN_EXPIRED = 20; - CLIENT_NOT_FOUND = 21; - NO_ACCESS_TO_ZEROPS = 22; - USER_NOT_FOUND = 23; - INVALID_DOCUMENT_ROOT = 24; - INVALID_ENTRYPOINT = 25; - INVALID_INIT_COMMANDS = 280; - DOWNLOAD_EXPIRED = 26; - MULTIPLE_ACCOUNTS_CONNECTED = 334; - USER_DATA_NOT_FOUND = 27; - USER_DATA_KEY_INVALID = 28; - USER_DATA_CONTENT_INVALID = 29; - USER_DATA_USE_OF_SYSTEM_KEY = 180; - USER_DATA_DELETE_FORBIDDEN = 30; - USER_DATA_DUPLICATE_KEY = 31; - USER_DATA_SYNC_RUNNING = 32; - USER_DATA_VERSION_MISMATCH = 168; - USER_TOKEN_NOT_FOUND = 227; - USER_ACCOUNT_NOT_FOUND = 34; - TEMPLATE_NOT_FOUND = 35; - COUNTRY_CALLING_CODE_DOES_NOT_MATCH_PHONE_NUMBER = 36; - INVALID_PHONE_NUMBER = 37; - INVALID_USER_ROLE = 38; - INVALID_CLIENT_USER_GROUP_COMBINATION = 39; - EMAIL_EXISTS = 40; - USER_ALREADY_CONNECTED_TO_COMPANY = 41; - COUNTRY_NOT_FOUND = 42; - RECORD_NOT_FOUND = 43; - MAXIMUM_NUMBER_OF_CLIENT_EXCEEDED = 44; - USER_IS_NOT_IN_BEING_DELETED_STATUS = 45; - UNABLE_TO_DELETE_YOUR_OWN_ACCOUNT = 46; - CLIENT_USER_CONNECTION_NOT_FOUND = 47; - CLIENT_USER_CONNECTION_HAS_BEEN_DELETED = 48; - BAD_OR_EXPIRED_ACTIVATION_LINK = 49; - UNABLE_TO_EDIT_DELETED_USER = 50; - CLIENT_USER_ALREADY_BEEN_DELETED = 51; - LANGUAGE_NOT_FOUND = 52; - LANGUAGE_NOT_SUPPORTED = 53; - DUPLICATED_USER = 54; - RECORD_IS_READ_ONLY = 55; - RECORD_IS_DELETED = 56; - RECORD_COMMON_KEY_EDIT = 57; - SERVICE_STACK_NOT_FOUND = 61; - SERVICE_STACK_TYPE_NOT_FOUND = 62; - SERVICE_STACK_TYPE_VERSION_NOT_FOUND = 63; - SERVICE_STACK_TYPE_VERSION_IS_NOT_ACTIVE = 64; - SERVICE_STACK_TYPE_VERSION_REMOVE_DEFAULT = 65; - SERVICE_STACK_TYPE_INVALID_VERSION = 66; - SERVICE_STACK_IS_FAILED = 67; - SERVICE_STACK_IS_SYSTEM_NOT_SUPPORTED = 68; - SERVICE_STACK_CUSTOM_PORTS_ENABLED_REQUIRED = 69; - SERVICE_STACK_TYPE_VERSION_NOT_MATCH_WITH_STACK_TYPE = 70; - SERVICE_STACK_STORAGE_DISK_MAX_LIMIT = 71; - SERVICE_STACK_STORAGE_DISK_MIN_LIMIT = 72; - SERVICE_STACK_OBJECT_STORAGE_QUOTA_NOT_FOUND = 73; - SERVICE_STACK_INIT_COMMANDS_NOT_FOUND = 281; - SERVICE_STACK_TYPE_OBJECT_STORAGE_REQUIRED = 74; - SERVICE_STACK_TYPE_OBJECT_STORAGE_FORBIDDEN = 75; - SERVICE_STACK_TYPE_SHARED_STORAGE_FORBIDDEN = 76; - SERVICE_STACK_TYPE_STANDARD_FORBIDDEN = 242; - SERVICE_STACK_IS_READY_TO_DEPLOY = 77; - SERVICE_STACK_IS_NOT_HTTP = 78; - SERVICE_STACK_RELOAD_NOT_AVAILABLE = 79; - SERVICE_STACK_NGINX_CONFIG = 194; - SERVICE_STACK_SUBDOMAIN_ACCESS_ALREADY_DISABLED = 81; - SERVICE_STACK_CREATING = 178; - SERVICE_STACK_UPGRADING = 179; - SERVICE_STACK_INVALID_CATEGORY = 203; - SERVICE_STACK_STATUS_NOT_SUPPORTED = 265; - SERVICE_STACK_USER_NAME_INVALID = 282; - ACTIVE_SERVICE_STACK_REQUIRED = 283; - USER_APPLICATION_RUNTIME_SERVICE_STACK_REQUIRED = 284; - SHARED_STORAGE_NONEMPTY_CONNECTED_STACKS_FORBIDDEN = 329; - SHARED_STORAGE_SERVICE_STACK_INACTIVE = 328; - PROCESS_NOT_FOUND = 82; - PROCESS_IS_ALREADY_OVER = 83; - PROCESS_IS_ALREADY_RUNNING = 85; - UNABLE_TO_CREATE_PROCESS = 87; - CREATE_PROCESS_QUEUED_PROJECT_PROCESS_COUNT_EXCEEDED = 323; - MANUAL_REPAIR_REQUIRED = 59; - NOTHING_TO_SYNC = 60; - IS_NOT_POSSIBLE_TO_EDIT_ANOTHER_USER = 58; - ACTIVE_SERVICE_STACK_EXISTS_IN_PROJECT = 88; - INVALID_OLD_PASSWORD = 89; - PROJECT_STATUS_NOT_SUPPORTED = 90; - PROJECT_NOT_FOUND = 91; - PROJECT_IS_NOT_ACTIVE = 167; - SERVICE_STACK_NAME_UNAVAILABLE = 92; - SERVICE_STACK_NAME_INVALID = 93; - CORE_SERVICE_STACK_TYPE_VERSION_NOT_FOUND = 94; - L7_HTTP_BALANCER_SERVICE_STACK_TYPE_VERSION_NOT_FOUND = 95; - PROJECT_WILL_BE_DELETED = 96; - PROJECT_WILL_BE_STARTED = 256; - PROJECT_WILL_BE_STOPPED = 257; - STACK_WILL_BE_DELETED = 97; - STACK_OF_PROJECT_WILL_BE_DELETED = 286; - STACK_OF_PROJECT_WILL_BE_CREATED = 287; - USER_DATA_OF_PROJECT_WILL_BE_SYNCED = 288; - PUBLIC_HTTP_ROUTING_NOT_FOUND = 98; - PUBLIC_HTTP_ROUTING_AT_LEAST_ONE_DOMAIN_REQUIRED = 99; - PUBLIC_HTTP_ROUTING_DUPLICATE_DOMAIN_NAME = 100; - PUBLIC_HTTP_ROUTING_DUPLICATE_FALLBACK = 101; - PUBLIC_HTTP_ROUTING_DUPLICATE_DOMAIN_NAME_IN_ANOTHER_ROUTING = 102; - PUBLIC_HTTP_ROUTING_DUPLICATE_FALLBACK_IN_ANOTHER_ROUTING = 103; - PUBLIC_HTTP_ROUTING_DUPLICATE_LOCATION_PATHS = 104; - PUBLIC_HTTP_ROUTING_ITEMS_LIMIT = 105; - PUBLIC_HTTP_ROUTING_LOCATIONS_LIMIT = 106; - PUBLIC_HTTP_ROUTING_DOMAINS_LIMIT = 107; - PUBLIC_HTTP_ROUTING_INVALID_DOMAIN_NAME_FQDN = 108; - PUBLIC_HTTP_ROUTING_SSL_FALLBACK = 109; - PUBLIC_HTTP_ROUTING_LOCATION_DOES_NOT_FOUND = 110; - PUBLIC_HTTP_ROUTING_INVALID_LOCATIONS_PREFIX = 111; - PUBLIC_HTTP_ROUTING_MULTIPLE_SERVICE_STACK_ACCESS_POINTS = 112; - PUBLIC_HTTP_ROUTING_SERVICE_STACK_ACCESS_POINT_NOT_FOUND = 113; - PUBLIC_HTTP_ROUTING_REQUEST_ONLY_TCP_PORT = 114; - PUBLIC_HTTP_ROUTING_SERVICE_STACK_DOES_NOT_SUPPORT_HTTP = 115; - PUBLIC_HTTP_ROUTING_FORBIDDEN_ZEROPS_SUBDOMAIN_SUFFIX = 327; - NO_PUBLIC_HTTP_ROUTING_IN_L7_HTTP_BALANCING = 116; - SSL_NOT_SUPPORTED = 117; - REGISTERED_DOMAIN_HOST_LIMIT_REACHED = 118; - PUBLIC_SUFFIX_LIST_CONTROL_FAILED = 119; - PORT_NOT_SUPPORTED = 120; - PUBLIC_HTTP_ROUTING_SYNC_RUNNING = 121; - PUBLIC_HTTP_ROUTING_VERSION_MISMATCH = 169; - PORT_OUT_OF_RANGE = 122; - PORT_PROTOCOL_INVALID = 123; - PORT_SCHEME_INVALID = 124; - UDP_PROTOCOL_SCHEME_MISMATCH = 125; - PUBLIC_IP_REQUEST_NOT_FOUND = 126; - PUBLIC_IP_REQUEST_ONLY_ONE = 128; - PUBLIC_IP_REQUEST_RELEASE_RUNNING = 130; - USER_NOTIFICATION_NOT_FOUND = 131; - PUBLIC_PORT_ROUTING_NOT_FOUND = 132; - PUBLIC_IP_TYPE_NOT_SUPPORTED = 133; - PORT_AND_PROTOCOL_COMBINATION_NOT_SUPPORTED = 134; - PUBLIC_PORT_ROUTING_DUPLICATE_RULE = 135; - INTERNAL_PORT_DUPLICATE_RULE = 181; - PUBLIC_PORT_ROUTING_SYNC_RUNNING = 136; - PUBLIC_PORT_ROUTING_INVALID_IP_FORMAT = 137; - PUBLIC_PORT_ROUTING_FIREWALL_POLICY_CONFLICT = 138; - PUBLIC_PORT_ROUTING_VERSION_MISMATCH = 170; - PUBLIC_PORT_ROUTING_UNABLE_TO_EDIT_DELETED_RECORD = 139; - PUBLIC_PORT_ROUTING_UNABLE_TO_EDIT_PORTS_ON_SYSTEM_SERVICE = 190; - DRIVER_NOT_FOUND = 140; - DRIVER_ENTITY_IS_NOT_SERVICE_STACK = 141; - DRIVER_ALREADY_SET = 142; - CLIENT_USER_CONNECTION_ALREADY_EXISTS = 143; - USER_ALREADY_ASSIGNED = 144; - SERVICE_STACK_TYPE_USER_STORAGE_REQUIRED = 145; - APP_VERSION_NOT_FOUND = 146; - APP_VERSION_INVALID_STATUS = 147; - DEPLOY_PROCESS_ALREADY_CREATED = 148; - OBJECT_CONTENT_LENGTH_ZERO = 149; - OBJECT_MIME_TYPE_NOT_SUPPORTED = 150; - OBJECT_NOT_FOUND = 151; - MAX_OBJECT_DISK_SIZE_ESTIMATE_EXCEEDED = 152; - APP_VERSION_IS_ACTIVE = 226; - APP_VERSION_NO_ACTIVE_FOUND = 310; - APP_VERSION_IS_BEING_DEPLOYED = 196; - APP_VERSION_IS_BEING_BUILT = 197; - APP_VERSION_IS_NOT_BEING_UPLOADED = 198; - APP_VERSION_DEPLOYING_FAILED = 199; - APP_VERSION_BUILDING_FAILED = 200; - APP_VERSION_YAML_PARSE_FAILED = 225; - APP_VERSION_YAML_CONFIG_REQUIRED = 324; - APP_VERSION_DATA_NOT_AVAILABLE = 285; - APP_VERSION_ACTIVE_HAS_DEFAULT_RUNTIME = 306; - SHARED_STORAGE_NOT_FOUND = 153; - SHARED_STORAGE_INVALID_PROJECT = 154; - SERVICE_STACK_CONNECTION_NOT_FOUND = 155; - SHARED_STORAGE_INVALID_CATEGORY = 156; - USER_SERVICE_STACK_INVALID_CATEGORY = 157; - IDENTICAL_SHARED_STORAGE_AND_SERVICE_STACK = 158; - CLIENT_ID_PROJECT_SERVICE_STACK_MISSING = 159; - DIFFERENT_PROJECT_IDS = 160; - STATS_HISTORY_SEARCH_LIMIT_INVALID = 171; - STATS_HISTORY_SEARCH_TIME_GROUP_BY_INVALID = 192; - STATS_HISTORY_SEARCH_ID_FILTER_INVALID = 172; - STATS_HISTORY_SEARCH_PROJECT_ID_REQUIRED = 173; - STATS_HISTORY_SEARCH_SUBSCRIPTION_NOT_SUPPORTED = 174; - STATS_HISTORY_SEARCH_HISTORY_LIMIT_REACHED = 193; - STATS_HISTORY_SEARCH_RANGE_INVALID = 274; - STATS_HISTORY_SEARCH_EITHER_RANGE_OR_LIMIT_REQUIRED = 278; - STATS_HISTORY_SEARCH_FULL_RANGE_REQUIRED = 276; - TRANSACTION_DEBIT_SEARCH_LIMIT_INVALID = 260; - TRANSACTION_DEBIT_SEARCH_TIME_GROUP_BY_INVALID = 261; - TRANSACTION_DEBIT_SEARCH_RANGE_INVALID = 273; - TRANSACTION_DEBIT_SEARCH_CLIENT_ID_REQUIRED = 262; - TRANSACTION_DEBIT_SEARCH_ID_FILTER_INVALID = 263; - TRANSACTION_DEBIT_SEARCH_EITHER_RANGE_OR_LIMIT_REQUIRED = 277; - TRANSACTION_DEBIT_SEARCH_FULL_RANGE_REQUIRED = 272; - TRANSACTION_DEBIT_SEARCH_TILL_AND_FROM_DATE_TIMEZONES_DIFFER = 300; - TRANSACTION_DEBIT_SEARCH_UNKNOWN_TIMEZONE = 301; - TRANSACTION_DEBIT_SEARCH_INVALID_FILTER = 271; - GITHUB_VERIFICATION_EXPIRED = 188; - INVALID_GITHUB_TOKEN_ACTION = 182; - GITHUB_REQUEST_FAILED = 183; - GITHUB_AUTHORIZATION_REQUIRED = 184; - GITHUB_EMAIL_ACCESS_REQUIRED = 185; - GITHUB_NO_VERIFIED_EMAIL_FOUND = 186; - GITHUB_REPOSITORY_ACCESS_REQUIRED = 187; - GITHUB_RATE_LIMIT_EXCEEDED = 189; - SERVICE_STACK_NO_GITHUB_INTEGRATION = 206; - BRANCH_NAME_REQUIRED = 207; - TRIGGER_BUILD_REQUIRES_BRANCH_EVENT_TYPE = 268; - USER_SERVICE_STACK_REQUIRED = 208; - NO_EXTERNAL_REPOSITORY_INTEGRATION = 209; - GITHUB_BRANCH_DELETED = 210; - GITHUB_WEBHOOK_DELETED = 211; - GITHUB_WEBHOOK_INVALID_PARAMETERS = 212; - UNEXPECTED_GITHUB_FILE_ENCODING = 218; - ZEROPS_BUILD_FILE_NOT_FOUND = 219; - INCORRECT_WEBHOOK_SECRET = 213; - UNSUPPORTED_WEBHOOK_EVENT_TYPE = 214; - REPOSITORY_DOES_NOT_MATCH_SERVICE_STACK_SETTINGS = 215; - PROJECT_STATUS_NOT_IN_NEW_CREATING_ACTIVE = 216; - GITHUB_PUSH_IGNORED = 217; - ZEROPS_BUILD_FILE_TOO_LARGE = 204; - SAME_SERVICE_STACK_TYPE_USED = 205; - GITHUB_WRONG_REPOSITORY_FULL_NAME_FORMAT = 220; - GITHUB_WEBHOOKS_LIMIT_EXCEEDED = 221; - AVATAR_UPLOAD_FORBIDDEN_IMAGE_TYPE = 222; - AVATAR_UPLOAD_MAX_SIZE = 223; - AVATAR_UPLOAD_FILE_NOT_FOUND = 224; - GITLAB_RATE_LIMIT_EXCEEDED = 228; - GITLAB_VERIFICATION_EXPIRED = 229; - INVALID_GITLAB_TOKEN_ACTION = 230; - GITLAB_REQUEST_FAILED = 231; - GITLAB_AUTHORIZATION_REQUIRED = 232; - GITLAB_FULL_API_ACCESS_REQUIRED = 233; - MULTIPLE_INTEGRATIONS_ARE_FORBIDDEN = 234; - GITLAB_BRANCH_DELETED = 235; - GITLAB_WEBHOOK_DELETED = 236; - GITLAB_WEBHOOK_INVALID_PARAMETERS = 237; - SERVICE_STACK_NO_GITLAB_INTEGRATION = 238; - GITLAB_PUSH_IGNORED = 239; - YAML_FIELD_LENGTH_ERROR = 240; - YAML_WRONG_USE_FIELD_TYPE = 241; - VAT_NUMBER_NOT_IN_EUCOUNTRY = 254; - COMPANY_NOT_FOUND_IN_EU = 258; - VAT_NUMBER_MISSING = 244; - PAYMENT_IN_PROGRESS = 245; - DUPLICATE_VAT_NUMBER = 250; - DUPLICATE_COMPANY_NUMBER = 302; - CURRENCY_CHANGE = 303; - ADMIN_USER_ACCOUNT_EXISTS = 266; - CREDIT_LIMIT_REACHED = 246; - INSUFFICIENT_CREDIT = 247; - PROJECT_LOCK_FAILED = 248; - PROJECT_UPDATE_FAILED = 249; - MAXIMUM_AMOUNT_EXCEEDED = 267; - PAYMENT_FAILED_ERROR = 252; - PAYMENT_NOT_FOUND = 253; - ADDON_NOT_FOUND = 255; - INVOICE_NOT_FOUND = 259; - PRICE_LIST_NOT_FOUND = 264; - COST_LIMIT_TOO_SMALL = 279; - PROJECT_IMPORT_INVALID_YAML = 289; - PROJECT_IMPORT_INVALID_CONFIG_STRUCTURE = 290; - PROJECT_IMPORT_INVALID_PARAMETER = 295; - PROJECT_IMPORT_INVALID_TYPE_VERSION = 292; - PROJECT_IMPORT_MISSING_PARAMETER = 293; - PROJECT_IMPORT_UNABLE_TO_CREATE_SERVICE_STACK = 294; - PROJECT_IMPORT_PROJECT_INCLUDED = 296; - PROJECT_IMPORT_PROJECT_MISSING = 297; - PROJECT_IMPORT_MISSING_SERVICE = 298; - INVALID_CUSTOM_AUTOSCALING_VALUE = 309; - INVALID_CUSTOM_AUTOSCALING_CPU_RAM_RATIO = 335; - CUSTOM_VERTICAL_AUTOSCALING_FORBIDDEN_FOR_THIS_STACK_CATEGORY = 305; - CUSTOM_HORIZONTAL_AUTOSCALING_FORBIDDEN_FOR_THIS_STACK_CATEGORY = 307; - CUSTOM_HORIZONTAL_AUTOSCALING_FORBIDDEN_IN_NON_HA_MODE = 308; - ACTION_FORBIDDEN_FOR_THIS_STACK_CATEGORY = 311; - MODE_UPDATE_FORBIDDEN_FOR_THIS_STACK_CATEGORY = 312; - YAML_VALIDATION_INVALID_YAML = 304; - UNEXPECTED_YAML_ENCODING = 325; - BUCKET_ALREADY_EXISTS = 336; - S3_API_REQUEST_FAILED = 337; - USER_ID_WAS_NOT_FOUND = 161; - AUTHOR_ID_WAS_NOT_FOUND = 162; - USER_DOES_NOT_HAVE_ACTIVE_CONNECTION_TO_ANY_CLIENT = 163; - USER_HAS_NOT_ACCESS_TO_ZEROPS = 164; - INVALID_EMAIL_TOKEN = 195; - CLIENT_CREATE_FAILED = 321; - CLIENT_ID_TOO_LONG = 322; - TRANSFER_ID_TOO_LONG = 316; - EMAIL_IS_INVALID = 313; - USER_ACCOUNT_DELETED = 314; - NO_CONTABO_CLIENT_CONNECTED = 315; - AMBIGUOUS_USER = 330; - AMBIGUOUS_USER_SIGN_IN = 331; - UNSUPPORTED_CURRENCY = 317; - INVALID_CURRENCY_CODE = 320; - TRANSFER_PARAM_MISMATCH = 318; - INVALID_AMOUNT = 333; - -} - -message Timestamp { - bool isSet = 1; - int64 seconds = 2; - int32 nanos = 3; -} - -// -// REQUEST OBJECTS -// - -message DeleteProjectRequest { - string id = 1; - -} - -message DeleteServiceStackRequest { - string id = 1; - -} - -message GetProcessRequest { - string id = 1; - -} - -message GetProjectsByNameRequest { - string name = 1; - -} - -message GetServiceStackRequest { - string id = 1; - -} - -message GetServiceStackByNameRequest { - string projectId = 2; - string name = 1; - -} - -message GetUserInfoRequest { - -} - -message PostAppVersionRequest { - string serviceStackId = 1; - StringNull name = 2; - -} - -message PostProjectImportRequest { - string clientId = 1; - string yaml = 2; - -} - -message PostPublicHttpRoutingRequest { - string projectId = 1; - bool sslEnabled = 2; - repeated string domains = 3; - repeated PublicHttpRoutingLocationPost locations = 4; - -} - -message PostServiceStackImportRequest { - string projectId = 1; - string yaml = 2; - -} - -message PostVpnRequestRequest { - string id = 1; - string clientPublicKey = 2; - -} - -message PublicHttpRoutingLocationPost { - string path = 1; - int32 port = 2; - string serviceStackId = 3; - -} - -message PutAppVersionBuildAndDeployRequest { - string id = 1; - string buildConfigContent = 5; - StringNull source = 7; - -} - -message PutAppVersionDeployRequest { - string id = 1; - StringNull configContent = 3; - StringNull source = 4; - -} - -message PutProjectStartRequest { - string id = 1; - -} - -message PutProjectStopRequest { - string id = 1; - -} - -message PutServiceStackRestartRequest { - string id = 1; - -} - -message PutServiceStackStartRequest { - string id = 1; - -} - -message PutServiceStackStopRequest { - string id = 1; - -} - - - -// -// RESPONSE OBJECTS -// - - -message DeleteProjectResponse { - Error error = 1; - DeleteProjectResponseDto output = 2; -} - -message DeleteProjectResponseDto { - string id = 1; - string clientId = 2; - string projectId = 3; - StringNull serviceStackId = 4; - ProjectLightJsonObject project = 5; - repeated ServiceStackLightJsonObject serviceStacks = 6; - ProcessStatus status = 7; - int32 sequence = 8; - UserJsonObject createdByUser = 9; - UserJsonObjectNull canceledByUser = 10; - string actionName = 11; - Timestamp created = 12; - Timestamp lastUpdate = 13; - TimestampNull started = 14; - TimestampNull finished = 15; - bool createdBySystem = 16; - AppVersionJsonObjectNull appVersion = 17; - -} - - -message DeleteServiceStackResponse { - Error error = 1; - DeleteServiceStackResponseDto output = 2; -} - -message DeleteServiceStackResponseDto { - string id = 1; - string clientId = 2; - string projectId = 3; - StringNull serviceStackId = 4; - ProjectLightJsonObject project = 5; - repeated ServiceStackLightJsonObject serviceStacks = 6; - ProcessStatus status = 7; - int32 sequence = 8; - UserJsonObject createdByUser = 9; - UserJsonObjectNull canceledByUser = 10; - string actionName = 11; - Timestamp created = 12; - Timestamp lastUpdate = 13; - TimestampNull started = 14; - TimestampNull finished = 15; - bool createdBySystem = 16; - AppVersionJsonObjectNull appVersion = 17; - -} - - -message GetProcessResponse { - Error error = 1; - GetProcessResponseDto output = 2; -} - -message GetProcessResponseDto { - string id = 1; - string clientId = 2; - string projectId = 14; - StringNull serviceStackId = 15; - ProjectLightJsonObject project = 3; - repeated ServiceStackLightJsonObject serviceStacks = 4; - ProcessStatus status = 5; - int32 sequence = 16; - UserJsonObject createdByUser = 6; - UserJsonObjectNull canceledByUser = 7; - string actionName = 8; - Timestamp created = 10; - Timestamp lastUpdate = 11; - TimestampNull started = 17; - TimestampNull finished = 18; - bool createdBySystem = 12; - AppVersionJsonObjectNull appVersion = 13; - -} - - -message GetProjectsByNameResponse { - Error error = 1; - GetProjectsByNameResponseDto output = 2; -} - -message GetProjectsByNameResponseDto { - repeated Project projects = 1; - -} - - -message GetServiceStackResponse { - Error error = 1; - GetServiceStackResponseDto output = 2; -} - -message GetServiceStackResponseDto { - string id = 1; - ServiceStackStatus status = 2; - string name = 3; - ServiceStackInfoJsonObject serviceStackTypeInfo = 4; - string serviceStackTypeId = 5; - string serviceStackTypeVersionId = 6; - bool isSystem = 7; - bool startOnProjectStart = 31; - GithubIntegrationNull githubIntegration = 26; - GitlabIntegrationNull gitlabIntegration = 29; - CustomAutoscalingNull customAutoscaling = 33; - repeated ServicePort ports = 8; - RequestedPortsJsonObject requestedPorts = 9; - Timestamp created = 10; - Timestamp lastUpdate = 11; - ServiceStackMode mode = 12; - bool customPortsEnabled = 13; - bool subdomainAccess = 14; - bool reloadAvailable = 15; - string versionNumber = 16; - string projectId = 32; - ProjectLight project = 17; - repeated ServiceStackConnectedServiceStack connectedStacks = 18; - repeated UserDataLight userData = 34; - AppVersionLightNull activeAppVersion = 19; - bool hasUnsyncedUserDataRecord = 20; - bool hasUnsyncedPublicHttpRoutingRecord = 21; - bool hasUnsyncedPublicPortRecord = 22; - bool hasPublicPortRoutingAccess = 24; - bool hasPublicHttpRoutingAccess = 25; - Int32Null activePublicHttpRoutingCount = 27; - Int32Null activePublicPortRoutingCount = 28; - -} - - -message GetServiceStackByNameResponse { - Error error = 1; - GetServiceStackByNameResponseDto output = 2; -} - -message GetServiceStackByNameResponseDto { - string id = 1; - ServiceStackStatus status = 2; - string name = 3; - ServiceStackInfoJsonObject serviceStackTypeInfo = 4; - string serviceStackTypeId = 5; - string serviceStackTypeVersionId = 6; - bool isSystem = 7; - bool startOnProjectStart = 31; - GithubIntegrationNull githubIntegration = 26; - GitlabIntegrationNull gitlabIntegration = 29; - CustomAutoscalingNull customAutoscaling = 33; - repeated ServicePort ports = 8; - RequestedPortsJsonObject requestedPorts = 9; - Timestamp created = 10; - Timestamp lastUpdate = 11; - ServiceStackMode mode = 12; - bool customPortsEnabled = 13; - bool subdomainAccess = 14; - bool reloadAvailable = 15; - string versionNumber = 16; - string projectId = 32; - ProjectLight project = 17; - repeated ServiceStackConnectedServiceStack connectedStacks = 18; - repeated UserDataLight userData = 34; - AppVersionLightNull activeAppVersion = 19; - bool hasUnsyncedUserDataRecord = 20; - bool hasUnsyncedPublicHttpRoutingRecord = 21; - bool hasUnsyncedPublicPortRecord = 22; - bool hasPublicPortRoutingAccess = 24; - bool hasPublicHttpRoutingAccess = 25; - Int32Null activePublicHttpRoutingCount = 27; - Int32Null activePublicPortRoutingCount = 28; - -} - - -message GetUserInfoResponse { - Error error = 1; - GetUserInfoResponseDto output = 2; -} - -message GetUserInfoResponseDto { - string id = 1; - string email = 2; - string fullName = 3; - string firstName = 4; - string lastName = 5; - UserAvatarNull avatar = 13; - Int32Null countryCallingCode = 6; - Int32Null phoneNumber = 7; - Language language = 8; - Timestamp created = 9; - Timestamp lastUpdate = 10; - UserStatus status = 11; - repeated ClientUserExtra clientUserList = 12; - bool passwordIsSet = 14; - -} - - -message PostAppVersionResponse { - Error error = 1; - PostAppVersionResponseDto output = 2; -} - -message PostAppVersionResponseDto { - string id = 1; - string clientId = 2; - string projectId = 3; - string serviceStackId = 4; - AppVersionBuildNull build = 13; - int32 sequence = 5; - AppVersionStatus status = 6; - repeated AppVersionUserData userDataList = 7; - Timestamp created = 8; - Timestamp lastUpdate = 9; - string uploadUrl = 10; - -} - - -message PostProjectImportResponse { - Error error = 1; - PostProjectImportResponseDto output = 2; -} - -message PostProjectImportResponseDto { - string projectId = 1; - string projectName = 2; - repeated ProjectImportServiceStack serviceStacks = 3; - -} - - -message PostPublicHttpRoutingResponse { - Error error = 1; - PostPublicHttpRoutingResponseDto output = 2; -} - -message PostPublicHttpRoutingResponseDto { - string id = 1; - string clientId = 2; - string projectId = 3; - bool sslEnabled = 4; - repeated PublicHttpRoutingDomain domains = 5; - repeated PublicHttpRoutingLocation locations = 6; - Timestamp created = 7; - Timestamp lastUpdate = 8; - bool isSynced = 9; - bool isEditable = 11; - bool deleteOnSync = 12; - -} - - -message PostServiceStackImportResponse { - Error error = 1; - PostServiceStackImportResponseDto output = 2; -} - -message PostServiceStackImportResponseDto { - string projectId = 1; - string projectName = 2; - repeated ProjectImportServiceStack serviceStacks = 3; - -} - - -message PostVpnRequestResponse { - Error error = 1; - PostVpnRequestResponseDto output = 2; -} - -message PostVpnRequestResponseDto { - string accessToken = 1; - Timestamp expiry = 2; - -} - - -message PutAppVersionBuildAndDeployResponse { - Error error = 1; - PutAppVersionBuildAndDeployResponseDto output = 2; -} - -message PutAppVersionBuildAndDeployResponseDto { - string id = 1; - string clientId = 2; - string projectId = 14; - StringNull serviceStackId = 15; - ProjectLightJsonObject project = 3; - repeated ServiceStackLightJsonObject serviceStacks = 4; - ProcessStatus status = 5; - int32 sequence = 16; - UserJsonObject createdByUser = 6; - UserJsonObjectNull canceledByUser = 7; - string actionName = 8; - Timestamp created = 10; - Timestamp lastUpdate = 11; - TimestampNull started = 17; - TimestampNull finished = 18; - bool createdBySystem = 12; - AppVersionJsonObjectNull appVersion = 13; - -} - - -message PutAppVersionDeployResponse { - Error error = 1; - PutAppVersionDeployResponseDto output = 2; -} - -message PutAppVersionDeployResponseDto { - string id = 1; - string clientId = 2; - string projectId = 14; - StringNull serviceStackId = 15; - ProjectLightJsonObject project = 3; - repeated ServiceStackLightJsonObject serviceStacks = 4; - ProcessStatus status = 5; - int32 sequence = 16; - UserJsonObject createdByUser = 6; - UserJsonObjectNull canceledByUser = 7; - string actionName = 8; - Timestamp created = 10; - Timestamp lastUpdate = 11; - TimestampNull started = 17; - TimestampNull finished = 18; - bool createdBySystem = 12; - AppVersionJsonObjectNull appVersion = 13; - -} - - -message PutProjectStartResponse { - Error error = 1; - PutProjectStartResponseDto output = 2; -} - -message PutProjectStartResponseDto { - string id = 1; - string clientId = 2; - string projectId = 3; - StringNull serviceStackId = 4; - ProjectLightJsonObject project = 5; - repeated ServiceStackLightJsonObject serviceStacks = 6; - ProcessStatus status = 7; - int32 sequence = 8; - UserJsonObject createdByUser = 9; - UserJsonObjectNull canceledByUser = 10; - string actionName = 11; - Timestamp created = 12; - Timestamp lastUpdate = 13; - TimestampNull started = 14; - TimestampNull finished = 15; - bool createdBySystem = 16; - AppVersionJsonObjectNull appVersion = 17; - -} - - -message PutProjectStopResponse { - Error error = 1; - PutProjectStopResponseDto output = 2; -} - -message PutProjectStopResponseDto { - string id = 1; - string clientId = 2; - string projectId = 3; - StringNull serviceStackId = 4; - ProjectLightJsonObject project = 5; - repeated ServiceStackLightJsonObject serviceStacks = 6; - ProcessStatus status = 7; - int32 sequence = 8; - UserJsonObject createdByUser = 9; - UserJsonObjectNull canceledByUser = 10; - string actionName = 11; - Timestamp created = 12; - Timestamp lastUpdate = 13; - TimestampNull started = 14; - TimestampNull finished = 15; - bool createdBySystem = 16; - AppVersionJsonObjectNull appVersion = 17; - -} - - -message PutServiceStackRestartResponse { - Error error = 1; - PutServiceStackRestartResponseDto output = 2; -} - -message PutServiceStackRestartResponseDto { - string id = 1; - string clientId = 2; - string projectId = 3; - StringNull serviceStackId = 4; - ProjectLightJsonObject project = 5; - repeated ServiceStackLightJsonObject serviceStacks = 6; - ProcessStatus status = 7; - int32 sequence = 8; - UserJsonObject createdByUser = 9; - UserJsonObjectNull canceledByUser = 10; - string actionName = 11; - Timestamp created = 12; - Timestamp lastUpdate = 13; - TimestampNull started = 14; - TimestampNull finished = 15; - bool createdBySystem = 16; - AppVersionJsonObjectNull appVersion = 17; - -} - - -message PutServiceStackStartResponse { - Error error = 1; - PutServiceStackStartResponseDto output = 2; -} - -message PutServiceStackStartResponseDto { - string id = 1; - string clientId = 2; - string projectId = 3; - StringNull serviceStackId = 4; - ProjectLightJsonObject project = 5; - repeated ServiceStackLightJsonObject serviceStacks = 6; - ProcessStatus status = 7; - int32 sequence = 8; - UserJsonObject createdByUser = 9; - UserJsonObjectNull canceledByUser = 10; - string actionName = 11; - Timestamp created = 12; - Timestamp lastUpdate = 13; - TimestampNull started = 14; - TimestampNull finished = 15; - bool createdBySystem = 16; - AppVersionJsonObjectNull appVersion = 17; - -} - - -message PutServiceStackStopResponse { - Error error = 1; - PutServiceStackStopResponseDto output = 2; -} - -message PutServiceStackStopResponseDto { - string id = 1; - string clientId = 2; - string projectId = 3; - StringNull serviceStackId = 4; - ProjectLightJsonObject project = 5; - repeated ServiceStackLightJsonObject serviceStacks = 6; - ProcessStatus status = 7; - int32 sequence = 8; - UserJsonObject createdByUser = 9; - UserJsonObjectNull canceledByUser = 10; - string actionName = 11; - Timestamp created = 12; - Timestamp lastUpdate = 13; - TimestampNull started = 14; - TimestampNull finished = 15; - bool createdBySystem = 16; - AppVersionJsonObjectNull appVersion = 17; - -} - - - - -// -// RESPONSE DTO OBJECTS -// - -message AppVersionBuild { - StringNull serviceStackId = 1; - StringNull serviceStackName = 2; - StringNull serviceStackTypeVersionId = 3; - TimestampNull pipelineStart = 10; - TimestampNull pipelineFinish = 11; - TimestampNull pipelineFailed = 12; - TimestampNull containerCreationStart = 9; - TimestampNull startDate = 4; - TimestampNull endDate = 5; - bool cacheUsed = 6; - bool hasCurrentCache = 7; - -} - -message AppVersionGithubIntegration { - AppVersionGithubIntegrationEventType eventType = 1; - StringNull branchName = 2; - string pusher = 3; - string commit = 4; - string repositoryFullName = 5; - StringNull tagName = 6; - -} - -message AppVersionGitlabIntegration { - AppVersionGitlabIntegrationEventType eventType = 1; - StringNull branchName = 2; - string pusher = 3; - string commit = 4; - string repositoryFullName = 5; - StringNull tagName = 6; - -} - -message AppVersionJsonObject { - string id = 1; - StringNull serviceStackId = 15; - StringNull projectId = 16; - AppVersionStatus status = 9; - AppVersionSource source = 2; - int32 sequence = 3; - StringNull name = 10; - TimestampNull created = 11; - AppVersionBuildNull build = 4; - PrepareCustomRuntimeNull prepareCustomRuntime = 13; - AppVersionGithubIntegrationNull githubIntegration = 5; - AppVersionGitlabIntegrationNull gitlabIntegration = 6; - UserJsonObjectNull createdByUser = 7; - TimestampNull activationDate = 8; - AppVersionPublicGitSourceNull publicGitSource = 12; - StringNull configContent = 14; - -} - -message AppVersionLight { - string id = 1; - AppVersionStatus status = 2; - Timestamp created = 3; - Timestamp lastUpdate = 4; - -} - -message AppVersionPublicGitSource { - string gitUrl = 1; - string branchName = 2; - -} - -message AppVersionUserData { - string key = 1; - string content = 2; - UserDataType type = 3; - -} - -message ClientAvatar { - StringNull largeAvatarUrl = 1; - StringNull smallAvatarUrl = 2; - StringNull externalAvatarUrl = 3; - -} - -message ClientExtra { - string id = 1; - string companyName = 2; - StringNull companyNumber = 3; - StringNull vatNumber = 4; - ClientAvatarNull avatar = 5; - string accountName = 6; - -} - -message ClientUserExtra { - string id = 1; - string clientId = 2; - string userId = 3; - ClientUserLightStatus status = 4; - ClientUserLightRoleCode roleCode = 5; - ClientExtra client = 6; - UserLight user = 7; - -} - -message CustomAutoscaling { - VerticalAutoscalingNull verticalAutoscaling = 1; - HorizontalAutoscalingNull horizontalAutoscaling = 2; - -} - -message GithubIntegration { - string userId = 1; - bool authorizationRequired = 2; - StringNull branchName = 3; - GithubIntegrationEventType eventType = 5; - bool isActive = 6; - string repositoryFullName = 7; - Int32Null webhookId = 9; - -} - -message GitlabIntegration { - string userId = 1; - bool authorizationRequired = 2; - StringNull branchName = 3; - GitlabIntegrationEventType eventType = 4; - bool isActive = 5; - string repositoryFullName = 6; - Int32Null webhookId = 7; - -} - -message HorizontalAutoscaling { - int32 maxContainerCount = 1; - int32 minContainerCount = 2; - -} - -message Language { - string id = 1; - string name = 2; - -} - -message LocationServiceStackInfo { - string serviceStackName = 1; - string serviceStackTypeName = 2; - string serviceStackTypeVersionName = 3; - -} - -message PrepareCustomRuntime { - TimestampNull containerCreationStart = 8; - TimestampNull startDate = 1; - TimestampNull endDate = 2; - StringNull serviceStackId = 5; - StringNull serviceStackName = 6; - -} - -message Process { - string id = 1; - string clientId = 2; - string projectId = 3; - StringNull serviceStackId = 4; - ProjectLightJsonObject project = 5; - repeated ServiceStackLightJsonObject serviceStacks = 6; - ProcessStatus status = 7; - int32 sequence = 8; - UserJsonObject createdByUser = 9; - UserJsonObjectNull canceledByUser = 10; - string actionName = 11; - Timestamp created = 12; - Timestamp lastUpdate = 13; - TimestampNull started = 14; - TimestampNull finished = 15; - bool createdBySystem = 16; - AppVersionJsonObjectNull appVersion = 17; - -} - -message Project { - string id = 1; - string clientId = 2; - string name = 3; - StringNull description = 4; - repeated string tagList = 5; - ProjectStatus status = 6; - Timestamp created = 7; - Timestamp lastUpdate = 8; - StringNull publicIpV4 = 9; - StringNull publicIpV6 = 10; - StringNull zeropsSubdomainHost = 13; - bool autoStartup = 14; - -} - -message ProjectImportServiceStack { - string id = 1; - string name = 2; - ErrorNull error = 3; - repeated Process processes = 4; - -} - -message ProjectLight { - string id = 1; - string clientId = 2; - string name = 3; - StringNull description = 4; - repeated string tagList = 5; - ProjectStatus status = 6; - Timestamp created = 7; - Timestamp lastUpdate = 8; - -} - -message ProjectLightJsonObject { - string id = 1; - string clientId = 2; - string name = 3; - StringNull description = 4; - repeated string tagList = 5; - ProjectStatus status = 6; - Timestamp created = 7; - Timestamp lastUpdate = 8; - -} - -message PublicHttpRoutingDomain { - string domainName = 1; - PublicHttpRoutingDomainDnsCheckStatus dnsCheckStatus = 2; - PublicHttpRoutingDomainSslStatus sslStatus = 3; - -} - -message PublicHttpRoutingLocation { - string path = 1; - int32 port = 2; - string serviceStackId = 3; - LocationServiceStackInfo serviceStackInfo = 4; - -} - -message RequestedPortsJsonObject { - bool isActive = 1; - repeated ServicePort requestedPorts = 2; - -} - -message ScalingResource { - int32 cpuCoreCount = 1; - float memoryGBytes = 2; - float diskGBytes = 3; - -} - -message ServicePort { - ServicePortProtocol protocol = 1; - int32 port = 2; - string description = 3; - ServicePortScheme scheme = 4; - StringNull serviceId = 5; - -} - -message ServiceStackConnectedServiceStack { - ServiceStackLight serviceStack = 1; - ServiceStackConnectionStatus status = 2; - -} - -message ServiceStackInfoJsonObject { - string serviceStackTypeName = 1; - ServiceStackTypeCategory serviceStackTypeCategory = 2; - string serviceStackTypeVersionName = 3; - -} - -message ServiceStackLight { - string id = 1; - ServiceStackStatus status = 2; - string name = 3; - ServiceStackInfoJsonObject serviceStackTypeInfo = 4; - string serviceStackTypeId = 5; - string serviceStackTypeVersionId = 6; - bool isSystem = 7; - bool startOnProjectStart = 11; - GithubIntegrationNull githubIntegration = 8; - GitlabIntegrationNull gitlabIntegration = 9; - CustomAutoscalingNull customAutoscaling = 12; - -} - -message ServiceStackLightJsonObject { - string id = 1; - Timestamp created = 2; - Timestamp lastUpdate = 3; - string projectId = 4; - string serviceStackTypeId = 5; - string serviceStackTypeVersionId = 6; - StringNull driverId = 7; - string name = 8; - ServiceStackInfoJsonObject serviceStackTypeInfo = 9; - repeated ServicePort ports = 10; - -} - -message UserAvatar { - StringNull largeAvatarUrl = 1; - StringNull smallAvatarUrl = 2; - StringNull externalAvatarUrl = 3; - -} - -message UserDataLight { - string id = 1; - string clientId = 2; - string projectId = 3; - string serviceStackId = 4; - string key = 5; - string content = 6; - UserDataType type = 7; - Timestamp created = 8; - Timestamp lastUpdate = 9; - bool isSynced = 10; - bool deleteOnSync = 11; - UserDataVersion version = 12; - TimestampNull lastSync = 13; - -} - -message UserJsonObject { - UserJsonObjectType type = 5; - StringNull id = 1; - StringNull email = 2; - StringNull firstName = 3; - StringNull fullName = 4; - UserAvatarNull avatar = 6; - -} - -message UserLight { - string id = 1; - string email = 2; - string fullName = 3; - string firstName = 4; - string lastName = 5; - UserAvatarNull avatar = 6; - -} - -message VerticalAutoscaling { - ScalingResource maxResource = 1; - ScalingResource minResource = 2; - -} - - -// -// ENUMS -// - -enum AppVersionGithubIntegrationEventType { - APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_UNKNOWN = 0; - APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_BRANCH = 1; - APP_VERSION_GITHUB_INTEGRATION_EVENT_TYPE_TAG = 2; - -} - -enum AppVersionGitlabIntegrationEventType { - APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_UNKNOWN = 0; - APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_BRANCH = 1; - APP_VERSION_GITLAB_INTEGRATION_EVENT_TYPE_TAG = 2; - -} - -enum AppVersionSource { - APP_VERSION_SOURCE_UNKNOWN = 0; - APP_VERSION_SOURCE_CLI = 1; - APP_VERSION_SOURCE_GUI = 2; - APP_VERSION_SOURCE_GITHUB = 3; - APP_VERSION_SOURCE_GITLAB = 4; - APP_VERSION_SOURCE_GIT = 5; - -} - -enum AppVersionStatus { - APP_VERSION_STATUS_UNKNOWN = 0; - APP_VERSION_STATUS_UPLOADING = 1; - APP_VERSION_STATUS_WAITING_TO_DEPLOY = 2; - APP_VERSION_STATUS_DEPLOYING = 3; - APP_VERSION_STATUS_DEPLOY_FAILED = 4; - APP_VERSION_STATUS_ACTIVE = 5; - APP_VERSION_STATUS_BACKUP = 6; - APP_VERSION_STATUS_BUILDING = 7; - APP_VERSION_STATUS_WAITING_TO_BUILD = 8; - APP_VERSION_STATUS_BUILD_FAILED = 9; - APP_VERSION_STATUS_PREPARING_RUNTIME = 10; - APP_VERSION_STATUS_PREPARING_RUNTIME_FAILED = 11; - APP_VERSION_STATUS_BUILD_VALIDATION_FAILED = 12; - -} - -enum ClientUserLightRoleCode { - CLIENT_USER_LIGHT_ROLE_CODE_UNKNOWN = 0; - CLIENT_USER_LIGHT_ROLE_CODE_MANAGER = 1; - -} - -enum ClientUserLightStatus { - CLIENT_USER_LIGHT_STATUS_UNKNOWN = 0; - CLIENT_USER_LIGHT_STATUS_ACTIVE = 1; - CLIENT_USER_LIGHT_STATUS_WAITING_AUTHORIZATION = 2; - CLIENT_USER_LIGHT_STATUS_BEING_DELETED = 3; - -} - -enum GithubIntegrationEventType { - GITHUB_INTEGRATION_EVENT_TYPE_UNKNOWN = 0; - GITHUB_INTEGRATION_EVENT_TYPE_BRANCH = 1; - GITHUB_INTEGRATION_EVENT_TYPE_TAG = 2; - -} - -enum GitlabIntegrationEventType { - GITLAB_INTEGRATION_EVENT_TYPE_UNKNOWN = 0; - GITLAB_INTEGRATION_EVENT_TYPE_BRANCH = 1; - GITLAB_INTEGRATION_EVENT_TYPE_TAG = 2; - -} - -enum ProcessStatus { - PROCESS_STATUS_UNKNOWN = 0; - PROCESS_STATUS_PENDING = 1; - PROCESS_STATUS_RUNNING = 2; - PROCESS_STATUS_ROLLBACKING = 3; - PROCESS_STATUS_CANCELING = 4; - PROCESS_STATUS_FINISHED = 5; - PROCESS_STATUS_FAILED = 6; - PROCESS_STATUS_CANCELED = 7; - -} - -enum ProjectStatus { - PROJECT_STATUS_UNKNOWN = 0; - PROJECT_STATUS_NEW = 1; - PROJECT_STATUS_CREATING = 2; - PROJECT_STATUS_ACTIVE = 3; - PROJECT_STATUS_DELETING = 4; - PROJECT_STATUS_FAILED = 5; - PROJECT_STATUS_STOPPING = 6; - PROJECT_STATUS_STOPPED = 7; - PROJECT_STATUS_STARTING = 8; - -} - -enum PublicHttpRoutingDomainDnsCheckStatus { - PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_UNKNOWN = 0; - PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_PENDING = 1; - PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_CHECKING = 2; - PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_OK = 3; - PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_FAILED = 4; - PUBLIC_HTTP_ROUTING_DOMAIN_DNS_CHECK_STATUS_IGNORED = 5; - -} - -enum PublicHttpRoutingDomainSslStatus { - PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_UNKNOWN = 0; - PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_INACTIVE = 1; - PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_BEING_INSTALLED = 2; - PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_WAITING_FOR_DNS = 3; - PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_ACTIVE = 4; - PUBLIC_HTTP_ROUTING_DOMAIN_SSL_STATUS_INSTALLATION_FAILED = 5; - -} - -enum ServicePortProtocol { - SERVICE_PORT_PROTOCOL_UNKNOWN = 0; - SERVICE_PORT_PROTOCOL_tcp = 1; - SERVICE_PORT_PROTOCOL_udp = 2; - -} - -enum ServicePortScheme { - SERVICE_PORT_SCHEME_UNKNOWN = 0; - SERVICE_PORT_SCHEME_tcp = 1; - SERVICE_PORT_SCHEME_udp = 2; - SERVICE_PORT_SCHEME_http = 3; - SERVICE_PORT_SCHEME_https = 4; - SERVICE_PORT_SCHEME_redis = 5; - SERVICE_PORT_SCHEME_mysql = 7; - SERVICE_PORT_SCHEME_udpinflux = 8; - SERVICE_PORT_SCHEME_mongodb = 9; - SERVICE_PORT_SCHEME_postgresql = 10; - SERVICE_PORT_SCHEME_amqp = 11; - SERVICE_PORT_SCHEME_stomp = 12; - SERVICE_PORT_SCHEME_mqtt = 13; - -} - -enum ServiceStackConnectionStatus { - SERVICE_STACK_CONNECTION_STATUS_UNKNOWN = 0; - SERVICE_STACK_CONNECTION_STATUS_CREATING = 1; - SERVICE_STACK_CONNECTION_STATUS_ACTIVE = 2; - SERVICE_STACK_CONNECTION_STATUS_DELETING = 3; - -} - -enum ServiceStackMode { - SERVICE_STACK_MODE_UNKNOWN = 0; - SERVICE_STACK_MODE_HA = 1; - SERVICE_STACK_MODE_NON_HA = 2; - -} - -enum ServiceStackStatus { - SERVICE_STACK_STATUS_UNKNOWN = 0; - SERVICE_STACK_STATUS_NEW = 1; - SERVICE_STACK_STATUS_CREATING = 2; - SERVICE_STACK_STATUS_ACTIVE = 3; - SERVICE_STACK_STATUS_STOPPING = 4; - SERVICE_STACK_STATUS_STOPPED = 5; - SERVICE_STACK_STATUS_STARTING = 6; - SERVICE_STACK_STATUS_RESTARTING = 7; - SERVICE_STACK_STATUS_RELOADING = 8; - SERVICE_STACK_STATUS_DELETING = 9; - SERVICE_STACK_STATUS_DELETED = 10; - SERVICE_STACK_STATUS_FAILED = 11; - SERVICE_STACK_STATUS_ACTION_FAILED = 29; - SERVICE_STACK_STATUS_UPGRADING = 13; - SERVICE_STACK_STATUS_READY_TO_DEPLOY = 14; - SERVICE_STACK_STATUS_SERVICE_CREATING = 18; - SERVICE_STACK_STATUS_SERVICE_ACTIVE = 35; - SERVICE_STACK_STATUS_SERVICE_STOPPING = 21; - SERVICE_STACK_STATUS_SERVICE_STOPPED = 22; - SERVICE_STACK_STATUS_SERVICE_STARTING = 23; - SERVICE_STACK_STATUS_SERVICE_RESTARTING = 24; - SERVICE_STACK_STATUS_SERVICE_RELOADING = 25; - SERVICE_STACK_STATUS_SERVICE_DELETING = 15; - SERVICE_STACK_STATUS_SERVICE_DELETED = 36; - SERVICE_STACK_STATUS_SERVICE_FAILED = 16; - SERVICE_STACK_STATUS_SERVICE_ACTION_FAILED = 28; - SERVICE_STACK_STATUS_SERVICE_REPAIRING = 17; - SERVICE_STACK_STATUS_SERVICE_CONTAINER_FAILED = 19; - SERVICE_STACK_STATUS_SERVICE_MOVING_CONTAINER = 20; - SERVICE_STACK_STATUS_SERVICE_UPGRADING = 26; - SERVICE_STACK_STATUS_SERVICE_SCALING = 37; - SERVICE_STACK_STATUS_SERVICE_REPAIR_FAILED = 38; - SERVICE_STACK_STATUS_REPAIRING = 30; - SERVICE_STACK_STATUS_CONTAINER_FAILED = 31; - SERVICE_STACK_STATUS_MOVING_CONTAINER = 32; - SERVICE_STACK_STATUS_SCALING = 33; - SERVICE_STACK_STATUS_REPAIR_FAILED = 34; - -} - -enum ServiceStackTypeCategory { - SERVICE_STACK_TYPE_CATEGORY_UNKNOWN = 0; - SERVICE_STACK_TYPE_CATEGORY_CORE = 1; - SERVICE_STACK_TYPE_CATEGORY_HTTP_L7_BALANCER = 2; - SERVICE_STACK_TYPE_CATEGORY_STANDARD = 3; - SERVICE_STACK_TYPE_CATEGORY_USER = 4; - SERVICE_STACK_TYPE_CATEGORY_SHARED_STORAGE = 5; - SERVICE_STACK_TYPE_CATEGORY_OBJECT_STORAGE = 6; - SERVICE_STACK_TYPE_CATEGORY_BUILD = 7; - SERVICE_STACK_TYPE_CATEGORY_INTERNAL = 8; - SERVICE_STACK_TYPE_CATEGORY_PREPARE_RUNTIME = 9; - -} - -enum UserDataType { - USER_DATA_TYPE_UNKNOWN = 0; - USER_DATA_TYPE_RESTRICTED = 1; - USER_DATA_TYPE_COMMON = 2; - USER_DATA_TYPE_USER = 3; - USER_DATA_TYPE_INTERNAL = 4; - -} - -enum UserDataVersion { - USER_DATA_VERSION_UNKNOWN = 0; - USER_DATA_VERSION_USER = 1; - USER_DATA_VERSION_INFRASTRUCTURE = 2; - -} - -enum UserJsonObjectType { - USER_JSON_OBJECT_TYPE_UNKNOWN = 0; - USER_JSON_OBJECT_TYPE_GITHUB = 1; - USER_JSON_OBJECT_TYPE_GITLAB = 4; - USER_JSON_OBJECT_TYPE_USER = 2; - USER_JSON_OBJECT_TYPE_SYSTEM = 3; - -} - -enum UserStatus { - USER_STATUS_UNKNOWN = 0; - USER_STATUS_ACTIVE = 1; - USER_STATUS_DELETED = 2; - -} - - - -// -// NULL TYPES -// - -message AppVersionBuildNull { - AppVersionBuild value = 1; - bool valid = 2; -} - -message AppVersionGithubIntegrationNull { - AppVersionGithubIntegration value = 1; - bool valid = 2; -} - -message AppVersionGitlabIntegrationNull { - AppVersionGitlabIntegration value = 1; - bool valid = 2; -} - -message AppVersionJsonObjectNull { - AppVersionJsonObject value = 1; - bool valid = 2; -} - -message AppVersionLightNull { - AppVersionLight value = 1; - bool valid = 2; -} - -message AppVersionPublicGitSourceNull { - AppVersionPublicGitSource value = 1; - bool valid = 2; -} - -message ClientAvatarNull { - ClientAvatar value = 1; - bool valid = 2; -} - -message CustomAutoscalingNull { - CustomAutoscaling value = 1; - bool valid = 2; -} - -message GithubIntegrationNull { - GithubIntegration value = 1; - bool valid = 2; -} - -message GitlabIntegrationNull { - GitlabIntegration value = 1; - bool valid = 2; -} - -message HorizontalAutoscalingNull { - HorizontalAutoscaling value = 1; - bool valid = 2; -} - -message Int32Null { - int32 value = 1; - bool valid = 2; -} - -message PrepareCustomRuntimeNull { - PrepareCustomRuntime value = 1; - bool valid = 2; -} - -message StringNull { - string value = 1; - bool valid = 2; -} - -message TimestampNull { - Timestamp value = 1; - bool valid = 2; -} - -message UserAvatarNull { - UserAvatar value = 1; - bool valid = 2; -} - -message UserJsonObjectNull { - UserJsonObject value = 1; - bool valid = 2; -} - -message VerticalAutoscalingNull { - VerticalAutoscaling value = 1; - bool valid = 2; -} diff --git a/src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol_grpc.pb.go b/src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol_grpc.pb.go deleted file mode 100644 index 58ae43bf..00000000 --- a/src/proto/zBusinessZeropsApiProtocol/zeropsApiProtocol_grpc.pb.go +++ /dev/null @@ -1,755 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.21.3 -// source: zeropsApiProtocol.proto - -package zBusinessZeropsApiProtocol - -import ( - context "context" - - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// 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 - -// ZBusinessZeropsApiProtocolClient is the client API for ZBusinessZeropsApiProtocol 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 ZBusinessZeropsApiProtocolClient interface { - PutAppVersionDeploy(ctx context.Context, in *PutAppVersionDeployRequest, opts ...grpc.CallOption) (*PutAppVersionDeployResponse, error) - PutAppVersionBuildAndDeploy(ctx context.Context, in *PutAppVersionBuildAndDeployRequest, opts ...grpc.CallOption) (*PutAppVersionBuildAndDeployResponse, error) - PostAppVersion(ctx context.Context, in *PostAppVersionRequest, opts ...grpc.CallOption) (*PostAppVersionResponse, error) - DeleteProject(ctx context.Context, in *DeleteProjectRequest, opts ...grpc.CallOption) (*DeleteProjectResponse, error) - GetProjectsByName(ctx context.Context, in *GetProjectsByNameRequest, opts ...grpc.CallOption) (*GetProjectsByNameResponse, error) - PutProjectStart(ctx context.Context, in *PutProjectStartRequest, opts ...grpc.CallOption) (*PutProjectStartResponse, error) - PutProjectStop(ctx context.Context, in *PutProjectStopRequest, opts ...grpc.CallOption) (*PutProjectStopResponse, error) - PostProjectImport(ctx context.Context, in *PostProjectImportRequest, opts ...grpc.CallOption) (*PostProjectImportResponse, error) - GetProcess(ctx context.Context, in *GetProcessRequest, opts ...grpc.CallOption) (*GetProcessResponse, error) - PostPublicHttpRouting(ctx context.Context, in *PostPublicHttpRoutingRequest, opts ...grpc.CallOption) (*PostPublicHttpRoutingResponse, error) - GetServiceStack(ctx context.Context, in *GetServiceStackRequest, opts ...grpc.CallOption) (*GetServiceStackResponse, error) - DeleteServiceStack(ctx context.Context, in *DeleteServiceStackRequest, opts ...grpc.CallOption) (*DeleteServiceStackResponse, error) - PutServiceStackStop(ctx context.Context, in *PutServiceStackStopRequest, opts ...grpc.CallOption) (*PutServiceStackStopResponse, error) - PutServiceStackStart(ctx context.Context, in *PutServiceStackStartRequest, opts ...grpc.CallOption) (*PutServiceStackStartResponse, error) - PutServiceStackRestart(ctx context.Context, in *PutServiceStackRestartRequest, opts ...grpc.CallOption) (*PutServiceStackRestartResponse, error) - GetServiceStackByName(ctx context.Context, in *GetServiceStackByNameRequest, opts ...grpc.CallOption) (*GetServiceStackByNameResponse, error) - PostServiceStackImport(ctx context.Context, in *PostServiceStackImportRequest, opts ...grpc.CallOption) (*PostServiceStackImportResponse, error) - GetUserInfo(ctx context.Context, in *GetUserInfoRequest, opts ...grpc.CallOption) (*GetUserInfoResponse, error) - PostVpnRequest(ctx context.Context, in *PostVpnRequestRequest, opts ...grpc.CallOption) (*PostVpnRequestResponse, error) -} - -type zBusinessZeropsApiProtocolClient struct { - cc grpc.ClientConnInterface -} - -func NewZBusinessZeropsApiProtocolClient(cc grpc.ClientConnInterface) ZBusinessZeropsApiProtocolClient { - return &zBusinessZeropsApiProtocolClient{cc} -} - -func (c *zBusinessZeropsApiProtocolClient) PutAppVersionDeploy(ctx context.Context, in *PutAppVersionDeployRequest, opts ...grpc.CallOption) (*PutAppVersionDeployResponse, error) { - out := new(PutAppVersionDeployResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutAppVersionDeploy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) PutAppVersionBuildAndDeploy(ctx context.Context, in *PutAppVersionBuildAndDeployRequest, opts ...grpc.CallOption) (*PutAppVersionBuildAndDeployResponse, error) { - out := new(PutAppVersionBuildAndDeployResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutAppVersionBuildAndDeploy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) PostAppVersion(ctx context.Context, in *PostAppVersionRequest, opts ...grpc.CallOption) (*PostAppVersionResponse, error) { - out := new(PostAppVersionResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PostAppVersion", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) DeleteProject(ctx context.Context, in *DeleteProjectRequest, opts ...grpc.CallOption) (*DeleteProjectResponse, error) { - out := new(DeleteProjectResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/DeleteProject", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) GetProjectsByName(ctx context.Context, in *GetProjectsByNameRequest, opts ...grpc.CallOption) (*GetProjectsByNameResponse, error) { - out := new(GetProjectsByNameResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/GetProjectsByName", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) PutProjectStart(ctx context.Context, in *PutProjectStartRequest, opts ...grpc.CallOption) (*PutProjectStartResponse, error) { - out := new(PutProjectStartResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutProjectStart", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) PutProjectStop(ctx context.Context, in *PutProjectStopRequest, opts ...grpc.CallOption) (*PutProjectStopResponse, error) { - out := new(PutProjectStopResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutProjectStop", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) PostProjectImport(ctx context.Context, in *PostProjectImportRequest, opts ...grpc.CallOption) (*PostProjectImportResponse, error) { - out := new(PostProjectImportResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PostProjectImport", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) GetProcess(ctx context.Context, in *GetProcessRequest, opts ...grpc.CallOption) (*GetProcessResponse, error) { - out := new(GetProcessResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/GetProcess", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) PostPublicHttpRouting(ctx context.Context, in *PostPublicHttpRoutingRequest, opts ...grpc.CallOption) (*PostPublicHttpRoutingResponse, error) { - out := new(PostPublicHttpRoutingResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PostPublicHttpRouting", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) GetServiceStack(ctx context.Context, in *GetServiceStackRequest, opts ...grpc.CallOption) (*GetServiceStackResponse, error) { - out := new(GetServiceStackResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/GetServiceStack", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) DeleteServiceStack(ctx context.Context, in *DeleteServiceStackRequest, opts ...grpc.CallOption) (*DeleteServiceStackResponse, error) { - out := new(DeleteServiceStackResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/DeleteServiceStack", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) PutServiceStackStop(ctx context.Context, in *PutServiceStackStopRequest, opts ...grpc.CallOption) (*PutServiceStackStopResponse, error) { - out := new(PutServiceStackStopResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutServiceStackStop", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) PutServiceStackStart(ctx context.Context, in *PutServiceStackStartRequest, opts ...grpc.CallOption) (*PutServiceStackStartResponse, error) { - out := new(PutServiceStackStartResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutServiceStackStart", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) PutServiceStackRestart(ctx context.Context, in *PutServiceStackRestartRequest, opts ...grpc.CallOption) (*PutServiceStackRestartResponse, error) { - out := new(PutServiceStackRestartResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutServiceStackRestart", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) GetServiceStackByName(ctx context.Context, in *GetServiceStackByNameRequest, opts ...grpc.CallOption) (*GetServiceStackByNameResponse, error) { - out := new(GetServiceStackByNameResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/GetServiceStackByName", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) PostServiceStackImport(ctx context.Context, in *PostServiceStackImportRequest, opts ...grpc.CallOption) (*PostServiceStackImportResponse, error) { - out := new(PostServiceStackImportResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PostServiceStackImport", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) GetUserInfo(ctx context.Context, in *GetUserInfoRequest, opts ...grpc.CallOption) (*GetUserInfoResponse, error) { - out := new(GetUserInfoResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/GetUserInfo", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *zBusinessZeropsApiProtocolClient) PostVpnRequest(ctx context.Context, in *PostVpnRequestRequest, opts ...grpc.CallOption) (*PostVpnRequestResponse, error) { - out := new(PostVpnRequestResponse) - err := c.cc.Invoke(ctx, "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PostVpnRequest", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// ZBusinessZeropsApiProtocolServer is the server API for ZBusinessZeropsApiProtocol service. -// All implementations must embed UnimplementedZBusinessZeropsApiProtocolServer -// for forward compatibility -type ZBusinessZeropsApiProtocolServer interface { - PutAppVersionDeploy(context.Context, *PutAppVersionDeployRequest) (*PutAppVersionDeployResponse, error) - PutAppVersionBuildAndDeploy(context.Context, *PutAppVersionBuildAndDeployRequest) (*PutAppVersionBuildAndDeployResponse, error) - PostAppVersion(context.Context, *PostAppVersionRequest) (*PostAppVersionResponse, error) - DeleteProject(context.Context, *DeleteProjectRequest) (*DeleteProjectResponse, error) - GetProjectsByName(context.Context, *GetProjectsByNameRequest) (*GetProjectsByNameResponse, error) - PutProjectStart(context.Context, *PutProjectStartRequest) (*PutProjectStartResponse, error) - PutProjectStop(context.Context, *PutProjectStopRequest) (*PutProjectStopResponse, error) - PostProjectImport(context.Context, *PostProjectImportRequest) (*PostProjectImportResponse, error) - GetProcess(context.Context, *GetProcessRequest) (*GetProcessResponse, error) - PostPublicHttpRouting(context.Context, *PostPublicHttpRoutingRequest) (*PostPublicHttpRoutingResponse, error) - GetServiceStack(context.Context, *GetServiceStackRequest) (*GetServiceStackResponse, error) - DeleteServiceStack(context.Context, *DeleteServiceStackRequest) (*DeleteServiceStackResponse, error) - PutServiceStackStop(context.Context, *PutServiceStackStopRequest) (*PutServiceStackStopResponse, error) - PutServiceStackStart(context.Context, *PutServiceStackStartRequest) (*PutServiceStackStartResponse, error) - PutServiceStackRestart(context.Context, *PutServiceStackRestartRequest) (*PutServiceStackRestartResponse, error) - GetServiceStackByName(context.Context, *GetServiceStackByNameRequest) (*GetServiceStackByNameResponse, error) - PostServiceStackImport(context.Context, *PostServiceStackImportRequest) (*PostServiceStackImportResponse, error) - GetUserInfo(context.Context, *GetUserInfoRequest) (*GetUserInfoResponse, error) - PostVpnRequest(context.Context, *PostVpnRequestRequest) (*PostVpnRequestResponse, error) - mustEmbedUnimplementedZBusinessZeropsApiProtocolServer() -} - -// UnimplementedZBusinessZeropsApiProtocolServer must be embedded to have forward compatible implementations. -type UnimplementedZBusinessZeropsApiProtocolServer struct { -} - -func (UnimplementedZBusinessZeropsApiProtocolServer) PutAppVersionDeploy(context.Context, *PutAppVersionDeployRequest) (*PutAppVersionDeployResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PutAppVersionDeploy not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) PutAppVersionBuildAndDeploy(context.Context, *PutAppVersionBuildAndDeployRequest) (*PutAppVersionBuildAndDeployResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PutAppVersionBuildAndDeploy not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) PostAppVersion(context.Context, *PostAppVersionRequest) (*PostAppVersionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PostAppVersion not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) DeleteProject(context.Context, *DeleteProjectRequest) (*DeleteProjectResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteProject not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) GetProjectsByName(context.Context, *GetProjectsByNameRequest) (*GetProjectsByNameResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetProjectsByName not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) PutProjectStart(context.Context, *PutProjectStartRequest) (*PutProjectStartResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PutProjectStart not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) PutProjectStop(context.Context, *PutProjectStopRequest) (*PutProjectStopResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PutProjectStop not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) PostProjectImport(context.Context, *PostProjectImportRequest) (*PostProjectImportResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PostProjectImport not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) GetProcess(context.Context, *GetProcessRequest) (*GetProcessResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetProcess not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) PostPublicHttpRouting(context.Context, *PostPublicHttpRoutingRequest) (*PostPublicHttpRoutingResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PostPublicHttpRouting not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) GetServiceStack(context.Context, *GetServiceStackRequest) (*GetServiceStackResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetServiceStack not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) DeleteServiceStack(context.Context, *DeleteServiceStackRequest) (*DeleteServiceStackResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteServiceStack not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) PutServiceStackStop(context.Context, *PutServiceStackStopRequest) (*PutServiceStackStopResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PutServiceStackStop not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) PutServiceStackStart(context.Context, *PutServiceStackStartRequest) (*PutServiceStackStartResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PutServiceStackStart not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) PutServiceStackRestart(context.Context, *PutServiceStackRestartRequest) (*PutServiceStackRestartResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PutServiceStackRestart not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) GetServiceStackByName(context.Context, *GetServiceStackByNameRequest) (*GetServiceStackByNameResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetServiceStackByName not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) PostServiceStackImport(context.Context, *PostServiceStackImportRequest) (*PostServiceStackImportResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PostServiceStackImport not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) GetUserInfo(context.Context, *GetUserInfoRequest) (*GetUserInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetUserInfo not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) PostVpnRequest(context.Context, *PostVpnRequestRequest) (*PostVpnRequestResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PostVpnRequest not implemented") -} -func (UnimplementedZBusinessZeropsApiProtocolServer) mustEmbedUnimplementedZBusinessZeropsApiProtocolServer() { -} - -// UnsafeZBusinessZeropsApiProtocolServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to ZBusinessZeropsApiProtocolServer will -// result in compilation errors. -type UnsafeZBusinessZeropsApiProtocolServer interface { - mustEmbedUnimplementedZBusinessZeropsApiProtocolServer() -} - -func RegisterZBusinessZeropsApiProtocolServer(s grpc.ServiceRegistrar, srv ZBusinessZeropsApiProtocolServer) { - s.RegisterService(&ZBusinessZeropsApiProtocol_ServiceDesc, srv) -} - -func _ZBusinessZeropsApiProtocol_PutAppVersionDeploy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutAppVersionDeployRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PutAppVersionDeploy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutAppVersionDeploy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PutAppVersionDeploy(ctx, req.(*PutAppVersionDeployRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_PutAppVersionBuildAndDeploy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutAppVersionBuildAndDeployRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PutAppVersionBuildAndDeploy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutAppVersionBuildAndDeploy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PutAppVersionBuildAndDeploy(ctx, req.(*PutAppVersionBuildAndDeployRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_PostAppVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PostAppVersionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PostAppVersion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PostAppVersion", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PostAppVersion(ctx, req.(*PostAppVersionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_DeleteProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteProjectRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).DeleteProject(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/DeleteProject", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).DeleteProject(ctx, req.(*DeleteProjectRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_GetProjectsByName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetProjectsByNameRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).GetProjectsByName(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/GetProjectsByName", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).GetProjectsByName(ctx, req.(*GetProjectsByNameRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_PutProjectStart_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutProjectStartRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PutProjectStart(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutProjectStart", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PutProjectStart(ctx, req.(*PutProjectStartRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_PutProjectStop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutProjectStopRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PutProjectStop(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutProjectStop", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PutProjectStop(ctx, req.(*PutProjectStopRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_PostProjectImport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PostProjectImportRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PostProjectImport(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PostProjectImport", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PostProjectImport(ctx, req.(*PostProjectImportRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_GetProcess_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetProcessRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).GetProcess(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/GetProcess", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).GetProcess(ctx, req.(*GetProcessRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_PostPublicHttpRouting_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PostPublicHttpRoutingRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PostPublicHttpRouting(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PostPublicHttpRouting", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PostPublicHttpRouting(ctx, req.(*PostPublicHttpRoutingRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_GetServiceStack_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetServiceStackRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).GetServiceStack(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/GetServiceStack", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).GetServiceStack(ctx, req.(*GetServiceStackRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_DeleteServiceStack_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteServiceStackRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).DeleteServiceStack(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/DeleteServiceStack", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).DeleteServiceStack(ctx, req.(*DeleteServiceStackRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_PutServiceStackStop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutServiceStackStopRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PutServiceStackStop(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutServiceStackStop", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PutServiceStackStop(ctx, req.(*PutServiceStackStopRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_PutServiceStackStart_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutServiceStackStartRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PutServiceStackStart(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutServiceStackStart", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PutServiceStackStart(ctx, req.(*PutServiceStackStartRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_PutServiceStackRestart_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutServiceStackRestartRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PutServiceStackRestart(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PutServiceStackRestart", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PutServiceStackRestart(ctx, req.(*PutServiceStackRestartRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_GetServiceStackByName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetServiceStackByNameRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).GetServiceStackByName(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/GetServiceStackByName", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).GetServiceStackByName(ctx, req.(*GetServiceStackByNameRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_PostServiceStackImport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PostServiceStackImportRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PostServiceStackImport(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PostServiceStackImport", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PostServiceStackImport(ctx, req.(*PostServiceStackImportRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_GetUserInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetUserInfoRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).GetUserInfo(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/GetUserInfo", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).GetUserInfo(ctx, req.(*GetUserInfoRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ZBusinessZeropsApiProtocol_PostVpnRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PostVpnRequestRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ZBusinessZeropsApiProtocolServer).PostVpnRequest(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol/PostVpnRequest", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ZBusinessZeropsApiProtocolServer).PostVpnRequest(ctx, req.(*PostVpnRequestRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// ZBusinessZeropsApiProtocol_ServiceDesc is the grpc.ServiceDesc for ZBusinessZeropsApiProtocol service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var ZBusinessZeropsApiProtocol_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocol", - HandlerType: (*ZBusinessZeropsApiProtocolServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "PutAppVersionDeploy", - Handler: _ZBusinessZeropsApiProtocol_PutAppVersionDeploy_Handler, - }, - { - MethodName: "PutAppVersionBuildAndDeploy", - Handler: _ZBusinessZeropsApiProtocol_PutAppVersionBuildAndDeploy_Handler, - }, - { - MethodName: "PostAppVersion", - Handler: _ZBusinessZeropsApiProtocol_PostAppVersion_Handler, - }, - { - MethodName: "DeleteProject", - Handler: _ZBusinessZeropsApiProtocol_DeleteProject_Handler, - }, - { - MethodName: "GetProjectsByName", - Handler: _ZBusinessZeropsApiProtocol_GetProjectsByName_Handler, - }, - { - MethodName: "PutProjectStart", - Handler: _ZBusinessZeropsApiProtocol_PutProjectStart_Handler, - }, - { - MethodName: "PutProjectStop", - Handler: _ZBusinessZeropsApiProtocol_PutProjectStop_Handler, - }, - { - MethodName: "PostProjectImport", - Handler: _ZBusinessZeropsApiProtocol_PostProjectImport_Handler, - }, - { - MethodName: "GetProcess", - Handler: _ZBusinessZeropsApiProtocol_GetProcess_Handler, - }, - { - MethodName: "PostPublicHttpRouting", - Handler: _ZBusinessZeropsApiProtocol_PostPublicHttpRouting_Handler, - }, - { - MethodName: "GetServiceStack", - Handler: _ZBusinessZeropsApiProtocol_GetServiceStack_Handler, - }, - { - MethodName: "DeleteServiceStack", - Handler: _ZBusinessZeropsApiProtocol_DeleteServiceStack_Handler, - }, - { - MethodName: "PutServiceStackStop", - Handler: _ZBusinessZeropsApiProtocol_PutServiceStackStop_Handler, - }, - { - MethodName: "PutServiceStackStart", - Handler: _ZBusinessZeropsApiProtocol_PutServiceStackStart_Handler, - }, - { - MethodName: "PutServiceStackRestart", - Handler: _ZBusinessZeropsApiProtocol_PutServiceStackRestart_Handler, - }, - { - MethodName: "GetServiceStackByName", - Handler: _ZBusinessZeropsApiProtocol_GetServiceStackByName_Handler, - }, - { - MethodName: "PostServiceStackImport", - Handler: _ZBusinessZeropsApiProtocol_PostServiceStackImport_Handler, - }, - { - MethodName: "GetUserInfo", - Handler: _ZBusinessZeropsApiProtocol_GetUserInfo_Handler, - }, - { - MethodName: "PostVpnRequest", - Handler: _ZBusinessZeropsApiProtocol_PostVpnRequest_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "zeropsApiProtocol.proto", -} diff --git a/src/region/config.go b/src/region/config.go deleted file mode 100644 index 7354c958..00000000 --- a/src/region/config.go +++ /dev/null @@ -1 +0,0 @@ -package region diff --git a/src/region/region.go b/src/region/region.go index 8147b9c1..b4707fda 100644 --- a/src/region/region.go +++ b/src/region/region.go @@ -1,63 +1,31 @@ package region import ( + "context" "encoding/json" - "errors" "sort" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/utils/httpClient" - "github.com/zeropsio/zcli/src/utils/storage" + "github.com/zeropsio/zcli/src/httpClient" ) -type Data struct { - Name string `json:"name"` - IsDefault bool `json:"isDefault"` - RestApiAddress string `json:"restApiAddress"` - GrpcApiAddress string `json:"grpcApiAddress"` - VpnApiAddress string `json:"vpnApiAddress"` - CaCertificateUrl string `json:"caCertificateUrl"` - S3StorageAddress string `json:"s3StorageAddress"` +type RegionItem struct { + Name string `json:"name"` + IsDefault bool `json:"isDefault"` + Address string `json:"address"` } type Handler struct { - client *httpClient.Handler - storage *storage.Handler[Data] + client *httpClient.Handler } -func New(client *httpClient.Handler, storage *storage.Handler[Data]) *Handler { +func New(client *httpClient.Handler) *Handler { return &Handler{ - storage: storage, - client: client, + client: client, } } -// RetrieveFromURL retrieves the region from URL, if region is empty, returns a default region -func (h *Handler) RetrieveFromURL(regionURL, region string) (Data, error) { - resp, err := h.client.Get(regionURL) - if err != nil { - return Data{}, err - } - reg, err := readRegion(region, resp.Body) - if err != nil { - return Data{}, err - } - return reg, nil -} - -// RetrieveFromURLAndSave retrieves the region using RetrieveFromURL and stores it into the file -func (h *Handler) RetrieveFromURLAndSave(regionURL, region string) (Data, error) { - reg, err := h.RetrieveFromURL(regionURL, region) - if err != nil { - return Data{}, err - } - return h.storage.Update(func(Data) Data { - return reg - }) -} - -func (h *Handler) RetrieveAllFromURL(regionURL string) ([]Data, error) { - resp, err := h.client.Get(regionURL) +func (h *Handler) RetrieveAllFromURL(ctx context.Context, regionURL string) ([]RegionItem, error) { + resp, err := h.client.Get(ctx, regionURL) if err != nil { return nil, err } @@ -77,35 +45,15 @@ func (h *Handler) RetrieveAllFromURL(regionURL string) ([]Data, error) { return regions, nil } -func (h *Handler) RetrieveFromFile() (Data, error) { - return h.storage.Data(), nil -} - -func readRegions(regionFile json.RawMessage) ([]Data, error) { - var regions []Data - err := json.Unmarshal(regionFile, ®ions) - return regions, err -} - -func readRegion(region string, regionFile json.RawMessage) (Data, error) { - regions, err := readRegions(regionFile) +func readRegions(regionFile json.RawMessage) ([]RegionItem, error) { + var regionItemsResponse response + err := json.Unmarshal(regionFile, ®ionItemsResponse) if err != nil { - return Data{}, err - } - var reg *Data - for _, r := range regions { - r := r - if r.IsDefault && region == "" { - reg = &r - } - if r.Name == region { - reg = &r - } - } - - if reg == nil { - return Data{}, errors.New(i18n.RegionNotFound) + return nil, err } + return regionItemsResponse.Items, err +} - return *reg, nil +type response struct { + Items []RegionItem `json:"items"` } diff --git a/src/cliAction/serviceLogs/constants.go b/src/serviceLogs/constants.go similarity index 83% rename from src/cliAction/serviceLogs/constants.go rename to src/serviceLogs/constants.go index d7f89087..670ad3a4 100644 --- a/src/cliAction/serviceLogs/constants.go +++ b/src/serviceLogs/constants.go @@ -4,7 +4,6 @@ const BUILD = "BUILD" const RUNTIME = "RUNTIME" const RESPONSE = "RESPONSE" const STREAM = "STREAM" -const USER = "SERVICE_STACK_TYPE_CATEGORY_USER" const APPLICATION = "APPLICATION" const WEBSERVER = "WEBSERVER" const FULL = "FULL" @@ -12,7 +11,6 @@ const SHORT = "SHORT" const JSON = "JSON" const JSONSTREAM = "JSONSTREAM" const AT = "@" -const UPLOADING = "UPLOADING" const HTTPS = "https://" const WSS = "wss://" const RFC5424 = "5424" diff --git a/src/serviceLogs/handler.go b/src/serviceLogs/handler.go new file mode 100644 index 00000000..bbe38495 --- /dev/null +++ b/src/serviceLogs/handler.go @@ -0,0 +1,39 @@ +package serviceLogs + +import ( + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" + "github.com/zeropsio/zerops-go/types/uuid" +) + +type Config struct { +} + +type Levels [8][2]string + +type RunConfig struct { + Project entity.Project + ServiceId uuid.ServiceStackId + Container entity.Container + Limit uint32 + MinSeverity string + MsgType string + Format string + FormatTemplate string + Follow bool + Levels Levels +} + +type Handler struct { + config Config + restApiClient *zeropsRestApiClient.Handler + + lastMsgId string +} + +func New(config Config, restApiClient *zeropsRestApiClient.Handler) *Handler { + return &Handler{ + config: config, + restApiClient: restApiClient, + } +} diff --git a/src/cliAction/serviceLogs/handler_checkInputValues.go b/src/serviceLogs/handler_checkInputValues.go similarity index 78% rename from src/cliAction/serviceLogs/handler_checkInputValues.go rename to src/serviceLogs/handler_checkInputValues.go index 86dc2f15..1e7b1e48 100644 --- a/src/cliAction/serviceLogs/handler_checkInputValues.go +++ b/src/serviceLogs/handler_checkInputValues.go @@ -1,11 +1,11 @@ package serviceLogs import ( - "fmt" "html/template" "strconv" "strings" + "github.com/pkg/errors" "github.com/zeropsio/zcli/src/i18n" ) @@ -40,7 +40,7 @@ func (h *Handler) checkInputValues(config RunConfig) (inputValues InputValues, e if config.Follow { mode = STREAM if format == JSON { - return inputValues, fmt.Errorf("%s", i18n.LogFormatStreamMismatch) + return inputValues, errors.New(i18n.T(i18n.LogFormatStreamMismatch)) } } return InputValues{ @@ -57,7 +57,7 @@ func (h *Handler) getLimit(config RunConfig) (limit uint32, err error) { limit = config.Limit if limit < 1 || limit > 1000 { - err = fmt.Errorf("%s", i18n.LogLimitInvalid) + err = errors.New(i18n.T(i18n.LogLimitInvalid)) return limit, err } @@ -76,11 +76,11 @@ func (h *Handler) getMinSeverity(config RunConfig) (intVal int, err error) { return key, nil } } - intVal, err = strconv.Atoi(ms) + _, err = strconv.Atoi(ms) if err != nil { - return 1, fmt.Errorf("%s %s", i18n.LogMinSeverityInvalid, i18n.LogMinSeverityStringLimitErr) + return 1, errors.Errorf("%s %s", i18n.T(i18n.LogMinSeverityInvalid), i18n.T(i18n.LogMinSeverityStringLimitErr)) } - return 1, fmt.Errorf("%s %s", i18n.LogMinSeverityInvalid, i18n.LogMinSeverityNumLimitErr) + return 1, errors.Errorf("%s %s", i18n.T(i18n.LogMinSeverityInvalid), i18n.T(i18n.LogMinSeverityNumLimitErr)) } // getFacility returns facility number based on msgType @@ -92,20 +92,20 @@ func (h *Handler) getFacility(config RunConfig) (int, error) { if mt == WEBSERVER { return 17, nil } - return 16, fmt.Errorf("%s", i18n.LogMsgTypeInvalid) + return 16, errors.New(i18n.T(i18n.LogMsgTypeInvalid)) } func (h *Handler) getFormat(config RunConfig) (string, string, error) { f, ft := strings.ToUpper(config.Format), config.FormatTemplate formatValid := f == FULL || f == SHORT || f == JSON || f == JSONSTREAM if !formatValid { - return "", "", fmt.Errorf("%s", i18n.LogFormatInvalid) + return "", "", errors.New(i18n.T(i18n.LogFormatInvalid)) } if ft == "" { return f, ft, nil } if f != FULL { - return "", "", fmt.Errorf("%s", i18n.LogFormatTemplateMismatch) + return "", "", errors.New(i18n.T(i18n.LogFormatTemplateMismatch)) } formatTemplate, err := h.checkFormat(ft) if err != nil { @@ -117,7 +117,7 @@ func (h *Handler) getFormat(config RunConfig) (string, string, error) { // e.g. --formatTemplate="{{.timestamp}} {{.priority}} {{.facility}} {{.message}}" func (h *Handler) checkFormat(ft string) (string, error) { if err := validateTemplate(ft); err != nil { - return "", fmt.Errorf("%s %s", i18n.LogFormatTemplateInvalid, err) + return "", errors.Errorf("%s %s", i18n.T(i18n.LogFormatTemplateInvalid), err) } return ft, nil } diff --git a/src/cliAction/serviceLogs/handler_formatByRfc.go b/src/serviceLogs/handler_formatByRfc.go similarity index 92% rename from src/cliAction/serviceLogs/handler_formatByRfc.go rename to src/serviceLogs/handler_formatByRfc.go index 0edae025..da10ef94 100644 --- a/src/cliAction/serviceLogs/handler_formatByRfc.go +++ b/src/serviceLogs/handler_formatByRfc.go @@ -19,8 +19,8 @@ import ( "time" ) -func getFullByRfc(logData []Data, RFC string) { - if RFC == RFC3164 { +func getFullByRfc(logData []Data, rfc string) { + if rfc == RFC3164 { for _, data := range logData { fmt.Printf("<%d>%s %s %s: %s\n", data.Priority, @@ -47,8 +47,7 @@ func getFullByRfc(logData []Data, RFC string) { // add missing 0 to have the same length for all timestamps func fixTimestamp(timestamp string) string { - missing := 27 - len(timestamp) - if missing == 0 { + if 27-len(timestamp) == 0 { return timestamp } splitVal := strings.Split(timestamp, ".") @@ -64,7 +63,7 @@ func rfc3164TimeFormat(timestamp string) string { layout := "2006-01-02T15:04:05.000000Z" timeStamp, err := time.Parse(layout, timestamp) if err != nil { - fmt.Println(err) + return err.Error() } return timeStamp.Format("Jan 02 15:04:05") } diff --git a/src/cliAction/serviceLogs/handler_formatByTemplate.go b/src/serviceLogs/handler_formatByTemplate.go similarity index 88% rename from src/cliAction/serviceLogs/handler_formatByTemplate.go rename to src/serviceLogs/handler_formatByTemplate.go index 386eb190..8ccfd762 100644 --- a/src/cliAction/serviceLogs/handler_formatByTemplate.go +++ b/src/serviceLogs/handler_formatByTemplate.go @@ -6,6 +6,7 @@ import ( "strings" "text/template" + "github.com/pkg/errors" "golang.org/x/text/cases" "golang.org/x/text/language" @@ -20,7 +21,7 @@ func getFullWithTemplate(logData []Data, formatTemplate string) error { for _, o := range logData { err := formatDataByTemplate(o, ft) if err != nil { - return fmt.Errorf("%s %s", i18n.LogFormatTemplateInvalid, err) + return errors.Errorf("%s %s", i18n.T(i18n.LogFormatTemplateInvalid), err) } } return nil @@ -46,7 +47,7 @@ func testTokens(tokens []string) error { // if any `{` characters are left, it means the items were not split by correctly rmLeft := strings.Replace(token, "{", "", 2) if strings.Contains(rmLeft, "{") { - return fmt.Errorf("%s %s", i18n.LogFormatTemplateInvalid, i18n.LogFormatTemplateNoSpace) + return errors.Errorf("%s %s", i18n.T(i18n.LogFormatTemplateInvalid), i18n.T(i18n.LogFormatTemplateNoSpace)) } } return nil diff --git a/src/cliAction/serviceLogs/handler_formatByTemplate_test.go b/src/serviceLogs/handler_formatByTemplate_test.go similarity index 100% rename from src/cliAction/serviceLogs/handler_formatByTemplate_test.go rename to src/serviceLogs/handler_formatByTemplate_test.go diff --git a/src/cliAction/serviceLogs/handler_formatLogs.go b/src/serviceLogs/handler_formatLogs.go similarity index 91% rename from src/cliAction/serviceLogs/handler_formatLogs.go rename to src/serviceLogs/handler_formatLogs.go index f7409549..357ef51b 100644 --- a/src/cliAction/serviceLogs/handler_formatLogs.go +++ b/src/serviceLogs/handler_formatLogs.go @@ -13,7 +13,8 @@ func parseResponseByFormat(jsonData Response, format, formatTemplate, mode strin logs = reverseLogs(logs) } - if format == FULL { + switch format { + case FULL: if formatTemplate != "" { if err = getFullWithTemplate(logs, formatTemplate); err != nil { return err @@ -24,11 +25,11 @@ func parseResponseByFormat(jsonData Response, format, formatTemplate, mode strin getFullByRfc(logs, RFC5424) return nil } - } else if format == SHORT { + case SHORT: for _, o := range logs { fmt.Printf("%v %s \n", o.Timestamp, o.Content) } - } else if format == JSONSTREAM { + case JSONSTREAM: for _, o := range logs { val, err := json.Marshal(o) if err != nil { @@ -36,7 +37,7 @@ func parseResponseByFormat(jsonData Response, format, formatTemplate, mode strin } fmt.Println(string(val)) } - } else { + default: val, err := json.Marshal(logs) if err != nil { return err diff --git a/src/cliAction/serviceLogs/handler_getLogs.go b/src/serviceLogs/handler_getLogs.go similarity index 97% rename from src/cliAction/serviceLogs/handler_getLogs.go rename to src/serviceLogs/handler_getLogs.go index 854b5b03..9eca8e97 100644 --- a/src/cliAction/serviceLogs/handler_getLogs.go +++ b/src/serviceLogs/handler_getLogs.go @@ -3,7 +3,7 @@ package serviceLogs import ( "context" "encoding/json" - "io/ioutil" + "io" "net/http" "time" ) @@ -50,7 +50,7 @@ func getLogs(ctx context.Context, method, url, format, formatTemplate, mode stri defer resp.Body.Close() - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) if err != nil { return err diff --git a/src/serviceLogs/handler_getServiceLogUrl.go b/src/serviceLogs/handler_getServiceLogUrl.go new file mode 100644 index 00000000..b94a3a0d --- /dev/null +++ b/src/serviceLogs/handler_getServiceLogUrl.go @@ -0,0 +1,35 @@ +package serviceLogs + +import ( + "context" + "strings" + + "github.com/pkg/errors" + "github.com/zeropsio/zerops-go/dto/output" + + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zerops-go/dto/input/path" + "github.com/zeropsio/zerops-go/types/uuid" +) + +func (h *Handler) getServiceLogResData(ctx context.Context, projectId uuid.ProjectId) (string, string, error) { + response, err := h.restApiClient.GetProjectLog(ctx, path.ProjectId{Id: projectId}) + if err != nil { + return "", "", err + } + + resOutput, err := response.Output() + if err != nil { + return "", "", errors.Errorf("%s %v", i18n.T(i18n.LogAccessFailed), err) + } + method, url := getLogRequestData(resOutput) + return method, url, nil +} + +func getLogRequestData(resOutput output.ProjectLog) (string, string) { + outputUrl := string(resOutput.Url) + urlData := strings.Split(outputUrl, " ") + method, url := urlData[0], urlData[1] + + return method, url +} diff --git a/src/cliAction/serviceLogs/handler_printLogs.go b/src/serviceLogs/handler_printLogs.go similarity index 59% rename from src/cliAction/serviceLogs/handler_printLogs.go rename to src/serviceLogs/handler_printLogs.go index 0141d9df..006f6900 100644 --- a/src/cliAction/serviceLogs/handler_printLogs.go +++ b/src/serviceLogs/handler_printLogs.go @@ -4,15 +4,23 @@ import ( "context" "fmt" "strings" + + "github.com/zeropsio/zerops-go/types/uuid" ) -func (h *Handler) printLogs(ctx context.Context, config RunConfig, inputs InputValues, containerId, logServiceId, projectId string) error { - method, url, err := h.getServiceLogResData(ctx, h.sdkConfig, projectId) +func (h *Handler) printLogs( + ctx context.Context, + inputs InputValues, + projectId uuid.ProjectId, + serviceId uuid.ServiceStackId, + containerId uuid.ContainerId, +) error { + method, url, err := h.getServiceLogResData(ctx, projectId) if err != nil { return err } - query := makeQueryParams(inputs, logServiceId, containerId) + query := makeQueryParams(inputs, serviceId, containerId) if inputs.mode == RESPONSE { err = getLogs(ctx, method, HTTPS+url+query, inputs.format, inputs.formatTemplate, inputs.mode) @@ -22,7 +30,7 @@ func (h *Handler) printLogs(ctx context.Context, config RunConfig, inputs InputV } if inputs.mode == STREAM { wsUrl := getWsUrl(url) - err := h.getLogStream(ctx, config, inputs, wsUrl, query, containerId, logServiceId, projectId) + err := h.getLogStream(ctx, inputs, projectId, serviceId, containerId, wsUrl, query) if err != nil { return err } @@ -30,9 +38,9 @@ func (h *Handler) printLogs(ctx context.Context, config RunConfig, inputs InputV return nil } -func makeQueryParams(inputs InputValues, logServiceId, containerId string) string { +func makeQueryParams(inputs InputValues, serviceId uuid.ServiceStackId, containerId uuid.ContainerId) string { query := fmt.Sprintf("&limit=%d&desc=%d&facility=%d&serviceStackId=%s", - inputs.limit, getDesc(inputs.mode), inputs.facility, logServiceId) + inputs.limit, getDesc(inputs.mode), inputs.facility, serviceId) if inputs.minSeverity != -1 { query += fmt.Sprintf("&minimumSeverity=%d", inputs.minSeverity) diff --git a/src/serviceLogs/handler_run.go b/src/serviceLogs/handler_run.go new file mode 100644 index 00000000..d91fe828 --- /dev/null +++ b/src/serviceLogs/handler_run.go @@ -0,0 +1,19 @@ +package serviceLogs + +import ( + "context" +) + +func (h *Handler) Run(ctx context.Context, config RunConfig) error { + inputs, err := h.checkInputValues(config) + if err != nil { + return err + } + + // TODO - janhajek check empty containerID + if err = h.printLogs(ctx, inputs, config.Project.ID, config.ServiceId, config.Container.ID); err != nil { + return err + } + + return nil +} diff --git a/src/cliAction/serviceLogs/handler_ws.go b/src/serviceLogs/handler_ws.go similarity index 74% rename from src/cliAction/serviceLogs/handler_ws.go rename to src/serviceLogs/handler_ws.go index 4707260f..2bd13751 100644 --- a/src/cliAction/serviceLogs/handler_ws.go +++ b/src/serviceLogs/handler_ws.go @@ -3,26 +3,35 @@ package serviceLogs import ( "context" "fmt" - "github.com/gorilla/websocket" - "github.com/zeropsio/zcli/src/i18n" "os" "os/signal" "strings" "time" + + "github.com/gorilla/websocket" + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zerops-go/types/uuid" ) func (h *Handler) getLogStream( - ctx context.Context, config RunConfig, inputs InputValues, uri, query, containerId, logServiceId, projectId string, + ctx context.Context, + inputs InputValues, + projectId uuid.ProjectId, + serviceId uuid.ServiceStackId, + containerId uuid.ContainerId, + uri, query string, ) error { url := h.updateUri(uri, query) interrupt := make(chan os.Signal, 1) // Channel to listen for interrupt signal to terminate gracefully signal.Notify(interrupt, os.Interrupt) // Notify the interrupt channel for SIGINT - conn, _, err := websocket.DefaultDialer.Dial(url, nil) + conn, reps, err := websocket.DefaultDialer.Dial(url, nil) if err != nil { - return fmt.Errorf("%s %s\n", i18n.LogReadingFailed, err.Error()) + return errors.Errorf("%s %s\n", i18n.T(i18n.LogReadingFailed), err.Error()) } + defer reps.Body.Close() defer conn.Close() done := make(chan interface{}) // Channel to indicate that the receiverHandler is done @@ -36,10 +45,13 @@ func (h *Handler) getLogStream( case <-done: // if interrupted by user if ctx.Err() != nil { - return nil + if errors.Is(ctx.Err(), context.Canceled) { + return nil + } + return err } // otherwise try to reconnect the websocket - err := h.printLogs(ctx, config, inputs, containerId, logServiceId, projectId) + err := h.printLogs(ctx, inputs, projectId, serviceId, containerId) if err != nil { return err } @@ -63,8 +75,8 @@ func (h *Handler) getLogStream( // check last message id, add it to `from` and update the ws url for reconnect func (h *Handler) updateUri(uri, query string) string { from := "" - if h.LastMsgId != "" { - from = fmt.Sprintf("&from=%s", h.LastMsgId) + if h.lastMsgId != "" { + from = fmt.Sprintf("&from=%s", h.lastMsgId) } return WSS + uri + query + from } @@ -82,7 +94,7 @@ func (h *Handler) receiveHandler(connection *websocket.Conn, format string, done } finishedByUser := strings.Contains(err.Error(), "use of closed network connection") if !finishedByUser { - errMsg := fmt.Errorf("%s %s\n", i18n.LogReadingFailed, err.Error()) + errMsg := errors.Errorf("%s %s\n", i18n.T(i18n.LogReadingFailed), err.Error()) fmt.Println(errMsg) } return @@ -96,8 +108,8 @@ func (h *Handler) printStreamLog(data []byte, format string) { jsonData, _ := parseResponse(data) // only if there is a new message coming if len(jsonData.Items) > 0 { - //update last msg ID for ws reconnection - h.LastMsgId = jsonData.Items[len(jsonData.Items)-1].Id + // update last msg ID for ws reconnection + h.lastMsgId = jsonData.Items[len(jsonData.Items)-1].Id err := parseResponseByFormat(jsonData, format, "", STREAM) if err != nil { fmt.Println(err.Error()) diff --git a/src/utils/exists.go b/src/storage/exists.go similarity index 92% rename from src/utils/exists.go rename to src/storage/exists.go index 0aaea23e..ca85b772 100644 --- a/src/utils/exists.go +++ b/src/storage/exists.go @@ -1,4 +1,4 @@ -package utils +package storage import ( "os" diff --git a/src/utils/storage/handler.go b/src/storage/handler.go similarity index 63% rename from src/utils/storage/handler.go rename to src/storage/handler.go index d5d2338a..bc127f8a 100644 --- a/src/utils/storage/handler.go +++ b/src/storage/handler.go @@ -3,10 +3,10 @@ package storage import ( "encoding/json" "os" - "path/filepath" "sync" - "github.com/zeropsio/zcli/src/utils" + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/i18n" ) type Config struct { @@ -14,9 +14,12 @@ type Config struct { } type Handler[T any] struct { + //nolint:structcheck // Why: `is unused` error is false positive config Config - data T - lock sync.RWMutex + //nolint:structcheck // Why: `is unused` error is false positive + data T + //nolint:structcheck // Why: `is unused` error is false positive + lock sync.RWMutex } func New[T any](config Config) (*Handler[T], error) { @@ -28,16 +31,9 @@ func New[T any](config Config) (*Handler[T], error) { } func (h *Handler[T]) load() error { - - dir := filepath.Dir(h.config.FilePath) - err := os.MkdirAll(dir, 0700) + storageFileExists, err := FileExists(h.config.FilePath) if err != nil { - return err - } - - storageFileExists, err := utils.FileExists(h.config.FilePath) - if err != nil { - return err + return errors.WithStack(err) } if !storageFileExists { return nil @@ -45,12 +41,21 @@ func (h *Handler[T]) load() error { f, err := os.Open(h.config.FilePath) if err != nil { - return err + return errors.WithStack(err) } defer f.Close() + // If the file is empty, set the default value and save it. + fi, err := f.Stat() + if err != nil { + return errors.WithStack(err) + } + if fi.Size() == 0 { + return h.Clear() + } + if err := json.NewDecoder(f).Decode(&h.data); err != nil { - return err + return errors.WithMessagef(err, i18n.T(i18n.UnableToDecodeJsonFile, h.config.FilePath)) } return nil @@ -76,19 +81,19 @@ func (h *Handler[T]) save(data T) error { if err := func() error { f, err := os.Create(h.config.FilePath + ".new") if err != nil { - return err + return errors.WithStack(err) } defer f.Close() if err := json.NewEncoder(f).Encode(data); err != nil { - return err + return errors.WithStack(err) } return nil }(); err != nil { return err } if err := os.Rename(h.config.FilePath+".new", h.config.FilePath); err != nil { - return err + return errors.WithStack(err) } os.Remove(h.config.FilePath + ".new") return nil diff --git a/src/utils/storage/handler_test.go b/src/storage/handler_test.go similarity index 60% rename from src/utils/storage/handler_test.go rename to src/storage/handler_test.go index 04e7bd8c..cdbf17f8 100644 --- a/src/utils/storage/handler_test.go +++ b/src/storage/handler_test.go @@ -4,12 +4,10 @@ import ( "os" "testing" - . "github.com/onsi/gomega" + "github.com/stretchr/testify/require" ) func TestStorage(t *testing.T) { - RegisterTestingT(t) - type dataObject struct { Param string } @@ -18,11 +16,11 @@ func TestStorage(t *testing.T) { storage, err := New[dataObject](Config{ FilePath: "./test", }) - Expect(err).ShouldNot(HaveOccurred()) + require.NoError(t, err) { d := storage.Data() - Expect(d.Param).To(Equal("")) + require.Equal(t, "", d.Param) } { @@ -30,8 +28,8 @@ func TestStorage(t *testing.T) { data.Param = "value" return data }) - Expect(err).ShouldNot(HaveOccurred()) - Expect(d.Param).To(Equal("value")) + require.NoError(t, err) + require.Equal(t, "value", d.Param) } } @@ -39,13 +37,12 @@ func TestStorage(t *testing.T) { storage, err := New[dataObject](Config{ FilePath: "./test", }) - Expect(err).ShouldNot(HaveOccurred()) + require.NoError(t, err) d := storage.Data() - Expect(d.Param).To(Equal("value")) + require.Equal(t, "value", d.Param) } err := os.Remove("./test") - Expect(err).ShouldNot(HaveOccurred()) - + require.NoError(t, err) } diff --git a/src/support/support.go b/src/support/support.go index 11b3aa71..b482da65 100644 --- a/src/support/support.go +++ b/src/support/support.go @@ -3,7 +3,7 @@ package support import ( "context" - "github.com/zeropsio/zcli/src/utils/uuid" + "github.com/zeropsio/zcli/src/uuid" ) type supportID struct{} diff --git a/src/utils/cmdRunner/run_test.go b/src/utils/cmdRunner/run_test.go deleted file mode 100644 index 167c64e8..00000000 --- a/src/utils/cmdRunner/run_test.go +++ /dev/null @@ -1,22 +0,0 @@ -package cmdRunner - -import ( - "errors" - "testing" - - . "github.com/onsi/gomega" -) - -func TestWrap(t *testing.T) { - RegisterTestingT(t) - - err := &execErr{ - prev: OperationNotPermitted, - exitCode: 1, - } - - Expect(errors.Is(err, OperationNotPermitted)).To(BeTrue()) - Expect(errors.Is(err, CannotFindDeviceErr)).To(BeFalse()) - Expect(err.ExitCode()).To(Equal(1)) - -} diff --git a/src/utils/params/handler.go b/src/utils/params/handler.go deleted file mode 100644 index b5708df7..00000000 --- a/src/utils/params/handler.go +++ /dev/null @@ -1,178 +0,0 @@ -package params - -import ( - "fmt" - "os" - - "github.com/zeropsio/zcli/src/constants" - - "github.com/spf13/cobra" - "github.com/spf13/viper" -) - -type Handler struct { - params map[string]interface{} - viper *viper.Viper -} - -func New() *Handler { - return &Handler{ - params: make(map[string]interface{}), - viper: viper.New(), - } -} - -func (h *Handler) getCmdId(cmd *cobra.Command, name string) string { - return cmd.Use + name -} - -func (h *Handler) RegisterString(cmd *cobra.Command, name, defaultValue, description string) { - var paramValue string - - cmd.Flags().StringVar(¶mValue, name, defaultValue, description) - - h.params[h.getCmdId(cmd, name)] = func() *string { - if cmd.Flags().Lookup(name).Changed { - return ¶mValue - } - if h.viper.GetString(name) != "" { - v := h.viper.GetString(name) - return &v - } - return ¶mValue - } -} - -func (h *Handler) RegisterBool(cmd *cobra.Command, name string, defaultValue bool, description string) { - var paramValue bool - - cmd.Flags().BoolVar(¶mValue, name, defaultValue, description) - - h.params[h.getCmdId(cmd, name)] = func() *bool { - if cmd.Flags().Lookup(name).Changed { - return ¶mValue - } - if h.viper.GetBool(name) != false { - v := h.viper.GetBool(name) - return &v - } - return ¶mValue - } -} - -func (h *Handler) RegisterPersistentString(cmd *cobra.Command, name, defaultValue, description string) { - var paramValue string - - cmd.PersistentFlags().StringVar(¶mValue, name, defaultValue, description) - h.viper.BindPFlags(cmd.PersistentFlags()) - - h.params[name] = func() *string { - if cmd.Flags().Lookup(name).Changed { - return ¶mValue - } - if h.viper.GetString(name) != "" { - v := h.viper.GetString(name) - return &v - } - return ¶mValue - } -} - -func (h *Handler) RegisterUInt32(cmd *cobra.Command, name string, defaultValue uint32, description string) { - var paramValue uint32 - - cmd.Flags().Uint32Var(¶mValue, name, defaultValue, description) - - h.params[name] = func() *uint32 { - if cmd.Flags().Lookup(name).Changed { - return ¶mValue - } - if h.viper.GetUint32(name) != 0 { - v := h.viper.GetUint32(name) - return &v - } - return ¶mValue - } -} - -func (h *Handler) GetPersistentString(name string) string { - if param, exists := h.params[name]; exists { - if v, ok := param.(func() *string); ok { - return *v() - } - return "" - } - return "" -} - -func (h *Handler) GetString(cmd *cobra.Command, name string) string { - id := h.getCmdId(cmd, name) - if param, exists := h.params[id]; exists { - if v, ok := param.(func() *string); ok { - return *v() - } - return "" - } - return "" -} - -func (h *Handler) GetStringP(cmd *cobra.Command, name string) *string { - id := h.getCmdId(cmd, name) - if param, exists := h.params[id]; exists { - if v, ok := param.(func() *string); ok { - return v() - } - } - return nil -} - -func (h *Handler) GetUint32(name string) uint32 { - if param, exists := h.params[name]; exists { - if v, ok := param.(func() *uint32); ok { - return *v() - } - return 0 - } - return 0 -} - -func (h *Handler) GetUint32P(name string) *uint32 { - if param, exists := h.params[name]; exists { - if v, ok := param.(func() *uint32); ok { - return v() - } - } - return nil -} - -func (h *Handler) GetBool(cmd *cobra.Command, name string) bool { - id := h.getCmdId(cmd, name) - if param, exists := h.params[id]; exists { - if v, ok := param.(func() *bool); ok { - return *v() - } - return false - } - return false -} - -func (h *Handler) InitViper() error { - path, err := os.Getwd() - if err != nil { - return err - } - cliStorage, err := constants.CliStorageFilepath() - if err != nil { - return err - } - h.viper.AddConfigPath(path) - h.viper.AddConfigPath(cliStorage) - h.viper.SetConfigName("zcli.config") - h.viper.AutomaticEnv() - - if err := h.viper.ReadInConfig(); err == nil { - fmt.Println("Using config file:", h.viper.ConfigFileUsed()) - } - - return nil -} diff --git a/src/utils/processChecker/checkMultiple.go b/src/utils/processChecker/checkMultiple.go deleted file mode 100644 index 87191f8d..00000000 --- a/src/utils/processChecker/checkMultiple.go +++ /dev/null @@ -1,87 +0,0 @@ -package processChecker - -import ( - "context" - "fmt" - "os" - "strings" - "sync" - "time" - - "github.com/briandowns/spinner" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" -) - -func CheckMultiple(ctx context.Context, process []string, apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient, wg *sync.WaitGroup, sp *spinner.Spinner) { - processId, name := getProcessData(process) - isRunning := false - - s := spinner.New(spinner.CharSets[32], 100*time.Millisecond) - s.HideCursor = true - defer wg.Done() - - for { - select { - case <-ctx.Done(): - return - default: - getProcessResponse, err := apiGrpcClient.GetProcess(ctx, &zBusinessZeropsApiProtocol.GetProcessRequest{ - Id: processId, - }) - if err := proto.BusinessError(getProcessResponse, err); err != nil { - fmt.Printf("\n%s failed: %v", name, err) - return - } - - processStatus := getProcessResponse.GetOutput().GetStatus() - - if processStatus == zBusinessZeropsApiProtocol.ProcessStatus_PROCESS_STATUS_RUNNING { - if !isRunning { - // stop initial progress indicator that waits for first running process - if sp.Active() { - sp.Stop() - fmt.Println(i18n.ReadyToImportServices) - } - clearLine() - fmt.Printf("%s%s %s \n", constants.Starting, name, i18n.ProcessStart) - isRunning = true - // start current service progress indicator - s.Start() - } - } - - if processStatus == zBusinessZeropsApiProtocol.ProcessStatus_PROCESS_STATUS_FINISHED { - s.Stop() - clearLine() - fmt.Printf("%s%s %s\n", constants.Success, name, i18n.ProcessEnd) - return - } - - if !(processStatus == zBusinessZeropsApiProtocol.ProcessStatus_PROCESS_STATUS_RUNNING || - processStatus == zBusinessZeropsApiProtocol.ProcessStatus_PROCESS_STATUS_PENDING) { - s.Stop() - clearLine() - fmt.Printf("! %s %s %s\n", name, i18n.ProcessInvalidStateProcess, processId) - return - } - time.Sleep(time.Second) - } - } -} - -// clear process indicator leftover when interrupted by another process -func clearLine() { - // 6 spaces equals max number of | chars in spinner to work for Windows - _, _ = fmt.Fprint(os.Stdout, "\r \r") -} - -func getProcessData(process []string) (string, string) { - processId := process[0] - action := strings.Split(process[2], ".")[1] // stack.actionName => actionName - name := process[1] + " " + action // e.g. app create - return processId, name -} diff --git a/src/utils/processChecker/checkProcess.go b/src/utils/processChecker/checkProcess.go deleted file mode 100644 index 61642201..00000000 --- a/src/utils/processChecker/checkProcess.go +++ /dev/null @@ -1,45 +0,0 @@ -package processChecker - -import ( - "context" - "fmt" - "time" - - "github.com/briandowns/spinner" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" -) - -func CheckProcess(ctx context.Context, processId string, apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient) error { - sp := spinner.New(spinner.CharSets[32], 100*time.Millisecond) - sp.Start() - defer sp.Stop() - - for { - select { - case <-ctx.Done(): - return nil - default: - getProcessResponse, err := apiGrpcClient.GetProcess(ctx, &zBusinessZeropsApiProtocol.GetProcessRequest{ - Id: processId, - }) - if err := proto.BusinessError(getProcessResponse, err); err != nil { - return err - } - - processStatus := getProcessResponse.GetOutput().GetStatus() - - if processStatus == zBusinessZeropsApiProtocol.ProcessStatus_PROCESS_STATUS_FINISHED { - return nil - } - - if !(processStatus == zBusinessZeropsApiProtocol.ProcessStatus_PROCESS_STATUS_RUNNING || - processStatus == zBusinessZeropsApiProtocol.ProcessStatus_PROCESS_STATUS_PENDING) { - return fmt.Errorf(i18n.ProcessInvalidState, getProcessResponse.GetOutput().GetId()) - } - time.Sleep(time.Second) - } - } -} diff --git a/src/utils/projectService/getClientId.go b/src/utils/projectService/getClientId.go deleted file mode 100644 index 8c3842c1..00000000 --- a/src/utils/projectService/getClientId.go +++ /dev/null @@ -1,38 +0,0 @@ -package projectService - -import ( - "context" - "errors" - "fmt" - "strings" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" -) - -func GetClientId(ctx context.Context, apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient) (string, error) { - res, err := apiGrpcClient.GetUserInfo(ctx, &zBusinessZeropsApiProtocol.GetUserInfoRequest{}) - if err := proto.BusinessError(res, err); err != nil { - return "", err - } - clients := res.GetOutput().GetClientUserList() - - if len(clients) == 0 { - return "", errors.New(i18n.MissingClientId) - } - - if len(clients) > 1 { - var out []string - - for _, client := range clients { - out = append(out, client.ClientId) - } - idList := strings.Join(out, ",") - errMsg := fmt.Errorf("%s\n%s%s", i18n.MultipleClientIds, i18n.AvailableClientIds, idList) - - return "", errMsg - } - - return clients[0].ClientId, nil -} diff --git a/src/utils/projectService/getProjectById.go b/src/utils/projectService/getProjectById.go deleted file mode 100644 index 8753e051..00000000 --- a/src/utils/projectService/getProjectById.go +++ /dev/null @@ -1,40 +0,0 @@ -package projectService - -import ( - "context" - "fmt" - "net/http" - "time" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/utils/sdkConfig" - "github.com/zeropsio/zerops-go/apiError" - "github.com/zeropsio/zerops-go/dto/input/path" - "github.com/zeropsio/zerops-go/errorCode" - "github.com/zeropsio/zerops-go/sdk" - "github.com/zeropsio/zerops-go/sdkBase" - "github.com/zeropsio/zerops-go/types/uuid" -) - -func getById(ctx context.Context, sdkConfig sdkConfig.Config, projectId string) (string, error) { - zdk := sdk.New( - sdkBase.DefaultConfig(sdkBase.WithCustomEndpoint(sdkConfig.RegionUrl)), - &http.Client{Timeout: 1 * time.Minute}, - ) - - authorizedSdk := sdk.AuthorizeSdk(zdk, sdkConfig.Token) - projectResponse, err := authorizedSdk.GetProject(ctx, path.ProjectId{Id: uuid.ProjectId(projectId)}) - if err != nil { - return "", err - } - - project, err := projectResponse.Output() - if err != nil { - if apiError.HasErrorCode(err, errorCode.ProjectNotFound) { - return "", fmt.Errorf("%s. %s", i18n.ProjectNotFound, i18n.ProjectWrongId) - } - return "", err - } - - return string(project.Id), nil -} diff --git a/src/utils/projectService/getProjectId.go b/src/utils/projectService/getProjectId.go deleted file mode 100644 index 61df3bc0..00000000 --- a/src/utils/projectService/getProjectId.go +++ /dev/null @@ -1,67 +0,0 @@ -package projectService - -import ( - "context" - "errors" - "fmt" - "strings" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "github.com/zeropsio/zcli/src/utils/sdkConfig" -) - -func GetProjectId(ctx context.Context, apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient, projectNameOrId string, sdkConfig sdkConfig.Config) (string, error) { - if projectNameOrId == "" { - return "", errors.New(i18n.ProjectNameOrIdEmpty) - } - - projects, err := getByName(ctx, apiGrpcClient, projectNameOrId) - if err != nil { - return "", err - } - - if len(projects) > 1 { - return "", getProjectSameNameErr(projects) - } - - if len(projects) == 1 { - return projects[0].GetId(), nil - } - - if len(projectNameOrId) != 22 { - return "", errors.New(i18n.ProjectNotFound) - } - - projectId, err := getById(ctx, sdkConfig, projectNameOrId) - if err != nil { - return "", err - } - - return projectId, nil -} - -func getByName(ctx context.Context, apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient, projectName string) ([]*zBusinessZeropsApiProtocol.Project, error) { - projectsResponse, err := apiGrpcClient.GetProjectsByName(ctx, &zBusinessZeropsApiProtocol.GetProjectsByNameRequest{ - Name: projectName, - }) - if err := proto.BusinessError(projectsResponse, err); err != nil { - return nil, err - } - projects := projectsResponse.GetOutput().GetProjects() - return projects, nil -} - -// return project IDs hint for projects with the same name -func getProjectSameNameErr(projects []*zBusinessZeropsApiProtocol.Project) error { - out := make([]string, len(projects)) - for i, p := range projects { - out[i] = p.GetId() - } - - idList := strings.Join(out, ", ") - errMsg := fmt.Errorf("%s\n%s%s", i18n.ProjectsWithSameName, i18n.AvailableProjectIds, idList) - - return errMsg -} diff --git a/src/utils/projectService/getService.go b/src/utils/projectService/getService.go deleted file mode 100644 index 78646178..00000000 --- a/src/utils/projectService/getService.go +++ /dev/null @@ -1,41 +0,0 @@ -package projectService - -import ( - "context" - "errors" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" -) - -func GetServiceStack(ctx context.Context, apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient, projectId string, serviceName string) (*zBusinessZeropsApiProtocol.GetServiceStackByNameResponseDto, error) { - if serviceName == "" { - return nil, errors.New(i18n.ServiceNameIsEmpty) - } - - response, err := apiGrpcClient.GetServiceStackByName(ctx, &zBusinessZeropsApiProtocol.GetServiceStackByNameRequest{ - ProjectId: projectId, - Name: serviceName, - }) - if err := proto.BusinessError(response, err); err != nil { - return nil, err - } - - return response.GetOutput(), nil -} - -func GetServiceId(ctx context.Context, apiGrpcClient zBusinessZeropsApiProtocol.ZBusinessZeropsApiProtocolClient, projectId string, serviceName string) (string, error) { - service, err := GetServiceStack(ctx, apiGrpcClient, projectId, serviceName) - if err != nil { - return "", err - } - - id := service.GetId() - - if len(id) == 0 { - return "", errors.New(i18n.ServiceNotFound) - } - - return id, nil -} diff --git a/src/utils/rw.go b/src/utils/rw.go deleted file mode 100644 index 806f0444..00000000 --- a/src/utils/rw.go +++ /dev/null @@ -1,84 +0,0 @@ -package utils - -import ( - "bufio" - "io" - "os" -) - -func SetFirstLine(path string, firstLine string) error { - lines, err := ReadLines(path) - if err != nil { - return err - } - if len(lines) == 0 || lines[0] != firstLine { - lines = append([]string{firstLine}, lines...) - err := WriteLines(path, lines) - if err != nil { - return err - } - } - - return nil -} - -func RemoveFirstLine(path string, firstLine string) error { - lines, err := ReadLines(path) - if err != nil { - return err - } - if len(lines) > 0 && lines[0] == firstLine { - lines = lines[1:] - err := WriteLines(path, lines) - if err != nil { - return err - } - } - - return nil -} - -func ReadLines(path string) (lines []string, err error) { - f, err := os.Open(path) - if err != nil { - return nil, err - } - defer f.Close() - - rd := bufio.NewReader(f) - - for { - lineB, _, err := rd.ReadLine() - line := string(lineB) - - if err == io.EOF { - if line != "" { - lines = append(lines, line) - } - break - } - if err != nil { - return nil, err - } - - lines = append(lines, line) - } - - return -} - -func WriteLines(path string, lines []string) (err error) { - f, err := os.Create(path) - if err != nil { - return err - } - defer f.Close() - - for _, line := range lines { - if _, err = f.WriteString(line + "\n"); err != nil { - return err - } - } - - return nil -} diff --git a/src/utils/sdkConfig/handler.go b/src/utils/sdkConfig/handler.go deleted file mode 100644 index ce2656f0..00000000 --- a/src/utils/sdkConfig/handler.go +++ /dev/null @@ -1,6 +0,0 @@ -package sdkConfig - -type Config struct { - Token string - RegionUrl string -} diff --git a/src/utils/vpnStatus.go b/src/utils/vpnStatus.go deleted file mode 100644 index 4a16e595..00000000 --- a/src/utils/vpnStatus.go +++ /dev/null @@ -1,31 +0,0 @@ -package utils - -import ( - "fmt" - - "github.com/zeropsio/zcli/src/proto/daemon" - - "github.com/zeropsio/zcli/src/i18n" -) - -func PrintVpnStatus(vpnStatus *daemon.VpnStatus) { - switch vpnStatus.GetTunnelState() { - case daemon.TunnelState_TUNNEL_ACTIVE: - fmt.Println(i18n.VpnStatusTunnelStatusActive) - case daemon.TunnelState_TUNNEL_SET_INACTIVE: - fmt.Println(i18n.VpnStatusTunnelStatusSetInactive) - } - - if vpnStatus.GetTunnelState() == daemon.TunnelState_TUNNEL_ACTIVE { - switch vpnStatus.GetDnsState() { - case daemon.DnsState_DNS_ACTIVE: - fmt.Println(i18n.VpnStatusDnsStatusActive) - case daemon.DnsState_DNS_SET_INACTIVE: - fmt.Println(i18n.VpnStatusDnsStatusSetInactive) - } - } - if vpnStatus.GetAdditionalInfo() != "" { - fmt.Println(i18n.VpnStatusAdditionalInfo) - fmt.Println(vpnStatus.GetAdditionalInfo()) - } -} diff --git a/src/utils/uuid/uuid.go b/src/uuid/uuid.go similarity index 82% rename from src/utils/uuid/uuid.go rename to src/uuid/uuid.go index ef322e42..a8fb7410 100644 --- a/src/utils/uuid/uuid.go +++ b/src/uuid/uuid.go @@ -3,7 +3,7 @@ package uuid import ( "encoding/base64" - uuid "github.com/satori/go.uuid" + "github.com/google/uuid" ) const encodeUUID = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789AB" @@ -11,6 +11,6 @@ const encodeUUID = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567 var encoding = base64.NewEncoding(encodeUUID) func GetShort() string { - x := uuid.NewV4() + x := uuid.New() return encoding.EncodeToString(x[:])[0:22] } diff --git a/src/uxBlock/blocks.go b/src/uxBlock/blocks.go new file mode 100644 index 00000000..e271e989 --- /dev/null +++ b/src/uxBlock/blocks.go @@ -0,0 +1,62 @@ +// Package uxBlock provides building blocks for UX and communication with a user. +package uxBlock + +import ( + "context" + + "github.com/zeropsio/zcli/src/logger" + "github.com/zeropsio/zcli/src/uxBlock/styles" +) + +//go:generate go run --mod=mod github.com/golang/mock/mockgen -source=$GOFILE -destination=$PWD/mocks/$GOFILE -package=mocks + +type UxBlocks interface { + LogDebug(message string) + PrintInfo(line styles.Line) + PrintWarning(line styles.Line) + PrintError(line styles.Line) + Table(body *TableBody, auxOptions ...TableOption) + Select(ctx context.Context, tableBody *TableBody, auxOptions ...SelectOption) ([]int, error) + Prompt( + ctx context.Context, + message string, + choices []string, + auxOptions ...PromptOption, + ) (int, error) + RunSpinners(ctx context.Context, spinners []*Spinner, auxOptions ...SpinnerOption) func() +} + +type uxBlocks struct { + outputLogger logger.Logger + debugFileLogger logger.Logger + isTerminal bool + terminalWidth int + + // ctxCancel is used to cancel the context of the command. + // Bubbles package that we use to render graphic components steals the signal handler. + // In case that I want to cancel the context of a running component, e.g. spinner, the main context is not canceled. + // Therefore, we need to pass the cancel function to the uxBlocks. + // If the graphic component is canceled, we cancel the main context. + ctxCancel context.CancelFunc +} + +func NewBlock( + outputLogger logger.Logger, + debugFileLogger logger.Logger, + isTerminal bool, + terminalWidth int, + ctxCancel context.CancelFunc, +) *uxBlocks { + // safety check + if ctxCancel == nil { + ctxCancel = func() {} + } + + return &uxBlocks{ + outputLogger: outputLogger, + debugFileLogger: debugFileLogger, + isTerminal: isTerminal, + terminalWidth: terminalWidth, + ctxCancel: ctxCancel, + } +} diff --git a/src/uxBlock/logs.go b/src/uxBlock/logs.go new file mode 100644 index 00000000..315f6503 --- /dev/null +++ b/src/uxBlock/logs.go @@ -0,0 +1,22 @@ +package uxBlock + +import "github.com/zeropsio/zcli/src/uxBlock/styles" + +func (b *uxBlocks) LogDebug(message string) { + b.debugFileLogger.Debug(message) +} + +func (b *uxBlocks) PrintInfo(line styles.Line) { + b.outputLogger.Info(line) + b.debugFileLogger.Info(line.DisableStyle()) +} + +func (b *uxBlocks) PrintWarning(line styles.Line) { + b.outputLogger.Warning(line) + b.debugFileLogger.Warning(line.DisableStyle()) +} + +func (b *uxBlocks) PrintError(line styles.Line) { + b.outputLogger.Error(line) + b.debugFileLogger.Error(line.DisableStyle()) +} diff --git a/src/uxBlock/mocks/blocks.go b/src/uxBlock/mocks/blocks.go new file mode 100644 index 00000000..045ec2d0 --- /dev/null +++ b/src/uxBlock/mocks/blocks.go @@ -0,0 +1,161 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: blocks.go + +// Package mocks is a generated GoMock package. +package mocks + +import ( + context "context" + reflect "reflect" + + gomock "github.com/golang/mock/gomock" + uxBlock "github.com/zeropsio/zcli/src/uxBlock" + styles "github.com/zeropsio/zcli/src/uxBlock/styles" +) + +// MockUxBlocks is a mock of UxBlocks interface. +type MockUxBlocks struct { + ctrl *gomock.Controller + recorder *MockUxBlocksMockRecorder +} + +// MockUxBlocksMockRecorder is the mock recorder for MockUxBlocks. +type MockUxBlocksMockRecorder struct { + mock *MockUxBlocks +} + +// NewMockUxBlocks creates a new mock instance. +func NewMockUxBlocks(ctrl *gomock.Controller) *MockUxBlocks { + mock := &MockUxBlocks{ctrl: ctrl} + mock.recorder = &MockUxBlocksMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockUxBlocks) EXPECT() *MockUxBlocksMockRecorder { + return m.recorder +} + +// LogDebug mocks base method. +func (m *MockUxBlocks) LogDebug(message string) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "LogDebug", message) +} + +// LogDebug indicates an expected call of LogDebug. +func (mr *MockUxBlocksMockRecorder) LogDebug(message interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LogDebug", reflect.TypeOf((*MockUxBlocks)(nil).LogDebug), message) +} + +// PrintError mocks base method. +func (m *MockUxBlocks) PrintError(line styles.Line) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "PrintError", line) +} + +// PrintError indicates an expected call of PrintError. +func (mr *MockUxBlocksMockRecorder) PrintError(line interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PrintError", reflect.TypeOf((*MockUxBlocks)(nil).PrintError), line) +} + +// PrintInfo mocks base method. +func (m *MockUxBlocks) PrintInfo(line styles.Line) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "PrintInfo", line) +} + +// PrintInfo indicates an expected call of PrintInfo. +func (mr *MockUxBlocksMockRecorder) PrintInfo(line interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PrintInfo", reflect.TypeOf((*MockUxBlocks)(nil).PrintInfo), line) +} + +// PrintWarning mocks base method. +func (m *MockUxBlocks) PrintWarning(line styles.Line) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "PrintWarning", line) +} + +// PrintWarning indicates an expected call of PrintWarning. +func (mr *MockUxBlocksMockRecorder) PrintWarning(line interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PrintWarning", reflect.TypeOf((*MockUxBlocks)(nil).PrintWarning), line) +} + +// Prompt mocks base method. +func (m *MockUxBlocks) Prompt(ctx context.Context, message string, choices []string, auxOptions ...uxBlock.PromptOption) (int, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx, message, choices} + for _, a := range auxOptions { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Prompt", varargs...) + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Prompt indicates an expected call of Prompt. +func (mr *MockUxBlocksMockRecorder) Prompt(ctx, message, choices interface{}, auxOptions ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx, message, choices}, auxOptions...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Prompt", reflect.TypeOf((*MockUxBlocks)(nil).Prompt), varargs...) +} + +// RunSpinners mocks base method. +func (m *MockUxBlocks) RunSpinners(ctx context.Context, spinners []*uxBlock.Spinner, auxOptions ...uxBlock.SpinnerOption) func() { + m.ctrl.T.Helper() + varargs := []interface{}{ctx, spinners} + for _, a := range auxOptions { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "RunSpinners", varargs...) + ret0, _ := ret[0].(func()) + return ret0 +} + +// RunSpinners indicates an expected call of RunSpinners. +func (mr *MockUxBlocksMockRecorder) RunSpinners(ctx, spinners interface{}, auxOptions ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx, spinners}, auxOptions...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RunSpinners", reflect.TypeOf((*MockUxBlocks)(nil).RunSpinners), varargs...) +} + +// Select mocks base method. +func (m *MockUxBlocks) Select(ctx context.Context, tableBody *uxBlock.TableBody, auxOptions ...uxBlock.SelectOption) ([]int, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx, tableBody} + for _, a := range auxOptions { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Select", varargs...) + ret0, _ := ret[0].([]int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Select indicates an expected call of Select. +func (mr *MockUxBlocksMockRecorder) Select(ctx, tableBody interface{}, auxOptions ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx, tableBody}, auxOptions...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Select", reflect.TypeOf((*MockUxBlocks)(nil).Select), varargs...) +} + +// Table mocks base method. +func (m *MockUxBlocks) Table(body *uxBlock.TableBody, auxOptions ...uxBlock.TableOption) { + m.ctrl.T.Helper() + varargs := []interface{}{body} + for _, a := range auxOptions { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Table", varargs...) +} + +// Table indicates an expected call of Table. +func (mr *MockUxBlocksMockRecorder) Table(body interface{}, auxOptions ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{body}, auxOptions...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Table", reflect.TypeOf((*MockUxBlocks)(nil).Table), varargs...) +} diff --git a/src/uxBlock/prompt.go b/src/uxBlock/prompt.go new file mode 100644 index 00000000..7a95fa8f --- /dev/null +++ b/src/uxBlock/prompt.go @@ -0,0 +1,118 @@ +package uxBlock + +import ( + "context" + "errors" + + tea "github.com/charmbracelet/bubbletea" + "github.com/charmbracelet/lipgloss" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" +) + +type promptConfig struct { +} + +type PromptOption = func(cfg *promptConfig) + +func (b *uxBlocks) Prompt( + ctx context.Context, + message string, + choices []string, + auxOptions ...PromptOption, +) (int, error) { + cfg := promptConfig{} + for _, opt := range auxOptions { + opt(&cfg) + } + + if !b.isTerminal { + b.PrintInfo(styles.InfoLine(message)) + return 0, errors.New(i18n.T(i18n.PromptAllowedOnlyInTerminal)) + } + + model := &promptModel{ + cfg: cfg, + uxBlocks: b, + message: message, + choices: choices, + } + p := tea.NewProgram(model, tea.WithoutSignalHandler(), tea.WithContext(ctx)) + + if _, err := p.Run(); err != nil { + return 0, err + } + + if model.canceled { + b.ctxCancel() + return 0, context.Canceled + } + + return model.cursor, nil +} + +type promptModel struct { + cfg promptConfig + uxBlocks *uxBlocks + message string + choices []string + cursor int + quiting bool + canceled bool +} + +func (m *promptModel) Init() tea.Cmd { + return nil +} + +func (m *promptModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + if msg, ok := msg.(tea.KeyMsg); ok { + switch msg.String() { + case "ctrl+c": + m.canceled = true + return m, tea.Quit + + case "left": + if m.cursor > 0 { + m.cursor-- + } + + case "right": + if m.cursor < len(m.choices)-1 { + m.cursor++ + } + case "enter": + m.quiting = true + + return m, tea.Quit + } + } + + return m, nil +} + +func (m *promptModel) View() string { + if m.quiting { + return "" + } + + buttonsTexts := []string{} + for i, choice := range m.choices { + if i == m.cursor { + buttonsTexts = append(buttonsTexts, styles.ActiveDialogButton().Render(choice)) + } else { + buttonsTexts = append(buttonsTexts, styles.DialogButton().Render(choice)) + } + } + + question := lipgloss.NewStyle().Width(50).Align(lipgloss.Center).Render(m.message) + buttons := lipgloss.JoinHorizontal(lipgloss.Top, buttonsTexts...) + ui := lipgloss.JoinVertical(lipgloss.Center, question, buttons) + + dialog := lipgloss.Place(0, 0, + lipgloss.Left, lipgloss.Center, + styles.DialogBox().Render(ui), + ) + + return dialog +} diff --git a/src/uxBlock/select.go b/src/uxBlock/select.go new file mode 100644 index 00000000..3495944e --- /dev/null +++ b/src/uxBlock/select.go @@ -0,0 +1,188 @@ +package uxBlock + +import ( + "context" + "errors" + "slices" + "strings" + + tea "github.com/charmbracelet/bubbletea" + "github.com/charmbracelet/lipgloss" + "github.com/charmbracelet/lipgloss/table" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock/styles" +) + +type selectConfig struct { + label string + multiSelect bool + header *TableRow +} + +func SelectLabel(label string) SelectOption { + return func(cfg *selectConfig) { + cfg.label = label + } +} + +func SelectEnableMultiSelect() SelectOption { + return func(cfg *selectConfig) { + cfg.multiSelect = true + } +} + +func SelectTableHeader(header *TableRow) SelectOption { + return func(cfg *selectConfig) { + cfg.header = header + } +} + +type SelectOption = func(cfg *selectConfig) + +func (b *uxBlocks) Select(ctx context.Context, tableBody *TableBody, auxOptions ...SelectOption) ([]int, error) { + cfg := selectConfig{} + for _, opt := range auxOptions { + opt(&cfg) + } + + if !b.isTerminal { + b.PrintInfo(styles.InfoLine(cfg.label)) + return nil, errors.New(i18n.T(i18n.SelectorAllowedOnlyInTerminal)) + } + + model := &selectModel{ + cfg: cfg, + uxBlocks: b, + tableBody: tableBody, + selected: make(map[int]struct{}), + } + p := tea.NewProgram(model, tea.WithoutSignalHandler(), tea.WithContext(ctx)) + + if _, err := p.Run(); err != nil { + return nil, err + } + + if model.canceled { + b.ctxCancel() + return nil, context.Canceled + } + + sortedSelection := make([]int, 0, len(model.selected)) + for value := range model.selected { + sortedSelection = append(sortedSelection, value) + } + slices.Sort(sortedSelection) + + return sortedSelection, nil +} + +type selectModel struct { + cfg selectConfig + uxBlocks *uxBlocks + tableBody *TableBody + cursor int + selected map[int]struct{} + quiting bool + canceled bool +} + +func (m *selectModel) Init() tea.Cmd { + return nil +} + +func (m *selectModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + // Make sure these keys always quiting + keyMsg, ok := msg.(tea.KeyMsg) + if !ok { + return m, nil + } + switch keyMsg.String() { + case "ctrl+c": + m.canceled = true + return m, tea.Quit + + case "up": + if m.cursor > 0 { + m.cursor-- + } + + case "down": + if m.cursor < len(m.tableBody.rows)-1 { + m.cursor++ + } + case "enter": + m.quiting = true + + if !m.cfg.multiSelect { + m.selected = make(map[int]struct{}) + m.selected[m.cursor] = struct{}{} + } + + return m, tea.Quit + } + + if m.cfg.multiSelect { + if keyMsg.String() == " " { + if _, ok := m.selected[m.cursor]; ok { + delete(m.selected, m.cursor) + } else { + m.selected[m.cursor] = struct{}{} + } + } + } + + return m, nil +} + +func (m *selectModel) View() string { + if m.quiting { + return "" + } + + t := table.New(). + BorderStyle(styles.InfoColor()). + Border(lipgloss.NormalBorder()). + StyleFunc(func(row, col int) lipgloss.Style { + // in case that header is present, we need to adjust row index + if m.cfg.header != nil { + row -= 1 + } + if row == m.cursor { + return styles.TableRowActive() + } + + return styles.TableRow() + }) + + if m.cfg.header != nil { + headers := make([]string, 0, len(m.cfg.header.cells)+1) + headers = append(headers, "") + for _, header := range m.cfg.header.cells { + headers = append(headers, strings.ToUpper(header.Text)) + } + t = t.Headers(headers...) + } + + for rowIndex, row := range m.tableBody.rows { + cells := make([]string, 0, len(row.cells)+1) + icon := " " + if rowIndex == m.cursor { + icon = styles.SelectIcon + } + cells = append(cells, icon) + + for _, cell := range row.cells { + cells = append(cells, cell.Text) + } + t = t.Row(cells...) + } + + s := "" + if m.cfg.label != "" { + s = styles.SelectLine(m.cfg.label).String() + "\n" + } + + t.Width(calculateTableWidth(t, m.uxBlocks.terminalWidth)) + + return s + t.String() +} diff --git a/src/uxBlock/showcase/main.go b/src/uxBlock/showcase/main.go new file mode 100644 index 00000000..f27df34d --- /dev/null +++ b/src/uxBlock/showcase/main.go @@ -0,0 +1,168 @@ +package main + +import ( + "context" + "fmt" + "os" + "os/signal" + "syscall" + "time" + + "github.com/mattn/go-isatty" + "github.com/zeropsio/zcli/src/logger" + "github.com/zeropsio/zcli/src/uxBlock" + . "github.com/zeropsio/zcli/src/uxBlock/styles" + "golang.org/x/term" +) + +func main() { + ctx, cancel := context.WithCancel(context.Background()) + regSignals(cancel) + + blocks := createBlocks(cancel) + + do(ctx, blocks) +} + +func do(ctx context.Context, blocks uxBlock.UxBlocks) { + prompts(ctx, blocks) + spinners(ctx, blocks) + texts(ctx, blocks) + tables(ctx, blocks) +} + +func spinners(ctx context.Context, blocks uxBlock.UxBlocks) { + { + fmt.Println("========= spinners block =========") + + spinner1 := uxBlock.NewSpinner(NewLine("Running 1")) + spinner2 := uxBlock.NewSpinner(NewLine("Running 2")) + spinner3 := uxBlock.NewSpinner(NewLine("Running 3")) + + stop := blocks.RunSpinners(ctx, []*uxBlock.Spinner{spinner1, spinner2, spinner3}) + + counter := 0 + tick := time.NewTicker(time.Second * 1) + defer tick.Stop() + for { + select { + case <-ctx.Done(): + return + case <-tick.C: + counter++ + if counter == 2 { + spinner2.Finish(SuccessLine("Finished successfully")) + } + if counter == 4 { + spinner1.Finish(ErrorLine("finished with error")) + } + if counter == 6 { + spinner3.Finish(WarningLine("Finish with warning")) + } + } + if counter == 6 { + break + } + } + + stop() + + fmt.Println("========= spinners block end =========") + } +} + +func prompts(ctx context.Context, blocks uxBlock.UxBlocks) { + fmt.Println("========= prompt block =========") + choices := []string{"yes", "no", "maybe"} + choice, err := blocks.Prompt(ctx, "Question?", choices) + if err != nil { + return + } + + blocks.PrintInfo(InfoWithValueLine("selected", choices[choice])) + + fmt.Println("========= prompt block end =========") +} + +func texts(_ context.Context, blocks uxBlock.UxBlocks) { + fmt.Println("========= texts block =========") + blocks.PrintInfo(NewLine("line without style")) + blocks.PrintInfo(InfoLine("info line")) + blocks.PrintInfo(InfoWithValueLine("info line", "value")) + blocks.PrintInfo(SuccessLine("success line")) + blocks.PrintWarning(WarningLine("warning line")) + blocks.PrintError(ErrorLine("Error line")) + blocks.PrintInfo(SelectLine("Select line")) + blocks.PrintInfo(NewLine(WarningText("NewLine"), " with ", InfoIcon, InfoText("mixed"), " ", ErrorText("styles"))) + fmt.Println("========= texts block end =========") +} + +func tables(ctx context.Context, blocks uxBlock.UxBlocks) { + fmt.Println("========= table selection block =========") + + tableData := [][]string{ + {"lorem", "ipsum", "dolor", "sit"}, + { + "amet", + "lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + "adipiscing", + "elit", + }, + {"sed", "do", "eiusmod", "tempor"}, + {"incididunt", "ut", "labore", "et"}, + } + + body := uxBlock.NewTableBody().AddStringsRows(tableData...) + + line, err := blocks.Select( + ctx, + body, + uxBlock.SelectTableHeader(uxBlock.NewTableRow().AddStringCells("header1", "header2", "header3", "header4")), + uxBlock.SelectLabel("Select line"), + ) + if err != nil { + return + } + + blocks.PrintInfo(InfoWithValueLine("selected", tableData[line[0]][0])) + + fmt.Println("========= table selection end =========") + fmt.Println("========= print table block =========") + + blocks.PrintInfo(InfoLine("printing table")) + blocks.Table(body, uxBlock.WithTableHeader(uxBlock.NewTableRow().AddStringCells("header1", "header2", "header3", "header4"))) + + fmt.Println("========= print table block end =========") +} + +func regSignals(contextCancel func()) { + sigs := make(chan os.Signal, 1) + + signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) + + go func() { + <-sigs + contextCancel() + }() +} + +func createBlocks(contextCancelFunc func()) uxBlock.UxBlocks { + isTerminal := isatty.IsTerminal(os.Stdout.Fd()) || isatty.IsCygwinTerminal(os.Stdout.Fd()) + + outputLogger := logger.NewOutputLogger(logger.OutputConfig{ + IsTerminal: isTerminal, + }) + + width, _, err := term.GetSize(0) + if err != nil { + width = 100 + } + + debugFileLogger := logger.NewDebugFileLogger(logger.DebugFileConfig{ + FilePath: "zerops.log", + }) + + blocks := uxBlock.NewBlock(outputLogger, debugFileLogger, isTerminal, width, contextCancelFunc) + + return blocks +} diff --git a/src/uxBlock/showcase/zerops.log b/src/uxBlock/showcase/zerops.log new file mode 100755 index 00000000..f539dad8 --- /dev/null +++ b/src/uxBlock/showcase/zerops.log @@ -0,0 +1,54 @@ +time="2023-12-15T15:17:38+01:00" level=info msg="Normal line" +time="2023-12-15T15:17:38+01:00" level=info msg="✅ Success line" +time="2023-12-15T15:17:38+01:00" level=info msg="⚠️ Warning line" +time="2023-12-15T15:17:38+01:00" level=info msg="❌ Error line" +time="2023-12-15T15:17:38+01:00" level=info msg="ℹ️ Info line" +time="2023-12-15T15:17:38+01:00" level=info msg="ℹ️ xx" +time="2023-12-15T15:17:38+01:00" level=info msg="errortextInfo linesuccesstext" +time="2023-12-15T15:19:24+01:00" level=info msg="Normal line" +time="2023-12-15T15:19:24+01:00" level=info msg="✅ Success line" +time="2023-12-15T15:19:24+01:00" level=info msg="⚠️ Warning line" +time="2023-12-15T15:19:24+01:00" level=info msg="❌ Error line" +time="2023-12-15T15:19:24+01:00" level=info msg="ℹ️ Info line" +time="2023-12-15T15:19:24+01:00" level=info msg="errortextInfo linesuccesstext" +time="2023-12-15T15:19:45+01:00" level=info msg="Normal line" +time="2023-12-15T15:19:45+01:00" level=info msg="✅ Success line" +time="2023-12-15T15:19:45+01:00" level=info msg="⚠️ Warning line" +time="2023-12-15T15:19:45+01:00" level=info msg="❌ Error line" +time="2023-12-15T15:19:45+01:00" level=info msg="ℹ️ Info line" +time="2023-12-15T15:19:45+01:00" level=info msg="errortextInfo linesuccesstext" +time="2023-12-15T19:56:12+01:00" level=info msg="Normal line" +time="2023-12-15T19:56:12+01:00" level=info msg="✅ Success line" +time="2023-12-15T19:56:12+01:00" level=info msg="⚠️ Warning line" +time="2023-12-15T19:56:12+01:00" level=error msg="❌ Error line" +time="2023-12-15T19:56:12+01:00" level=info msg="ℹ️ Info line" +time="2023-12-15T19:56:12+01:00" level=info msg="errortextInfo linesuccesstext" +time="2023-12-15T19:56:58+01:00" level=info msg="[Done]" +time="2023-12-15T19:58:52+01:00" level=info msg=Done +time="2023-12-15T20:44:41+01:00" level=info msg="\x1b[38;5;47mFinished \x1b[0msome action name" +time="2023-12-15T20:44:47+01:00" level=info msg="\x1b[38;5;47mFinished \x1b[0msome action name" +time="2023-12-15T20:45:24+01:00" level=info msg="✅ \x1b[38;5;47mFinished \x1b[0msome action name" +time="2023-12-15T20:45:53+01:00" level=info msg="✅ \x1b[38;5;47mFinished \x1b[0msome action name" +time="2023-12-15T20:45:57+01:00" level=info msg="✅ \x1b[38;5;47mFinished \x1b[0msome action name" +time="2023-12-15T20:56:12+01:00" level=info msg="Normal line" +time="2023-12-15T20:56:12+01:00" level=info msg="✅ Success line" +time="2023-12-15T20:56:12+01:00" level=warning msg="⚠️ Warning line" +time="2023-12-15T20:56:12+01:00" level=error msg="❌ Error line" +time="2023-12-15T20:56:12+01:00" level=info msg="ℹ️ Info line" +time="2023-12-15T20:56:12+01:00" level=info msg="errortextInfo linesuccesstext" +time="2023-12-15T20:56:16+01:00" level=info msg="❔ selected: lorem" +time="2023-12-15T20:56:16+01:00" level=info msg="printing table" +time="2023-12-15T20:56:18+01:00" level=info msg="✅ \x1b[38;5;47mFinished \x1b[0msome action name" +time="2023-12-15T20:56:20+01:00" level=info msg="✅ Downloading something" +time="2023-12-15T20:58:57+01:00" level=info msg="Normal line" +time="2023-12-15T20:58:57+01:00" level=info msg="✅ Success line" +time="2023-12-15T20:58:57+01:00" level=warning msg="⚠️ Warning line" +time="2023-12-15T20:58:57+01:00" level=error msg="❌ Error line" +time="2023-12-15T20:58:57+01:00" level=info msg="ℹ️ Info line" +time="2023-12-15T20:58:57+01:00" level=info msg="errortextInfo linesuccesstext" +time="2023-12-15T20:59:01+01:00" level=info msg="❔ selected: lorem" +time="2023-12-15T20:59:01+01:00" level=info msg="printing table" +time="2023-12-15T20:59:03+01:00" level=info msg="✅ \x1b[38;5;47mFinished \x1b[0msome action name" +time="2023-12-15T20:59:05+01:00" level=info msg="✅ Downloading something" +time="2023-12-16T21:21:30+01:00" level=info msg="✅ Downloading something" +time="2023-12-16T21:21:35+01:00" level=info msg="✅ Downloading something" diff --git a/src/uxBlock/spinner.go b/src/uxBlock/spinner.go new file mode 100644 index 00000000..64e58e3e --- /dev/null +++ b/src/uxBlock/spinner.go @@ -0,0 +1,178 @@ +package uxBlock + +import ( + "context" + "sync" + + bubblesSpinner "github.com/charmbracelet/bubbles/spinner" + tea "github.com/charmbracelet/bubbletea" + "github.com/zeropsio/zcli/src/uxBlock/styles" +) + +func (b *uxBlocks) RunSpinners(ctx context.Context, spinners []*Spinner, auxOptions ...SpinnerOption) func() { + cfg := spinnerConfig{} + for _, opt := range auxOptions { + opt(&cfg) + } + + if !b.isTerminal { + return func() { + for _, spinner := range spinners { + b.PrintInfo(spinner.line) + } + } + } + + model := &spinnerModel{ + cfg: cfg, + uxBlocks: b, + spinners: spinners, + } + + p := tea.NewProgram(model, tea.WithoutSignalHandler(), tea.WithContext(ctx)) + go func() { + //nolint:errcheck // Why: I'm not interest in the error + p.Run() + if model.canceled { + b.ctxCancel() + } + }() + + return func() { + p.Send(spinnerEndCmd{}) + p.Wait() + } +} + +type spinnerEndCmd struct { +} + +type spinnerModel struct { + cfg spinnerConfig + spinners []*Spinner + uxBlocks *uxBlocks + + quiting bool + canceled bool +} + +type MergeMessage []tea.Cmd + +func XXX(cmdList ...tea.Cmd) func() tea.Msg { + return func() tea.Msg { + return MergeMessage(cmdList) + } +} +func (m *spinnerModel) Init() tea.Cmd { + ticks := make([]tea.Cmd, len(m.spinners)) + for i := range m.spinners { + ticks[i] = m.spinners[i].init() + } + + return XXX(ticks...) +} + +func (m *spinnerModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + switch msg := msg.(type) { + case spinnerEndCmd: + m.quiting = true + return m, tea.Quit + + case tea.KeyMsg: + if msg.String() == "ctrl+c" { + m.canceled = true + m.quiting = true + return m, tea.Quit + } + + case MergeMessage: + cmdList := make([]tea.Cmd, len(msg)) + + var lock sync.Mutex + + wg := sync.WaitGroup{} + for i := range msg { + wg.Add(1) + go func(i int) { + defer wg.Done() + + var teaMsg tea.Msg + if msg[i] != nil { + teaMsg = msg[i]() + } + + cmd := m.spinners[i].update(teaMsg) + + lock.Lock() + cmdList[i] = cmd + lock.Unlock() + }(i) + } + wg.Wait() + return m, XXX(cmdList...) + } + return m, nil +} + +func (m *spinnerModel) View() string { + var s string + for _, spinner := range m.spinners { + if m.canceled { + s += "canceled\n" + } else { + s += spinner.view() + spinner.line.String() + "\n" + } + } + + return s +} + +type spinnerConfig struct { +} + +type SpinnerOption = func(cfg *spinnerConfig) + +type Spinner struct { + line styles.Line + finished bool + spinner bubblesSpinner.Model +} + +func NewSpinner(line styles.Line) *Spinner { + return &Spinner{ + line: line, + spinner: bubblesSpinner.New(bubblesSpinner.WithSpinner(bubblesSpinner.MiniDot)), + } +} + +func (s *Spinner) SetMessage(text styles.Line) *Spinner { + s.line = text + + return s +} + +func (s *Spinner) Finish(text styles.Line) *Spinner { + s.line = text + s.finished = true + + return s +} + +func (s *Spinner) init() func() tea.Msg { + return s.spinner.Tick +} + +func (s *Spinner) update(msg tea.Msg) (cmd tea.Cmd) { + if !s.finished { + s.spinner, cmd = s.spinner.Update(msg) + } + return +} + +func (s *Spinner) view() string { + if !s.finished { + return s.spinner.View() + " " + } + + return "" +} diff --git a/src/uxBlock/styles/helpers.go b/src/uxBlock/styles/helpers.go new file mode 100644 index 00000000..e3f97991 --- /dev/null +++ b/src/uxBlock/styles/helpers.go @@ -0,0 +1,47 @@ +package styles + +import "github.com/charmbracelet/lipgloss" + +func SuccessLine(text string) Line { + return NewLine(SuccessText(SuccessIcon), " ", SuccessPrefix(), " ", SuccessText(text)) +} + +func InfoWithValueLine(text string, value string) Line { + return NewLine(InfoText(InfoIcon), " ", InfoPrefix(), " ", InfoText(text), ": ", SelectText(value)) +} + +func InfoLine(text string) Line { + return NewLine(InfoText(InfoIcon), " ", InfoPrefix(), " ", InfoText(text)) +} + +func WarningLine(text string) Line { + return NewLine(WarningText(WarningIcon), " ", WarningPrefix(), " ", WarningText(text)) +} + +func ErrorLine(text string) Line { + return NewLine(ErrorText(ErrorIcon), " ", ErrorPrefix(), " ", ErrorText(text)) +} + +func SelectLine(text string) Line { + return NewLine(SelectText(SelectIcon), " ", SelectPrefix(), " ", InfoText(text)) +} + +func ErrorText(text string) lipgloss.Style { + return ErrorColor().SetString(text) +} + +func SuccessText(text string) lipgloss.Style { + return SuccessColor().SetString(text) +} + +func WarningText(text string) lipgloss.Style { + return WarningColor().SetString(text) +} + +func InfoText(text string) lipgloss.Style { + return InfoColor().SetString(text) +} + +func SelectText(text string) lipgloss.Style { + return SelectColor().SetString(text) +} diff --git a/src/uxBlock/styles/line.go b/src/uxBlock/styles/line.go new file mode 100644 index 00000000..48836396 --- /dev/null +++ b/src/uxBlock/styles/line.go @@ -0,0 +1,50 @@ +package styles + +import ( + "fmt" + + "github.com/charmbracelet/lipgloss" +) + +type Line struct { + args []interface{} + styles bool +} + +func NewLine(args ...interface{}) Line { + return Line{ + args: args, + styles: true, + } +} + +func (l Line) DisableStyle() Line { + l.styles = false + return l +} + +func (l Line) Merge(lines ...Line) Line { + for _, line := range lines { + l.args = append(l.args, line.args...) + } + return l +} + +func (l Line) NotEmpty() bool { + return len(l.args) > 0 +} + +func (l Line) String() string { + args := l.args + + for i, arg := range args { + if typed, ok := arg.(lipgloss.Style); ok { + if l.styles { + args[i] = typed.String() + } else { + args[i] = typed.Value() + } + } + } + return fmt.Sprint(args...) +} diff --git a/src/uxBlock/styles/styles.go b/src/uxBlock/styles/styles.go new file mode 100644 index 00000000..6abba119 --- /dev/null +++ b/src/uxBlock/styles/styles.go @@ -0,0 +1,186 @@ +package styles + +import ( + "os" + + "github.com/charmbracelet/lipgloss" +) + +const ( + SuccessIcon = "✔" + ErrorIcon = "✗" + SelectIcon = "➔" + InfoIcon = "➤" + WarningIcon = "!" +) + +var defaultRender = lipgloss.NewRenderer(os.Stdout) + +func defaultStyle() lipgloss.Style { + return lipgloss.NewStyle().Renderer(defaultRender) +} + +func SuccessPrefix() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#FFFFFF", ANSI256: "231", ANSI: "97"}, + Dark: lipgloss.CompleteColor{TrueColor: "#000000", ANSI256: "0", ANSI: "0"}, + }). + Background(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#66bb6a", ANSI256: "114", ANSI: "32"}, + Dark: lipgloss.CompleteColor{TrueColor: "#66bb6a", ANSI256: "114", ANSI: "32"}, + }). + PaddingLeft(1).PaddingRight(1). + SetString("DONE") +} + +func SuccessColor() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#66bb6a", ANSI256: "114", ANSI: "32"}, + Dark: lipgloss.CompleteColor{TrueColor: "#66bb6a", ANSI256: "114", ANSI: "32"}, + }) +} + +func ErrorPrefix() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#FFFFFF", ANSI256: "231", ANSI: "97"}, + Dark: lipgloss.CompleteColor{TrueColor: "#000000", ANSI256: "0", ANSI: "0"}, + }). + Background(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#ff1b16", ANSI256: "196", ANSI: "91"}, + Dark: lipgloss.CompleteColor{TrueColor: "#ff1b16", ANSI256: "196", ANSI: "91"}, + }). + PaddingLeft(1).PaddingRight(1). + SetString("ERR") +} + +func ErrorColor() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#ff1b16", ANSI256: "196", ANSI: "91"}, + Dark: lipgloss.CompleteColor{TrueColor: "#ff1b16", ANSI256: "196", ANSI: "91"}, + }) +} + +func WarningPrefix() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#FFFFFF", ANSI256: "231", ANSI: "97"}, + Dark: lipgloss.CompleteColor{TrueColor: "#000000", ANSI256: "0", ANSI: "0"}, + }). + Background(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#ffa726", ANSI256: "216", ANSI: "93"}, + Dark: lipgloss.CompleteColor{TrueColor: "#ffa726", ANSI256: "216", ANSI: "93"}, + }). + PaddingLeft(1).PaddingRight(1). + SetString("WARN") +} + +func WarningColor() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#ffa726", ANSI256: "216", ANSI: "93"}, + Dark: lipgloss.CompleteColor{TrueColor: "#ffa726", ANSI256: "216", ANSI: "93"}, + }) +} + +func InfoPrefix() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#FFFFFF", ANSI256: "231", ANSI: "97"}, + Dark: lipgloss.CompleteColor{TrueColor: "#000000", ANSI256: "0", ANSI: "0"}, + }). + Background(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#e6e7ec", ANSI256: "231", ANSI: "37"}, + Dark: lipgloss.CompleteColor{TrueColor: "#e6e7ec", ANSI256: "231", ANSI: "37"}, + }). + PaddingLeft(1).PaddingRight(1). + SetString("INFO") +} + +func InfoColor() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#e6e7ec", ANSI256: "231", ANSI: "37"}, + Dark: lipgloss.CompleteColor{TrueColor: "#e6e7ec", ANSI256: "231", ANSI: "37"}, + }) +} + +func SelectPrefix() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#FFFFFF", ANSI256: "231", ANSI: "97"}, + Dark: lipgloss.CompleteColor{TrueColor: "#000000", ANSI256: "0", ANSI: "0"}, + }). + Background(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#07c", ANSI256: "27", ANSI: "30"}, + Dark: lipgloss.CompleteColor{TrueColor: "#07c", ANSI256: "27", ANSI: "30"}, + }). + PaddingLeft(1).PaddingRight(1). + SetString("SELECT") +} + +func SelectColor() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#07c", ANSI256: "27", ANSI: "30"}, + Dark: lipgloss.CompleteColor{TrueColor: "#07c", ANSI256: "27", ANSI: "30"}, + }) +} + +func CobraSectionColor() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#cc0077", ANSI256: "162", ANSI: "31"}, + Dark: lipgloss.CompleteColor{TrueColor: "#cc0077", ANSI256: "162", ANSI: "31"}, + }) +} + +func CobraItemNameColor() lipgloss.Style { + return defaultStyle(). + Foreground(lipgloss.CompleteAdaptiveColor{ + Light: lipgloss.CompleteColor{TrueColor: "#00ccbb", ANSI256: "44", ANSI: "36"}, + Dark: lipgloss.CompleteColor{TrueColor: "#00ccbb", ANSI256: "44", ANSI: "36"}, + }) +} + +func DialogBox() lipgloss.Style { + return defaultStyle(). + Border(lipgloss.RoundedBorder()). + BorderForeground(InfoColor().GetForeground()). + Padding(1, 0). + BorderTop(true). + BorderLeft(true). + BorderRight(true). + BorderBottom(true) +} + +func DialogButton() lipgloss.Style { + return defaultStyle(). + Foreground(InfoPrefix().GetForeground()). + Background(InfoPrefix().GetBackground()). + Padding(0, 3). + MarginRight(2). + MarginTop(1) +} + +func ActiveDialogButton() lipgloss.Style { + return DialogButton(). + Foreground(SelectPrefix(). + GetForeground()). + Background(SelectPrefix().GetBackground()) +} + +func TableRow() lipgloss.Style { + return InfoColor(). + PaddingLeft(1). + PaddingRight(1) +} + +func TableRowActive() lipgloss.Style { + return SelectColor(). + PaddingLeft(1). + PaddingRight(1) +} diff --git a/src/uxBlock/table.go b/src/uxBlock/table.go new file mode 100644 index 00000000..9f6e7898 --- /dev/null +++ b/src/uxBlock/table.go @@ -0,0 +1,132 @@ +package uxBlock + +import ( + "fmt" + "strings" + + "github.com/charmbracelet/lipgloss" + "github.com/charmbracelet/lipgloss/table" + "github.com/zeropsio/zcli/src/uxBlock/styles" +) + +type tableConfig struct { + header *TableRow +} + +type TableBody struct { + rows []*TableRow +} + +func NewTableBody() *TableBody { + return &TableBody{} +} + +func (b *TableBody) AddRow(row *TableRow) { + b.rows = append(b.rows, row) +} + +func (b *TableBody) AddStringsRows(rows ...[]string) *TableBody { + for _, row := range rows { + b.AddStringsRow(row...) + } + + return b +} + +func (b *TableBody) AddStringsRow(cells ...string) *TableBody { + b.AddRow(NewTableRow().AddStringCells(cells...)) + + return b +} + +type TableRow struct { + cells []*TableCell +} + +func NewTableRow() *TableRow { + return &TableRow{} +} + +func (r *TableRow) AddCell(cell *TableCell) *TableRow { + r.cells = append(r.cells, cell) + + return r +} + +func (r *TableRow) AddStringCells(cells ...string) *TableRow { + for _, cell := range cells { + r.AddStringCell(cell) + } + + return r +} + +func (r *TableRow) AddStringCell(text string) *TableRow { + r.cells = append(r.cells, NewTableCell(text)) + + return r +} + +type TableCell struct { + Text string +} + +func NewTableCell(text string) *TableCell { + return &TableCell{Text: text} +} + +func WithTableHeader(header *TableRow) TableOption { + return func(cfg *tableConfig) { + cfg.header = header + } +} + +type TableOption = func(cfg *tableConfig) + +func (b *uxBlocks) Table(body *TableBody, auxOptions ...TableOption) { + cfg := tableConfig{} + for _, opt := range auxOptions { + opt(&cfg) + } + + t := table.New(). + BorderStyle(styles.InfoColor()). + Border(lipgloss.NormalBorder()). + StyleFunc(func(row, col int) lipgloss.Style { + return styles.TableRow() + }) + + if cfg.header != nil { + headers := make([]string, len(cfg.header.cells)) + for i, header := range cfg.header.cells { + headers[i] = strings.ToUpper(header.Text) + } + t = t.Headers(headers...) + } + + rows := make([][]string, len(body.rows)) + for rowIndex, row := range body.rows { + cells := make([]string, len(row.cells)) + for i, cell := range row.cells { + cells[i] = cell.Text + } + rows[rowIndex] = cells + } + t = t.Rows(rows...) + + t.Width(calculateTableWidth(t, b.terminalWidth)) + + fmt.Println(t) +} + +// calculateTableWidth calculates the width of the table. +// If the table is wider than the terminal, a table starts falling apart. +// To set a fix width could help, but in that case, even if the table is smaller, it takes the whole terminal width. +// And it doesn't look good. +func calculateTableWidth(t *table.Table, terminalWidth int) int { + tableWidth := lipgloss.Width(t.String()) + if tableWidth > terminalWidth { + return terminalWidth + } + return 0 +} diff --git a/src/uxHelpers/org.go b/src/uxHelpers/org.go new file mode 100644 index 00000000..7a8b3462 --- /dev/null +++ b/src/uxHelpers/org.go @@ -0,0 +1,67 @@ +package uxHelpers + +import ( + "context" + + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/entity/repository" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" +) + +func PrintOrgSelector( + ctx context.Context, + uxBlocks uxBlock.UxBlocks, + restApiClient *zeropsRestApiClient.Handler, +) (*entity.Org, error) { + orgs, err := repository.GetAllOrgs(ctx, restApiClient) + if err != nil { + return nil, err + } + + if len(orgs) == 0 { + uxBlocks.PrintWarning(styles.WarningLine(i18n.T(i18n.OrgSelectorListEmpty))) + return nil, nil + } + + header, tableBody := createOrgTableRows(orgs) + + orgIndex, err := uxBlocks.Select( + ctx, + tableBody, + uxBlock.SelectLabel(i18n.T(i18n.OrgSelectorPrompt)), + uxBlock.SelectTableHeader(header), + ) + if err != nil { + return nil, err + } + + if len(orgIndex) == 0 { + return nil, errors.New(i18n.T(i18n.OrgSelectorOutOfRangeError)) + } + + if orgIndex[0] > len(orgs)-1 { + return nil, errors.New(i18n.T(i18n.OrgSelectorOutOfRangeError)) + } + + return &orgs[orgIndex[0]], nil +} + +func createOrgTableRows(projects []entity.Org) (*uxBlock.TableRow, *uxBlock.TableBody) { + // TODO - janhajek translation + header := (&uxBlock.TableRow{}).AddStringCells("ID", "Name", "Role") + + tableBody := &uxBlock.TableBody{} + for _, project := range projects { + tableBody.AddStringsRow( + string(project.ID), + project.Name.String(), + project.Role.Native(), + ) + } + + return header, tableBody +} diff --git a/src/uxHelpers/project.go b/src/uxHelpers/project.go new file mode 100644 index 00000000..33ebe306 --- /dev/null +++ b/src/uxHelpers/project.go @@ -0,0 +1,85 @@ +package uxHelpers + +import ( + "context" + + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/entity/repository" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" +) + +func PrintProjectSelector( + ctx context.Context, + uxBlocks uxBlock.UxBlocks, + restApiClient *zeropsRestApiClient.Handler, +) (*entity.Project, error) { + projects, err := repository.GetAllProjects(ctx, restApiClient) + if err != nil { + return nil, err + } + + if len(projects) == 0 { + uxBlocks.PrintWarning(styles.WarningLine(i18n.T(i18n.ProjectSelectorListEmpty))) + return nil, nil + } + + header, tableBody := createProjectTableRows(projects) + + projectIndex, err := uxBlocks.Select( + ctx, + tableBody, + uxBlock.SelectLabel(i18n.T(i18n.ProjectSelectorPrompt)), + uxBlock.SelectTableHeader(header), + ) + if err != nil { + return nil, err + } + + if len(projectIndex) == 0 { + return nil, errors.New(i18n.T(i18n.ProjectSelectorOutOfRangeError)) + } + + if projectIndex[0] > len(projects)-1 { + return nil, errors.New(i18n.T(i18n.ProjectSelectorOutOfRangeError)) + } + + return &projects[projectIndex[0]], nil +} + +func PrintProjectList( + ctx context.Context, + uxBlocks uxBlock.UxBlocks, + restApiClient *zeropsRestApiClient.Handler) error { + projects, err := repository.GetAllProjects(ctx, restApiClient) + if err != nil { + return err + } + + header, rows := createProjectTableRows(projects) + + uxBlocks.Table(rows, uxBlock.WithTableHeader(header)) + + return nil +} + +func createProjectTableRows(projects []entity.Project) (*uxBlock.TableRow, *uxBlock.TableBody) { + // TODO - janhajek translation + header := (&uxBlock.TableRow{}).AddStringCells("ID", "Name", "Description", "Org ID", "Status") + + tableBody := &uxBlock.TableBody{} + for _, project := range projects { + tableBody.AddStringsRow( + string(project.ID), + project.Name.String(), + project.Description.Native(), + project.ClientId.Native(), + project.Status.String(), + ) + } + + return header, tableBody +} diff --git a/src/uxHelpers/prompt.go b/src/uxHelpers/prompt.go new file mode 100644 index 00000000..36354d22 --- /dev/null +++ b/src/uxHelpers/prompt.go @@ -0,0 +1,24 @@ +package uxHelpers + +import ( + "context" + + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock" +) + +func YesNoPromptDestructive(ctx context.Context, uxBlocks uxBlock.UxBlocks, message string) error { + // TODO - janhajek translate + choices := []string{"NO", "YES"} + choice, err := uxBlocks.Prompt(ctx, message, choices) + if err != nil { + return err + } + + if choice == 0 { + return errors.New(i18n.T(i18n.DestructiveOperationConfirmationFailed)) + } + + return nil +} diff --git a/src/uxHelpers/service.go b/src/uxHelpers/service.go new file mode 100644 index 00000000..86772b67 --- /dev/null +++ b/src/uxHelpers/service.go @@ -0,0 +1,82 @@ +package uxHelpers + +import ( + "context" + + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/entity" + "github.com/zeropsio/zcli/src/entity/repository" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" +) + +func PrintServiceSelector( + ctx context.Context, + uxBlocks uxBlock.UxBlocks, + restApiClient *zeropsRestApiClient.Handler, + project entity.Project, +) (*entity.Service, error) { + services, err := repository.GetNonSystemServicesByProject(ctx, restApiClient, project) + if err != nil { + return nil, err + } + + if len(services) == 0 { + uxBlocks.PrintWarning(styles.WarningLine(i18n.T(i18n.ServiceSelectorListEmpty))) + return nil, nil + } + + header, rows := createServiceTableRows(services) + + serviceIndex, err := uxBlocks.Select( + ctx, + rows, + uxBlock.SelectLabel(i18n.T(i18n.ServiceSelectorPrompt)), + uxBlock.SelectTableHeader(header), + ) + if err != nil { + return nil, err + } + + if len(serviceIndex) == 0 { + return nil, errors.New(i18n.T(i18n.ServiceSelectorOutOfRangeError)) + } + + if serviceIndex[0] > len(services)-1 { + return nil, errors.New(i18n.T(i18n.ServiceSelectorOutOfRangeError)) + } + + return &services[serviceIndex[0]], nil +} + +func PrintServiceList( + ctx context.Context, + uxBlocks uxBlock.UxBlocks, + restApiClient *zeropsRestApiClient.Handler, + project entity.Project, +) error { + services, err := repository.GetNonSystemServicesByProject(ctx, restApiClient, project) + if err != nil { + return err + } + + header, tableBody := createServiceTableRows(services) + + uxBlocks.Table(tableBody, uxBlock.WithTableHeader(header)) + + return nil +} + +func createServiceTableRows(projects []entity.Service) (*uxBlock.TableRow, *uxBlock.TableBody) { + // TODO - janhajek translation + header := (&uxBlock.TableRow{}).AddStringCells("ID", "Name", "Status") + + tableBody := &uxBlock.TableBody{} + for _, project := range projects { + tableBody.AddStringsRow(string(project.ID), project.Name.String(), project.Status.String()) + } + + return header, tableBody +} diff --git a/src/uxHelpers/spinner.go b/src/uxHelpers/spinner.go new file mode 100644 index 00000000..2abcdcbd --- /dev/null +++ b/src/uxHelpers/spinner.go @@ -0,0 +1,104 @@ +package uxHelpers + +import ( + "context" + "sync" + "time" + + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/uxBlock/styles" + "github.com/zeropsio/zcli/src/zeropsRestApiClient" + "github.com/zeropsio/zerops-go/dto/input/path" + "github.com/zeropsio/zerops-go/types/enum" + "github.com/zeropsio/zerops-go/types/uuid" +) + +func ProcessCheckWithSpinner( + ctx context.Context, + uxBlocks uxBlock.UxBlocks, + processList []Process, +) error { + spinners := make([]*uxBlock.Spinner, 0, len(processList)) + for _, process := range processList { + spinners = append(spinners, uxBlock.NewSpinner(styles.NewLine(styles.InfoText(process.RunningMessage)))) + } + + stopFunc := uxBlocks.RunSpinners(ctx, spinners) + + var returnErr error + + var once sync.Once + + wg := sync.WaitGroup{} + for i := range processList { + wg.Add(1) + go func(i int) { + defer wg.Done() + process := processList[i] + + err := process.F(ctx) + if err != nil { + spinners[i].Finish(styles.ErrorLine(process.ErrorMessageMessage)) + stopFunc() + + once.Do(func() { + returnErr = err + }) + return + } + spinners[i].Finish(styles.SuccessLine(process.SuccessMessage)) + }(i) + } + + wg.Wait() + stopFunc() + + return returnErr +} + +type Process struct { + F func(ctx context.Context) error + RunningMessage string + ErrorMessageMessage string + SuccessMessage string +} + +func CheckZeropsProcess( + processId uuid.ProcessId, + restApiClient *zeropsRestApiClient.Handler, +) func(ctx context.Context) error { + return func(ctx context.Context) error { + ticker := time.NewTicker(time.Second) + defer ticker.Stop() + + for { + select { + case <-ctx.Done(): + return nil + case <-ticker.C: + getProcessResponse, err := restApiClient.GetProcess(ctx, path.ProcessId{Id: processId}) + if err != nil { + return err + } + + processOutput, err := getProcessResponse.Output() + if err != nil { + return err + } + + processStatus := processOutput.Status + + if processStatus == enum.ProcessStatusEnumFinished { + return nil + } + + if !(processStatus == enum.ProcessStatusEnumRunning || + processStatus == enum.ProcessStatusEnumPending) { + return errors.Errorf(i18n.T(i18n.ProcessInvalidState), processId) + } + } + } + } +} diff --git a/src/vpn/cleanVpn_darwin.go b/src/vpn/cleanVpn_darwin.go deleted file mode 100644 index cdbb4d34..00000000 --- a/src/vpn/cleanVpn_darwin.go +++ /dev/null @@ -1,31 +0,0 @@ -//go:build darwin - -package vpn - -import ( - "context" - "errors" - "net" - "os" - "path" - - "github.com/zeropsio/zcli/src/i18n" -) - -func (h *Handler) cleanVpn(_ context.Context, interfaceName string) error { - interfaces, err := net.Interfaces() - if err != nil { - h.logger.Error(err) - return errors.New(i18n.VpnStopUnableToRemoveTunnelInterface) - } - for _, in := range interfaces { - if in.Name == interfaceName { - socket := path.Join("/var/run/wireguard/", interfaceName+".sock") - h.logger.Debugf("remove wireguard socket: %s", socket) - if err := os.Remove(socket); err != nil { - return errors.New(i18n.VpnStopUnableToRemoveTunnelInterface) - } - } - } - return nil -} diff --git a/src/vpn/cleanVpn_linux.go b/src/vpn/cleanVpn_linux.go deleted file mode 100644 index 5cd9d617..00000000 --- a/src/vpn/cleanVpn_linux.go +++ /dev/null @@ -1,30 +0,0 @@ -//go:build linux - -package vpn - -import ( - "context" - "net" - - "github.com/zeropsio/zcli/src/i18n" -) - -func (h *Handler) cleanVpn(ctx context.Context, interfaceName string) error { - interfaces, err := net.Interfaces() - if err != nil { - return err - } - for _, in := range interfaces { - if in.Name == interfaceName { - return h.runCommands( - ctx, - makeCommand( - "ip", - commandWithErrorMessage(i18n.VpnStopUnableToRemoveTunnelInterface), - commandWithArgs("link", "del", interfaceName), - ), - ) - } - } - return nil -} diff --git a/src/vpn/cleanVpn_windows.go b/src/vpn/cleanVpn_windows.go deleted file mode 100644 index 84674392..00000000 --- a/src/vpn/cleanVpn_windows.go +++ /dev/null @@ -1,39 +0,0 @@ -//go:build windows - -package vpn - -import ( - "context" - "errors" - "os" - - "github.com/zeropsio/zcli/src/i18n" - "golang.zx2c4.com/wireguard/wgctrl" -) - -func (h *Handler) cleanVpn(ctx context.Context, interfaceName string) error { - - wg, err := wgctrl.New() - if err != nil { - h.logger.Error(err) - return errors.New(i18n.VpnStatusWireguardNotAvailable) - } - defer wg.Close() - - h.logger.Debug("check interface: ", interfaceName) - if _, err := wg.Device(interfaceName); err != nil { - if os.IsNotExist(err) { - return nil - } - return err - } - - return h.runCommands( - ctx, - makeCommand( - "wireguard", - commandWithErrorMessage(i18n.VpnStopUnableToRemoveTunnelInterface), - commandWithArgs("/uninstalltunnelservice", interfaceName), - ), - ) -} diff --git a/src/vpn/commands.go b/src/vpn/commands.go deleted file mode 100644 index 42eafc9b..00000000 --- a/src/vpn/commands.go +++ /dev/null @@ -1,76 +0,0 @@ -package vpn - -import ( - "context" - "errors" - "os/exec" - "strings" -) - -type command struct { - command string - args []string - stdin string - errorMessage string -} - -func commandWithArgs(args ...string) func(*command) { - return func(c *command) { - c.args = append(c.args, args...) - } -} -func commandWithErrorMessage(errorMessage string) func(*command) { - return func(c *command) { - c.errorMessage = errorMessage - } -} - -func commandWithStdin(stdin string) func(*command) { - return func(c *command) { - c.stdin = stdin - } -} - -func makeCommand(cmd string, options ...func(*command)) command { - c := &command{ - command: cmd, - } - for _, o := range options { - o(c) - } - return *c -} - -func (h *Handler) runCommands( - ctx context.Context, - commands ...command, -) error { - for _, cmd := range commands { - _, err := h.runCommand(ctx, cmd) - if err != nil { - return err - } - } - return nil -} - -func (h *Handler) runCommand( - ctx context.Context, - cmd command, -) ([]byte, error) { - c := exec.CommandContext(ctx, cmd.command, cmd.args...) - if cmd.stdin != "" { - c.Stdin = strings.NewReader(cmd.stdin) - } - output, err := c.Output() - if err != nil { - h.logger.Debug(cmd.command, cmd.args) - h.logger.Debug(string(output)) - h.logger.Error(err) - return nil, errors.New(cmd.errorMessage) - } else { - h.logger.Debug(cmd.command, cmd.args) - h.logger.Debug(string(output)) - } - return output, err -} diff --git a/src/vpn/dnsClean.go b/src/vpn/dnsClean.go deleted file mode 100644 index 3b05d682..00000000 --- a/src/vpn/dnsClean.go +++ /dev/null @@ -1,44 +0,0 @@ -package vpn - -import ( - "context" - "os/exec" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/daemonStorage" - "github.com/zeropsio/zcli/src/utils" - "github.com/zeropsio/zcli/src/utils/cmdRunner" -) - -func (h *Handler) DnsClean(ctx context.Context) error { - - data := h.storage.Data() - - switch data.DnsManagement { - case daemonStorage.LocalDnsManagementUnknown: - return nil - case daemonStorage.LocalDnsManagementSystemdResolve: - return nil - case daemonStorage.LocalDnsManagementResolveConf: - cmd := exec.Command("resolvconf", "-d", data.InterfaceName) - _, err := cmdRunner.Run(cmd) - if err != nil { - return err - } - case daemonStorage.LocalDnsManagementFile: - err := utils.RemoveFirstLine(constants.ResolvFilePath, "nameserver "+data.DnsIp.String()) - if err != nil { - return err - } - case daemonStorage.LocalDnsManagementNetworkSetup: - if err := h.dnsCleanNetworkSetup(ctx); err != nil { - return err - } - - case daemonStorage.LocalDnsManagementWindows: - return nil - default: - return nil - } - return nil -} diff --git a/src/vpn/dnsCleanNetworkSetup.go b/src/vpn/dnsCleanNetworkSetup.go deleted file mode 100644 index c66c553e..00000000 --- a/src/vpn/dnsCleanNetworkSetup.go +++ /dev/null @@ -1,21 +0,0 @@ -package vpn - -import ( - "context" - "fmt" - "os" -) - -func (h *Handler) dnsCleanNetworkSetup(ctx context.Context) error { - - os.Remove("/etc/resolver/zerops") - - stdin := fmt.Sprintf(`remove State:/Network/Service/zerops_vpn_service/IPv6 -remove Setup:/Network/Service/zerops_vpn_service/IPv6`) - - if _, err := h.runCommand(ctx, makeCommand("scutil", commandWithStdin(stdin))); err != nil { - return err - } - - return nil -} diff --git a/src/vpn/dnsDetect.go b/src/vpn/dnsDetect.go deleted file mode 100644 index 151c2135..00000000 --- a/src/vpn/dnsDetect.go +++ /dev/null @@ -1,9 +0,0 @@ -package vpn - -import ( - "github.com/zeropsio/zcli/src/daemonStorage" -) - -func DnsDetect() (daemonStorage.LocalDnsManagement, error) { - return dnsDetect() -} diff --git a/src/vpn/dnsDetect_darwin.go b/src/vpn/dnsDetect_darwin.go deleted file mode 100644 index d9fb8e57..00000000 --- a/src/vpn/dnsDetect_darwin.go +++ /dev/null @@ -1,17 +0,0 @@ -//go:build darwin - -package vpn - -import ( - "os/exec" - - "github.com/zeropsio/zcli/src/daemonStorage" -) - -func dnsDetect() (daemonStorage.LocalDnsManagement, error) { - if _, err := exec.LookPath("scutil"); err == nil { - return daemonStorage.LocalDnsManagementNetworkSetup, nil - } - return daemonStorage.LocalDnsManagementUnknown, nil - -} diff --git a/src/vpn/dnsDetect_linux.go b/src/vpn/dnsDetect_linux.go deleted file mode 100644 index 935a3da6..00000000 --- a/src/vpn/dnsDetect_linux.go +++ /dev/null @@ -1,88 +0,0 @@ -//go:build linux - -package vpn - -import ( - "os/exec" - "regexp" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/daemonStorage" - "github.com/zeropsio/zcli/src/utils" - "github.com/zeropsio/zcli/src/utils/cmdRunner" -) - -func dnsDetect() (daemonStorage.LocalDnsManagement, error) { - - resolvExists, err := utils.FileExists(constants.ResolvFilePath) - if err != nil { - return "", err - } - - if resolvExists { - ok, err := isSystemdResolve() - if err != nil { - return "", err - } - if ok { - return daemonStorage.LocalDnsManagementSystemdResolve, nil - } - } - - _, err = exec.LookPath("resolvconf") - if err == nil { - return daemonStorage.LocalDnsManagementResolveConf, nil - } - - if resolvExists { - return daemonStorage.LocalDnsManagementFile, nil - } - - return daemonStorage.LocalDnsManagementUnknown, nil -} - -func isValidSystemdResolveResolveConf(filePath string) (bool, error) { - lines, err := utils.ReadLines(filePath) - if err != nil { - return false, err - } - - nameserverLine := regexp.MustCompile(`[ ]*nameserver[ ]+(.+)`) - - for _, line := range lines { - submatches := nameserverLine.FindStringSubmatch(line) - if len(submatches) == 2 { - if submatches[1] != "127.0.0.53" { - return false, nil - } else { - return true, nil - } - } - } - - return false, nil -} - -func isSystemdResolve() (bool, error) { - - // resolve.conf is valid for systemd-resolve - validSystemd, err := isValidSystemdResolveResolveConf(constants.ResolvFilePath) - if err != nil { - return false, err - } - if !validSystemd { - return false, nil - } - - // systemd-resolved unit is running - if _, err := cmdRunner.Run(exec.Command("pidof", "systemd-resolved")); err != nil { - return false, nil - } - - // resolvectl binary exists in PATH - if _, err := exec.LookPath("resolvectl"); err != nil { - return false, nil - } - - return true, nil -} diff --git a/src/vpn/dnsDetect_windows.go b/src/vpn/dnsDetect_windows.go deleted file mode 100644 index bb91bbff..00000000 --- a/src/vpn/dnsDetect_windows.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build windows - -package vpn - -import ( - "github.com/zeropsio/zcli/src/daemonStorage" -) - -func dnsDetect() (daemonStorage.LocalDnsManagement, error) { - return daemonStorage.LocalDnsManagementWindows, nil - -} diff --git a/src/vpn/dnsIsAlive.go b/src/vpn/dnsIsAlive.go deleted file mode 100644 index 2f99a79d..00000000 --- a/src/vpn/dnsIsAlive.go +++ /dev/null @@ -1,25 +0,0 @@ -package vpn - -import ( - "context" - "errors" - "time" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/nettools" -) - -func (h *Handler) dnsIsAlive() (bool, error) { - ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) - defer cancel() - - if !nettools.HasIPv6PingCommand() { - return false, errors.New(i18n.VpnStatusDnsNoCheckFunction) - } - err := nettools.Ping(ctx, "node1.master.core.zerops") - if err != nil { - h.logger.Error(err) - return false, nil - } - return true, nil -} diff --git a/src/vpn/handler.go b/src/vpn/handler.go deleted file mode 100644 index 4763a8cb..00000000 --- a/src/vpn/handler.go +++ /dev/null @@ -1,36 +0,0 @@ -package vpn - -import ( - "sync" - "time" - - "github.com/zeropsio/zcli/src/daemonStorage" - "github.com/zeropsio/zcli/src/utils/logger" -) - -type Config struct { - VpnCheckInterval time.Duration - VpnCheckRetryCount int - VpnCheckTimeout time.Duration -} - -type Handler struct { - config Config - logger logger.Logger - storage *daemonStorage.Handler - - lock sync.RWMutex -} - -func New( - config Config, - logger logger.Logger, - daemonStorage *daemonStorage.Handler, - -) *Handler { - return &Handler{ - config: config, - logger: logger, - storage: daemonStorage, - } -} diff --git a/src/vpn/handler_stopVpn.go b/src/vpn/handler_stopVpn.go deleted file mode 100644 index ff8d9111..00000000 --- a/src/vpn/handler_stopVpn.go +++ /dev/null @@ -1,9 +0,0 @@ -package vpn - -import "context" - -func (h *Handler) StopVpn(ctx context.Context) error { - h.lock.Lock() - defer h.lock.Unlock() - return h.stopVpn(ctx) -} diff --git a/src/vpn/isVpnTunnelAlive.go b/src/vpn/isVpnTunnelAlive.go deleted file mode 100644 index 68ac2e50..00000000 --- a/src/vpn/isVpnTunnelAlive.go +++ /dev/null @@ -1,32 +0,0 @@ -package vpn - -import ( - "context" - "net" - - "github.com/zeropsio/zcli/src/nettools" -) - -func (h *Handler) isVpnTunnelAlive(ctx context.Context, serverIp net.IP) bool { - - if serverIp.String() == "" { - return false - } - - for i := 0; i < h.config.VpnCheckRetryCount; i++ { - if func() bool { - ctx, cancel := context.WithTimeout(ctx, h.config.VpnCheckTimeout) - defer cancel() - - err := nettools.Ping(ctx, serverIp.String()) - if err != nil { - h.logger.Error(err) - return false - } - return true - }() { - return true - } - } - return false -} diff --git a/src/vpn/public_startVpn.go b/src/vpn/public_startVpn.go deleted file mode 100644 index d89a85e4..00000000 --- a/src/vpn/public_startVpn.go +++ /dev/null @@ -1,33 +0,0 @@ -package vpn - -import ( - "context" -) - -func (h *Handler) StartVpn( - ctx context.Context, - grpcApiAddress string, - grpcVpnAddress string, - token string, - projectId string, - userId string, - mtu uint32, - caCertificateUrl string, - preferredPortMin uint32, - preferredPortMax uint32, -) (err error) { - h.lock.Lock() - defer h.lock.Unlock() - return h.startVpn( - ctx, - grpcApiAddress, - grpcVpnAddress, - token, - projectId, - userId, - mtu, - caCertificateUrl, - preferredPortMin, - preferredPortMax, - ) -} diff --git a/src/vpn/public_statusVpn.go b/src/vpn/public_statusVpn.go deleted file mode 100644 index f245e582..00000000 --- a/src/vpn/public_statusVpn.go +++ /dev/null @@ -1,66 +0,0 @@ -package vpn - -import ( - "context" - "errors" - "fmt" - "os" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/daemon" - "golang.zx2c4.com/wireguard/wgctrl" -) - -func (h *Handler) StatusVpn(ctx context.Context) (*daemon.VpnStatus, error) { - data := h.storage.Data() - - vpnStatus := &daemon.VpnStatus{ - TunnelState: daemon.TunnelState_TUNNEL_SET_INACTIVE, - DnsState: daemon.DnsState_DNS_SET_INACTIVE, - } - - if data.InterfaceName == "" { - return vpnStatus, nil - } - - wg, err := wgctrl.New() - if err != nil { - h.logger.Error(err) - return nil, errors.New(i18n.VpnStatusWireguardNotAvailable) - } - defer wg.Close() - - h.logger.Debug("check interface: ", data.InterfaceName) - if _, err := wg.Device(data.InterfaceName); err != nil { - if os.IsNotExist(err) { - return vpnStatus, h.stopVpn(ctx) - } - return vpnStatus, err - } else { - if !h.isVpnTunnelAlive(ctx, data.ServerIp) { - return vpnStatus, nil - } - } - vpnStatus.TunnelState = daemon.TunnelState_TUNNEL_ACTIVE - - dnsIsAlive, err := h.dnsIsAlive() - if err != nil { - h.logger.Error(err) - vpnStatus.AdditionalInfo = i18n.VpnStatusDnsCheckError + "\n" - } - if dnsIsAlive { - vpnStatus.DnsState = daemon.DnsState_DNS_ACTIVE - } else { - vpnStatus.AdditionalInfo += fmt.Sprintf( - "dns ip: %s\n"+ - "vpn network: %s\n"+ - "client ip: %s\n"+ - "interface: %s\n", - data.DnsIp.String(), - data.VpnNetwork.String(), - data.ClientIp.String(), - data.InterfaceName, - ) - } - return vpnStatus, nil -} diff --git a/src/vpn/reloadVpn.go b/src/vpn/reloadVpn.go deleted file mode 100644 index b514dff3..00000000 --- a/src/vpn/reloadVpn.go +++ /dev/null @@ -1,60 +0,0 @@ -package vpn - -import ( - "context" - "errors" - "os" - "time" - - "github.com/zeropsio/zcli/src/i18n" - "golang.zx2c4.com/wireguard/wgctrl" -) - -func (h *Handler) ReloadVpn( - ctx context.Context, -) (err error) { - - data := h.storage.Data() - - if data.InterfaceName == "" { - return nil - } - - wg, err := wgctrl.New() - if err != nil { - h.logger.Error(err) - return errors.New(i18n.VpnStatusWireguardNotAvailable) - } - defer wg.Close() - - h.logger.Debugf("check vpn interface %s", data.InterfaceName) - if _, err := wg.Device(data.InterfaceName); err != nil { - if os.IsNotExist(err) { - h.logger.Debugf("interface %s not exists, starting vpn", data.InterfaceName) - if err := h.DnsClean(ctx); err != nil { - return err - } - time.Sleep(time.Second * 3) - return h.startVpn( - ctx, - data.GrpcApiAddress, - data.GrpcVpnAddress, - data.Token, - data.ProjectId, - data.UserId, - data.Mtu, - data.CaCertificateUrl, - data.PreferredPortMin, - data.PreferredPortMax, - ) - } - return err - } - if err := h.DnsClean(ctx); err != nil { - return err - } - if err := h.setDns(ctx); err != nil { - return err - } - return nil -} diff --git a/src/vpn/setDns.go b/src/vpn/setDns.go deleted file mode 100644 index 8ff63ea2..00000000 --- a/src/vpn/setDns.go +++ /dev/null @@ -1,62 +0,0 @@ -package vpn - -import ( - "context" - "errors" - "os/exec" - "strings" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/daemonStorage" - "github.com/zeropsio/zcli/src/utils" - "github.com/zeropsio/zcli/src/utils/cmdRunner" -) - -var UnknownDnsManagementErr = errors.New("unknown dns management") - -func (h *Handler) setDns(ctx context.Context) error { - data := h.storage.Data() - - switch data.DnsManagement { - case daemonStorage.LocalDnsManagementUnknown, daemonStorage.LocalDnsManagementWindows: - return nil - - case daemonStorage.LocalDnsManagementSystemdResolve: - // resolvectl is multi-binary and behaves differently - // based on first command argument it receives (name of the command) - // systemd-resolve is only a symlink to resolvectl - cmd := exec.Command("resolvectl", "--set-dns="+data.DnsIp.String(), `--set-domain=zerops`, "--interface="+data.InterfaceName) - cmd.Args[0] = "systemd-resolve" - if _, err := cmdRunner.Run(cmd); err != nil { - return err - } - - case daemonStorage.LocalDnsManagementResolveConf: - err := utils.SetFirstLine(constants.ResolvconfOrderFilePath, "wg*") - if err != nil { - return err - } - - cmd := exec.Command("resolvconf", "-a", data.InterfaceName) - cmd.Stdin = strings.NewReader(strings.Join([]string{"nameserver " + data.DnsIp.String(), "search zerops"}, "\n")) - if _, err = cmdRunner.Run(cmd); err != nil { - return err - } - - case daemonStorage.LocalDnsManagementFile: - if err := utils.SetFirstLine(constants.ResolvFilePath, "nameserver "+data.DnsIp.String()); err != nil { - return err - } - - case daemonStorage.LocalDnsManagementNetworkSetup: - - if err := h.setDnsNetworksetup(ctx); err != nil { - return err - } - - default: - return UnknownDnsManagementErr - } - - return nil -} diff --git a/src/vpn/setDnsNetworksetup.go b/src/vpn/setDnsNetworksetup.go deleted file mode 100644 index beac8c33..00000000 --- a/src/vpn/setDnsNetworksetup.go +++ /dev/null @@ -1,40 +0,0 @@ -package vpn - -import ( - "context" - "fmt" - "os" -) - -func (h *Handler) setDnsNetworksetup(ctx context.Context) error { - - if err := os.MkdirAll("/etc/resolver", 0755); err != nil { - return err - } - - data := h.storage.Data() - if err := os.WriteFile( - "/etc/resolver/zerops", - []byte( - fmt.Sprintf("nameserver %s\nsearch zerops\n", data.DnsIp.String()), - ), - 0644, - ); err != nil { - return err - } - - stdin := fmt.Sprintf(`d.init -d.add Addresses * fe80::1d04:6b6d:7ad7:85e4 2600:3c03::de:d002 -d.add DestAddresses * ::ffff:ffff:ffff:ffff:0:0 :: -d.add Flags * 0 0 -d.add InterfaceName %s -d.add PrefixLength * 64 116 -set State:/Network/Service/zerops_vpn_service/IPv6 -set Setup:/Network/Service/zerops_vpn_service/IPv6`, data.InterfaceName) - - if _, err := h.runCommand(ctx, makeCommand("scutil", commandWithStdin(stdin))); err != nil { - return err - } - - return nil -} diff --git a/src/vpn/setVpn_darwin.go b/src/vpn/setVpn_darwin.go deleted file mode 100644 index 508516ab..00000000 --- a/src/vpn/setVpn_darwin.go +++ /dev/null @@ -1,119 +0,0 @@ -//go:build darwin -// +build darwin - -package vpn - -import ( - "context" - "errors" - "io/ioutil" - "net" - "net/netip" - "os/exec" - "strconv" - "strings" - "time" - - vpnproxy "github.com/zeropsio/zcli/src/proto/vpnproxy" - "golang.zx2c4.com/wireguard/wgctrl" - "golang.zx2c4.com/wireguard/wgctrl/wgtypes" - - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/utils/cmdRunner" -) - -const TunnelNameFile = "/tmp/wg-zerops" - -func (h *Handler) setVpn(ctx context.Context, vpnAddress net.IP, privateKey wgtypes.Key, mtu uint32, response *vpnproxy.StartVpnResponse) error { - var err error - - h.logger.Debug("run wireguard-go utun") - cmd := exec.Command("wireguard-go", "utun") - cmd.Env = []string{"WG_TUN_NAME_FILE=" + TunnelNameFile} - _, err = cmdRunner.Run(cmd) - if err != nil { - h.logger.Error(err) - return errors.New(i18n.VpnStartWireguardUtunError) - } - - interfaceName, err := func() (string, error) { - b, err := ioutil.ReadFile(TunnelNameFile) - if err != nil { - return "", err - } - return strings.TrimSpace(string(b)), nil - }() - if err != nil { - return errors.New(i18n.VpnStartNetworkInterfaceNotFound) - } - - clientIp := vpnproxy.FromProtoIP(response.GetVpn().GetAssignedClientIp()) - vpnRange := vpnproxy.FromProtoIPRange(response.GetVpn().GetVpnIpRange()) - serverIp := vpnproxy.FromProtoIP(response.GetVpn().GetServerIp()) - serverPublicKey, err := wgtypes.ParseKey(response.GetVpn().ServerPublicKey) - if err != nil { - return errors.New(i18n.VpnStartInvalidServerPublicKey) - } - - udpAddr, ok := netip.AddrFromSlice(vpnAddress) - if !ok { - return errors.New(i18n.VpnStartInvalidVpnAddress) - } - addr := net.UDPAddrFromAddrPort( - netip.AddrPortFrom( - udpAddr, - uint16(response.GetVpn().GetPort()), - ), - ) - - if err := h.runCommands( - ctx, - makeCommand( - "ifconfig", - commandWithErrorMessage(i18n.VpnStartUnableToConfigureNetworkInterface), - commandWithArgs(interfaceName, "inet6", clientIp.String(), "mtu", strconv.Itoa(int(mtu))), - ), - makeCommand( - "route", - commandWithErrorMessage(i18n.VpnStartUnableToUpdateRoutingTable), - commandWithArgs("add", "-inet6", vpnRange.String(), serverIp.String()), - ), - ); err != nil { - return err - } - - wgClient, err := wgctrl.New() - if err != nil { - return errors.New(i18n.VpnStatusWireguardNotAvailable) - } - defer wgClient.Close() - - keep := time.Second * 25 - if err := wgClient.ConfigureDevice(interfaceName, wgtypes.Config{ - PrivateKey: &privateKey, - ListenPort: nil, - FirewallMark: nil, - ReplacePeers: true, - Peers: []wgtypes.PeerConfig{ - { - PublicKey: serverPublicKey, - Remove: false, - UpdateOnly: false, - PresharedKey: nil, - Endpoint: addr, - PersistentKeepaliveInterval: &keep, - ReplaceAllowedIPs: false, - AllowedIPs: []net.IPNet{ - { - IP: response.GetVpn().GetVpnIpRange().GetIp(), - Mask: response.GetVpn().GetVpnIpRange().GetMask(), - }, - }, - }, - }, - }); err != nil { - return errors.New(i18n.VpnStartTunnelConfigurationFailed) - } - - return nil -} diff --git a/src/vpn/setVpn_linux.go b/src/vpn/setVpn_linux.go deleted file mode 100644 index 357a0111..00000000 --- a/src/vpn/setVpn_linux.go +++ /dev/null @@ -1,123 +0,0 @@ -//go:build linux -// +build linux - -package vpn - -import ( - "context" - _ "embed" - "errors" - "net" - "net/netip" - "strconv" - "time" - - "github.com/lxc/lxd/shared/logger" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/proto/vpnproxy" - "golang.zx2c4.com/wireguard/wgctrl" - "golang.zx2c4.com/wireguard/wgctrl/wgtypes" -) - -const interfaceName = "zerops" - -func (h *Handler) setVpn(ctx context.Context, vpnAddress net.IP, privateKey wgtypes.Key, mtu uint32, response *vpnproxy.StartVpnResponse) error { - - clientIp := vpnproxy.FromProtoIP(response.GetVpn().GetAssignedClientIp()) - vpnRange := vpnproxy.FromProtoIPRange(response.GetVpn().GetVpnIpRange()) - serverPublicKey, err := wgtypes.ParseKey(response.GetVpn().ServerPublicKey) - if err != nil { - return err - } - udpAddr, ok := netip.AddrFromSlice(vpnAddress) - if !ok { - return errors.New(i18n.VpnStartInvalidVpnAddress) - } - addr := net.UDPAddrFromAddrPort( - netip.AddrPortFrom( - udpAddr, - uint16(response.GetVpn().GetPort()), - ), - ) - - interfaces, err := net.Interfaces() - if err != nil { - return err - } - for _, in := range interfaces { - if in.Name == interfaceName { - if err := h.runCommands( - ctx, - makeCommand( - "ip", - commandWithErrorMessage(i18n.VpnStopUnableToRemoveTunnelInterface), - commandWithArgs("link", "del", interfaceName), - ), - ); err != nil { - return err - } - } - } - - if err := h.runCommands( - ctx, - makeCommand( - "ip", - commandWithErrorMessage(i18n.VpnStartUnableToConfigureNetworkInterface), - commandWithArgs("link", "add", interfaceName, "type", "wireguard"), - ), - makeCommand( - "ip", - commandWithErrorMessage(i18n.VpnStartUnableToConfigureNetworkInterface), - commandWithArgs("-6", "address", "add", clientIp.String()+"/128", "dev", interfaceName), - ), - makeCommand( - "ip", - commandWithErrorMessage(i18n.VpnStartUnableToConfigureNetworkInterface), - commandWithArgs("link", "set", "dev", interfaceName, "mtu", strconv.Itoa(int(mtu)), "up"), - ), - makeCommand( - "ip", - commandWithErrorMessage(i18n.VpnStartUnableToUpdateRoutingTable), - commandWithArgs("route", "add", vpnRange.String(), "dev", interfaceName), - ), - ); err != nil { - return err - } - - wgClient, err := wgctrl.New() - if err != nil { - logger.Error(err.Error()) - return errors.New(i18n.VpnStatusWireguardNotAvailable) - } - defer wgClient.Close() - keep := time.Second * 25 - if err := wgClient.ConfigureDevice(interfaceName, wgtypes.Config{ - PrivateKey: &privateKey, - ListenPort: nil, - FirewallMark: nil, - ReplacePeers: true, - Peers: []wgtypes.PeerConfig{ - { - PublicKey: serverPublicKey, - Remove: false, - UpdateOnly: false, - PresharedKey: nil, - Endpoint: addr, - PersistentKeepaliveInterval: &keep, - ReplaceAllowedIPs: false, - AllowedIPs: []net.IPNet{ - { - IP: response.GetVpn().GetVpnIpRange().GetIp(), - Mask: response.GetVpn().GetVpnIpRange().GetMask(), - }, - }, - }, - }, - }); err != nil { - logger.Error(err.Error()) - return errors.New(i18n.VpnStartTunnelConfigurationFailed) - } - - return nil -} diff --git a/src/vpn/setVpn_windows.go b/src/vpn/setVpn_windows.go deleted file mode 100644 index 82deddb2..00000000 --- a/src/vpn/setVpn_windows.go +++ /dev/null @@ -1,88 +0,0 @@ -//go:build windows - -package vpn - -import ( - "bytes" - "context" - "errors" - "net" - "os" - "os/exec" - "path/filepath" - "strconv" - "strings" - "text/template" - "time" - - "github.com/zeropsio/zcli/src/i18n" - vpnproxy "github.com/zeropsio/zcli/src/proto/vpnproxy" - "golang.zx2c4.com/wireguard/wgctrl/wgtypes" -) - -const Template = ` -[Interface] -PrivateKey = {{.ClientPrivateKey}} -Address = {{.ClientAddress}} -DNS = {{.DnsServers}}, zerops - -[Peer] -PublicKey = {{.ServerPublicKey}} -AllowedIPs = {{.AllowedIPs}} -Endpoint = {{.ServerAddress}} -PersistentKeepalive = 25 -` - -func (h *Handler) setVpn(ctx context.Context, selectedVpnAddress net.IP, privateKey wgtypes.Key, mtu uint32, response *vpnproxy.StartVpnResponse) error { - _, err := exec.LookPath("wireguard") - if err != nil { - return errors.New(i18n.VpnStatusWireguardNotAvailable) - } - - clientIp := vpnproxy.FromProtoIP(response.GetVpn().GetAssignedClientIp()) - vpnRange := vpnproxy.FromProtoIPRange(response.GetVpn().GetVpnIpRange()) - dnsIp := vpnproxy.FromProtoIP(response.GetVpn().GetDnsIp()) - tmpl := template.Must(template.New("").Parse(strings.Replace(Template, "\n", "\r\n", -1))) - - var bf bytes.Buffer - err = tmpl.Execute(&bf, struct { - ClientPrivateKey string - ClientAddress string - DnsServers string - - ServerPublicKey string - AllowedIPs string - ServerAddress string - }{ - ClientPrivateKey: privateKey.String(), - ClientAddress: clientIp.String(), - AllowedIPs: vpnRange.String(), - - DnsServers: dnsIp.String(), - ServerAddress: net.JoinHostPort(selectedVpnAddress.String(), strconv.Itoa(int(response.GetVpn().GetPort()))), - ServerPublicKey: response.GetVpn().GetServerPublicKey(), - }) - configFile := filepath.Join(os.TempDir(), "zerops.conf") - - err = os.WriteFile(configFile, bf.Bytes(), 0777) - if err != nil { - return err - } - - h.runCommands(ctx, - makeCommand( - "wireguard", - commandWithErrorMessage(i18n.VpnStartTunnelConfigurationFailed), - commandWithArgs("/installtunnelservice", configFile), - ), - makeCommand( - "netsh", - commandWithErrorMessage(i18n.VpnStartTunnelConfigurationFailed), - commandWithArgs("interface", "ipv4", "set", "subinterface", "zerops", "mtu="+strconv.Itoa(int(mtu))), - ), - ) - - time.Sleep(time.Second * 5) - - return nil -} diff --git a/src/vpn/startVpn.go b/src/vpn/startVpn.go deleted file mode 100644 index aeee7f17..00000000 --- a/src/vpn/startVpn.go +++ /dev/null @@ -1,226 +0,0 @@ -package vpn - -import ( - "context" - "errors" - "math/rand" - "net" - "sort" - "strconv" - "time" - - "github.com/zeropsio/zcli/src/constants" - "github.com/zeropsio/zcli/src/daemonStorage" - "github.com/zeropsio/zcli/src/i18n" - "github.com/zeropsio/zcli/src/nettools" - "github.com/zeropsio/zcli/src/proto" - "github.com/zeropsio/zcli/src/proto/vpnproxy" - "github.com/zeropsio/zcli/src/proto/zBusinessZeropsApiProtocol" - "golang.zx2c4.com/wireguard/wgctrl" - "golang.zx2c4.com/wireguard/wgctrl/wgtypes" -) - -func (h *Handler) startVpn( - ctx context.Context, - grpcApiAddress string, - grpcVpnAddress string, - token string, - projectId string, - userId string, - mtu uint32, - caCertificateUrl string, - preferredPortMin uint32, - preferredPortMax uint32, -) (err error) { - defer func() { - if err != nil { - h.logger.Error(err) - cleanErr := h.stopVpn(ctx) - if cleanErr != nil { - h.logger.Error(cleanErr) - } - } - }() - - if err := h.stopVpn(ctx); err != nil { - return err - } - - privateKey, err := wgtypes.GeneratePrivateKey() - if err != nil { - return err - } - - apiClientFactory := zBusinessZeropsApiProtocol.New(zBusinessZeropsApiProtocol.Config{CaCertificateUrl: caCertificateUrl}) - apiGrpcClient, closeFunc, err := apiClientFactory.CreateClient(ctx, grpcApiAddress, token) - if err != nil { - return err - } - defer closeFunc() - - h.logger.Debug("vpn request start") - - apiVpnRequestResponse, err := apiGrpcClient.PostVpnRequest(ctx, &zBusinessZeropsApiProtocol.PostVpnRequestRequest{ - Id: projectId, - ClientPublicKey: privateKey.PublicKey().String(), - }) - if err := proto.BusinessError(apiVpnRequestResponse, err); err != nil { - return err - } - h.logger.Debug("vpn request end") - - accessToken := apiVpnRequestResponse.GetOutput().GetAccessToken() - expiry := apiVpnRequestResponse.GetOutput().GetExpiry() - - h.logger.Debugf("get vpn addresses start %s", grpcVpnAddress) - - ipRecords, err := net.LookupIP(grpcVpnAddress) - if err != nil { - return err - } - - h.logger.Debug("get vpn addresses end") - - sort.Slice(ipRecords, func(i, j int) bool { return rand.Int()%2 == 0 }) - - vpnAddress := nettools.PickIP(constants.VpnApiGrpcPort, ipRecords...) - if vpnAddress == nil { - return errors.New(i18n.VpnStartVpnNotReachable) - } - - targetVpnAddress := net.JoinHostPort(vpnAddress.String(), constants.VpnApiGrpcPort) - - vpnGrpcClient, closeFunc, err := vpnproxy.CreateClient(ctx, targetVpnAddress) - if err != nil { - return err - } - defer closeFunc() - - h.logger.Debug("call start vpn - start") - h.logger.Debug("preferredPortMin: ", preferredPortMin) - h.logger.Debug("preferredPortMax: ", preferredPortMax) - - startVpnResponse, err := vpnGrpcClient.StartVpn(ctx, &vpnproxy.StartVpnRequest{ - AccessToken: accessToken, - PreferredPortMin: preferredPortMin, - PreferredPortMax: preferredPortMax, - }) - - if err := proto.VpnError(startVpnResponse, err); err != nil { - return err - } - - h.logger.Debug("call start vpn - end") - - clientIp := vpnproxy.FromProtoIP(startVpnResponse.GetVpn().GetAssignedClientIp()) - vpnRange := vpnproxy.FromProtoIPRange(startVpnResponse.GetVpn().GetVpnIpRange()) - serverIp := vpnproxy.FromProtoIP(startVpnResponse.GetVpn().GetServerIp()) - - h.logger.Debug("assigned client address: " + clientIp.String()) - h.logger.Debug("assigned vpn server: " + vpnAddress.String() + ":" + strconv.Itoa(int(startVpnResponse.GetVpn().GetPort()))) - h.logger.Debug("server public key: " + startVpnResponse.GetVpn().GetServerPublicKey()) - h.logger.Debug("serverIp address: " + serverIp.String()) - h.logger.Debug("vpnRange: " + vpnRange.String()) - h.logger.Debug("mtu: " + strconv.Itoa(int(mtu))) - - if err := h.setVpn(ctx, vpnAddress, privateKey, mtu, startVpnResponse); err != nil { - return err - } - - if err := h.updateVpnInterfaceName(privateKey); err != nil { - return err - } - - dnsManagement, err := DnsDetect() - if err != nil { - h.logger.Error(err) - return err - } - - vpnNetwork := net.IPNet{ - IP: startVpnResponse.GetVpn().VpnIpRange.GetIp(), - Mask: startVpnResponse.GetVpn().VpnIpRange.GetMask(), - } - - dnsIp := vpnproxy.FromProtoIP(startVpnResponse.GetVpn().GetDnsIp()) - - data, err := h.storage.Update(func(data daemonStorage.Data) daemonStorage.Data { - data.ServerIp = serverIp - data.VpnNetwork = vpnNetwork - data.ProjectId = projectId - data.UserId = userId - data.Mtu = mtu - data.DnsIp = dnsIp - data.ClientIp = clientIp - data.GrpcApiAddress = grpcApiAddress - data.GrpcVpnAddress = grpcVpnAddress - data.GrpcTargetVpnAddress = targetVpnAddress - data.Token = token - data.DnsManagement = dnsManagement - data.CaCertificateUrl = caCertificateUrl - data.PreferredPortMin = preferredPortMin - data.PreferredPortMax = preferredPortMax - data.Expiry = zBusinessZeropsApiProtocol.FromProtoTimestamp(expiry) - return data - }) - if err != nil { - h.logger.Error(err) - return errors.New(i18n.DaemonUnableToSaveConfiguration) - } - - if err := h.setDns(ctx); err != nil { - h.logger.Error(err) - return err - } - - data = h.storage.Data() - - h.logger.Debugf("dnsIp: %s", data.DnsIp.String()) - h.logger.Debugf("clientIp: %s", data.ClientIp.String()) - h.logger.Debugf("dnsManagementType: %s", data.DnsManagement) - h.logger.Debugf("serverIp: %s", data.ServerIp.String()) - h.logger.Debugf("vpnNetwork: %s", data.VpnNetwork.String()) - h.logger.Debugf("interface: %s", data.InterfaceName) - h.logger.Debugf("mtu: %d", data.Mtu) - h.logger.Debugf("preferredPortMin: %d", data.PreferredPortMin) - h.logger.Debugf("preferredPortMax: %d", data.PreferredPortMax) - - time.Sleep(time.Second * 3) - h.logger.Debug("try vpn") - - if !h.isVpnTunnelAlive(ctx, serverIp) { - if err := h.stopVpn(ctx); err != nil { - h.logger.Error(err) - return err - } - return errors.New(i18n.VpnStartTunnelIsNotAlive) - } - return nil -} - -func (h *Handler) updateVpnInterfaceName(privateKey wgtypes.Key) error { - wgClient, err := wgctrl.New() - if err != nil { - h.logger.Error(err) - return errors.New(i18n.VpnStatusWireguardNotAvailable) - } - defer wgClient.Close() - - wgDevices, err := wgClient.Devices() - if err != nil { - h.logger.Error(err) - return errors.New(i18n.VpnStatusWireguardNotAvailable) - } - for _, device := range wgDevices { - device := device - if device.PrivateKey.String() == privateKey.String() { - h.storage.Update(func(data daemonStorage.Data) daemonStorage.Data { - data.InterfaceName = device.Name - h.logger.Info("set device", data.InterfaceName) - return data - }) - return nil - } - } - return errors.New(i18n.VpnStatusDnsInterfaceNotFound) -} diff --git a/src/vpn/stopVpn.go b/src/vpn/stopVpn.go deleted file mode 100644 index 204a054c..00000000 --- a/src/vpn/stopVpn.go +++ /dev/null @@ -1,31 +0,0 @@ -package vpn - -import ( - "context" -) - -func (h *Handler) stopVpn(ctx context.Context) error { - h.logger.Debug("stopping VPN") - data := h.storage.Data() - - if data.InterfaceName == "" { - return nil - } - - h.logger.Debug("clean vpn start") - if err := h.cleanVpn(ctx, data.InterfaceName); err != nil { - return err - } - h.logger.Debug("clean vpn end") - - h.logger.Debug("clean vpn DNS") - if err := h.DnsClean(ctx); err != nil { - return err - } - h.logger.Debug("clean DNS start") - - if err := h.storage.Clear(); err != nil { - return err - } - return nil -} diff --git a/src/yamlReader/readYaml.go b/src/yamlReader/readYaml.go new file mode 100644 index 00000000..a5be0266 --- /dev/null +++ b/src/yamlReader/readYaml.go @@ -0,0 +1,54 @@ +package yamlReader + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/pkg/errors" + "github.com/zeropsio/zcli/src/i18n" + "github.com/zeropsio/zcli/src/uxBlock" + "github.com/zeropsio/zcli/src/uxBlock/styles" +) + +func ReadContent(uxBlocks uxBlock.UxBlocks, importYamlPath string, workingDir string) ([]byte, error) { + if !filepath.IsAbs(importYamlPath) { + workingDir, err := filepath.Abs(workingDir) + if err != nil { + return nil, err + } + + importYamlPath = filepath.Join(workingDir, importYamlPath) + } + + fileInfo, err := os.Stat(importYamlPath) + if err != nil { + return nil, err + } + + if fileInfo.IsDir() { + return nil, errors.New(i18n.T(i18n.ImportYamlNotFound)) + } + + uxBlocks.PrintInfo(styles.InfoLine(fmt.Sprintf("%s: %s", i18n.T(i18n.ImportYamlFound), importYamlPath))) + + if fileInfo.Size() == 0 { + return nil, errors.New(i18n.T(i18n.ImportYamlEmpty)) + } + + if fileInfo.Size() > 100*1024 { + return nil, errors.New(i18n.T(i18n.ImportYamlTooLarge)) + } + + yamlContent, err := os.ReadFile(importYamlPath) + if err != nil { + return nil, err + } + + if len(yamlContent) == 0 { + return nil, errors.New(i18n.T(i18n.ImportYamlCorrupted)) + } + + uxBlocks.PrintInfo(styles.InfoLine(i18n.T(i18n.ImportYamlOk))) + return yamlContent, nil +} diff --git a/src/zeropsRestApiClient/handler.go b/src/zeropsRestApiClient/handler.go new file mode 100644 index 00000000..388e9d54 --- /dev/null +++ b/src/zeropsRestApiClient/handler.go @@ -0,0 +1,24 @@ +// Package zeropsRestApiClient provides a client for the zerops rest api +package zeropsRestApiClient + +import ( + "net/http" + + "github.com/zeropsio/zerops-go/sdk" + "github.com/zeropsio/zerops-go/sdkBase" +) + +type Handler struct { + sdk.Handler + env sdkBase.Environment +} + +func NewAuthorizedClient(token string, regionUrl string) *Handler { + config := sdkBase.DefaultConfig(sdkBase.WithCustomEndpoint(regionUrl)) + + return &Handler{ + Handler: sdk.AuthorizeSdk(sdk.New(config, http.DefaultClient), token), + // temporary solution, I need my own endpoints + env: sdkBase.NewEnvironment(config, http.DefaultClient).Authorize(token), + } +} diff --git a/src/zeropsRestApiClient/handler_get_projects_by_client.go b/src/zeropsRestApiClient/handler_get_projects_by_client.go new file mode 100644 index 00000000..c548af3a --- /dev/null +++ b/src/zeropsRestApiClient/handler_get_projects_by_client.go @@ -0,0 +1,98 @@ +// Package zeropsRestApiClient provides a client for the zerops rest api +package zeropsRestApiClient + +import ( + "context" + "encoding/json" + "net/http" + + "github.com/pkg/errors" + "github.com/zeropsio/zerops-go/apiError" + "github.com/zeropsio/zerops-go/sdkBase" + "github.com/zeropsio/zerops-go/types" + "github.com/zeropsio/zerops-go/types/enum" + "github.com/zeropsio/zerops-go/types/uuid" +) + +func (h *Handler) GetProjectsByClient( + ctx context.Context, + clientId uuid.ClientId, +) (GetProjectsByClientResponse, error) { + var response GetProjectsByClientResponse + + u := "/api/rest/public/project/search" + + filter := EsFilter{ + Search: []EsSearchItem{ + { + Name: "clientId", + Operator: "eq", + Value: clientId.Native(), + }, + }, + } + + sdkResponse := sdkBase.Post(ctx, h.env, u, filter) + + if sdkResponse.Err != nil { + return response, sdkResponse.Err + } + response.responseHeaders = sdkResponse.HttpResponse.Header + response.responseStatusCode = sdkResponse.HttpResponse.StatusCode + + decoder := json.NewDecoder(sdkResponse.ResponseData) + if sdkResponse.HttpResponse.StatusCode < http.StatusMultipleChoices { + if err := decoder.Decode(&response.success); err != nil { + return response, err + } + } else { + responseString := sdkResponse.ResponseData.String() + apiErrorResponse := struct { + Error apiError.Error `json:"error"` + }{} + err := decoder.Decode(&apiErrorResponse) + if err != nil { + return response, errors.New(sdkResponse.HttpResponse.Status + ": " + responseString) + } + apiErrorResponse.Error.HttpStatusCode = sdkResponse.HttpResponse.StatusCode + response.err = apiErrorResponse.Error + } + + return response, nil +} + +type EsFilter struct { + Search []EsSearchItem `json:"search"` +} + +type EsSearchItem struct { + Name string `json:"name"` + Operator string `json:"operator"` + Value string `json:"value"` +} + +type GetProjectsByClientResponse struct { + success EsProjectResponse + err error + responseHeaders http.Header + responseStatusCode int +} + +func (r GetProjectsByClientResponse) Output() (output EsProjectResponse, err error) { + return r.success, r.err +} + +type EsProjectResponse struct { + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` + TotalHits int64 `json:"totalHits"` + Items []EsProject `json:"items"` +} + +type EsProject struct { + Id uuid.ProjectId `json:"id"` + ClientId uuid.ClientId `json:"clientId"` + Name types.String `json:"name"` + Description types.TextNull `json:"description"` + Status enum.ProjectStatusEnum `json:"status"` +} diff --git a/src/zeropsRestApiClient/handler_get_service_stacks_by_project.go b/src/zeropsRestApiClient/handler_get_service_stacks_by_project.go new file mode 100644 index 00000000..96d51c64 --- /dev/null +++ b/src/zeropsRestApiClient/handler_get_service_stacks_by_project.go @@ -0,0 +1,105 @@ +// Package zeropsRestApiClient provides a client for the zerops rest api +package zeropsRestApiClient + +import ( + "context" + "encoding/json" + "errors" + "net/http" + + "github.com/zeropsio/zerops-go/apiError" + "github.com/zeropsio/zerops-go/sdkBase" + "github.com/zeropsio/zerops-go/types" + "github.com/zeropsio/zerops-go/types/enum" + "github.com/zeropsio/zerops-go/types/stringId" + "github.com/zeropsio/zerops-go/types/uuid" +) + +func (h *Handler) GetServiceStackByProject( + ctx context.Context, + projectId uuid.ProjectId, + clientId uuid.ClientId, +) (GetServiceStackByProjectResponse, error) { + var response GetServiceStackByProjectResponse + + u := "/api/rest/public/service-stack/search" + + filter := EsFilter{ + Search: []EsSearchItem{ + { + Name: "projectId", + Operator: "eq", + Value: projectId.Native(), + }, + { + Name: "clientId", + Operator: "eq", + Value: clientId.Native(), + }, + }, + } + + sdkResponse := sdkBase.Post(ctx, h.env, u, filter) + + if sdkResponse.Err != nil { + return response, sdkResponse.Err + } + response.responseHeaders = sdkResponse.HttpResponse.Header + response.responseStatusCode = sdkResponse.HttpResponse.StatusCode + + decoder := json.NewDecoder(sdkResponse.ResponseData) + if sdkResponse.HttpResponse.StatusCode < http.StatusMultipleChoices { + if err := decoder.Decode(&response.success); err != nil { + return response, err + } + } else { + responseString := sdkResponse.ResponseData.String() + apiErrorResponse := struct { + Error apiError.Error `json:"error"` + }{} + err := decoder.Decode(&apiErrorResponse) + if err != nil { + return response, errors.New(sdkResponse.HttpResponse.Status + ": " + responseString) + } + apiErrorResponse.Error.HttpStatusCode = sdkResponse.HttpResponse.StatusCode + response.err = apiErrorResponse.Error + } + + return response, nil +} + +type GetServiceStackByProjectResponse struct { + success EsServiceStackResponse + err error + responseHeaders http.Header + responseStatusCode int +} + +func (r GetServiceStackByProjectResponse) Output() (output EsServiceStackResponse, err error) { + return r.success, r.err +} + +type EsServiceStackResponse struct { + Limit int `json:"limit"` + Offset int `json:"offset"` + TotalHits int `json:"totalHits"` + Items []EsServiceStack `json:"items"` +} + +type EsServiceStack struct { + Id uuid.ServiceStackId `json:"id"` + ProjectId uuid.ProjectId `json:"projectId"` + ClientId uuid.ClientId `json:"clientId"` + ServiceStackTypeId stringId.ServiceStackTypeId `json:"serviceStackTypeId"` + ServiceStackTypeVersionId stringId.ServiceStackTypeVersionId `json:"serviceStackTypeVersionId"` + Status enum.ServiceStackStatusEnum `json:"status"` + Name types.String `json:"name"` + IsSystem types.Bool `json:"isSystem"` + ServiceStackTypeInfo EsServiceStackInfoJsonObject `json:"serviceStackTypeInfo"` +} + +type EsServiceStackInfoJsonObject struct { + ServiceStackTypeName types.String `json:"serviceStackTypeName"` // serviceStackTypeName - types.String + ServiceStackTypeCategory enum.ServiceStackTypeCategoryEnum `json:"serviceStackTypeCategory"` // serviceStackTypeCategory - enum.ServiceStackTypeCategoryEnum + ServiceStackTypeVersionName types.String `json:"serviceStackTypeVersionName"` // serviceStackTypeVersionName - types.String +} diff --git a/tools/gomodrun.go b/tools/gomodrun.go index 98600fbe..437601d2 100644 --- a/tools/gomodrun.go +++ b/tools/gomodrun.go @@ -1,12 +1,13 @@ package main import ( - "fmt" "log" "os" "os/exec" "path" "path/filepath" + + "github.com/pkg/errors" ) func getMod(dir string) (string, error) { @@ -17,7 +18,7 @@ func getMod(dir string) (string, error) { if newDir != "" { return getMod(newDir) } - return "", fmt.Errorf("go.mod not found") + return "", errors.New("go.mod not found") } func main() { diff --git a/tools/install.sh b/tools/install.sh index 70dead43..e0887c47 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -17,33 +17,7 @@ export PATH="${GOBIN}:${PATH}" echo "GOBIN=${GOBIN}" -go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.1 -go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2.0 - -[[ -f protoc.zip ]] && rm protoc.zip -[[ -f bin/protoc ]] && rm bin/protoc -[[ -d include ]] && rm -rf include -[[ -d tmp ]] && rm -rf tmp -mkdir include -mkdir tmp -cd tmp - -if [[ "$OSTYPE" == "darwin"* ]]; then - wget -O protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v21.3/protoc-21.3-osx-x86_64.zip -else - wget -O protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v21.3/protoc-21.3-linux-x86_64.zip -fi - -ls -la protoc.zip -unzip protoc.zip - -mv bin/protoc ../bin -mv -v ./include/* ../include/google - -cd .. -chmod +x bin/protoc - rm -rf tmp # https://github.com/golangci/golangci-lint#go Please, do not installDaemon golangci-lint by go get -curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b "$GOBIN" v1.45.2 +curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b "$GOBIN" v1.55.2