@device-portal/react 0.0.5 → 0.0.7

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.
@@ -0,0 +1 @@
1
+ export declare const delay: (milliseconds: number) => Promise<unknown>;
@@ -0,0 +1,7 @@
1
+ export * from './webrtc/Peer';
2
+ export * from './webrtc/Initiator';
3
+ export * from './webrtc/Responder';
4
+ export * from './webrtc/PeerId';
5
+ export * from './settings';
6
+ export * from './delay';
7
+ export * from './utilities/Brand';
@@ -0,0 +1,9 @@
1
+ export declare const settings: {
2
+ readonly channel: {
3
+ readonly label: "data";
4
+ };
5
+ readonly defaultWebsocketSignalingServer: "wss://device-portal.filipchalupa.cz";
6
+ readonly iceServers: {
7
+ urls: string[];
8
+ }[];
9
+ };
@@ -0,0 +1,5 @@
1
+ declare const brandKey: "__brand";
2
+ export type Brand<Value, BrandName extends string> = Value & {
3
+ [brandKey]: BrandName;
4
+ };
5
+ export {};
@@ -0,0 +1,41 @@
1
+ import { Peer } from './Peer';
2
+ import { PeerId } from './PeerId';
3
+ type ClientConnection = {
4
+ connection: RTCPeerConnection;
5
+ channel: RTCDataChannel;
6
+ candidatesQueue: RTCIceCandidateInit[];
7
+ value?: {
8
+ value: string;
9
+ };
10
+ };
11
+ export declare class Initiator extends Peer {
12
+ protected role: "initiator";
13
+ protected connections: Map<PeerId, ClientConnection>;
14
+ protected waitingPeers: Set<PeerId>;
15
+ protected readonly maxClients: number;
16
+ protected peerListeners: Map<PeerId, Set<(value: string) => void>>;
17
+ protected onPeersChange: ((peers: PeerId[]) => void) | undefined;
18
+ protected readonly onMessage: ((value: string, peerId: PeerId) => void) | undefined;
19
+ constructor(room: string, options?: {
20
+ onMessage?: (value: string, peerId: PeerId) => void;
21
+ onPeersChange?: (peers: PeerId[]) => void;
22
+ sendLastValueOnConnectAndReconnect?: boolean;
23
+ websocketSignalingServer?: string;
24
+ iceServers?: Array<RTCIceServer>;
25
+ maxClients?: number;
26
+ });
27
+ get peers(): PeerId[];
28
+ addPeerListener(peerId: PeerId, listener: (value: string) => void): () => void;
29
+ protected onConnected(): void;
30
+ protected handlePeerJoined(peerId: PeerId): Promise<void>;
31
+ protected handlePeerLeft(peerId: PeerId): void;
32
+ protected processWaitingPeers(): Promise<void>;
33
+ protected createAndSendOffer(toPeerId: PeerId): Promise<void>;
34
+ protected handleOffer(offer: RTCSessionDescriptionInit, fromPeerId: PeerId): void;
35
+ protected handleAnswer(answer: RTCSessionDescriptionInit, fromPeerId: PeerId): Promise<void>;
36
+ protected handleIceCandidate(candidate: RTCIceCandidateInit, fromPeerId?: PeerId): Promise<void>;
37
+ send(value: string): void;
38
+ sendToPeer(peerId: PeerId, value: string): void;
39
+ destroy(): void;
40
+ }
41
+ export {};
@@ -0,0 +1,40 @@
1
+ import { PeerId } from './PeerId';
2
+ export declare abstract class Peer {
3
+ protected readonly room: string;
4
+ protected isDestroyed: boolean;
5
+ protected connection: RTCPeerConnection | null;
6
+ protected channel: RTCDataChannel | null;
7
+ protected abstract role: 'initiator' | 'responder';
8
+ protected value: {
9
+ value: string;
10
+ } | null;
11
+ protected readonly onMessage: ((value: string, peerId: PeerId) => void) | undefined;
12
+ protected readonly sendLastValueOnConnectAndReconnect: boolean;
13
+ protected readonly websocketSignalingServer: string;
14
+ protected readonly iceServers: Array<RTCIceServer>;
15
+ protected socket: WebSocket | null;
16
+ protected candidatesQueue: RTCIceCandidateInit[];
17
+ protected peerId: PeerId | null;
18
+ constructor(room: string, options?: {
19
+ websocketSignalingServer?: string;
20
+ onMessage?: (value: string, peerId: PeerId) => void;
21
+ sendLastValueOnConnectAndReconnect?: boolean;
22
+ iceServers?: Array<RTCIceServer>;
23
+ });
24
+ protected run(): Promise<void>;
25
+ protected connect(): Promise<void>;
26
+ protected abstract handleOffer(offer: RTCSessionDescriptionInit, fromPeerId: PeerId): void;
27
+ protected abstract handleAnswer(answer: RTCSessionDescriptionInit, fromPeerId: PeerId): void;
28
+ protected abstract handlePeerJoined(peerId: PeerId): void;
29
+ protected abstract handlePeerLeft(peerId: PeerId): void;
30
+ protected abstract onConnected(): void;
31
+ protected handleIceCandidate(candidate: RTCIceCandidateInit, fromPeerId?: PeerId): Promise<void>;
32
+ protected processCandidatesQueue(): Promise<void>;
33
+ protected close(): void;
34
+ destroy(): void;
35
+ protected sendMessage(type: string, data: any, to?: PeerId): void;
36
+ protected setAndShareLocalDescription(description: RTCSessionDescriptionInit, toPeerId?: PeerId): Promise<void>;
37
+ protected shareNewIceCandidate(event: RTCPeerConnectionIceEvent, toPeerId?: PeerId): void;
38
+ send(value: string): void;
39
+ protected initializeConnectionAndChannel(): void;
40
+ }
@@ -0,0 +1,2 @@
1
+ import { Brand } from '../utilities/Brand';
2
+ export type PeerId = Brand<string, 'PeerId'>;
@@ -0,0 +1,14 @@
1
+ import { Peer } from './Peer';
2
+ import { PeerId } from './PeerId';
3
+ export declare class Responder extends Peer {
4
+ protected role: "responder";
5
+ private reconnectTimeout;
6
+ protected onConnected(): void;
7
+ protected handlePeerJoined(peerId: PeerId): void;
8
+ protected handlePeerLeft(peerId: PeerId): void;
9
+ private startReconnectionTimer;
10
+ private stopReconnectionTimer;
11
+ protected handleOffer(offer: RTCSessionDescriptionInit, fromPeerId: PeerId): Promise<void>;
12
+ destroy(): void;
13
+ protected handleAnswer(answer: RTCSessionDescriptionInit, fromPeerId: PeerId): void;
14
+ }
@@ -1,9 +1,9 @@
1
1
  import { c } from 'react/compiler-runtime';
2
- import { useDevicePortalConsumer } from './useDevicePortalConsumer.js';
3
2
  import { jsx, Fragment } from 'react/jsx-runtime';
3
+ import { useDevicePortalConsumer } from './useDevicePortalConsumer.js';
4
4
 
5
5
  var DevicePortalConsumer = function DevicePortalConsumer(t0) {
6
- var $ = c(8);
6
+ var $ = c(6);
7
7
  var room = t0.room,
8
8
  websocketSignalingServer = t0.websocketSignalingServer,
9
9
  children = t0.children;
@@ -22,9 +22,11 @@ var DevicePortalConsumer = function DevicePortalConsumer(t0) {
22
22
  sendMessageToProvider = _useDevicePortalConsu.sendMessageToProvider;
23
23
  var t2;
24
24
  if ($[2] !== children || $[3] !== sendMessageToProvider || $[4] !== value) {
25
- t2 = children({
26
- value: value,
27
- sendMessageToProvider: sendMessageToProvider
25
+ t2 = jsx(Fragment, {
26
+ children: children({
27
+ value: value,
28
+ sendMessageToProvider: sendMessageToProvider
29
+ })
28
30
  });
29
31
  $[2] = children;
30
32
  $[3] = sendMessageToProvider;
@@ -33,17 +35,7 @@ var DevicePortalConsumer = function DevicePortalConsumer(t0) {
33
35
  } else {
34
36
  t2 = $[5];
35
37
  }
36
- var t3;
37
- if ($[6] !== t2) {
38
- t3 = /*#__PURE__*/jsx(Fragment, {
39
- children: t2
40
- });
41
- $[6] = t2;
42
- $[7] = t3;
43
- } else {
44
- t3 = $[7];
45
- }
46
- return t3;
38
+ return t2;
47
39
  };
48
40
 
49
41
  export { DevicePortalConsumer };
@@ -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","t3","_jsx","_Fragment"],"mappings":";;;;IAGaA,oBAOX,GAAG,SAPQA,oBAOXA,CAAAC,EAAA,EAAA;EAAA,IAAAC,CAAA,GAAAC,CAAA,CAAA,CAAA,CAAA;AAAI,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;IACQE,EAAA,GAAAN,QAAQ,CAAC;AAAAI,MAAAA,KAAA,EAAEA,KAAK;AAAAC,MAAAA,qBAAA,EAAEA;AAAsB,KAAC,CAAC;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,IAAAW,EAAA;EAAA,IAAAX,CAAA,QAAAU,EAAA,EAAA;IAA7CC,EAAA,gBAAAC,GAAA,CAAAC,QAAA,EAAA;AAAAT,MAAAA,QAAA,EAAGM;AAA0C,KAAG,CAAC;AAAAV,IAAAA,CAAA,MAAAU,EAAA;AAAAV,IAAAA,CAAA,MAAAW,EAAA;AAAA,GAAA,MAAA;AAAAA,IAAAA,EAAA,GAAAX,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,EAAA,OAAjDW,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\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;;;;"}
@@ -11,8 +11,7 @@ var useDevicePortalConsumer = function useDevicePortalConsumer(room) {
11
11
  setValueState = _useState2[1];
12
12
  var currentConsumer = useMemo(function () {
13
13
  if (!responders[room]) {
14
- var _withResolvers, _withResolvers2, _ref2;
15
- console.log("[useDevicePortalConsumer] Creating new Responder for room: ".concat(room));
14
+ var _Promise$withResolver, _Promise$withResolver2;
16
15
  var withResolvers = function withResolvers() {
17
16
  var resolve;
18
17
  var reject;
@@ -26,7 +25,7 @@ var useDevicePortalConsumer = function useDevicePortalConsumer(room) {
26
25
  reject: reject
27
26
  };
28
27
  };
29
- var _ref = (_withResolvers = (_withResolvers2 = (_ref2 = Promise).withResolvers) === null || _withResolvers2 === void 0 ? void 0 : _withResolvers2.call(_ref2)) !== null && _withResolvers !== void 0 ? _withResolvers : withResolvers(),
28
+ var _ref = (_Promise$withResolver = (_Promise$withResolver2 = Promise.withResolvers) === null || _Promise$withResolver2 === void 0 ? void 0 : _Promise$withResolver2.call(Promise)) !== null && _Promise$withResolver !== void 0 ? _Promise$withResolver : withResolvers(),
30
29
  firstValuePromise = _ref.promise,
31
30
  firstValueResolve = _ref.resolve;
32
31
  var sendMessageToProvider = function sendMessageToProvider(value) {
@@ -70,10 +69,8 @@ var useDevicePortalConsumer = function useDevicePortalConsumer(room) {
70
69
  responders[room].setValueStates.add(setValueState);
71
70
  return responders[room].consumer;
72
71
  }, [room, options.websocketSignalingServer, setValueState]);
73
-
74
72
  // Cleanup on unmount (though this hook is currently designed for global persistence)
75
73
  // useEffect(() => () => { responders[room]?.setValueStates.delete(setValueState) }, [room, setValueState]);
76
-
77
74
  if (valueState && valueState.room === room) {
78
75
  return {
79
76
  value: valueState.value,
@@ -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","_withResolvers","_withResolvers2","_ref2","console","log","concat","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":"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"}
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":"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"}
@@ -1,9 +1,9 @@
1
1
  import { objectWithoutProperties as _objectWithoutProperties } from '../_virtual/_rollupPluginBabelHelpers.js';
2
2
  import { c } from 'react/compiler-runtime';
3
+ import { jsx } from 'react/jsx-runtime';
3
4
  import { Fragment } from 'react';
4
5
  import { useDevicePortalPeer } from './useDevicePortalPeer.js';
5
6
  import { useDevicePortalProvider } from './useDevicePortalProvider.js';
6
- import { jsx } from 'react/jsx-runtime';
7
7
 
8
8
  var _excluded = ["room", "children"];
9
9
  var DevicePortalProvider = function DevicePortalProvider(t0) {
@@ -36,9 +36,9 @@ var DevicePortalProvider = function DevicePortalProvider(t0) {
36
36
  var t2;
37
37
  if ($[8] !== children || $[9] !== initiator) {
38
38
  t2 = function t2(peerId) {
39
- return /*#__PURE__*/jsx(Fragment, {
39
+ return jsx(Fragment, {
40
40
  children: children(function (options_0) {
41
- return /*#__PURE__*/jsx(PeerBase, {
41
+ return jsx(PeerBase, {
42
42
  peerId: peerId,
43
43
  initiator: initiator,
44
44
  options: options_0
@@ -1 +1 @@
1
- {"version":3,"file":"DevicePortalProvider.js","sources":["../../src/provider/DevicePortalProvider.tsx"],"sourcesContent":["import { Fragment, type FunctionComponent, type ReactNode } from 'react'\nimport { type Initiator, type PeerId } from '@device-portal/client'\nimport { PeerOptions, useDevicePortalPeer } from './useDevicePortalPeer'\nimport {\n\tuseDevicePortalProvider,\n\ttype DevicePortalProviderOptions,\n} from './useDevicePortalProvider'\n\nexport const DevicePortalProvider: FunctionComponent<\n\t{\n\t\troom: string\n\t} & Omit<DevicePortalProviderOptions, 'value'> &\n\t\t(\n\t\t\t| {\n\t\t\t\t\tvalue?: undefined\n\t\t\t\t\tchildren?: (\n\t\t\t\t\t\tPeer: FunctionComponent<PeerOptions>,\n\t\t\t\t\t\tpeerId: PeerId,\n\t\t\t\t\t) => ReactNode\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tvalue: string\n\t\t\t\t\tchildren?: undefined\n\t\t\t }\n\t\t)\n> = ({ room, children, ...options }) => {\n\tconst { peers, initiator } = useDevicePortalProvider(room, options)\n\n\tif (!initiator || !children) {\n\t\treturn null\n\t}\n\n\treturn peers.map((peerId) => (\n\t\t<Fragment key={peerId}>\n\t\t\t{children(\n\t\t\t\t(options) => (\n\t\t\t\t\t<PeerBase peerId={peerId} initiator={initiator} options={options} />\n\t\t\t\t),\n\t\t\t\tpeerId,\n\t\t\t)}\n\t\t</Fragment>\n\t))\n}\n\nconst PeerBase: FunctionComponent<{\n\tpeerId: PeerId\n\tinitiator: Initiator\n\toptions: PeerOptions\n}> = ({ peerId, initiator, options }) => {\n\tuseDevicePortalPeer(initiator, peerId, options)\n\treturn null\n}\n"],"names":["DevicePortalProvider","t0","$","_c","children","options","room","_t","_objectWithoutProperties","_excluded","_useDevicePortalProvi","useDevicePortalProvider","peers","initiator","t1","t2","peerId","_jsx","Fragment","options_0","PeerBase","map","useDevicePortalPeer"],"mappings":";;;;;;;;IAQaA,oBAiBZ,GAAG,SAjBSA,oBAiBZA,CAAAC,EAAA,EAAA;EAAA,IAAAC,CAAA,GAAAC,CAAA,CAAA,EAAA,CAAA;AAAA,EAAA,IAAAC,QAAA;AAAA,EAAA,IAAAC,OAAA;AAAA,EAAA,IAAAC,IAAA;EAAA,IAAAJ,CAAA,QAAAD,EAAA,EAAA;IAAA,IAAAM,EAAA,GAAIN,EAA8B;IAAAK,IAAA,GAAAC,EAAA,CAAAD,IAAA;IAAAF,QAAA,GAAAG,EAAA,CAAAH,QAAA;AAAAC,IAAAA,OAAA,GAAAG,wBAAA,CAAAD,EAAA,EAAAE,SAAA,CAAA;AAAAP,IAAAA,CAAA,MAAAD,EAAA;AAAAC,IAAAA,CAAA,MAAAE,QAAA;AAAAF,IAAAA,CAAA,MAAAG,OAAA;AAAAH,IAAAA,CAAA,MAAAI,IAAA;AAAA,GAAA,MAAA;AAAAF,IAAAA,QAAA,GAAAF,CAAA,CAAA,CAAA,CAAA;AAAAG,IAAAA,OAAA,GAAAH,CAAA,CAAA,CAAA,CAAA;AAAAI,IAAAA,IAAA,GAAAJ,CAAA,CAAA,CAAA,CAAA;AAAA;AAClC,EAAA,IAAAQ,qBAAA,GAA6BC,uBAAuB,CAACL,IAAI,EAAED,OAAO,CAAC;IAAAO,KAAA,GAAAF,qBAAA,CAAAE,KAAA;IAAAC,SAAA,GAAAH,qBAAA,CAAAG,SAAA;AAEnE,EAAA,IAAI,CAACA,SAAsB,IAAvB,CAAeT,QAAQ,EAAA;AAAA,IAAA,OACnB,IAAI;AAAA;AACX,EAAA,IAAAU,EAAA;EAAA,IAAAZ,CAAA,CAAAE,CAAAA,CAAAA,KAAAA,QAAA,IAAAF,CAAA,QAAAW,SAAA,IAAAX,CAAA,CAAA,CAAA,CAAA,KAAAU,KAAA,EAAA;AAAA,IAAA,IAAAG,EAAA;AAAA,IAAA,IAAAb,CAAA,CAAAE,CAAAA,CAAAA,KAAAA,QAAA,IAAAF,CAAA,QAAAW,SAAA,EAAA;MAEgBE,EAAA,GAAA,SAAAA,GAAAC,MAAA,EAAA;QAAA,oBAChBC,GAAA,CAACC,QAAQ,EAAA;AAAAd,UAAAA,QAAA,EACPA,QAAQ,CACR,UAAAe,SAAA,EAAA;YAAA,oBACCF,GAAA,CAACG,QAAQ,EAAA;AAASJ,cAAAA,MAAM,EAANA,MAAM;AAAaH,cAAAA,SAAS,EAATA,SAAS;AAAWR,cAAAA,OAAO,EAAPA;AAAO,aAAG,CAAC;AAAA,WACpE,EACDW,MACD;AAAC,SAAA,EANaA,MAOL,CAAC;OACX;AAAAd,MAAAA,CAAA,MAAAE,QAAA;AAAAF,MAAAA,CAAA,MAAAW,SAAA;AAAAX,MAAAA,CAAA,OAAAa,EAAA;AAAA,KAAA,MAAA;AAAAA,MAAAA,EAAA,GAAAb,CAAA,CAAA,EAAA,CAAA;AAAA;AATMY,IAAAA,EAAA,GAAAF,KAAK,CAAAS,GAAI,CAACN,EAShB,CAAC;AAAAb,IAAAA,CAAA,MAAAE,QAAA;AAAAF,IAAAA,CAAA,MAAAW,SAAA;AAAAX,IAAAA,CAAA,MAAAU,KAAA;AAAAV,IAAAA,CAAA,MAAAY,EAAA;AAAA,GAAA,MAAA;AAAAA,IAAAA,EAAA,GAAAZ,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,EAAA,OATKY,EASL;AAAA;AAGH,IAAMM,QAIJ,GAAG,SAJCA,QAIJA,CAAAnB,EAAA,EAAA;AAAI,EAAA,IAAAe,MAAA,GAAAf,EAA8B,CAAAe,MAAA;IAAAH,SAAA,GAA9BZ,EAA8B,CAAAY,SAAA;IAAAR,OAAA,GAA9BJ,EAA8B,CAAAI,OAAA;AACnCiB,EAAAA,mBAAmB,CAACT,SAAS,EAAEG,MAAM,EAAEX,OAAO,CAAC;AAAA,EAAA,OACxC,IAAI;AAAA,CACX;;;;"}
1
+ {"version":3,"file":"DevicePortalProvider.js","sources":["../../src/provider/DevicePortalProvider.tsx"],"sourcesContent":["import { Fragment, type FunctionComponent, type ReactNode } from 'react'\nimport { type Initiator, type PeerId } from '@device-portal/client'\nimport { PeerOptions, useDevicePortalPeer } from './useDevicePortalPeer'\nimport {\n\tuseDevicePortalProvider,\n\ttype DevicePortalProviderOptions,\n} from './useDevicePortalProvider'\n\nexport const DevicePortalProvider: FunctionComponent<\n\t{\n\t\troom: string\n\t} & Omit<DevicePortalProviderOptions, 'value'> &\n\t\t(\n\t\t\t| {\n\t\t\t\t\tvalue?: undefined\n\t\t\t\t\tchildren?: (\n\t\t\t\t\t\tPeer: FunctionComponent<PeerOptions>,\n\t\t\t\t\t\tpeerId: PeerId,\n\t\t\t\t\t) => ReactNode\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tvalue: string\n\t\t\t\t\tchildren?: undefined\n\t\t\t }\n\t\t)\n> = ({ room, children, ...options }) => {\n\tconst { peers, initiator } = useDevicePortalProvider(room, options)\n\n\tif (!initiator || !children) {\n\t\treturn null\n\t}\n\n\treturn peers.map((peerId) => (\n\t\t<Fragment key={peerId}>\n\t\t\t{children(\n\t\t\t\t(options) => (\n\t\t\t\t\t<PeerBase peerId={peerId} initiator={initiator} options={options} />\n\t\t\t\t),\n\t\t\t\tpeerId,\n\t\t\t)}\n\t\t</Fragment>\n\t))\n}\n\nconst PeerBase: FunctionComponent<{\n\tpeerId: PeerId\n\tinitiator: Initiator\n\toptions: PeerOptions\n}> = ({ peerId, initiator, options }) => {\n\tuseDevicePortalPeer(initiator, peerId, options)\n\treturn null\n}\n"],"names":["DevicePortalProvider","t0","$","_c","children","options","room","_t","_objectWithoutProperties","_excluded","_useDevicePortalProvi","useDevicePortalProvider","peers","initiator","t1","t2","peerId","_jsx","Fragment","options_0","PeerBase","map","useDevicePortalPeer"],"mappings":";;;;;;;;IAQaA,oBAAoB,GAiB7B,SAjBSA,oBAAoBA,CAAAC,EAAA,EAAA;EAAA,IAAAC,CAAA,GAAAC,CAAA,CAAA,EAAA,CAAA;AAAA,EAAA,IAAAC,QAAA;AAAA,EAAA,IAAAC,OAAA;AAAA,EAAA,IAAAC,IAAA;EAAA,IAAAJ,CAAA,QAAAD,EAAA,EAAA;IAAA,IAAAM,EAAA,GAiB5BN,EAA8B;IAAAK,IAAA,GAAAC,EAAA,CAAAD,IAAA;IAAAF,QAAA,GAAAG,EAAA,CAAAH,QAAA;AAAAC,IAAAA,OAAA,GAAAG,wBAAA,CAAAD,EAAA,EAAAE,SAAA,CAAA;AAAAP,IAAAA,CAAA,MAAAD,EAAA;AAAAC,IAAAA,CAAA,MAAAE,QAAA;AAAAF,IAAAA,CAAA,MAAAG,OAAA;AAAAH,IAAAA,CAAA,MAAAI,IAAA;AAAA,GAAA,MAAA;AAAAF,IAAAA,QAAA,GAAAF,CAAA,CAAA,CAAA,CAAA;AAAAG,IAAAA,OAAA,GAAAH,CAAA,CAAA,CAAA,CAAA;AAAAI,IAAAA,IAAA,GAAAJ,CAAA,CAAA,CAAA,CAAA;AAAA;AAClC,EAAA,IAAAQ,qBAAA,GAA6BC,uBAAuB,CAACL,IAAI,EAAED,OAAO,CAAC;IAAAO,KAAA,GAAAF,qBAAA,CAAAE,KAAA;IAAAC,SAAA,GAAAH,qBAAA,CAAAG,SAAA;AAEnE,EAAA,IAAI,CAACA,SAAsB,IAAvB,CAAeT,QAAQ,EAAA;AAAA,IAAA,OACnB,IAAI;AAAA;AACX,EAAA,IAAAU,EAAA;EAAA,IAAAZ,CAAA,CAAAE,CAAAA,CAAAA,KAAAA,QAAA,IAAAF,CAAA,QAAAW,SAAA,IAAAX,CAAA,CAAA,CAAA,CAAA,KAAAU,KAAA,EAAA;AAAA,IAAA,IAAAG,EAAA;AAAA,IAAA,IAAAb,CAAA,CAAAE,CAAAA,CAAAA,KAAAA,QAAA,IAAAF,CAAA,QAAAW,SAAA,EAAA;MAEgBE,EAAA,GAAA,SAAAA,GAAAC,MAAA,EAAA;QAAA,OAChBC,IAACC,QAAQ,EAAA;AAAAd,UAAAA,QAAA,EACPA,QAAQ,CACR,UAAAe,SAAA,EAAA;YAAA,OACCF,GAAA,CAACG,QAAQ,EAAC;AAAAJ,cAAAA,MAAA,EAAQA,MAAM;AAAAH,cAAAA,SAAA,EAAaA,SAAS;AAAAR,cAAAA,OAAA,EAAWA;AAAW,aAAA,CAAA;AAAA,WACpE,EACDW,MAAM;WALOA,MAAM,CAOV;OACX;AAAAd,MAAAA,CAAA,MAAAE,QAAA;AAAAF,MAAAA,CAAA,MAAAW,SAAA;AAAAX,MAAAA,CAAA,OAAAa,EAAA;AAAA,KAAA,MAAA;AAAAA,MAAAA,EAAA,GAAAb,CAAA,CAAA,EAAA,CAAA;AAAA;AATMY,IAAAA,EAAA,GAAAF,KAAK,CAAAS,GAAI,CAACN,EAShB,CAAC;AAAAb,IAAAA,CAAA,MAAAE,QAAA;AAAAF,IAAAA,CAAA,MAAAW,SAAA;AAAAX,IAAAA,CAAA,MAAAU,KAAA;AAAAV,IAAAA,CAAA,MAAAY,EAAA;AAAA,GAAA,MAAA;AAAAA,IAAAA,EAAA,GAAAZ,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,EAAA,OATKY,EASL;AAAA;AAGH,IAAMM,QAAQ,GAIT,SAJCA,QAAQA,CAAAnB,EAAA,EAAA;AAIR,EAAA,IAAAe,MAAA,GAAAf,EAA8B,CAAAe,MAAA;IAAAH,SAAA,GAA9BZ,EAA8B,CAAAY,SAAA;IAAAR,OAAA,GAA9BJ,EAA8B,CAAAI,OAAA;AACnCiB,EAAAA,mBAAmB,CAACT,SAAS,EAAEG,MAAM,EAAEX,OAAO,CAAC;AAAA,EAAA,OACxC,IAAI;AAAA,CACX;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDevicePortalPeer.js","sources":["../../src/provider/useDevicePortalPeer.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { Initiator, type PeerId } from '@device-portal/client'\n\nexport type PeerOptions = {\n\tvalue?: string\n\tonMessageFromConsumer?: (value: string) => void\n}\n\nexport const useDevicePortalPeer = (\n\tinitiator: Initiator,\n\tpeerId: PeerId,\n\toptions: PeerOptions = {},\n) => {\n\tconst onMessageFromConsumerRef = useRef(options.onMessageFromConsumer)\n\tonMessageFromConsumerRef.current = options.onMessageFromConsumer\n\n\tuseEffect(() => {\n\t\tconst unsubscribe = initiator.addPeerListener(peerId, (value) => {\n\t\t\tonMessageFromConsumerRef.current?.(value)\n\t\t})\n\n\t\treturn unsubscribe\n\t}, [initiator, peerId])\n\n\tuseEffect(() => {\n\t\tif (options.value === undefined) {\n\t\t\treturn\n\t\t}\n\t\tinitiator.sendToPeer(peerId, options.value)\n\t}, [initiator, peerId, options.value])\n}\n"],"names":["useDevicePortalPeer","initiator","peerId","options","arguments","length","undefined","onMessageFromConsumerRef","useRef","onMessageFromConsumer","current","useEffect","unsubscribe","addPeerListener","value","_onMessageFromConsume","call","sendToPeer"],"mappings":";;AAQO,IAAMA,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAC/BC,SAAoB,EACpBC,MAAc,EAEV;AAAA,EAAA,IADJC,OAAoB,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAEzB,EAAA,IAAMG,wBAAwB,GAAGC,MAAM,CAACL,OAAO,CAACM,qBAAqB,CAAC;AACtEF,EAAAA,wBAAwB,CAACG,OAAO,GAAGP,OAAO,CAACM,qBAAqB;AAEhEE,EAAAA,SAAS,CAAC,YAAM;IACf,IAAMC,WAAW,GAAGX,SAAS,CAACY,eAAe,CAACX,MAAM,EAAE,UAACY,KAAK,EAAK;AAAA,MAAA,IAAAC,qBAAA;AAChE,MAAA,CAAAA,qBAAA,GAAAR,wBAAwB,CAACG,OAAO,MAAAK,IAAAA,IAAAA,qBAAA,KAAhCA,MAAAA,IAAAA,qBAAA,CAAAC,IAAA,CAAAT,wBAAwB,EAAWO,KAAK,CAAC;AAC1C,KAAC,CAAC;AAEF,IAAA,OAAOF,WAAW;AACnB,GAAC,EAAE,CAACX,SAAS,EAAEC,MAAM,CAAC,CAAC;AAEvBS,EAAAA,SAAS,CAAC,YAAM;AACf,IAAA,IAAIR,OAAO,CAACW,KAAK,KAAKR,SAAS,EAAE;AAChC,MAAA;AACD;IACAL,SAAS,CAACgB,UAAU,CAACf,MAAM,EAAEC,OAAO,CAACW,KAAK,CAAC;GAC3C,EAAE,CAACb,SAAS,EAAEC,MAAM,EAAEC,OAAO,CAACW,KAAK,CAAC,CAAC;AACvC;;;;"}
1
+ {"version":3,"file":"useDevicePortalPeer.js","sources":["../../src/provider/useDevicePortalPeer.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { Initiator, type PeerId } from '@device-portal/client'\n\nexport type PeerOptions = {\n\tvalue?: string\n\tonMessageFromConsumer?: (value: string) => void\n}\n\nexport const useDevicePortalPeer = (\n\tinitiator: Initiator,\n\tpeerId: PeerId,\n\toptions: PeerOptions = {},\n) => {\n\tconst onMessageFromConsumerRef = useRef(options.onMessageFromConsumer)\n\tonMessageFromConsumerRef.current = options.onMessageFromConsumer\n\n\tuseEffect(() => {\n\t\tconst unsubscribe = initiator.addPeerListener(peerId, (value) => {\n\t\t\tonMessageFromConsumerRef.current?.(value)\n\t\t})\n\n\t\treturn unsubscribe\n\t}, [initiator, peerId])\n\n\tuseEffect(() => {\n\t\tif (options.value === undefined) {\n\t\t\treturn\n\t\t}\n\t\tinitiator.sendToPeer(peerId, options.value)\n\t}, [initiator, peerId, options.value])\n}\n"],"names":["useDevicePortalPeer","initiator","peerId","options","arguments","length","undefined","onMessageFromConsumerRef","useRef","onMessageFromConsumer","current","useEffect","unsubscribe","addPeerListener","value","_onMessageFromConsume","call","sendToPeer"],"mappings":";;AAQO,IAAMA,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAC/BC,SAAoB,EACpBC,MAAc,EAEX;AAAA,EAAA,IADHC,OAAA,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAuB,EAAE;AAEzB,EAAA,IAAMG,wBAAwB,GAAGC,MAAM,CAACL,OAAO,CAACM,qBAAqB,CAAC;AACtEF,EAAAA,wBAAwB,CAACG,OAAO,GAAGP,OAAO,CAACM,qBAAqB;AAEhEE,EAAAA,SAAS,CAAC,YAAK;IACd,IAAMC,WAAW,GAAGX,SAAS,CAACY,eAAe,CAACX,MAAM,EAAE,UAACY,KAAK,EAAI;AAAA,MAAA,IAAAC,qBAAA;AAC/D,MAAA,CAAAA,qBAAA,GAAAR,wBAAwB,CAACG,OAAO,MAAAK,IAAAA,IAAAA,qBAAA,KAAhCA,MAAAA,IAAAA,qBAAA,CAAAC,IAAA,CAAAT,wBAAwB,EAAWO,KAAK,CAAC;AAC1C,KAAC,CAAC;AAEF,IAAA,OAAOF,WAAW;AACnB,GAAC,EAAE,CAACX,SAAS,EAAEC,MAAM,CAAC,CAAC;AAEvBS,EAAAA,SAAS,CAAC,YAAK;AACd,IAAA,IAAIR,OAAO,CAACW,KAAK,KAAKR,SAAS,EAAE;AAChC,MAAA;AACD;IACAL,SAAS,CAACgB,UAAU,CAACf,MAAM,EAAEC,OAAO,CAACW,KAAK,CAAC;GAC3C,EAAE,CAACb,SAAS,EAAEC,MAAM,EAAEC,OAAO,CAACW,KAAK,CAAC,CAAC;AACvC;;;;"}
@@ -2,8 +2,6 @@ import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelH
2
2
  import { useState, useRef, useEffect } from 'react';
3
3
  import { Initiator } from '@device-portal/client';
4
4
 
5
- // @TODO: warn if one room is used by multiple useDevicePortalProvider hooks more than once at the same time
6
-
7
5
  var useDevicePortalProvider = function useDevicePortalProvider(room) {
8
6
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
9
7
  var _useState = useState(null),
@@ -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":";;;;AAGA;;IASaA,uBAAuB,GAAG,SAA1BA,uBAAuBA,CACnCC,IAAY,EAER;AAAA,EAAA,IADJC,OAAoC,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,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,YAAM;AACf,IAAA,IAAMV,WAAS,GAAG,IAAIW,SAAS,CAACpB,IAAI,EAAE;AACrCqB,MAAAA,SAAS,EAAE,SAAXA,SAASA,CAAGC,KAAK,EAAEC,MAAM,EAAK;AAAA,QAAA,IAAAC,qBAAA;AAC7B,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,EAAK;QACzBC,QAAQ,CAACD,OAAK,CAAC;OACf;MACDc,wBAAwB,EAAE1B,OAAO,CAAC0B,wBAAwB;MAC1DC,UAAU,EAAE3B,OAAO,CAAC2B;AACrB,KAAC,CAAC;IACFlB,YAAY,CAACD,WAAS,CAAC;AACvBK,IAAAA,QAAQ,CAACL,WAAS,CAACI,KAAK,CAAC;AAEzB,IAAA,OAAO,YAAM;MACZJ,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,YAAM;AACf,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}\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;;;;"}
@@ -0,0 +1,9 @@
1
+ import { type FunctionComponent, type ReactNode } from 'react';
2
+ export declare const DevicePortalConsumer: FunctionComponent<{
3
+ room: string;
4
+ websocketSignalingServer?: string;
5
+ children: (data: {
6
+ value: string;
7
+ sendMessageToProvider: (message: string) => void;
8
+ }) => ReactNode;
9
+ }>;
@@ -0,0 +1,9 @@
1
+ type State = {
2
+ room: string;
3
+ value: string;
4
+ sendMessageToProvider: (value: string) => void;
5
+ };
6
+ export declare const useDevicePortalConsumer: (room: string, options?: {
7
+ websocketSignalingServer?: string;
8
+ }) => Pick<State, "value" | "sendMessageToProvider">;
9
+ export {};
@@ -0,0 +1,6 @@
1
+ export * from './provider/DevicePortalProvider';
2
+ export * from './provider/useDevicePortalProvider';
3
+ export * from './provider/useDevicePortalPeer';
4
+ export * from './consumer/DevicePortalConsumer';
5
+ export * from './consumer/useDevicePortalConsumer';
6
+ export { type PeerId } from '@device-portal/client';
@@ -0,0 +1,13 @@
1
+ import { type FunctionComponent, type ReactNode } from 'react';
2
+ import { type PeerId } from '@device-portal/client';
3
+ import { PeerOptions } from './useDevicePortalPeer';
4
+ import { type DevicePortalProviderOptions } from './useDevicePortalProvider';
5
+ export declare const DevicePortalProvider: FunctionComponent<{
6
+ room: string;
7
+ } & Omit<DevicePortalProviderOptions, 'value'> & ({
8
+ value?: undefined;
9
+ children?: (Peer: FunctionComponent<PeerOptions>, peerId: PeerId) => ReactNode;
10
+ } | {
11
+ value: string;
12
+ children?: undefined;
13
+ })>;
@@ -0,0 +1,6 @@
1
+ import { Initiator, type PeerId } from '@device-portal/client';
2
+ export type PeerOptions = {
3
+ value?: string;
4
+ onMessageFromConsumer?: (value: string) => void;
5
+ };
6
+ export declare const useDevicePortalPeer: (initiator: Initiator, peerId: PeerId, options?: PeerOptions) => void;
@@ -0,0 +1,11 @@
1
+ import { Initiator, type PeerId } from '@device-portal/client';
2
+ export type DevicePortalProviderOptions = {
3
+ value?: string;
4
+ websocketSignalingServer?: string;
5
+ onMessageFromConsumer?: (value: string, peerId: PeerId) => void;
6
+ maxClients?: number;
7
+ };
8
+ export declare const useDevicePortalProvider: (room: string, options?: DevicePortalProviderOptions) => {
9
+ peers: PeerId[];
10
+ initiator: Initiator | null;
11
+ };
package/package.json CHANGED
@@ -1,10 +1,17 @@
1
1
  {
2
2
  "name": "@device-portal/react",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "Simple WebRTC data channel for React.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
8
15
  "scripts": {
9
16
  "dev": "npm run dev:storybook",
10
17
  "build": "npm run build:package && npm run build:storybook",
@@ -32,7 +39,7 @@
32
39
  "react": "18 || 19"
33
40
  },
34
41
  "dependencies": {
35
- "@device-portal/client": "^0.0.5"
42
+ "@device-portal/client": "^0.0.7"
36
43
  },
37
44
  "devDependencies": {
38
45
  "@babel/core": "^7.24.0",
@@ -42,6 +49,8 @@
42
49
  "@rollup/plugin-babel": "^6.0.4",
43
50
  "@rollup/plugin-commonjs": "^25.0.7",
44
51
  "@rollup/plugin-node-resolve": "^15.2.3",
52
+ "@rollup/plugin-strip": "^3.0.4",
53
+ "@storybook/addon-docs": "^10.2.10",
45
54
  "@storybook/addon-links": "^10.2.10",
46
55
  "@storybook/addon-onboarding": "^10.2.10",
47
56
  "@storybook/react": "^10.2.10",
@@ -59,8 +68,8 @@
59
68
  "rollup-plugin-preserve-directives": "^0.3.1",
60
69
  "rollup-plugin-typescript2": "^0.36.0",
61
70
  "storybook": "^10.2.10",
62
- "vite": "^5.0.0",
63
- "@storybook/addon-docs": "^10.2.10"
71
+ "typescript": "^5.9.3",
72
+ "vite": "^5.0.0"
64
73
  },
65
74
  "files": [
66
75
  "/dist/"