@waku/core 0.0.34-9f1d8ca.0 → 0.0.34-a3e7f15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/bundle/base_protocol-Bp5a9PNG.js +152 -0
  2. package/bundle/{index-BIW3qNYx.js → index-G1eRBjeI.js} +118 -204
  3. package/bundle/index.js +1895 -178
  4. package/bundle/lib/base_protocol.js +2 -2
  5. package/bundle/lib/message/version_0.js +2 -2
  6. package/bundle/{version_0-CdmZMfkQ.js → version_0-DJZG2fB2.js} +283 -45
  7. package/dist/.tsbuildinfo +1 -1
  8. package/dist/index.d.ts +1 -3
  9. package/dist/index.js +1 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/lib/base_protocol.d.ts +3 -23
  12. package/dist/lib/base_protocol.js +3 -47
  13. package/dist/lib/base_protocol.js.map +1 -1
  14. package/dist/lib/connection_manager/connection_manager.d.ts +118 -0
  15. package/dist/lib/{connection_manager.js → connection_manager/connection_manager.js} +136 -36
  16. package/dist/lib/connection_manager/connection_manager.js.map +1 -0
  17. package/dist/lib/connection_manager/index.d.ts +1 -0
  18. package/dist/lib/connection_manager/index.js +2 -0
  19. package/dist/lib/connection_manager/index.js.map +1 -0
  20. package/dist/lib/{keep_alive_manager.d.ts → connection_manager/keep_alive_manager.d.ts} +4 -2
  21. package/dist/lib/{keep_alive_manager.js → connection_manager/keep_alive_manager.js} +2 -2
  22. package/dist/lib/connection_manager/keep_alive_manager.js.map +1 -0
  23. package/dist/lib/connection_manager/utils.d.ts +7 -0
  24. package/dist/lib/connection_manager/utils.js +22 -0
  25. package/dist/lib/connection_manager/utils.js.map +1 -0
  26. package/dist/lib/filter/filter.d.ts +18 -0
  27. package/dist/lib/filter/filter.js +209 -0
  28. package/dist/lib/filter/filter.js.map +1 -0
  29. package/dist/lib/filter/index.d.ts +1 -18
  30. package/dist/lib/filter/index.js +1 -208
  31. package/dist/lib/filter/index.js.map +1 -1
  32. package/dist/lib/light_push/index.d.ts +1 -15
  33. package/dist/lib/light_push/index.js +1 -143
  34. package/dist/lib/light_push/index.js.map +1 -1
  35. package/dist/lib/light_push/light_push.d.ts +15 -0
  36. package/dist/lib/light_push/light_push.js +144 -0
  37. package/dist/lib/light_push/light_push.js.map +1 -0
  38. package/dist/lib/light_push/utils.d.ts +0 -2
  39. package/dist/lib/light_push/utils.js +9 -17
  40. package/dist/lib/light_push/utils.js.map +1 -1
  41. package/dist/lib/metadata/index.d.ts +1 -3
  42. package/dist/lib/metadata/index.js +1 -118
  43. package/dist/lib/metadata/index.js.map +1 -1
  44. package/dist/lib/metadata/metadata.d.ts +3 -0
  45. package/dist/lib/metadata/metadata.js +119 -0
  46. package/dist/lib/metadata/metadata.js.map +1 -0
  47. package/dist/lib/store/index.d.ts +1 -9
  48. package/dist/lib/store/index.js +1 -82
  49. package/dist/lib/store/index.js.map +1 -1
  50. package/dist/lib/store/store.d.ts +9 -0
  51. package/dist/lib/store/store.js +83 -0
  52. package/dist/lib/store/store.js.map +1 -0
  53. package/dist/lib/stream_manager/stream_manager.d.ts +2 -2
  54. package/dist/lib/stream_manager/stream_manager.js +16 -17
  55. package/dist/lib/stream_manager/stream_manager.js.map +1 -1
  56. package/package.json +1 -1
  57. package/src/index.ts +1 -4
  58. package/src/lib/base_protocol.ts +3 -76
  59. package/src/lib/{connection_manager.ts → connection_manager/connection_manager.ts} +168 -63
  60. package/src/lib/connection_manager/index.ts +1 -0
  61. package/src/lib/{keep_alive_manager.ts → connection_manager/keep_alive_manager.ts} +7 -3
  62. package/src/lib/connection_manager/utils.ts +25 -0
  63. package/src/lib/filter/filter.ts +315 -0
  64. package/src/lib/filter/index.ts +1 -315
  65. package/src/lib/light_push/index.ts +1 -188
  66. package/src/lib/light_push/light_push.ts +188 -0
  67. package/src/lib/light_push/utils.ts +13 -21
  68. package/src/lib/metadata/index.ts +1 -182
  69. package/src/lib/metadata/metadata.ts +182 -0
  70. package/src/lib/store/index.ts +1 -136
  71. package/src/lib/store/store.ts +136 -0
  72. package/src/lib/stream_manager/stream_manager.ts +16 -18
  73. package/bundle/base_protocol-Dzv-QHPR.js +0 -275
  74. package/dist/lib/connection_manager.d.ts +0 -62
  75. package/dist/lib/connection_manager.js.map +0 -1
  76. package/dist/lib/filterPeers.d.ts +0 -13
  77. package/dist/lib/filterPeers.js +0 -38
  78. package/dist/lib/filterPeers.js.map +0 -1
  79. package/dist/lib/health_manager.d.ts +0 -14
  80. package/dist/lib/health_manager.js +0 -70
  81. package/dist/lib/health_manager.js.map +0 -1
  82. package/dist/lib/keep_alive_manager.js.map +0 -1
  83. package/src/lib/filterPeers.ts +0 -51
  84. package/src/lib/health_manager.ts +0 -90
@@ -0,0 +1,144 @@
1
+ import { ProtocolError } from "@waku/interfaces";
2
+ import { PushResponse } from "@waku/proto";
3
+ import { isMessageSizeUnderCap } from "@waku/utils";
4
+ import { Logger } from "@waku/utils";
5
+ import all from "it-all";
6
+ import * as lp from "it-length-prefixed";
7
+ import { pipe } from "it-pipe";
8
+ import { Uint8ArrayList } from "uint8arraylist";
9
+ import { BaseProtocol } from "../base_protocol.js";
10
+ import { PushRpc } from "./push_rpc.js";
11
+ import { isRLNResponseError } from "./utils.js";
12
+ const log = new Logger("light-push");
13
+ export const LightPushCodec = "/vac/waku/lightpush/2.0.0-beta1";
14
+ export { PushResponse };
15
+ /**
16
+ * Implements the [Waku v2 Light Push protocol](https://rfc.vac.dev/spec/19/).
17
+ */
18
+ export class LightPushCore extends BaseProtocol {
19
+ pubsubTopics;
20
+ constructor(pubsubTopics, libp2p) {
21
+ super(LightPushCodec, libp2p.components, pubsubTopics);
22
+ this.pubsubTopics = pubsubTopics;
23
+ }
24
+ async preparePushMessage(encoder, message) {
25
+ try {
26
+ if (!message.payload || message.payload.length === 0) {
27
+ log.error("Failed to send waku light push: payload is empty");
28
+ return { query: null, error: ProtocolError.EMPTY_PAYLOAD };
29
+ }
30
+ if (!(await isMessageSizeUnderCap(encoder, message))) {
31
+ log.error("Failed to send waku light push: message is bigger than 1MB");
32
+ return { query: null, error: ProtocolError.SIZE_TOO_BIG };
33
+ }
34
+ const protoMessage = await encoder.toProtoObj(message);
35
+ if (!protoMessage) {
36
+ log.error("Failed to encode to protoMessage, aborting push");
37
+ return {
38
+ query: null,
39
+ error: ProtocolError.ENCODE_FAILED
40
+ };
41
+ }
42
+ const query = PushRpc.createRequest(protoMessage, encoder.pubsubTopic);
43
+ return { query, error: null };
44
+ }
45
+ catch (error) {
46
+ log.error("Failed to prepare push message", error);
47
+ return {
48
+ query: null,
49
+ error: ProtocolError.GENERIC_FAIL
50
+ };
51
+ }
52
+ }
53
+ async send(encoder, message, peerId) {
54
+ const { query, error: preparationError } = await this.preparePushMessage(encoder, message);
55
+ if (preparationError || !query) {
56
+ return {
57
+ success: null,
58
+ failure: {
59
+ error: preparationError,
60
+ peerId
61
+ }
62
+ };
63
+ }
64
+ let stream;
65
+ try {
66
+ stream = await this.getStream(peerId);
67
+ }
68
+ catch (error) {
69
+ log.error("Failed to get stream", error);
70
+ return {
71
+ success: null,
72
+ failure: {
73
+ error: ProtocolError.NO_STREAM_AVAILABLE,
74
+ peerId: peerId
75
+ }
76
+ };
77
+ }
78
+ let res;
79
+ try {
80
+ res = await pipe([query.encode()], lp.encode, stream, lp.decode, async (source) => await all(source));
81
+ }
82
+ catch (err) {
83
+ // can fail only because of `stream` abortion
84
+ log.error("Failed to send waku light push request", err);
85
+ return {
86
+ success: null,
87
+ failure: {
88
+ error: ProtocolError.STREAM_ABORTED,
89
+ peerId: peerId
90
+ }
91
+ };
92
+ }
93
+ const bytes = new Uint8ArrayList();
94
+ res.forEach((chunk) => {
95
+ bytes.append(chunk);
96
+ });
97
+ let response;
98
+ try {
99
+ response = PushRpc.decode(bytes).response;
100
+ }
101
+ catch (err) {
102
+ log.error("Failed to decode push reply", err);
103
+ return {
104
+ success: null,
105
+ failure: {
106
+ error: ProtocolError.DECODE_FAILED,
107
+ peerId: peerId
108
+ }
109
+ };
110
+ }
111
+ if (!response) {
112
+ log.error("Remote peer fault: No response in PushRPC");
113
+ return {
114
+ success: null,
115
+ failure: {
116
+ error: ProtocolError.NO_RESPONSE,
117
+ peerId: peerId
118
+ }
119
+ };
120
+ }
121
+ if (isRLNResponseError(response.info)) {
122
+ log.error("Remote peer fault: RLN generation");
123
+ return {
124
+ success: null,
125
+ failure: {
126
+ error: ProtocolError.RLN_PROOF_GENERATION,
127
+ peerId: peerId
128
+ }
129
+ };
130
+ }
131
+ if (!response.isSuccess) {
132
+ log.error("Remote peer rejected the message: ", response.info);
133
+ return {
134
+ success: null,
135
+ failure: {
136
+ error: ProtocolError.REMOTE_PEER_REJECTED,
137
+ peerId: peerId
138
+ }
139
+ };
140
+ }
141
+ return { success: peerId, failure: null };
142
+ }
143
+ }
144
+ //# sourceMappingURL=light_push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light_push.js","sourceRoot":"","sources":["../../../src/lib/light_push/light_push.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1 @@
1
- import { ProtocolError } from "@waku/interfaces";
2
1
  export declare const isRLNResponseError: (info?: string) => boolean;
3
- export declare const matchRLNErrorMessage: (info: string) => ProtocolError;
@@ -1,26 +1,18 @@
1
- import { ProtocolError } from "@waku/interfaces";
2
1
  // should match nwaku
3
2
  // https://github.com/waku-org/nwaku/blob/c3cb06ac6c03f0f382d3941ea53b330f6a8dd127/waku/waku_rln_relay/rln_relay.nim#L309
4
3
  // https://github.com/waku-org/nwaku/blob/c3cb06ac6c03f0f382d3941ea53b330f6a8dd127/tests/waku_rln_relay/rln/waku_rln_relay_utils.nim#L20
5
- const RLN_GENERATION_PREFIX_ERROR = "could not generate rln-v2 proof";
4
+ const RLN_GENERATION_PREFIX_ERROR = "could not generate rln proof";
5
+ const RLN_MESSAGE_ID_PREFIX_ERROR = "could not get new message id to generate an rln proof";
6
+ // rare case on nwaku side
7
+ // https://github.com/waku-org/nwaku/blob/a4e92a3d02448fd708857b7b6cac2a7faa7eb4f9/waku/waku_lightpush/callbacks.nim#L49
8
+ // https://github.com/waku-org/nwaku/blob/a4e92a3d02448fd708857b7b6cac2a7faa7eb4f9/waku/node/waku_node.nim#L1117
9
+ const RLN_REMOTE_VALIDATION = "RLN validation failed";
6
10
  export const isRLNResponseError = (info) => {
7
11
  if (!info) {
8
12
  return false;
9
13
  }
10
- return info.includes(RLN_GENERATION_PREFIX_ERROR);
11
- };
12
- export const matchRLNErrorMessage = (info) => {
13
- const rlnErrorMap = {
14
- [ProtocolError.RLN_IDENTITY_MISSING]: ProtocolError.RLN_IDENTITY_MISSING,
15
- [ProtocolError.RLN_MEMBERSHIP_INDEX]: ProtocolError.RLN_MEMBERSHIP_INDEX,
16
- [ProtocolError.RLN_LIMIT_MISSING]: ProtocolError.RLN_LIMIT_MISSING
17
- };
18
- const infoLowerCase = info.toLowerCase();
19
- for (const errorKey in rlnErrorMap) {
20
- if (infoLowerCase.includes(errorKey.toLowerCase())) {
21
- return rlnErrorMap[errorKey];
22
- }
23
- }
24
- return ProtocolError.RLN_PROOF_GENERATION;
14
+ return (info.includes(RLN_GENERATION_PREFIX_ERROR) ||
15
+ info.includes(RLN_MESSAGE_ID_PREFIX_ERROR) ||
16
+ info.includes(RLN_REMOTE_VALIDATION));
25
17
  };
26
18
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/light_push/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAAqB;AACrB,yHAAyH;AACzH,wIAAwI;AACxI,MAAM,2BAA2B,GAAG,iCAAiC,CAAC;AAEtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAW,EAAE;IAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAiB,EAAE;IAClE,MAAM,WAAW,GAAqC;QACpD,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,aAAa,CAAC,oBAAoB;QACxE,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,aAAa,CAAC,oBAAoB;QACxE,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,aAAa,CAAC,iBAAiB;KACnE,CAAC;IAEF,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACzC,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACnD,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC,oBAAoB,CAAC;AAC5C,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/light_push/utils.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,yHAAyH;AACzH,wIAAwI;AACxI,MAAM,2BAA2B,GAAG,8BAA8B,CAAC;AACnE,MAAM,2BAA2B,GAC/B,uDAAuD,CAAC;AAE1D,0BAA0B;AAC1B,wHAAwH;AACxH,gHAAgH;AAChH,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAEtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAW,EAAE;IAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CACrC,CAAC;AACJ,CAAC,CAAC"}
@@ -1,3 +1 @@
1
- import { type IMetadata, type Libp2pComponents, PubsubTopic } from "@waku/interfaces";
2
- export declare const MetadataCodec = "/vac/waku/metadata/1.0.0";
3
- export declare function wakuMetadata(pubsubTopics: PubsubTopic[]): (components: Libp2pComponents) => IMetadata;
1
+ export { wakuMetadata, MetadataCodec } from "./metadata.js";
@@ -1,119 +1,2 @@
1
- import { ProtocolError } from "@waku/interfaces";
2
- import { proto_metadata } from "@waku/proto";
3
- import { encodeRelayShard, Logger, pubsubTopicsToShardInfo } from "@waku/utils";
4
- import all from "it-all";
5
- import * as lp from "it-length-prefixed";
6
- import { pipe } from "it-pipe";
7
- import { Uint8ArrayList } from "uint8arraylist";
8
- import { BaseProtocol } from "../base_protocol.js";
9
- const log = new Logger("metadata");
10
- export const MetadataCodec = "/vac/waku/metadata/1.0.0";
11
- class Metadata extends BaseProtocol {
12
- pubsubTopics;
13
- libp2pComponents;
14
- handshakesConfirmed = new Map();
15
- constructor(pubsubTopics, libp2p) {
16
- super(MetadataCodec, libp2p.components, log, pubsubTopics);
17
- this.pubsubTopics = pubsubTopics;
18
- this.libp2pComponents = libp2p;
19
- void libp2p.registrar.handle(MetadataCodec, (streamData) => {
20
- void this.onRequest(streamData);
21
- });
22
- }
23
- /**
24
- * Make a metadata query to a peer
25
- */
26
- async query(peerId) {
27
- const request = proto_metadata.WakuMetadataRequest.encode(pubsubTopicsToShardInfo(this.pubsubTopics));
28
- const peer = await this.libp2pComponents.peerStore.get(peerId);
29
- if (!peer) {
30
- return {
31
- shardInfo: null,
32
- error: ProtocolError.NO_PEER_AVAILABLE
33
- };
34
- }
35
- let stream;
36
- try {
37
- stream = await this.getStream(peer);
38
- }
39
- catch (error) {
40
- log.error("Failed to get stream", error);
41
- return {
42
- shardInfo: null,
43
- error: ProtocolError.NO_STREAM_AVAILABLE
44
- };
45
- }
46
- const encodedResponse = await pipe([request], lp.encode, stream, lp.decode, async (source) => await all(source));
47
- const { error, shardInfo } = this.decodeMetadataResponse(encodedResponse);
48
- if (error) {
49
- return {
50
- shardInfo: null,
51
- error
52
- };
53
- }
54
- await this.savePeerShardInfo(peerId, shardInfo);
55
- return {
56
- shardInfo,
57
- error: null
58
- };
59
- }
60
- async confirmOrAttemptHandshake(peerId) {
61
- const shardInfo = this.handshakesConfirmed.get(peerId.toString());
62
- if (shardInfo) {
63
- return {
64
- shardInfo,
65
- error: null
66
- };
67
- }
68
- return await this.query(peerId);
69
- }
70
- /**
71
- * Handle an incoming metadata request
72
- */
73
- async onRequest(streamData) {
74
- try {
75
- const { stream, connection } = streamData;
76
- const encodedShardInfo = proto_metadata.WakuMetadataResponse.encode(pubsubTopicsToShardInfo(this.pubsubTopics));
77
- const encodedResponse = await pipe([encodedShardInfo], lp.encode, stream, lp.decode, async (source) => await all(source));
78
- const { error, shardInfo } = this.decodeMetadataResponse(encodedResponse);
79
- if (error) {
80
- return;
81
- }
82
- await this.savePeerShardInfo(connection.remotePeer, shardInfo);
83
- }
84
- catch (error) {
85
- log.error("Error handling metadata request", error);
86
- }
87
- }
88
- decodeMetadataResponse(encodedResponse) {
89
- const bytes = new Uint8ArrayList();
90
- encodedResponse.forEach((chunk) => {
91
- bytes.append(chunk);
92
- });
93
- const response = proto_metadata.WakuMetadataResponse.decode(bytes);
94
- if (!response) {
95
- log.error("Error decoding metadata response");
96
- return {
97
- shardInfo: null,
98
- error: ProtocolError.DECODE_FAILED
99
- };
100
- }
101
- return {
102
- shardInfo: response,
103
- error: null
104
- };
105
- }
106
- async savePeerShardInfo(peerId, shardInfo) {
107
- // add or update the shardInfo to peer store
108
- await this.libp2pComponents.peerStore.merge(peerId, {
109
- metadata: {
110
- shardInfo: encodeRelayShard(shardInfo)
111
- }
112
- });
113
- this.handshakesConfirmed.set(peerId.toString(), shardInfo);
114
- }
115
- }
116
- export function wakuMetadata(pubsubTopics) {
117
- return (components) => new Metadata(pubsubTopics, components);
118
- }
1
+ export { wakuMetadata, MetadataCodec } from "./metadata.js";
119
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/metadata/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type IMetadata, type Libp2pComponents, PubsubTopic } from "@waku/interfaces";
2
+ export declare const MetadataCodec = "/vac/waku/metadata/1.0.0";
3
+ export declare function wakuMetadata(pubsubTopics: PubsubTopic[]): (components: Libp2pComponents) => IMetadata;
@@ -0,0 +1,119 @@
1
+ import { ProtocolError } from "@waku/interfaces";
2
+ import { proto_metadata } from "@waku/proto";
3
+ import { encodeRelayShard, Logger, pubsubTopicsToShardInfo } from "@waku/utils";
4
+ import all from "it-all";
5
+ import * as lp from "it-length-prefixed";
6
+ import { pipe } from "it-pipe";
7
+ import { Uint8ArrayList } from "uint8arraylist";
8
+ import { BaseProtocol } from "../base_protocol.js";
9
+ const log = new Logger("metadata");
10
+ export const MetadataCodec = "/vac/waku/metadata/1.0.0";
11
+ class Metadata extends BaseProtocol {
12
+ pubsubTopics;
13
+ libp2pComponents;
14
+ handshakesConfirmed = new Map();
15
+ constructor(pubsubTopics, libp2p) {
16
+ super(MetadataCodec, libp2p.components, pubsubTopics);
17
+ this.pubsubTopics = pubsubTopics;
18
+ this.libp2pComponents = libp2p;
19
+ void libp2p.registrar.handle(MetadataCodec, (streamData) => {
20
+ void this.onRequest(streamData);
21
+ });
22
+ }
23
+ /**
24
+ * Make a metadata query to a peer
25
+ */
26
+ async query(peerId) {
27
+ const request = proto_metadata.WakuMetadataRequest.encode(pubsubTopicsToShardInfo(this.pubsubTopics));
28
+ const peer = await this.libp2pComponents.peerStore.get(peerId);
29
+ if (!peer) {
30
+ return {
31
+ shardInfo: null,
32
+ error: ProtocolError.NO_PEER_AVAILABLE
33
+ };
34
+ }
35
+ let stream;
36
+ try {
37
+ stream = await this.getStream(peerId);
38
+ }
39
+ catch (error) {
40
+ log.error("Failed to get stream", error);
41
+ return {
42
+ shardInfo: null,
43
+ error: ProtocolError.NO_STREAM_AVAILABLE
44
+ };
45
+ }
46
+ const encodedResponse = await pipe([request], lp.encode, stream, lp.decode, async (source) => await all(source));
47
+ const { error, shardInfo } = this.decodeMetadataResponse(encodedResponse);
48
+ if (error) {
49
+ return {
50
+ shardInfo: null,
51
+ error
52
+ };
53
+ }
54
+ await this.savePeerShardInfo(peerId, shardInfo);
55
+ return {
56
+ shardInfo,
57
+ error: null
58
+ };
59
+ }
60
+ async confirmOrAttemptHandshake(peerId) {
61
+ const shardInfo = this.handshakesConfirmed.get(peerId.toString());
62
+ if (shardInfo) {
63
+ return {
64
+ shardInfo,
65
+ error: null
66
+ };
67
+ }
68
+ return await this.query(peerId);
69
+ }
70
+ /**
71
+ * Handle an incoming metadata request
72
+ */
73
+ async onRequest(streamData) {
74
+ try {
75
+ const { stream, connection } = streamData;
76
+ const encodedShardInfo = proto_metadata.WakuMetadataResponse.encode(pubsubTopicsToShardInfo(this.pubsubTopics));
77
+ const encodedResponse = await pipe([encodedShardInfo], lp.encode, stream, lp.decode, async (source) => await all(source));
78
+ const { error, shardInfo } = this.decodeMetadataResponse(encodedResponse);
79
+ if (error) {
80
+ return;
81
+ }
82
+ await this.savePeerShardInfo(connection.remotePeer, shardInfo);
83
+ }
84
+ catch (error) {
85
+ log.error("Error handling metadata request", error);
86
+ }
87
+ }
88
+ decodeMetadataResponse(encodedResponse) {
89
+ const bytes = new Uint8ArrayList();
90
+ encodedResponse.forEach((chunk) => {
91
+ bytes.append(chunk);
92
+ });
93
+ const response = proto_metadata.WakuMetadataResponse.decode(bytes);
94
+ if (!response) {
95
+ log.error("Error decoding metadata response");
96
+ return {
97
+ shardInfo: null,
98
+ error: ProtocolError.DECODE_FAILED
99
+ };
100
+ }
101
+ return {
102
+ shardInfo: response,
103
+ error: null
104
+ };
105
+ }
106
+ async savePeerShardInfo(peerId, shardInfo) {
107
+ // add or update the shardInfo to peer store
108
+ await this.libp2pComponents.peerStore.merge(peerId, {
109
+ metadata: {
110
+ shardInfo: encodeRelayShard(shardInfo)
111
+ }
112
+ });
113
+ this.handshakesConfirmed.set(peerId.toString(), shardInfo);
114
+ }
115
+ }
116
+ export function wakuMetadata(pubsubTopics) {
117
+ return (components) => new Metadata(pubsubTopics, components);
118
+ }
119
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/lib/metadata/metadata.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1 @@
1
- import type { Peer } from "@libp2p/interface";
2
- import { IDecodedMessage, IDecoder, IStoreCore, Libp2p, PubsubTopic, QueryRequestParams } from "@waku/interfaces";
3
- import { BaseProtocol } from "../base_protocol.js";
4
- export declare const StoreCodec = "/vac/waku/store-query/3.0.0";
5
- export declare class StoreCore extends BaseProtocol implements IStoreCore {
6
- readonly pubsubTopics: PubsubTopic[];
7
- constructor(pubsubTopics: PubsubTopic[], libp2p: Libp2p);
8
- queryPerPage<T extends IDecodedMessage>(queryOpts: QueryRequestParams, decoders: Map<string, IDecoder<T>>, peer: Peer): AsyncGenerator<Promise<T | undefined>[]>;
9
- }
1
+ export { StoreCore, StoreCodec } from "./store.js";
@@ -1,83 +1,2 @@
1
- import { Logger } from "@waku/utils";
2
- import all from "it-all";
3
- import * as lp from "it-length-prefixed";
4
- import { pipe } from "it-pipe";
5
- import { Uint8ArrayList } from "uint8arraylist";
6
- import { BaseProtocol } from "../base_protocol.js";
7
- import { toProtoMessage } from "../to_proto_message.js";
8
- import { DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE, StoreQueryRequest, StoreQueryResponse } from "./rpc.js";
9
- const log = new Logger("store");
10
- export const StoreCodec = "/vac/waku/store-query/3.0.0";
11
- export class StoreCore extends BaseProtocol {
12
- pubsubTopics;
13
- constructor(pubsubTopics, libp2p) {
14
- super(StoreCodec, libp2p.components, log, pubsubTopics);
15
- this.pubsubTopics = pubsubTopics;
16
- }
17
- async *queryPerPage(queryOpts, decoders, peer) {
18
- if (queryOpts.contentTopics.toString() !==
19
- Array.from(decoders.keys()).toString()) {
20
- throw new Error("Internal error, the decoders should match the query's content topics");
21
- }
22
- let currentCursor = queryOpts.paginationCursor;
23
- while (true) {
24
- const storeQueryRequest = StoreQueryRequest.create({
25
- ...queryOpts,
26
- paginationCursor: currentCursor
27
- });
28
- let stream;
29
- try {
30
- stream = await this.getStream(peer);
31
- }
32
- catch (e) {
33
- log.error("Failed to get stream", e);
34
- break;
35
- }
36
- const res = await pipe([storeQueryRequest.encode()], lp.encode, stream, lp.decode, async (source) => await all(source));
37
- const bytes = new Uint8ArrayList();
38
- res.forEach((chunk) => {
39
- bytes.append(chunk);
40
- });
41
- const storeQueryResponse = StoreQueryResponse.decode(bytes);
42
- if (!storeQueryResponse.statusCode ||
43
- storeQueryResponse.statusCode >= 300) {
44
- const errorMessage = `Store query failed with status code: ${storeQueryResponse.statusCode}, description: ${storeQueryResponse.statusDesc}`;
45
- log.error(errorMessage);
46
- throw new Error(errorMessage);
47
- }
48
- if (!storeQueryResponse.messages || !storeQueryResponse.messages.length) {
49
- log.warn("Stopping pagination due to empty messages in response");
50
- break;
51
- }
52
- log.info(`${storeQueryResponse.messages.length} messages retrieved from store`);
53
- const decodedMessages = storeQueryResponse.messages.map((protoMsg) => {
54
- if (!protoMsg.message) {
55
- return Promise.resolve(undefined);
56
- }
57
- const contentTopic = protoMsg.message.contentTopic;
58
- if (contentTopic) {
59
- const decoder = decoders.get(contentTopic);
60
- if (decoder) {
61
- return decoder.fromProtoObj(protoMsg.pubsubTopic || "", toProtoMessage(protoMsg.message));
62
- }
63
- }
64
- return Promise.resolve(undefined);
65
- });
66
- yield decodedMessages;
67
- if (queryOpts.paginationForward) {
68
- currentCursor =
69
- storeQueryResponse.messages[storeQueryResponse.messages.length - 1]
70
- .messageHash;
71
- }
72
- else {
73
- currentCursor = storeQueryResponse.messages[0].messageHash;
74
- }
75
- if (storeQueryResponse.messages.length > MAX_PAGE_SIZE &&
76
- storeQueryResponse.messages.length <
77
- (queryOpts.paginationLimit || DEFAULT_PAGE_SIZE)) {
78
- break;
79
- }
80
- }
81
- }
82
- }
1
+ export { StoreCore, StoreCodec } from "./store.js";
83
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/store/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { PeerId } from "@libp2p/interface";
2
+ import { IDecodedMessage, IDecoder, IStoreCore, Libp2p, PubsubTopic, QueryRequestParams } from "@waku/interfaces";
3
+ import { BaseProtocol } from "../base_protocol.js";
4
+ export declare const StoreCodec = "/vac/waku/store-query/3.0.0";
5
+ export declare class StoreCore extends BaseProtocol implements IStoreCore {
6
+ readonly pubsubTopics: PubsubTopic[];
7
+ constructor(pubsubTopics: PubsubTopic[], libp2p: Libp2p);
8
+ queryPerPage<T extends IDecodedMessage>(queryOpts: QueryRequestParams, decoders: Map<string, IDecoder<T>>, peerId: PeerId): AsyncGenerator<Promise<T | undefined>[]>;
9
+ }