@peerbit/react 0.0.13 → 0.0.14

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.
@@ -3,7 +3,7 @@ import React, { useContext } from "react";
3
3
  import { Peerbit } from "peerbit";
4
4
  import { DirectSub } from "@peerbit/pubsub";
5
5
  import { yamux } from "@chainsafe/libp2p-yamux";
6
- import { getFreeKeypair, getTabId, inIframe, cookiesWhereClearedJustNow, } from "./utils.js";
6
+ import { getFreeKeypair, getClientId, inIframe, cookiesWhereClearedJustNow, } from "./utils.js";
7
7
  import { noise } from "@chainsafe/libp2p-noise";
8
8
  import { v4 as uuid } from "uuid";
9
9
  import { FastMutex } from "./lockstorage.js";
@@ -15,6 +15,12 @@ import { webSockets } from "@libp2p/websockets";
15
15
  import { circuitRelayTransport } from "@libp2p/circuit-relay-v2";
16
16
  import * as filters from "@libp2p/websockets/filters";
17
17
  import { detectIncognito } from "detectincognitojs";
18
+ export class ClientBusyError extends Error {
19
+ constructor(message) {
20
+ super(message);
21
+ this.name = "CreateClientError";
22
+ }
23
+ }
18
24
  if (!window.name) {
19
25
  window.name = uuid();
20
26
  }
@@ -26,44 +32,97 @@ export const PeerProvider = (options) => {
26
32
  const [persisted, setPersisted] = React.useState(undefined);
27
33
  const [loading, setLoading] = React.useState(true);
28
34
  const [connectionState, setConnectionState] = React.useState("disconnected");
29
- const memo = React.useMemo(() => ({
30
- peer,
31
- promise,
35
+ const [tabIndex, setTabIndex] = React.useState(-1);
36
+ const [error, setError] = React.useState(undefined); // <-- error state
37
+ // Decide which options to use based on whether we're in an iframe.
38
+ // If options.top is defined, assume we have separate settings for iframe vs. host.
39
+ const nodeOptions = options.top
40
+ ? inIframe()
41
+ ? options.iframe
42
+ : { ...options, ...options.top } // we merge root and top options, TODO should this be made in a different way to prevent confusion about top props?
43
+ : options;
44
+ // If running as a proxy (iframe), expect a targetOrigin.
45
+ const computedTargetOrigin = nodeOptions.type === "proxy"
46
+ ? nodeOptions.targetOrigin
47
+ : undefined;
48
+ const memo = React.useMemo(() => {
49
+ if (nodeOptions.type === "proxy") {
50
+ return {
51
+ type: "proxy",
52
+ peer,
53
+ promise,
54
+ loading,
55
+ status: connectionState,
56
+ persisted,
57
+ targetOrigin: computedTargetOrigin,
58
+ error,
59
+ };
60
+ }
61
+ else {
62
+ return {
63
+ type: "node",
64
+ peer,
65
+ promise,
66
+ loading,
67
+ status: connectionState,
68
+ persisted,
69
+ tabIndex,
70
+ error,
71
+ };
72
+ }
73
+ }, [
32
74
  loading,
75
+ promise,
33
76
  connectionState,
34
- status: connectionState,
35
- persisted: persisted,
36
- }), [
37
- loading,
38
- !!promise,
39
- connectionState,
40
- peer?.identity?.publicKey?.hashcode(),
77
+ peer,
41
78
  persisted,
79
+ tabIndex,
80
+ computedTargetOrigin,
81
+ error,
42
82
  ]);
43
83
  useMount(() => {
44
84
  setLoading(true);
45
85
  const fn = async () => {
46
86
  await sodium.ready;
47
- if (peer) {
48
- await peer.stop();
49
- setPeer(undefined);
50
- }
51
87
  let newPeer;
52
- const nodeOptions = options.top
53
- ? inIframe()
54
- ? options.iframe
55
- : options.top
56
- : options;
57
88
  if (nodeOptions.type !== "proxy") {
58
89
  const releaseFirstLock = cookiesWhereClearedJustNow();
59
- const nodeId = nodeOptions.keypair ||
60
- (await getFreeKeypair("", new FastMutex({
61
- clientId: getTabId(),
62
- timeout: 1000,
63
- }), undefined, {
64
- releaseFirstLock, // when clearing cookies sometimes the localStorage is not cleared immediately so we need to release the lock forcefully. TODO investigate why this is happening
65
- releaseLockIfSameId: true, // reuse keypairs from same tab, (force release)
66
- })).key;
90
+ const sessionId = getClientId("session");
91
+ const mutex = new FastMutex({
92
+ clientId: sessionId,
93
+ timeout: 1e3,
94
+ });
95
+ if (nodeOptions.singleton) {
96
+ const localId = getClientId("local");
97
+ try {
98
+ const lockKey = localId + "-singleton";
99
+ globalThis.onbeforeunload = function () {
100
+ mutex.release(lockKey);
101
+ };
102
+ await mutex.lock(lockKey, () => true, {
103
+ replaceIfSameClient: true,
104
+ });
105
+ }
106
+ catch (error) {
107
+ console.error("Failed to lock singleton client", error);
108
+ throw new ClientBusyError("Failed to lock single client");
109
+ }
110
+ }
111
+ let nodeId;
112
+ if (nodeOptions.keypair) {
113
+ nodeId = nodeOptions.keypair;
114
+ }
115
+ else {
116
+ const kp = await getFreeKeypair("", mutex, undefined, {
117
+ releaseFirstLock,
118
+ releaseLockIfSameId: true,
119
+ });
120
+ globalThis.onbeforeunload = function () {
121
+ mutex.release(kp.path);
122
+ };
123
+ nodeId = kp.key;
124
+ setTabIndex(kp.index);
125
+ }
67
126
  const peerId = nodeId.toPeerId();
68
127
  let directory = undefined;
69
128
  if (!nodeOptions.inMemory &&
@@ -72,70 +131,39 @@ export const PeerProvider = (options) => {
72
131
  setPersisted(persisted);
73
132
  if (!persisted) {
74
133
  setPersisted(false);
75
- if (window["chrome"]) {
76
- console.error("Request persistance but was not given permission by browser. Adding this site to your bookmarks or enabling push notifications might allow your chrome browser to persist data");
77
- }
78
- else {
79
- console.error("Request persistance but was not given permission by browser.");
80
- }
134
+ console.error("Request persistence but permission was not granted by browser.");
81
135
  }
82
136
  else {
83
137
  directory = `./repo/${peerId.toString()}/`;
84
138
  }
85
139
  }
86
- // We create a new directrory to make tab to tab communication go smoothly
87
140
  console.log("Create client");
88
141
  newPeer = await Peerbit.create({
89
142
  libp2p: {
90
- addresses: {
91
- listen: [
92
- "/p2p-circuit",
93
- /* "/webrtc" */
94
- ], // TMP disable because flaky behaviour with libp2p 1.8.1
95
- },
143
+ addresses: { listen: ["/p2p-circuit"] },
96
144
  connectionEncrypters: [noise()],
97
- peerId, //, having the same peer accross broswers does not work, only one tab will be recognized by other peers
98
- connectionManager: {
99
- maxConnections: 100,
100
- },
101
- connectionMonitor: {
102
- enabled: false,
103
- },
145
+ peerId,
146
+ connectionManager: { maxConnections: 100 },
147
+ connectionMonitor: { enabled: false },
104
148
  streamMuxers: [yamux()],
105
149
  ...(nodeOptions.network === "local"
106
150
  ? {
107
151
  connectionGater: {
108
- denyDialMultiaddr: () => {
109
- // by default we refuse to dial local addresses from the browser since they
110
- // are usually sent by remote peers broadcasting undialable multiaddrs but
111
- // here we are explicitly connecting to a local node so do not deny dialing
112
- // any discovered address
113
- return false;
114
- },
152
+ denyDialMultiaddr: () => false,
115
153
  },
116
154
  transports: [
117
- // Add websocket impl so we can connect to "unsafe" ws (production only allows wss)
118
- webSockets({
119
- filter: filters.all,
120
- }),
155
+ webSockets({ filter: filters.all }),
121
156
  circuitRelayTransport(),
122
- /* webRTC(), */ // TMP disable because flaky behaviour with libp2p 1.8.1
123
157
  ],
124
158
  }
125
159
  : {
126
160
  transports: [
127
161
  webSockets({ filter: filters.wss }),
128
162
  circuitRelayTransport(),
129
- /* webRTC(), */ // TMP disable because flaky behaviour with libp2p 1.8.1
130
163
  ],
131
164
  }),
132
165
  services: {
133
- pubsub: (c) => new DirectSub(c, {
134
- canRelayMessage: true,
135
- /* connectionManager: {
136
- autoDial: false,
137
- }, */
138
- }),
166
+ pubsub: (c) => new DirectSub(c, { canRelayMessage: true }),
139
167
  identify: identify(),
140
168
  },
141
169
  },
@@ -147,7 +175,6 @@ export const PeerProvider = (options) => {
147
175
  network: nodeOptions.network === "local" ? "local" : "remote",
148
176
  });
149
177
  setConnectionState("connecting");
150
- // Resolve bootstrap nodes async (we want to return before this is done)
151
178
  const connectFn = async () => {
152
179
  try {
153
180
  if (nodeOptions.network === "local") {
@@ -155,7 +182,6 @@ export const PeerProvider = (options) => {
155
182
  (await (await fetch("http://localhost:8082/peer/id")).text()));
156
183
  }
157
184
  else {
158
- // TODO fix types. When proxy client this will not be available
159
185
  if (nodeOptions.bootstrap) {
160
186
  for (const addr of nodeOptions.bootstrap) {
161
187
  await newPeer.dial(addr);
@@ -180,18 +206,27 @@ export const PeerProvider = (options) => {
180
206
  promise.then(() => {
181
207
  console.log("Bootstrap done");
182
208
  });
183
- // Make sure data flow as expected between tabs and windows locally (offline states)
184
209
  if (nodeOptions.waitForConnnected !== false) {
185
210
  await promise;
186
211
  }
187
212
  }
188
213
  else {
214
+ // When in proxy mode (iframe), use the provided targetOrigin.
189
215
  newPeer = await createClient(nodeOptions.targetOrigin);
190
216
  }
191
217
  setPeer(newPeer);
192
218
  setLoading(false);
193
219
  };
194
- setPromise(fn());
220
+ const fnWithErrorHandling = async () => {
221
+ try {
222
+ await fn();
223
+ }
224
+ catch (error) {
225
+ setError(error);
226
+ setLoading(false);
227
+ }
228
+ };
229
+ setPromise(fnWithErrorHandling());
195
230
  });
196
231
  return (_jsx(PeerContext.Provider, { value: memo, children: options.children }));
197
232
  };
@@ -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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"}
@@ -1,11 +1,16 @@
1
1
  import { Program, OpenOptions, ProgramEvents } from "@peerbit/program";
2
+ import { PublicSignKey } from "@peerbit/crypto";
2
3
  type ExtractArgs<T> = T extends Program<infer Args> ? Args : never;
3
4
  type ExtractEvents<T> = T extends Program<any, infer Events> ? Events : never;
4
- export declare const useProgram: <P extends Program<ExtractArgs<P>, ExtractEvents<P>> & Program<any, ProgramEvents>>(addressOrOpen?: P | string, options?: OpenOptions<P>) => {
5
+ export declare const useProgram: <P extends Program<ExtractArgs<P>, ExtractEvents<P>> & Program<any, ProgramEvents>>(addressOrOpen?: P | string, options?: OpenOptions<P> & {
6
+ id?: string;
7
+ keepOpenOnUnmount?: boolean;
8
+ }) => {
5
9
  program: P | undefined;
6
10
  session: any;
7
11
  loading: boolean;
8
12
  promise: Promise<P> | undefined;
9
- peerCounter: number;
13
+ peers: PublicSignKey[];
14
+ id: string | undefined;
10
15
  };
11
16
  export {};
@@ -1,21 +1,25 @@
1
1
  import { usePeer } from "./usePeer.js";
2
2
  import { useEffect, useReducer, useRef, useState } from "react";
3
- const addressOrUndefined = (p) => {
3
+ const addressOrDefined = (p) => {
4
4
  try {
5
5
  return p?.address;
6
6
  }
7
7
  catch (error) {
8
- return undefined;
8
+ return !!p;
9
9
  }
10
10
  };
11
11
  export const useProgram = (addressOrOpen, options) => {
12
12
  const { peer } = usePeer();
13
13
  let [program, setProgram] = useState();
14
+ const [id, setId] = useState(options?.id);
14
15
  let [loading, setLoading] = useState(true);
15
16
  const [session, forceUpdate] = useReducer((x) => x + 1, 0);
16
17
  let programLoadingRef = useRef();
17
- const [peerCounter, setPeerCounter] = useState(1);
18
+ const [peers, setPeers] = useState([]);
18
19
  let closingRef = useRef(Promise.resolve());
20
+ /* if (options?.debug) {
21
+ console.log("useProgram", addressOrOpen, options);
22
+ } */
19
23
  useEffect(() => {
20
24
  if (!peer || !addressOrOpen) {
21
25
  return;
@@ -28,17 +32,28 @@ export const useProgram = (addressOrOpen, options) => {
28
32
  .then((p) => {
29
33
  changeListener = () => {
30
34
  p.getReady().then((set) => {
31
- setPeerCounter(set.size);
35
+ setPeers([...set.values()]);
32
36
  });
33
37
  };
34
38
  p.events.addEventListener("join", changeListener);
35
39
  p.events.addEventListener("leave", changeListener);
36
- p.getReady().then((set) => {
37
- setPeerCounter(set.size);
40
+ p.getReady()
41
+ .then((set) => {
42
+ setPeers([...set.values()]);
43
+ })
44
+ .catch((e) => {
45
+ console.log("Error getReady()", e);
38
46
  });
39
47
  setProgram(p);
40
48
  forceUpdate();
49
+ if (options?.id) {
50
+ setId(p.address);
51
+ }
41
52
  return p;
53
+ })
54
+ .catch((e) => {
55
+ console.error("failed to open", e);
56
+ throw e;
42
57
  })
43
58
  .finally(() => {
44
59
  setLoading(false);
@@ -50,28 +65,36 @@ export const useProgram = (addressOrOpen, options) => {
50
65
  // TODO don't close on reopen the same db?
51
66
  if (programLoadingRef.current) {
52
67
  closingRef.current =
53
- programLoadingRef.current.then((p) => p.close().then(() => {
54
- p.events.removeEventListener("join", changeListener);
55
- p.events.removeEventListener("leave", changeListener);
56
- if (programLoadingRef.current === startRef) {
57
- setProgram(undefined);
58
- programLoadingRef.current = undefined;
68
+ programLoadingRef.current.then((p) => {
69
+ const unsubscribe = () => {
70
+ p.events.removeEventListener("join", changeListener);
71
+ p.events.removeEventListener("leave", changeListener);
72
+ if (programLoadingRef.current === startRef) {
73
+ setProgram(undefined);
74
+ programLoadingRef.current = undefined;
75
+ }
76
+ };
77
+ if (options?.keepOpenOnUnmount) {
78
+ return unsubscribe();
59
79
  }
60
- })) || Promise.resolve();
80
+ return p.close().then(unsubscribe);
81
+ }) || Promise.resolve();
61
82
  }
62
83
  };
63
84
  }, [
64
85
  peer?.identity.publicKey.hashcode(),
86
+ options?.id,
65
87
  typeof addressOrOpen === "string"
66
88
  ? addressOrOpen
67
- : addressOrUndefined(addressOrOpen),
89
+ : addressOrDefined(addressOrOpen),
68
90
  ]);
69
91
  return {
70
92
  program,
71
93
  session,
72
94
  loading,
73
95
  promise: programLoadingRef.current,
74
- peerCounter,
96
+ peers,
97
+ id,
75
98
  };
76
99
  };
77
100
  //# sourceMappingURL=useProgram.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useProgram.js","sourceRoot":"","sources":["../../src/useProgram.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useProgram.js","sourceRoot":"","sources":["../../src/useProgram.tsx"],"names":[],"mappings":"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"}
@@ -1,15 +1,19 @@
1
1
  import { Ed25519Keypair } from "@peerbit/crypto";
2
2
  import { FastMutex } from "./lockstorage";
3
3
  export declare const cookiesWhereClearedJustNow: () => boolean;
4
- export declare const getTabId: () => string;
5
- export declare const releaseKey: (path: string, lock?: FastMutex) => void;
6
- export declare const getFreeKeypair: (id?: string, lock?: FastMutex, lockCondition?: () => boolean, options?: {
4
+ export declare const getClientId: (type: "session" | "local") => string;
5
+ export declare const releaseKey: (path: string, lock: FastMutex) => void;
6
+ export declare const getFreeKeypair: (id: string | undefined, lock: FastMutex, lockCondition?: () => boolean, options?: {
7
7
  releaseLockIfSameId?: boolean;
8
8
  releaseFirstLock?: boolean;
9
9
  }) => Promise<{
10
+ index: number;
10
11
  path: string;
11
12
  key: Ed25519Keypair;
12
13
  }>;
13
14
  export declare const getAllKeyPairs: (id?: string) => Promise<Ed25519Keypair[]>;
14
15
  export declare const getKeypair: (keyName: string) => Promise<Ed25519Keypair>;
15
16
  export declare const inIframe: () => boolean;
17
+ export declare function debounceLeadingTrailing<T extends (this: any, ...args: any[]) => void>(func: T, delay: number): ((this: ThisParameterType<T>, ...args: Parameters<T>) => void) & {
18
+ cancel: () => void;
19
+ };
package/lib/esm/utils.js CHANGED
@@ -1,9 +1,8 @@
1
1
  import { serialize, deserialize } from "@dao-xyz/borsh";
2
2
  import { Ed25519Keypair, toBase64, fromBase64 } from "@peerbit/crypto";
3
- import { FastMutex } from "./lockstorage";
4
3
  import { v4 as uuid } from "uuid";
5
4
  import sodium from "libsodium-wrappers";
6
- const TAB_ID_KEY = "TAB_ID";
5
+ const CLIENT_ID_STORAGE_KEY = "CLIENT_ID";
7
6
  export const cookiesWhereClearedJustNow = () => {
8
7
  const lastPersistedAt = localStorage.getItem("lastPersistedAt");
9
8
  if (lastPersistedAt) {
@@ -12,23 +11,24 @@ export const cookiesWhereClearedJustNow = () => {
12
11
  localStorage.setItem("lastPersistedAt", Date.now().toString());
13
12
  return true;
14
13
  };
15
- export const getTabId = () => {
16
- const idFromStorage = sessionStorage.getItem(TAB_ID_KEY);
14
+ export const getClientId = (type) => {
15
+ const storage = type === "session" ? sessionStorage : localStorage;
16
+ const idFromStorage = storage.getItem(CLIENT_ID_STORAGE_KEY);
17
17
  if (idFromStorage) {
18
18
  return idFromStorage;
19
19
  }
20
20
  else {
21
21
  const id = uuid(); // generate unique UUID
22
- sessionStorage.setItem(TAB_ID_KEY, id);
22
+ storage.setItem(CLIENT_ID_STORAGE_KEY, id);
23
23
  return id;
24
24
  }
25
25
  };
26
26
  const ID_COUNTER_KEY = "idc/";
27
27
  const getKeyId = (prefix, id) => prefix + "/" + id;
28
- export const releaseKey = (path, lock = new FastMutex({ clientId: getTabId() })) => {
28
+ export const releaseKey = (path, lock) => {
29
29
  lock.release(path);
30
30
  };
31
- export const getFreeKeypair = async (id = "", lock = new FastMutex({ clientId: getTabId() }), lockCondition = () => true, options) => {
31
+ export const getFreeKeypair = async (id = "", lock, lockCondition = () => true, options) => {
32
32
  await sodium.ready;
33
33
  const idCounterKey = ID_COUNTER_KEY + id;
34
34
  await lock.lock(idCounterKey, () => true);
@@ -36,7 +36,16 @@ export const getFreeKeypair = async (id = "", lock = new FastMutex({ clientId: g
36
36
  for (let i = 0; i < 10000; i++) {
37
37
  const key = getKeyId(id, i);
38
38
  let lockedInfo = lock.getLockedInfo(key);
39
- console.log("KEY KEY AT", key, id, i, lockedInfo, lockedInfo === lock.clientId, options);
39
+ /* console.log(
40
+ "KEY KEY AT",
41
+ key,
42
+ id,
43
+ i,
44
+ lockedInfo,
45
+ lockedInfo === lock.clientId,
46
+ options
47
+ );
48
+ */
40
49
  if (lockedInfo) {
41
50
  if ((lockedInfo === lock.clientId &&
42
51
  options?.releaseLockIfSameId) ||
@@ -47,11 +56,11 @@ export const getFreeKeypair = async (id = "", lock = new FastMutex({ clientId: g
47
56
  continue;
48
57
  }
49
58
  }
50
- console.log("aquire id at", i);
51
59
  await lock.lock(key, lockCondition);
52
60
  localStorage.setItem(idCounterKey, JSON.stringify(Math.max(idCounter, i + 1)));
53
61
  await lock.release(idCounterKey);
54
62
  return {
63
+ index: i,
55
64
  path: key,
56
65
  key: await getKeypair(key),
57
66
  };
@@ -105,4 +114,44 @@ export const inIframe = () => {
105
114
  return true;
106
115
  }
107
116
  };
117
+ export function debounceLeadingTrailing(func, delay) {
118
+ let timeoutId = null;
119
+ let lastArgs = null;
120
+ let lastThis;
121
+ let pendingTrailing = false;
122
+ const debounced = function (...args) {
123
+ if (!timeoutId) {
124
+ // Leading call: no timer means this is the first call in this period.
125
+ func.apply(this, args);
126
+ }
127
+ else {
128
+ // Subsequent calls during the delay mark that a trailing call is needed.
129
+ pendingTrailing = true;
130
+ }
131
+ // Always update with the most recent context and arguments.
132
+ lastArgs = args;
133
+ lastThis = this;
134
+ // Reset the timer.
135
+ if (timeoutId) {
136
+ clearTimeout(timeoutId);
137
+ }
138
+ timeoutId = setTimeout(() => {
139
+ timeoutId = null;
140
+ // If there were any calls during the delay, call the function on the trailing edge.
141
+ if (pendingTrailing && lastArgs) {
142
+ func.apply(lastThis, lastArgs);
143
+ }
144
+ // Reset the trailing flag after the trailing call.
145
+ pendingTrailing = false;
146
+ }, delay);
147
+ };
148
+ debounced.cancel = () => {
149
+ if (timeoutId) {
150
+ clearTimeout(timeoutId);
151
+ timeoutId = null;
152
+ }
153
+ pendingTrailing = false;
154
+ };
155
+ return debounced;
156
+ }
108
157
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"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.13",
3
+ "version": "0.0.14",
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": "cde58baabd7138626d03cbb434fee481539609c7"
73
+ "gitHead": "1ea504144adc31241e2ab454e85f94034f84e2bc"
74
74
  }
package/src/index.ts CHANGED
@@ -1,5 +1,13 @@
1
- export { PeerProvider, PeerContext, usePeer } from "./usePeer.js";
1
+ export {
2
+ PeerProvider,
3
+ PeerContext,
4
+ usePeer,
5
+ ClientBusyError,
6
+ } from "./usePeer.js";
2
7
  export * from "./utils.js";
3
8
  export { FastMutex } from "./lockstorage.js";
4
9
  export { useProgram } from "./useProgram.js";
5
10
  export { useLocal } from "./useLocal.js";
11
+ export { useOnline } from "./useOnline.js";
12
+ export { useCount } from "./useCount.js";
13
+ export { debounceLeadingTrailing } from "./utils.js";