Merge pull request #90 from waku-org/protons-store-reactjs
This commit is contained in:
commit
536b7750d1
|
@ -3,7 +3,7 @@
|
|||
- React/JavaScript,
|
||||
- `create-react-app`/`react-scripts` 5.0.0
|
||||
- Waku Store,
|
||||
- Protobuf using `protons`.
|
||||
- Protobuf using `protobufjs`.
|
||||
- No async/await syntax.
|
||||
|
||||
A simple app that retrieves chat messages using [Waku Store](https://rfc.vac.dev/spec/13/)
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"@testing-library/react": "^13.2.0",
|
||||
"@testing-library/user-event": "^14.1.1",
|
||||
"js-waku": "0.24.0-e3bef47",
|
||||
"protons": "^2.0.3",
|
||||
"protobufjs": "^7.1.0",
|
||||
"react": "^18.1.0",
|
||||
"react-dom": "^18.1.0",
|
||||
"react-scripts": "5.0.1",
|
||||
|
|
|
@ -6,7 +6,7 @@ specifiers:
|
|||
'@testing-library/react': ^13.2.0
|
||||
'@testing-library/user-event': ^14.1.1
|
||||
js-waku: 0.24.0-e3bef47
|
||||
protons: ^2.0.3
|
||||
protobufjs: ^7.1.0
|
||||
react: ^18.1.0
|
||||
react-dom: ^18.1.0
|
||||
react-scripts: 5.0.1
|
||||
|
@ -18,7 +18,7 @@ dependencies:
|
|||
'@testing-library/react': 13.3.0_biqbaboplfbrettd7655fr4n2y
|
||||
'@testing-library/user-event': 14.4.2_znfriv3ismgf3ybh2woqwlpfea
|
||||
js-waku: 0.24.0-e3bef47_typescript@4.7.4
|
||||
protons: 2.0.3
|
||||
protobufjs: 7.1.0
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0_react@18.2.0
|
||||
react-scripts: 5.0.1_qtbnez4q7bzoc4eqybg3efzzxe
|
||||
|
@ -7603,7 +7603,7 @@ packages:
|
|||
it-length-prefixed: 7.0.1
|
||||
it-pipe: 2.0.4
|
||||
js-sha3: 0.8.0
|
||||
libp2p: 0.38.0-1f38ab7
|
||||
libp2p: 0.38.0-0e7096d
|
||||
p-event: 5.0.1
|
||||
protons-runtime: 1.0.4
|
||||
uint8arrays: 3.1.0
|
||||
|
@ -7792,8 +7792,8 @@ packages:
|
|||
type-check: 0.4.0
|
||||
dev: false
|
||||
|
||||
/libp2p/0.38.0-1f38ab7:
|
||||
resolution: {integrity: sha512-pVJiy/eKKPdjUBrNcemNdTKSc+4Edo89STzO6opPzpcGr25CidptBfJtPwWz+CKVtvxzW7BkiVgH2CTDf0bPwg==}
|
||||
/libp2p/0.38.0-0e7096d:
|
||||
resolution: {integrity: sha512-OrdnREspiwmgFdd2WagZcwZsRnks/EwWOTOql2Kg5cmpdbrGP/SEElbC/kUiYIQVVj8PjA4HQhxyD0q8wFGm9w==}
|
||||
engines: {node: '>=16.0.0', npm: '>=7.0.0'}
|
||||
dependencies:
|
||||
'@achingbrain/nat-port-mapper': 1.0.7
|
||||
|
@ -9548,10 +9548,6 @@ packages:
|
|||
long: 5.2.0
|
||||
dev: false
|
||||
|
||||
/protocol-buffers-schema/3.6.0:
|
||||
resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==}
|
||||
dev: false
|
||||
|
||||
/protons-runtime/1.0.4:
|
||||
resolution: {integrity: sha512-DSKWjAgwaXhtYO5Jo/MrU8n/75I/P2IhxU0Fk/lSrXx6Gxl5DH+I6cHcbGAYFmAlOBmU4QRa0mvVme8VXlDeUg==}
|
||||
engines: {node: '>=16.0.0', npm: '>=7.0.0'}
|
||||
|
@ -9579,15 +9575,6 @@ packages:
|
|||
uint8arraylist: 2.3.2
|
||||
dev: false
|
||||
|
||||
/protons/2.0.3:
|
||||
resolution: {integrity: sha512-j6JikP/H7gNybNinZhAHMN07Vjr1i4lVupg598l4I9gSTjJqOvKnwjzYX2PzvBTSVf2eZ2nWv4vG+mtW8L6tpA==}
|
||||
dependencies:
|
||||
protocol-buffers-schema: 3.6.0
|
||||
signed-varint: 2.0.1
|
||||
uint8arrays: 3.1.0
|
||||
varint: 5.0.2
|
||||
dev: false
|
||||
|
||||
/proxy-addr/2.0.7:
|
||||
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
|
||||
engines: {node: '>= 0.10'}
|
||||
|
@ -10320,12 +10307,6 @@ packages:
|
|||
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
|
||||
dev: false
|
||||
|
||||
/signed-varint/2.0.1:
|
||||
resolution: {integrity: sha512-abgDPg1106vuZZOvw7cFwdCABddfJRz5akcCcchzTbhyhYnsG31y4AlZEgp315T7W3nQq5P4xeOm186ZiPVFzw==}
|
||||
dependencies:
|
||||
varint: 5.0.2
|
||||
dev: false
|
||||
|
||||
/sisteransi/1.0.5:
|
||||
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
|
||||
dev: false
|
||||
|
@ -11167,10 +11148,6 @@ packages:
|
|||
source-map: 0.7.4
|
||||
dev: false
|
||||
|
||||
/varint/5.0.2:
|
||||
resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==}
|
||||
dev: false
|
||||
|
||||
/varint/6.0.0:
|
||||
resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
|
||||
dev: false
|
||||
|
|
|
@ -1,17 +1,14 @@
|
|||
import { waitForRemotePeer, utils } from "js-waku";
|
||||
import * as React from "react";
|
||||
import protons from "protons";
|
||||
import protobuf from "protobufjs";
|
||||
import { createWaku } from "js-waku/lib/create_waku";
|
||||
|
||||
const ContentTopic = "/toy-chat/2/huilong/proto";
|
||||
|
||||
const proto = protons(`
|
||||
message ChatMessage {
|
||||
uint64 timestamp = 1;
|
||||
string nick = 2;
|
||||
bytes text = 3;
|
||||
}
|
||||
`);
|
||||
const ProtoChatMessage = new protobuf.Type("ChatMessage")
|
||||
.add(new protobuf.Field("timestamp", 1, "uint64"))
|
||||
.add(new protobuf.Field("nick", 2, "string"))
|
||||
.add(new protobuf.Field("text", 3, "bytes"));
|
||||
|
||||
function App() {
|
||||
const [waku, setWaku] = React.useState(undefined);
|
||||
|
@ -92,14 +89,14 @@ export default App;
|
|||
function decodeMessage(wakuMessage) {
|
||||
if (!wakuMessage.payload) return;
|
||||
|
||||
const { timestamp, nick, text } = proto.ChatMessage.decode(
|
||||
const { timestamp, nick, text } = ProtoChatMessage.decode(
|
||||
wakuMessage.payload
|
||||
);
|
||||
|
||||
if (!timestamp || !text || !nick) return;
|
||||
|
||||
const time = new Date();
|
||||
time.setTime(timestamp);
|
||||
time.setTime(Number(timestamp));
|
||||
|
||||
const utf8Text = utils.bytesToUtf8(text);
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
- Waku Filter
|
||||
- Waku Light Push
|
||||
- Waku Store
|
||||
- Protobuf using `protons`
|
||||
|
||||
A ReactJS chat app is provided as a showcase of the library used in the browser.
|
||||
It implements [Waku v2 Toy Chat](https://rfc.vac.dev/spec/22/) protocol.
|
||||
|
|
Loading…
Reference in New Issue