diff --git a/.circleci/config.yml b/.circleci/config.yml index 5b9afe950..c1ef7fa4f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -69,8 +69,10 @@ jobs: - go-pkg-v2-{{ arch }}-{{ checksum "go.sum" }} - go-pkg-v2-{{ arch }} - run: - name: install patched gox + name: install node and patched gox command: | + curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - + sudo apt install nodejs export PATH=$PATH:$GOROOT/bin:$GOPATH/bin mkdir -p $GOPATH/src/github.com/mitchellh cd $GOPATH/src/github.com/mitchellh @@ -86,7 +88,8 @@ jobs: COMMIT=$(echo $CIRCLE_SHA1 | cut -c -7) DATE=$(date --iso-8601=seconds) FLAGS="-X github.com/anytypeio/go-anytype-middleware/common.GitSummary=${GIT_SUMMARY} -X github.com/anytypeio/go-anytype-middleware/common.BuildDate=${DATE} -X github.com/anytypeio/go-anytype-middleware/common.GitCommit=${COMMIT} -X github.com/anytypeio/go-anytype-middleware/common.GitBranch=${CIRCLE_BRANCH} -X github.com/anytypeio/go-anytype-middleware/common.GitState=clean" - gox -ldflags="-w $FLAGS" -buildmode=c-archive -osarch="linux/amd64" -output="{{.OS}}-{{.Arch}}.a" github.com/anytypeio/go-anytype-middleware/lib/clib + export GO111MODULE=on + go build -o linux-amd64.a -ldflags "${FLAGS} -w -s" -buildmode=c-archive -v ./lib/clib - save_cache: key: go-pkg-v2-{{ arch }}-{{ checksum "go.sum" }} paths: @@ -124,7 +127,7 @@ jobs: fi OUT=~/dist/lib cp ~/project/linux-amd64.a ./dist/lib.a - cp ~/project/linux-amd64.a ./dist/lib.h + cp ~/project/linux-amd64.h ./dist/lib.h make build-js npm install diff --git a/Makefile b/Makefile index bade5659f..733a71e53 100644 --- a/Makefile +++ b/Makefile @@ -58,6 +58,7 @@ setup-protoc: mkdir -p $(GOPATH)/src/github.com/gogo cd $(GOPATH)/src/github.com/gogo; git clone https://github.com/anytypeio/protobuf cd $(GOPATH)/src/github.com/gogo/protobuf; go install github.com/gogo/protobuf/protoc-gen-gogofaster + cd $(GOPATH); go get -u github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin # protos: # libprotoc 3.9.1 @@ -67,4 +68,5 @@ setup-protoc: protos: $(eval P_STRUCT := Mgoogle/protobuf/struct.proto=github.com/golang/protobuf/ptypes/struct) cd pb/protos; protoc --gogofaster_out=$(P_STRUCT):.. *.proto - cd pb/protos/service; PACKAGE_PATH=github.com/anytypeio/go-anytype-middleware/pb protoc -I=.. -I=. --gogofast_out=plugins=gomobile:../../../lib service.proto \ No newline at end of file + cd pb/protos/service; PACKAGE_PATH=github.com/anytypeio/go-anytype-middleware/pb protoc -I=.. -I=. --gogofast_out=plugins=gomobile:../../../lib service.proto + cd pb/protos; protoc --doc_out=../../docs --doc_opt=markdown,proto.md service/*.proto *.proto diff --git a/core/version.go b/core/version.go index 86143b488..51f9eed44 100644 --- a/core/version.go +++ b/core/version.go @@ -1,12 +1,16 @@ package core -import "github.com/anytypeio/go-anytype-middleware/pb" +import ( + "fmt" + + "github.com/anytypeio/go-anytype-middleware/pb" +) // Set by ldflags var GitCommit, GitBranch, GitState, GitSummary, BuildDate string func (mw *Middleware) VersionGet(req *pb.Rpc_Version_Get_Request) *pb.Rpc_Version_Get_Response { - response := func(version string, code pb.Rpc_Version_Get_Response_Error_Code, err error) *pb.Rpc_Version_Get_Response { + response := func(version, details string, code pb.Rpc_Version_Get_Response_Error_Code, err error) *pb.Rpc_Version_Get_Response { m := &pb.Rpc_Version_Get_Response{Version: version, Error: &pb.Rpc_Version_Get_Response_Error{Code: code}} if err != nil { m.Error.Description = err.Error() @@ -16,8 +20,10 @@ func (mw *Middleware) VersionGet(req *pb.Rpc_Version_Get_Request) *pb.Rpc_Versio } if len(GitSummary) == 0 { - return response("", pb.Rpc_Version_Get_Response_Error_VERSION_IS_EMPTY, nil) + return response("", "", pb.Rpc_Version_Get_Response_Error_VERSION_IS_EMPTY, nil) } - return response(GitSummary, pb.Rpc_Version_Get_Response_Error_NULL, nil) + details := fmt.Sprintf("build on %s from %s at #%s(%s)", BuildDate, GitCommit, GitBranch, GitState) + + return response(GitSummary, details, pb.Rpc_Version_Get_Response_Error_NULL, nil) } diff --git a/docs/proto.md b/docs/proto.md new file mode 100644 index 000000000..c4820b675 --- /dev/null +++ b/docs/proto.md @@ -0,0 +1,2399 @@ +# Protocol Documentation + + +## Table of Contents + +- [service/service.proto](#service/service.proto) + + + + - [ClientCommands](#anytype.ClientCommands) + + +- [changes.proto](#changes.proto) + - [BlockChanges](#anytype.BlockChanges) + - [BlocksListSingleChange](#anytype.BlocksListSingleChange) + - [Change](#anytype.Change) + - [Change.Block](#anytype.Change.Block) + - [Change.Block.Children](#anytype.Change.Block.Children) + - [Change.Block.Content](#anytype.Change.Block.Content) + - [Change.Block.Content.Dashboard](#anytype.Change.Block.Content.Dashboard) + - [Change.Block.Content.Media](#anytype.Change.Block.Content.Media) + - [Change.Block.Content.Page](#anytype.Change.Block.Content.Page) + - [Change.Block.Content.Text](#anytype.Change.Block.Content.Text) + - [Change.Block.Header](#anytype.Change.Block.Header) + + + + + +- [commands.proto](#commands.proto) + - [Rpc](#anytype.Rpc) + - [Rpc.Account](#anytype.Rpc.Account) + - [Rpc.Account.Create](#anytype.Rpc.Account.Create) + - [Rpc.Account.Create.Request](#anytype.Rpc.Account.Create.Request) + - [Rpc.Account.Create.Response](#anytype.Rpc.Account.Create.Response) + - [Rpc.Account.Create.Response.Error](#anytype.Rpc.Account.Create.Response.Error) + - [Rpc.Account.Recover](#anytype.Rpc.Account.Recover) + - [Rpc.Account.Recover.Request](#anytype.Rpc.Account.Recover.Request) + - [Rpc.Account.Recover.Response](#anytype.Rpc.Account.Recover.Response) + - [Rpc.Account.Recover.Response.Error](#anytype.Rpc.Account.Recover.Response.Error) + - [Rpc.Account.Select](#anytype.Rpc.Account.Select) + - [Rpc.Account.Select.Request](#anytype.Rpc.Account.Select.Request) + - [Rpc.Account.Select.Response](#anytype.Rpc.Account.Select.Response) + - [Rpc.Account.Select.Response.Error](#anytype.Rpc.Account.Select.Response.Error) + - [Rpc.Block](#anytype.Rpc.Block) + - [Rpc.Block.Create](#anytype.Rpc.Block.Create) + - [Rpc.Block.Create.Request](#anytype.Rpc.Block.Create.Request) + - [Rpc.Block.Create.Response](#anytype.Rpc.Block.Create.Response) + - [Rpc.Block.Create.Response.Error](#anytype.Rpc.Block.Create.Response.Error) + - [Rpc.Block.History](#anytype.Rpc.Block.History) + - [Rpc.Block.History.Move](#anytype.Rpc.Block.History.Move) + - [Rpc.Block.History.Move.Request](#anytype.Rpc.Block.History.Move.Request) + - [Rpc.Block.History.Move.Response](#anytype.Rpc.Block.History.Move.Response) + - [Rpc.Block.History.Move.Response.Error](#anytype.Rpc.Block.History.Move.Response.Error) + - [Rpc.Block.Open](#anytype.Rpc.Block.Open) + - [Rpc.Block.Open.Request](#anytype.Rpc.Block.Open.Request) + - [Rpc.Block.Open.Response](#anytype.Rpc.Block.Open.Response) + - [Rpc.Block.Open.Response.Error](#anytype.Rpc.Block.Open.Response.Error) + - [Rpc.Block.Update](#anytype.Rpc.Block.Update) + - [Rpc.Block.Update.Request](#anytype.Rpc.Block.Update.Request) + - [Rpc.Block.Update.Response](#anytype.Rpc.Block.Update.Response) + - [Rpc.Block.Update.Response.Error](#anytype.Rpc.Block.Update.Response.Error) + - [Rpc.Image](#anytype.Rpc.Image) + - [Rpc.Image.Get](#anytype.Rpc.Image.Get) + - [Rpc.Image.Get.Blob](#anytype.Rpc.Image.Get.Blob) + - [Rpc.Image.Get.Blob.Request](#anytype.Rpc.Image.Get.Blob.Request) + - [Rpc.Image.Get.Blob.Response](#anytype.Rpc.Image.Get.Blob.Response) + - [Rpc.Image.Get.Blob.Response.Error](#anytype.Rpc.Image.Get.Blob.Response.Error) + - [Rpc.Image.Get.File](#anytype.Rpc.Image.Get.File) + - [Rpc.Image.Get.File.Request](#anytype.Rpc.Image.Get.File.Request) + - [Rpc.Image.Get.File.Response](#anytype.Rpc.Image.Get.File.Response) + - [Rpc.Image.Get.File.Response.Error](#anytype.Rpc.Image.Get.File.Response.Error) + - [Rpc.Ipfs](#anytype.Rpc.Ipfs) + - [Rpc.Ipfs.Get](#anytype.Rpc.Ipfs.Get) + - [Rpc.Ipfs.Get.File](#anytype.Rpc.Ipfs.Get.File) + - [Rpc.Ipfs.Get.File.Request](#anytype.Rpc.Ipfs.Get.File.Request) + - [Rpc.Ipfs.Get.File.Response](#anytype.Rpc.Ipfs.Get.File.Response) + - [Rpc.Ipfs.Get.File.Response.Error](#anytype.Rpc.Ipfs.Get.File.Response.Error) + - [Rpc.Log](#anytype.Rpc.Log) + - [Rpc.Log.Send](#anytype.Rpc.Log.Send) + - [Rpc.Log.Send.Request](#anytype.Rpc.Log.Send.Request) + - [Rpc.Log.Send.Response](#anytype.Rpc.Log.Send.Response) + - [Rpc.Log.Send.Response.Error](#anytype.Rpc.Log.Send.Response.Error) + - [Rpc.Version](#anytype.Rpc.Version) + - [Rpc.Version.Get](#anytype.Rpc.Version.Get) + - [Rpc.Version.Get.Request](#anytype.Rpc.Version.Get.Request) + - [Rpc.Version.Get.Response](#anytype.Rpc.Version.Get.Response) + - [Rpc.Version.Get.Response.Error](#anytype.Rpc.Version.Get.Response.Error) + - [Rpc.Wallet](#anytype.Rpc.Wallet) + - [Rpc.Wallet.Create](#anytype.Rpc.Wallet.Create) + - [Rpc.Wallet.Create.Request](#anytype.Rpc.Wallet.Create.Request) + - [Rpc.Wallet.Create.Response](#anytype.Rpc.Wallet.Create.Response) + - [Rpc.Wallet.Create.Response.Error](#anytype.Rpc.Wallet.Create.Response.Error) + - [Rpc.Wallet.Recover](#anytype.Rpc.Wallet.Recover) + - [Rpc.Wallet.Recover.Request](#anytype.Rpc.Wallet.Recover.Request) + - [Rpc.Wallet.Recover.Response](#anytype.Rpc.Wallet.Recover.Response) + - [Rpc.Wallet.Recover.Response.Error](#anytype.Rpc.Wallet.Recover.Response.Error) + + - [Rpc.Account.Create.Response.Error.Code](#anytype.Rpc.Account.Create.Response.Error.Code) + - [Rpc.Account.Recover.Response.Error.Code](#anytype.Rpc.Account.Recover.Response.Error.Code) + - [Rpc.Account.Select.Response.Error.Code](#anytype.Rpc.Account.Select.Response.Error.Code) + - [Rpc.Block.Create.Response.Error.Code](#anytype.Rpc.Block.Create.Response.Error.Code) + - [Rpc.Block.History.Move.Response.Error.Code](#anytype.Rpc.Block.History.Move.Response.Error.Code) + - [Rpc.Block.Open.Response.Error.Code](#anytype.Rpc.Block.Open.Response.Error.Code) + - [Rpc.Block.Update.Response.Error.Code](#anytype.Rpc.Block.Update.Response.Error.Code) + - [Rpc.Image.Get.Blob.Response.Error.Code](#anytype.Rpc.Image.Get.Blob.Response.Error.Code) + - [Rpc.Image.Get.File.Response.Error.Code](#anytype.Rpc.Image.Get.File.Response.Error.Code) + - [Rpc.Ipfs.Get.File.Response.Error.Code](#anytype.Rpc.Ipfs.Get.File.Response.Error.Code) + - [Rpc.Log.Send.Request.Level](#anytype.Rpc.Log.Send.Request.Level) + - [Rpc.Log.Send.Response.Error.Code](#anytype.Rpc.Log.Send.Response.Error.Code) + - [Rpc.Version.Get.Response.Error.Code](#anytype.Rpc.Version.Get.Response.Error.Code) + - [Rpc.Wallet.Create.Response.Error.Code](#anytype.Rpc.Wallet.Create.Response.Error.Code) + - [Rpc.Wallet.Recover.Response.Error.Code](#anytype.Rpc.Wallet.Recover.Response.Error.Code) + + + + +- [events.proto](#events.proto) + - [Event](#anytype.Event) + - [Event.Account](#anytype.Event.Account) + - [Event.Account.Show](#anytype.Event.Account.Show) + - [Event.Block](#anytype.Event.Block) + - [Event.Block.Create](#anytype.Event.Block.Create) + - [Event.Block.FilesUpload](#anytype.Event.Block.FilesUpload) + - [Event.Block.Show](#anytype.Event.Block.Show) + - [Event.Block.Update](#anytype.Event.Block.Update) + - [Event.User](#anytype.Event.User) + - [Event.User.Block](#anytype.Event.User.Block) + - [Event.User.Block.Join](#anytype.Event.User.Block.Join) + - [Event.User.Block.Left](#anytype.Event.User.Block.Left) + - [Event.User.Block.SelectRange](#anytype.Event.User.Block.SelectRange) + - [Event.User.Block.TextRange](#anytype.Event.User.Block.TextRange) + + + + + +- [models.proto](#models.proto) + - [Model](#anytype.Model) + - [Model.Account](#anytype.Model.Account) + - [Model.Account.Avatar](#anytype.Model.Account.Avatar) + - [Model.Block](#anytype.Model.Block) + - [Model.Block.Content](#anytype.Model.Block.Content) + - [Model.Block.Content.Dashboard](#anytype.Model.Block.Content.Dashboard) + - [Model.Block.Content.Dataview](#anytype.Model.Block.Content.Dataview) + - [Model.Block.Content.Div](#anytype.Model.Block.Content.Div) + - [Model.Block.Content.Layout](#anytype.Model.Block.Content.Layout) + - [Model.Block.Content.Media](#anytype.Model.Block.Content.Media) + - [Model.Block.Content.Media.FilePreview](#anytype.Model.Block.Content.Media.FilePreview) + - [Model.Block.Content.Media.ImagePreview](#anytype.Model.Block.Content.Media.ImagePreview) + - [Model.Block.Content.Media.VideoPreview](#anytype.Model.Block.Content.Media.VideoPreview) + - [Model.Block.Content.Page](#anytype.Model.Block.Content.Page) + - [Model.Block.Content.Text](#anytype.Model.Block.Content.Text) + - [Model.Block.Content.Text.Mark](#anytype.Model.Block.Content.Text.Mark) + - [Model.Block.Content.Text.Marks](#anytype.Model.Block.Content.Text.Marks) + - [Model.Block.Header](#anytype.Model.Block.Header) + - [Model.Block.Header.Permissions](#anytype.Model.Block.Header.Permissions) + - [Model.Image](#anytype.Model.Image) + - [Model.Range](#anytype.Model.Range) + - [Model.Struct](#anytype.Model.Struct) + - [Model.Struct.FieldsEntry](#anytype.Model.Struct.FieldsEntry) + - [Model.Struct.ListValue](#anytype.Model.Struct.ListValue) + - [Model.Struct.Value](#anytype.Model.Struct.Value) + - [Model.Video](#anytype.Model.Video) + + - [Model.Block.Content.Dashboard.Style](#anytype.Model.Block.Content.Dashboard.Style) + - [Model.Block.Content.Layout.Style](#anytype.Model.Block.Content.Layout.Style) + - [Model.Block.Content.Media.State](#anytype.Model.Block.Content.Media.State) + - [Model.Block.Content.Page.Style](#anytype.Model.Block.Content.Page.Style) + - [Model.Block.Content.Text.Mark.Type](#anytype.Model.Block.Content.Text.Mark.Type) + - [Model.Block.Content.Text.MarkerType](#anytype.Model.Block.Content.Text.MarkerType) + - [Model.Block.Content.Text.Style](#anytype.Model.Block.Content.Text.Style) + - [Model.Block.Header.Type](#anytype.Model.Block.Header.Type) + - [Model.Image.Size](#anytype.Model.Image.Size) + - [Model.Struct.NullValue](#anytype.Model.Struct.NullValue) + - [Model.Video.Size](#anytype.Model.Video.Size) + + + + +- [Scalar Value Types](#scalar-value-types) + + + + +
+ +## service/service.proto + + + + + + + + + + + +### ClientCommands + + +| Method Name | Request Type | Response Type | Description | +| ----------- | ------------ | ------------- | ------------| +| WalletCreate | [Rpc.Wallet.Create.Request](#anytype.Rpc.Wallet.Create.Request) | [Rpc.Wallet.Create.Response](#anytype.Rpc.Wallet.Create.Response) | | +| WalletRecover | [Rpc.Wallet.Recover.Request](#anytype.Rpc.Wallet.Recover.Request) | [Rpc.Wallet.Recover.Response](#anytype.Rpc.Wallet.Recover.Response) | | +| AccountRecover | [Rpc.Account.Recover.Request](#anytype.Rpc.Account.Recover.Request) | [Rpc.Account.Recover.Response](#anytype.Rpc.Account.Recover.Response) | | +| AccountCreate | [Rpc.Account.Create.Request](#anytype.Rpc.Account.Create.Request) | [Rpc.Account.Create.Response](#anytype.Rpc.Account.Create.Response) | | +| AccountSelect | [Rpc.Account.Select.Request](#anytype.Rpc.Account.Select.Request) | [Rpc.Account.Select.Response](#anytype.Rpc.Account.Select.Response) | | +| ImageGetBlob | [Rpc.Image.Get.Blob.Request](#anytype.Rpc.Image.Get.Blob.Request) | [Rpc.Image.Get.Blob.Response](#anytype.Rpc.Image.Get.Blob.Response) | | +| VersionGet | [Rpc.Version.Get.Request](#anytype.Rpc.Version.Get.Request) | [Rpc.Version.Get.Response](#anytype.Rpc.Version.Get.Response) | | +| LogSend | [Rpc.Log.Send.Request](#anytype.Rpc.Log.Send.Request) | [Rpc.Log.Send.Response](#anytype.Rpc.Log.Send.Response) | | +| BlockOpen | [Rpc.Block.Open.Request](#anytype.Rpc.Block.Open.Request) | [Rpc.Block.Open.Response](#anytype.Rpc.Block.Open.Response) | | +| BlockCreate | [Rpc.Block.Create.Request](#anytype.Rpc.Block.Create.Request) | [Rpc.Block.Create.Response](#anytype.Rpc.Block.Create.Response) | | +| BlockUpdate | [Rpc.Block.Update.Request](#anytype.Rpc.Block.Update.Request) | [Rpc.Block.Update.Response](#anytype.Rpc.Block.Update.Response) | | +| BlockHistoryMove | [Rpc.Block.History.Move.Request](#anytype.Rpc.Block.History.Move.Request) | [Rpc.Block.History.Move.Response](#anytype.Rpc.Block.History.Move.Response) | rpc BlockFilesUpload (Block Rpc.History.Move.Request) returns (BlockRpc..History Move.Response); | + + + + + + + + +## changes.proto + + + + + +### BlockChanges + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| changes | [BlocksListSingleChange](#anytype.BlocksListSingleChange) | repeated | | + + + + + + + + +### BlocksListSingleChange + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | repeated | | +| text | [Change.Block.Content.Text](#anytype.Change.Block.Content.Text) | | | +| blockHeader | [Change.Block.Header](#anytype.Change.Block.Header) | | | +| blockChildren | [Change.Block.Children](#anytype.Change.Block.Children) | | | +| page | [Change.Block.Content.Page](#anytype.Change.Block.Content.Page) | | | +| dashboard | [Change.Block.Content.Dashboard](#anytype.Change.Block.Content.Dashboard) | | | +| media | [Change.Block.Content.Media](#anytype.Change.Block.Content.Media) | | | + + + + + + + + +### Change + + + + + + + + + +### Change.Block + + + + + + + + + +### Change.Block.Children + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| children | [string](#string) | repeated | | + + + + + + + + +### Change.Block.Content + + + + + + + + + +### Change.Block.Content.Dashboard + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| style | [Model.Block.Content.Dashboard.Style](#anytype.Model.Block.Content.Dashboard.Style) | | | +| header | [Model.Block.Header](#anytype.Model.Block.Header) | | not a dashboard header – one of children | + + + + + + + + +### Change.Block.Content.Media + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| link | [string](#string) | | | +| state | [Model.Block.Content.Media.State](#anytype.Model.Block.Content.Media.State) | | | + + + + + + + + +### Change.Block.Content.Page + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| style | [Model.Block.Content.Page.Style](#anytype.Model.Block.Content.Page.Style) | | | +| block | [Model.Block](#anytype.Model.Block) | | | + + + + + + + + +### Change.Block.Content.Text + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| text | [string](#string) | | | +| style | [Model.Block.Content.Text.Style](#anytype.Model.Block.Content.Text.Style) | | | +| marks | [Model.Block.Content.Text.Marks](#anytype.Model.Block.Content.Text.Marks) | | | +| toggleable | [bool](#bool) | | | +| markerType | [Model.Block.Content.Text.MarkerType](#anytype.Model.Block.Content.Text.MarkerType) | | | +| checkable | [bool](#bool) | | | +| checked | [bool](#bool) | | | + + + + + + + + +### Change.Block.Header + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | | | +| type | [Model.Block.Header.Type](#anytype.Model.Block.Header.Type) | | | +| name | [string](#string) | | | +| icon | [string](#string) | | | +| permissions | [Model.Block.Header.Permissions](#anytype.Model.Block.Header.Permissions) | | | + + + + + + + + + + + + + + + + + + +## commands.proto + + + + + +### Rpc + + + + + + + + + +### Rpc.Account + + + + + + + + + +### Rpc.Account.Create + + + + + + + + + +### Rpc.Account.Create.Request +Front end to middleware request-to-create-an account + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| name | [string](#string) | | Account name | +| avatarLocalPath | [string](#string) | | Path to an image, that will be used as an avatar of this account | +| avatarColor | [string](#string) | | Avatar color as an alternative for avatar image | + + + + + + + + +### Rpc.Account.Create.Response +Middleware-to-front-end response for an account creation request, that can contain a NULL error and created account or a non-NULL error and an empty account + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Account.Create.Response.Error](#anytype.Rpc.Account.Create.Response.Error) | | Error while trying to create an account | +| account | [Model.Account](#anytype.Model.Account) | | A newly created account; In case of a failure, i.e. error is non-NULL, the account model should contain empty/default-value fields | + + + + + + + + +### Rpc.Account.Create.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Account.Create.Response.Error.Code](#anytype.Rpc.Account.Create.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Account.Recover + + + + + + + + + +### Rpc.Account.Recover.Request +Front end to middleware request-to-start-search of an accounts for a recovered mnemonic. +Each of an account that would be found will come with an AccountAdd event + + + + + + + + +### Rpc.Account.Recover.Response +Middleware-to-front-end response to an account recover request, that can contain a NULL error and created account or a non-NULL error and an empty account + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Account.Recover.Response.Error](#anytype.Rpc.Account.Recover.Response.Error) | | Error while trying to recover an account | + + + + + + + + +### Rpc.Account.Recover.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Account.Recover.Response.Error.Code](#anytype.Rpc.Account.Recover.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Account.Select + + + + + + + + + +### Rpc.Account.Select.Request +Front end to middleware request-to-launch-a specific account using account id and a root path +User can select an account from those, that came with an AccountAdd events + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | | Id of a selected account | +| rootPath | [string](#string) | | Root path is optional, set if this is a first request | + + + + + + + + +### Rpc.Account.Select.Response +Middleware-to-front-end response for an account select request, that can contain a NULL error and selected account or a non-NULL error and an empty account + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Account.Select.Response.Error](#anytype.Rpc.Account.Select.Response.Error) | | Error while trying to launch/select an account | +| account | [Model.Account](#anytype.Model.Account) | | Selected account | + + + + + + + + +### Rpc.Account.Select.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Account.Select.Response.Error.Code](#anytype.Rpc.Account.Select.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Block + + + + + + + + + +### Rpc.Block.Create + + + + + + + + + +### Rpc.Block.Create.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| type | [Model.Block.Header.Type](#anytype.Model.Block.Header.Type) | | | +| contextBlockId | [string](#string) | | | + + + + + + + + +### Rpc.Block.Create.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Block.Create.Response.Error](#anytype.Rpc.Block.Create.Response.Error) | | | + + + + + + + + +### Rpc.Block.Create.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Block.Create.Response.Error.Code](#anytype.Rpc.Block.Create.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Block.History + + + + + + + + + +### Rpc.Block.History.Move + + + + + + + + + +### Rpc.Block.History.Move.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | | | +| contextBlockId | [string](#string) | | | +| moveForward | [bool](#bool) | | | + + + + + + + + +### Rpc.Block.History.Move.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Block.History.Move.Response.Error](#anytype.Rpc.Block.History.Move.Response.Error) | | | + + + + + + + + +### Rpc.Block.History.Move.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Block.History.Move.Response.Error.Code](#anytype.Rpc.Block.History.Move.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Block.Open + + + + + + + + + +### Rpc.Block.Open.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | | | + + + + + + + + +### Rpc.Block.Open.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Block.Open.Response.Error](#anytype.Rpc.Block.Open.Response.Error) | | | +| blockHeader | [Model.Block.Header](#anytype.Model.Block.Header) | | | + + + + + + + + +### Rpc.Block.Open.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Block.Open.Response.Error.Code](#anytype.Rpc.Block.Open.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Block.Update + + + + + + + + + +### Rpc.Block.Update.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| changes | [BlockChanges](#anytype.BlockChanges) | | | + + + + + + + + +### Rpc.Block.Update.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Block.Update.Response.Error](#anytype.Rpc.Block.Update.Response.Error) | | | + + + + + + + + +### Rpc.Block.Update.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Block.Update.Response.Error.Code](#anytype.Rpc.Block.Update.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Image + + + + + + + + + +### Rpc.Image.Get + + + + + + + + + +### Rpc.Image.Get.Blob + + + + + + + + + +### Rpc.Image.Get.Blob.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | | | +| size | [Model.Image.Size](#anytype.Model.Image.Size) | | | + + + + + + + + +### Rpc.Image.Get.Blob.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Image.Get.Blob.Response.Error](#anytype.Rpc.Image.Get.Blob.Response.Error) | | | +| blob | [bytes](#bytes) | | | + + + + + + + + +### Rpc.Image.Get.Blob.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Image.Get.Blob.Response.Error.Code](#anytype.Rpc.Image.Get.Blob.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Image.Get.File + + + + + + + + + +### Rpc.Image.Get.File.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | | | +| size | [Model.Image.Size](#anytype.Model.Image.Size) | | | + + + + + + + + +### Rpc.Image.Get.File.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Image.Get.File.Response.Error](#anytype.Rpc.Image.Get.File.Response.Error) | | | +| localPath | [string](#string) | | | + + + + + + + + +### Rpc.Image.Get.File.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Image.Get.File.Response.Error.Code](#anytype.Rpc.Image.Get.File.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Ipfs + + + + + + + + + +### Rpc.Ipfs.Get + + + + + + + + + +### Rpc.Ipfs.Get.File + + + + + + + + + +### Rpc.Ipfs.Get.File.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | | | + + + + + + + + +### Rpc.Ipfs.Get.File.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Ipfs.Get.File.Response.Error](#anytype.Rpc.Ipfs.Get.File.Response.Error) | | | +| data | [bytes](#bytes) | | | +| media | [string](#string) | | | +| name | [string](#string) | | | + + + + + + + + +### Rpc.Ipfs.Get.File.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Ipfs.Get.File.Response.Error.Code](#anytype.Rpc.Ipfs.Get.File.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Log + + + + + + + + + +### Rpc.Log.Send + + + + + + + + + +### Rpc.Log.Send.Request + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| message | [string](#string) | | | +| level | [Rpc.Log.Send.Request.Level](#anytype.Rpc.Log.Send.Request.Level) | | | + + + + + + + + +### Rpc.Log.Send.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Log.Send.Response.Error](#anytype.Rpc.Log.Send.Response.Error) | | | + + + + + + + + +### Rpc.Log.Send.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Log.Send.Response.Error.Code](#anytype.Rpc.Log.Send.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Version + + + + + + + + + +### Rpc.Version.Get + + + + + + + + + +### Rpc.Version.Get.Request + + + + + + + + + +### Rpc.Version.Get.Response + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Version.Get.Response.Error](#anytype.Rpc.Version.Get.Response.Error) | | | +| version | [string](#string) | | | + + + + + + + + +### Rpc.Version.Get.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Version.Get.Response.Error.Code](#anytype.Rpc.Version.Get.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Wallet + + + + + + + + + +### Rpc.Wallet.Create + + + + + + + + + +### Rpc.Wallet.Create.Request +Front-end-to-middleware request to create a new wallet + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| rootPath | [string](#string) | | Path to a wallet directory | + + + + + + + + +### Rpc.Wallet.Create.Response +Middleware-to-front-end response, that can contain mnemonic of a created account and a NULL error or an empty mnemonic and a non-NULL error + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Wallet.Create.Response.Error](#anytype.Rpc.Wallet.Create.Response.Error) | | | +| mnemonic | [string](#string) | | Mnemonic of a new account (sequence of words, divided by spaces) | + + + + + + + + +### Rpc.Wallet.Create.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Wallet.Create.Response.Error.Code](#anytype.Rpc.Wallet.Create.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + +### Rpc.Wallet.Recover + + + + + + + + + +### Rpc.Wallet.Recover.Request +Front end to middleware request-to-recover-a wallet with this mnemonic and a rootPath + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| rootPath | [string](#string) | | Path to a wallet directory | +| mnemonic | [string](#string) | | Mnemonic of a wallet to recover | + + + + + + + + +### Rpc.Wallet.Recover.Response +Middleware-to-front-end response, that can contain a NULL error or a non-NULL error + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| error | [Rpc.Wallet.Recover.Response.Error](#anytype.Rpc.Wallet.Recover.Response.Error) | | Error while trying to recover a wallet | + + + + + + + + +### Rpc.Wallet.Recover.Response.Error + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [Rpc.Wallet.Recover.Response.Error.Code](#anytype.Rpc.Wallet.Recover.Response.Error.Code) | | | +| description | [string](#string) | | | + + + + + + + + + + +### Rpc.Account.Create.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | No error; Account should be non-empty | +| UNKNOWN_ERROR | 1 | Any other errors | +| BAD_INPUT | 2 | Avatar or name is not correct | +| ACCOUNT_CREATED_BUT_FAILED_TO_START_NODE | 101 | | +| ACCOUNT_CREATED_BUT_FAILED_TO_SET_NAME | 102 | | +| ACCOUNT_CREATED_BUT_FAILED_TO_SET_AVATAR | 103 | | + + + + + +### Rpc.Account.Recover.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | No error; | +| UNKNOWN_ERROR | 1 | Any other errors | +| BAD_INPUT | 2 | | +| NO_ACCOUNTS_FOUND | 101 | | +| NEED_TO_RECOVER_WALLET_FIRST | 102 | | +| FAILED_TO_CREATE_LOCAL_REPO | 103 | | +| LOCAL_REPO_EXISTS_BUT_CORRUPTED | 104 | | +| FAILED_TO_RUN_NODE | 105 | | +| WALLET_RECOVER_NOT_PERFORMED | 106 | | + + + + + +### Rpc.Account.Select.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | No error | +| UNKNOWN_ERROR | 1 | Any other errors | +| BAD_INPUT | 2 | Id or root path is wrong | +| FAILED_TO_CREATE_LOCAL_REPO | 101 | | +| LOCAL_REPO_EXISTS_BUT_CORRUPTED | 102 | | +| FAILED_TO_RUN_NODE | 103 | | +| FAILED_TO_FIND_ACCOUNT_INFO | 104 | | +| LOCAL_REPO_NOT_EXISTS_AND_MNEMONIC_NOT_SET | 105 | | + + + + + +### Rpc.Block.Create.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | ... | + + + + + +### Rpc.Block.History.Move.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | | +| CAN_NOT_MOVE | 3 | ... | + + + + + +### Rpc.Block.Open.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | ... | + + + + + +### Rpc.Block.Update.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | ... | + + + + + +### Rpc.Image.Get.Blob.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | ... | +| NOT_FOUND | 101 | | +| TIMEOUT | 102 | | + + + + + +### Rpc.Image.Get.File.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | ... | +| NOT_FOUND | 101 | | +| TIMEOUT | 102 | | + + + + + +### Rpc.Ipfs.Get.File.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | ... | +| NOT_FOUND | 101 | | +| TIMEOUT | 102 | | + + + + + +### Rpc.Log.Send.Request.Level + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| DEBUG | 0 | | +| ERROR | 1 | | +| FATAL | 2 | | +| INFO | 3 | | +| PANIC | 4 | | +| WARNING | 5 | | + + + + + +### Rpc.Log.Send.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | | +| NOT_FOUND | 101 | | +| TIMEOUT | 102 | | + + + + + +### Rpc.Version.Get.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | | +| UNKNOWN_ERROR | 1 | | +| BAD_INPUT | 2 | | +| VERSION_IS_EMPTY | 3 | | +| NOT_FOUND | 101 | | +| TIMEOUT | 102 | | + + + + + +### Rpc.Wallet.Create.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | No error; mnemonic should be non-empty | +| UNKNOWN_ERROR | 1 | Any other errors | +| BAD_INPUT | 2 | Root path is wrong | +| FAILED_TO_CREATE_LOCAL_REPO | 101 | ... | + + + + + +### Rpc.Wallet.Recover.Response.Error.Code + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL | 0 | No error; wallet successfully recovered | +| UNKNOWN_ERROR | 1 | Any other errors | +| BAD_INPUT | 2 | Root path or mnemonic is wrong | +| FAILED_TO_CREATE_LOCAL_REPO | 101 | | + + + + + + + + + + + + + +## events.proto + + + + + +### Event + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| accountShow | [Event.Account.Show](#anytype.Event.Account.Show) | | show wallet's accounts that were loaded from local or remote source | +| blockShow | [Event.Block.Show](#anytype.Event.Block.Show) | | | +| blockUpdate | [Event.Block.Update](#anytype.Event.Block.Update) | | | +| blockCreate | [Event.Block.Create](#anytype.Event.Block.Create) | | | +| userBlockTextRange | [Event.User.Block.TextRange](#anytype.Event.User.Block.TextRange) | | | +| userBlockJoin | [Event.User.Block.Join](#anytype.Event.User.Block.Join) | | | +| userBlockLeft | [Event.User.Block.Left](#anytype.Event.User.Block.Left) | | | +| userBlockSelectRange | [Event.User.Block.SelectRange](#anytype.Event.User.Block.SelectRange) | | | +| filesUpload | [Event.Block.FilesUpload](#anytype.Event.Block.FilesUpload) | | | + + + + + + + + +### Event.Account + + + + + + + + + +### Event.Account.Show +Message, that will be sent to the front on each account found after an AccountRecoverRequest + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| index | [int64](#int64) | | Number of an account in an all found accounts list | +| account | [Model.Account](#anytype.Model.Account) | | An Account, that has been found for the mnemonic | + + + + + + + + +### Event.Block + + + + + + + + + +### Event.Block.Create + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| block | [Model.Block](#anytype.Model.Block) | | | + + + + + + + + +### Event.Block.FilesUpload +Middleware to front end event message, that will be sent on one of this scenarios: +Precondition: user A opened a block +1. User A drops a set of files/pictures/videos +2. User A creates a MediaBlock and drops a single media, that corresponds to its type. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| filePath | [string](#string) | repeated | filepaths to the files | +| blockId | [string](#string) | | if empty => create new blocks | + + + + + + + + +### Event.Block.Show + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| block | [Model.Block](#anytype.Model.Block) | | | + + + + + + + + +### Event.Block.Update + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| changes | [BlockChanges](#anytype.BlockChanges) | | | + + + + + + + + +### Event.User + + + + + + + + + +### Event.User.Block + + + + + + + + + +### Event.User.Block.Join +Middleware to front end event message, that will be sent in this scenario: +Precondition: user A opened a block +1. User B opens the same block +2. User A receives a message about p.1 + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| account | [Event.Account](#anytype.Event.Account) | | Account of the user, that opened a block | + + + + + + + + +### Event.User.Block.Left +Middleware to front end event message, that will be sent in this scenario: +Precondition: user A and user B opened the same block +1. User B closes the block +2. User A receives a message about p.1 + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| account | [Event.Account](#anytype.Event.Account) | | Account of the user, that left the block | + + + + + + + + +### Event.User.Block.SelectRange +Middleware to front end event message, that will be sent in this scenario: +Precondition: user A and user B opened the same block +1. User B selects some inner blocks +2. User A receives a message about p.1 + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| account | [Event.Account](#anytype.Event.Account) | | Account of the user, that selected blocks | +| blockIdsArray | [string](#string) | repeated | Ids of selected blocks. | + + + + + + + + +### Event.User.Block.TextRange +Middleware to front end event message, that will be sent in this scenario: +Precondition: user A and user B opened the same block +1. User B sets cursor or selects a text region into a text block +2. User A receives a message about p.1 + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| account | [Event.Account](#anytype.Event.Account) | | Account of the user, that selected a text | +| blockId | [string](#string) | | Id of the text block, that have a selection | +| range | [Model.Range](#anytype.Model.Range) | | Range of the selection | + + + + + + + + + + + + + + + + + + +## models.proto + + + + + +### Model + + + + + + + + + +### Model.Account +Contains basic information about user account + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | | User's thread id | +| name | [string](#string) | | User name, that associated with this account | +| avatar | [Model.Account.Avatar](#anytype.Model.Account.Avatar) | | Avatar of a user's account | + + + + + + + + +### Model.Account.Avatar +Avatar of a user's account. It could be an image or color + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| image | [Model.Image](#anytype.Model.Image) | | Image of the avatar. Contains hash and size | +| color | [string](#string) | | Color of the avatar, if no image | + + + + + + + + +### Model.Block + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| header | [Model.Block.Header](#anytype.Model.Block.Header) | | | +| children | [string](#string) | repeated | | +| dashboard | [Model.Block.Content.Dashboard](#anytype.Model.Block.Content.Dashboard) | | | +| page | [Model.Block.Content.Page](#anytype.Model.Block.Content.Page) | | | +| dataview | [Model.Block.Content.Dataview](#anytype.Model.Block.Content.Dataview) | | | +| text | [Model.Block.Content.Text](#anytype.Model.Block.Content.Text) | | | +| media | [Model.Block.Content.Media](#anytype.Model.Block.Content.Media) | | | +| layout | [Model.Block.Content.Layout](#anytype.Model.Block.Content.Layout) | | | +| div | [Model.Block.Content.Div](#anytype.Model.Block.Content.Div) | | | + + + + + + + + +### Model.Block.Content + + + + + + + + + +### Model.Block.Content.Dashboard + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| style | [Model.Block.Content.Dashboard.Style](#anytype.Model.Block.Content.Dashboard.Style) | | | +| headers | [Model.Block.Header](#anytype.Model.Block.Header) | repeated | | + + + + + + + + +### Model.Block.Content.Dataview +... + + + + + + + + +### Model.Block.Content.Div + + + + + + + + + +### Model.Block.Content.Layout + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| style | [Model.Block.Content.Layout.Style](#anytype.Model.Block.Content.Layout.Style) | | | + + + + + + + + +### Model.Block.Content.Media + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| content | [bytes](#bytes) | | | +| state | [Model.Block.Content.Media.State](#anytype.Model.Block.Content.Media.State) | | | +| video | [Model.Block.Content.Media.VideoPreview](#anytype.Model.Block.Content.Media.VideoPreview) | | | +| image | [Model.Block.Content.Media.ImagePreview](#anytype.Model.Block.Content.Media.ImagePreview) | | | +| file | [Model.Block.Content.Media.FilePreview](#anytype.Model.Block.Content.Media.FilePreview) | | | + + + + + + + + +### Model.Block.Content.Media.FilePreview + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| name | [string](#string) | | | +| icon | [string](#string) | | | + + + + + + + + +### Model.Block.Content.Media.ImagePreview + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| thumbnail | [bytes](#bytes) | | | +| name | [string](#string) | | | +| width | [int32](#int32) | | | + + + + + + + + +### Model.Block.Content.Media.VideoPreview + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| thumbnail | [bytes](#bytes) | | | +| name | [string](#string) | | | +| width | [int32](#int32) | | | + + + + + + + + +### Model.Block.Content.Page + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| style | [Model.Block.Content.Page.Style](#anytype.Model.Block.Content.Page.Style) | | | + + + + + + + + +### Model.Block.Content.Text + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| text | [string](#string) | | | +| style | [Model.Block.Content.Text.Style](#anytype.Model.Block.Content.Text.Style) | | | +| marksList | [Model.Block.Content.Text.Marks](#anytype.Model.Block.Content.Text.Marks) | | | +| toggleable | [bool](#bool) | | | +| markerType | [Model.Block.Content.Text.MarkerType](#anytype.Model.Block.Content.Text.MarkerType) | | | +| checkable | [bool](#bool) | | | +| checked | [bool](#bool) | | | + + + + + + + + +### Model.Block.Content.Text.Mark + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| range | [Model.Range](#anytype.Model.Range) | | | +| type | [Model.Block.Content.Text.Mark.Type](#anytype.Model.Block.Content.Text.Mark.Type) | | | +| param | [string](#string) | | link, color, etc | + + + + + + + + +### Model.Block.Content.Text.Marks + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| marks | [Model.Block.Content.Text.Mark](#anytype.Model.Block.Content.Text.Mark) | repeated | | + + + + + + + + +### Model.Block.Header + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | | | +| type | [Model.Block.Header.Type](#anytype.Model.Block.Header.Type) | | | +| fields | [Model.Struct](#anytype.Model.Struct) | | | +| permissions | [Model.Block.Header.Permissions](#anytype.Model.Block.Header.Permissions) | | | + + + + + + + + +### Model.Block.Header.Permissions + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| read | [bool](#bool) | | | +| edit | [bool](#bool) | | | +| remove | [bool](#bool) | | | +| drag | [bool](#bool) | | | +| dropOn | [bool](#bool) | | | + + + + + + + + +### Model.Image + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | | | +| sizes | [Model.Image.Size](#anytype.Model.Image.Size) | repeated | | + + + + + + + + +### Model.Range + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| from | [int32](#int32) | | | +| to | [int32](#int32) | | | + + + + + + + + +### Model.Struct + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| fields | [Model.Struct.FieldsEntry](#anytype.Model.Struct.FieldsEntry) | repeated | Unordered map of dynamically typed values. | + + + + + + + + +### Model.Struct.FieldsEntry + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| key | [string](#string) | | | +| value | [Model.Struct.Value](#anytype.Model.Struct.Value) | | | + + + + + + + + +### Model.Struct.ListValue +`ListValue` is a wrapper around a repeated field of values. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| values | [Model.Struct.Value](#anytype.Model.Struct.Value) | repeated | | + + + + + + + + +### Model.Struct.Value +`Value` represents a dynamically typed value which can be either +null, a number, a string, a boolean, a recursive struct value, or a +list of values. A producer of value is expected to set one of that +variants, absence of any variant indicates an error. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| null_value | [Model.Struct.NullValue](#anytype.Model.Struct.NullValue) | | Represents a null value. | +| number_value | [double](#double) | | Represents a double value. | +| string_value | [string](#string) | | Represents a string value. | +| bool_value | [bool](#bool) | | Represents a boolean value. | +| struct_value | [Model.Struct](#anytype.Model.Struct) | | Represents a structured value. | +| list_value | [Model.Struct.ListValue](#anytype.Model.Struct.ListValue) | | Represents a repeated `Value`. | + + + + + + + + +### Model.Video + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [string](#string) | | | +| sizes | [Model.Video.Size](#anytype.Model.Video.Size) | repeated | | + + + + + + + + + + +### Model.Block.Content.Dashboard.Style + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| MAIN_SCREEN | 0 | ... | + + + + + +### Model.Block.Content.Layout.Style + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| ROW | 0 | | +| COLUMN | 1 | | + + + + + +### Model.Block.Content.Media.State + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| EMPTY | 0 | | +| UPLOADING | 1 | | +| PREVIEW | 2 | | +| DOWNLOADING | 3 | | +| DONE | 4 | | + + + + + +### Model.Block.Content.Page.Style + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| EMPTY | 0 | | +| TASK | 1 | | +| BOOKMARK | 2 | | +| SET | 3 | ... | + + + + + +### Model.Block.Content.Text.Mark.Type + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| STRIKETHROUGH | 0 | | +| KEYBOARD | 1 | | +| ITALIC | 2 | | +| BOLD | 3 | | +| LINK | 4 | | + + + + + +### Model.Block.Content.Text.MarkerType + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| none | 0 | | +| number | 1 | | +| bullet | 2 | | + + + + + +### Model.Block.Content.Text.Style + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| p | 0 | | +| h1 | 1 | | +| h2 | 2 | | +| h3 | 3 | | +| h4 | 4 | | +| quote | 5 | | +| code | 6 | | + + + + + +### Model.Block.Header.Type + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| DASHBOARD | 0 | | +| PAGE | 1 | | +| DATAVIEW | 2 | | +| TEXT | 3 | | +| FILE | 4 | | +| PICTURE | 5 | | +| VIDEO | 6 | | +| BOOKMARK | 7 | | +| LAYOUT | 8 | | +| DIV | 9 | | + + + + + +### Model.Image.Size + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| LARGE | 0 | | +| SMALL | 1 | | +| THUMB | 2 | | + + + + + +### Model.Struct.NullValue +`NullValue` is a singleton enumeration to represent the null value for the + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NULL_VALUE | 0 | | + + + + + +### Model.Video.Size + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| SD_360p | 0 | | +| SD_480p | 1 | | +| HD_720p | 2 | | +| HD_1080p | 3 | | +| UHD_1440p | 4 | | +| UHD_2160p | 5 | | + + + + + + + + + + +## Scalar Value Types + +| .proto Type | Notes | C++ Type | Java Type | Python Type | +| ----------- | ----- | -------- | --------- | ----------- | +| double | | double | double | float | +| float | | float | float | float | +| int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | +| int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | +| uint32 | Uses variable-length encoding. | uint32 | int | int/long | +| uint64 | Uses variable-length encoding. | uint64 | long | int/long | +| sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | +| sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | +| fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | +| fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | +| sfixed32 | Always four bytes. | int32 | int | int | +| sfixed64 | Always eight bytes. | int64 | long | int/long | +| bool | | bool | boolean | boolean | +| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | +| bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | + diff --git a/go.mod b/go.mod index a6c24104e..77e2acbf5 100644 --- a/go.mod +++ b/go.mod @@ -3,10 +3,20 @@ module github.com/anytypeio/go-anytype-middleware go 1.12 require ( + github.com/Masterminds/goutils v1.1.0 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/Masterminds/sprig v2.22.0+incompatible // indirect github.com/anytypeio/go-anytype-library v0.0.0-20191019100520-f545fa654778 github.com/gogo/protobuf v1.3.1 github.com/golang/protobuf v1.3.2 + github.com/huandu/xstrings v1.2.0 // indirect + github.com/imdario/mergo v0.3.8 // indirect github.com/ipfs/go-log v0.0.1 + github.com/lyft/protoc-gen-validate v0.1.0 // indirect + github.com/mitchellh/copystructure v1.0.0 // indirect + github.com/mwitkow/go-proto-validators v0.2.0 // indirect + github.com/pseudomuto/protoc-gen-doc v1.3.0 // indirect + github.com/pseudomuto/protokit v0.2.0 // indirect github.com/stretchr/testify v1.3.0 github.com/textileio/go-textile v0.7.2-0.20190907000013-95a885123536 ) diff --git a/go.sum b/go.sum index 8a6050d9f..b193a6b14 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,12 @@ github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETF github.com/Kubuxu/gocovmerge v0.0.0-20161216165753-7ecaa51963cd/go.mod h1:bqoB8kInrTeEtYAwaIXoSRqdwnjQmFhsfusnzyui6yY= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= +github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard v0.0.0-20180806142446-a69c782687b2/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -149,6 +155,7 @@ github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJA github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -206,10 +213,14 @@ github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.2.0 h1:yPeWdRnmynF7p+lLYz0H2tthW9lqhMJrQV/U7yy4wX0= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/huin/goupnp v0.0.0-20180415215157-1395d1447324/go.mod h1:MZ2ZmwcBpvOoJ22IJsc7va19ZwoheaBk43rKg12SKag= github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/ipfs/bbloom v0.0.1 h1:s7KkiBPfxCeDVo47KySjK0ACPc5GJRUxFpdyWEuDjhw= github.com/ipfs/bbloom v0.0.1/go.mod h1:oqo8CVWsJFMOZqTglBG4wydCE4IQA/G2/SEofB0rjUI= @@ -562,6 +573,8 @@ github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQ github.com/lucas-clemente/quic-go v0.11.1/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw= github.com/lucas-clemente/quic-go v0.11.2 h1:Mop0ac3zALaBR3wGs6j8OYe/tcFvFsxTUFMkE/7yUOI= github.com/lucas-clemente/quic-go v0.11.2/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw= +github.com/lyft/protoc-gen-validate v0.1.0 h1:NytKd9K7UW7Szxn+9PYNsaJ/98TL/WsDq4ro4ZVuh5o= +github.com/lyft/protoc-gen-validate v0.1.0/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -593,12 +606,16 @@ github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+ github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.1.0 h1:U41/2erhAKcmSI14xh/ZTUdBPOzDOIfS93ibzUSl8KM= github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= @@ -634,6 +651,8 @@ github.com/multiformats/go-multistream v0.1.0/go.mod h1:fJTiDfXJVmItycydCnNx4+wS github.com/mutecomm/go-sqlcipher v0.0.0-20190227152316-55dbde17881f h1:hd3r+uv9DNLScbOrnlj82rBldHQf3XWmCeXAWbw8euQ= github.com/mutecomm/go-sqlcipher v0.0.0-20190227152316-55dbde17881f/go.mod h1:MyUWrZlB1aI5bs7j9/pJ8ckLLZ4QcCYcNiSbsAW32D4= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.2.0 h1:F6LFfmgVnfULfaRsQWBbe7F7ocuHCr9+7m+GAeDzNbQ= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/nbutton23/zxcvbn-go v0.0.0-20160627004424-a22cb81b2ecd/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -675,6 +694,10 @@ github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.0-20190519111021-9935e8e0588d/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pseudomuto/protoc-gen-doc v1.3.0 h1:wpwmaSCWY2lGwkzAxAaqYcGyoklZjZmeXrJ/X7IskJM= +github.com/pseudomuto/protoc-gen-doc v1.3.0/go.mod h1:fwtQAY9erXp3mC92O8OTECnDlJT2r0Ff4KSEKbGEmy0= +github.com/pseudomuto/protokit v0.2.0 h1:hlnBDcy3YEDXH7kc9gV+NLaN0cDzhDvD1s7Y6FZ8RpM= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -895,6 +918,7 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=