@peerbit/react 0.0.4 → 0.0.5

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.
@@ -1,3 +1,4 @@
1
1
  export { PeerProvider, PeerContext, usePeer } from "./usePeer.js";
2
2
  export * from "./utils.js";
3
3
  export { FastMutex } from "./lockstorage.js";
4
+ export { useProgram } from "./useProgram.js";
package/lib/esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { PeerProvider, PeerContext, usePeer } from "./usePeer.js";
2
2
  export * from "./utils.js";
3
3
  export { FastMutex } from "./lockstorage.js";
4
+ export { useProgram } from "./useProgram.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAClE,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAClE,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -12,6 +12,8 @@ import sodium from "libsodium-wrappers";
12
12
  import * as filters from "@libp2p/websockets/filters";
13
13
  import { useMount } from "./useMount.js";
14
14
  import { createClient, createHost } from "@peerbit/proxy-window";
15
+ import { identifyService } from "libp2p/identify";
16
+ import { detectIncognito } from "detectincognitojs";
15
17
  if (!window.name) {
16
18
  window.name = uuid();
17
19
  }
@@ -32,7 +34,7 @@ export const PeerProvider = (options) => {
32
34
  loading,
33
35
  !!promise,
34
36
  connectionState,
35
- peer?.identity?.publicKey.toString(),
37
+ peer?.identity?.publicKey?.hashcode(),
36
38
  ]);
37
39
  useMount(() => {
38
40
  setLoading(true);
@@ -60,7 +62,7 @@ export const PeerProvider = (options) => {
60
62
  libp2p: {
61
63
  addresses: {
62
64
  listen: [
63
- /* '/webrtc' */
65
+ /* "/webrtc" */
64
66
  ],
65
67
  },
66
68
  connectionEncryption: [noise()],
@@ -69,7 +71,7 @@ export const PeerProvider = (options) => {
69
71
  maxConnections: 100,
70
72
  minConnections: 0,
71
73
  },
72
- streamMuxers: [mplex()],
74
+ streamMuxers: [mplex() /* , mplex() */],
73
75
  ...(nodeOptions.network === "local"
74
76
  ? {
75
77
  connectionGater: {
@@ -86,28 +88,38 @@ export const PeerProvider = (options) => {
86
88
  webSockets({
87
89
  filter: filters.all,
88
90
  }),
91
+ /* circuitRelayTransport({
92
+ discoverRelays: 1,
93
+ }),
94
+ webRTC(), */
89
95
  /* circuitRelayTransport({ discoverRelays: 1 }),
90
- webRTC(), */
96
+ webRTC(), */
91
97
  ],
92
98
  }
93
99
  : {
94
100
  transports: [
95
101
  webSockets({ filter: filters.wss }),
96
- /* circuitRelayTransport({ discoverRelays: 1 }),
97
- webRTC(), */
102
+ /* circuitRelayTransport({
103
+ discoverRelays: 1,
104
+ }),
105
+ webRTC(), */
98
106
  ],
99
107
  }),
100
108
  services: {
101
109
  pubsub: (c) => new DirectSub(c, {
102
110
  canRelayMessage: true,
103
111
  emitSelf: true,
112
+ /* connectionManager: {
113
+ autoDial: false,
114
+ }, */
104
115
  }),
116
+ identify: identifyService(),
105
117
  },
106
118
  },
107
- directory: !nodeOptions.inMemory
119
+ directory: !nodeOptions.inMemory &&
120
+ !(await detectIncognito()).isPrivate
108
121
  ? "./repo"
109
122
  : undefined,
110
- limitSigning: true,
111
123
  });
112
124
  setConnectionState("connecting");
113
125
  // Resolve bootstrap nodes async (we want to return before this is done)
@@ -119,7 +131,14 @@ export const PeerProvider = (options) => {
119
131
  }
120
132
  else {
121
133
  // TODO fix types. When proxy client this will not be available
122
- await newPeer["bootstrap"]?.();
134
+ if (nodeOptions.bootstrap) {
135
+ for (const addr of nodeOptions.bootstrap) {
136
+ await newPeer.dial(addr);
137
+ }
138
+ }
139
+ else {
140
+ await newPeer["bootstrap"]?.();
141
+ }
123
142
  }
124
143
  setConnectionState("connected");
125
144
  }
@@ -133,7 +152,7 @@ export const PeerProvider = (options) => {
133
152
  };
134
153
  const promise = connectFn();
135
154
  // Make sure data flow as expected between tabs and windows locally (offline states)
136
- if (nodeOptions.waitForConnnected) {
155
+ if (nodeOptions.waitForConnnected !== false) {
137
156
  await promise;
138
157
  }
139
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"usePeer.js","sourceRoot":"","sources":["../../src/usePeer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usePeer.js","sourceRoot":"","sources":["../../src/usePeer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Program, ProgramEvents, OpenOptions } from "@peerbit/program";
2
+ export declare const useProgram: <A, B extends ProgramEvents, P extends Program<A, B>>(addressOrOpen: string | P, options?: OpenOptions<A, P> | undefined) => {
3
+ program: P | undefined;
4
+ loading: boolean;
5
+ promise: Promise<P> | undefined;
6
+ };
@@ -0,0 +1,38 @@
1
+ import { usePeer } from "./usePeer.js";
2
+ import { useEffect, useRef, useState } from "react";
3
+ const addressOrUndefined = (p) => {
4
+ try {
5
+ return p.address;
6
+ }
7
+ catch (error) {
8
+ return undefined;
9
+ }
10
+ };
11
+ export const useProgram = (addressOrOpen, options) => {
12
+ const { peer } = usePeer();
13
+ let [program, setProgram] = useState();
14
+ let programRef = useRef();
15
+ let [loading, setLoading] = useState(false);
16
+ useEffect(() => {
17
+ if (!peer || !addressOrOpen) {
18
+ return;
19
+ }
20
+ setLoading(true);
21
+ programRef.current = peer
22
+ ?.open(addressOrOpen, { ...options, existing: "reuse" })
23
+ .then((p) => {
24
+ setProgram(p);
25
+ return p;
26
+ })
27
+ .finally(() => {
28
+ setLoading(false);
29
+ });
30
+ }, [
31
+ peer?.identity.publicKey.hashcode(),
32
+ typeof addressOrOpen === "string"
33
+ ? addressOrOpen
34
+ : addressOrUndefined(addressOrOpen),
35
+ ]);
36
+ return { program, loading, promise: programRef.current };
37
+ };
38
+ //# sourceMappingURL=useProgram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProgram.js","sourceRoot":"","sources":["../../src/useProgram.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEpD,MAAM,kBAAkB,GAAG,CAKvB,CAAI,EACN,EAAE;IACA,IAAI;QACA,OAAO,CAAC,CAAC,OAAO,CAAC;KACpB;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,SAAS,CAAC;KACpB;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CACtB,aAAyB,EACzB,OAA2B,EAC7B,EAAE;IACA,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAiB,CAAC;IACtD,IAAI,UAAU,GAAG,MAAM,EAAc,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;YACzB,OAAO;SACV;QACD,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,UAAU,CAAC,OAAO,GAAG,IAAI;YACrB,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;aACvD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACR,UAAU,CAAC,CAAC,CAAC,CAAC;YACd,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACV,UAAU,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACX,CAAC,EAAE;QACC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE;QACnC,OAAO,aAAa,KAAK,QAAQ;YAC7B,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC;KAC1C,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC;AAC7D,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/react",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "homepage": "https://dao-xyz.github.io/peerbit-examples",
5
5
  "module": "lib/esm/index.js",
6
6
  "types": "lib/esm/index.d.ts",
@@ -22,19 +22,17 @@
22
22
  "react": "*"
23
23
  },
24
24
  "dependencies": {
25
- "@emotion/react": "^11.10.5",
26
- "@emotion/styled": "^11.10.5",
27
- "@libp2p/webrtc": "^2.0.11",
28
- "@mui/icons-material": "^5.10.16",
29
- "@mui/material": "^5.10.13",
25
+ "@chainsafe/libp2p-yamux": "^5.0.0",
26
+ "@libp2p/webrtc": "^3.2.1",
30
27
  "@peerbit/proxy-window": "^1.0.1",
31
28
  "@types/react": "^18.0.25",
32
29
  "@types/react-dom": "^18.0.8",
30
+ "detectincognitojs": "^1.3.0",
33
31
  "path-browserify": "^1.0.1",
34
- "peerbit": "^1",
32
+ "peerbit": "^2",
35
33
  "react": "^18.2.0",
36
34
  "react-dom": "^18.2.0",
37
- "react-router-dom": "^6.8.0",
35
+ "react-router-dom": "^6.16.0",
38
36
  "react-use": "^17.4.0"
39
37
  },
40
38
  "devDependencies": {
@@ -71,5 +69,5 @@
71
69
  "last 1 safari version"
72
70
  ]
73
71
  },
74
- "gitHead": "61243721632f276a5b6109e147ec375947da9afd"
72
+ "gitHead": "00c275554aa08e6a70bceaee3e3377936ca0e8d9"
75
73
  }
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { PeerProvider, PeerContext, usePeer } from "./usePeer.js";
2
2
  export * from "./utils.js";
3
3
  export { FastMutex } from "./lockstorage.js";
4
+ export { useProgram } from "./useProgram.js";
package/src/usePeer.tsx CHANGED
@@ -3,7 +3,10 @@ import { multiaddr, Multiaddr } from "@multiformats/multiaddr";
3
3
  import { Peerbit } from "peerbit";
4
4
  import { webSockets } from "@libp2p/websockets";
5
5
  import { DirectSub } from "@peerbit/pubsub";
6
+
6
7
  import { mplex } from "@libp2p/mplex";
8
+ import { yamux } from "@chainsafe/libp2p-yamux";
9
+
7
10
  import { getFreeKeypair, getTabId, inIframe } from "./utils.js";
8
11
  import { noise } from "@dao-xyz/libp2p-noise";
9
12
  import { v4 as uuid } from "uuid";
@@ -14,6 +17,10 @@ import * as filters from "@libp2p/websockets/filters";
14
17
  import { useMount } from "./useMount.js";
15
18
  import { createClient, createHost } from "@peerbit/proxy-window";
16
19
  import { ProgramClient } from "@peerbit/program";
20
+ import { circuitRelayTransport } from "libp2p/circuit-relay";
21
+ import { webRTC } from "@libp2p/webrtc";
22
+ import { identifyService } from "libp2p/identify";
23
+ import { detectIncognito } from "detectincognitojs";
17
24
 
18
25
  export type ConnectionStatus =
19
26
  | "disconnected"
@@ -33,7 +40,6 @@ if (!window.name) {
33
40
 
34
41
  export const PeerContext = React.createContext<IPeerContext>({} as any);
35
42
  export const usePeer = () => useContext(PeerContext);
36
-
37
43
  type IFrameOptions = {
38
44
  type: "proxy";
39
45
  targetOrigin: string;
@@ -83,7 +89,7 @@ export const PeerProvider = (options: PeerOptions) => {
83
89
  loading,
84
90
  !!promise,
85
91
  connectionState,
86
- peer?.identity?.publicKey.toString(),
92
+ peer?.identity?.publicKey?.hashcode(),
87
93
  ]
88
94
  );
89
95
 
@@ -122,7 +128,7 @@ export const PeerProvider = (options: PeerOptions) => {
122
128
  libp2p: {
123
129
  addresses: {
124
130
  listen: [
125
- /* '/webrtc' */
131
+ /* "/webrtc" */
126
132
  ],
127
133
  },
128
134
  connectionEncryption: [noise()],
@@ -131,7 +137,8 @@ export const PeerProvider = (options: PeerOptions) => {
131
137
  maxConnections: 100,
132
138
  minConnections: 0,
133
139
  },
134
- streamMuxers: [mplex()],
140
+
141
+ streamMuxers: [mplex() /* , mplex() */],
135
142
  ...(nodeOptions.network === "local"
136
143
  ? {
137
144
  connectionGater: {
@@ -148,15 +155,21 @@ export const PeerProvider = (options: PeerOptions) => {
148
155
  webSockets({
149
156
  filter: filters.all,
150
157
  }),
158
+ /* circuitRelayTransport({
159
+ discoverRelays: 1,
160
+ }),
161
+ webRTC(), */
151
162
  /* circuitRelayTransport({ discoverRelays: 1 }),
152
- webRTC(), */
163
+ webRTC(), */
153
164
  ],
154
165
  }
155
166
  : {
156
167
  transports: [
157
168
  webSockets({ filter: filters.wss }),
158
- /* circuitRelayTransport({ discoverRelays: 1 }),
159
- webRTC(), */
169
+ /* circuitRelayTransport({
170
+ discoverRelays: 1,
171
+ }),
172
+ webRTC(), */
160
173
  ],
161
174
  }),
162
175
 
@@ -165,13 +178,20 @@ export const PeerProvider = (options: PeerOptions) => {
165
178
  new DirectSub(c, {
166
179
  canRelayMessage: true,
167
180
  emitSelf: true,
181
+ /* connectionManager: {
182
+ autoDial: false,
183
+ }, */
168
184
  }),
185
+ identify: identifyService(),
169
186
  },
170
187
  },
171
- directory: !(nodeOptions as WithMemory).inMemory
172
- ? "./repo"
173
- : undefined,
174
- limitSigning: true,
188
+ directory:
189
+ !(nodeOptions as WithMemory).inMemory &&
190
+ !(
191
+ await detectIncognito()
192
+ ).isPrivate
193
+ ? "./repo"
194
+ : undefined,
175
195
  });
176
196
 
177
197
  setConnectionState("connecting");
@@ -190,7 +210,13 @@ export const PeerProvider = (options: PeerOptions) => {
190
210
  );
191
211
  } else {
192
212
  // TODO fix types. When proxy client this will not be available
193
- await newPeer["bootstrap"]?.();
213
+ if (nodeOptions.bootstrap) {
214
+ for (const addr of nodeOptions.bootstrap) {
215
+ await newPeer.dial(addr);
216
+ }
217
+ } else {
218
+ await newPeer["bootstrap"]?.();
219
+ }
194
220
  }
195
221
  setConnectionState("connected");
196
222
  } catch (err: any) {
@@ -209,7 +235,7 @@ export const PeerProvider = (options: PeerOptions) => {
209
235
 
210
236
  // Make sure data flow as expected between tabs and windows locally (offline states)
211
237
 
212
- if (nodeOptions.waitForConnnected) {
238
+ if (nodeOptions.waitForConnnected !== false) {
213
239
  await promise;
214
240
  }
215
241
  } else {
@@ -0,0 +1,49 @@
1
+ import { Program, ProgramEvents, OpenOptions } from "@peerbit/program";
2
+ import { usePeer } from "./usePeer.js";
3
+ import { useEffect, useRef, useState } from "react";
4
+
5
+ const addressOrUndefined = <
6
+ A,
7
+ B extends ProgramEvents,
8
+ P extends Program<A, B>
9
+ >(
10
+ p: P
11
+ ) => {
12
+ try {
13
+ return p.address;
14
+ } catch (error) {
15
+ return undefined;
16
+ }
17
+ };
18
+
19
+ export const useProgram = <A, B extends ProgramEvents, P extends Program<A, B>>(
20
+ addressOrOpen: P | string,
21
+ options?: OpenOptions<A, P>
22
+ ) => {
23
+ const { peer } = usePeer();
24
+ let [program, setProgram] = useState<P | undefined>();
25
+ let programRef = useRef<Promise<P>>();
26
+ let [loading, setLoading] = useState(false);
27
+
28
+ useEffect(() => {
29
+ if (!peer || !addressOrOpen) {
30
+ return;
31
+ }
32
+ setLoading(true);
33
+ programRef.current = peer
34
+ ?.open(addressOrOpen, { ...options, existing: "reuse" })
35
+ .then((p) => {
36
+ setProgram(p);
37
+ return p;
38
+ })
39
+ .finally(() => {
40
+ setLoading(false);
41
+ });
42
+ }, [
43
+ peer?.identity.publicKey.hashcode(),
44
+ typeof addressOrOpen === "string"
45
+ ? addressOrOpen
46
+ : addressOrUndefined(addressOrOpen),
47
+ ]);
48
+ return { program, loading, promise: programRef.current };
49
+ };