@device-portal/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.
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);
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] = websocketSignalingServer;
16
- $[1] = t1;
17
+ $[0] = localDeviceOnly;
18
+ $[1] = websocketSignalingServer;
19
+ $[2] = t1;
17
20
  } else {
18
- t1 = $[1];
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 ($[2] !== children || $[3] !== sendMessageToProvider || $[4] !== value) {
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
- $[2] = children;
32
- $[3] = sendMessageToProvider;
33
- $[4] = value;
34
- $[5] = t2;
34
+ $[3] = children;
35
+ $[4] = sendMessageToProvider;
36
+ $[5] = value;
37
+ $[6] = t2;
35
38
  } else {
36
- t2 = $[5];
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,GAO5B,SAPQA,oBAAoBA,CAAAC,EAAA,EAAA;EAAA,IAAAC,CAAA,GAAAC,CAAA,CAAA,CAAA,CAAA;AAO3B,EAAA,IAAAC,IAAA,GAAAH,EAA4C,CAAAG,IAAA;IAAAC,wBAAA,GAA5CJ,EAA4C,CAAAI,wBAAA;IAAAC,QAAA,GAA5CL,EAA4C,CAAAK,QAAA;AAAA,EAAA,IAAAC,EAAA;EAAA,IAAAL,CAAA,QAAAG,wBAAA,EAAA;IACsBE,EAAA,GAAA;AAAAF,MAAAA,wBAAA,EACtEA;KACA;AAAAH,IAAAA,CAAA,MAAAG,wBAAA;AAAAH,IAAAA,CAAA,MAAAK,EAAA;AAAA,GAAA,MAAA;AAAAA,IAAAA,EAAA,GAAAL,CAAA,CAAA,CAAA,CAAA;AAAA;AAFD,EAAA,IAAAM,qBAAA,GAAyCC,uBAAuB,CAACL,IAAI,EAAEG,EAEtE,CAAC;IAAAG,KAAA,GAAAF,qBAAA,CAAAE,KAAA;IAAAC,qBAAA,GAAAH,qBAAA,CAAAG,qBAAA;AAAA,EAAA,IAAAC,EAAA;EAAA,IAAAV,CAAA,CAAAI,CAAAA,CAAAA,KAAAA,QAAA,IAAAJ,CAAA,QAAAS,qBAAA,IAAAT,CAAA,CAAA,CAAA,CAAA,KAAAQ,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;AAAAT,IAAAA,CAAA,MAAAI,QAAA;AAAAJ,IAAAA,CAAA,MAAAS,qBAAA;AAAAT,IAAAA,CAAA,MAAAQ,KAAA;AAAAR,IAAAA,CAAA,MAAAU,EAAA;AAAA,GAAA,MAAA;AAAAA,IAAAA,EAAA,GAAAV,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,EAAA,OAAjDU,EAAiD;AAAA;;;;"}
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;;;;"}
@@ -5,5 +5,6 @@ type State = {
5
5
  };
6
6
  export declare const useDevicePortalConsumer: (room: string, options?: {
7
7
  websocketSignalingServer?: string;
8
+ localDeviceOnly?: boolean;
8
9
  }) => Pick<State, "value" | "sendMessageToProvider">;
9
10
  export {};
@@ -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}, [room, options.websocketSignalingServer, setValueState])\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","Set","add"],"mappings":";;;;AASA,IAAMA,UAAU,GAUZ,EAAE;IAEOC,uBAAuB,GAAG,SAA1BA,uBAAuBA,CACnCC,IAAY,EAIuC;AAAA,EAAA,IAHnDC,OAAA,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAEI,EAAE;AAEN,EAAA,IAAAG,SAAA,GAAoCC,QAAQ,CAAe,IAAI,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAAzDI,IAAAA,UAAU,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,aAAa,GAAAH,UAAA,CAAA,CAAA,CAAA;AAEhC,EAAA,IAAMI,eAAe,GAAGC,OAAO,CAAC,YAAK;AACpC,IAAA,IAAI,CAACd,UAAU,CAACE,IAAI,CAAC,EAAE;MAAA,IAAAa,qBAAA,EAAAC,sBAAA;AAItB,MAAA,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,GAAQ;AAC1B,QAAA,IAAIC,OAAgC;AACpC,QAAA,IAAIC,MAA8B;QAClC,IAAMC,OAAO,GAAG,IAAIC,OAAO,CAAS,UAACC,GAAG,EAAEC,GAAG,EAAI;AAChDL,UAAAA,OAAO,GAAGI,GAAG;AACbH,UAAAA,MAAM,GAAGI,GAAG;AACb,SAAC,CAAC;QACF,OAAO;AAAEH,UAAAA,OAAO,EAAPA,OAAO;AAAEF,UAAAA,OAAO,EAAEA,OAAQ;AAAEC,UAAAA,MAAM,EAAEA;SAAS;OACtD;MAED,IAAAK,IAAA,GAAAT,CAAAA,qBAAA,GAAAC,CAAAA,sBAAA,GACEK,OAAe,CAACJ,aAAa,MAAA,IAAA,IAAAD,sBAAA,KAAA,MAAA,GAAA,MAAA,GAA7BA,sBAAA,CAAAS,IAAA,CAAAJ,QAAiC,MAAA,IAAA,IAAAN,qBAAA,KAAA,MAAA,GAAAA,qBAAA,GAAIE,aAAa,EAAE;QADrCS,iBAAiB,GAAAF,IAAA,CAA1BJ,OAAO;QAA8BO,iBAAiB,GAAAH,IAAA,CAA1BN,OAAO;AAG3C,MAAA,IAAMU,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAIC,KAAa,EAAI;QAC/C7B,UAAU,CAACE,IAAI,CAAC,CAAC4B,SAAS,CAACC,IAAI,CAACF,KAAK,CAAC;OACtC;AAED,MAAA,IAAMC,SAAS,GAAG,IAAIE,SAAS,CAAC9B,IAAI,EAAE;AACrC+B,QAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGJ,OAAK,EAAEK,MAAM,EAAI;AAC5B,UAAA,IAAMC,QAAQ,GAAG;AAAEN,YAAAA,KAAK,EAALA,OAAK;AAAED,YAAAA,qBAAqB,EAArBA;WAAuB;AACjD5B,UAAAA,UAAU,CAACE,IAAI,CAAC,CAACiC,QAAQ,GAAGA,QAAQ;UAAA,IAAAC,SAAA,GAAAC,0BAAA,CACbrC,UAAU,CAACE,IAAI,CAAC,CAACoC,cAAc,CAAA;YAAAC,KAAA;AAAA,UAAA,IAAA;YAAtD,KAAAH,SAAA,CAAAI,CAAA,EAAAD,EAAAA,CAAAA,CAAAA,KAAA,GAAAH,SAAA,CAAAK,CAAA,EAAAC,EAAAA,IAAA,GAAwD;AAAA,cAAA,IAA7CC,QAAQ,GAAAJ,KAAA,CAAAV,KAAA;AAClBc,cAAAA,QAAQ,CAAC;AAAEzC,gBAAAA,IAAI,EAAJA,IAAI;AAAE2B,gBAAAA,KAAK,EAALA,OAAK;AAAED,gBAAAA,qBAAqB,EAArBA;AAAuB,eAAA,CAAC;AACjD;AAAC,WAAA,CAAA,OAAAgB,GAAA,EAAA;YAAAR,SAAA,CAAAS,CAAA,CAAAD,GAAA,CAAA;AAAA,WAAA,SAAA;AAAAR,YAAAA,SAAA,CAAAU,CAAA,EAAA;AAAA;UACDnB,iBAAiB,CAACE,OAAK,CAAC;SACxB;AACDkB,QAAAA,kCAAkC,EAAE,KAAK;QACzCC,wBAAwB,EAAE7C,OAAO,CAAC6C;AAClC,OAAA,CAAC;MAEFhD,UAAU,CAACE,IAAI,CAAC,GAAG;AAClB4B,QAAAA,SAAS,EAATA,SAAS;AACTJ,QAAAA,iBAAiB,EAAjBA,iBAAiB;AACjBS,QAAAA,QAAQ,EAAE,IAAI;QACdG,cAAc,EAAE,IAAIW,GAAG;OACvB;AACF;IAEAjD,UAAU,CAACE,IAAI,CAAC,CAACoC,cAAc,CAACY,GAAG,CAACtC,aAAa,CAAC;AAElD,IAAA,OAAOZ,UAAU,CAACE,IAAI,CAAC,CAACiC,QAAQ;GAChC,EAAE,CAACjC,IAAI,EAAEC,OAAO,CAAC6C,wBAAwB,EAAEpC,aAAa,CAAC,CAAC;AAE3D;AACA;AAEA,EAAA,IAAID,UAAU,IAAIA,UAAU,CAACT,IAAI,KAAKA,IAAI,EAAE;IAC3C,OAAO;MACN2B,KAAK,EAAElB,UAAU,CAACkB,KAAK;MACvBD,qBAAqB,EAAEjB,UAAU,CAACiB;KAClC;AACF;AAEA,EAAA,IAAIf,eAAe,EAAE;AACpB,IAAA,OAAOA,eAAe;AACvB;AAEA,EAAA,MAAMb,UAAU,CAACE,IAAI,CAAC,CAACwB,iBAAiB;AACzC;;;;"}
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}, [room, options.websocketSignalingServer, options.localDeviceOnly, setValueState])\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}, [room, options.websocketSignalingServer, options.maxClients])\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","destroy","send"],"mappings":";;;;IAYaA,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;AACpB,KAAA,CAAC;IACFlB,YAAY,CAACD,WAAS,CAAC;AACvBK,IAAAA,QAAQ,CAACL,WAAS,CAACI,KAAK,CAAC;AAEzB,IAAA,OAAO,YAAK;MACXJ,WAAS,CAACoB,OAAO,EAAE;MACnBnB,YAAY,CAAC,IAAI,CAAC;MAClBI,QAAQ,CAAC,EAAE,CAAC;KACZ;AACF,GAAC,EAAE,CAACd,IAAI,EAAEC,OAAO,CAAC0B,wBAAwB,EAAE1B,OAAO,CAAC2B,UAAU,CAAC,CAAC;AAEhET,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,CAAEqB,IAAI,CAAC7B,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;;;;"}
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.13",
3
+ "version": "0.0.14",
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.13",
42
+ "@device-portal/client": "^0.0.14",
43
43
  "@device-portal/constants": "*"
44
44
  },
45
45
  "devDependencies": {