From c0d55e71952689b2b20098e4d18c0a23c9cf858e Mon Sep 17 00:00:00 2001 From: Hanzo AI Date: Wed, 20 May 2026 21:27:51 -0700 Subject: [PATCH] rpcpb: gate rpc.pb.go behind -tags grpc, hand-rolled types.go is default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per the project rule: ZAP internal, no google.golang.org/protobuf on the wire OR in the netrunner rpcpb package by default. rpcpb/rpc.pb.go: //go:build grpc — protoc-gen-go output stays available behind the legacy tag for external integrations that still want the proto Go types. rpcpb/types.go: //go:build !grpc — hand-written plain Go structs for every Request/Response/spec/info type. Same names, same field types, same json: tags so JSON wire compat with rpc.pb.go is preserved. Plus the proto-style GetX() helpers callers expect. Default-build dep graph for rpcpb is now SINGLE-FILE: rpcpb/types.go, zero google.golang.org/protobuf, zero google.golang.org/grpc. scripts/check-no-grpc.sh: CI gate. Walks the default-tag dep graph and fails non-zero if google.golang.org/grpc or grpc-ecosystem/grpc-gateway reappears. Wire this into CI to make the rule stick. --- rpcpb/rpc.pb.go | 5 + rpcpb/types.go | 993 +++++++++++++++++++++++++++++++++++++++ scripts/check-no-grpc.sh | 25 + 3 files changed, 1023 insertions(+) create mode 100644 rpcpb/types.go create mode 100755 scripts/check-no-grpc.sh diff --git a/rpcpb/rpc.pb.go b/rpcpb/rpc.pb.go index 4bc11c84..baadc177 100644 --- a/rpcpb/rpc.pb.go +++ b/rpcpb/rpc.pb.go @@ -1,8 +1,13 @@ +//go:build grpc + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 // protoc (unknown) // source: rpcpb/rpc.proto +// +// Legacy gRPC-tagged build only. Default builds use the hand-rolled types +// in rpcpb/types.go — no google.golang.org/protobuf on the dep graph. package rpcpb diff --git a/rpcpb/types.go b/rpcpb/types.go new file mode 100644 index 00000000..dd77a6b2 --- /dev/null +++ b/rpcpb/types.go @@ -0,0 +1,993 @@ +// Copyright (C) 2021-2026, Lux Industries Inc. All rights reserved. +// SPDX-License-Identifier: BSD-3-Clause + +//go:build !grpc + +// Package rpcpb holds the netrunner control-plane request/response types. +// +// Default build: hand-rolled plain Go structs with json: tags. No +// google.golang.org/protobuf, no protoimpl reflection — these are pure +// data containers that ride inside a ZAP envelope (see netrunner/zaprpc). +// +// Legacy build (-tags grpc): rpc.pb.go provides the protoc-gen-go version +// of the same names. Either file compiles, never both. +package rpcpb + +// ============================================================================= +// Cluster + shared info +// ============================================================================= + +// ClusterInfo describes a running netrunner cluster. +type ClusterInfo struct { + NodeNames []string `json:"nodeNames,omitempty"` + NodeInfos map[string]*NodeInfo `json:"nodeInfos,omitempty"` + Pid int32 `json:"pid,omitempty"` + RootDataDir string `json:"rootDataDir,omitempty"` + Healthy bool `json:"healthy,omitempty"` + AttachedPeerInfos map[string]*ListOfAttachedPeerInfo `json:"attachedPeerInfos,omitempty"` + CustomChainsHealthy bool `json:"customChainsHealthy,omitempty"` + CustomChains map[string]*CustomChainInfo `json:"customChains,omitempty"` + Chains map[string]*ChainInfo `json:"chains,omitempty"` +} + +func (m *ClusterInfo) GetClusterInfo() *ClusterInfo { return m } +func (m *ClusterInfo) GetNodeNames() []string { + if m == nil { + return nil + } + return m.NodeNames +} +func (m *ClusterInfo) GetNodeInfos() map[string]*NodeInfo { + if m == nil { + return nil + } + return m.NodeInfos +} +func (m *ClusterInfo) GetPid() int32 { + if m == nil { + return 0 + } + return m.Pid +} +func (m *ClusterInfo) GetRootDataDir() string { + if m == nil { + return "" + } + return m.RootDataDir +} +func (m *ClusterInfo) GetHealthy() bool { + if m == nil { + return false + } + return m.Healthy +} +func (m *ClusterInfo) GetAttachedPeerInfos() map[string]*ListOfAttachedPeerInfo { + if m == nil { + return nil + } + return m.AttachedPeerInfos +} +func (m *ClusterInfo) GetCustomChainsHealthy() bool { + if m == nil { + return false + } + return m.CustomChainsHealthy +} +func (m *ClusterInfo) GetCustomChains() map[string]*CustomChainInfo { + if m == nil { + return nil + } + return m.CustomChains +} +func (m *ClusterInfo) GetChains() map[string]*ChainInfo { + if m == nil { + return nil + } + return m.Chains +} + +// NodeInfo describes a single node inside a cluster. +type NodeInfo struct { + Name string `json:"name,omitempty"` + ExecPath string `json:"execPath,omitempty"` + Uri string `json:"uri,omitempty"` + Id string `json:"id,omitempty"` + LogDir string `json:"logDir,omitempty"` + DbDir string `json:"dbDir,omitempty"` + PluginDir string `json:"pluginDir,omitempty"` + WhitelistedChains string `json:"whitelistedChains,omitempty"` + Config []byte `json:"config,omitempty"` + Paused bool `json:"paused,omitempty"` +} + +func (m *NodeInfo) GetName() string { + if m == nil { + return "" + } + return m.Name +} +func (m *NodeInfo) GetExecPath() string { + if m == nil { + return "" + } + return m.ExecPath +} +func (m *NodeInfo) GetUri() string { + if m == nil { + return "" + } + return m.Uri +} +func (m *NodeInfo) GetId() string { + if m == nil { + return "" + } + return m.Id +} +func (m *NodeInfo) GetLogDir() string { + if m == nil { + return "" + } + return m.LogDir +} +func (m *NodeInfo) GetDbDir() string { + if m == nil { + return "" + } + return m.DbDir +} +func (m *NodeInfo) GetPluginDir() string { + if m == nil { + return "" + } + return m.PluginDir +} +func (m *NodeInfo) GetWhitelistedChains() string { + if m == nil { + return "" + } + return m.WhitelistedChains +} +func (m *NodeInfo) GetConfig() []byte { + if m == nil { + return nil + } + return m.Config +} +func (m *NodeInfo) GetPaused() bool { + if m == nil { + return false + } + return m.Paused +} + +type ChainInfo struct { + IsElastic bool `json:"isElastic,omitempty"` + ElasticChainId string `json:"elasticChainId,omitempty"` + ChainParticipants *ChainParticipants `json:"chainParticipants,omitempty"` +} + +func (m *ChainInfo) GetIsElastic() bool { + if m == nil { + return false + } + return m.IsElastic +} +func (m *ChainInfo) GetElasticChainId() string { + if m == nil { + return "" + } + return m.ElasticChainId +} +func (m *ChainInfo) GetChainParticipants() *ChainParticipants { + if m == nil { + return nil + } + return m.ChainParticipants +} + +type ChainParticipants struct { + NodeNames []string `json:"nodeNames,omitempty"` +} + +func (m *ChainParticipants) GetNodeNames() []string { + if m == nil { + return nil + } + return m.NodeNames +} + +type CustomChainInfo struct { + ChainName string `json:"chainName,omitempty"` + VmId string `json:"vmId,omitempty"` + PchainId string `json:"pchainId,omitempty"` + BlockchainId string `json:"blockchainId,omitempty"` +} + +func (m *CustomChainInfo) GetChainName() string { + if m == nil { + return "" + } + return m.ChainName +} +func (m *CustomChainInfo) GetVmId() string { + if m == nil { + return "" + } + return m.VmId +} +func (m *CustomChainInfo) GetPchainId() string { + if m == nil { + return "" + } + return m.PchainId +} +func (m *CustomChainInfo) GetBlockchainId() string { + if m == nil { + return "" + } + return m.BlockchainId +} + +type AttachedPeerInfo struct { + Id string `json:"id,omitempty"` +} + +func (m *AttachedPeerInfo) GetId() string { + if m == nil { + return "" + } + return m.Id +} + +type ListOfAttachedPeerInfo struct { + Peers []*AttachedPeerInfo `json:"peers,omitempty"` +} + +func (m *ListOfAttachedPeerInfo) GetPeers() []*AttachedPeerInfo { + if m == nil { + return nil + } + return m.Peers +} + +type NetworkHealth struct { + NetworkName string `json:"networkName,omitempty"` + NetworkId uint32 `json:"networkId,omitempty"` + Healthy bool `json:"healthy,omitempty"` + HealthyNodes []string `json:"healthyNodes,omitempty"` + UnhealthyNodes []string `json:"unhealthyNodes,omitempty"` +} + +type NetworkStatus struct { + NetworkName string `json:"networkName,omitempty"` + NetworkId uint32 `json:"networkId,omitempty"` + Status string `json:"status,omitempty"` + NumNodes uint32 `json:"numNodes,omitempty"` + Nodes []*NodeInfo `json:"nodes,omitempty"` + Chains []*ChainInfo `json:"chains,omitempty"` +} + +// ============================================================================= +// Specs +// ============================================================================= + +type ChainSpec struct { + Participants []string `json:"participants,omitempty"` + ChainConfigFile string `json:"chainConfigFile,omitempty"` +} + +func (m *ChainSpec) GetParticipants() []string { + if m == nil { + return nil + } + return m.Participants +} +func (m *ChainSpec) GetChainConfigFile() string { + if m == nil { + return "" + } + return m.ChainConfigFile +} + +type BlockchainSpec struct { + VmName string `json:"vmName,omitempty"` + Genesis string `json:"genesis,omitempty"` + ChainId *string `json:"chainId,omitempty"` + ChainSpec *ChainSpec `json:"chainSpec,omitempty"` + ChainConfig string `json:"chainConfig,omitempty"` + NetworkUpgrade string `json:"networkUpgrade,omitempty"` + BlockchainAlias string `json:"blockchainAlias,omitempty"` + PerNodeChainConfig string `json:"perNodeChainConfig,omitempty"` +} + +func (m *BlockchainSpec) GetVmName() string { + if m == nil { + return "" + } + return m.VmName +} +func (m *BlockchainSpec) GetGenesis() string { + if m == nil { + return "" + } + return m.Genesis +} +func (m *BlockchainSpec) GetChainId() string { + if m == nil || m.ChainId == nil { + return "" + } + return *m.ChainId +} +func (m *BlockchainSpec) GetChainSpec() *ChainSpec { + if m == nil { + return nil + } + return m.ChainSpec +} +func (m *BlockchainSpec) GetChainConfig() string { + if m == nil { + return "" + } + return m.ChainConfig +} +func (m *BlockchainSpec) GetNetworkUpgrade() string { + if m == nil { + return "" + } + return m.NetworkUpgrade +} +func (m *BlockchainSpec) GetBlockchainAlias() string { + if m == nil { + return "" + } + return m.BlockchainAlias +} +func (m *BlockchainSpec) GetPerNodeChainConfig() string { + if m == nil { + return "" + } + return m.PerNodeChainConfig +} + +type ElasticChainSpec struct { + ChainId string `json:"chainId,omitempty"` + AssetName string `json:"assetName,omitempty"` + AssetSymbol string `json:"assetSymbol,omitempty"` + InitialSupply uint64 `json:"initialSupply,omitempty"` + MaxSupply uint64 `json:"maxSupply,omitempty"` + MinConsumptionRate uint64 `json:"minConsumptionRate,omitempty"` + MaxConsumptionRate uint64 `json:"maxConsumptionRate,omitempty"` + MinValidatorStake uint64 `json:"minValidatorStake,omitempty"` + MaxValidatorStake uint64 `json:"maxValidatorStake,omitempty"` + MinStakeDuration uint64 `json:"minStakeDuration,omitempty"` + MaxStakeDuration uint64 `json:"maxStakeDuration,omitempty"` + MinDelegationFee uint32 `json:"minDelegationFee,omitempty"` + MinDelegatorStake uint64 `json:"minDelegatorStake,omitempty"` + MaxValidatorWeightFactor uint32 `json:"maxValidatorWeightFactor,omitempty"` + UptimeRequirement uint32 `json:"uptimeRequirement,omitempty"` +} + +func (m *ElasticChainSpec) GetChainId() string { + if m == nil { + return "" + } + return m.ChainId +} + +type PermissionlessValidatorSpec struct { + ChainId string `json:"chainId,omitempty"` + NodeName string `json:"nodeName,omitempty"` + StakedTokenAmount uint64 `json:"stakedTokenAmount,omitempty"` + AssetId string `json:"assetId,omitempty"` + StartTime string `json:"startTime,omitempty"` + StakeDuration uint64 `json:"stakeDuration,omitempty"` +} + +type RemoveChainValidatorSpec struct { + ChainId string `json:"chainId,omitempty"` + NodeNames []string `json:"nodeNames,omitempty"` +} + +func (m *RemoveChainValidatorSpec) GetChainId() string { + if m == nil { + return "" + } + return m.ChainId +} +func (m *RemoveChainValidatorSpec) GetNodeNames() []string { + if m == nil { + return nil + } + return m.NodeNames +} + +// ============================================================================= +// Ping / RPCVersion +// ============================================================================= + +type PingRequest struct{} + +type PingResponse struct { + Pid int32 `json:"pid,omitempty"` +} + +func (m *PingResponse) GetPid() int32 { + if m == nil { + return 0 + } + return m.Pid +} + +type RPCVersionRequest struct{} + +type RPCVersionResponse struct { + Version uint32 `json:"version,omitempty"` +} + +func (m *RPCVersionResponse) GetVersion() uint32 { + if m == nil { + return 0 + } + return m.Version +} + +// ============================================================================= +// Start +// ============================================================================= + +type StartRequest struct { + NetworkName string `json:"networkName,omitempty"` + NodeType string `json:"nodeType,omitempty"` + ExecPath string `json:"execPath,omitempty"` + NumNodes *uint32 `json:"numNodes,omitempty"` + WhitelistedChains *string `json:"whitelistedChains,omitempty"` + GlobalNodeConfig *string `json:"globalNodeConfig,omitempty"` + RootDataDir *string `json:"rootDataDir,omitempty"` + PluginDir string `json:"pluginDir,omitempty"` + BlockchainSpecs []*BlockchainSpec `json:"blockchainSpecs,omitempty"` + CustomNodeConfigs map[string]string `json:"customNodeConfigs,omitempty"` + ChainConfigs map[string]string `json:"chainConfigs,omitempty"` + UpgradeConfigs map[string]string `json:"upgradeConfigs,omitempty"` + ReassignPortsIfUsed *bool `json:"reassignPortsIfUsed,omitempty"` + DynamicPorts *bool `json:"dynamicPorts,omitempty"` + ChainConfigFiles map[string]string `json:"chainConfigFiles,omitempty"` +} + +func (m *StartRequest) GetNetworkName() string { + if m == nil { + return "" + } + return m.NetworkName +} +func (m *StartRequest) GetNodeType() string { + if m == nil { + return "" + } + return m.NodeType +} +func (m *StartRequest) GetExecPath() string { + if m == nil { + return "" + } + return m.ExecPath +} +func (m *StartRequest) GetNumNodes() uint32 { + if m == nil || m.NumNodes == nil { + return 0 + } + return *m.NumNodes +} +func (m *StartRequest) GetWhitelistedChains() string { + if m == nil || m.WhitelistedChains == nil { + return "" + } + return *m.WhitelistedChains +} +func (m *StartRequest) GetGlobalNodeConfig() string { + if m == nil || m.GlobalNodeConfig == nil { + return "" + } + return *m.GlobalNodeConfig +} +func (m *StartRequest) GetRootDataDir() string { + if m == nil || m.RootDataDir == nil { + return "" + } + return *m.RootDataDir +} +func (m *StartRequest) GetPluginDir() string { + if m == nil { + return "" + } + return m.PluginDir +} +func (m *StartRequest) GetBlockchainSpecs() []*BlockchainSpec { + if m == nil { + return nil + } + return m.BlockchainSpecs +} +func (m *StartRequest) GetCustomNodeConfigs() map[string]string { + if m == nil { + return nil + } + return m.CustomNodeConfigs +} +func (m *StartRequest) GetChainConfigs() map[string]string { + if m == nil { + return nil + } + return m.ChainConfigs +} +func (m *StartRequest) GetUpgradeConfigs() map[string]string { + if m == nil { + return nil + } + return m.UpgradeConfigs +} +func (m *StartRequest) GetChainConfigFiles() map[string]string { + if m == nil { + return nil + } + return m.ChainConfigFiles +} +func (m *StartRequest) GetReassignPortsIfUsed() bool { + if m == nil || m.ReassignPortsIfUsed == nil { + return false + } + return *m.ReassignPortsIfUsed +} +func (m *StartRequest) GetDynamicPorts() bool { + if m == nil || m.DynamicPorts == nil { + return false + } + return *m.DynamicPorts +} + +type StartResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` + ChainIds []string `json:"chainIds,omitempty"` +} + +// ============================================================================= +// CreateBlockchains / CreateChains +// ============================================================================= + +type CreateBlockchainsRequest struct { + BlockchainSpecs []*BlockchainSpec `json:"blockchainSpecs,omitempty"` +} + +func (m *CreateBlockchainsRequest) GetBlockchainSpecs() []*BlockchainSpec { + if m == nil { + return nil + } + return m.BlockchainSpecs +} + +type CreateBlockchainsResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` + ChainIds []string `json:"chainIds,omitempty"` +} + +type CreateChainsRequest struct { + ChainSpecs []*ChainSpec `json:"chainSpecs,omitempty"` +} + +func (m *CreateChainsRequest) GetChainSpecs() []*ChainSpec { + if m == nil { + return nil + } + return m.ChainSpecs +} + +type CreateChainsResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` + ChainIds []string `json:"chainIds,omitempty"` +} + +// ============================================================================= +// Elastic chain / validator +// ============================================================================= + +type TransformElasticChainsRequest struct { + ElasticChainSpec []*ElasticChainSpec `json:"elasticChainSpec,omitempty"` +} + +func (m *TransformElasticChainsRequest) GetElasticChainSpec() []*ElasticChainSpec { + if m == nil { + return nil + } + return m.ElasticChainSpec +} + +type TransformElasticChainsResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` + TxIds []string `json:"txIds,omitempty"` + AssetIds []string `json:"assetIds,omitempty"` +} + +type AddPermissionlessValidatorRequest struct { + ValidatorSpec []*PermissionlessValidatorSpec `json:"validatorSpec,omitempty"` +} + +func (m *AddPermissionlessValidatorRequest) GetValidatorSpec() []*PermissionlessValidatorSpec { + if m == nil { + return nil + } + return m.ValidatorSpec +} + +type AddPermissionlessValidatorResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` +} + +type RemoveChainValidatorRequest struct { + ValidatorSpec []*RemoveChainValidatorSpec `json:"validatorSpec,omitempty"` +} + +func (m *RemoveChainValidatorRequest) GetValidatorSpec() []*RemoveChainValidatorSpec { + if m == nil { + return nil + } + return m.ValidatorSpec +} + +type RemoveChainValidatorResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` +} + +// ============================================================================= +// Health / URIs / WaitForHealthy / Status / StreamStatus +// ============================================================================= + +type HealthRequest struct { + NetworkName *string `json:"networkName,omitempty"` +} + +type HealthResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` + NetworkHealth *NetworkHealth `json:"networkHealth,omitempty"` +} + +type URIsRequest struct{} + +type URIsResponse struct { + Uris []string `json:"uris,omitempty"` +} + +type WaitForHealthyRequest struct { + NetworkName *string `json:"networkName,omitempty"` +} + +type WaitForHealthyResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` +} + +type StatusRequest struct { + NetworkName *string `json:"networkName,omitempty"` +} + +type StatusResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` + NetworkStatus *NetworkStatus `json:"networkStatus,omitempty"` +} + +type StreamStatusRequest struct { + PushInterval int64 `json:"pushInterval,omitempty"` +} + +type StreamStatusResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` +} + +// ============================================================================= +// Node lifecycle: Add/Remove/Restart/Pause/Resume/Stop +// ============================================================================= + +type AddNodeRequest struct { + Name string `json:"name,omitempty"` + ExecPath string `json:"execPath,omitempty"` + NodeConfig *string `json:"nodeConfig,omitempty"` + ChainConfigs map[string]string `json:"chainConfigs,omitempty"` + UpgradeConfigs map[string]string `json:"upgradeConfigs,omitempty"` + ChainConfigFiles map[string]string `json:"chainConfigFiles,omitempty"` + PluginDir string `json:"pluginDir,omitempty"` +} + +func (m *AddNodeRequest) GetName() string { + if m == nil { + return "" + } + return m.Name +} +func (m *AddNodeRequest) GetExecPath() string { + if m == nil { + return "" + } + return m.ExecPath +} +func (m *AddNodeRequest) GetNodeConfig() string { + if m == nil || m.NodeConfig == nil { + return "" + } + return *m.NodeConfig +} +func (m *AddNodeRequest) GetChainConfigs() map[string]string { + if m == nil { + return nil + } + return m.ChainConfigs +} +func (m *AddNodeRequest) GetUpgradeConfigs() map[string]string { + if m == nil { + return nil + } + return m.UpgradeConfigs +} +func (m *AddNodeRequest) GetChainConfigFiles() map[string]string { + if m == nil { + return nil + } + return m.ChainConfigFiles +} +func (m *AddNodeRequest) GetPluginDir() string { + if m == nil { + return "" + } + return m.PluginDir +} + +type AddNodeResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` +} + +type RemoveNodeRequest struct { + Name string `json:"name,omitempty"` +} + +type RemoveNodeResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` +} + +type RestartNodeRequest struct { + Name string `json:"name,omitempty"` + ExecPath *string `json:"execPath,omitempty"` + WhitelistedChains *string `json:"whitelistedChains,omitempty"` + ChainConfigs map[string]string `json:"chainConfigs,omitempty"` + UpgradeConfigs map[string]string `json:"upgradeConfigs,omitempty"` + ChainConfigFiles map[string]string `json:"chainConfigFiles,omitempty"` + PluginDir string `json:"pluginDir,omitempty"` +} + +func (m *RestartNodeRequest) GetName() string { + if m == nil { + return "" + } + return m.Name +} +func (m *RestartNodeRequest) GetExecPath() string { + if m == nil || m.ExecPath == nil { + return "" + } + return *m.ExecPath +} +func (m *RestartNodeRequest) GetWhitelistedChains() string { + if m == nil || m.WhitelistedChains == nil { + return "" + } + return *m.WhitelistedChains +} +func (m *RestartNodeRequest) GetChainConfigs() map[string]string { + if m == nil { + return nil + } + return m.ChainConfigs +} +func (m *RestartNodeRequest) GetUpgradeConfigs() map[string]string { + if m == nil { + return nil + } + return m.UpgradeConfigs +} +func (m *RestartNodeRequest) GetChainConfigFiles() map[string]string { + if m == nil { + return nil + } + return m.ChainConfigFiles +} +func (m *RestartNodeRequest) GetPluginDir() string { + if m == nil { + return "" + } + return m.PluginDir +} + +type RestartNodeResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` +} + +type PauseNodeRequest struct { + Name string `json:"name,omitempty"` +} + +type PauseNodeResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` +} + +type ResumeNodeRequest struct { + Name string `json:"name,omitempty"` +} + +type ResumeNodeResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` +} + +type StopRequest struct{} + +type StopResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` +} + +// ============================================================================= +// AttachPeer / SendOutboundMessage +// ============================================================================= + +type AttachPeerRequest struct { + NodeName string `json:"nodeName,omitempty"` +} + +type AttachPeerResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` + AttachedPeerInfo *AttachedPeerInfo `json:"attachedPeerInfo,omitempty"` +} + +type SendOutboundMessageRequest struct { + NodeName string `json:"nodeName,omitempty"` + PeerId string `json:"peerId,omitempty"` + Op uint32 `json:"op,omitempty"` + Bytes []byte `json:"bytes,omitempty"` +} + +type SendOutboundMessageResponse struct { + Sent bool `json:"sent,omitempty"` +} + +// ============================================================================= +// Snapshots +// ============================================================================= + +type SaveSnapshotRequest struct { + NetworkName string `json:"networkName,omitempty"` + SnapshotName string `json:"snapshotName,omitempty"` +} + +func (m *SaveSnapshotRequest) GetNetworkName() string { + if m == nil { + return "" + } + return m.NetworkName +} +func (m *SaveSnapshotRequest) GetSnapshotName() string { + if m == nil { + return "" + } + return m.SnapshotName +} + +type SaveSnapshotResponse struct { + SnapshotPath string `json:"snapshotPath,omitempty"` +} + +type LoadSnapshotRequest struct { + NetworkName string `json:"networkName,omitempty"` + SnapshotName string `json:"snapshotName,omitempty"` + ExecPath *string `json:"execPath,omitempty"` + PluginDir string `json:"pluginDir,omitempty"` + RootDataDir *string `json:"rootDataDir,omitempty"` + ChainConfigs map[string]string `json:"chainConfigs,omitempty"` + UpgradeConfigs map[string]string `json:"upgradeConfigs,omitempty"` + GlobalNodeConfig *string `json:"globalNodeConfig,omitempty"` + ReassignPortsIfUsed *bool `json:"reassignPortsIfUsed,omitempty"` + ChainConfigFiles map[string]string `json:"chainConfigFiles,omitempty"` +} + +func (m *LoadSnapshotRequest) GetNetworkName() string { + if m == nil { + return "" + } + return m.NetworkName +} +func (m *LoadSnapshotRequest) GetSnapshotName() string { + if m == nil { + return "" + } + return m.SnapshotName +} +func (m *LoadSnapshotRequest) GetExecPath() string { + if m == nil || m.ExecPath == nil { + return "" + } + return *m.ExecPath +} +func (m *LoadSnapshotRequest) GetPluginDir() string { + if m == nil { + return "" + } + return m.PluginDir +} +func (m *LoadSnapshotRequest) GetRootDataDir() string { + if m == nil || m.RootDataDir == nil { + return "" + } + return *m.RootDataDir +} +func (m *LoadSnapshotRequest) GetChainConfigs() map[string]string { + if m == nil { + return nil + } + return m.ChainConfigs +} +func (m *LoadSnapshotRequest) GetUpgradeConfigs() map[string]string { + if m == nil { + return nil + } + return m.UpgradeConfigs +} +func (m *LoadSnapshotRequest) GetChainConfigFiles() map[string]string { + if m == nil { + return nil + } + return m.ChainConfigFiles +} +func (m *LoadSnapshotRequest) GetGlobalNodeConfig() string { + if m == nil || m.GlobalNodeConfig == nil { + return "" + } + return *m.GlobalNodeConfig +} +func (m *LoadSnapshotRequest) GetReassignPortsIfUsed() bool { + if m == nil || m.ReassignPortsIfUsed == nil { + return false + } + return *m.ReassignPortsIfUsed +} + +type LoadSnapshotResponse struct { + ClusterInfo *ClusterInfo `json:"clusterInfo,omitempty"` +} + +type RemoveSnapshotRequest struct { + NetworkName string `json:"networkName,omitempty"` + SnapshotName string `json:"snapshotName,omitempty"` +} + +func (m *RemoveSnapshotRequest) GetNetworkName() string { + if m == nil { + return "" + } + return m.NetworkName +} +func (m *RemoveSnapshotRequest) GetSnapshotName() string { + if m == nil { + return "" + } + return m.SnapshotName +} + +type RemoveSnapshotResponse struct{} + +type GetSnapshotNamesRequest struct { + NetworkName string `json:"networkName,omitempty"` +} + +func (m *GetSnapshotNamesRequest) GetNetworkName() string { + if m == nil { + return "" + } + return m.NetworkName +} + +type GetSnapshotNamesResponse struct { + SnapshotNames []string `json:"snapshotNames,omitempty"` +} diff --git a/scripts/check-no-grpc.sh b/scripts/check-no-grpc.sh new file mode 100755 index 00000000..04aa1414 --- /dev/null +++ b/scripts/check-no-grpc.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Enforces the project rule: default-tag builds of netrunner have ZERO +# google.golang.org/grpc and grpc-gateway transitive deps. +# +# Run from netrunner repo root: bash scripts/check-no-grpc.sh +# +# CI gate. Fails non-zero with a tagged list of offenders. + +set -euo pipefail + +cd "$(dirname "$0")/.." + +bad=$(go list -deps -f '{{.ImportPath}}' ./... 2>/dev/null \ + | grep -E '^google\.golang\.org/grpc(/|$)|grpc-ecosystem/grpc-gateway' \ + || true) + +if [[ -n "$bad" ]]; then + echo "ERROR: gRPC transitive deps leaked into default-tag build:" >&2 + echo "$bad" | sed 's/^/ - /' >&2 + echo "" >&2 + echo "ZAP is the only wire protocol on default builds. gate via -tags grpc only." >&2 + exit 1 +fi + +echo "ok: no grpc/grpc-gateway in default-tag dep graph"