hyperspace-rpc/hyperspace_rpc/schema.proto
2020-08-09 11:07:41 +02:00

284 lines
7.3 KiB
Protocol Buffer

syntax = "proto2";
package hyperspace;
import "hrpc.proto";
// General Structs
message Peer {
required bytes remotePublicKey = 1;
required string remoteAddress = 2;
required string type = 3;
}
// Hyperspace Methods
message HyperspaceStatusResponse {
required string apiVersion = 1;
optional bool holepunchable = 2;
optional string remoteAddress = 3;
}
// Corestore Methods
message OpenRequest {
required uint32 id = 1;
optional bytes key = 2;
optional string name = 3;
optional bool weak = 4;
}
message OpenResponse {
required bytes key = 1;
required uint64 length = 2;
required uint64 byteLength = 3;
required bool writable = 4;
repeated Peer peers = 5;
}
// Corestore Events
message FeedEvent {
required bytes key = 1;
}
// Networking Methods
message OpenNetworkResponse {
required bytes publicKey = 1;
repeated Peer peers = 2;
}
message NetworkStatus {
required bytes discoveryKey = 1;
optional bool announce = 2;
optional bool lookup = 3;
optional bool remember = 4;
}
message ConfigureNetworkRequest {
required NetworkStatus configuration = 1;
optional bool flush = 2;
optional bytes copyFrom = 3;
optional bool overwrite = 4 [default = true];
}
message NetworkStatusRequest {
required bytes discoveryKey = 1;
}
message NetworkStatusResponse {
optional NetworkStatus status = 1;
}
message AllNetworkStatusesResponse {
repeated NetworkStatus statuses = 1;
}
message RegisterNetworkExtensionRequest {
required uint64 resourceId = 1;
required string name = 2;
}
message NetworkExtensionMessage {
required uint64 id = 1;
required uint64 resourceId = 2;
optional bytes remotePublicKey = 3;
required bytes data = 4;
}
// Hypercore Methods
message CloseRequest {
required uint32 id = 1;
}
message GetRequest {
required uint32 id = 1;
required uint64 seq = 2;
required uint64 resourceId = 3;
optional bool wait = 4 [default = true];
optional bool ifAvailable = 5 [default = true];
optional uint64 onWaitId = 6;
}
message GetResponse {
optional bytes block = 1;
}
message AppendRequest {
required uint32 id = 1;
repeated bytes blocks = 2;
}
message AppendResponse {
required uint64 length = 1;
required uint64 byteLength = 2;
required uint64 seq = 3;
}
message UpdateRequest {
required uint32 id = 1;
optional uint64 minLength = 2;
optional bool ifAvailable = 3 [default = true];
optional bool hash = 4 [default = true];
}
message SeekRequest {
required uint32 id = 1;
required uint64 byteOffset = 2;
optional uint64 start = 3;
optional uint64 end = 4;
optional bool wait = 5 [default = true];
optional bool ifAvailable = 6 [default = true];
}
message SeekResponse {
required uint64 seq = 1;
required uint64 blockOffset = 2;
}
message HasRequest {
required uint32 id = 1;
required uint64 seq = 2;
}
message HasResponse {
required bool has = 1;
}
message CancelRequest {
required uint64 id = 1;
required uint64 resourceId = 2;
}
message DownloadRequest {
required uint64 id = 1;
required uint64 resourceId = 2;
optional uint64 start = 3;
optional uint64 end = 4;
repeated uint64 blocks = 5;
optional bool linear = 6;
}
message DownloadedRequest {
required uint64 id = 1;
optional uint64 start = 2;
optional uint64 end = 3;
}
message DownloadedResponse {
required uint64 bytes = 1;
}
message UndownloadRequest {
required uint64 id = 1;
required uint64 resourceId = 2;
}
message LockRequest {
required uint64 id = 1;
}
// Hypercore Events
message AppendEvent {
required uint64 id = 1;
required uint64 length = 2;
required uint64 byteLength = 3;
}
message PeerEvent {
required uint64 id = 1;
required Peer peer = 2;
}
message CloseEvent {
required uint64 id = 1;
}
message WaitEvent {
required uint64 id = 1;
required uint64 onWaitId = 2;
}
// Extension Methods
message RegisterExtensionRequest {
required uint64 id = 1;
required uint64 resourceId = 2;
required string name = 3;
}
message UnregisterExtensionRequest {
required uint64 id = 1;
required uint64 resourceId = 2;
}
message ExtensionMessage {
required uint64 id = 1;
required uint64 resourceId = 2;
optional bytes remotePublicKey = 3;
required bytes data = 4;
}
service Hyperspace {
option (hrpc.service) = 1;
// Methods
rpc Status (hrpc.Void) returns (HyperspaceStatusResponse) { option (hrpc.method) = 1; }
}
service Corestore {
option (hrpc.service) = 2;
// Methods
rpc Open (OpenRequest) returns (OpenResponse) { option (hrpc.method) = 1; }
// Events
rpc OnFeed (FeedEvent) returns (hrpc.Void) { option (hrpc.method) = 2; }
}
service Hypercore {
option (hrpc.service) = 3;
// Methods
rpc Get (GetRequest) returns (GetResponse) { option (hrpc.method) = 1; }
rpc Append (AppendRequest) returns (AppendResponse) { option (hrpc.method) = 2; }
rpc Update (UpdateRequest) returns (hrpc.Void) { option (hrpc.method) = 3; }
rpc Seek (SeekRequest) returns (SeekResponse) { option (hrpc.method) = 4; }
rpc Has (HasRequest) returns (HasResponse) { option (hrpc.method) = 5; }
rpc Cancel (CancelRequest) returns (hrpc.Void) { option (hrpc.method) = 6; }
rpc Download (DownloadRequest) returns (hrpc.Void) { option (hrpc.method) = 7; }
rpc Downloaded (DownloadedRequest) returns (DownloadedResponse) { option (hrpc.method) = 8; }
rpc Undownload (UndownloadRequest) returns (hrpc.Void) { option (hrpc.method) = 9; }
rpc Close (CloseRequest) returns (hrpc.Void) { option (hrpc.method) = 10; }
rpc RegisterExtension (RegisterExtensionRequest) returns (hrpc.Void) { option (hrpc.method) = 11; }
rpc UnregisterExtension (UnregisterExtensionRequest) returns (hrpc.Void) { option (hrpc.method) = 12; }
rpc SendExtension (ExtensionMessage) returns (hrpc.Void) { option (hrpc.method) = 13; }
rpc AcquireLock (LockRequest) returns (hrpc.Void) { option (hrpc.method) = 14; }
rpc ReleaseLock (LockRequest) returns (hrpc.Void) { option (hrpc.method) = 15; }
// Events
rpc OnAppend (AppendEvent) returns (hrpc.Void) { option (hrpc.method) = 16; }
rpc OnClose (CloseEvent) returns (hrpc.Void) { option (hrpc.method) = 17; }
rpc OnPeerOpen (PeerEvent) returns (hrpc.Void) { option (hrpc.method) = 18; }
rpc OnPeerRemove (PeerEvent) returns (hrpc.Void) { option (hrpc.method) = 19; }
rpc OnExtension (ExtensionMessage) returns (hrpc.Void) { option (hrpc.method) = 20; }
rpc OnWait (WaitEvent) returns (hrpc.Void) { option (hrpc.method) = 21; }
}
service Network {
option (hrpc.service) = 4;
// Methods
rpc Open (hrpc.Void) returns (OpenNetworkResponse) { option (hrpc.method) = 1; }
rpc Configure (ConfigureNetworkRequest) returns (NetworkStatusResponse) { option (hrpc.method) = 2; }
rpc Status (NetworkStatusRequest) returns (NetworkStatusResponse) { option (hrpc.method) = 3; }
rpc AllStatuses (hrpc.Void) returns (AllNetworkStatusesResponse) { option (hrpc.method) = 4; }
rpc RegisterExtension (RegisterExtensionRequest) returns (hrpc.Void) { option (hrpc.method) = 5; }
rpc UnregisterExtension (UnregisterExtensionRequest) returns (hrpc.Void) { option (hrpc.method) = 6; }
rpc SendExtension (ExtensionMessage) returns (hrpc.Void) { option (hrpc.method) = 7; }
// Events
rpc OnPeerAdd (PeerEvent) returns (hrpc.Void) { option (hrpc.method) = 8; }
rpc OnPeerRemove (PeerEvent) returns (hrpc.Void) { option (hrpc.method) = 9; }
rpc OnExtension (ExtensionMessage) returns (hrpc.Void) { option (hrpc.method) = 10; }
}