diff --git a/client/react-native/common/components/Library/Filters.js b/client/react-native/common/components/Library/Filters.js new file mode 100644 index 0000000000..b028777421 --- /dev/null +++ b/client/react-native/common/components/Library/Filters.js @@ -0,0 +1,72 @@ +import React from 'react' +import { StackActions } from 'react-navigation' +import ModalScreen from './ModalScreen' +import { Switch, Text } from 'react-native' +import { Rows, Cols } from './Flex' +import { Text as FlexText } from './Text' +import Button from './Button' +import { padding } from '../../styles' + +export class FilterModal extends React.Component { + constructor (props) { + super(props) + + this.state = { + ...this.props.defaultData, + } + } + + onDismiss = () => { + this.resetState() + this.close() + } + + onFilter = () => { + const onSave = this.props.navigation.getParam('onSave') + + if (!onSave) { + console.error('onSave is not defined') + } + + onSave(this.state) + + this.close() + } + + close = () => { + this.props.navigation.dispatch(StackActions.pop({ + n: 1, + })) + } + + resetState = () => { + this.setState({ + ...this.state, + ...this.props.defaultData, + }) + } + + render = () => this.onDismiss()}> + + {this.props.title ? {this.props.title} : null} + {React.Children.map(this.props.children, child => React.cloneElement(child, { + onChange: value => this.setState({ [child.props.name]: value }), + value: this.state[child.props.name], + }))} + + + + + + +} + +// Impl for this is really bad, move to radio buttons instead +export const PickerFilter = ({ value, onChange, choices }) => + {choices.map(({ value: choiceValue, label }) => + + onChange(choiceValue)} style={{ width: 50 }} /> + {label} + , + )} + diff --git a/client/react-native/common/components/Library/Header.js b/client/react-native/common/components/Library/Header.js index b2a6b5feba..0362e74bc8 100644 --- a/client/react-native/common/components/Library/Header.js +++ b/client/react-native/common/components/Library/Header.js @@ -1,10 +1,8 @@ import React, { PureComponent } from 'react' -import { TextInput, View, Platform } from 'react-native' -import { Button, Flex, Text } from '.' +import { View } from 'react-native' +import { Button, Flex, Text, SearchBar } from '.' import { colors } from '../../constants' import { - paddingLeft, - paddingRight, padding, borderBottom, paddingBottom, @@ -42,6 +40,13 @@ export default class Header extends PureComponent { ? defaultTextColor : this.props.colorBtnRight + let searchBarComponent = null + if (searchBar === true) { + searchBarComponent = searchHandler(text)} /> + } else if (searchBar !== undefined && searchBar !== false) { + searchBarComponent = searchBar + } + return ( - {searchBar === true && ( - - searchHandler(text)} - /> - - )} + {searchBarComponent} ) diff --git a/client/react-native/common/components/Library/ModalScreen.js b/client/react-native/common/components/Library/ModalScreen.js index 34fdd2051f..fc879fe6f4 100644 --- a/client/react-native/common/components/Library/ModalScreen.js +++ b/client/react-native/common/components/Library/ModalScreen.js @@ -27,10 +27,15 @@ const ModalScreen = props => { backgroundColor: colors.white, flex: 1, }}> - + {children} diff --git a/client/react-native/common/components/Library/SearchBar.js b/client/react-native/common/components/Library/SearchBar.js new file mode 100644 index 0000000000..3ee2d86819 --- /dev/null +++ b/client/react-native/common/components/Library/SearchBar.js @@ -0,0 +1,28 @@ +import { paddingBottom, paddingLeft, paddingRight } from '../../styles' +import { TextInput, Platform } from 'react-native' +import { colors } from '../../constants' +import React from 'react' +import { Flex } from '.' + +export default props => + + {props.children} + diff --git a/client/react-native/common/components/Library/index.js b/client/react-native/common/components/Library/index.js index 65a0b97c36..e540419982 100644 --- a/client/react-native/common/components/Library/index.js +++ b/client/react-native/common/components/Library/index.js @@ -12,3 +12,4 @@ export Button from './Button' export CustomTextInput from './CustomTextInput.js' export Badge from './Badge' export ModalScreen from './ModalScreen' +export SearchBar from './SearchBar' diff --git a/client/react-native/common/components/Screens/Settings/Devtools/EventList.js b/client/react-native/common/components/Screens/Settings/Devtools/EventList.js index 2a91bfdf59..77cd13ddc1 100644 --- a/client/react-native/common/components/Screens/Settings/Devtools/EventList.js +++ b/client/react-native/common/components/Screens/Settings/Devtools/EventList.js @@ -1,16 +1,12 @@ -import { - ActivityIndicator, - FlatList, - Text, - TouchableOpacity, -} from 'react-native' +import { ActivityIndicator, FlatList, Text, TouchableOpacity } from 'react-native' import React, { PureComponent } from 'react' -import { Flex, Header, Screen, Separator } from '../../../Library' +import { Flex, Header, Icon, Screen, SearchBar, Separator } from '../../../Library' import { QueryReducer } from '../../../../relay' import { colors } from '../../../../constants' import { marginLeft, padding } from '../../../../styles' -import { queries, fragments } from '../../../../graphql' +import { fragments, queries } from '../../../../graphql' +import { FilterModal, PickerFilter } from '../../../Library/Filters' const Item = fragments.Event(({ data, navigation }) => ( entry.id.toLowerCase().indexOf(search.toLowerCase()) > -1 || entry.kind.toLowerCase().indexOf(search.toLowerCase()) > -1 || - entry.createdAt.toLowerCase().indexOf(search.toLowerCase()) > -1 + entry.createdAt.toLowerCase().indexOf(search.toLowerCase()) > -1, ) } } @@ -115,28 +111,63 @@ const List = fragments.EventList( /> ) } - } + }, ) export default class EventList extends PureComponent { - static navigationOptions = ({ navigation }) => ({ - header: ( -
- ), - }) + constructor (props) { + super(props) + + this.state = { + filters: {}, + } + } + + componentWillMount () { + this.props.navigation.setParams({ + component: this, + }) + } + + static navigationOptions ({ navigation }) { + return { + header: ( +
+ { + navigation.push('modal/devtools/event/list/filters', { + defaultData: navigation.getParam('component').state.filters, + onSave: filters => navigation.getParam('component').setState({ filters: filters }), + }) + }}> + + + + } + backBtn + /> + ), + } + } + render () { + console.log(['EventListFilter', { + ...queries.EventList.defaultVariables, + ...this.state.filters, + }]) + const { navigation } = this.props return ( {(state, retry) => { console.log(state) @@ -166,3 +197,14 @@ export default class EventList extends PureComponent { ) } } + +export const EventListFilterModal = ({ navigation }) => + + + diff --git a/client/react-native/common/components/Screens/Settings/Devtools/index.js b/client/react-native/common/components/Screens/Settings/Devtools/index.js index e3037781de..c8d8e2822d 100644 --- a/client/react-native/common/components/Screens/Settings/Devtools/index.js +++ b/client/react-native/common/components/Screens/Settings/Devtools/index.js @@ -2,7 +2,7 @@ import { createSubStackNavigator } from '../../../../helpers/react-navigation' import List from './List' import Database from './Database' import Network from './Network' -import EventList from './EventList' +import EventList, { EventListFilterModal } from './EventList' import EventDetails from './EventDetails' import DeviceInfos from './DeviceInfos' import Tests from './Tests' @@ -14,6 +14,7 @@ export default createSubStackNavigator( 'devtools/database': Database, 'devtools/network': Network, 'devtools/eventlist': EventList, + 'devtools/eventlistfilter': EventListFilterModal, 'devtools/eventdetails': EventDetails, 'devtools/deviceinfos': DeviceInfos, 'devtools/tests': Tests, diff --git a/client/react-native/common/components/Screens/Settings/List.js b/client/react-native/common/components/Screens/Settings/List.js index 92b7c88258..1869372489 100644 --- a/client/react-native/common/components/Screens/Settings/List.js +++ b/client/react-native/common/components/Screens/Settings/List.js @@ -29,6 +29,13 @@ export default class List extends PureComponent { onPress={() => navigation.push('settings/my-account')} /> + + navigation.push('settings/devtools')} + /> + navigation.push('settings/legal')} /> - - navigation.push('settings/devtools')} - /> - ) diff --git a/client/react-native/common/components/Screens/index.js b/client/react-native/common/components/Screens/index.js index 2fbe052d15..5838ff63b2 100644 --- a/client/react-native/common/components/Screens/index.js +++ b/client/react-native/common/components/Screens/index.js @@ -7,6 +7,7 @@ import Settings from './Settings' import { colors } from '../../constants' import { borderTop, shadow } from '../../styles' import { ByPublicKeyModal } from './Contacts/Add/ByPublicKey' +import { EventListFilterModal } from './Settings/Devtools/EventList' export const mainTabs = createTabNavigator( { @@ -46,6 +47,9 @@ export default createStackNavigator( 'modal/contacts/add/by-public-key': { screen: ByPublicKeyModal, }, + 'modal/devtools/event/list/filters': { + screen: EventListFilterModal, + }, }, { mode: 'card', diff --git a/client/react-native/common/graphql/queries/EventList.js b/client/react-native/common/graphql/queries/EventList.js index 7fc194057f..2750caa0fb 100644 --- a/client/react-native/common/graphql/queries/EventList.js +++ b/client/react-native/common/graphql/queries/EventList.js @@ -6,8 +6,9 @@ const EventList = graphql` $filter: BertyP2pEventInput $count: Int32 $cursor: String + $onlyWithoutAckedAt: Enum ) { - ...EventList @arguments(filter: $filter, count: $count, cursor: $cursor) + ...EventList @arguments(filter: $filter, count: $count, cursor: $cursor, onlyWithoutAckedAt: $onlyWithoutAckedAt) } ` diff --git a/client/react-native/common/schema.graphql b/client/react-native/common/schema.graphql index 2ea4d40784..cc01e8bdec 100644 --- a/client/react-native/common/schema.graphql +++ b/client/react-native/common/schema.graphql @@ -408,6 +408,7 @@ type BertyPkgDeviceinfoDeviceInfo { + type BertyNodePingDestination { destination: String! } @@ -615,6 +616,7 @@ type Query { ): BertyP2pPeerPayload EventList( filter: BertyP2pEventInput + onlyWithoutAckedAt: Enum orderBy: String! orderDesc: Bool! first: Int32 diff --git a/core/api/node/graphql/gqlgen.gen.yml b/core/api/node/graphql/gqlgen.gen.yml index 49e231fa7d..1a8ac06ab9 100644 --- a/core/api/node/graphql/gqlgen.gen.yml +++ b/core/api/node/graphql/gqlgen.gen.yml @@ -1303,11 +1303,13 @@ models: model: berty.tech/core/api/node.EventListInput fields: filter: + onlyWithoutAckedAt: paginate: BertyNodeEventListInputPayload: model: berty.tech/core/api/node.EventListInput fields: filter: + onlyWithoutAckedAt: paginate: BertyNodeEventEdge: diff --git a/core/api/node/graphql/graph/generated/generated.go b/core/api/node/graphql/graph/generated/generated.go index d13543001d..db093b62f1 100644 --- a/core/api/node/graphql/graph/generated/generated.go +++ b/core/api/node/graphql/graph/generated/generated.go @@ -588,7 +588,7 @@ type ComplexityRoot struct { Query struct { Node func(childComplexity int, id string) int Id func(childComplexity int, T bool) int - EventList func(childComplexity int, filter *p2p.Event, orderBy string, orderDesc bool, first *int32, after *string, last *int32, before *string) int + EventList func(childComplexity int, filter *p2p.Event, onlyWithoutAckedAt *int32, orderBy string, orderDesc bool, first *int32, after *string, last *int32, before *string) int GetEvent func(childComplexity int, id string, senderId string, createdAt *time.Time, updatedAt *time.Time, deletedAt *time.Time, sentAt *time.Time, receivedAt *time.Time, ackedAt *time.Time, direction *int32, senderApiVersion uint32, receiverApiVersion uint32, receiverId string, kind *int32, attributes []byte, conversationId string) int ContactList func(childComplexity int, filter *entity.Contact, orderBy string, orderDesc bool, first *int32, after *string, last *int32, before *string) int GetContact func(childComplexity int, id string, createdAt *time.Time, updatedAt *time.Time, deletedAt *time.Time, sigchain []byte, status *int32, devices []*entity.Device, displayName string, displayStatus string, overrideDisplayName string, overrideDisplayStatus string) int @@ -675,7 +675,7 @@ type MutationResolver interface { type QueryResolver interface { Node(ctx context.Context, id string) (models.Node, error) ID(ctx context.Context, T bool) (*p2p.Peer, error) - EventList(ctx context.Context, filter *p2p.Event, orderBy string, orderDesc bool, first *int32, after *string, last *int32, before *string) (*node.EventListConnection, error) + EventList(ctx context.Context, filter *p2p.Event, onlyWithoutAckedAt *int32, orderBy string, orderDesc bool, first *int32, after *string, last *int32, before *string) (*node.EventListConnection, error) GetEvent(ctx context.Context, id string, senderId string, createdAt *time.Time, updatedAt *time.Time, deletedAt *time.Time, sentAt *time.Time, receivedAt *time.Time, ackedAt *time.Time, direction *int32, senderApiVersion uint32, receiverApiVersion uint32, receiverId string, kind *int32, attributes []byte, conversationId string) (*p2p.Event, error) ContactList(ctx context.Context, filter *entity.Contact, orderBy string, orderDesc bool, first *int32, after *string, last *int32, before *string) (*node.ContactListConnection, error) GetContact(ctx context.Context, id string, createdAt *time.Time, updatedAt *time.Time, deletedAt *time.Time, sigchain []byte, status *int32, devices []*entity.Device, displayName string, displayStatus string, overrideDisplayName string, overrideDisplayStatus string) (*entity.Contact, error) @@ -1422,80 +1422,94 @@ func field_Query_EventList_args(rawArgs map[string]interface{}) (map[string]inte } } args["filter"] = arg0 - var arg1 string + var arg1 *int32 + if tmp, ok := rawArgs["onlyWithoutAckedAt"]; ok { + var err error + var ptr1 int32 + if tmp != nil { + ptr1, err = models.UnmarshalEnum(tmp) + arg1 = &ptr1 + } + + if err != nil { + return nil, err + } + } + args["onlyWithoutAckedAt"] = arg1 + var arg2 string if tmp, ok := rawArgs["orderBy"]; ok { var err error - arg1, err = models.UnmarshalString(tmp) + arg2, err = models.UnmarshalString(tmp) if err != nil { return nil, err } } - args["orderBy"] = arg1 - var arg2 bool + args["orderBy"] = arg2 + var arg3 bool if tmp, ok := rawArgs["orderDesc"]; ok { var err error - arg2, err = models.UnmarshalBool(tmp) + arg3, err = models.UnmarshalBool(tmp) if err != nil { return nil, err } } - args["orderDesc"] = arg2 - var arg3 *int32 + args["orderDesc"] = arg3 + var arg4 *int32 if tmp, ok := rawArgs["first"]; ok { var err error var ptr1 int32 if tmp != nil { ptr1, err = models.UnmarshalInt32(tmp) - arg3 = &ptr1 + arg4 = &ptr1 } if err != nil { return nil, err } } - args["first"] = arg3 - var arg4 *string + args["first"] = arg4 + var arg5 *string if tmp, ok := rawArgs["after"]; ok { var err error var ptr1 string if tmp != nil { ptr1, err = models.UnmarshalString(tmp) - arg4 = &ptr1 + arg5 = &ptr1 } if err != nil { return nil, err } } - args["after"] = arg4 - var arg5 *int32 + args["after"] = arg5 + var arg6 *int32 if tmp, ok := rawArgs["last"]; ok { var err error var ptr1 int32 if tmp != nil { ptr1, err = models.UnmarshalInt32(tmp) - arg5 = &ptr1 + arg6 = &ptr1 } if err != nil { return nil, err } } - args["last"] = arg5 - var arg6 *string + args["last"] = arg6 + var arg7 *string if tmp, ok := rawArgs["before"]; ok { var err error var ptr1 string if tmp != nil { ptr1, err = models.UnmarshalString(tmp) - arg6 = &ptr1 + arg7 = &ptr1 } if err != nil { return nil, err } } - args["before"] = arg6 + args["before"] = arg7 return args, nil } @@ -4751,7 +4765,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return 0, false } - return e.complexity.Query.EventList(childComplexity, args["filter"].(*p2p.Event), args["orderBy"].(string), args["orderDesc"].(bool), args["first"].(*int32), args["after"].(*string), args["last"].(*int32), args["before"].(*string)), true + return e.complexity.Query.EventList(childComplexity, args["filter"].(*p2p.Event), args["onlyWithoutAckedAt"].(*int32), args["orderBy"].(string), args["orderDesc"].(bool), args["first"].(*int32), args["after"].(*string), args["last"].(*int32), args["before"].(*string)), true case "Query.GetEvent": if e.complexity.Query.GetEvent == nil { @@ -17141,7 +17155,7 @@ func (ec *executionContext) _Query_EventList(ctx context.Context, field graphql. ctx = graphql.WithResolverContext(ctx, rctx) resTmp := ec.FieldMiddleware(ctx, nil, func(rctx context.Context) (interface{}, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().EventList(rctx, args["filter"].(*p2p.Event), args["orderBy"].(string), args["orderDesc"].(bool), args["first"].(*int32), args["after"].(*string), args["last"].(*int32), args["before"].(*string)) + return ec.resolvers.Query().EventList(rctx, args["filter"].(*p2p.Event), args["onlyWithoutAckedAt"].(*int32), args["orderBy"].(string), args["orderDesc"].(bool), args["first"].(*int32), args["after"].(*string), args["last"].(*int32), args["before"].(*string)) }) if resTmp == nil { return graphql.Null @@ -19981,6 +19995,7 @@ type BertyPkgDeviceinfoDeviceInfo { + type BertyNodePingDestination { destination: String! } @@ -20188,6 +20203,7 @@ type Query { ): BertyP2pPeerPayload EventList( filter: BertyP2pEventInput + onlyWithoutAckedAt: Enum orderBy: String! orderDesc: Bool! first: Int32 diff --git a/core/api/node/graphql/resolver.go b/core/api/node/graphql/resolver.go index 8e1493d4d2..c95432281a 100644 --- a/core/api/node/graphql/resolver.go +++ b/core/api/node/graphql/resolver.go @@ -263,7 +263,12 @@ func (r *queryResolver) Protocols(ctx context.Context, id string, _ []string, _ }) } -func (r *queryResolver) EventList(ctx context.Context, filter *p2p.Event, orderBy string, orderDesc bool, first *int32, after *string, last *int32, before *string) (*node.EventListConnection, error) { +func (r *queryResolver) EventList(ctx context.Context, filter *p2p.Event, rawOnlyWithoutAckedAt *int32, orderBy string, orderDesc bool, first *int32, after *string, last *int32, before *string) (*node.EventListConnection, error) { + onlyWithoutAckedAt := node.NullableTrueFalse_Null + if rawOnlyWithoutAckedAt != nil { + onlyWithoutAckedAt = node.NullableTrueFalse(*rawOnlyWithoutAckedAt) + } + if filter != nil { if filter.ID != "" { filter.ID = strings.SplitN(filter.ID, ":", 2)[1] @@ -283,7 +288,10 @@ func (r *queryResolver) EventList(ctx context.Context, filter *p2p.Event, orderB input.Paginate.First++ // querying one more field to fullfil HasNextPage, FIXME: optimize this + input.OnlyWithoutAckedAt = onlyWithoutAckedAt + stream, err := r.client.EventList(ctx, input) + if err != nil { return nil, err } diff --git a/core/api/node/graphql/service.gen.graphql b/core/api/node/graphql/service.gen.graphql index 2ea4d40784..cc01e8bdec 100644 --- a/core/api/node/graphql/service.gen.graphql +++ b/core/api/node/graphql/service.gen.graphql @@ -408,6 +408,7 @@ type BertyPkgDeviceinfoDeviceInfo { + type BertyNodePingDestination { destination: String! } @@ -615,6 +616,7 @@ type Query { ): BertyP2pPeerPayload EventList( filter: BertyP2pEventInput + onlyWithoutAckedAt: Enum orderBy: String! orderDesc: Bool! first: Int32 diff --git a/core/api/node/service.pb.go b/core/api/node/service.pb.go index be6eb12504..ca00a0515b 100644 --- a/core/api/node/service.pb.go +++ b/core/api/node/service.pb.go @@ -36,6 +36,32 @@ var _ = time.Kitchen // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +type NullableTrueFalse int32 + +const ( + NullableTrueFalse_Null NullableTrueFalse = 0 + NullableTrueFalse_True NullableTrueFalse = 1 + NullableTrueFalse_False NullableTrueFalse = 2 +) + +var NullableTrueFalse_name = map[int32]string{ + 0: "Null", + 1: "True", + 2: "False", +} +var NullableTrueFalse_value = map[string]int32{ + "Null": 0, + "True": 1, + "False": 2, +} + +func (x NullableTrueFalse) String() string { + return proto.EnumName(NullableTrueFalse_name, int32(x)) +} +func (NullableTrueFalse) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_service_fea80af72a06dc0a, []int{0} +} + type ProtocolsOutput struct { Protocols []string `protobuf:"bytes,1,rep,name=protocols" json:"protocols,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -47,7 +73,7 @@ func (m *ProtocolsOutput) Reset() { *m = ProtocolsOutput{} } func (m *ProtocolsOutput) String() string { return proto.CompactTextString(m) } func (*ProtocolsOutput) ProtoMessage() {} func (*ProtocolsOutput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{0} + return fileDescriptor_service_fea80af72a06dc0a, []int{0} } func (m *ProtocolsOutput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -94,7 +120,7 @@ func (m *AppVersionOutput) Reset() { *m = AppVersionOutput{} } func (m *AppVersionOutput) String() string { return proto.CompactTextString(m) } func (*AppVersionOutput) ProtoMessage() {} func (*AppVersionOutput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{1} + return fileDescriptor_service_fea80af72a06dc0a, []int{1} } func (m *AppVersionOutput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -141,7 +167,7 @@ func (m *PingDestination) Reset() { *m = PingDestination{} } func (m *PingDestination) String() string { return proto.CompactTextString(m) } func (*PingDestination) ProtoMessage() {} func (*PingDestination) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{2} + return fileDescriptor_service_fea80af72a06dc0a, []int{2} } func (m *PingDestination) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -189,7 +215,7 @@ func (m *ContactRequestInput) Reset() { *m = ContactRequestInput{} } func (m *ContactRequestInput) String() string { return proto.CompactTextString(m) } func (*ContactRequestInput) ProtoMessage() {} func (*ContactRequestInput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{3} + return fileDescriptor_service_fea80af72a06dc0a, []int{3} } func (m *ContactRequestInput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -244,7 +270,7 @@ func (m *ConversationAddMessageInput) Reset() { *m = ConversationAddMess func (m *ConversationAddMessageInput) String() string { return proto.CompactTextString(m) } func (*ConversationAddMessageInput) ProtoMessage() {} func (*ConversationAddMessageInput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{4} + return fileDescriptor_service_fea80af72a06dc0a, []int{4} } func (m *ConversationAddMessageInput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -298,7 +324,7 @@ func (m *EventStreamInput) Reset() { *m = EventStreamInput{} } func (m *EventStreamInput) String() string { return proto.CompactTextString(m) } func (*EventStreamInput) ProtoMessage() {} func (*EventStreamInput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{5} + return fileDescriptor_service_fea80af72a06dc0a, []int{5} } func (m *EventStreamInput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -338,18 +364,19 @@ func (m *EventStreamInput) GetFilter() *p2p.Event { // EventList // type EventListInput struct { - Filter *p2p.Event `protobuf:"bytes,1,opt,name=filter" json:"filter,omitempty"` - Paginate *Pagination `protobuf:"bytes,99,opt,name=paginate" json:"paginate,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Filter *p2p.Event `protobuf:"bytes,1,opt,name=filter" json:"filter,omitempty"` + OnlyWithoutAckedAt NullableTrueFalse `protobuf:"varint,2,opt,name=only_without_acked_at,json=onlyWithoutAckedAt,proto3,enum=berty.node.NullableTrueFalse" json:"only_without_acked_at,omitempty"` + Paginate *Pagination `protobuf:"bytes,99,opt,name=paginate" json:"paginate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *EventListInput) Reset() { *m = EventListInput{} } func (m *EventListInput) String() string { return proto.CompactTextString(m) } func (*EventListInput) ProtoMessage() {} func (*EventListInput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{6} + return fileDescriptor_service_fea80af72a06dc0a, []int{6} } func (m *EventListInput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -385,6 +412,13 @@ func (m *EventListInput) GetFilter() *p2p.Event { return nil } +func (m *EventListInput) GetOnlyWithoutAckedAt() NullableTrueFalse { + if m != nil { + return m.OnlyWithoutAckedAt + } + return NullableTrueFalse_Null +} + func (m *EventListInput) GetPaginate() *Pagination { if m != nil { return m.Paginate @@ -404,7 +438,7 @@ func (m *EventEdge) Reset() { *m = EventEdge{} } func (m *EventEdge) String() string { return proto.CompactTextString(m) } func (*EventEdge) ProtoMessage() {} func (*EventEdge) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{7} + return fileDescriptor_service_fea80af72a06dc0a, []int{7} } func (m *EventEdge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -459,7 +493,7 @@ func (m *EventListConnection) Reset() { *m = EventListConnection{} } func (m *EventListConnection) String() string { return proto.CompactTextString(m) } func (*EventListConnection) ProtoMessage() {} func (*EventListConnection) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{8} + return fileDescriptor_service_fea80af72a06dc0a, []int{8} } func (m *EventListConnection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -514,7 +548,7 @@ func (m *ContactListInput) Reset() { *m = ContactListInput{} } func (m *ContactListInput) String() string { return proto.CompactTextString(m) } func (*ContactListInput) ProtoMessage() {} func (*ContactListInput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{9} + return fileDescriptor_service_fea80af72a06dc0a, []int{9} } func (m *ContactListInput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -569,7 +603,7 @@ func (m *ContactEdge) Reset() { *m = ContactEdge{} } func (m *ContactEdge) String() string { return proto.CompactTextString(m) } func (*ContactEdge) ProtoMessage() {} func (*ContactEdge) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{10} + return fileDescriptor_service_fea80af72a06dc0a, []int{10} } func (m *ContactEdge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -624,7 +658,7 @@ func (m *ContactListConnection) Reset() { *m = ContactListConnection{} } func (m *ContactListConnection) String() string { return proto.CompactTextString(m) } func (*ContactListConnection) ProtoMessage() {} func (*ContactListConnection) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{11} + return fileDescriptor_service_fea80af72a06dc0a, []int{11} } func (m *ContactListConnection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -679,7 +713,7 @@ func (m *ConversationListInput) Reset() { *m = ConversationListInput{} } func (m *ConversationListInput) String() string { return proto.CompactTextString(m) } func (*ConversationListInput) ProtoMessage() {} func (*ConversationListInput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{12} + return fileDescriptor_service_fea80af72a06dc0a, []int{12} } func (m *ConversationListInput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -734,7 +768,7 @@ func (m *ConversationEdge) Reset() { *m = ConversationEdge{} } func (m *ConversationEdge) String() string { return proto.CompactTextString(m) } func (*ConversationEdge) ProtoMessage() {} func (*ConversationEdge) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{13} + return fileDescriptor_service_fea80af72a06dc0a, []int{13} } func (m *ConversationEdge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -789,7 +823,7 @@ func (m *ConversationListConnection) Reset() { *m = ConversationListConn func (m *ConversationListConnection) String() string { return proto.CompactTextString(m) } func (*ConversationListConnection) ProtoMessage() {} func (*ConversationListConnection) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{14} + return fileDescriptor_service_fea80af72a06dc0a, []int{14} } func (m *ConversationListConnection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -845,7 +879,7 @@ func (m *ConversationCreateInput) Reset() { *m = ConversationCreateInput func (m *ConversationCreateInput) String() string { return proto.CompactTextString(m) } func (*ConversationCreateInput) ProtoMessage() {} func (*ConversationCreateInput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{15} + return fileDescriptor_service_fea80af72a06dc0a, []int{15} } func (m *ConversationCreateInput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -907,7 +941,7 @@ func (m *ConversationManageMembersInput) Reset() { *m = ConversationMana func (m *ConversationManageMembersInput) String() string { return proto.CompactTextString(m) } func (*ConversationManageMembersInput) ProtoMessage() {} func (*ConversationManageMembersInput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{16} + return fileDescriptor_service_fea80af72a06dc0a, []int{16} } func (m *ConversationManageMembersInput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -968,7 +1002,7 @@ func (m *Pagination) Reset() { *m = Pagination{} } func (m *Pagination) String() string { return proto.CompactTextString(m) } func (*Pagination) ProtoMessage() {} func (*Pagination) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{17} + return fileDescriptor_service_fea80af72a06dc0a, []int{17} } func (m *Pagination) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1055,7 +1089,7 @@ func (m *PageInfo) Reset() { *m = PageInfo{} } func (m *PageInfo) String() string { return proto.CompactTextString(m) } func (*PageInfo) ProtoMessage() {} func (*PageInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{18} + return fileDescriptor_service_fea80af72a06dc0a, []int{18} } func (m *PageInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1130,7 +1164,7 @@ func (m *IntegrationTestInput) Reset() { *m = IntegrationTestInput{} } func (m *IntegrationTestInput) String() string { return proto.CompactTextString(m) } func (*IntegrationTestInput) ProtoMessage() {} func (*IntegrationTestInput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{19} + return fileDescriptor_service_fea80af72a06dc0a, []int{19} } func (m *IntegrationTestInput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1181,7 +1215,7 @@ func (m *IntegrationTestOutput) Reset() { *m = IntegrationTestOutput{} } func (m *IntegrationTestOutput) String() string { return proto.CompactTextString(m) } func (*IntegrationTestOutput) ProtoMessage() {} func (*IntegrationTestOutput) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{20} + return fileDescriptor_service_fea80af72a06dc0a, []int{20} } func (m *IntegrationTestOutput) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1256,7 +1290,7 @@ func (m *Void) Reset() { *m = Void{} } func (m *Void) String() string { return proto.CompactTextString(m) } func (*Void) ProtoMessage() {} func (*Void) Descriptor() ([]byte, []int) { - return fileDescriptor_service_2df938565fd84e6f, []int{21} + return fileDescriptor_service_fea80af72a06dc0a, []int{21} } func (m *Void) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1315,6 +1349,7 @@ func init() { proto.RegisterType((*IntegrationTestInput)(nil), "berty.node.IntegrationTestInput") proto.RegisterType((*IntegrationTestOutput)(nil), "berty.node.IntegrationTestOutput") proto.RegisterType((*Void)(nil), "berty.node.Void") + proto.RegisterEnum("berty.node.NullableTrueFalse", NullableTrueFalse_name, NullableTrueFalse_value) } // Reference imports to suppress errors if they are not otherwise used. @@ -2681,6 +2716,11 @@ func (m *EventListInput) MarshalTo(dAtA []byte) (int, error) { } i += n5 } + if m.OnlyWithoutAckedAt != 0 { + dAtA[i] = 0x10 + i++ + i = encodeVarintService(dAtA, i, uint64(m.OnlyWithoutAckedAt)) + } if m.Paginate != nil { dAtA[i] = 0x9a i++ @@ -3478,6 +3518,9 @@ func (m *EventListInput) Size() (n int) { l = m.Filter.Size() n += 1 + l + sovService(uint64(l)) } + if m.OnlyWithoutAckedAt != 0 { + n += 1 + sovService(uint64(m.OnlyWithoutAckedAt)) + } if m.Paginate != nil { l = m.Paginate.Size() n += 2 + l + sovService(uint64(l)) @@ -4451,6 +4494,25 @@ func (m *EventListInput) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field OnlyWithoutAckedAt", wireType) + } + m.OnlyWithoutAckedAt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowService + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.OnlyWithoutAckedAt |= (NullableTrueFalse(b) & 0x7F) << shift + if b < 0x80 { + break + } + } case 99: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Paginate", wireType) @@ -6488,109 +6550,114 @@ var ( ErrIntOverflowService = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("api/node/service.proto", fileDescriptor_service_2df938565fd84e6f) } - -var fileDescriptor_service_2df938565fd84e6f = []byte{ - // 1616 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x4d, 0x6f, 0xdb, 0x46, - 0x13, 0x0e, 0x13, 0xc9, 0x91, 0x46, 0x76, 0xac, 0x77, 0xfd, 0x11, 0x49, 0xf1, 0xeb, 0x0f, 0xbe, - 0x2f, 0x5a, 0xd7, 0x4d, 0xa4, 0xd4, 0x06, 0xfa, 0x85, 0xa0, 0x80, 0x6d, 0xb9, 0xae, 0xd1, 0xba, - 0x75, 0x68, 0x37, 0x87, 0xa0, 0x80, 0x40, 0x91, 0x23, 0x8a, 0xb5, 0x44, 0x32, 0xe4, 0xca, 0xb5, - 0x91, 0x43, 0x7b, 0x29, 0x90, 0x5e, 0x8a, 0x1e, 0x7b, 0xe8, 0xaf, 0xe8, 0xa1, 0x40, 0xff, 0x41, - 0x8e, 0x45, 0x7e, 0x40, 0x5b, 0xa4, 0xc7, 0x5e, 0xdc, 0x6b, 0x4f, 0x05, 0x97, 0x4b, 0x72, 0x49, - 0x51, 0x4a, 0x02, 0xa7, 0x27, 0x71, 0x67, 0x67, 0x9e, 0x99, 0x79, 0x76, 0xb8, 0x33, 0x22, 0xcc, - 0xab, 0x8e, 0xd9, 0xb0, 0x6c, 0x1d, 0x1b, 0x1e, 0xba, 0x27, 0xa6, 0x86, 0x75, 0xc7, 0xb5, 0xa9, - 0x4d, 0xa0, 0x8d, 0x2e, 0x3d, 0xab, 0xfb, 0x3b, 0x35, 0xd9, 0xd7, 0x61, 0xe2, 0xf6, 0xa0, 0xd3, - 0x30, 0x5c, 0xd5, 0xe9, 0x3e, 0xe8, 0x85, 0xbf, 0x81, 0x7e, 0x6d, 0x86, 0xe9, 0xac, 0x3b, 0x0d, - 0x3c, 0x41, 0x8b, 0x72, 0xe1, 0x5c, 0x28, 0xec, 0x23, 0x75, 0x4d, 0xcd, 0xe3, 0x62, 0x12, 0x8a, - 0x1d, 0x44, 0x97, 0xcb, 0x66, 0xd1, 0xa2, 0x26, 0x3d, 0x6b, 0x68, 0xb6, 0x45, 0x55, 0x2d, 0x04, - 0xa8, 0xc6, 0xd2, 0x13, 0x74, 0x3d, 0x95, 0x9a, 0xb6, 0x95, 0x32, 0xe8, 0xa3, 0xe7, 0xa9, 0x06, - 0x0f, 0xbb, 0xb6, 0xe4, 0x1c, 0x1b, 0x0d, 0x1d, 0xfd, 0x44, 0x4c, 0xab, 0x63, 0x0b, 0x8f, 0xa1, - 0x99, 0x61, 0x1b, 0x36, 0x7b, 0x6c, 0xf8, 0x4f, 0xa1, 0x99, 0x61, 0xdb, 0x46, 0x0f, 0xe3, 0x24, - 0xa9, 0xd9, 0x47, 0x8f, 0xaa, 0x7d, 0x27, 0x50, 0x90, 0x1b, 0x30, 0x7d, 0xe0, 0x3f, 0x68, 0x76, - 0xcf, 0xfb, 0x64, 0x40, 0x9d, 0x01, 0x25, 0x0b, 0x50, 0x74, 0x42, 0x51, 0x45, 0x5a, 0xbe, 0xb2, - 0x5a, 0x54, 0x62, 0x81, 0x7c, 0x13, 0xca, 0x9b, 0x8e, 0x73, 0x0f, 0x5d, 0xcf, 0xb4, 0x2d, 0x6e, - 0x51, 0x81, 0xab, 0x27, 0x81, 0xa0, 0x22, 0x2d, 0x4b, 0xab, 0x45, 0x25, 0x5c, 0xca, 0x1b, 0x30, - 0x7d, 0x60, 0x5a, 0x46, 0x13, 0x3d, 0x6a, 0x5a, 0x2c, 0x4b, 0xb2, 0x0c, 0x25, 0x3d, 0x5e, 0x72, - 0x03, 0x51, 0x24, 0x23, 0xcc, 0x6c, 0x07, 0x6c, 0x29, 0xf8, 0x60, 0x80, 0x1e, 0xdd, 0xb3, 0x7c, - 0x2f, 0x0d, 0xb8, 0xca, 0x49, 0x64, 0x46, 0xa5, 0xf5, 0xb9, 0x7a, 0x70, 0x96, 0x01, 0x61, 0xf5, - 0xd0, 0x26, 0xd4, 0x22, 0xff, 0x05, 0x30, 0x2d, 0xea, 0xda, 0x2d, 0x8a, 0xa7, 0xb4, 0x72, 0x99, - 0x39, 0x2a, 0x32, 0xc9, 0x11, 0x9e, 0x52, 0xf9, 0x5b, 0x09, 0x6e, 0x6c, 0x0b, 0xfc, 0x6f, 0xea, - 0xfa, 0x7e, 0xc0, 0x79, 0xe0, 0xef, 0x3d, 0x98, 0x14, 0x8f, 0x87, 0x3b, 0xad, 0x0d, 0x39, 0x8d, - 0x34, 0x94, 0x84, 0xbe, 0x1f, 0x2f, 0x3f, 0x43, 0xe6, 0x7b, 0x28, 0x5e, 0xee, 0x4c, 0x09, 0xb5, - 0xe4, 0x3b, 0x50, 0xde, 0xf1, 0x8b, 0xec, 0x90, 0xba, 0xa8, 0xf6, 0x83, 0x20, 0x56, 0x61, 0xa2, - 0x63, 0xf6, 0x28, 0xba, 0xdc, 0x7d, 0x99, 0x63, 0x38, 0xeb, 0x4e, 0x9d, 0x29, 0x2b, 0x7c, 0x5f, - 0xa6, 0x70, 0x8d, 0x09, 0x3e, 0x32, 0x43, 0xc2, 0x9e, 0xdb, 0x96, 0xbc, 0x0d, 0x05, 0x47, 0x35, - 0x7c, 0xfe, 0xb1, 0xa2, 0x31, 0xdd, 0xf9, 0x7a, 0xfc, 0x9e, 0xd4, 0x0f, 0x82, 0x3d, 0xd3, 0xb6, - 0xb6, 0x72, 0xe7, 0xe7, 0x55, 0x49, 0x89, 0xb4, 0xe5, 0x3d, 0x28, 0x32, 0xa8, 0x1d, 0xdd, 0x40, - 0xf2, 0x7f, 0xc8, 0xf9, 0xfa, 0x23, 0xdd, 0xb1, 0x5d, 0x32, 0x0f, 0x13, 0xda, 0xc0, 0xf5, 0x6c, - 0x97, 0x1f, 0x09, 0x5f, 0xc9, 0x0f, 0x61, 0x26, 0x4a, 0x60, 0xdb, 0xb6, 0x2c, 0xd4, 0x18, 0x8d, - 0xaf, 0x43, 0x1e, 0x75, 0x03, 0x83, 0x52, 0x8c, 0x49, 0x64, 0x81, 0x45, 0xae, 0x95, 0x40, 0x87, - 0xbc, 0x05, 0x45, 0x47, 0x35, 0xb0, 0xe5, 0xbf, 0x18, 0x3c, 0x93, 0xd9, 0x54, 0x26, 0xb8, 0x67, - 0x75, 0xec, 0xad, 0xdc, 0xa3, 0xbf, 0x78, 0x1e, 0x6c, 0x2d, 0x3f, 0x84, 0x32, 0xaf, 0x9f, 0x98, - 0xbf, 0x5b, 0x29, 0xfe, 0x46, 0xd4, 0xdb, 0xc5, 0x49, 0x3c, 0x80, 0x12, 0x07, 0x63, 0x34, 0xbe, - 0x96, 0xa0, 0x71, 0x84, 0xd7, 0xf1, 0x5c, 0x7e, 0x09, 0x73, 0x42, 0x3a, 0x02, 0x9b, 0xb7, 0x92, - 0x6c, 0x5e, 0x17, 0x23, 0x14, 0x62, 0xb8, 0x30, 0x9f, 0x5f, 0x4b, 0x2c, 0x82, 0xe8, 0x6d, 0x88, - 0x59, 0x5d, 0x4f, 0xb1, 0x3a, 0xee, 0x85, 0xba, 0x38, 0xb5, 0xf7, 0xd9, 0xb9, 0x46, 0x88, 0x8c, - 0xdf, 0x7a, 0x82, 0xdf, 0x71, 0xfe, 0xc7, 0x93, 0xfc, 0x8d, 0x04, 0xb5, 0x74, 0x8e, 0x02, 0xd5, - 0xeb, 0x49, 0xaa, 0x17, 0x52, 0x54, 0x27, 0x62, 0xba, 0x30, 0xdf, 0xa7, 0x70, 0x5d, 0xc4, 0xdc, - 0x76, 0x51, 0xa5, 0xfc, 0x1e, 0x7b, 0x03, 0x0a, 0xfc, 0x46, 0x4c, 0xbf, 0x43, 0xa9, 0x92, 0x8a, - 0xd4, 0xc8, 0x2c, 0xe4, 0xa9, 0x49, 0x7b, 0xc8, 0x13, 0x0e, 0x16, 0x4c, 0x6a, 0x3b, 0xa6, 0x56, - 0xb9, 0xc2, 0xa5, 0xfe, 0x42, 0xfe, 0x41, 0x82, 0x45, 0xd1, 0xf5, 0xbe, 0x6a, 0xa9, 0x06, 0xee, - 0x63, 0xbf, 0x8d, 0xae, 0xf7, 0x72, 0x6e, 0xd2, 0x77, 0xfd, 0x9b, 0x94, 0xe1, 0x55, 0x2e, 0xb3, - 0x04, 0x96, 0x47, 0x9b, 0x06, 0x8e, 0x95, 0xd0, 0x40, 0xfe, 0x49, 0x02, 0x88, 0xeb, 0x83, 0x54, - 0xa1, 0x60, 0xbb, 0x3a, 0xba, 0xad, 0xf6, 0x59, 0xd8, 0xab, 0xd8, 0x7a, 0xeb, 0xcc, 0x6f, 0x17, - 0xc1, 0x96, 0x8e, 0x9e, 0xc6, 0x32, 0x2f, 0x28, 0x45, 0x26, 0x69, 0xa2, 0xa7, 0x91, 0x1a, 0xe4, - 0x3b, 0xa6, 0xeb, 0xd1, 0x4a, 0x69, 0x59, 0x5a, 0xcd, 0x6f, 0xe5, 0xbe, 0xf2, 0x0f, 0x20, 0x10, - 0xf9, 0x7b, 0x6a, 0xc7, 0x2f, 0xe9, 0x49, 0x1f, 0x32, 0xdc, 0x63, 0x22, 0x52, 0x81, 0x5c, 0x4f, - 0xf5, 0x68, 0x65, 0x4a, 0x30, 0x63, 0x12, 0xb2, 0x00, 0x13, 0x6d, 0xec, 0xd8, 0x2e, 0x56, 0xae, - 0x09, 0x66, 0x5c, 0x26, 0xff, 0x28, 0x41, 0x21, 0x3c, 0x6e, 0xb2, 0x02, 0x93, 0x1e, 0x55, 0x5d, - 0xda, 0xe2, 0x85, 0xc8, 0xbb, 0x26, 0x93, 0x6d, 0x33, 0x91, 0x1f, 0x3e, 0x5a, 0x7a, 0x2b, 0x51, - 0xa9, 0x45, 0xb4, 0x74, 0xbe, 0x2d, 0xc3, 0x54, 0x57, 0xf5, 0x5a, 0x16, 0x9e, 0xd2, 0x96, 0x5f, - 0x35, 0xec, 0x10, 0x0b, 0x4a, 0xa9, 0xab, 0x7a, 0x1f, 0xe3, 0x29, 0xf5, 0x3d, 0x91, 0x35, 0xf8, - 0x8f, 0xaf, 0xe3, 0xb8, 0x78, 0x62, 0xda, 0x03, 0x2f, 0xd0, 0xcb, 0x31, 0xbd, 0xe9, 0xae, 0xea, - 0x1d, 0x70, 0x39, 0xd3, 0x9d, 0x85, 0xbc, 0x66, 0x0f, 0x2c, 0x5a, 0xc9, 0x2f, 0x4b, 0xab, 0x53, - 0x4a, 0xb0, 0x90, 0xd7, 0x60, 0x76, 0xcf, 0xa2, 0x68, 0xb8, 0x8c, 0xed, 0xa3, 0xa8, 0x77, 0x13, - 0xc8, 0x59, 0x6a, 0x1f, 0x79, 0xdc, 0xec, 0x59, 0xfe, 0x53, 0x82, 0xb9, 0x94, 0x32, 0x9f, 0x27, - 0x32, 0xb4, 0xfd, 0x19, 0xc3, 0x1b, 0x68, 0x1a, 0x7a, 0x1e, 0x3f, 0x9a, 0x70, 0xc9, 0xa7, 0x8f, - 0xb6, 0xed, 0x21, 0x2f, 0xcc, 0x70, 0x49, 0xb6, 0x01, 0x18, 0x43, 0xa8, 0xb7, 0x54, 0xca, 0x12, - 0xf1, 0xab, 0x2e, 0x18, 0x89, 0xea, 0xe1, 0x48, 0x54, 0x3f, 0x0a, 0x47, 0xa2, 0xad, 0xc2, 0xe3, - 0x5f, 0x97, 0x2e, 0x7d, 0xf7, 0xdb, 0x92, 0xa4, 0x14, 0xb9, 0xdd, 0x26, 0x25, 0x3b, 0x50, 0xea, - 0x98, 0x96, 0xe9, 0x75, 0x03, 0x94, 0xfc, 0x0b, 0xa0, 0x40, 0x68, 0xb8, 0x49, 0xe5, 0x59, 0xc8, - 0xdd, 0xb3, 0x4d, 0x9d, 0x4c, 0x82, 0x74, 0xc4, 0x12, 0x2b, 0x28, 0xd2, 0xd1, 0xfa, 0xcf, 0x04, - 0xae, 0x1e, 0x06, 0xf3, 0x29, 0x59, 0x87, 0xcb, 0x7b, 0x4d, 0x52, 0x16, 0x5f, 0x77, 0xdf, 0xa2, - 0x36, 0x2d, 0xf4, 0xd1, 0x03, 0x44, 0x57, 0x2e, 0x3e, 0x39, 0xaf, 0xe6, 0xef, 0x0e, 0xd0, 0x3d, - 0x23, 0x77, 0xa1, 0x24, 0x8c, 0x0c, 0x64, 0x61, 0xa8, 0x39, 0x0a, 0xb3, 0x44, 0x6d, 0xa8, 0x21, - 0xcb, 0xe5, 0x27, 0xe7, 0xd5, 0xc9, 0xc3, 0x41, 0xdb, 0xd3, 0x5c, 0xd3, 0xf1, 0x0f, 0xe1, 0xb6, - 0x44, 0x4c, 0xde, 0xd1, 0xfd, 0xdb, 0x8c, 0xd4, 0x86, 0x00, 0xa3, 0x8b, 0x3c, 0x03, 0xee, 0x66, - 0x14, 0xd8, 0xdf, 0xe7, 0xd5, 0xa5, 0x4c, 0xd3, 0xf8, 0x7e, 0xbc, 0x2d, 0x91, 0x77, 0xa0, 0xb0, - 0x8b, 0x94, 0xed, 0x91, 0x21, 0xb4, 0x0c, 0x7c, 0x21, 0xf1, 0x7b, 0x70, 0x2d, 0x39, 0x23, 0x92, - 0xa5, 0x8c, 0x56, 0x26, 0xce, 0x8f, 0xb5, 0xec, 0x5b, 0x4f, 0x9e, 0x7c, 0x72, 0x5e, 0x2d, 0xec, - 0x0f, 0x68, 0x70, 0x3f, 0x28, 0x30, 0xcb, 0x37, 0x36, 0x35, 0x0d, 0x9d, 0x08, 0x3d, 0xdb, 0xf8, - 0xf9, 0x30, 0x3f, 0x84, 0xa9, 0x28, 0x9e, 0xbe, 0x7d, 0x82, 0x2f, 0x09, 0xec, 0x53, 0x47, 0x57, - 0xe9, 0xc5, 0xc0, 0x68, 0x34, 0x78, 0xb0, 0xd3, 0x5e, 0xc8, 0xa0, 0x30, 0x3e, 0xef, 0x11, 0x88, - 0x75, 0xf1, 0xd0, 0x57, 0x46, 0x20, 0x24, 0x8e, 0x7d, 0x07, 0x60, 0x17, 0x29, 0xdf, 0x7d, 0xc1, - 0xf8, 0x85, 0x12, 0xd0, 0x80, 0x0c, 0xb7, 0x3c, 0xf2, 0xbf, 0x51, 0x6d, 0x56, 0x68, 0x89, 0xb5, - 0x31, 0xad, 0x27, 0xc5, 0xd0, 0x23, 0x29, 0x39, 0x40, 0x30, 0x9e, 0x56, 0x46, 0xf9, 0x88, 0xc9, - 0x1a, 0xe7, 0x61, 0x43, 0x64, 0xec, 0x95, 0x71, 0x58, 0x09, 0xda, 0x3e, 0x4f, 0xe6, 0xbb, 0x67, - 0x9d, 0x98, 0x14, 0xc9, 0xda, 0x28, 0xfb, 0xe1, 0x3e, 0xfc, 0x02, 0x69, 0x1f, 0xb3, 0xbf, 0x60, - 0xf1, 0x88, 0x72, 0xaa, 0xf5, 0x06, 0xfa, 0xbf, 0xe5, 0x4c, 0x85, 0xf9, 0xec, 0xff, 0x61, 0xe4, - 0xd5, 0x51, 0xfe, 0x52, 0xff, 0xd5, 0x32, 0xee, 0x8a, 0xa4, 0x8b, 0x23, 0x98, 0x0e, 0x4a, 0x2e, - 0x1e, 0x2a, 0xc6, 0xc4, 0x37, 0x36, 0x76, 0xa1, 0x02, 0x3b, 0x30, 0x97, 0x42, 0x0d, 0x18, 0x20, - 0xcf, 0x9c, 0x4f, 0x6a, 0xcf, 0xd4, 0x10, 0xfd, 0x6c, 0x40, 0xe9, 0x03, 0xd5, 0xd2, 0x7b, 0xf8, - 0xac, 0xab, 0x32, 0x6a, 0x1a, 0xf2, 0x25, 0xd2, 0x84, 0xf2, 0x2e, 0x5a, 0xe8, 0xaa, 0x14, 0xdf, - 0x57, 0x8f, 0xb1, 0xa9, 0x52, 0x35, 0xa3, 0xb9, 0x0c, 0x5b, 0x26, 0x89, 0xeb, 0xc2, 0x8c, 0x32, - 0xb0, 0x52, 0x6d, 0xda, 0x8b, 0x12, 0x64, 0x66, 0x59, 0x1d, 0xbf, 0xb6, 0x32, 0x46, 0x23, 0x68, - 0xf3, 0x29, 0x4f, 0x77, 0xa0, 0xd8, 0xc4, 0xf6, 0xc0, 0x38, 0x30, 0x2d, 0x83, 0xdc, 0x48, 0x0c, - 0xbd, 0xc9, 0x2f, 0x08, 0x99, 0xd9, 0xee, 0x43, 0xa9, 0xc9, 0x3e, 0x89, 0xf8, 0xe3, 0x92, 0x97, - 0x91, 0x68, 0x18, 0x8f, 0x73, 0x6c, 0xd4, 0x85, 0x8f, 0x27, 0x82, 0x91, 0xc8, 0xf8, 0x2e, 0x40, - 0xfc, 0x95, 0x23, 0x03, 0x2d, 0x71, 0x53, 0xa6, 0xbf, 0x87, 0x88, 0x40, 0x6f, 0x42, 0xde, 0xef, - 0xd9, 0xde, 0x18, 0xea, 0xc3, 0xbe, 0x9e, 0x08, 0xa0, 0x09, 0xc5, 0xe8, 0xbb, 0x0c, 0x49, 0x4f, - 0x00, 0xb5, 0x24, 0x3d, 0xc9, 0xef, 0x37, 0x22, 0xca, 0x67, 0x50, 0xde, 0xb7, 0x2d, 0x93, 0xda, - 0xee, 0x96, 0x6a, 0xe9, 0x5f, 0x98, 0x3a, 0xed, 0x92, 0xaa, 0x00, 0x16, 0x49, 0x0f, 0xa9, 0x4a, - 0xbd, 0xda, 0xe8, 0xad, 0xcc, 0x49, 0x61, 0x07, 0x26, 0x39, 0xfa, 0xa8, 0x14, 0x87, 0x46, 0x97, - 0x2c, 0x18, 0x9f, 0x22, 0xd5, 0x32, 0xb5, 0xe7, 0xaa, 0xce, 0x38, 0xb9, 0xad, 0xb5, 0xc7, 0x4f, - 0x17, 0xa5, 0x5f, 0x9e, 0x2e, 0x4a, 0xbf, 0x3f, 0x5d, 0x94, 0xbe, 0xff, 0x63, 0xf1, 0xd2, 0xfd, - 0x4a, 0xa0, 0x4d, 0x51, 0xeb, 0x36, 0x34, 0xdb, 0xc5, 0x46, 0xf8, 0x0d, 0xb0, 0x3d, 0xc1, 0xe6, - 0xb4, 0x8d, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x04, 0x5f, 0x80, 0x38, 0x16, 0x14, 0x00, 0x00, +func init() { proto.RegisterFile("api/node/service.proto", fileDescriptor_service_fea80af72a06dc0a) } + +var fileDescriptor_service_fea80af72a06dc0a = []byte{ + // 1696 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x4f, 0x6f, 0x23, 0x49, + 0x15, 0x9f, 0x9e, 0xb5, 0x67, 0xec, 0xe7, 0xcc, 0xc4, 0x5b, 0x93, 0xcc, 0x3a, 0xde, 0x6c, 0x92, + 0x69, 0x10, 0x84, 0xb0, 0x6b, 0x2f, 0x1e, 0x89, 0x7f, 0x5a, 0x21, 0xe5, 0xdf, 0x0e, 0x11, 0x64, + 0xc9, 0xf6, 0x84, 0x41, 0x5a, 0x21, 0x59, 0xe5, 0xee, 0xe7, 0x76, 0x13, 0xa7, 0xba, 0xb7, 0xab, + 0x3a, 0x9b, 0x68, 0x0f, 0x70, 0x41, 0x5a, 0x2e, 0x88, 0x23, 0x07, 0x3e, 0x05, 0x07, 0x24, 0xbe, + 0x00, 0xda, 0x23, 0x9a, 0x0f, 0x00, 0x68, 0x38, 0x72, 0x09, 0x57, 0x4e, 0xa8, 0xaa, 0xab, 0xdb, + 0xd5, 0x76, 0xdb, 0x33, 0xc3, 0x0c, 0x27, 0x57, 0xbd, 0x7a, 0x7f, 0x7f, 0xef, 0x75, 0xbd, 0xe7, + 0x82, 0xfb, 0x34, 0x0a, 0xba, 0x2c, 0xf4, 0xb0, 0xcb, 0x31, 0xbe, 0x08, 0x5c, 0xec, 0x44, 0x71, + 0x28, 0x42, 0x02, 0x03, 0x8c, 0xc5, 0x55, 0x47, 0x9e, 0xb4, 0x6d, 0xc9, 0xa3, 0xc8, 0x83, 0x64, + 0xd8, 0xf5, 0x63, 0x1a, 0x8d, 0x3e, 0x1d, 0x67, 0xbf, 0x29, 0x7f, 0xfb, 0x9e, 0xe2, 0xe9, 0x45, + 0x5d, 0xbc, 0x40, 0x26, 0x34, 0x71, 0x35, 0x23, 0x9e, 0xa3, 0x88, 0x03, 0x97, 0x6b, 0x32, 0xc9, + 0xc8, 0x11, 0x62, 0xac, 0x69, 0x2b, 0xc8, 0x44, 0x20, 0xae, 0xba, 0x6e, 0xc8, 0x04, 0x75, 0x33, + 0x05, 0x6b, 0x13, 0xea, 0x05, 0xc6, 0x9c, 0x8a, 0x20, 0x64, 0x53, 0x02, 0xe7, 0xc8, 0x39, 0xf5, + 0xb5, 0xdb, 0xed, 0xcd, 0xe8, 0xcc, 0xef, 0x7a, 0x28, 0x03, 0x09, 0xd8, 0x30, 0x34, 0x96, 0x99, + 0x98, 0x1f, 0xfa, 0xa1, 0x5a, 0x76, 0xe5, 0x2a, 0x13, 0xf3, 0xc3, 0xd0, 0x1f, 0xe3, 0x24, 0x48, + 0x11, 0x9c, 0x23, 0x17, 0xf4, 0x3c, 0x4a, 0x19, 0xec, 0x2e, 0x2c, 0x9f, 0xc8, 0x85, 0x1b, 0x8e, + 0xf9, 0x4f, 0x12, 0x11, 0x25, 0x82, 0xac, 0x43, 0x3d, 0xca, 0x48, 0x2d, 0x6b, 0xeb, 0x8d, 0xed, + 0xba, 0x33, 0x21, 0xd8, 0xef, 0x42, 0x73, 0x37, 0x8a, 0x9e, 0x60, 0xcc, 0x83, 0x90, 0x69, 0x89, + 0x16, 0xdc, 0xbe, 0x48, 0x09, 0x2d, 0x6b, 0xcb, 0xda, 0xae, 0x3b, 0xd9, 0xd6, 0x7e, 0x08, 0xcb, + 0x27, 0x01, 0xf3, 0x0f, 0x90, 0x8b, 0x80, 0xa9, 0x28, 0xc9, 0x16, 0x34, 0xbc, 0xc9, 0x56, 0x0b, + 0x98, 0x24, 0x1b, 0xe1, 0xde, 0x7e, 0x8a, 0x96, 0x83, 0x9f, 0x26, 0xc8, 0xc5, 0x11, 0x93, 0x56, + 0xba, 0x70, 0x5b, 0x83, 0xa8, 0x84, 0x1a, 0xbd, 0xd5, 0x4e, 0x9a, 0xcb, 0x14, 0xb0, 0x4e, 0x26, + 0x93, 0x71, 0x91, 0x77, 0x00, 0x02, 0x26, 0xe2, 0xb0, 0x2f, 0xf0, 0x52, 0xb4, 0x6e, 0x2a, 0x43, + 0x75, 0x45, 0x39, 0xc5, 0x4b, 0x61, 0xff, 0xd6, 0x82, 0xb7, 0xf7, 0x0d, 0xfc, 0x77, 0x3d, 0xef, + 0x38, 0xc5, 0x3c, 0xb5, 0xf7, 0x03, 0x58, 0x32, 0xd3, 0xa3, 0x8d, 0xb6, 0x67, 0x8c, 0xe6, 0x1c, + 0x4e, 0x81, 0x5f, 0xfa, 0xab, 0x73, 0xa8, 0x6c, 0xcf, 0xf8, 0xab, 0x8d, 0x39, 0x19, 0x97, 0xfd, + 0x01, 0x34, 0x0f, 0x65, 0x91, 0x3d, 0x16, 0x31, 0xd2, 0xf3, 0xd4, 0x89, 0x6d, 0xb8, 0x35, 0x0c, + 0xc6, 0x02, 0x63, 0x6d, 0xbe, 0xa9, 0x75, 0x44, 0xbd, 0xa8, 0xa3, 0x98, 0x1d, 0x7d, 0x6e, 0xff, + 0xc5, 0x82, 0xbb, 0x8a, 0xf2, 0xe3, 0x20, 0x43, 0xec, 0x85, 0x85, 0xc9, 0x09, 0xac, 0x86, 0x6c, + 0x7c, 0xd5, 0xff, 0x2c, 0x10, 0xa3, 0x30, 0x11, 0x7d, 0xea, 0x9e, 0xa1, 0xd7, 0xa7, 0x29, 0x6a, + 0x77, 0x7b, 0xef, 0x74, 0x26, 0x5f, 0x4d, 0xe7, 0xa3, 0x64, 0x3c, 0xa6, 0x83, 0x31, 0x9e, 0xc6, + 0x09, 0x7e, 0x48, 0xc7, 0x1c, 0x1d, 0x22, 0x65, 0x7f, 0x96, 0x8a, 0xee, 0x4a, 0xc9, 0x5d, 0x41, + 0xbe, 0x0b, 0xb5, 0x88, 0xfa, 0x32, 0xa5, 0xd8, 0x72, 0x95, 0xf5, 0xfb, 0xa6, 0x92, 0x93, 0xf4, + 0x2c, 0x08, 0xd9, 0x5e, 0xe5, 0xfa, 0x7a, 0xcd, 0x72, 0x72, 0x6e, 0xfb, 0x08, 0xea, 0xca, 0xb9, + 0x43, 0xcf, 0x47, 0xf2, 0x55, 0xa8, 0x48, 0xfe, 0xb9, 0x01, 0xa8, 0x53, 0x72, 0x1f, 0x6e, 0xb9, + 0x49, 0xcc, 0xc3, 0x58, 0x67, 0x59, 0xef, 0xec, 0xcf, 0xe1, 0x5e, 0x0e, 0xc9, 0x7e, 0xc8, 0x18, + 0xba, 0x2a, 0x33, 0xdf, 0x84, 0x2a, 0x7a, 0x3e, 0xa6, 0xd5, 0x3d, 0xc9, 0x8b, 0x72, 0x2c, 0x37, + 0xed, 0xa4, 0x3c, 0xe4, 0x3b, 0x50, 0x8f, 0xa8, 0x8f, 0x7d, 0xf9, 0xad, 0xe9, 0x48, 0x56, 0xa6, + 0x22, 0xc1, 0x23, 0x36, 0x0c, 0xf7, 0x2a, 0x5f, 0xfc, 0x5b, 0xc7, 0xa1, 0xf6, 0xf6, 0xe7, 0xd0, + 0xd4, 0x25, 0x39, 0xc9, 0xc8, 0x7b, 0x53, 0x19, 0x99, 0x53, 0xc2, 0x59, 0x5a, 0xfe, 0x77, 0x10, + 0x4f, 0xa0, 0xa1, 0x95, 0x29, 0x18, 0xbf, 0x51, 0x80, 0x71, 0x8e, 0xd5, 0xc5, 0x58, 0xfe, 0x12, + 0x56, 0x8d, 0x70, 0x0c, 0x34, 0xdf, 0x2b, 0xa2, 0xf9, 0x96, 0xe9, 0xa1, 0xe1, 0xc3, 0x2b, 0xe3, + 0xf9, 0x6b, 0x4b, 0x79, 0x90, 0x7f, 0x60, 0x13, 0x54, 0x7b, 0x53, 0xa8, 0x2e, 0xfa, 0x46, 0x5f, + 0x1d, 0xda, 0x4f, 0x54, 0x5e, 0x73, 0x8d, 0x0a, 0xdf, 0x4e, 0x01, 0xdf, 0x45, 0xf6, 0x17, 0x83, + 0xfc, 0x1b, 0x0b, 0xda, 0xd3, 0x31, 0x1a, 0x50, 0xf7, 0x8a, 0x50, 0xaf, 0x4f, 0x41, 0x5d, 0xf0, + 0xe9, 0x95, 0xf1, 0xbe, 0x84, 0xb7, 0x4c, 0x9d, 0xfb, 0x31, 0x52, 0xa1, 0xaf, 0xc6, 0x6f, 0x41, + 0x4d, 0x5f, 0xb2, 0xd3, 0xdf, 0xd0, 0x54, 0x49, 0xe5, 0x6c, 0x64, 0x05, 0xaa, 0x22, 0x10, 0x63, + 0xd4, 0x01, 0xa7, 0x1b, 0x45, 0x0d, 0xa3, 0xc0, 0x6d, 0xbd, 0xa1, 0xa9, 0x72, 0x63, 0xff, 0xc1, + 0x82, 0x0d, 0xd3, 0xf4, 0x31, 0x65, 0xd4, 0xc7, 0x63, 0x3c, 0x1f, 0x60, 0xcc, 0x5f, 0xcf, 0xe5, + 0xfc, 0x7d, 0x79, 0x39, 0x2b, 0x7d, 0xad, 0x9b, 0x2a, 0x80, 0xad, 0xf9, 0xa2, 0xa9, 0x61, 0x27, + 0x13, 0xb0, 0xff, 0x64, 0x01, 0x4c, 0xea, 0x83, 0xac, 0x41, 0x2d, 0x8c, 0x3d, 0x8c, 0xfb, 0x83, + 0xab, 0xac, 0xfd, 0xa9, 0xfd, 0xde, 0x95, 0xec, 0x40, 0xe9, 0x91, 0x87, 0xdc, 0x55, 0x91, 0xd7, + 0x9c, 0xba, 0xa2, 0x1c, 0x20, 0x77, 0x49, 0x1b, 0xaa, 0xc3, 0x20, 0xe6, 0xa2, 0xd5, 0xd8, 0xb2, + 0xb6, 0xab, 0x7b, 0x95, 0x5f, 0xc9, 0x04, 0xa4, 0x24, 0x79, 0x46, 0x87, 0xb2, 0xa4, 0x97, 0xa4, + 0xca, 0xec, 0x4c, 0x91, 0x48, 0x0b, 0x2a, 0x63, 0xca, 0x45, 0xeb, 0x8e, 0x21, 0xa6, 0x28, 0x64, + 0x1d, 0x6e, 0x0d, 0x70, 0x18, 0xc6, 0xd8, 0xba, 0x6b, 0x88, 0x69, 0x9a, 0xfd, 0x47, 0x0b, 0x6a, + 0x59, 0xba, 0xc9, 0x03, 0x58, 0xe2, 0x82, 0xc6, 0xa2, 0xaf, 0x0b, 0x51, 0x37, 0x62, 0x45, 0xdb, + 0x57, 0x24, 0xe9, 0x3e, 0x32, 0xaf, 0x5f, 0xa8, 0xd4, 0x3a, 0x32, 0x4f, 0x1f, 0xdb, 0x70, 0x67, + 0x44, 0x79, 0x9f, 0xe1, 0xa5, 0xe8, 0xcb, 0xaa, 0x51, 0x49, 0xac, 0x39, 0x8d, 0x11, 0xe5, 0x1f, + 0xe1, 0xa5, 0x90, 0x96, 0xc8, 0x0e, 0xbc, 0x29, 0x79, 0xa2, 0x18, 0x2f, 0x82, 0x30, 0xe1, 0x29, + 0x5f, 0x45, 0xf1, 0x2d, 0x8f, 0x28, 0x3f, 0xd1, 0x74, 0xc5, 0xbb, 0x02, 0x55, 0x37, 0x4c, 0x98, + 0x68, 0x55, 0xb7, 0xac, 0xed, 0x3b, 0x4e, 0xba, 0xb1, 0x77, 0x60, 0xe5, 0x88, 0x09, 0xf4, 0x63, + 0x85, 0xf6, 0x69, 0x3e, 0x0e, 0x10, 0xa8, 0x30, 0x7a, 0x8e, 0xda, 0x6f, 0xb5, 0xb6, 0xff, 0x65, + 0xc1, 0xea, 0x14, 0xb3, 0x1e, 0x51, 0x4a, 0xb8, 0xe5, 0xd8, 0xc2, 0x13, 0xd7, 0x45, 0xce, 0x75, + 0x6a, 0xb2, 0xad, 0x1e, 0x68, 0x06, 0x21, 0x47, 0x5d, 0x98, 0xd9, 0x96, 0xec, 0x03, 0x28, 0x84, + 0xd2, 0xee, 0x58, 0xd1, 0x55, 0x97, 0x4e, 0x59, 0x9d, 0x6c, 0xca, 0xea, 0x9c, 0x66, 0x53, 0xd6, + 0x5e, 0xed, 0xcb, 0xbf, 0x6d, 0xde, 0xf8, 0xdd, 0xdf, 0x37, 0x2d, 0xa7, 0xae, 0xe5, 0x76, 0x05, + 0x39, 0x84, 0xc6, 0x30, 0x60, 0x01, 0x1f, 0xa5, 0x5a, 0xaa, 0x2f, 0xa1, 0x05, 0x32, 0xc1, 0x5d, + 0x61, 0xaf, 0x40, 0xe5, 0x49, 0x18, 0x78, 0x64, 0x09, 0xac, 0x53, 0x15, 0x58, 0xcd, 0xb1, 0x4e, + 0x77, 0x7a, 0xf0, 0xe6, 0x4c, 0x87, 0x26, 0x35, 0xa8, 0x48, 0x62, 0xf3, 0x86, 0x5c, 0x49, 0x72, + 0xd3, 0x22, 0x75, 0xa8, 0xaa, 0xc3, 0xe6, 0xcd, 0xde, 0x9f, 0x09, 0xdc, 0x7e, 0x9c, 0x8e, 0xc9, + 0xa4, 0x07, 0x37, 0x8f, 0x0e, 0x48, 0xd3, 0xbc, 0x22, 0xa4, 0x95, 0xf6, 0xb2, 0xd1, 0x7b, 0x4f, + 0x10, 0x63, 0xbb, 0xfe, 0xf4, 0x7a, 0xad, 0xfa, 0x71, 0x82, 0xf1, 0x15, 0xf9, 0x18, 0x1a, 0xc6, + 0xe4, 0x42, 0xd6, 0x67, 0x1a, 0xaa, 0x31, 0xd2, 0xb4, 0x67, 0x9a, 0xb8, 0xdd, 0x7c, 0x7a, 0xbd, + 0xb6, 0xf4, 0x38, 0x19, 0x70, 0x37, 0x0e, 0x22, 0x99, 0xb8, 0xf7, 0x2d, 0x12, 0xe8, 0x29, 0x40, + 0xde, 0x80, 0xa4, 0x3d, 0xa3, 0x30, 0xbf, 0xfc, 0x4b, 0xd4, 0xbd, 0x9b, 0x3b, 0xf6, 0x9f, 0xeb, + 0xb5, 0xcd, 0x52, 0xd1, 0xc9, 0x9d, 0xfa, 0xbe, 0x45, 0xbe, 0x07, 0xb5, 0x47, 0x28, 0xd4, 0x19, + 0x99, 0xd1, 0x56, 0xa2, 0xdf, 0x08, 0xfc, 0x09, 0xdc, 0x2d, 0x8e, 0xaa, 0x64, 0xb3, 0xa4, 0xfd, + 0x99, 0x63, 0x6c, 0xbb, 0xfc, 0xa6, 0xb4, 0x97, 0x9e, 0x5e, 0xaf, 0xd5, 0x8e, 0x13, 0x91, 0xde, + 0x29, 0x0e, 0xac, 0xe8, 0x83, 0x5d, 0xd7, 0xc5, 0x28, 0xd7, 0x5e, 0x2e, 0xfc, 0x62, 0x3a, 0x7f, + 0x04, 0x77, 0x72, 0x7f, 0xce, 0xc3, 0x0b, 0x7c, 0x4d, 0xca, 0x7e, 0x1a, 0x79, 0x54, 0xbc, 0x9a, + 0x32, 0x91, 0x0f, 0x2b, 0x2a, 0xdb, 0xeb, 0x25, 0x10, 0x4e, 0xf2, 0x3d, 0x47, 0x63, 0xc7, 0x4c, + 0xfa, 0x83, 0x39, 0x1a, 0x0a, 0x69, 0x3f, 0x04, 0x78, 0x84, 0x42, 0x9f, 0xbe, 0xa4, 0xff, 0x46, + 0x09, 0xb8, 0x40, 0x66, 0xdb, 0x24, 0xf9, 0xca, 0xbc, 0xd6, 0x6c, 0xb4, 0xd1, 0xf6, 0x82, 0x76, + 0x35, 0x85, 0xd0, 0x17, 0x56, 0x71, 0xe8, 0x50, 0x38, 0x3d, 0x98, 0x67, 0x63, 0x02, 0xd6, 0x22, + 0x0b, 0x0f, 0x4d, 0xc4, 0xbe, 0xb6, 0x48, 0x57, 0x01, 0xb6, 0x5f, 0x14, 0xe3, 0x3d, 0x62, 0x17, + 0x81, 0x40, 0xb2, 0x33, 0x4f, 0x7e, 0xb6, 0x77, 0xbf, 0x44, 0xd8, 0x67, 0xea, 0x9f, 0xe0, 0x64, + 0xac, 0xb9, 0x74, 0xc7, 0x89, 0xf7, 0xff, 0x32, 0x46, 0xe1, 0x7e, 0xf9, 0xdf, 0x41, 0xf2, 0xf5, + 0x79, 0xf6, 0xa6, 0xfe, 0x32, 0x96, 0xdc, 0x15, 0x45, 0x13, 0xa7, 0xb0, 0x9c, 0x96, 0xdc, 0x64, + 0x10, 0x59, 0xe0, 0xdf, 0x42, 0xdf, 0x8d, 0x0a, 0x1c, 0xc2, 0xea, 0x94, 0xd6, 0x14, 0x01, 0xf2, + 0xdc, 0x99, 0xa6, 0xfd, 0x5c, 0x0e, 0xd3, 0xce, 0x43, 0x68, 0xfc, 0x90, 0x32, 0x6f, 0x8c, 0xcf, + 0xbb, 0x2a, 0xf3, 0xa6, 0x61, 0xdf, 0x20, 0x07, 0xd0, 0x7c, 0x84, 0x0c, 0x63, 0x2a, 0xf0, 0x43, + 0x7a, 0x86, 0x07, 0x54, 0xd0, 0x92, 0xe6, 0x32, 0x2b, 0x59, 0x04, 0x6e, 0x04, 0xf7, 0x9c, 0x84, + 0x4d, 0xb5, 0x76, 0x9e, 0x07, 0xa8, 0xc4, 0xca, 0xa6, 0x84, 0xf6, 0x83, 0x05, 0x1c, 0xe9, 0x68, + 0x30, 0x65, 0xe9, 0x03, 0xa8, 0x1f, 0xe0, 0x20, 0xf1, 0x4f, 0x02, 0xe6, 0x93, 0xb7, 0x0b, 0x83, + 0x72, 0xf1, 0x21, 0xa3, 0x34, 0xda, 0x63, 0x68, 0x1c, 0xa8, 0x97, 0x19, 0x39, 0x62, 0xf1, 0x92, + 0x40, 0x33, 0x7f, 0xa2, 0x33, 0xbf, 0x63, 0xbc, 0xe1, 0x18, 0x42, 0x26, 0xe2, 0x8f, 0x00, 0x26, + 0x8f, 0x2d, 0x25, 0xda, 0x0a, 0x37, 0xe5, 0xf4, 0xb3, 0x8c, 0xa9, 0xe8, 0xdb, 0x50, 0x95, 0x3d, + 0x9b, 0x2f, 0x80, 0x3e, 0xeb, 0xeb, 0x05, 0x07, 0x0e, 0xa0, 0x9e, 0x3f, 0x0f, 0x91, 0xe9, 0x09, + 0xa0, 0x5d, 0x84, 0xa7, 0xf8, 0x8c, 0x64, 0x6a, 0xf9, 0x39, 0x34, 0x8f, 0x43, 0x16, 0x88, 0x30, + 0xde, 0xa3, 0xcc, 0xfb, 0x2c, 0xf0, 0xc4, 0x88, 0xac, 0x19, 0xca, 0x72, 0xea, 0x63, 0x41, 0x05, + 0x6f, 0xcf, 0x3f, 0x2a, 0x9d, 0x14, 0x0e, 0x61, 0x49, 0x6b, 0x9f, 0x17, 0xe2, 0xcc, 0xe8, 0x52, + 0xa6, 0x46, 0x42, 0x44, 0x59, 0xe0, 0xbe, 0x50, 0x75, 0x4e, 0x82, 0xdb, 0xdb, 0xf9, 0xf2, 0xd9, + 0x86, 0xf5, 0xd7, 0x67, 0x1b, 0xd6, 0x3f, 0x9e, 0x6d, 0x58, 0xbf, 0xff, 0xe7, 0xc6, 0x8d, 0x4f, + 0x5a, 0x29, 0xb7, 0x40, 0x77, 0xd4, 0x75, 0xc3, 0x18, 0xbb, 0xd9, 0x53, 0xe4, 0xe0, 0x96, 0x9a, + 0xed, 0x1e, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x7c, 0x2d, 0xa4, 0x9d, 0x14, 0x00, 0x00, } diff --git a/core/api/node/service.proto b/core/api/node/service.proto index e49f24799e..dd7bf5ba3b 100644 --- a/core/api/node/service.proto +++ b/core/api/node/service.proto @@ -180,6 +180,7 @@ message EventStreamInput { // message EventListInput { berty.p2p.Event filter = 1; + NullableTrueFalse only_without_acked_at = 2; Pagination paginate = 99 [(gql.graphql_spread) = true]; } message EventEdge { @@ -279,3 +280,9 @@ message IntegrationTestOutput { message Void { bool T = 1; } + +enum NullableTrueFalse { + Null = 0; + True = 1; + False = 2; +} diff --git a/core/go.mod b/core/go.mod index 31ac40998f..dc9c9b57d1 100644 --- a/core/go.mod +++ b/core/go.mod @@ -119,7 +119,7 @@ require ( github.com/uber-go/atomic v1.3.2 // indirect github.com/uber/jaeger-client-go v2.15.0+incompatible github.com/uber/jaeger-lib v1.5.0 // indirect - github.com/vektah/gqlparser v0.0.0-20181002002754-f119686bf1d4 + github.com/vektah/gqlparser v0.0.0-20181002002754-f119686bf1d4 // indirect github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc @@ -136,7 +136,6 @@ require ( go.uber.org/multierr v1.1.0 // indirect go.uber.org/zap v1.9.1 golang.org/x/crypto v0.0.0-20181015023909-0c41d7ab0a0e // indirect - golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1 golang.org/x/sys v0.0.0-20181011152604-fa43e7bc11ba // indirect google.golang.org/appengine v1.2.0 // indirect google.golang.org/genproto v0.0.0-20181004005441-af9cb2a35e7f // indirect diff --git a/core/node/nodeapi.go b/core/node/nodeapi.go index c6c62fac38..6d4ef6578c 100644 --- a/core/node/nodeapi.go +++ b/core/node/nodeapi.go @@ -30,6 +30,12 @@ func (n *Node) EventList(input *node.EventListInput, stream node.Service_EventLi // prepare query query := n.sql.Model(p2p.Event{}).Where(input.Filter) + if input.OnlyWithoutAckedAt == node.NullableTrueFalse_True { + query = query.Where("acked_at IS NULL") + } else if input.OnlyWithoutAckedAt == node.NullableTrueFalse_False { + query = query.Where("acked_at IS NOT NULL") + } + // pagination var err error query, err = paginate(query, input.Paginate)