Merge pull request #237 from status-im/nim-waku-v0.5

This commit is contained in:
Franck Royer 2021-07-26 14:30:51 +10:00 committed by GitHub
commit 4a85e62c80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 109 additions and 11 deletions

View File

@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
### Changed
- **Breaking**: Store Response Protobuf change to align with nim-waku v0.5
([nim-waku#676](https://github.com/status-im/nim-waku/pull/676)).
## [0.8.1] - 2021-07-16 ## [0.8.1] - 2021-07-16
### Added ### Added

@ -1 +1 @@
Subproject commit 5c58a19f4f50e207dcfbf34f4514cc7e88c709e5 Subproject commit e2c0141edc40002960303d95af79b30e6fdbffa4

View File

@ -7,6 +7,7 @@ import "waku/v2/message.proto";
message Index { message Index {
bytes digest = 1; bytes digest = 1;
double received_time = 2; double received_time = 2;
double sender_time = 3;
} }
message PagingInfo { message PagingInfo {
@ -32,8 +33,13 @@ message HistoryQuery {
} }
message HistoryResponse { message HistoryResponse {
repeated WakuMessage messages = 1; repeated WakuMessage messages = 2;
PagingInfo paging_info = 2; PagingInfo paging_info = 3;
enum Error {
ERROR_NONE_UNSPECIFIED = 0;
ERROR_INVALID_CURSOR = 1;
}
Error error = 4;
} }
message HistoryRPC { message HistoryRPC {

View File

@ -29,7 +29,7 @@ describe('Waku Dial', function () {
expect(nimPeers).to.deep.equal([ expect(nimPeers).to.deep.equal([
{ {
multiaddr: multiAddrWithId, multiaddr: multiAddrWithId,
protocol: '/vac/waku/relay/2.0.0-beta2', protocol: '/vac/waku/relay/2.0.0',
connected: true, connected: true,
}, },
]); ]);

View File

@ -72,7 +72,7 @@ describe('Waku Relay', () => {
it('Register correct protocols', async function () { it('Register correct protocols', async function () {
const protocols = Array.from(waku1.libp2p.upgrader.protocols.keys()); const protocols = Array.from(waku1.libp2p.upgrader.protocols.keys());
expect(protocols).to.contain('/vac/waku/relay/2.0.0-beta2'); expect(protocols).to.contain('/vac/waku/relay/2.0.0');
expect(protocols.findIndex((value) => value.match(/sub/))).to.eq(-1); expect(protocols.findIndex((value) => value.match(/sub/))).to.eq(-1);
}); });

View File

@ -6,6 +6,7 @@ import Libp2p from 'libp2p';
import { Peer } from 'libp2p/src/peer-store'; import { Peer } from 'libp2p/src/peer-store';
import PeerId from 'peer-id'; import PeerId from 'peer-id';
import { HistoryResponse_Error } from '../../proto/waku/v2/store';
import { getPeersForProtocol, selectRandomPeer } from '../select_peer'; import { getPeersForProtocol, selectRandomPeer } from '../select_peer';
import { WakuMessage } from '../waku_message'; import { WakuMessage } from '../waku_message';
import { DefaultPubsubTopic } from '../waku_relay'; import { DefaultPubsubTopic } from '../waku_relay';
@ -117,6 +118,14 @@ export class WakuStore {
return null; return null;
} }
if (
response.error &&
response.error === HistoryResponse_Error.ERROR_INVALID_CURSOR
) {
console.log('Error in response: INVALID CURSOR');
return null;
}
if (!response.messages || !response.messages.length) { if (!response.messages || !response.messages.length) {
// No messages left (or stored) // No messages left (or stored)
console.log('No messages present in HistoryRPC response'); console.log('No messages present in HistoryRPC response');

View File

@ -8,6 +8,7 @@ export const protobufPackage = 'waku.v2';
export interface Index { export interface Index {
digest: Uint8Array; digest: Uint8Array;
receivedTime: number; receivedTime: number;
senderTime: number;
} }
export interface PagingInfo { export interface PagingInfo {
@ -67,6 +68,43 @@ export interface HistoryQuery {
export interface HistoryResponse { export interface HistoryResponse {
messages: WakuMessage[]; messages: WakuMessage[];
pagingInfo: PagingInfo | undefined; pagingInfo: PagingInfo | undefined;
error: HistoryResponse_Error;
}
export enum HistoryResponse_Error {
ERROR_NONE_UNSPECIFIED = 0,
ERROR_INVALID_CURSOR = 1,
UNRECOGNIZED = -1,
}
export function historyResponse_ErrorFromJSON(
object: any
): HistoryResponse_Error {
switch (object) {
case 0:
case 'ERROR_NONE_UNSPECIFIED':
return HistoryResponse_Error.ERROR_NONE_UNSPECIFIED;
case 1:
case 'ERROR_INVALID_CURSOR':
return HistoryResponse_Error.ERROR_INVALID_CURSOR;
case -1:
case 'UNRECOGNIZED':
default:
return HistoryResponse_Error.UNRECOGNIZED;
}
}
export function historyResponse_ErrorToJSON(
object: HistoryResponse_Error
): string {
switch (object) {
case HistoryResponse_Error.ERROR_NONE_UNSPECIFIED:
return 'ERROR_NONE_UNSPECIFIED';
case HistoryResponse_Error.ERROR_INVALID_CURSOR:
return 'ERROR_INVALID_CURSOR';
default:
return 'UNKNOWN';
}
} }
export interface HistoryRPC { export interface HistoryRPC {
@ -75,7 +113,7 @@ export interface HistoryRPC {
response: HistoryResponse | undefined; response: HistoryResponse | undefined;
} }
const baseIndex: object = { receivedTime: 0 }; const baseIndex: object = { receivedTime: 0, senderTime: 0 };
export const Index = { export const Index = {
encode(message: Index, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { encode(message: Index, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
@ -85,6 +123,9 @@ export const Index = {
if (message.receivedTime !== 0) { if (message.receivedTime !== 0) {
writer.uint32(17).double(message.receivedTime); writer.uint32(17).double(message.receivedTime);
} }
if (message.senderTime !== 0) {
writer.uint32(25).double(message.senderTime);
}
return writer; return writer;
}, },
@ -102,6 +143,9 @@ export const Index = {
case 2: case 2:
message.receivedTime = reader.double(); message.receivedTime = reader.double();
break; break;
case 3:
message.senderTime = reader.double();
break;
default: default:
reader.skipType(tag & 7); reader.skipType(tag & 7);
break; break;
@ -121,6 +165,11 @@ export const Index = {
} else { } else {
message.receivedTime = 0; message.receivedTime = 0;
} }
if (object.senderTime !== undefined && object.senderTime !== null) {
message.senderTime = Number(object.senderTime);
} else {
message.senderTime = 0;
}
return message; return message;
}, },
@ -132,6 +181,7 @@ export const Index = {
)); ));
message.receivedTime !== undefined && message.receivedTime !== undefined &&
(obj.receivedTime = message.receivedTime); (obj.receivedTime = message.receivedTime);
message.senderTime !== undefined && (obj.senderTime = message.senderTime);
return obj; return obj;
}, },
@ -147,6 +197,11 @@ export const Index = {
} else { } else {
message.receivedTime = 0; message.receivedTime = 0;
} }
if (object.senderTime !== undefined && object.senderTime !== null) {
message.senderTime = object.senderTime;
} else {
message.senderTime = 0;
}
return message; return message;
}, },
}; };
@ -445,7 +500,7 @@ export const HistoryQuery = {
}, },
}; };
const baseHistoryResponse: object = {}; const baseHistoryResponse: object = { error: 0 };
export const HistoryResponse = { export const HistoryResponse = {
encode( encode(
@ -453,10 +508,13 @@ export const HistoryResponse = {
writer: _m0.Writer = _m0.Writer.create() writer: _m0.Writer = _m0.Writer.create()
): _m0.Writer { ): _m0.Writer {
for (const v of message.messages) { for (const v of message.messages) {
WakuMessage.encode(v!, writer.uint32(10).fork()).ldelim(); WakuMessage.encode(v!, writer.uint32(18).fork()).ldelim();
} }
if (message.pagingInfo !== undefined) { if (message.pagingInfo !== undefined) {
PagingInfo.encode(message.pagingInfo, writer.uint32(18).fork()).ldelim(); PagingInfo.encode(message.pagingInfo, writer.uint32(26).fork()).ldelim();
}
if (message.error !== 0) {
writer.uint32(32).int32(message.error);
} }
return writer; return writer;
}, },
@ -469,12 +527,15 @@ export const HistoryResponse = {
while (reader.pos < end) { while (reader.pos < end) {
const tag = reader.uint32(); const tag = reader.uint32();
switch (tag >>> 3) { switch (tag >>> 3) {
case 1: case 2:
message.messages.push(WakuMessage.decode(reader, reader.uint32())); message.messages.push(WakuMessage.decode(reader, reader.uint32()));
break; break;
case 2: case 3:
message.pagingInfo = PagingInfo.decode(reader, reader.uint32()); message.pagingInfo = PagingInfo.decode(reader, reader.uint32());
break; break;
case 4:
message.error = reader.int32() as any;
break;
default: default:
reader.skipType(tag & 7); reader.skipType(tag & 7);
break; break;
@ -496,6 +557,11 @@ export const HistoryResponse = {
} else { } else {
message.pagingInfo = undefined; message.pagingInfo = undefined;
} }
if (object.error !== undefined && object.error !== null) {
message.error = historyResponse_ErrorFromJSON(object.error);
} else {
message.error = 0;
}
return message; return message;
}, },
@ -512,6 +578,8 @@ export const HistoryResponse = {
(obj.pagingInfo = message.pagingInfo (obj.pagingInfo = message.pagingInfo
? PagingInfo.toJSON(message.pagingInfo) ? PagingInfo.toJSON(message.pagingInfo)
: undefined); : undefined);
message.error !== undefined &&
(obj.error = historyResponse_ErrorToJSON(message.error));
return obj; return obj;
}, },
@ -528,6 +596,11 @@ export const HistoryResponse = {
} else { } else {
message.pagingInfo = undefined; message.pagingInfo = undefined;
} }
if (object.error !== undefined && object.error !== null) {
message.error = object.error;
} else {
message.error = 0;
}
return message; return message;
}, },
}; };

View File

@ -63,6 +63,7 @@ export interface KeyPair {
export interface WakuRelayMessage { export interface WakuRelayMessage {
payload: string; payload: string;
contentTopic?: string; contentTopic?: string;
timestamp?: number; // Float in seconds
} }
export class NimWaku { export class NimWaku {
@ -177,10 +178,15 @@ export class NimWaku {
if (!message.payload) { if (!message.payload) {
throw 'Attempting to send empty message'; throw 'Attempting to send empty message';
} }
let timestamp;
if (message.timestamp) {
timestamp = message.timestamp.valueOf() / 1000;
}
const rpcMessage = { const rpcMessage = {
payload: bufToHex(message.payload), payload: bufToHex(message.payload),
contentTopic: message.contentTopic, contentTopic: message.contentTopic,
timestamp,
}; };
return this.rpcCall<boolean>('post_waku_v2_relay_v1_message', [ return this.rpcCall<boolean>('post_waku_v2_relay_v1_message', [