@device-portal/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/README.md +21 -0
- package/dist/consumer/DevicePortalConsumer.d.ts +1 -0
- package/dist/consumer/DevicePortalConsumer.js +15 -12
- package/dist/consumer/DevicePortalConsumer.js.map +1 -1
- package/dist/consumer/useDevicePortalConsumer.d.ts +1 -0
- package/dist/consumer/useDevicePortalConsumer.js +3 -2
- package/dist/consumer/useDevicePortalConsumer.js.map +1 -1
- package/dist/provider/useDevicePortalProvider.d.ts +1 -0
- package/dist/provider/useDevicePortalProvider.js +3 -2
- package/dist/provider/useDevicePortalProvider.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -157,6 +157,27 @@ const ConsumerComponent = () => {
|
|
|
157
157
|
|
|
158
158
|
The WebRTC connection is designed to be resilient. If the connection to the signaling server is temporarily lost, any established peer-to-peer connections will remain active. The client will attempt to reconnect to the signaling server in the background to handle any future connection negotiations.
|
|
159
159
|
|
|
160
|
+
### Local Signaling Shortcut
|
|
161
|
+
|
|
162
|
+
When peers are in the same browser (different tabs or same tab), the library automatically uses `BroadcastChannel` for signaling. This results in a near-instant connection and reduces reliance on the external signaling server.
|
|
163
|
+
|
|
164
|
+
### Local Only Mode
|
|
165
|
+
|
|
166
|
+
For privacy or offline-only applications where you know all peers are on the same local device/browser, you can disable external signaling entirely by passing `localDeviceOnly: true`:
|
|
167
|
+
|
|
168
|
+
```jsx
|
|
169
|
+
useDevicePortalProvider('my-room', {
|
|
170
|
+
value: 'secret-data',
|
|
171
|
+
localDeviceOnly: true,
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
// ...
|
|
175
|
+
|
|
176
|
+
useDevicePortalConsumer('my-room', {
|
|
177
|
+
localDeviceOnly: true,
|
|
178
|
+
})
|
|
179
|
+
```
|
|
180
|
+
|
|
160
181
|
## Development
|
|
161
182
|
|
|
162
183
|
Run
|
|
@@ -2,6 +2,7 @@ import { type FunctionComponent, type ReactNode } from 'react';
|
|
|
2
2
|
export declare const DevicePortalConsumer: FunctionComponent<{
|
|
3
3
|
room: string;
|
|
4
4
|
websocketSignalingServer?: string;
|
|
5
|
+
localDeviceOnly?: boolean;
|
|
5
6
|
children: (data: {
|
|
6
7
|
value: string;
|
|
7
8
|
sendMessageToProvider: (message: string) => void;
|
|
@@ -3,37 +3,40 @@ import { jsx, Fragment } from 'react/jsx-runtime';
|
|
|
3
3
|
import { useDevicePortalConsumer } from './useDevicePortalConsumer.js';
|
|
4
4
|
|
|
5
5
|
var DevicePortalConsumer = function DevicePortalConsumer(t0) {
|
|
6
|
-
var $ = c(
|
|
6
|
+
var $ = c(7);
|
|
7
7
|
var room = t0.room,
|
|
8
8
|
websocketSignalingServer = t0.websocketSignalingServer,
|
|
9
|
+
localDeviceOnly = t0.localDeviceOnly,
|
|
9
10
|
children = t0.children;
|
|
10
11
|
var t1;
|
|
11
|
-
if ($[0] !== websocketSignalingServer) {
|
|
12
|
+
if ($[0] !== localDeviceOnly || $[1] !== websocketSignalingServer) {
|
|
12
13
|
t1 = {
|
|
13
|
-
websocketSignalingServer: websocketSignalingServer
|
|
14
|
+
websocketSignalingServer: websocketSignalingServer,
|
|
15
|
+
localDeviceOnly: localDeviceOnly
|
|
14
16
|
};
|
|
15
|
-
$[0] =
|
|
16
|
-
$[1] =
|
|
17
|
+
$[0] = localDeviceOnly;
|
|
18
|
+
$[1] = websocketSignalingServer;
|
|
19
|
+
$[2] = t1;
|
|
17
20
|
} else {
|
|
18
|
-
t1 = $[
|
|
21
|
+
t1 = $[2];
|
|
19
22
|
}
|
|
20
23
|
var _useDevicePortalConsu = useDevicePortalConsumer(room, t1),
|
|
21
24
|
value = _useDevicePortalConsu.value,
|
|
22
25
|
sendMessageToProvider = _useDevicePortalConsu.sendMessageToProvider;
|
|
23
26
|
var t2;
|
|
24
|
-
if ($[
|
|
27
|
+
if ($[3] !== children || $[4] !== sendMessageToProvider || $[5] !== value) {
|
|
25
28
|
t2 = jsx(Fragment, {
|
|
26
29
|
children: children({
|
|
27
30
|
value: value,
|
|
28
31
|
sendMessageToProvider: sendMessageToProvider
|
|
29
32
|
})
|
|
30
33
|
});
|
|
31
|
-
$[
|
|
32
|
-
$[
|
|
33
|
-
$[
|
|
34
|
-
$[
|
|
34
|
+
$[3] = children;
|
|
35
|
+
$[4] = sendMessageToProvider;
|
|
36
|
+
$[5] = value;
|
|
37
|
+
$[6] = t2;
|
|
35
38
|
} else {
|
|
36
|
-
t2 = $[
|
|
39
|
+
t2 = $[6];
|
|
37
40
|
}
|
|
38
41
|
return t2;
|
|
39
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevicePortalConsumer.js","sources":["../../src/consumer/DevicePortalConsumer.tsx"],"sourcesContent":["import { type FunctionComponent, type ReactNode } from 'react'\nimport { useDevicePortalConsumer } from './useDevicePortalConsumer'\n\nexport const DevicePortalConsumer: FunctionComponent<{\n\troom: string\n\twebsocketSignalingServer?: string\n\tchildren: (data: {\n\t\tvalue: string\n\t\tsendMessageToProvider: (message: string) => void\n\t}) => ReactNode\n}> = ({ room, websocketSignalingServer, children }) => {\n\tconst { value, sendMessageToProvider } = useDevicePortalConsumer(room, {\n\t\twebsocketSignalingServer,\n\t})\n\treturn <>{children({ value, sendMessageToProvider })}</>\n}\n"],"names":["DevicePortalConsumer","t0","$","_c","room","websocketSignalingServer","children","t1","_useDevicePortalConsu","useDevicePortalConsumer","value","sendMessageToProvider","t2","_jsx","_Fragment"],"mappings":";;;;IAGaA,oBAAoB,
|
|
1
|
+
{"version":3,"file":"DevicePortalConsumer.js","sources":["../../src/consumer/DevicePortalConsumer.tsx"],"sourcesContent":["import { type FunctionComponent, type ReactNode } from 'react'\nimport { useDevicePortalConsumer } from './useDevicePortalConsumer'\n\nexport const DevicePortalConsumer: FunctionComponent<{\n\troom: string\n\twebsocketSignalingServer?: string\n\tlocalDeviceOnly?: boolean\n\tchildren: (data: {\n\t\tvalue: string\n\t\tsendMessageToProvider: (message: string) => void\n\t}) => ReactNode\n}> = ({ room, websocketSignalingServer, localDeviceOnly, children }) => {\n\tconst { value, sendMessageToProvider } = useDevicePortalConsumer(room, {\n\t\twebsocketSignalingServer,\n\t\tlocalDeviceOnly,\n\t})\n\treturn <>{children({ value, sendMessageToProvider })}</>\n}\n"],"names":["DevicePortalConsumer","t0","$","_c","room","websocketSignalingServer","localDeviceOnly","children","t1","_useDevicePortalConsu","useDevicePortalConsumer","value","sendMessageToProvider","t2","_jsx","_Fragment"],"mappings":";;;;IAGaA,oBAAoB,GAQ5B,SARQA,oBAAoBA,CAAAC,EAAA,EAAA;EAAA,IAAAC,CAAA,GAAAC,CAAA,CAAA,CAAA,CAAA;AAQ3B,EAAA,IAAAC,IAAA,GAAAH,EAA6D,CAAAG,IAAA;IAAAC,wBAAA,GAA7DJ,EAA6D,CAAAI,wBAAA;IAAAC,eAAA,GAA7DL,EAA6D,CAAAK,eAAA;IAAAC,QAAA,GAA7DN,EAA6D,CAAAM,QAAA;AAAA,EAAA,IAAAC,EAAA;AAAA,EAAA,IAAAN,CAAA,CAAAI,CAAAA,CAAAA,KAAAA,eAAA,IAAAJ,CAAA,QAAAG,wBAAA,EAAA;IACKG,EAAA,GAAA;AAAAH,MAAAA,wBAAA,EACtEA,wBAAwB;AAAAC,MAAAA,eAAA,EACxBA;KACA;AAAAJ,IAAAA,CAAA,MAAAI,eAAA;AAAAJ,IAAAA,CAAA,MAAAG,wBAAA;AAAAH,IAAAA,CAAA,MAAAM,EAAA;AAAA,GAAA,MAAA;AAAAA,IAAAA,EAAA,GAAAN,CAAA,CAAA,CAAA,CAAA;AAAA;AAHD,EAAA,IAAAO,qBAAA,GAAyCC,uBAAuB,CAACN,IAAI,EAAEI,EAGtE,CAAC;IAAAG,KAAA,GAAAF,qBAAA,CAAAE,KAAA;IAAAC,qBAAA,GAAAH,qBAAA,CAAAG,qBAAA;AAAA,EAAA,IAAAC,EAAA;EAAA,IAAAX,CAAA,CAAAK,CAAAA,CAAAA,KAAAA,QAAA,IAAAL,CAAA,QAAAU,qBAAA,IAAAV,CAAA,CAAA,CAAA,CAAA,KAAAS,KAAA,EAAA;AACKE,IAAAA,EAAA,GAAAC,GAAA,CAAAC,QAAA,EAAA;MAAAR,QAAA,EAAGA,QAAQ,CAAC;AAAAI,QAAAA,KAAA,EAAEA,KAAK;AAAAC,QAAAA,qBAAA,EAAEA;OAAuB;AAAC,KAAA,CAAI;AAAAV,IAAAA,CAAA,MAAAK,QAAA;AAAAL,IAAAA,CAAA,MAAAU,qBAAA;AAAAV,IAAAA,CAAA,MAAAS,KAAA;AAAAT,IAAAA,CAAA,MAAAW,EAAA;AAAA,GAAA,MAAA;AAAAA,IAAAA,EAAA,GAAAX,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,EAAA,OAAjDW,EAAiD;AAAA;;;;"}
|
|
@@ -57,7 +57,8 @@ var useDevicePortalConsumer = function useDevicePortalConsumer(room) {
|
|
|
57
57
|
firstValueResolve(value_0);
|
|
58
58
|
},
|
|
59
59
|
sendLastValueOnConnectAndReconnect: false,
|
|
60
|
-
websocketSignalingServer: options.websocketSignalingServer
|
|
60
|
+
websocketSignalingServer: options.websocketSignalingServer,
|
|
61
|
+
localDeviceOnly: options.localDeviceOnly
|
|
61
62
|
});
|
|
62
63
|
responders[room] = {
|
|
63
64
|
responder: responder,
|
|
@@ -68,7 +69,7 @@ var useDevicePortalConsumer = function useDevicePortalConsumer(room) {
|
|
|
68
69
|
}
|
|
69
70
|
responders[room].setValueStates.add(setValueState);
|
|
70
71
|
return responders[room].consumer;
|
|
71
|
-
}, [room, options.websocketSignalingServer, setValueState]);
|
|
72
|
+
}, [room, options.websocketSignalingServer, options.localDeviceOnly, setValueState]);
|
|
72
73
|
// Cleanup on unmount (though this hook is currently designed for global persistence)
|
|
73
74
|
// useEffect(() => () => { responders[room]?.setValueStates.delete(setValueState) }, [room, setValueState]);
|
|
74
75
|
if (valueState && valueState.room === room) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDevicePortalConsumer.js","sources":["../../src/consumer/useDevicePortalConsumer.ts"],"sourcesContent":["import { useMemo, useState, type Dispatch, type SetStateAction } from 'react'\nimport { Responder } from '@device-portal/client'\n\ntype State = {\n\troom: string\n\tvalue: string\n\tsendMessageToProvider: (value: string) => void\n}\n\nconst responders: {\n\t[room: string]: {\n\t\tresponder: Responder\n\t\tfirstValuePromise: Promise<string>\n\t\tconsumer: null | {\n\t\t\tvalue: string\n\t\t\tsendMessageToProvider: (value: string) => void\n\t\t}\n\t\tsetValueStates: Set<Dispatch<SetStateAction<State | null>>>\n\t}\n} = {}\n\nexport const useDevicePortalConsumer = (\n\troom: string,\n\toptions: {\n\t\twebsocketSignalingServer?: string\n\t} = {},\n): Pick<State, 'value' | 'sendMessageToProvider'> => {\n\tconst [valueState, setValueState] = useState<State | null>(null)\n\n\tconst currentConsumer = useMemo(() => {\n\t\tif (!responders[room]) {\n\t\t\tconsole.log(\n\t\t\t\t`[useDevicePortalConsumer] Creating new Responder for room: ${room}`,\n\t\t\t)\n\t\t\tconst withResolvers = () => {\n\t\t\t\tlet resolve: (value: string) => void\n\t\t\t\tlet reject: (reason?: any) => void\n\t\t\t\tconst promise = new Promise<string>((res, rej) => {\n\t\t\t\t\tresolve = res\n\t\t\t\t\treject = rej\n\t\t\t\t})\n\t\t\t\treturn { promise, resolve: resolve!, reject: reject! }\n\t\t\t}\n\n\t\t\tconst { promise: firstValuePromise, resolve: firstValueResolve } =\n\t\t\t\t(Promise as any).withResolvers?.() ?? withResolvers()\n\n\t\t\tconst sendMessageToProvider = (value: string) => {\n\t\t\t\tresponders[room].responder.send(value)\n\t\t\t}\n\n\t\t\tconst responder = new Responder(room, {\n\t\t\t\tonMessage: (value, peerId) => {\n\t\t\t\t\tconst consumer = { value, sendMessageToProvider }\n\t\t\t\t\tresponders[room].consumer = consumer\n\t\t\t\t\tfor (const setState of responders[room].setValueStates) {\n\t\t\t\t\t\tsetState({ room, value, sendMessageToProvider })\n\t\t\t\t\t}\n\t\t\t\t\tfirstValueResolve(value)\n\t\t\t\t},\n\t\t\t\tsendLastValueOnConnectAndReconnect: false,\n\t\t\t\twebsocketSignalingServer: options.websocketSignalingServer,\n\t\t\t})\n\n\t\t\tresponders[room] = {\n\t\t\t\tresponder,\n\t\t\t\tfirstValuePromise,\n\t\t\t\tconsumer: null,\n\t\t\t\tsetValueStates: new Set(),\n\t\t\t}\n\t\t}\n\n\t\tresponders[room].setValueStates.add(setValueState)\n\n\t\treturn responders[room].consumer\n\t}, [
|
|
1
|
+
{"version":3,"file":"useDevicePortalConsumer.js","sources":["../../src/consumer/useDevicePortalConsumer.ts"],"sourcesContent":["import { useMemo, useState, type Dispatch, type SetStateAction } from 'react'\nimport { Responder } from '@device-portal/client'\n\ntype State = {\n\troom: string\n\tvalue: string\n\tsendMessageToProvider: (value: string) => void\n}\n\nconst responders: {\n\t[room: string]: {\n\t\tresponder: Responder\n\t\tfirstValuePromise: Promise<string>\n\t\tconsumer: null | {\n\t\t\tvalue: string\n\t\t\tsendMessageToProvider: (value: string) => void\n\t\t}\n\t\tsetValueStates: Set<Dispatch<SetStateAction<State | null>>>\n\t}\n} = {}\n\nexport const useDevicePortalConsumer = (\n\troom: string,\n\toptions: {\n\t\twebsocketSignalingServer?: string\n\t\tlocalDeviceOnly?: boolean\n\t} = {},\n): Pick<State, 'value' | 'sendMessageToProvider'> => {\n\tconst [valueState, setValueState] = useState<State | null>(null)\n\n\tconst currentConsumer = useMemo(() => {\n\t\tif (!responders[room]) {\n\t\t\tconsole.log(\n\t\t\t\t`[useDevicePortalConsumer] Creating new Responder for room: ${room}`,\n\t\t\t)\n\t\t\tconst withResolvers = () => {\n\t\t\t\tlet resolve: (value: string) => void\n\t\t\t\tlet reject: (reason?: any) => void\n\t\t\t\tconst promise = new Promise<string>((res, rej) => {\n\t\t\t\t\tresolve = res\n\t\t\t\t\treject = rej\n\t\t\t\t})\n\t\t\t\treturn { promise, resolve: resolve!, reject: reject! }\n\t\t\t}\n\n\t\t\tconst { promise: firstValuePromise, resolve: firstValueResolve } =\n\t\t\t\t(Promise as any).withResolvers?.() ?? withResolvers()\n\n\t\t\tconst sendMessageToProvider = (value: string) => {\n\t\t\t\tresponders[room].responder.send(value)\n\t\t\t}\n\n\t\t\tconst responder = new Responder(room, {\n\t\t\t\tonMessage: (value, peerId) => {\n\t\t\t\t\tconst consumer = { value, sendMessageToProvider }\n\t\t\t\t\tresponders[room].consumer = consumer\n\t\t\t\t\tfor (const setState of responders[room].setValueStates) {\n\t\t\t\t\t\tsetState({ room, value, sendMessageToProvider })\n\t\t\t\t\t}\n\t\t\t\t\tfirstValueResolve(value)\n\t\t\t\t},\n\t\t\t\tsendLastValueOnConnectAndReconnect: false,\n\t\t\t\twebsocketSignalingServer: options.websocketSignalingServer,\n\t\t\t\tlocalDeviceOnly: options.localDeviceOnly,\n\t\t\t})\n\n\t\t\tresponders[room] = {\n\t\t\t\tresponder,\n\t\t\t\tfirstValuePromise,\n\t\t\t\tconsumer: null,\n\t\t\t\tsetValueStates: new Set(),\n\t\t\t}\n\t\t}\n\n\t\tresponders[room].setValueStates.add(setValueState)\n\n\t\treturn responders[room].consumer\n\t}, [\n\t\troom,\n\t\toptions.websocketSignalingServer,\n\t\toptions.localDeviceOnly,\n\t\tsetValueState,\n\t])\n\n\t// Cleanup on unmount (though this hook is currently designed for global persistence)\n\t// useEffect(() => () => { responders[room]?.setValueStates.delete(setValueState) }, [room, setValueState]);\n\n\tif (valueState && valueState.room === room) {\n\t\treturn {\n\t\t\tvalue: valueState.value,\n\t\t\tsendMessageToProvider: valueState.sendMessageToProvider,\n\t\t}\n\t}\n\n\tif (currentConsumer) {\n\t\treturn currentConsumer\n\t}\n\n\tthrow responders[room].firstValuePromise\n}\n"],"names":["responders","useDevicePortalConsumer","room","options","arguments","length","undefined","_useState","useState","_useState2","_slicedToArray","valueState","setValueState","currentConsumer","useMemo","_Promise$withResolver","_Promise$withResolver2","withResolvers","resolve","reject","promise","Promise","res","rej","_ref","call","firstValuePromise","firstValueResolve","sendMessageToProvider","value","responder","send","Responder","onMessage","peerId","consumer","_iterator","_createForOfIteratorHelper","setValueStates","_step","s","n","done","setState","err","e","f","sendLastValueOnConnectAndReconnect","websocketSignalingServer","localDeviceOnly","Set","add"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ export type DevicePortalProviderOptions = {
|
|
|
4
4
|
websocketSignalingServer?: string;
|
|
5
5
|
onMessageFromConsumer?: (value: string, peerId: PeerId) => void;
|
|
6
6
|
maxClients?: number;
|
|
7
|
+
localDeviceOnly?: boolean;
|
|
7
8
|
};
|
|
8
9
|
export declare const useDevicePortalProvider: (room: string, options?: DevicePortalProviderOptions) => {
|
|
9
10
|
peers: PeerId[];
|
|
@@ -24,7 +24,8 @@ var useDevicePortalProvider = function useDevicePortalProvider(room) {
|
|
|
24
24
|
setPeers(peers_0);
|
|
25
25
|
},
|
|
26
26
|
websocketSignalingServer: options.websocketSignalingServer,
|
|
27
|
-
maxClients: options.maxClients
|
|
27
|
+
maxClients: options.maxClients,
|
|
28
|
+
localDeviceOnly: options.localDeviceOnly
|
|
28
29
|
});
|
|
29
30
|
setInitiator(initiator_0);
|
|
30
31
|
setPeers(initiator_0.peers);
|
|
@@ -33,7 +34,7 @@ var useDevicePortalProvider = function useDevicePortalProvider(room) {
|
|
|
33
34
|
setInitiator(null);
|
|
34
35
|
setPeers([]);
|
|
35
36
|
};
|
|
36
|
-
}, [room, options.websocketSignalingServer, options.maxClients]);
|
|
37
|
+
}, [room, options.websocketSignalingServer, options.maxClients, options.localDeviceOnly]);
|
|
37
38
|
useEffect(function () {
|
|
38
39
|
if (options.value === undefined) {
|
|
39
40
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDevicePortalProvider.js","sources":["../../src/provider/useDevicePortalProvider.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { Initiator, type PeerId } from '@device-portal/client'\n\n// @TODO: warn if one room is used by multiple useDevicePortalProvider hooks more than once at the same time\n\nexport type DevicePortalProviderOptions = {\n\tvalue?: string\n\twebsocketSignalingServer?: string\n\tonMessageFromConsumer?: (value: string, peerId: PeerId) => void\n\tmaxClients?: number\n}\n\nexport const useDevicePortalProvider = (\n\troom: string,\n\toptions: DevicePortalProviderOptions = {},\n) => {\n\tconst [initiator, setInitiator] = useState<Initiator | null>(null)\n\tconst [peers, setPeers] = useState<PeerId[]>([])\n\tconst onMessageFromConsumerRef = useRef(options.onMessageFromConsumer)\n\tonMessageFromConsumerRef.current = options.onMessageFromConsumer\n\n\tuseEffect(() => {\n\t\tconst initiator = new Initiator(room, {\n\t\t\tonMessage: (value, peerId) => {\n\t\t\t\tonMessageFromConsumerRef.current?.(value, peerId)\n\t\t\t},\n\t\t\tonPeersChange: (peers) => {\n\t\t\t\tsetPeers(peers)\n\t\t\t},\n\t\t\twebsocketSignalingServer: options.websocketSignalingServer,\n\t\t\tmaxClients: options.maxClients,\n\t\t})\n\t\tsetInitiator(initiator)\n\t\tsetPeers(initiator.peers)\n\n\t\treturn () => {\n\t\t\tinitiator.destroy()\n\t\t\tsetInitiator(null)\n\t\t\tsetPeers([])\n\t\t}\n\t}, [
|
|
1
|
+
{"version":3,"file":"useDevicePortalProvider.js","sources":["../../src/provider/useDevicePortalProvider.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { Initiator, type PeerId } from '@device-portal/client'\n\n// @TODO: warn if one room is used by multiple useDevicePortalProvider hooks more than once at the same time\n\nexport type DevicePortalProviderOptions = {\n\tvalue?: string\n\twebsocketSignalingServer?: string\n\tonMessageFromConsumer?: (value: string, peerId: PeerId) => void\n\tmaxClients?: number\n\tlocalDeviceOnly?: boolean\n}\n\nexport const useDevicePortalProvider = (\n\troom: string,\n\toptions: DevicePortalProviderOptions = {},\n) => {\n\tconst [initiator, setInitiator] = useState<Initiator | null>(null)\n\tconst [peers, setPeers] = useState<PeerId[]>([])\n\tconst onMessageFromConsumerRef = useRef(options.onMessageFromConsumer)\n\tonMessageFromConsumerRef.current = options.onMessageFromConsumer\n\n\tuseEffect(() => {\n\t\tconst initiator = new Initiator(room, {\n\t\t\tonMessage: (value, peerId) => {\n\t\t\t\tonMessageFromConsumerRef.current?.(value, peerId)\n\t\t\t},\n\t\t\tonPeersChange: (peers) => {\n\t\t\t\tsetPeers(peers)\n\t\t\t},\n\t\t\twebsocketSignalingServer: options.websocketSignalingServer,\n\t\t\tmaxClients: options.maxClients,\n\t\t\tlocalDeviceOnly: options.localDeviceOnly,\n\t\t})\n\t\tsetInitiator(initiator)\n\t\tsetPeers(initiator.peers)\n\n\t\treturn () => {\n\t\t\tinitiator.destroy()\n\t\t\tsetInitiator(null)\n\t\t\tsetPeers([])\n\t\t}\n\t}, [\n\t\troom,\n\t\toptions.websocketSignalingServer,\n\t\toptions.maxClients,\n\t\toptions.localDeviceOnly,\n\t])\n\n\tuseEffect(() => {\n\t\tif (options.value === undefined) {\n\t\t\treturn\n\t\t}\n\t\tinitiator?.send(options.value)\n\t}, [options.value, initiator])\n\n\treturn { peers, initiator }\n}\n"],"names":["useDevicePortalProvider","room","options","arguments","length","undefined","_useState","useState","_useState2","_slicedToArray","initiator","setInitiator","_useState3","_useState4","peers","setPeers","onMessageFromConsumerRef","useRef","onMessageFromConsumer","current","useEffect","Initiator","onMessage","value","peerId","_onMessageFromConsume","call","onPeersChange","websocketSignalingServer","maxClients","localDeviceOnly","destroy","send"],"mappings":";;;;IAaaA,uBAAuB,GAAG,SAA1BA,uBAAuBA,CACnCC,IAAY,EAET;AAAA,EAAA,IADHC,OAAA,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAuC,EAAE;AAEzC,EAAA,IAAAG,SAAA,GAAkCC,QAAQ,CAAmB,IAAI,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAA3DI,IAAAA,SAAS,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,YAAY,GAAAH,UAAA,CAAA,CAAA,CAAA;AAC9B,EAAA,IAAAI,UAAA,GAA0BL,QAAQ,CAAW,EAAE,CAAC;IAAAM,UAAA,GAAAJ,cAAA,CAAAG,UAAA,EAAA,CAAA,CAAA;AAAzCE,IAAAA,KAAK,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,QAAQ,GAAAF,UAAA,CAAA,CAAA,CAAA;AACtB,EAAA,IAAMG,wBAAwB,GAAGC,MAAM,CAACf,OAAO,CAACgB,qBAAqB,CAAC;AACtEF,EAAAA,wBAAwB,CAACG,OAAO,GAAGjB,OAAO,CAACgB,qBAAqB;AAEhEE,EAAAA,SAAS,CAAC,YAAK;AACd,IAAA,IAAMV,WAAS,GAAG,IAAIW,SAAS,CAACpB,IAAI,EAAE;AACrCqB,MAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAEC,MAAM,EAAI;AAAA,QAAA,IAAAC,qBAAA;AAC5B,QAAA,CAAAA,qBAAA,GAAAT,wBAAwB,CAACG,OAAO,cAAAM,qBAAA,KAAA,MAAA,IAAhCA,qBAAA,CAAAC,IAAA,CAAAV,wBAAwB,EAAWO,KAAK,EAAEC,MAAM,CAAC;OACjD;AACDG,MAAAA,aAAa,EAAE,SAAfA,aAAaA,CAAGb,OAAK,EAAI;QACxBC,QAAQ,CAACD,OAAK,CAAC;OACf;MACDc,wBAAwB,EAAE1B,OAAO,CAAC0B,wBAAwB;MAC1DC,UAAU,EAAE3B,OAAO,CAAC2B,UAAU;MAC9BC,eAAe,EAAE5B,OAAO,CAAC4B;AACzB,KAAA,CAAC;IACFnB,YAAY,CAACD,WAAS,CAAC;AACvBK,IAAAA,QAAQ,CAACL,WAAS,CAACI,KAAK,CAAC;AAEzB,IAAA,OAAO,YAAK;MACXJ,WAAS,CAACqB,OAAO,EAAE;MACnBpB,YAAY,CAAC,IAAI,CAAC;MAClBI,QAAQ,CAAC,EAAE,CAAC;KACZ;AACF,GAAC,EAAE,CACFd,IAAI,EACJC,OAAO,CAAC0B,wBAAwB,EAChC1B,OAAO,CAAC2B,UAAU,EAClB3B,OAAO,CAAC4B,eAAe,CACvB,CAAC;AAEFV,EAAAA,SAAS,CAAC,YAAK;AACd,IAAA,IAAIlB,OAAO,CAACqB,KAAK,KAAKlB,SAAS,EAAE;AAChC,MAAA;AACD;IACAK,SAAS,KAAA,IAAA,IAATA,SAAS,KAAA,MAAA,IAATA,SAAS,CAAEsB,IAAI,CAAC9B,OAAO,CAACqB,KAAK,CAAC;GAC9B,EAAE,CAACrB,OAAO,CAACqB,KAAK,EAAEb,SAAS,CAAC,CAAC;EAE9B,OAAO;AAAEI,IAAAA,KAAK,EAALA,KAAK;AAAEJ,IAAAA,SAAS,EAATA;GAAW;AAC5B;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@device-portal/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.15",
|
|
4
4
|
"description": "Simple WebRTC data channel for React.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"react": "18 || 19"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@device-portal/client": "^0.0.
|
|
42
|
+
"@device-portal/client": "^0.0.15",
|
|
43
43
|
"@device-portal/constants": "*"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|