@peerbit/react 0.0.17 → 0.0.19
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.
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/usePeer.d.ts +5 -2
- package/lib/esm/usePeer.js +27 -24
- package/lib/esm/usePeer.js.map +1 -1
- package/lib/esm/useQuery.js +38 -22
- package/lib/esm/useQuery.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +1 -0
- package/src/usePeer.tsx +32 -21
- package/src/useQuery.tsx +65 -26
package/lib/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { PeerProvider, PeerContext, usePeer, ClientBusyError, } from "./usePeer.js";
|
|
1
|
+
export { PeerProvider, PeerContext, usePeer, ClientBusyError, type NetworkOption, } from "./usePeer.js";
|
|
2
2
|
export * from "./utils.js";
|
|
3
3
|
export { FastMutex } from "./lockstorage.js";
|
|
4
4
|
export { useProgram } from "./useProgram.js";
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,WAAW,EACX,OAAO,EACP,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,WAAW,EACX,OAAO,EACP,eAAe,GAElB,MAAM,cAAc,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
package/lib/esm/usePeer.d.ts
CHANGED
|
@@ -35,12 +35,15 @@ type IFrameOptions = {
|
|
|
35
35
|
type: "proxy";
|
|
36
36
|
targetOrigin: string;
|
|
37
37
|
};
|
|
38
|
+
export type NetworkOption = {
|
|
39
|
+
type: "local" | "remote";
|
|
40
|
+
bootstrap?: (Multiaddr | string)[];
|
|
41
|
+
};
|
|
38
42
|
type NodeOptions = {
|
|
39
43
|
type?: "node";
|
|
40
|
-
network: "local" | "remote";
|
|
44
|
+
network: "local" | "remote" | NetworkOption;
|
|
41
45
|
waitForConnnected?: boolean;
|
|
42
46
|
keypair?: Ed25519Keypair;
|
|
43
|
-
bootstrap?: (Multiaddr | string)[];
|
|
44
47
|
host?: boolean;
|
|
45
48
|
singleton?: boolean;
|
|
46
49
|
};
|
package/lib/esm/usePeer.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { useContext } from "react";
|
|
3
3
|
import { Peerbit } from "peerbit";
|
|
4
|
-
import { DirectSub } from "@peerbit/pubsub";
|
|
5
|
-
import { yamux } from "@chainsafe/libp2p-yamux";
|
|
6
4
|
import { getFreeKeypair, getClientId, inIframe, cookiesWhereClearedJustNow, } from "./utils.js";
|
|
7
5
|
import { noise } from "@chainsafe/libp2p-noise";
|
|
8
6
|
import { v4 as uuid } from "uuid";
|
|
@@ -10,9 +8,7 @@ import { FastMutex } from "./lockstorage.js";
|
|
|
10
8
|
import sodium from "libsodium-wrappers";
|
|
11
9
|
import { useMount } from "./useMount.js";
|
|
12
10
|
import { createClient, createHost } from "@peerbit/proxy-window";
|
|
13
|
-
import { identify } from "@libp2p/identify";
|
|
14
11
|
import { webSockets } from "@libp2p/websockets";
|
|
15
|
-
import { circuitRelayTransport } from "@libp2p/circuit-relay-v2";
|
|
16
12
|
import * as filters from "@libp2p/websockets/filters";
|
|
17
13
|
import { detectIncognito } from "detectincognitojs";
|
|
18
14
|
const isInStandaloneMode = () => window.matchMedia("(display-mode: standalone)").matches ||
|
|
@@ -36,7 +32,7 @@ const subscribeToUnload = (fn) => {
|
|
|
36
32
|
export const PeerProvider = (options) => {
|
|
37
33
|
const [peer, setPeer] = React.useState(undefined);
|
|
38
34
|
const [promise, setPromise] = React.useState(undefined);
|
|
39
|
-
const [persisted, setPersisted] = React.useState(
|
|
35
|
+
const [persisted, setPersisted] = React.useState(false);
|
|
40
36
|
const [loading, setLoading] = React.useState(true);
|
|
41
37
|
const [connectionState, setConnectionState] = React.useState("disconnected");
|
|
42
38
|
const [tabIndex, setTabIndex] = React.useState(-1);
|
|
@@ -151,32 +147,36 @@ export const PeerProvider = (options) => {
|
|
|
151
147
|
console.log("Create client");
|
|
152
148
|
newPeer = await Peerbit.create({
|
|
153
149
|
libp2p: {
|
|
154
|
-
addresses: {
|
|
150
|
+
addresses: {
|
|
151
|
+
listen: [
|
|
152
|
+
/* "/p2p-circuit" */
|
|
153
|
+
],
|
|
154
|
+
},
|
|
155
155
|
connectionEncrypters: [noise()],
|
|
156
156
|
peerId,
|
|
157
157
|
connectionManager: { maxConnections: 100 },
|
|
158
158
|
connectionMonitor: { enabled: false },
|
|
159
|
-
streamMuxers: [yamux()],
|
|
160
159
|
...(nodeOptions.network === "local"
|
|
161
160
|
? {
|
|
162
161
|
connectionGater: {
|
|
163
162
|
denyDialMultiaddr: () => false,
|
|
164
163
|
},
|
|
165
164
|
transports: [
|
|
166
|
-
webSockets({ filter: filters.all }),
|
|
167
|
-
|
|
165
|
+
webSockets({ filter: filters.all }) /* ,
|
|
166
|
+
circuitRelayTransport(), */,
|
|
168
167
|
],
|
|
169
168
|
}
|
|
170
169
|
: {
|
|
171
170
|
transports: [
|
|
172
|
-
webSockets({ filter: filters.wss }),
|
|
173
|
-
|
|
171
|
+
webSockets({ filter: filters.wss }) /* ,
|
|
172
|
+
circuitRelayTransport(), */,
|
|
174
173
|
],
|
|
175
|
-
})
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
174
|
+
}) /*
|
|
175
|
+
services: {
|
|
176
|
+
pubsub: (c) =>
|
|
177
|
+
new DirectSub(c, { canRelayMessage: true }),
|
|
178
|
+
identify: identify(),
|
|
179
|
+
}, */,
|
|
180
180
|
},
|
|
181
181
|
directory,
|
|
182
182
|
});
|
|
@@ -188,18 +188,21 @@ export const PeerProvider = (options) => {
|
|
|
188
188
|
setConnectionState("connecting");
|
|
189
189
|
const connectFn = async () => {
|
|
190
190
|
try {
|
|
191
|
-
|
|
191
|
+
const network = nodeOptions.network;
|
|
192
|
+
if (network === "local" ||
|
|
193
|
+
(network.type === "local" &&
|
|
194
|
+
!network.bootstrap)) {
|
|
192
195
|
await newPeer.dial("/ip4/127.0.0.1/tcp/8002/ws/p2p/" +
|
|
193
196
|
(await (await fetch("http://localhost:8082/peer/id")).text()));
|
|
194
197
|
}
|
|
198
|
+
else if (!network ||
|
|
199
|
+
network === "remote" ||
|
|
200
|
+
(network.type === "remote" && !network.bootstrap)) {
|
|
201
|
+
await newPeer["bootstrap"]?.();
|
|
202
|
+
}
|
|
195
203
|
else {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
await newPeer.dial(addr);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
await newPeer["bootstrap"]?.();
|
|
204
|
+
for (const addr of network.bootstrap) {
|
|
205
|
+
await newPeer.dial(addr);
|
|
203
206
|
}
|
|
204
207
|
}
|
|
205
208
|
setConnectionState("connected");
|
package/lib/esm/usePeer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePeer.js","sourceRoot":"","sources":["../../src/usePeer.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"usePeer.js","sourceRoot":"","sources":["../../src/usePeer.tsx"],"names":[],"mappings":"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"}
|
package/lib/esm/useQuery.js
CHANGED
|
@@ -17,14 +17,21 @@ export const useQuery = (db, options) => {
|
|
|
17
17
|
const loadingMoreRef = useRef(false);
|
|
18
18
|
const iteratorRef = useRef(null);
|
|
19
19
|
const emptyResultsRef = useRef(false);
|
|
20
|
-
const updateAll = (combined) => {
|
|
21
|
-
logWithId(options, "Loading more items, new combined length", combined.length);
|
|
20
|
+
const updateAll = (combined, fromChange) => {
|
|
21
|
+
logWithId(options, "Loading more items, new combined length", combined.length, "from change", fromChange);
|
|
22
22
|
allRef.current = combined;
|
|
23
23
|
setAll(combined);
|
|
24
24
|
};
|
|
25
|
-
const reset = () => {
|
|
25
|
+
const reset = (fromRef) => {
|
|
26
|
+
if (iteratorRef.current != null && iteratorRef.current !== fromRef) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
26
29
|
emptyResultsRef.current = false;
|
|
27
|
-
|
|
30
|
+
logWithId(options, "reset", {
|
|
31
|
+
id: iteratorRef.current?.id,
|
|
32
|
+
size: allRef.current.length,
|
|
33
|
+
});
|
|
34
|
+
!iteratorRef.current?.iterator.done() &&
|
|
28
35
|
iteratorRef.current?.iterator?.close();
|
|
29
36
|
iteratorRef.current = null;
|
|
30
37
|
setAll([]);
|
|
@@ -35,16 +42,14 @@ export const useQuery = (db, options) => {
|
|
|
35
42
|
// Initialize the iterator only once or when query changes
|
|
36
43
|
useEffect(() => {
|
|
37
44
|
if (!db || db.closed || options?.query === null) {
|
|
38
|
-
reset();
|
|
45
|
+
reset(null);
|
|
39
46
|
return;
|
|
40
47
|
}
|
|
41
48
|
const initIterator = () => {
|
|
42
49
|
// Don't make this async, it will cause issues with the iterator refs
|
|
43
50
|
try {
|
|
44
51
|
// Initialize the iterator and load initial batch.
|
|
45
|
-
|
|
46
|
-
iteratorRef.current?.iterator.close();
|
|
47
|
-
iteratorRef.current = {
|
|
52
|
+
const ref = {
|
|
48
53
|
id: options?.id,
|
|
49
54
|
iterator: db.index.iterate(options?.query ?? {}, {
|
|
50
55
|
local: options?.local ?? true,
|
|
@@ -52,25 +57,33 @@ export const useQuery = (db, options) => {
|
|
|
52
57
|
resolve: options?.resolve,
|
|
53
58
|
}),
|
|
54
59
|
};
|
|
55
|
-
|
|
60
|
+
iteratorRef.current = ref;
|
|
61
|
+
logWithId(options, "Initializing iterator", {
|
|
62
|
+
id: options?.id,
|
|
63
|
+
options: options,
|
|
64
|
+
});
|
|
56
65
|
loadMore(); // initial load
|
|
66
|
+
return ref;
|
|
57
67
|
}
|
|
58
68
|
catch (error) {
|
|
59
69
|
console.error("Error initializing iterator", error);
|
|
70
|
+
return null;
|
|
60
71
|
}
|
|
61
72
|
};
|
|
62
73
|
// Reset state when the db or query changes.
|
|
63
|
-
reset();
|
|
64
|
-
initIterator();
|
|
74
|
+
reset(iteratorRef.current);
|
|
75
|
+
const newIteratorRef = initIterator();
|
|
65
76
|
let handleChange = undefined;
|
|
66
|
-
if (options?.onChange) {
|
|
77
|
+
if (options?.onChange && options?.onChange?.merge !== false) {
|
|
67
78
|
let mergeFunction = typeof options.onChange.merge === "function"
|
|
68
79
|
? options.onChange.merge
|
|
69
80
|
: (change) => change;
|
|
70
81
|
handleChange = async (e) => {
|
|
71
82
|
// while we are iterating, we might get new documents.. so this method inserts them where they should be
|
|
72
83
|
let filteredChange = await mergeFunction(e.detail);
|
|
73
|
-
if (!filteredChange
|
|
84
|
+
if (!filteredChange ||
|
|
85
|
+
(filteredChange.added.length === 0 &&
|
|
86
|
+
filteredChange.removed.length === 0)) {
|
|
74
87
|
return;
|
|
75
88
|
}
|
|
76
89
|
let merged = [];
|
|
@@ -80,13 +93,15 @@ export const useQuery = (db, options) => {
|
|
|
80
93
|
];
|
|
81
94
|
}
|
|
82
95
|
else {
|
|
83
|
-
await db.index.updateResults(allRef.current, filteredChange, options?.query || {}, options?.resolve ?? true);
|
|
96
|
+
merged = await db.index.updateResults(allRef.current, filteredChange, options?.query || {}, options?.resolve ?? true);
|
|
97
|
+
logWithId(options, "After update", allRef.current, merged);
|
|
84
98
|
const expectedDiff = filteredChange.added.length -
|
|
85
99
|
filteredChange.removed.length;
|
|
86
100
|
if (merged === allRef.current ||
|
|
87
101
|
(expectedDiff !== 0 &&
|
|
88
102
|
merged.length === allRef.current.length)) {
|
|
89
103
|
// no change
|
|
104
|
+
logWithId(options, "no change after merge");
|
|
90
105
|
return;
|
|
91
106
|
}
|
|
92
107
|
}
|
|
@@ -96,18 +111,18 @@ export const useQuery = (db, options) => {
|
|
|
96
111
|
merged: merged.length,
|
|
97
112
|
allRef: allRef.current.length,
|
|
98
113
|
});
|
|
99
|
-
updateAll(options?.reverse ? merged.reverse() : merged);
|
|
114
|
+
updateAll(options?.reverse ? merged.reverse() : merged, e.detail);
|
|
100
115
|
};
|
|
101
116
|
db.events.addEventListener("change", handleChange);
|
|
102
117
|
}
|
|
103
118
|
return () => {
|
|
104
119
|
handleChange &&
|
|
105
120
|
db.events.removeEventListener("change", handleChange);
|
|
106
|
-
reset();
|
|
121
|
+
reset(newIteratorRef);
|
|
107
122
|
};
|
|
108
123
|
}, [
|
|
109
124
|
db?.closed ? undefined : db?.address,
|
|
110
|
-
options?.id ? options?.id : options?.query,
|
|
125
|
+
options?.id != null ? options?.id : options?.query,
|
|
111
126
|
options?.resolve,
|
|
112
127
|
]);
|
|
113
128
|
// Define the loadMore function
|
|
@@ -130,9 +145,9 @@ export const useQuery = (db, options) => {
|
|
|
130
145
|
try {
|
|
131
146
|
// Fetch next batchSize number of items:
|
|
132
147
|
await db?.log.waitForReplicators({ timeout: 1e4 });
|
|
133
|
-
logWithId(options, "loadMore: loading more items for iterator" +
|
|
134
|
-
iteratorRef.current?.id);
|
|
135
148
|
let newItems = await iterator.iterator.next(batchSize);
|
|
149
|
+
logWithId(options, "loadMore: loading more items for iterator " +
|
|
150
|
+
iteratorRef.current?.id, newItems, "should resolve?: " + options?.resolve, "query local?: " + options?.local, "query remote?: " + options?.remote, "isReplicating: " + (await db?.log.isReplicating()));
|
|
136
151
|
if (options?.transform) {
|
|
137
152
|
newItems = await Promise.all(newItems.map((item) => options.transform(item)));
|
|
138
153
|
}
|
|
@@ -157,11 +172,12 @@ export const useQuery = (db, options) => {
|
|
|
157
172
|
const combined = options?.reverse
|
|
158
173
|
? [...newItemsNoHash.reverse(), ...prev]
|
|
159
174
|
: [...prev, ...newItemsNoHash];
|
|
160
|
-
updateAll(combined);
|
|
175
|
+
updateAll(combined, null);
|
|
161
176
|
}
|
|
162
177
|
else {
|
|
163
|
-
logWithId(options, "no new items, not updating state for iterator" +
|
|
164
|
-
iteratorRef.current?.id
|
|
178
|
+
logWithId(options, "no new items, not updating state for iterator " +
|
|
179
|
+
iteratorRef.current?.id +
|
|
180
|
+
" existing results length", allRef.current.length);
|
|
165
181
|
}
|
|
166
182
|
}
|
|
167
183
|
catch (error) {
|
package/lib/esm/useQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../src/useQuery.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EACH,WAAW,GAKd,MAAM,mBAAmB,CAAC;AAS3B,MAAM,SAAS,GAAG,CACd,OAAyD,EACzD,GAAG,IAAW,EAChB,EAAE;IACA,IAAI,CAAC,OAAO,EAAE,KAAK;QAAE,OAAO;IAE5B,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,CAAC;SAAM,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAMpB,EAAoB,EACpB,OA2BgB,EAClB,EAAE;IACA,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAoB,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,MAAM,CAGhB,IAAI,CAAC,CAAC;IAChB,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtC,MAAM,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../src/useQuery.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peerbit/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.19",
|
|
4
4
|
"homepage": "https://dao-xyz.github.io/peerbit-examples",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"last 1 safari version"
|
|
71
71
|
]
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "82376707f691741fbd87a6deff08fff4ce6dd5b2"
|
|
74
74
|
}
|
package/src/index.ts
CHANGED
package/src/usePeer.tsx
CHANGED
|
@@ -2,7 +2,6 @@ import React, { useContext } from "react";
|
|
|
2
2
|
import { Multiaddr } from "@multiformats/multiaddr";
|
|
3
3
|
import { Peerbit } from "peerbit";
|
|
4
4
|
import { DirectSub } from "@peerbit/pubsub";
|
|
5
|
-
import { yamux } from "@chainsafe/libp2p-yamux";
|
|
6
5
|
import {
|
|
7
6
|
getFreeKeypair,
|
|
8
7
|
getClientId,
|
|
@@ -80,12 +79,16 @@ type IFrameOptions = {
|
|
|
80
79
|
targetOrigin: string;
|
|
81
80
|
};
|
|
82
81
|
|
|
82
|
+
export type NetworkOption = {
|
|
83
|
+
type: "local" | "remote";
|
|
84
|
+
bootstrap?: (Multiaddr | string)[];
|
|
85
|
+
};
|
|
86
|
+
|
|
83
87
|
type NodeOptions = {
|
|
84
88
|
type?: "node";
|
|
85
|
-
network: "local" | "remote";
|
|
89
|
+
network: "local" | "remote" | NetworkOption;
|
|
86
90
|
waitForConnnected?: boolean;
|
|
87
91
|
keypair?: Ed25519Keypair;
|
|
88
|
-
bootstrap?: (Multiaddr | string)[];
|
|
89
92
|
host?: boolean;
|
|
90
93
|
singleton?: boolean;
|
|
91
94
|
};
|
|
@@ -112,9 +115,7 @@ export const PeerProvider = (options: PeerOptions) => {
|
|
|
112
115
|
const [promise, setPromise] = React.useState<Promise<void> | undefined>(
|
|
113
116
|
undefined
|
|
114
117
|
);
|
|
115
|
-
const [persisted, setPersisted] = React.useState<boolean
|
|
116
|
-
undefined
|
|
117
|
-
);
|
|
118
|
+
const [persisted, setPersisted] = React.useState<boolean>(false);
|
|
118
119
|
const [loading, setLoading] = React.useState<boolean>(true);
|
|
119
120
|
const [connectionState, setConnectionState] =
|
|
120
121
|
React.useState<ConnectionStatus>("disconnected");
|
|
@@ -246,33 +247,36 @@ export const PeerProvider = (options: PeerOptions) => {
|
|
|
246
247
|
console.log("Create client");
|
|
247
248
|
newPeer = await Peerbit.create({
|
|
248
249
|
libp2p: {
|
|
249
|
-
addresses: {
|
|
250
|
+
addresses: {
|
|
251
|
+
listen: [
|
|
252
|
+
/* "/p2p-circuit" */
|
|
253
|
+
],
|
|
254
|
+
},
|
|
250
255
|
connectionEncrypters: [noise()],
|
|
251
256
|
peerId,
|
|
252
257
|
connectionManager: { maxConnections: 100 },
|
|
253
258
|
connectionMonitor: { enabled: false },
|
|
254
|
-
streamMuxers: [yamux()],
|
|
255
259
|
...(nodeOptions.network === "local"
|
|
256
260
|
? {
|
|
257
261
|
connectionGater: {
|
|
258
262
|
denyDialMultiaddr: () => false,
|
|
259
263
|
},
|
|
260
264
|
transports: [
|
|
261
|
-
webSockets({ filter: filters.all }),
|
|
262
|
-
|
|
265
|
+
webSockets({ filter: filters.all }) /* ,
|
|
266
|
+
circuitRelayTransport(), */,
|
|
263
267
|
],
|
|
264
268
|
}
|
|
265
269
|
: {
|
|
266
270
|
transports: [
|
|
267
|
-
webSockets({ filter: filters.wss }),
|
|
268
|
-
|
|
271
|
+
webSockets({ filter: filters.wss }) /* ,
|
|
272
|
+
circuitRelayTransport(), */,
|
|
269
273
|
],
|
|
270
|
-
})
|
|
274
|
+
}) /*
|
|
271
275
|
services: {
|
|
272
276
|
pubsub: (c) =>
|
|
273
277
|
new DirectSub(c, { canRelayMessage: true }),
|
|
274
278
|
identify: identify(),
|
|
275
|
-
},
|
|
279
|
+
}, */,
|
|
276
280
|
},
|
|
277
281
|
directory,
|
|
278
282
|
});
|
|
@@ -287,7 +291,12 @@ export const PeerProvider = (options: PeerOptions) => {
|
|
|
287
291
|
|
|
288
292
|
const connectFn = async () => {
|
|
289
293
|
try {
|
|
290
|
-
|
|
294
|
+
const network = nodeOptions.network;
|
|
295
|
+
if (
|
|
296
|
+
network === "local" ||
|
|
297
|
+
((network as NetworkOption).type === "local" &&
|
|
298
|
+
!(network as NetworkOption).bootstrap)
|
|
299
|
+
) {
|
|
291
300
|
await newPeer.dial(
|
|
292
301
|
"/ip4/127.0.0.1/tcp/8002/ws/p2p/" +
|
|
293
302
|
(await (
|
|
@@ -296,13 +305,15 @@ export const PeerProvider = (options: PeerOptions) => {
|
|
|
296
305
|
)
|
|
297
306
|
).text())
|
|
298
307
|
);
|
|
308
|
+
} else if (
|
|
309
|
+
!network ||
|
|
310
|
+
network === "remote" ||
|
|
311
|
+
(network.type === "remote" && !network.bootstrap)
|
|
312
|
+
) {
|
|
313
|
+
await newPeer["bootstrap"]?.();
|
|
299
314
|
} else {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
await newPeer.dial(addr);
|
|
303
|
-
}
|
|
304
|
-
} else {
|
|
305
|
-
await newPeer["bootstrap"]?.();
|
|
315
|
+
for (const addr of network.bootstrap!) {
|
|
316
|
+
await newPeer.dial(addr);
|
|
306
317
|
}
|
|
307
318
|
}
|
|
308
319
|
setConnectionState("connected");
|
package/src/useQuery.tsx
CHANGED
|
@@ -73,11 +73,16 @@ export const useQuery = <
|
|
|
73
73
|
} | null>(null);
|
|
74
74
|
const emptyResultsRef = useRef(false);
|
|
75
75
|
|
|
76
|
-
const updateAll = (
|
|
76
|
+
const updateAll = (
|
|
77
|
+
combined: WithContext<RT>[],
|
|
78
|
+
fromChange?: DocumentsChange<any> | null
|
|
79
|
+
) => {
|
|
77
80
|
logWithId(
|
|
78
81
|
options,
|
|
79
82
|
"Loading more items, new combined length",
|
|
80
|
-
combined.length
|
|
83
|
+
combined.length,
|
|
84
|
+
"from change",
|
|
85
|
+
fromChange
|
|
81
86
|
);
|
|
82
87
|
|
|
83
88
|
allRef.current = combined;
|
|
@@ -85,9 +90,23 @@ export const useQuery = <
|
|
|
85
90
|
setAll(combined);
|
|
86
91
|
};
|
|
87
92
|
|
|
88
|
-
const reset = (
|
|
93
|
+
const reset = (
|
|
94
|
+
fromRef: {
|
|
95
|
+
id?: string;
|
|
96
|
+
iterator: ResultsIterator<WithContext<RT>>;
|
|
97
|
+
} | null
|
|
98
|
+
) => {
|
|
99
|
+
if (iteratorRef.current != null && iteratorRef.current !== fromRef) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
89
103
|
emptyResultsRef.current = false;
|
|
90
|
-
|
|
104
|
+
logWithId(options, "reset", {
|
|
105
|
+
id: iteratorRef.current?.id,
|
|
106
|
+
size: allRef.current.length,
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
!iteratorRef.current?.iterator.done() &&
|
|
91
110
|
iteratorRef.current?.iterator?.close();
|
|
92
111
|
iteratorRef.current = null;
|
|
93
112
|
setAll([]);
|
|
@@ -99,7 +118,7 @@ export const useQuery = <
|
|
|
99
118
|
// Initialize the iterator only once or when query changes
|
|
100
119
|
useEffect(() => {
|
|
101
120
|
if (!db || db.closed || options?.query === null) {
|
|
102
|
-
reset();
|
|
121
|
+
reset(null);
|
|
103
122
|
return;
|
|
104
123
|
}
|
|
105
124
|
const initIterator = () => {
|
|
@@ -107,9 +126,7 @@ export const useQuery = <
|
|
|
107
126
|
try {
|
|
108
127
|
// Initialize the iterator and load initial batch.
|
|
109
128
|
|
|
110
|
-
|
|
111
|
-
iteratorRef.current?.iterator.close();
|
|
112
|
-
iteratorRef.current = {
|
|
129
|
+
const ref = {
|
|
113
130
|
id: options?.id,
|
|
114
131
|
iterator: db.index.iterate(options?.query ?? {}, {
|
|
115
132
|
local: options?.local ?? true,
|
|
@@ -117,33 +134,42 @@ export const useQuery = <
|
|
|
117
134
|
resolve: options?.resolve as any,
|
|
118
135
|
}) as any as ResultsIterator<WithContext<RT>>,
|
|
119
136
|
};
|
|
137
|
+
iteratorRef.current = ref;
|
|
120
138
|
|
|
121
|
-
logWithId(options, "Initializing iterator",
|
|
139
|
+
logWithId(options, "Initializing iterator", {
|
|
140
|
+
id: options?.id,
|
|
141
|
+
options: options,
|
|
142
|
+
});
|
|
122
143
|
|
|
123
144
|
loadMore(); // initial load
|
|
145
|
+
return ref;
|
|
124
146
|
} catch (error) {
|
|
125
147
|
console.error("Error initializing iterator", error);
|
|
148
|
+
return null;
|
|
126
149
|
}
|
|
127
150
|
};
|
|
128
151
|
|
|
129
152
|
// Reset state when the db or query changes.
|
|
130
|
-
reset();
|
|
131
|
-
initIterator();
|
|
153
|
+
reset(iteratorRef.current);
|
|
154
|
+
const newIteratorRef = initIterator();
|
|
132
155
|
|
|
133
156
|
let handleChange:
|
|
134
157
|
| undefined
|
|
135
158
|
| ((e: CustomEvent<DocumentsChange<T>>) => void | Promise<void>) =
|
|
136
159
|
undefined;
|
|
137
|
-
if (options?.onChange) {
|
|
160
|
+
if (options?.onChange && options?.onChange?.merge !== false) {
|
|
138
161
|
let mergeFunction =
|
|
139
162
|
typeof options.onChange.merge === "function"
|
|
140
163
|
? options.onChange.merge
|
|
141
164
|
: (change: DocumentsChange<T>) => change;
|
|
142
165
|
handleChange = async (e: CustomEvent<DocumentsChange<T>>) => {
|
|
143
166
|
// while we are iterating, we might get new documents.. so this method inserts them where they should be
|
|
144
|
-
|
|
145
167
|
let filteredChange = await mergeFunction(e.detail);
|
|
146
|
-
if (
|
|
168
|
+
if (
|
|
169
|
+
!filteredChange ||
|
|
170
|
+
(filteredChange.added.length === 0 &&
|
|
171
|
+
filteredChange.removed.length === 0)
|
|
172
|
+
) {
|
|
147
173
|
return;
|
|
148
174
|
}
|
|
149
175
|
let merged: WithContext<RT>[] = [];
|
|
@@ -155,12 +181,13 @@ export const useQuery = <
|
|
|
155
181
|
),
|
|
156
182
|
];
|
|
157
183
|
} else {
|
|
158
|
-
await db.index.updateResults(
|
|
184
|
+
merged = await db.index.updateResults(
|
|
159
185
|
allRef.current,
|
|
160
186
|
filteredChange,
|
|
161
187
|
options?.query || {},
|
|
162
188
|
options?.resolve ?? true
|
|
163
189
|
);
|
|
190
|
+
logWithId(options, "After update", allRef.current, merged);
|
|
164
191
|
const expectedDiff =
|
|
165
192
|
filteredChange.added.length -
|
|
166
193
|
filteredChange.removed.length;
|
|
@@ -171,6 +198,7 @@ export const useQuery = <
|
|
|
171
198
|
merged.length === allRef.current.length)
|
|
172
199
|
) {
|
|
173
200
|
// no change
|
|
201
|
+
logWithId(options, "no change after merge");
|
|
174
202
|
return;
|
|
175
203
|
}
|
|
176
204
|
}
|
|
@@ -182,7 +210,10 @@ export const useQuery = <
|
|
|
182
210
|
allRef: allRef.current.length,
|
|
183
211
|
});
|
|
184
212
|
|
|
185
|
-
updateAll(
|
|
213
|
+
updateAll(
|
|
214
|
+
options?.reverse ? merged.reverse() : merged,
|
|
215
|
+
e.detail
|
|
216
|
+
);
|
|
186
217
|
};
|
|
187
218
|
db.events.addEventListener("change", handleChange);
|
|
188
219
|
}
|
|
@@ -190,11 +221,11 @@ export const useQuery = <
|
|
|
190
221
|
return () => {
|
|
191
222
|
handleChange &&
|
|
192
223
|
db.events.removeEventListener("change", handleChange);
|
|
193
|
-
reset();
|
|
224
|
+
reset(newIteratorRef);
|
|
194
225
|
};
|
|
195
226
|
}, [
|
|
196
227
|
db?.closed ? undefined : db?.address,
|
|
197
|
-
options?.id ? options?.id : options?.query,
|
|
228
|
+
options?.id != null ? options?.id : options?.query,
|
|
198
229
|
options?.resolve,
|
|
199
230
|
]);
|
|
200
231
|
|
|
@@ -221,14 +252,20 @@ export const useQuery = <
|
|
|
221
252
|
try {
|
|
222
253
|
// Fetch next batchSize number of items:
|
|
223
254
|
await db?.log.waitForReplicators({ timeout: 1e4 });
|
|
224
|
-
|
|
225
|
-
options,
|
|
226
|
-
"loadMore: loading more items for iterator" +
|
|
227
|
-
iteratorRef.current?.id
|
|
228
|
-
);
|
|
255
|
+
|
|
229
256
|
let newItems: WithContext<RT>[] = await iterator.iterator.next(
|
|
230
257
|
batchSize
|
|
231
258
|
);
|
|
259
|
+
logWithId(
|
|
260
|
+
options,
|
|
261
|
+
"loadMore: loading more items for iterator " +
|
|
262
|
+
iteratorRef.current?.id,
|
|
263
|
+
newItems,
|
|
264
|
+
"should resolve?: " + options?.resolve,
|
|
265
|
+
"query local?: " + options?.local,
|
|
266
|
+
"query remote?: " + options?.remote,
|
|
267
|
+
"isReplicating: " + (await db?.log.isReplicating())
|
|
268
|
+
);
|
|
232
269
|
|
|
233
270
|
if (options?.transform) {
|
|
234
271
|
newItems = await Promise.all(
|
|
@@ -265,12 +302,14 @@ export const useQuery = <
|
|
|
265
302
|
const combined = options?.reverse
|
|
266
303
|
? [...newItemsNoHash.reverse(), ...prev]
|
|
267
304
|
: [...prev, ...newItemsNoHash];
|
|
268
|
-
updateAll(combined);
|
|
305
|
+
updateAll(combined, null);
|
|
269
306
|
} else {
|
|
270
307
|
logWithId(
|
|
271
308
|
options,
|
|
272
|
-
"no new items, not updating state for iterator" +
|
|
273
|
-
iteratorRef.current?.id
|
|
309
|
+
"no new items, not updating state for iterator " +
|
|
310
|
+
iteratorRef.current?.id +
|
|
311
|
+
" existing results length",
|
|
312
|
+
allRef.current.length
|
|
274
313
|
);
|
|
275
314
|
}
|
|
276
315
|
} catch (error) {
|