@device-portal/react 0.0.4 → 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.
Files changed (36) hide show
  1. package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -367
  2. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  3. package/dist/client/src/delay.d.ts +1 -0
  4. package/dist/client/src/index.d.ts +7 -0
  5. package/dist/client/src/settings.d.ts +9 -0
  6. package/dist/client/src/utilities/Brand.d.ts +5 -0
  7. package/dist/client/src/webrtc/Initiator.d.ts +41 -0
  8. package/dist/client/src/webrtc/Peer.d.ts +40 -0
  9. package/dist/client/src/webrtc/PeerId.d.ts +2 -0
  10. package/dist/client/src/webrtc/Responder.d.ts +14 -0
  11. package/dist/consumer/DevicePortalConsumer.js +8 -16
  12. package/dist/consumer/DevicePortalConsumer.js.map +1 -1
  13. package/dist/consumer/useDevicePortalConsumer.js +3 -6
  14. package/dist/consumer/useDevicePortalConsumer.js.map +1 -1
  15. package/dist/provider/DevicePortalProvider.js +3 -3
  16. package/dist/provider/DevicePortalProvider.js.map +1 -1
  17. package/dist/provider/useDevicePortalPeer.js.map +1 -1
  18. package/dist/provider/useDevicePortalProvider.js +1 -3
  19. package/dist/provider/useDevicePortalProvider.js.map +1 -1
  20. package/dist/react/src/consumer/DevicePortalConsumer.d.ts +9 -0
  21. package/dist/react/src/consumer/useDevicePortalConsumer.d.ts +9 -0
  22. package/dist/react/src/index.d.ts +6 -0
  23. package/dist/react/src/provider/DevicePortalProvider.d.ts +13 -0
  24. package/dist/react/src/provider/useDevicePortalPeer.d.ts +6 -0
  25. package/dist/react/src/provider/useDevicePortalProvider.d.ts +11 -0
  26. package/package.json +15 -3
  27. package/dist/delay.js +0 -8
  28. package/dist/delay.js.map +0 -1
  29. package/dist/settings.js +0 -12
  30. package/dist/settings.js.map +0 -1
  31. package/dist/webrtc/Initiator.js +0 -359
  32. package/dist/webrtc/Initiator.js.map +0 -1
  33. package/dist/webrtc/Peer.js +0 -367
  34. package/dist/webrtc/Peer.js.map +0 -1
  35. package/dist/webrtc/Responder.js +0 -133
  36. package/dist/webrtc/Responder.js.map +0 -1
@@ -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 '../webrtc/Responder'\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 } from '../webrtc/Initiator'\nimport { PeerId } from '../webrtc/PeerId'\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":"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"}
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 } from '../webrtc/Initiator'\nimport { PeerId } from '../webrtc/PeerId'\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":";;AASO,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;;;;"}
@@ -1,8 +1,6 @@
1
1
  import { slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
2
2
  import { useState, useRef, useEffect } from 'react';
3
- import { Initiator } from '../webrtc/Initiator.js';
4
-
5
- // @TODO: warn if one room is used by multiple useDevicePortalProvider hooks more than once at the same time
3
+ import { Initiator } from '@device-portal/client';
6
4
 
7
5
  var useDevicePortalProvider = function useDevicePortalProvider(room) {
8
6
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -1 +1 @@
1
- {"version":3,"file":"useDevicePortalProvider.js","sources":["../../src/provider/useDevicePortalProvider.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { Initiator } from '../webrtc/Initiator'\nimport { PeerId } from '../webrtc/PeerId'\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":";;;;AAIA;;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.4",
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",
@@ -31,6 +38,9 @@
31
38
  "peerDependencies": {
32
39
  "react": "18 || 19"
33
40
  },
41
+ "dependencies": {
42
+ "@device-portal/client": "^0.0.7"
43
+ },
34
44
  "devDependencies": {
35
45
  "@babel/core": "^7.24.0",
36
46
  "@babel/preset-env": "^7.24.0",
@@ -39,6 +49,8 @@
39
49
  "@rollup/plugin-babel": "^6.0.4",
40
50
  "@rollup/plugin-commonjs": "^25.0.7",
41
51
  "@rollup/plugin-node-resolve": "^15.2.3",
52
+ "@rollup/plugin-strip": "^3.0.4",
53
+ "@storybook/addon-docs": "^10.2.10",
42
54
  "@storybook/addon-links": "^10.2.10",
43
55
  "@storybook/addon-onboarding": "^10.2.10",
44
56
  "@storybook/react": "^10.2.10",
@@ -56,8 +68,8 @@
56
68
  "rollup-plugin-preserve-directives": "^0.3.1",
57
69
  "rollup-plugin-typescript2": "^0.36.0",
58
70
  "storybook": "^10.2.10",
59
- "vite": "^5.0.0",
60
- "@storybook/addon-docs": "^10.2.10"
71
+ "typescript": "^5.9.3",
72
+ "vite": "^5.0.0"
61
73
  },
62
74
  "files": [
63
75
  "/dist/"
package/dist/delay.js DELETED
@@ -1,8 +0,0 @@
1
- var delay = function delay(milliseconds) {
2
- return new Promise(function (resolve) {
3
- return setTimeout(resolve, milliseconds);
4
- });
5
- };
6
-
7
- export { delay };
8
- //# sourceMappingURL=delay.js.map
package/dist/delay.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"delay.js","sources":["../src/delay.ts"],"sourcesContent":["export const delay = (milliseconds: number) =>\n\tnew Promise((resolve) => setTimeout(resolve, milliseconds))\n"],"names":["delay","milliseconds","Promise","resolve","setTimeout"],"mappings":"IAAaA,KAAK,GAAG,SAARA,KAAKA,CAAIC,YAAoB,EAAA;AAAA,EAAA,OACzC,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAA;AAAA,IAAA,OAAKC,UAAU,CAACD,OAAO,EAAEF,YAAY,CAAC;GAAC,CAAA;AAAA;;;;"}
package/dist/settings.js DELETED
@@ -1,12 +0,0 @@
1
- var settings = {
2
- channel: {
3
- label: 'data'
4
- },
5
- defaultWebsocketSignalingServer: 'wss://device-portal.filipchalupa.cz',
6
- iceServers: [{
7
- urls: ['stun:stun1.l.google.com:19302', 'stun:stun3.l.google.com:19302']
8
- }]
9
- };
10
-
11
- export { settings };
12
- //# sourceMappingURL=settings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.js","sources":["../src/settings.ts"],"sourcesContent":["export const settings = {\n\tchannel: {\n\t\tlabel: 'data',\n\t},\n\tdefaultWebsocketSignalingServer: 'wss://device-portal.filipchalupa.cz',\n\ticeServers: [\n\t\t{\n\t\t\turls: ['stun:stun1.l.google.com:19302', 'stun:stun3.l.google.com:19302'],\n\t\t},\n\t] satisfies Array<RTCIceServer>,\n} as const\n"],"names":["settings","channel","label","defaultWebsocketSignalingServer","iceServers","urls"],"mappings":"AAAO,IAAMA,QAAQ,GAAG;AACvBC,EAAAA,OAAO,EAAE;AACRC,IAAAA,KAAK,EAAE;GACP;AACDC,EAAAA,+BAA+B,EAAE,qCAAqC;AACtEC,EAAAA,UAAU,EAAE,CACX;AACCC,IAAAA,IAAI,EAAE,CAAC,+BAA+B,EAAE,+BAA+B;GACvE;AAEH;;;;"}
@@ -1,359 +0,0 @@
1
- import { inherits as _inherits, createClass as _createClass, createForOfIteratorHelper as _createForOfIteratorHelper, superPropGet as _superPropGet, asyncToGenerator as _asyncToGenerator, classCallCheck as _classCallCheck, callSuper as _callSuper, defineProperty as _defineProperty, regeneratorRuntime as _regeneratorRuntime } from '../_virtual/_rollupPluginBabelHelpers.js';
2
- import { Peer } from './Peer.js';
3
- import { settings } from '../settings.js';
4
-
5
- var Initiator = /*#__PURE__*/function (_Peer) {
6
- function Initiator(room) {
7
- var _options$maxClients;
8
- var _this;
9
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
10
- _classCallCheck(this, Initiator);
11
- _this = _callSuper(this, Initiator, [room, options]);
12
- _defineProperty(_this, "role", 'initiator');
13
- _defineProperty(_this, "connections", new Map());
14
- _defineProperty(_this, "waitingPeers", new Set());
15
- _defineProperty(_this, "peerListeners", new Map());
16
- _this.onMessage = options.onMessage;
17
- _this.onPeersChange = options.onPeersChange;
18
- _this.maxClients = (_options$maxClients = options.maxClients) !== null && _options$maxClients !== void 0 ? _options$maxClients : 1;
19
- return _this;
20
- }
21
- _inherits(Initiator, _Peer);
22
- return _createClass(Initiator, [{
23
- key: "peers",
24
- get: function get() {
25
- return Array.from(this.connections.keys());
26
- }
27
- }, {
28
- key: "addPeerListener",
29
- value: function addPeerListener(peerId, listener) {
30
- var _this2 = this;
31
- if (!this.peerListeners.has(peerId)) {
32
- this.peerListeners.set(peerId, new Set());
33
- }
34
- this.peerListeners.get(peerId).add(listener);
35
- return function () {
36
- var _this2$peerListeners$;
37
- (_this2$peerListeners$ = _this2.peerListeners.get(peerId)) === null || _this2$peerListeners$ === void 0 || _this2$peerListeners$["delete"](listener);
38
- };
39
- }
40
- }, {
41
- key: "onConnected",
42
- value: function onConnected() {
43
- console.log('[Initiator] Connected to signaling server');
44
- }
45
- }, {
46
- key: "handlePeerJoined",
47
- value: function () {
48
- var _handlePeerJoined = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(peerId) {
49
- var _this$onPeersChange;
50
- return _regeneratorRuntime().wrap(function _callee$(_context) {
51
- while (1) switch (_context.prev = _context.next) {
52
- case 0:
53
- console.log("[Initiator] Peer ".concat(peerId, " joined"));
54
- if (!(this.connections.size >= this.maxClients)) {
55
- _context.next = 5;
56
- break;
57
- }
58
- console.log("[Initiator] Max clients reached, adding ".concat(peerId, " to waiting list"));
59
- this.waitingPeers.add(peerId);
60
- return _context.abrupt("return");
61
- case 5:
62
- _context.next = 7;
63
- return this.createAndSendOffer(peerId);
64
- case 7:
65
- (_this$onPeersChange = this.onPeersChange) === null || _this$onPeersChange === void 0 || _this$onPeersChange.call(this, this.peers);
66
- case 8:
67
- case "end":
68
- return _context.stop();
69
- }
70
- }, _callee, this);
71
- }));
72
- function handlePeerJoined(_x) {
73
- return _handlePeerJoined.apply(this, arguments);
74
- }
75
- return handlePeerJoined;
76
- }()
77
- }, {
78
- key: "handlePeerLeft",
79
- value: function handlePeerLeft(peerId) {
80
- console.log("[Initiator] Peer ".concat(peerId, " left"));
81
- this.waitingPeers["delete"](peerId);
82
- var client = this.connections.get(peerId);
83
- if (client) {
84
- var _this$onPeersChange2;
85
- client.channel.close();
86
- client.connection.close();
87
- this.connections["delete"](peerId);
88
- (_this$onPeersChange2 = this.onPeersChange) === null || _this$onPeersChange2 === void 0 || _this$onPeersChange2.call(this, this.peers);
89
- this.processWaitingPeers();
90
- }
91
- }
92
- }, {
93
- key: "processWaitingPeers",
94
- value: function () {
95
- var _processWaitingPeers = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
96
- var nextPeerId, _this$onPeersChange3;
97
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
98
- while (1) switch (_context2.prev = _context2.next) {
99
- case 0:
100
- if (!(this.connections.size >= this.maxClients || this.waitingPeers.size === 0)) {
101
- _context2.next = 2;
102
- break;
103
- }
104
- return _context2.abrupt("return");
105
- case 2:
106
- nextPeerId = this.waitingPeers.values().next().value;
107
- if (!nextPeerId) {
108
- _context2.next = 9;
109
- break;
110
- }
111
- console.log("[Initiator] Slot available, connecting waiting peer: ".concat(nextPeerId));
112
- this.waitingPeers["delete"](nextPeerId);
113
- _context2.next = 8;
114
- return this.createAndSendOffer(nextPeerId);
115
- case 8:
116
- (_this$onPeersChange3 = this.onPeersChange) === null || _this$onPeersChange3 === void 0 || _this$onPeersChange3.call(this, this.peers);
117
- case 9:
118
- case "end":
119
- return _context2.stop();
120
- }
121
- }, _callee2, this);
122
- }));
123
- function processWaitingPeers() {
124
- return _processWaitingPeers.apply(this, arguments);
125
- }
126
- return processWaitingPeers;
127
- }()
128
- }, {
129
- key: "createAndSendOffer",
130
- value: function () {
131
- var _createAndSendOffer = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(toPeerId) {
132
- var _this3 = this;
133
- var existingClient, connection, channel, clientConnection, offer;
134
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
135
- while (1) switch (_context3.prev = _context3.next) {
136
- case 0:
137
- console.log("[Initiator] Creating offer for ".concat(toPeerId, "..."));
138
-
139
- // Close existing connection if any
140
- existingClient = this.connections.get(toPeerId);
141
- if (existingClient) {
142
- console.log("[Initiator] Closing existing connection for ".concat(toPeerId));
143
- existingClient.connection.close();
144
- existingClient.channel.close();
145
- }
146
- connection = new RTCPeerConnection({
147
- iceServers: this.iceServers
148
- });
149
- channel = connection.createDataChannel(settings.channel.label);
150
- clientConnection = {
151
- connection: connection,
152
- channel: channel,
153
- candidatesQueue: []
154
- };
155
- this.connections.set(toPeerId, clientConnection);
156
- connection.onicecandidate = function (event) {
157
- if (event.candidate) {
158
- _this3.sendMessage('ice-candidate', event.candidate.toJSON(), toPeerId);
159
- }
160
- };
161
- connection.oniceconnectionstatechange = function () {
162
- console.log("[Initiator] ICE state for ".concat(toPeerId, ": ").concat(connection.iceConnectionState));
163
- if (connection.iceConnectionState === 'disconnected' || connection.iceConnectionState === 'failed' || connection.iceConnectionState === 'closed') {
164
- var _this3$onPeersChange;
165
- _this3.connections["delete"](toPeerId);
166
- (_this3$onPeersChange = _this3.onPeersChange) === null || _this3$onPeersChange === void 0 || _this3$onPeersChange.call(_this3, _this3.peers);
167
- _this3.processWaitingPeers();
168
- }
169
- };
170
- channel.onopen = function () {
171
- console.log("[Initiator] Data channel opened for ".concat(toPeerId));
172
- if (_this3.value && _this3.sendLastValueOnConnectAndReconnect) {
173
- channel.send(_this3.value.value);
174
- }
175
- if (clientConnection.value) {
176
- channel.send(clientConnection.value.value);
177
- }
178
- };
179
- channel.onmessage = function (event) {
180
- var _this3$onMessage;
181
- console.log("[Initiator] Message from ".concat(toPeerId, ": ").concat(event.data));
182
- (_this3$onMessage = _this3.onMessage) === null || _this3$onMessage === void 0 || _this3$onMessage.call(_this3, event.data, toPeerId);
183
- var listeners = _this3.peerListeners.get(toPeerId);
184
- if (listeners) {
185
- var _iterator = _createForOfIteratorHelper(listeners),
186
- _step;
187
- try {
188
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
189
- var listener = _step.value;
190
- listener(event.data);
191
- }
192
- } catch (err) {
193
- _iterator.e(err);
194
- } finally {
195
- _iterator.f();
196
- }
197
- }
198
- };
199
- _context3.next = 13;
200
- return connection.createOffer();
201
- case 13:
202
- offer = _context3.sent;
203
- _context3.next = 16;
204
- return connection.setLocalDescription(offer);
205
- case 16:
206
- this.sendMessage('offer', offer, toPeerId);
207
- case 17:
208
- case "end":
209
- return _context3.stop();
210
- }
211
- }, _callee3, this);
212
- }));
213
- function createAndSendOffer(_x2) {
214
- return _createAndSendOffer.apply(this, arguments);
215
- }
216
- return createAndSendOffer;
217
- }()
218
- }, {
219
- key: "handleOffer",
220
- value: function handleOffer(offer, fromPeerId) {
221
- // Initiator does not handle offers
222
- }
223
- }, {
224
- key: "handleAnswer",
225
- value: function () {
226
- var _handleAnswer = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(answer, fromPeerId) {
227
- var client, candidate;
228
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
229
- while (1) switch (_context4.prev = _context4.next) {
230
- case 0:
231
- client = this.connections.get(fromPeerId);
232
- if (!client) {
233
- _context4.next = 11;
234
- break;
235
- }
236
- console.log("[Initiator] Handling answer from ".concat(fromPeerId));
237
- _context4.next = 5;
238
- return client.connection.setRemoteDescription(answer);
239
- case 5:
240
- if (!(client.candidatesQueue.length > 0)) {
241
- _context4.next = 11;
242
- break;
243
- }
244
- candidate = client.candidatesQueue.shift();
245
- _context4.next = 9;
246
- return client.connection.addIceCandidate(new RTCIceCandidate(candidate));
247
- case 9:
248
- _context4.next = 5;
249
- break;
250
- case 11:
251
- case "end":
252
- return _context4.stop();
253
- }
254
- }, _callee4, this);
255
- }));
256
- function handleAnswer(_x3, _x4) {
257
- return _handleAnswer.apply(this, arguments);
258
- }
259
- return handleAnswer;
260
- }()
261
- }, {
262
- key: "handleIceCandidate",
263
- value: function () {
264
- var _handleIceCandidate = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(candidate, fromPeerId) {
265
- var client;
266
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
267
- while (1) switch (_context5.prev = _context5.next) {
268
- case 0:
269
- if (fromPeerId) {
270
- _context5.next = 2;
271
- break;
272
- }
273
- return _context5.abrupt("return");
274
- case 2:
275
- client = this.connections.get(fromPeerId);
276
- if (!client) {
277
- _context5.next = 10;
278
- break;
279
- }
280
- if (!client.connection.remoteDescription) {
281
- _context5.next = 9;
282
- break;
283
- }
284
- _context5.next = 7;
285
- return client.connection.addIceCandidate(new RTCIceCandidate(candidate));
286
- case 7:
287
- _context5.next = 10;
288
- break;
289
- case 9:
290
- client.candidatesQueue.push(candidate);
291
- case 10:
292
- case "end":
293
- return _context5.stop();
294
- }
295
- }, _callee5, this);
296
- }));
297
- function handleIceCandidate(_x5, _x6) {
298
- return _handleIceCandidate.apply(this, arguments);
299
- }
300
- return handleIceCandidate;
301
- }()
302
- }, {
303
- key: "send",
304
- value: function send(value) {
305
- this.value = {
306
- value: value
307
- };
308
- var _iterator2 = _createForOfIteratorHelper(this.connections.values()),
309
- _step2;
310
- try {
311
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
312
- var client = _step2.value;
313
- if (client.channel.readyState === 'open') {
314
- client.channel.send(value);
315
- }
316
- }
317
- } catch (err) {
318
- _iterator2.e(err);
319
- } finally {
320
- _iterator2.f();
321
- }
322
- }
323
- }, {
324
- key: "sendToPeer",
325
- value: function sendToPeer(peerId, value) {
326
- var client = this.connections.get(peerId);
327
- if (!client) return;
328
- client.value = {
329
- value: value
330
- };
331
- if (client && client.channel.readyState === 'open') {
332
- client.channel.send(value);
333
- }
334
- }
335
- }, {
336
- key: "destroy",
337
- value: function destroy() {
338
- _superPropGet(Initiator, "destroy", this)([]);
339
- var _iterator3 = _createForOfIteratorHelper(this.connections.values()),
340
- _step3;
341
- try {
342
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
343
- var client = _step3.value;
344
- client.channel.close();
345
- client.connection.close();
346
- }
347
- } catch (err) {
348
- _iterator3.e(err);
349
- } finally {
350
- _iterator3.f();
351
- }
352
- this.connections.clear();
353
- this.peerListeners.clear();
354
- }
355
- }]);
356
- }(Peer);
357
-
358
- export { Initiator };
359
- //# sourceMappingURL=Initiator.js.map