@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.
- package/lib/esm/index.d.ts +1 -0
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/usePeer.js +29 -10
- package/lib/esm/usePeer.js.map +1 -1
- package/lib/esm/useProgram.d.ts +6 -0
- package/lib/esm/useProgram.js +38 -0
- package/lib/esm/useProgram.js.map +1 -0
- package/package.json +7 -9
- package/src/index.ts +1 -0
- package/src/usePeer.tsx +39 -13
- package/src/useProgram.tsx +49 -0
package/lib/esm/index.d.ts
CHANGED
package/lib/esm/index.js
CHANGED
package/lib/esm/index.js.map
CHANGED
|
@@ -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"}
|
package/lib/esm/usePeer.js
CHANGED
|
@@ -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
|
|
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
|
-
/*
|
|
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
|
-
|
|
96
|
+
webRTC(), */
|
|
91
97
|
],
|
|
92
98
|
}
|
|
93
99
|
: {
|
|
94
100
|
transports: [
|
|
95
101
|
webSockets({ filter: filters.wss }),
|
|
96
|
-
/*
|
|
97
|
-
|
|
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
|
-
|
|
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
|
}
|
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;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
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.
|
|
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
|
-
"@
|
|
26
|
-
"@
|
|
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": "^
|
|
32
|
+
"peerbit": "^2",
|
|
35
33
|
"react": "^18.2.0",
|
|
36
34
|
"react-dom": "^18.2.0",
|
|
37
|
-
"react-router-dom": "^6.
|
|
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": "
|
|
72
|
+
"gitHead": "00c275554aa08e6a70bceaee3e3377936ca0e8d9"
|
|
75
73
|
}
|
package/src/index.ts
CHANGED
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
|
|
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
|
-
/*
|
|
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
|
-
|
|
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
|
-
|
|
163
|
+
webRTC(), */
|
|
153
164
|
],
|
|
154
165
|
}
|
|
155
166
|
: {
|
|
156
167
|
transports: [
|
|
157
168
|
webSockets({ filter: filters.wss }),
|
|
158
|
-
/*
|
|
159
|
-
|
|
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:
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
-
|
|
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
|
+
};
|