@peerbit/react 0.0.13 → 0.0.15
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 +4 -1
- package/lib/esm/index.js +4 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/lockstorage.d.ts +4 -2
- package/lib/esm/lockstorage.js +32 -19
- package/lib/esm/lockstorage.js.map +1 -1
- package/lib/esm/useCount.d.ts +11 -0
- package/lib/esm/useCount.js +40 -0
- package/lib/esm/useCount.js.map +1 -0
- package/lib/esm/useLocal.d.ts +18 -2
- package/lib/esm/useLocal.js +45 -11
- package/lib/esm/useLocal.js.map +1 -1
- package/lib/esm/useOnline.d.ts +10 -0
- package/lib/esm/useOnline.js +52 -0
- package/lib/esm/useOnline.js.map +1 -0
- package/lib/esm/usePeer.d.ts +24 -5
- package/lib/esm/usePeer.js +106 -71
- package/lib/esm/usePeer.js.map +1 -1
- package/lib/esm/useProgram.d.ts +7 -2
- package/lib/esm/useProgram.js +36 -12
- package/lib/esm/useProgram.js.map +1 -1
- package/lib/esm/utils.d.ts +7 -3
- package/lib/esm/utils.js +58 -9
- package/lib/esm/utils.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +9 -1
- package/src/lockstorage.ts +47 -23
- package/src/useCount.tsx +60 -0
- package/src/useLocal.tsx +83 -17
- package/src/useOnline.tsx +66 -0
- package/src/usePeer.tsx +149 -103
- package/src/useProgram.tsx +43 -24
- package/src/utils.ts +75 -20
package/lib/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
export { PeerProvider, PeerContext, usePeer } from "./usePeer.js";
|
|
1
|
+
export { PeerProvider, PeerContext, usePeer, ClientBusyError, } from "./usePeer.js";
|
|
2
2
|
export * from "./utils.js";
|
|
3
3
|
export { FastMutex } from "./lockstorage.js";
|
|
4
4
|
export { useProgram } from "./useProgram.js";
|
|
5
5
|
export { useLocal } from "./useLocal.js";
|
|
6
|
+
export { useOnline } from "./useOnline.js";
|
|
7
|
+
export { useCount } from "./useCount.js";
|
|
8
|
+
export { debounceLeadingTrailing } from "./utils.js";
|
package/lib/esm/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
export { PeerProvider, PeerContext, usePeer } from "./usePeer.js";
|
|
1
|
+
export { PeerProvider, PeerContext, usePeer, ClientBusyError, } from "./usePeer.js";
|
|
2
2
|
export * from "./utils.js";
|
|
3
3
|
export { FastMutex } from "./lockstorage.js";
|
|
4
4
|
export { useProgram } from "./useProgram.js";
|
|
5
5
|
export { useLocal } from "./useLocal.js";
|
|
6
|
+
export { useOnline } from "./useOnline.js";
|
|
7
|
+
export { useCount } from "./useCount.js";
|
|
8
|
+
export { debounceLeadingTrailing } from "./utils.js";
|
|
6
9
|
//# sourceMappingURL=index.js.map
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,WAAW,EACX,OAAO,EACP,eAAe,GAClB,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,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
package/lib/esm/lockstorage.d.ts
CHANGED
|
@@ -12,9 +12,11 @@ export declare class FastMutex {
|
|
|
12
12
|
timeout?: number | undefined;
|
|
13
13
|
localStorage?: any;
|
|
14
14
|
});
|
|
15
|
-
lock(key: string, keepLocked?: () => boolean
|
|
15
|
+
lock(key: string, keepLocked?: () => boolean, options?: {
|
|
16
|
+
replaceIfSameClient?: boolean;
|
|
17
|
+
}): Promise<{
|
|
16
18
|
restartCount: number;
|
|
17
|
-
contentionCount:
|
|
19
|
+
contentionCount: number;
|
|
18
20
|
locksLost: number;
|
|
19
21
|
}>;
|
|
20
22
|
isLocked(key: string): boolean;
|
package/lib/esm/lockstorage.js
CHANGED
|
@@ -32,71 +32,84 @@ export class FastMutex {
|
|
|
32
32
|
this.intervals = new Map();
|
|
33
33
|
this.localStorage = localStorage || window.localStorage;
|
|
34
34
|
}
|
|
35
|
-
lock(key, keepLocked) {
|
|
35
|
+
lock(key, keepLocked, options) {
|
|
36
36
|
debug('Attempting to acquire Lock on "%s" using FastMutex instance "%s"', key, this.clientId);
|
|
37
37
|
const x = this.xPrefix + key;
|
|
38
38
|
const y = this.yPrefix + key;
|
|
39
|
-
let acquireStart =
|
|
39
|
+
let acquireStart = Date.now();
|
|
40
40
|
return new Promise((resolve, reject) => {
|
|
41
|
-
// we need to differentiate between API calls to lock() and our internal
|
|
42
|
-
// recursive calls so that we can timeout based on the original lock() and
|
|
43
|
-
// not each subsequent call. Therefore, create a new function here within
|
|
44
|
-
// the promise closure that we use for subsequent calls:
|
|
45
41
|
let restartCount = 0;
|
|
46
42
|
let contentionCount = 0;
|
|
47
43
|
let locksLost = 0;
|
|
48
44
|
const acquireLock = (key) => {
|
|
45
|
+
// If the option is set and the same client already holds both keys,
|
|
46
|
+
// update the expiry and resolve immediately.
|
|
47
|
+
if (options?.replaceIfSameClient) {
|
|
48
|
+
const currentX = this.getItem(x);
|
|
49
|
+
const currentY = this.getItem(y);
|
|
50
|
+
if (currentX === this.clientId &&
|
|
51
|
+
currentY === this.clientId) {
|
|
52
|
+
// Update expiry so that the lock is effectively "replaced"
|
|
53
|
+
this.setItem(x, this.clientId, keepLocked);
|
|
54
|
+
this.setItem(y, this.clientId, keepLocked);
|
|
55
|
+
debug('FastMutex client "%s" replaced its own lock on "%s".', this.clientId, key);
|
|
56
|
+
return resolve({
|
|
57
|
+
restartCount,
|
|
58
|
+
contentionCount,
|
|
59
|
+
locksLost,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Check for overall retries/timeouts.
|
|
49
64
|
if (restartCount > 1000 ||
|
|
50
65
|
contentionCount > 1000 ||
|
|
51
66
|
locksLost > 1000) {
|
|
52
|
-
reject("Failed to resolve lock");
|
|
67
|
+
return reject("Failed to resolve lock");
|
|
53
68
|
}
|
|
54
|
-
const elapsedTime =
|
|
69
|
+
const elapsedTime = Date.now() - acquireStart;
|
|
55
70
|
if (elapsedTime >= this.timeout) {
|
|
56
71
|
debug('Lock on "%s" could not be acquired within %sms by FastMutex client "%s"', key, this.timeout, this.clientId);
|
|
57
72
|
return reject(new Error(`Lock could not be acquired within ${this.timeout}ms`));
|
|
58
73
|
}
|
|
74
|
+
// First, set key X.
|
|
59
75
|
this.setItem(x, this.clientId, keepLocked);
|
|
60
|
-
// if
|
|
76
|
+
// Check if key Y exists (another client may be acquiring the lock)
|
|
61
77
|
let lsY = this.getItem(y);
|
|
62
78
|
if (lsY) {
|
|
63
79
|
debug("Lock exists on Y (%s), restarting...", lsY);
|
|
64
80
|
restartCount++;
|
|
65
|
-
setTimeout(() => acquireLock(key));
|
|
81
|
+
setTimeout(() => acquireLock(key), 10);
|
|
66
82
|
return;
|
|
67
83
|
}
|
|
68
|
-
//
|
|
84
|
+
// Request the inner lock by setting Y.
|
|
69
85
|
this.setItem(y, this.clientId, keepLocked);
|
|
70
|
-
// if
|
|
86
|
+
// Re-check X; if it was changed, we have contention.
|
|
71
87
|
let lsX = this.getItem(x);
|
|
72
88
|
if (lsX !== this.clientId) {
|
|
73
89
|
contentionCount++;
|
|
74
90
|
debug('Lock contention detected. X="%s"', lsX);
|
|
75
|
-
// Give enough time for critical section:
|
|
76
91
|
setTimeout(() => {
|
|
77
92
|
lsY = this.getItem(y);
|
|
78
93
|
if (lsY === this.clientId) {
|
|
79
|
-
// we have a lock
|
|
80
94
|
debug('FastMutex client "%s" won the lock contention on "%s"', this.clientId, key);
|
|
81
95
|
resolve({
|
|
96
|
+
restartCount,
|
|
82
97
|
contentionCount,
|
|
83
98
|
locksLost,
|
|
84
|
-
restartCount,
|
|
85
99
|
});
|
|
86
100
|
}
|
|
87
101
|
else {
|
|
88
|
-
// we lost the lock, restart the process again
|
|
89
102
|
restartCount++;
|
|
90
103
|
locksLost++;
|
|
91
104
|
debug('FastMutex client "%s" lost the lock contention on "%s" to another process (%s). Restarting...', this.clientId, key, lsY);
|
|
92
|
-
setTimeout(() => acquireLock(key));
|
|
105
|
+
setTimeout(() => acquireLock(key), 10);
|
|
93
106
|
}
|
|
94
107
|
}, 50);
|
|
95
108
|
return;
|
|
96
109
|
}
|
|
97
|
-
//
|
|
110
|
+
// No contention: lock is acquired.
|
|
98
111
|
debug('FastMutex client "%s" acquired a lock on "%s" with no contention', this.clientId, key);
|
|
99
|
-
resolve({ contentionCount, locksLost
|
|
112
|
+
resolve({ restartCount, contentionCount, locksLost });
|
|
100
113
|
};
|
|
101
114
|
acquireLock(key);
|
|
102
115
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lockstorage.js","sourceRoot":"","sources":["../../src/lockstorage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;EAeE;AAEF,OAAO,OAAO,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEnC,MAAM,OAAO,SAAS;IAClB,QAAQ,CAAS;IACjB,OAAO,CAAS;IAChB,OAAO,CAAS;IAChB,OAAO,CAAS;IAChB,YAAY,CAAM;IAClB,SAAS,CAAmB;IAE5B,YAAY,EACR,QAAQ,GAAG,IAAI,EAAE,EACjB,OAAO,GAAG,gBAAgB,EAC1B,OAAO,GAAG,gBAAgB,EAC1B,OAAO,GAAG,IAAI,EACd,YAAY,GAAG,SAAgB,MAC/B,EAAE;QACF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAE3B,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC;IAC5D,CAAC;IAED,IAAI,CACA,GAAW,EACX,UAA0B;
|
|
1
|
+
{"version":3,"file":"lockstorage.js","sourceRoot":"","sources":["../../src/lockstorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Documents } from "@peerbit/document";
|
|
2
|
+
import * as indexerTypes from "@peerbit/indexer-interface";
|
|
3
|
+
type QueryOptons = {
|
|
4
|
+
query: indexerTypes.Query[] | indexerTypes.QueryLike;
|
|
5
|
+
id: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const useCount: <T extends Record<string, any>>(db?: Documents<T, any, any>, options?: {
|
|
8
|
+
debounce?: number;
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
} & QueryOptons) => number;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ClosedError } from "@peerbit/document";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { debounceLeadingTrailing } from "./utils";
|
|
4
|
+
export const useCount = (db, options) => {
|
|
5
|
+
const [count, setCount] = useState(0);
|
|
6
|
+
const countRef = useRef(0);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
if (!db || db.closed) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const _l = async (args) => {
|
|
12
|
+
try {
|
|
13
|
+
const count = await db.count({
|
|
14
|
+
query: options?.query,
|
|
15
|
+
approximate: true,
|
|
16
|
+
});
|
|
17
|
+
countRef.current = count;
|
|
18
|
+
setCount(count);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (error instanceof ClosedError) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const debounced = debounceLeadingTrailing(_l, options?.debounce ?? 1000);
|
|
28
|
+
const handleChange = () => {
|
|
29
|
+
debounced();
|
|
30
|
+
};
|
|
31
|
+
debounced();
|
|
32
|
+
db.events.addEventListener("change", handleChange);
|
|
33
|
+
return () => {
|
|
34
|
+
db.events.removeEventListener("change", handleChange);
|
|
35
|
+
debounced.cancel();
|
|
36
|
+
};
|
|
37
|
+
}, [db?.closed ? undefined : db?.rootAddress, options?.id]);
|
|
38
|
+
return count;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=useCount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCount.js","sourceRoot":"","sources":["../../src/useCount.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAMlD,MAAM,CAAC,MAAM,QAAQ,GAAG,CACpB,EAA2B,EAC3B,OAGe,EACjB,EAAE;IACA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAS,CAAC,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,CAAS,CAAC,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QAED,MAAM,EAAE,GAAG,KAAK,EAAE,IAAU,EAAE,EAAE;YAC5B,IAAI,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC;oBACzB,KAAK,EAAE,OAAO,EAAE,KAAK;oBACrB,WAAW,EAAE,IAAI;iBACpB,CAAC,CAAC;gBACH,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;gBACzB,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;oBAC/B,OAAO;gBACX,CAAC;gBACD,MAAM,KAAK,CAAC;YAChB,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,uBAAuB,CACrC,EAAE,EACF,OAAO,EAAE,QAAQ,IAAI,IAAI,CAC5B,CAAC;QAEF,MAAM,YAAY,GAAG,GAAG,EAAE;YACtB,SAAS,EAAE,CAAC;QAChB,CAAC,CAAC;QAEF,SAAS,EAAE,CAAC;QACZ,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEnD,OAAO,GAAG,EAAE;YACR,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACtD,SAAS,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAE5D,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC"}
|
package/lib/esm/useLocal.d.ts
CHANGED
|
@@ -1,2 +1,18 @@
|
|
|
1
|
-
import { Documents } from "@peerbit/document";
|
|
2
|
-
|
|
1
|
+
import { Documents, WithContext } from "@peerbit/document";
|
|
2
|
+
import * as indexerTypes from "@peerbit/indexer-interface";
|
|
3
|
+
type QueryLike = {
|
|
4
|
+
query?: indexerTypes.Query[] | indexerTypes.QueryLike;
|
|
5
|
+
sort?: indexerTypes.Sort[] | indexerTypes.Sort | indexerTypes.SortLike;
|
|
6
|
+
};
|
|
7
|
+
type QueryOptons = {
|
|
8
|
+
query: QueryLike;
|
|
9
|
+
id: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const useLocal: <T extends Record<string, any>, I extends Record<string, any>, R extends boolean | undefined = true, RT = R extends false ? WithContext<I> : WithContext<T>>(db?: Documents<T, I>, options?: {
|
|
12
|
+
resolve?: R;
|
|
13
|
+
transform?: (result: RT) => Promise<RT>;
|
|
14
|
+
onChanges?: (all: RT[]) => void;
|
|
15
|
+
debounce?: number;
|
|
16
|
+
debug?: boolean;
|
|
17
|
+
} & QueryOptons) => RT[];
|
|
18
|
+
export {};
|
package/lib/esm/useLocal.js
CHANGED
|
@@ -1,30 +1,64 @@
|
|
|
1
|
-
import { ClosedError
|
|
2
|
-
import { useEffect, useState } from "react";
|
|
3
|
-
|
|
1
|
+
import { ClosedError } from "@peerbit/document";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { debounceLeadingTrailing } from "./utils";
|
|
4
|
+
export const useLocal = (db, options) => {
|
|
4
5
|
const [all, setAll] = useState([]);
|
|
6
|
+
const emptyResultsRef = useRef(false);
|
|
5
7
|
useEffect(() => {
|
|
6
8
|
if (!db || db.closed) {
|
|
7
9
|
return;
|
|
8
10
|
}
|
|
9
|
-
const
|
|
11
|
+
const _l = async (args) => {
|
|
10
12
|
try {
|
|
11
|
-
|
|
13
|
+
const iterator = db.index.iterate(options?.query ?? {}, {
|
|
12
14
|
local: true,
|
|
13
15
|
remote: false,
|
|
14
|
-
|
|
16
|
+
resolve: options?.resolve,
|
|
17
|
+
});
|
|
18
|
+
let results = (await iterator.all());
|
|
19
|
+
if (options?.transform) {
|
|
20
|
+
results = await Promise.all(results.map((x) => options.transform(x)));
|
|
21
|
+
}
|
|
22
|
+
emptyResultsRef.current = results.length === 0;
|
|
23
|
+
setAll(() => {
|
|
24
|
+
options?.onChanges?.(results);
|
|
25
|
+
return results;
|
|
26
|
+
});
|
|
15
27
|
}
|
|
16
28
|
catch (error) {
|
|
17
29
|
if (error instanceof ClosedError) {
|
|
18
|
-
// ignore
|
|
19
30
|
return;
|
|
20
31
|
}
|
|
21
32
|
throw error;
|
|
22
33
|
}
|
|
23
34
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
35
|
+
const debounced = debounceLeadingTrailing(_l, options?.debounce ?? 1000);
|
|
36
|
+
let ts = setTimeout(() => {
|
|
37
|
+
_l();
|
|
38
|
+
}, 3000);
|
|
39
|
+
const handleChange = () => {
|
|
40
|
+
if (emptyResultsRef.current) {
|
|
41
|
+
debounced.cancel();
|
|
42
|
+
_l();
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
debounced();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
debounced();
|
|
49
|
+
db.events.addEventListener("change", handleChange);
|
|
50
|
+
return () => {
|
|
51
|
+
db.events.removeEventListener("change", handleChange);
|
|
52
|
+
debounced.cancel();
|
|
53
|
+
clearTimeout(ts);
|
|
54
|
+
};
|
|
55
|
+
}, [
|
|
56
|
+
db?.closed ? undefined : db?.rootAddress,
|
|
57
|
+
options?.id,
|
|
58
|
+
options?.resolve,
|
|
59
|
+
options?.onChanges,
|
|
60
|
+
options?.transform,
|
|
61
|
+
]);
|
|
28
62
|
return all;
|
|
29
63
|
};
|
|
30
64
|
//# sourceMappingURL=useLocal.js.map
|
package/lib/esm/useLocal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLocal.js","sourceRoot":"","sources":["../../src/useLocal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"useLocal.js","sourceRoot":"","sources":["../../src/useLocal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Program, ProgramEvents } from "@peerbit/program";
|
|
2
|
+
import { PublicSignKey } from "@peerbit/crypto";
|
|
3
|
+
type ExtractArgs<T> = T extends Program<infer Args> ? Args : never;
|
|
4
|
+
type ExtractEvents<T> = T extends Program<any, infer Events> ? Events : never;
|
|
5
|
+
export declare const useOnline: <P extends Program<ExtractArgs<P>, ExtractEvents<P>> & Program<any, ProgramEvents>>(program?: P, options?: {
|
|
6
|
+
id?: string;
|
|
7
|
+
}) => {
|
|
8
|
+
peers: PublicSignKey[];
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
const addressOrDefined = (p) => {
|
|
3
|
+
try {
|
|
4
|
+
return p?.rootAddress;
|
|
5
|
+
}
|
|
6
|
+
catch (error) {
|
|
7
|
+
return !!p;
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
export const useOnline = (program, options) => {
|
|
11
|
+
const [peers, setPeers] = useState([]);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (!program || program.closed) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
let changeListener;
|
|
17
|
+
let closed = false;
|
|
18
|
+
const p = program;
|
|
19
|
+
changeListener = () => {
|
|
20
|
+
p.getReady()
|
|
21
|
+
.then((set) => {
|
|
22
|
+
setPeers([...set.values()]);
|
|
23
|
+
})
|
|
24
|
+
.catch((e) => {
|
|
25
|
+
console.error(e, closed);
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
p.events.addEventListener("join", changeListener);
|
|
29
|
+
p.events.addEventListener("leave", changeListener);
|
|
30
|
+
p.getReady()
|
|
31
|
+
.then((set) => {
|
|
32
|
+
setPeers([...set.values()]);
|
|
33
|
+
})
|
|
34
|
+
.catch((e) => {
|
|
35
|
+
console.log("Error getReady()", {
|
|
36
|
+
closed,
|
|
37
|
+
pClosed: p.closed,
|
|
38
|
+
e,
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
// TODO AbortController?
|
|
42
|
+
return () => {
|
|
43
|
+
closed = true;
|
|
44
|
+
p.events.removeEventListener("join", changeListener);
|
|
45
|
+
p.events.removeEventListener("leave", changeListener);
|
|
46
|
+
};
|
|
47
|
+
}, [options?.id, addressOrDefined(program)]);
|
|
48
|
+
return {
|
|
49
|
+
peers,
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=useOnline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOnline.js","sourceRoot":"","sources":["../../src/useOnline.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,MAAM,gBAAgB,GAAG,CACrB,CAAK,EACP,EAAE;IACA,IAAI,CAAC;QACD,OAAO,CAAC,EAAE,WAAW,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;AACL,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,SAAS,GAAG,CAIrB,OAAW,EACX,OAAyB,EAC3B,EAAE;IACA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAkB,EAAE,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC;QACD,IAAI,cAA0B,CAAC;QAE/B,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,CAAC,GAAG,OAAO,CAAC;QAClB,cAAc,GAAG,GAAG,EAAE;YAClB,CAAC,CAAC,QAAQ,EAAE;iBACP,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACV,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACX,CAAC,CAAC;QACF,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,QAAQ,EAAE;aACP,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACV,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE;gBAC5B,MAAM;gBACN,OAAO,EAAE,CAAC,CAAC,MAAM;gBACjB,CAAC;aACJ,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACP,wBAAwB;QAExB,OAAO,GAAG,EAAE;YACR,MAAM,GAAG,IAAI,CAAC;YACd,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YACrD,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC1D,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO;QACH,KAAK;KACR,CAAC;AACN,CAAC,CAAC"}
|
package/lib/esm/usePeer.d.ts
CHANGED
|
@@ -2,13 +2,32 @@ import React from "react";
|
|
|
2
2
|
import { Multiaddr } from "@multiformats/multiaddr";
|
|
3
3
|
import { Ed25519Keypair } from "@peerbit/crypto";
|
|
4
4
|
import { ProgramClient } from "@peerbit/program";
|
|
5
|
+
export declare class ClientBusyError extends Error {
|
|
6
|
+
constructor(message: string);
|
|
7
|
+
}
|
|
5
8
|
export type ConnectionStatus = "disconnected" | "connected" | "connecting" | "failed";
|
|
6
|
-
|
|
9
|
+
/** Discriminated union for PeerContext */
|
|
10
|
+
export type IPeerContext = (ProxyPeerContext | NodePeerContext) & {
|
|
11
|
+
error?: Error;
|
|
12
|
+
};
|
|
13
|
+
export interface ProxyPeerContext {
|
|
14
|
+
type: "proxy";
|
|
15
|
+
peer: ProgramClient | undefined;
|
|
16
|
+
promise: Promise<void> | undefined;
|
|
17
|
+
loading: boolean;
|
|
18
|
+
status: ConnectionStatus;
|
|
19
|
+
persisted: boolean | undefined;
|
|
20
|
+
/** Present only in proxy (iframe) mode */
|
|
21
|
+
targetOrigin: string;
|
|
22
|
+
}
|
|
23
|
+
export interface NodePeerContext {
|
|
24
|
+
type: "node";
|
|
7
25
|
peer: ProgramClient | undefined;
|
|
8
26
|
promise: Promise<void> | undefined;
|
|
9
27
|
loading: boolean;
|
|
10
28
|
status: ConnectionStatus;
|
|
11
29
|
persisted: boolean | undefined;
|
|
30
|
+
tabIndex: number;
|
|
12
31
|
}
|
|
13
32
|
export declare const PeerContext: React.Context<IPeerContext>;
|
|
14
33
|
export declare const usePeer: () => IPeerContext;
|
|
@@ -23,15 +42,15 @@ type NodeOptions = {
|
|
|
23
42
|
keypair?: Ed25519Keypair;
|
|
24
43
|
bootstrap?: (Multiaddr | string)[];
|
|
25
44
|
host?: boolean;
|
|
45
|
+
singleton?: boolean;
|
|
46
|
+
};
|
|
47
|
+
type TopOptions = NodeOptions & {
|
|
48
|
+
inMemory?: boolean;
|
|
26
49
|
};
|
|
27
|
-
type TopOptions = NodeOptions & WithMemory;
|
|
28
50
|
type TopAndIframeOptions = {
|
|
29
51
|
iframe: IFrameOptions | NodeOptions;
|
|
30
52
|
top: TopOptions;
|
|
31
53
|
};
|
|
32
|
-
type WithMemory = {
|
|
33
|
-
inMemory?: boolean;
|
|
34
|
-
};
|
|
35
54
|
type WithChildren = {
|
|
36
55
|
children: JSX.Element;
|
|
37
56
|
};
|