@waku/core 0.0.1

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 (235) hide show
  1. package/CHANGELOG.md +614 -0
  2. package/README.md +56 -0
  3. package/bundle/browser-1e1a2f27.js +722 -0
  4. package/bundle/crypto-8551d579.js +2585 -0
  5. package/bundle/crypto-b00764b7.js +1772 -0
  6. package/bundle/enr-564d4a51.js +20785 -0
  7. package/bundle/enr-9fc5eed8.js +20786 -0
  8. package/bundle/enr-f6e82a53.js +20785 -0
  9. package/bundle/events-158407bb.js +1929 -0
  10. package/bundle/events-fcbda4dc.js +76 -0
  11. package/bundle/index-02d21809.js +20 -0
  12. package/bundle/index-0a4bdddc.js +2976 -0
  13. package/bundle/index-2ae915be.js +1854 -0
  14. package/bundle/index-64ce43f0.js +69 -0
  15. package/bundle/index-691c0be6.js +4059 -0
  16. package/bundle/index-a013a259.js +20 -0
  17. package/bundle/index-ba42b4fc.js +862 -0
  18. package/bundle/index.js +13428 -0
  19. package/bundle/lib/enr.js +8 -0
  20. package/bundle/lib/peer_discovery_dns.js +5018 -0
  21. package/bundle/lib/peer_discovery_static_list.js +75 -0
  22. package/bundle/lib/predefined_bootstrap_nodes.js +59 -0
  23. package/bundle/lib/utils.js +1 -0
  24. package/bundle/lib/wait_for_remote_peer.js +327 -0
  25. package/bundle/lib/waku_message/topic_only_message.js +4 -0
  26. package/bundle/lib/waku_message/version_0.js +4 -0
  27. package/bundle/lib/waku_message/version_1.js +463 -0
  28. package/bundle/message-e2db79d7.js +8393 -0
  29. package/bundle/multiaddr_to_peer_info-c406b1e1.js +19 -0
  30. package/bundle/multiaddr_to_peer_info-fd1de516.js +19 -0
  31. package/bundle/random_subset-75d1c511.js +26 -0
  32. package/bundle/topic_only_message-34f36fa6.js +82 -0
  33. package/bundle/utils-9a3221f2.js +815 -0
  34. package/bundle/version_0-e6fe440c.js +317 -0
  35. package/dist/index.d.ts +16 -0
  36. package/dist/index.js +17 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/lib/constants.d.ts +4 -0
  39. package/dist/lib/constants.js +5 -0
  40. package/dist/lib/constants.js.map +1 -0
  41. package/dist/lib/crypto.d.ts +34 -0
  42. package/dist/lib/crypto.js +79 -0
  43. package/dist/lib/crypto.js.map +1 -0
  44. package/dist/lib/enr/constants.d.ts +4 -0
  45. package/dist/lib/enr/constants.js +8 -0
  46. package/dist/lib/enr/constants.js.map +1 -0
  47. package/dist/lib/enr/enr.d.ts +90 -0
  48. package/dist/lib/enr/enr.js +432 -0
  49. package/dist/lib/enr/enr.js.map +1 -0
  50. package/dist/lib/enr/index.d.ts +5 -0
  51. package/dist/lib/enr/index.js +6 -0
  52. package/dist/lib/enr/index.js.map +1 -0
  53. package/dist/lib/enr/keypair/index.d.ts +8 -0
  54. package/dist/lib/enr/keypair/index.js +53 -0
  55. package/dist/lib/enr/keypair/index.js.map +1 -0
  56. package/dist/lib/enr/keypair/secp256k1.d.ts +13 -0
  57. package/dist/lib/enr/keypair/secp256k1.js +57 -0
  58. package/dist/lib/enr/keypair/secp256k1.js.map +1 -0
  59. package/dist/lib/enr/keypair/types.d.ts +13 -0
  60. package/dist/lib/enr/keypair/types.js +7 -0
  61. package/dist/lib/enr/keypair/types.js.map +1 -0
  62. package/dist/lib/enr/multiaddr_from_fields.d.ts +2 -0
  63. package/dist/lib/enr/multiaddr_from_fields.js +8 -0
  64. package/dist/lib/enr/multiaddr_from_fields.js.map +1 -0
  65. package/dist/lib/enr/multiaddrs_codec.d.ts +3 -0
  66. package/dist/lib/enr/multiaddrs_codec.js +32 -0
  67. package/dist/lib/enr/multiaddrs_codec.js.map +1 -0
  68. package/dist/lib/enr/types.d.ts +8 -0
  69. package/dist/lib/enr/types.js +3 -0
  70. package/dist/lib/enr/types.js.map +1 -0
  71. package/dist/lib/enr/v4.d.ts +3 -0
  72. package/dist/lib/enr/v4.js +14 -0
  73. package/dist/lib/enr/v4.js.map +1 -0
  74. package/dist/lib/enr/waku2_codec.d.ts +8 -0
  75. package/dist/lib/enr/waku2_codec.js +36 -0
  76. package/dist/lib/enr/waku2_codec.js.map +1 -0
  77. package/dist/lib/group_by.d.ts +3 -0
  78. package/dist/lib/group_by.js +13 -0
  79. package/dist/lib/group_by.js.map +1 -0
  80. package/dist/lib/multiaddr_to_peer_info.d.ts +3 -0
  81. package/dist/lib/multiaddr_to_peer_info.js +15 -0
  82. package/dist/lib/multiaddr_to_peer_info.js.map +1 -0
  83. package/dist/lib/peer_discovery_dns/dns.d.ts +48 -0
  84. package/dist/lib/peer_discovery_dns/dns.js +158 -0
  85. package/dist/lib/peer_discovery_dns/dns.js.map +1 -0
  86. package/dist/lib/peer_discovery_dns/dns_over_https.d.ts +32 -0
  87. package/dist/lib/peer_discovery_dns/dns_over_https.js +87 -0
  88. package/dist/lib/peer_discovery_dns/dns_over_https.js.map +1 -0
  89. package/dist/lib/peer_discovery_dns/enrtree.d.ts +33 -0
  90. package/dist/lib/peer_discovery_dns/enrtree.js +76 -0
  91. package/dist/lib/peer_discovery_dns/enrtree.js.map +1 -0
  92. package/dist/lib/peer_discovery_dns/fetch_nodes.d.ts +14 -0
  93. package/dist/lib/peer_discovery_dns/fetch_nodes.js +133 -0
  94. package/dist/lib/peer_discovery_dns/fetch_nodes.js.map +1 -0
  95. package/dist/lib/peer_discovery_dns/index.d.ts +30 -0
  96. package/dist/lib/peer_discovery_dns/index.js +54 -0
  97. package/dist/lib/peer_discovery_dns/index.js.map +1 -0
  98. package/dist/lib/peer_discovery_static_list.d.ts +44 -0
  99. package/dist/lib/peer_discovery_static_list.js +72 -0
  100. package/dist/lib/peer_discovery_static_list.js.map +1 -0
  101. package/dist/lib/predefined_bootstrap_nodes.d.ts +35 -0
  102. package/dist/lib/predefined_bootstrap_nodes.js +56 -0
  103. package/dist/lib/predefined_bootstrap_nodes.js.map +1 -0
  104. package/dist/lib/push_or_init_map.d.ts +1 -0
  105. package/dist/lib/push_or_init_map.js +9 -0
  106. package/dist/lib/push_or_init_map.js.map +1 -0
  107. package/dist/lib/random_subset.d.ts +4 -0
  108. package/dist/lib/random_subset.js +25 -0
  109. package/dist/lib/random_subset.js.map +1 -0
  110. package/dist/lib/select_connection.d.ts +2 -0
  111. package/dist/lib/select_connection.js +19 -0
  112. package/dist/lib/select_connection.js.map +1 -0
  113. package/dist/lib/select_peer.d.ts +15 -0
  114. package/dist/lib/select_peer.js +59 -0
  115. package/dist/lib/select_peer.js.map +1 -0
  116. package/dist/lib/to_proto_message.d.ts +3 -0
  117. package/dist/lib/to_proto_message.js +11 -0
  118. package/dist/lib/to_proto_message.js.map +1 -0
  119. package/dist/lib/utils.d.ts +22 -0
  120. package/dist/lib/utils.js +40 -0
  121. package/dist/lib/utils.js.map +1 -0
  122. package/dist/lib/wait_for_remote_peer.d.ts +22 -0
  123. package/dist/lib/wait_for_remote_peer.js +113 -0
  124. package/dist/lib/wait_for_remote_peer.js.map +1 -0
  125. package/dist/lib/waku.d.ts +61 -0
  126. package/dist/lib/waku.js +174 -0
  127. package/dist/lib/waku.js.map +1 -0
  128. package/dist/lib/waku_filter/filter_rpc.d.ts +25 -0
  129. package/dist/lib/waku_filter/filter_rpc.js +44 -0
  130. package/dist/lib/waku_filter/filter_rpc.js.map +1 -0
  131. package/dist/lib/waku_filter/index.d.ts +50 -0
  132. package/dist/lib/waku_filter/index.js +181 -0
  133. package/dist/lib/waku_filter/index.js.map +1 -0
  134. package/dist/lib/waku_light_push/index.d.ts +38 -0
  135. package/dist/lib/waku_light_push/index.js +83 -0
  136. package/dist/lib/waku_light_push/index.js.map +1 -0
  137. package/dist/lib/waku_light_push/push_rpc.d.ts +11 -0
  138. package/dist/lib/waku_light_push/push_rpc.js +31 -0
  139. package/dist/lib/waku_light_push/push_rpc.js.map +1 -0
  140. package/dist/lib/waku_message/constants.d.ts +12 -0
  141. package/dist/lib/waku_message/constants.js +10 -0
  142. package/dist/lib/waku_message/constants.js.map +1 -0
  143. package/dist/lib/waku_message/ecies.d.ts +17 -0
  144. package/dist/lib/waku_message/ecies.js +126 -0
  145. package/dist/lib/waku_message/ecies.js.map +1 -0
  146. package/dist/lib/waku_message/symmetric.d.ts +3 -0
  147. package/dist/lib/waku_message/symmetric.js +18 -0
  148. package/dist/lib/waku_message/symmetric.js.map +1 -0
  149. package/dist/lib/waku_message/topic_only_message.d.ts +15 -0
  150. package/dist/lib/waku_message/topic_only_message.js +31 -0
  151. package/dist/lib/waku_message/topic_only_message.js.map +1 -0
  152. package/dist/lib/waku_message/version_0.d.ts +26 -0
  153. package/dist/lib/waku_message/version_0.js +96 -0
  154. package/dist/lib/waku_message/version_0.js.map +1 -0
  155. package/dist/lib/waku_message/version_1.d.ts +93 -0
  156. package/dist/lib/waku_message/version_1.js +325 -0
  157. package/dist/lib/waku_message/version_1.js.map +1 -0
  158. package/dist/lib/waku_relay/constants.d.ts +63 -0
  159. package/dist/lib/waku_relay/constants.js +67 -0
  160. package/dist/lib/waku_relay/constants.js.map +1 -0
  161. package/dist/lib/waku_relay/index.d.ts +65 -0
  162. package/dist/lib/waku_relay/index.js +111 -0
  163. package/dist/lib/waku_relay/index.js.map +1 -0
  164. package/dist/lib/waku_store/history_rpc.d.ts +27 -0
  165. package/dist/lib/waku_store/history_rpc.js +71 -0
  166. package/dist/lib/waku_store/history_rpc.js.map +1 -0
  167. package/dist/lib/waku_store/index.d.ts +126 -0
  168. package/dist/lib/waku_store/index.js +218 -0
  169. package/dist/lib/waku_store/index.js.map +1 -0
  170. package/dist/proto/filter.d.ts +65 -0
  171. package/dist/proto/filter.js +425 -0
  172. package/dist/proto/filter.js.map +1 -0
  173. package/dist/proto/light_push.d.ts +57 -0
  174. package/dist/proto/light_push.js +369 -0
  175. package/dist/proto/light_push.js.map +1 -0
  176. package/dist/proto/message.d.ts +29 -0
  177. package/dist/proto/message.js +215 -0
  178. package/dist/proto/message.js.map +1 -0
  179. package/dist/proto/store.d.ts +104 -0
  180. package/dist/proto/store.js +602 -0
  181. package/dist/proto/store.js.map +1 -0
  182. package/dist/proto/topic_only_message.d.ts +10 -0
  183. package/dist/proto/topic_only_message.js +46 -0
  184. package/dist/proto/topic_only_message.js.map +1 -0
  185. package/package.json +292 -0
  186. package/src/index.ts +33 -0
  187. package/src/lib/constants.ts +4 -0
  188. package/src/lib/crypto.ts +100 -0
  189. package/src/lib/enr/constants.ts +10 -0
  190. package/src/lib/enr/enr.ts +516 -0
  191. package/src/lib/enr/index.ts +5 -0
  192. package/src/lib/enr/keypair/index.ts +76 -0
  193. package/src/lib/enr/keypair/secp256k1.ts +69 -0
  194. package/src/lib/enr/keypair/types.ts +14 -0
  195. package/src/lib/enr/multiaddr_from_fields.ts +18 -0
  196. package/src/lib/enr/multiaddrs_codec.ts +50 -0
  197. package/src/lib/enr/types.ts +11 -0
  198. package/src/lib/enr/v4.ts +22 -0
  199. package/src/lib/enr/waku2_codec.ts +39 -0
  200. package/src/lib/group_by.ts +14 -0
  201. package/src/lib/multiaddr_to_peer_info.ts +17 -0
  202. package/src/lib/peer_discovery_dns/dns.ts +223 -0
  203. package/src/lib/peer_discovery_dns/dns_over_https.ts +98 -0
  204. package/src/lib/peer_discovery_dns/enrtree.ts +123 -0
  205. package/src/lib/peer_discovery_dns/fetch_nodes.ts +180 -0
  206. package/src/lib/peer_discovery_dns/index.ts +84 -0
  207. package/src/lib/peer_discovery_static_list.ts +118 -0
  208. package/src/lib/predefined_bootstrap_nodes.ts +72 -0
  209. package/src/lib/push_or_init_map.ts +13 -0
  210. package/src/lib/random_subset.ts +30 -0
  211. package/src/lib/select_connection.ts +24 -0
  212. package/src/lib/select_peer.ts +77 -0
  213. package/src/lib/to_proto_message.ts +15 -0
  214. package/src/lib/utils.ts +50 -0
  215. package/src/lib/wait_for_remote_peer.ts +151 -0
  216. package/src/lib/waku.ts +258 -0
  217. package/src/lib/waku_filter/filter_rpc.ts +57 -0
  218. package/src/lib/waku_filter/index.ts +291 -0
  219. package/src/lib/waku_light_push/index.ts +137 -0
  220. package/src/lib/waku_light_push/push_rpc.ts +39 -0
  221. package/src/lib/waku_message/constants.ts +10 -0
  222. package/src/lib/waku_message/ecies.ts +194 -0
  223. package/src/lib/waku_message/symmetric.ts +33 -0
  224. package/src/lib/waku_message/topic_only_message.ts +40 -0
  225. package/src/lib/waku_message/version_0.ts +121 -0
  226. package/src/lib/waku_message/version_1.ts +457 -0
  227. package/src/lib/waku_relay/constants.ts +77 -0
  228. package/src/lib/waku_relay/index.ts +189 -0
  229. package/src/lib/waku_store/history_rpc.ts +94 -0
  230. package/src/lib/waku_store/index.ts +372 -0
  231. package/src/proto/filter.ts +602 -0
  232. package/src/proto/light_push.ts +526 -0
  233. package/src/proto/message.ts +304 -0
  234. package/src/proto/store.ts +844 -0
  235. package/src/proto/topic_only_message.ts +67 -0
@@ -0,0 +1,181 @@
1
+ import debug from "debug";
2
+ import all from "it-all";
3
+ import * as lp from "it-length-prefixed";
4
+ import { pipe } from "it-pipe";
5
+ import { DefaultPubSubTopic } from "../constants.js";
6
+ import { groupByContentTopic } from "../group_by.js";
7
+ import { selectConnection } from "../select_connection.js";
8
+ import { getPeersForProtocol, selectPeerForProtocol, selectRandomPeer, } from "../select_peer.js";
9
+ import { toProtoMessage } from "../to_proto_message.js";
10
+ import { FilterRPC } from "./filter_rpc.js";
11
+ export const FilterCodec = "/vac/waku/filter/2.0.0-beta1";
12
+ const log = debug("waku:filter");
13
+ /**
14
+ * Implements client side of the [Waku v2 Filter protocol](https://rfc.vac.dev/spec/12/).
15
+ *
16
+ * Note this currently only works in NodeJS when the Waku node is listening on a port, see:
17
+ * - https://github.com/status-im/go-waku/issues/245
18
+ * - https://github.com/status-im/nwaku/issues/948
19
+ */
20
+ export class WakuFilter {
21
+ constructor(libp2p, options) {
22
+ this.libp2p = libp2p;
23
+ this.subscriptions = new Map();
24
+ this.decoders = new Map();
25
+ this.pubSubTopic = options?.pubSubTopic ?? DefaultPubSubTopic;
26
+ this.libp2p
27
+ .handle(FilterCodec, this.onRequest.bind(this))
28
+ .catch((e) => log("Failed to register filter protocol", e));
29
+ }
30
+ /**
31
+ * @param decoders Array of Decoders to use to decode messages, it also specifies the content topics.
32
+ * @param callback A function that will be called on each message returned by the filter.
33
+ * @param opts The FilterSubscriptionOpts used to narrow which messages are returned, and which peer to connect to.
34
+ * @returns Unsubscribe function that can be used to end the subscription.
35
+ */
36
+ async subscribe(decoders, callback, opts) {
37
+ const topic = opts?.pubSubTopic ?? this.pubSubTopic;
38
+ const groupedDecoders = groupByContentTopic(decoders);
39
+ const contentTopics = Array.from(groupedDecoders.keys());
40
+ const contentFilters = contentTopics.map((contentTopic) => ({
41
+ contentTopic,
42
+ }));
43
+ const request = FilterRPC.createRequest(topic, contentFilters, undefined, true);
44
+ const requestId = request.requestId;
45
+ if (!requestId)
46
+ throw new Error("Internal error: createRequest expected to set `requestId`");
47
+ const peer = await this.getPeer(opts?.peerId);
48
+ const stream = await this.newStream(peer);
49
+ try {
50
+ const res = await pipe([request.encode()], lp.encode(), stream, lp.decode(), async (source) => await all(source));
51
+ log("response", res);
52
+ }
53
+ catch (e) {
54
+ log("Error subscribing to peer ", peer.id.toString(), "for content topics", contentTopics, ": ", e);
55
+ throw e;
56
+ }
57
+ this.addDecoders(groupedDecoders);
58
+ this.addCallback(requestId, callback);
59
+ return async () => {
60
+ await this.unsubscribe(topic, contentFilters, requestId, peer);
61
+ this.deleteDecoders(groupedDecoders);
62
+ this.deleteCallback(requestId);
63
+ };
64
+ }
65
+ onRequest(streamData) {
66
+ log("Receiving message push");
67
+ try {
68
+ pipe(streamData.stream, lp.decode(), async (source) => {
69
+ for await (const bytes of source) {
70
+ const res = FilterRPC.decode(bytes.slice());
71
+ if (res.requestId && res.push?.messages?.length) {
72
+ await this.pushMessages(res.requestId, res.push.messages);
73
+ }
74
+ }
75
+ }).then(() => {
76
+ log("Receiving pipe closed.");
77
+ }, (e) => {
78
+ log("Error with receiving pipe", e);
79
+ });
80
+ }
81
+ catch (e) {
82
+ log("Error decoding message", e);
83
+ }
84
+ }
85
+ async pushMessages(requestId, messages) {
86
+ const callback = this.subscriptions.get(requestId);
87
+ if (!callback) {
88
+ log(`No callback registered for request ID ${requestId}`);
89
+ return;
90
+ }
91
+ for (const protoMessage of messages) {
92
+ const contentTopic = protoMessage.contentTopic;
93
+ if (!contentTopic) {
94
+ log("Message has no content topic, skipping");
95
+ return;
96
+ }
97
+ const decoders = this.decoders.get(contentTopic);
98
+ if (!decoders) {
99
+ log("No decoder for", contentTopic);
100
+ return;
101
+ }
102
+ let msg;
103
+ // We don't want to wait for decoding failure, just attempt to decode
104
+ // all messages and do the call back on the one that works
105
+ // noinspection ES6MissingAwait
106
+ decoders.forEach(async (dec) => {
107
+ if (msg)
108
+ return;
109
+ const decoded = await dec.fromProtoObj(toProtoMessage(protoMessage));
110
+ if (!decoded) {
111
+ log("Not able to decode message");
112
+ return;
113
+ }
114
+ // This is just to prevent more decoding attempt
115
+ // TODO: Could be better if we were to abort promises
116
+ msg = decoded;
117
+ await callback(decoded);
118
+ });
119
+ }
120
+ }
121
+ addCallback(requestId, callback) {
122
+ this.subscriptions.set(requestId, callback);
123
+ }
124
+ deleteCallback(requestId) {
125
+ this.subscriptions.delete(requestId);
126
+ }
127
+ addDecoders(decoders) {
128
+ decoders.forEach((decoders, contentTopic) => {
129
+ const currDecs = this.decoders.get(contentTopic);
130
+ if (!currDecs) {
131
+ this.decoders.set(contentTopic, new Set(decoders));
132
+ }
133
+ else {
134
+ this.decoders.set(contentTopic, new Set([...currDecs, ...decoders]));
135
+ }
136
+ });
137
+ }
138
+ deleteDecoders(decoders) {
139
+ decoders.forEach((decoders, contentTopic) => {
140
+ const currDecs = this.decoders.get(contentTopic);
141
+ if (currDecs) {
142
+ decoders.forEach((dec) => {
143
+ currDecs.delete(dec);
144
+ });
145
+ }
146
+ });
147
+ }
148
+ async unsubscribe(topic, contentFilters, requestId, peer) {
149
+ const unsubscribeRequest = FilterRPC.createRequest(topic, contentFilters, requestId, false);
150
+ const stream = await this.newStream(peer);
151
+ try {
152
+ await pipe([unsubscribeRequest.encode()], lp.encode(), stream.sink);
153
+ }
154
+ catch (e) {
155
+ log("Error unsubscribing", e);
156
+ throw e;
157
+ }
158
+ }
159
+ async newStream(peer) {
160
+ const connections = this.libp2p.connectionManager.getConnections(peer.id);
161
+ const connection = selectConnection(connections);
162
+ if (!connection) {
163
+ throw new Error("Failed to get a connection to the peer");
164
+ }
165
+ return connection.newStream(FilterCodec);
166
+ }
167
+ async getPeer(peerId) {
168
+ const res = await selectPeerForProtocol(this.libp2p.peerStore, [FilterCodec], peerId);
169
+ if (!res) {
170
+ throw new Error(`Failed to select peer for ${FilterCodec}`);
171
+ }
172
+ return res.peer;
173
+ }
174
+ async peers() {
175
+ return getPeersForProtocol(this.libp2p.peerStore, [FilterCodec]);
176
+ }
177
+ async randomPeer() {
178
+ return selectRandomPeer(await this.peers());
179
+ }
180
+ }
181
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/waku_filter/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Peer } from "@libp2p/interface-peer-store";
2
+ import type { Encoder, Message, ProtocolOptions, SendResult } from "@waku/interfaces";
3
+ import { Libp2p } from "libp2p";
4
+ import { PushResponse } from "../../proto/light_push";
5
+ export declare const LightPushCodec = "/vac/waku/lightpush/2.0.0-beta1";
6
+ export { PushResponse };
7
+ export interface CreateOptions {
8
+ /**
9
+ * The PubSub Topic to use. Defaults to {@link DefaultPubSubTopic}.
10
+ *
11
+ * The usage of the default pubsub topic is recommended.
12
+ * See [Waku v2 Topic Usage Recommendations](https://rfc.vac.dev/spec/23/) for details.
13
+ *
14
+ * @default {@link DefaultPubSubTopic}
15
+ */
16
+ pubSubTopic?: string;
17
+ }
18
+ /**
19
+ * Implements the [Waku v2 Light Push protocol](https://rfc.vac.dev/spec/19/).
20
+ */
21
+ export declare class WakuLightPush {
22
+ libp2p: Libp2p;
23
+ pubSubTopic: string;
24
+ constructor(libp2p: Libp2p, options?: CreateOptions);
25
+ push(encoder: Encoder, message: Partial<Message>, opts?: ProtocolOptions): Promise<SendResult>;
26
+ /**
27
+ * Returns known peers from the address book (`libp2p.peerStore`) that support
28
+ * light push protocol. Waku may or may not be currently connected to these
29
+ * peers.
30
+ */
31
+ peers(): Promise<Peer[]>;
32
+ /**
33
+ * Returns a random peer that supports light push protocol from the address
34
+ * book (`libp2p.peerStore`). Waku may or may not be currently connected to
35
+ * this peer.
36
+ */
37
+ randomPeer(): Promise<Peer | undefined>;
38
+ }
@@ -0,0 +1,83 @@
1
+ import debug from "debug";
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 { PushResponse } from "../../proto/light_push.js";
7
+ import { DefaultPubSubTopic } from "../constants.js";
8
+ import { selectConnection } from "../select_connection.js";
9
+ import { getPeersForProtocol, selectPeerForProtocol, selectRandomPeer, } from "../select_peer.js";
10
+ import { PushRPC } from "./push_rpc.js";
11
+ const log = debug("waku:light-push");
12
+ export const LightPushCodec = "/vac/waku/lightpush/2.0.0-beta1";
13
+ export { PushResponse };
14
+ /**
15
+ * Implements the [Waku v2 Light Push protocol](https://rfc.vac.dev/spec/19/).
16
+ */
17
+ export class WakuLightPush {
18
+ constructor(libp2p, options) {
19
+ this.libp2p = libp2p;
20
+ this.pubSubTopic = options?.pubSubTopic ?? DefaultPubSubTopic;
21
+ }
22
+ async push(encoder, message, opts) {
23
+ const pubSubTopic = opts?.pubSubTopic ? opts.pubSubTopic : this.pubSubTopic;
24
+ const res = await selectPeerForProtocol(this.libp2p.peerStore, [LightPushCodec], opts?.peerId);
25
+ if (!res) {
26
+ throw new Error("Failed to get a peer");
27
+ }
28
+ const { peer } = res;
29
+ const connections = this.libp2p.connectionManager.getConnections(peer.id);
30
+ const connection = selectConnection(connections);
31
+ if (!connection)
32
+ throw "Failed to get a connection to the peer";
33
+ const stream = await connection.newStream(LightPushCodec);
34
+ const recipients = [];
35
+ try {
36
+ const protoMessage = await encoder.toProtoObj(message);
37
+ if (!protoMessage) {
38
+ log("Failed to encode to protoMessage, aborting push");
39
+ return { recipients };
40
+ }
41
+ const query = PushRPC.createRequest(protoMessage, pubSubTopic);
42
+ const res = await pipe([query.encode()], lp.encode(), stream, lp.decode(), async (source) => await all(source));
43
+ try {
44
+ const bytes = new Uint8ArrayList();
45
+ res.forEach((chunk) => {
46
+ bytes.append(chunk);
47
+ });
48
+ const response = PushRPC.decode(bytes).response;
49
+ if (!response) {
50
+ log("No response in PushRPC");
51
+ return { recipients };
52
+ }
53
+ if (response.isSuccess) {
54
+ recipients.push(peer.id);
55
+ }
56
+ }
57
+ catch (err) {
58
+ log("Failed to decode push reply", err);
59
+ }
60
+ }
61
+ catch (err) {
62
+ log("Failed to send waku light push request", err);
63
+ }
64
+ return { recipients };
65
+ }
66
+ /**
67
+ * Returns known peers from the address book (`libp2p.peerStore`) that support
68
+ * light push protocol. Waku may or may not be currently connected to these
69
+ * peers.
70
+ */
71
+ async peers() {
72
+ return getPeersForProtocol(this.libp2p.peerStore, [LightPushCodec]);
73
+ }
74
+ /**
75
+ * Returns a random peer that supports light push protocol from the address
76
+ * book (`libp2p.peerStore`). Waku may or may not be currently connected to
77
+ * this peer.
78
+ */
79
+ async randomPeer() {
80
+ return selectRandomPeer(await this.peers());
81
+ }
82
+ }
83
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/waku_light_push/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Uint8ArrayList } from "uint8arraylist";
2
+ import * as proto from "../../proto/light_push";
3
+ export declare class PushRPC {
4
+ proto: proto.PushRPC;
5
+ constructor(proto: proto.PushRPC);
6
+ static createRequest(message: proto.WakuMessage, pubSubTopic: string): PushRPC;
7
+ static decode(bytes: Uint8ArrayList): PushRPC;
8
+ encode(): Uint8Array;
9
+ get query(): proto.PushRequest | undefined;
10
+ get response(): proto.PushResponse | undefined;
11
+ }
@@ -0,0 +1,31 @@
1
+ import { v4 as uuid } from "uuid";
2
+ import * as proto from "../../proto/light_push.js";
3
+ export class PushRPC {
4
+ constructor(proto) {
5
+ this.proto = proto;
6
+ }
7
+ static createRequest(message, pubSubTopic) {
8
+ return new PushRPC({
9
+ requestId: uuid(),
10
+ request: {
11
+ message: message,
12
+ pubSubTopic: pubSubTopic,
13
+ },
14
+ response: undefined,
15
+ });
16
+ }
17
+ static decode(bytes) {
18
+ const res = proto.PushRPC.decode(bytes);
19
+ return new PushRPC(res);
20
+ }
21
+ encode() {
22
+ return proto.PushRPC.encode(this.proto);
23
+ }
24
+ get query() {
25
+ return this.proto.request;
26
+ }
27
+ get response() {
28
+ return this.proto.response;
29
+ }
30
+ }
31
+ //# sourceMappingURL=push_rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push_rpc.js","sourceRoot":"","sources":["../../../src/lib/waku_light_push/push_rpc.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAEhD,MAAM,OAAO,OAAO;IAClB,YAA0B,KAAoB;QAApB,UAAK,GAAL,KAAK,CAAe;IAAG,CAAC;IAElD,MAAM,CAAC,aAAa,CAClB,OAA0B,EAC1B,WAAmB;QAEnB,OAAO,IAAI,OAAO,CAAC;YACjB,SAAS,EAAE,IAAI,EAAE;YACjB,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,WAAW;aACzB;YACD,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAqB;QACjC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ export declare const Symmetric: {
2
+ keySize: number;
3
+ ivSize: number;
4
+ tagSize: number;
5
+ algorithm: {
6
+ name: string;
7
+ length: number;
8
+ };
9
+ };
10
+ export declare const Asymmetric: {
11
+ keySize: number;
12
+ };
@@ -0,0 +1,10 @@
1
+ export const Symmetric = {
2
+ keySize: 32,
3
+ ivSize: 12,
4
+ tagSize: 16,
5
+ algorithm: { name: "AES-GCM", length: 128 },
6
+ };
7
+ export const Asymmetric = {
8
+ keySize: 32,
9
+ };
10
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/waku_message/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE;CAC5C,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO,EAAE,EAAE;CACZ,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Encrypt message for given recipient's public key.
3
+ *
4
+ * @param publicKeyTo Recipient's public key (65 bytes)
5
+ * @param msg The message being encrypted
6
+ * @return A promise that resolves with the ECIES structure serialized
7
+ */
8
+ export declare function encrypt(publicKeyTo: Uint8Array, msg: Uint8Array): Promise<Uint8Array>;
9
+ /**
10
+ * Decrypt message using given private key.
11
+ *
12
+ * @param privateKey A 32-byte private key of recipient of the message
13
+ * @param encrypted ECIES serialized structure (result of ECIES encryption)
14
+ * @returns The clear text
15
+ * @throws Error If decryption fails
16
+ */
17
+ export declare function decrypt(privateKey: Uint8Array, encrypted: Uint8Array): Promise<Uint8Array>;
@@ -0,0 +1,126 @@
1
+ import * as secp from "@noble/secp256k1";
2
+ import { getSubtle, randomBytes, sha256 } from "../crypto.js";
3
+ import { concat, hexToBytes } from "../utils.js";
4
+ /**
5
+ * HKDF as implemented in go-ethereum.
6
+ */
7
+ function kdf(secret, outputLength) {
8
+ let ctr = 1;
9
+ let written = 0;
10
+ let willBeResult = Promise.resolve(new Uint8Array());
11
+ while (written < outputLength) {
12
+ const counters = new Uint8Array([ctr >> 24, ctr >> 16, ctr >> 8, ctr]);
13
+ const countersSecret = concat([counters, secret], counters.length + secret.length);
14
+ const willBeHashResult = sha256(countersSecret);
15
+ willBeResult = willBeResult.then((result) => willBeHashResult.then((hashResult) => {
16
+ const _hashResult = new Uint8Array(hashResult);
17
+ return concat([result, _hashResult], result.length + _hashResult.length);
18
+ }));
19
+ written += 32;
20
+ ctr += 1;
21
+ }
22
+ return willBeResult;
23
+ }
24
+ function aesCtrEncrypt(counter, key, data) {
25
+ return getSubtle()
26
+ .importKey("raw", key, "AES-CTR", false, ["encrypt"])
27
+ .then((cryptoKey) => getSubtle().encrypt({ name: "AES-CTR", counter: counter, length: 128 }, cryptoKey, data))
28
+ .then((bytes) => new Uint8Array(bytes));
29
+ }
30
+ function aesCtrDecrypt(counter, key, data) {
31
+ return getSubtle()
32
+ .importKey("raw", key, "AES-CTR", false, ["decrypt"])
33
+ .then((cryptoKey) => getSubtle().decrypt({ name: "AES-CTR", counter: counter, length: 128 }, cryptoKey, data))
34
+ .then((bytes) => new Uint8Array(bytes));
35
+ }
36
+ function hmacSha256Sign(key, msg) {
37
+ const algorithm = { name: "HMAC", hash: { name: "SHA-256" } };
38
+ return getSubtle()
39
+ .importKey("raw", key, algorithm, false, ["sign"])
40
+ .then((cryptoKey) => getSubtle().sign(algorithm, cryptoKey, msg))
41
+ .then((bytes) => new Uint8Array(bytes));
42
+ }
43
+ function hmacSha256Verify(key, msg, sig) {
44
+ const algorithm = { name: "HMAC", hash: { name: "SHA-256" } };
45
+ const _key = getSubtle().importKey("raw", key, algorithm, false, ["verify"]);
46
+ return _key.then((cryptoKey) => getSubtle().verify(algorithm, cryptoKey, sig, msg));
47
+ }
48
+ /**
49
+ * Derive shared secret for given private and public keys.
50
+ *
51
+ * @param privateKeyA Sender's private key (32 bytes)
52
+ * @param publicKeyB Recipient's public key (65 bytes)
53
+ * @returns A promise that resolves with the derived shared secret (Px, 32 bytes)
54
+ * @throws Error If arguments are invalid
55
+ */
56
+ function derive(privateKeyA, publicKeyB) {
57
+ if (privateKeyA.length !== 32) {
58
+ throw new Error(`Bad private key, it should be 32 bytes but it's actually ${privateKeyA.length} bytes long`);
59
+ }
60
+ else if (publicKeyB.length !== 65) {
61
+ throw new Error(`Bad public key, it should be 65 bytes but it's actually ${publicKeyB.length} bytes long`);
62
+ }
63
+ else if (publicKeyB[0] !== 4) {
64
+ throw new Error("Bad public key, a valid public key would begin with 4");
65
+ }
66
+ else {
67
+ const px = secp.getSharedSecret(privateKeyA, publicKeyB, true);
68
+ // Remove the compression prefix
69
+ return new Uint8Array(hexToBytes(px).slice(1));
70
+ }
71
+ }
72
+ /**
73
+ * Encrypt message for given recipient's public key.
74
+ *
75
+ * @param publicKeyTo Recipient's public key (65 bytes)
76
+ * @param msg The message being encrypted
77
+ * @return A promise that resolves with the ECIES structure serialized
78
+ */
79
+ export async function encrypt(publicKeyTo, msg) {
80
+ const ephemPrivateKey = randomBytes(32);
81
+ const sharedPx = await derive(ephemPrivateKey, publicKeyTo);
82
+ const hash = await kdf(sharedPx, 32);
83
+ const iv = randomBytes(16);
84
+ const encryptionKey = hash.slice(0, 16);
85
+ const cipherText = await aesCtrEncrypt(iv, encryptionKey, msg);
86
+ const ivCipherText = concat([iv, cipherText], iv.length + cipherText.length);
87
+ const macKey = await sha256(hash.slice(16));
88
+ const hmac = await hmacSha256Sign(macKey, ivCipherText);
89
+ const ephemPublicKey = secp.getPublicKey(ephemPrivateKey, false);
90
+ return concat([ephemPublicKey, ivCipherText, hmac], ephemPublicKey.length + ivCipherText.length + hmac.length);
91
+ }
92
+ const metaLength = 1 + 64 + 16 + 32;
93
+ /**
94
+ * Decrypt message using given private key.
95
+ *
96
+ * @param privateKey A 32-byte private key of recipient of the message
97
+ * @param encrypted ECIES serialized structure (result of ECIES encryption)
98
+ * @returns The clear text
99
+ * @throws Error If decryption fails
100
+ */
101
+ export async function decrypt(privateKey, encrypted) {
102
+ if (encrypted.length <= metaLength) {
103
+ throw new Error(`Invalid Ciphertext. Data is too small. It should ba at least ${metaLength} bytes`);
104
+ }
105
+ else if (encrypted[0] !== 4) {
106
+ throw new Error(`Not a valid ciphertext. It should begin with 4 but actually begin with ${encrypted[0]}`);
107
+ }
108
+ else {
109
+ // deserialize
110
+ const ephemPublicKey = encrypted.slice(0, 65);
111
+ const cipherTextLength = encrypted.length - metaLength;
112
+ const iv = encrypted.slice(65, 65 + 16);
113
+ const cipherAndIv = encrypted.slice(65, 65 + 16 + cipherTextLength);
114
+ const ciphertext = cipherAndIv.slice(16);
115
+ const msgMac = encrypted.slice(65 + 16 + cipherTextLength);
116
+ // check HMAC
117
+ const px = derive(privateKey, ephemPublicKey);
118
+ const hash = await kdf(px, 32);
119
+ const [encryptionKey, macKey] = await sha256(hash.slice(16)).then((macKey) => [hash.slice(0, 16), macKey]);
120
+ if (!(await hmacSha256Verify(macKey, cipherAndIv, msgMac))) {
121
+ throw new Error("Incorrect MAC");
122
+ }
123
+ return aesCtrDecrypt(iv, encryptionKey, ciphertext);
124
+ }
125
+ }
126
+ //# sourceMappingURL=ecies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecies.js","sourceRoot":"","sources":["../../../src/lib/waku_message/ecies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function encrypt(iv: Uint8Array, key: Uint8Array, clearText: Uint8Array): Promise<Uint8Array>;
2
+ export declare function decrypt(iv: Uint8Array, key: Uint8Array, cipherText: Uint8Array): Promise<Uint8Array>;
3
+ export declare function generateIv(): Uint8Array;
@@ -0,0 +1,18 @@
1
+ import { getSubtle, randomBytes } from "../crypto.js";
2
+ import { Symmetric } from "./constants.js";
3
+ export async function encrypt(iv, key, clearText) {
4
+ return getSubtle()
5
+ .importKey("raw", key, Symmetric.algorithm, false, ["encrypt"])
6
+ .then((cryptoKey) => getSubtle().encrypt({ iv, ...Symmetric.algorithm }, cryptoKey, clearText))
7
+ .then((cipher) => new Uint8Array(cipher));
8
+ }
9
+ export async function decrypt(iv, key, cipherText) {
10
+ return getSubtle()
11
+ .importKey("raw", key, Symmetric.algorithm, false, ["decrypt"])
12
+ .then((cryptoKey) => getSubtle().decrypt({ iv, ...Symmetric.algorithm }, cryptoKey, cipherText))
13
+ .then((clear) => new Uint8Array(clear));
14
+ }
15
+ export function generateIv() {
16
+ return randomBytes(Symmetric.ivSize);
17
+ }
18
+ //# sourceMappingURL=symmetric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symmetric.js","sourceRoot":"","sources":["../../../src/lib/waku_message/symmetric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,EAAc,EACd,GAAe,EACf,SAAqB;IAErB,OAAO,SAAS,EAAE;SACf,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;SAC9D,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAClB,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAC1E;SACA,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,EAAc,EACd,GAAe,EACf,UAAsB;IAEtB,OAAO,SAAS,EAAE;SACf,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;SAC9D,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAClB,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAC3E;SACA,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Decoder, Message, ProtoMessage } from "@waku/interfaces";
2
+ import * as proto from "../../proto/topic_only_message";
3
+ export declare class TopicOnlyMessage implements Message {
4
+ private proto;
5
+ payload: undefined;
6
+ rateLimitProof: undefined;
7
+ timestamp: undefined;
8
+ constructor(proto: proto.TopicOnlyMessage);
9
+ get contentTopic(): string;
10
+ }
11
+ export declare class TopicOnlyDecoder implements Decoder<TopicOnlyMessage> {
12
+ contentTopic: string;
13
+ fromWireToProtoObj(bytes: Uint8Array): Promise<ProtoMessage | undefined>;
14
+ fromProtoObj(proto: ProtoMessage): Promise<TopicOnlyMessage | undefined>;
15
+ }
@@ -0,0 +1,31 @@
1
+ import debug from "debug";
2
+ import * as proto from "../../proto/topic_only_message.js";
3
+ const log = debug("waku:message:topic-only");
4
+ export class TopicOnlyMessage {
5
+ constructor(proto) {
6
+ this.proto = proto;
7
+ }
8
+ get contentTopic() {
9
+ return this.proto.contentTopic ?? "";
10
+ }
11
+ }
12
+ export class TopicOnlyDecoder {
13
+ constructor() {
14
+ this.contentTopic = "";
15
+ }
16
+ fromWireToProtoObj(bytes) {
17
+ const protoMessage = proto.TopicOnlyMessage.decode(bytes);
18
+ log("Message decoded", protoMessage);
19
+ return Promise.resolve({
20
+ contentTopic: protoMessage.contentTopic,
21
+ payload: undefined,
22
+ rateLimitProof: undefined,
23
+ timestamp: undefined,
24
+ version: undefined,
25
+ });
26
+ }
27
+ async fromProtoObj(proto) {
28
+ return new TopicOnlyMessage(proto);
29
+ }
30
+ }
31
+ //# sourceMappingURL=topic_only_message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topic_only_message.js","sourceRoot":"","sources":["../../../src/lib/waku_message/topic_only_message.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,KAAK,MAAM,gCAAgC,CAAC;AAExD,MAAM,GAAG,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAE7C,MAAM,OAAO,gBAAgB;IAK3B,YAAoB,KAA6B;QAA7B,UAAK,GAAL,KAAK,CAAwB;IAAG,CAAC;IAErD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IAA7B;QACS,iBAAY,GAAG,EAAE,CAAC;IAmB3B,CAAC;IAjBC,kBAAkB,CAAC,KAAiB;QAClC,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1D,GAAG,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,YAAY,EAAE,YAAY,CAAC,YAAY;YACvC,OAAO,EAAE,SAAS;YAClB,cAAc,EAAE,SAAS;YACzB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,KAAmB;QAEnB,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACF"}