@whereby.com/browser-sdk 2.0.0-beta2 → 2.0.0-beta3

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 (83) hide show
  1. package/README.md +0 -14
  2. package/dist/embed/index.d.ts +4 -1
  3. package/dist/embed/{index.js → index.esm.js} +117 -109
  4. package/dist/react/index.d.ts +397 -6
  5. package/dist/react/index.esm.js +8245 -0
  6. package/dist/utils/index.d.ts +5 -2
  7. package/dist/utils/{fakeWebcamFrame.js → index.esm.js} +68 -47
  8. package/dist/v2-beta3.js +15 -0
  9. package/package.json +22 -12
  10. package/dist/LocalMedia.d.ts +0 -70
  11. package/dist/LocalMedia.js +0 -208
  12. package/dist/RoomConnection.d.ts +0 -190
  13. package/dist/RoomConnection.js +0 -646
  14. package/dist/RoomParticipant.d.ts +0 -50
  15. package/dist/RoomParticipant.js +0 -48
  16. package/dist/api/ApiClient.d.ts +0 -26
  17. package/dist/api/ApiClient.js +0 -61
  18. package/dist/api/Credentials.d.ts +0 -17
  19. package/dist/api/Credentials.js +0 -16
  20. package/dist/api/HttpClient.d.ts +0 -16
  21. package/dist/api/HttpClient.js +0 -52
  22. package/dist/api/MultipartHttpClient.d.ts +0 -10
  23. package/dist/api/MultipartHttpClient.js +0 -25
  24. package/dist/api/OrganizationApiClient.d.ts +0 -16
  25. package/dist/api/OrganizationApiClient.js +0 -28
  26. package/dist/api/Response.d.ts +0 -29
  27. package/dist/api/Response.js +0 -9
  28. package/dist/api/credentialsService/index.d.ts +0 -27
  29. package/dist/api/credentialsService/index.js +0 -89
  30. package/dist/api/deviceService/index.d.ts +0 -9
  31. package/dist/api/deviceService/index.js +0 -23
  32. package/dist/api/extractUtils.d.ts +0 -16
  33. package/dist/api/extractUtils.js +0 -51
  34. package/dist/api/index.d.ts +0 -7
  35. package/dist/api/index.js +0 -7
  36. package/dist/api/localStorageWrapper/index.d.ts +0 -2
  37. package/dist/api/localStorageWrapper/index.js +0 -15
  38. package/dist/api/models/Account.d.ts +0 -20
  39. package/dist/api/models/Account.js +0 -24
  40. package/dist/api/models/Meeting.d.ts +0 -12
  41. package/dist/api/models/Meeting.js +0 -29
  42. package/dist/api/models/Organization.d.ts +0 -102
  43. package/dist/api/models/Organization.js +0 -81
  44. package/dist/api/models/Room.d.ts +0 -4
  45. package/dist/api/models/Room.js +0 -38
  46. package/dist/api/models/account/EmbeddedFreeTierStatus.d.ts +0 -13
  47. package/dist/api/models/account/EmbeddedFreeTierStatus.js +0 -17
  48. package/dist/api/modules/AbstractStore.d.ts +0 -5
  49. package/dist/api/modules/AbstractStore.js +0 -1
  50. package/dist/api/modules/ChromeStorageStore.d.ts +0 -10
  51. package/dist/api/modules/ChromeStorageStore.js +0 -21
  52. package/dist/api/modules/LocalStorageStore.d.ts +0 -9
  53. package/dist/api/modules/LocalStorageStore.js +0 -35
  54. package/dist/api/modules/tests/__mocks__/storage.d.ts +0 -10
  55. package/dist/api/modules/tests/__mocks__/storage.js +0 -19
  56. package/dist/api/organizationService/index.d.ts +0 -46
  57. package/dist/api/organizationService/index.js +0 -158
  58. package/dist/api/organizationServiceCache/index.d.ts +0 -13
  59. package/dist/api/organizationServiceCache/index.js +0 -16
  60. package/dist/api/parameterAssertUtils.d.ts +0 -13
  61. package/dist/api/parameterAssertUtils.js +0 -64
  62. package/dist/api/roomService/index.d.ts +0 -54
  63. package/dist/api/roomService/index.js +0 -160
  64. package/dist/api/test/helpers.d.ts +0 -7
  65. package/dist/api/test/helpers.js +0 -32
  66. package/dist/api/types.d.ts +0 -5
  67. package/dist/api/types.js +0 -1
  68. package/dist/react/VideoView.d.ts +0 -15
  69. package/dist/react/VideoView.js +0 -37
  70. package/dist/react/index.js +0 -4
  71. package/dist/react/useLocalMedia.d.ts +0 -29
  72. package/dist/react/useLocalMedia.js +0 -109
  73. package/dist/react/useRoomConnection.d.ts +0 -57
  74. package/dist/react/useRoomConnection.js +0 -340
  75. package/dist/utils/debounce.d.ts +0 -9
  76. package/dist/utils/debounce.js +0 -18
  77. package/dist/utils/fakeAudioStream.d.ts +0 -1
  78. package/dist/utils/fakeAudioStream.js +0 -18
  79. package/dist/utils/fakeWebcamFrame.d.ts +0 -1
  80. package/dist/utils/index.js +0 -2
  81. package/dist/v2-beta2.js +0 -2000
  82. package/dist/version.d.ts +0 -1
  83. package/dist/version.js +0 -1
@@ -1,2 +1,5 @@
1
- export { default as fakeAudioStream } from "./fakeAudioStream";
2
- export { default as fakeWebcamFrame } from "./fakeWebcamFrame";
1
+ declare function fakeAudioStream(): MediaStream;
2
+
3
+ declare function fakeWebcamFrame(canvas: HTMLCanvasElement): void;
4
+
5
+ export { fakeAudioStream, fakeWebcamFrame };
@@ -1,49 +1,70 @@
1
- let rotationAngle = 0;
2
- function drawWebcamFrame(canvas) {
3
- const context = canvas.getContext("2d");
4
- if (!context) {
5
- console.error("Canvas context not available");
6
- return;
7
- }
8
- const wheelRadius = 100;
9
- const wheelCenterX = canvas.width / 2;
10
- const wheelCenterY = canvas.height / 2;
11
- context.fillStyle = "darkgreen";
12
- context.fillRect(0, 0, canvas.width, canvas.height);
13
- context.save();
14
- context.translate(wheelCenterX, wheelCenterY);
15
- context.rotate(rotationAngle);
16
- const numSlices = 12;
17
- const sliceAngle = (2 * Math.PI) / numSlices;
18
- const colors = ["red", "orange", "yellow", "green", "blue", "purple"];
19
- for (let i = 0; i < numSlices; i++) {
20
- context.beginPath();
21
- context.moveTo(0, 0);
22
- context.arc(0, 0, wheelRadius, i * sliceAngle, (i + 1) * sliceAngle);
23
- context.fillStyle = colors[i % colors.length];
24
- context.fill();
25
- context.closePath();
26
- }
27
- context.restore();
28
- context.fillStyle = "white";
29
- context.font = "42px Arial";
30
- const topText = "Whereby Media Stream";
31
- const topTextWidth = context.measureText(topText).width;
32
- context.fillText(topText, canvas.width / 2 - topTextWidth / 2, 50);
33
- context.font = "32px Arial";
34
- const now = new Date();
35
- const timeText = `time: ${now.getHours().toString().padStart(2, "0")}:${now
36
- .getMinutes()
37
- .toString()
38
- .padStart(2, "0")}:${now.getSeconds().toString().padStart(2, "0")}.${now
39
- .getMilliseconds()
40
- .toString()
41
- .padStart(3, "0")}`;
42
- context.fillText(timeText, 10, canvas.height - 20);
43
- context.fillText(`rotation angle: ${rotationAngle.toFixed(2)}`, canvas.width - canvas.width / 2, canvas.height - 20);
44
- rotationAngle += 0.01;
1
+ function fakeAudioStream() {
2
+ const audioCtx = new AudioContext();
3
+ const oscillator = audioCtx.createOscillator();
4
+ const destination = audioCtx.createMediaStreamDestination();
5
+ oscillator.connect(destination);
6
+ oscillator.frequency.value = 400;
7
+ oscillator.type = "sine";
8
+ setInterval(() => {
9
+ if (oscillator.frequency.value <= 900) {
10
+ oscillator.frequency.value += 10;
11
+ }
12
+ else {
13
+ oscillator.frequency.value = 200;
14
+ }
15
+ }, 20);
16
+ oscillator.start();
17
+ return destination.stream;
45
18
  }
46
- export default function fakeWebcamFrame(canvas) {
47
- drawWebcamFrame(canvas);
48
- requestAnimationFrame(() => fakeWebcamFrame(canvas));
19
+
20
+ let rotationAngle = 0;
21
+ function drawWebcamFrame(canvas) {
22
+ const context = canvas.getContext("2d");
23
+ if (!context) {
24
+ console.error("Canvas context not available");
25
+ return;
26
+ }
27
+ const wheelRadius = 100;
28
+ const wheelCenterX = canvas.width / 2;
29
+ const wheelCenterY = canvas.height / 2;
30
+ context.fillStyle = "darkgreen";
31
+ context.fillRect(0, 0, canvas.width, canvas.height);
32
+ context.save();
33
+ context.translate(wheelCenterX, wheelCenterY);
34
+ context.rotate(rotationAngle);
35
+ const numSlices = 12;
36
+ const sliceAngle = (2 * Math.PI) / numSlices;
37
+ const colors = ["red", "orange", "yellow", "green", "blue", "purple"];
38
+ for (let i = 0; i < numSlices; i++) {
39
+ context.beginPath();
40
+ context.moveTo(0, 0);
41
+ context.arc(0, 0, wheelRadius, i * sliceAngle, (i + 1) * sliceAngle);
42
+ context.fillStyle = colors[i % colors.length];
43
+ context.fill();
44
+ context.closePath();
45
+ }
46
+ context.restore();
47
+ context.fillStyle = "white";
48
+ context.font = "42px Arial";
49
+ const topText = "Whereby Media Stream";
50
+ const topTextWidth = context.measureText(topText).width;
51
+ context.fillText(topText, canvas.width / 2 - topTextWidth / 2, 50);
52
+ context.font = "32px Arial";
53
+ const now = new Date();
54
+ const timeText = `time: ${now.getHours().toString().padStart(2, "0")}:${now
55
+ .getMinutes()
56
+ .toString()
57
+ .padStart(2, "0")}:${now.getSeconds().toString().padStart(2, "0")}.${now
58
+ .getMilliseconds()
59
+ .toString()
60
+ .padStart(3, "0")}`;
61
+ context.fillText(timeText, 10, canvas.height - 20);
62
+ context.fillText(`rotation angle: ${rotationAngle.toFixed(2)}`, canvas.width - canvas.width / 2, canvas.height - 20);
63
+ rotationAngle += 0.01;
64
+ }
65
+ function fakeWebcamFrame(canvas) {
66
+ drawWebcamFrame(canvas);
67
+ requestAnimationFrame(() => fakeWebcamFrame(canvas));
49
68
  }
69
+
70
+ export { fakeAudioStream, fakeWebcamFrame };
@@ -0,0 +1,15 @@
1
+ /*! (c) Andrea Giammarchi - ISC */
2
+ var e={};try{e.WeakMap=WeakMap}catch(t){e.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,s=a.prototype;return s.delete=function(e){return this.has(e)&&delete e[this._]},s.get=function(e){return this.has(e)?e[this._]:void 0},s.has=function(e){return r.call(e,this._)},s.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var t=e.WeakMap,n={};try{n.Event=new Event(".").constructor}catch(e){try{n.Event=new CustomEvent(".").constructor}catch(e){n.Event=function(e,t){t||(t={});var n=document.createEvent("Event"),r=!!t.bubbles,s=!!t.cancelable;n.initEvent(e,r,s);try{n.bubbles=r,n.cancelable=s}catch(n){}return n}}}var r=n.Event,s={};
3
+ /*! (c) Andrea Giammarchi - ISC */try{s.WeakSet=WeakSet}catch(e){!function(e){var t=new e,n=r.prototype;function r(n){t.set(this,new e),n&&n.forEach(this.add,this)}n.add=function(e){return t.get(this).set(e,1),this},n.delete=function(e){return t.get(this).delete(e)},n.has=function(e){return t.get(this).has(e)},s.WeakSet=r}(WeakMap)}var a,o,i,c=s.WeakSet,l="-"+Math.random().toFixed(6)+"%",u=!1;
4
+ /*! (c) Andrea Giammarchi - ISC */try{a=document.createElement("template"),i="tabindex",(o="content")in a&&(a.innerHTML="<p "+i+'="'+l+'"></p>',a[o].childNodes[0].getAttribute(i)==l)||(l="_dt: "+l.slice(1,-1)+";",u=!0)}catch(e){}var h="\x3c!--"+l+"--\x3e",f=8,p=1,d=3,g=/^(?:plaintext|script|style|textarea|title|xmp)$/i,m=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;
5
+ /*! (c) Andrea Giammarchi - ISC */
6
+ function v(e){return e.join(h).replace(N,j).replace(C,A)}var b=" \\f\\n\\r\\t",y="[^"+b+"\\/>\"'=]+",w="["+b+"]+"+y,E="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",x="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+y.replace("\\/","")+"))?)",C=new RegExp(E+w+x+"+)(["+b+"]*/?>)","g"),N=new RegExp(E+w+x+"*)(["+b+"]*/>)","g"),k=new RegExp("("+w+"\\s*=\\s*)(['\"]?)"+h+"\\2","gi");function A(e,t,n,r){return"<"+t+n.replace(k,$)+r}function $(e,t,n){return t+(n||'"')+l+(n||'"')}function j(e,t,n){return m.test(t)?e:"<"+t+n+"></"+t+">"}const{isArray:O}=Array,{indexOf:S,slice:_}=[];var L=e=>({get:t=>e.get(t),set:(t,n)=>(e.set(t,n),n)});const M=(e,t)=>111===e.nodeType?1/t<0?t?(({firstChild:e,lastChild:t})=>{const n=document.createRange();return n.setStartAfter(e),n.setEndAfter(t),n.deleteContents(),e})(e):e.lastChild:t?e.valueOf():e.firstChild:e,T=e=>{const{childNodes:t}=e,{length:n}=t;if(n<2)return n?t[0]:e;const r=_.call(t,0);return{ELEMENT_NODE:1,nodeType:111,firstChild:r[0],lastChild:r[n-1],valueOf(){if(t.length!==n){let t=0;for(;t<n;)e.appendChild(r[t++])}return e}}};
7
+ /*! (c) Andrea Giammarchi - ISC */
8
+ var R=function(e){var t="fragment",n="template",r="content"in a(n)?function(e){var t=a(n);return t.innerHTML=e,t.content}:function(e){var r=a(t),o=a(n),i=null;if(/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)){var c=RegExp.$1;o.innerHTML="<table>"+e+"</table>",i=o.querySelectorAll(c)}else o.innerHTML=e,i=o.childNodes;return s(r,i),r};return function(e,t){return("svg"===t?o:r)(e)};function s(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function a(n){return n===t?e.createDocumentFragment():e.createElementNS("http://www.w3.org/1999/xhtml",n)}function o(e){var n=a(t),r=a("div");return r.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",s(n,r.firstChild.childNodes),n}}(document),P=(e,t,n,r,s)=>{const a=n.length;let o=t.length,i=a,c=0,l=0,u=null;for(;c<o||l<i;)if(o===c){const t=i<a?l?r(n[l-1],-0).nextSibling:r(n[i-l],0):s;for(;l<i;)e.insertBefore(r(n[l++],1),t)}else if(i===l)for(;c<o;)u&&u.has(t[c])||e.removeChild(r(t[c],-1)),c++;else if(t[c]===n[l])c++,l++;else if(t[o-1]===n[i-1])o--,i--;else if(t[c]===n[i-1]&&n[l]===t[o-1]){const s=r(t[--o],-1).nextSibling;e.insertBefore(r(n[l++],1),r(t[c++],-1).nextSibling),e.insertBefore(r(n[--i],1),s),t[o]=n[i]}else{if(!u){u=new Map;let e=l;for(;e<i;)u.set(n[e],e++)}if(u.has(t[c])){const s=u.get(t[c]);if(l<s&&s<i){let a=c,h=1;for(;++a<o&&a<i&&u.get(t[a])===s+h;)h++;if(h>s-l){const a=r(t[c],0);for(;l<s;)e.insertBefore(r(n[l++],1),a)}else e.replaceChild(r(n[l++],1),r(t[c++],-1))}else c++}else e.removeChild(r(t[c++],-1))}return n},W=function(e,t,n,r,s){var a=s in e,o=e.createDocumentFragment();return o[t](e[r]("g")),o[t](e[r]("")),(a?e[s](o,!0):o[n](!0)).childNodes.length<2?function e(r,s){for(var a=r[n](),o=r.childNodes||[],i=o.length,c=0;s&&c<i;c++)a[t](e(o[c],s));return a}:a?e[s]:function(e,t){return e[n](!!t)}}(document,"appendChild","cloneNode","createTextNode","importNode"),Z="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},B=u?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function z(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}function D(e,t,n,r){for(var s=e.childNodes,a=s.length,o=0;o<a;){var i=s[o];switch(i.nodeType){case p:var c=r.concat(o);U(i,t,n,c),D(i,t,n,c);break;case f:var u=i.textContent;if(u===l)n.shift(),t.push(g.test(e.nodeName)?I(e,r):F(i,r.concat(o)));else switch(u.slice(0,2)){case"/*":if("*/"!==u.slice(-2))break;case"👻":e.removeChild(i),o--,a--}break;case d:g.test(e.nodeName)&&Z.call(i.textContent)===h&&(n.shift(),t.push(I(e,r)))}o++}}function U(e,t,n,r){for(var s=e.attributes,a=[],o=[],i=B(s,n),c=i.length,f=0;f<c;){var p,d=i[f++],g=d.value===l;if(g||1<(p=d.value.split(h)).length){var m=d.name;if(a.indexOf(m)<0){a.push(m);var v=n.shift().replace(g?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+m+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),b=s[v]||s[v.toLowerCase()];if(g)t.push(H(b,r,v,null));else{for(var y=p.length-2;y--;)n.shift();t.push(H(b,r,v,p))}}o.push(d)}}f=0;for(var w=(0<(c=o.length)&&u&&!("ownerSVGElement"in e));f<c;){var E=o[f++];w&&(E.value=""),e.removeAttribute(E.name)}var x=e.nodeName;if(/^script$/i.test(x)){var C=document.createElement(x);for(c=s.length,f=0;f<c;)C.setAttributeNode(s[f++].cloneNode(!0));C.textContent=e.textContent,e.parentNode.replaceChild(C,e)}}function F(e,t){return{type:"any",node:e,path:t}}function H(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function I(e,t){return{type:"text",node:e,path:t}}var V=L(new t);function q(e,t){var n=(e.convert||v)(t),r=e.transform;r&&(n=r(n));var s=R(n,e.type);J(s);var a=[];return D(s,a,t.slice(0),[]),{content:s,updates:function(n){for(var r=[],s=a.length,o=0,i=0;o<s;){var c=a[o++],l=z(n,c.path);switch(c.type){case"any":r.push({fn:e.any(l,[]),sparse:!1});break;case"attr":var u=c.sparse,h=e.attribute(l,c.name,c.node);null===u?r.push({fn:h,sparse:!1}):(i+=u.length-2,r.push({fn:h,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(l),sparse:!1}),l.textContent=""}}return s+=i,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+" values instead of "+s+"\n"+t.join("${value}"));for(var a=1,o=1;a<e;){var i=r[a-o];if(i.sparse){var c=i.values,l=c[0],u=1,h=c.length;for(o+=h-2;u<h;)l+=arguments[a++]+c[u++];i.fn(l)}else i.fn(arguments[a++])}return n}}}}var K=[];function G(e){var t=K,n=J;return function(r){return t!==r&&(n=function(e,t){var n=V.get(t)||V.set(t,q(e,t));return n.updates(W.call(document,n.content,!0))}(e,t=r)),n.apply(null,arguments)}}function J(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===Z.call(r.textContent).length&&e.removeChild(r)}}
9
+ /*! (c) Andrea Giammarchi - ISC */var Q=function(){var e=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,t=/([^A-Z])([A-Z]+)/g;return function(e,t){return"ownerSVGElement"in e?function(e,t){var n;t?n=t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),n=e.getAttributeNode("style"));return n.value="",e.setAttributeNode(n),r(n,!0)}(e,t):r(e.style,!1)};function n(e,t,n){return t+"-"+n.toLowerCase()}function r(r,s){var a,o;return function(i){var c,l,u,h;switch(typeof i){case"object":if(i){if("object"===a){if(!s&&o!==i)for(l in o)l in i||(r[l]="")}else s?r.value="":r.cssText="";for(l in c=s?{}:r,i)u="number"!=typeof(h=i[l])||e.test(l)?h:h+"px",!s&&/^--/.test(l)?c.setProperty(l,u):c[l]=u;a="object",s?r.value=function(e){var r,s=[];for(r in e)s.push(r.replace(t,n),":",e[r],";");return s.join("")}(o=c):o=i;break}default:o!=i&&(a="string",o=i,s?r.value=i||"":r.cssText=i||"")}}}}();const X=(e,t)=>{let n,r=!0;const s=document.createAttributeNS(null,t);return t=>{n!==t&&(n=t,null==n?r||(e.removeAttributeNode(s),r=!0):(s.value=t,r&&(e.setAttributeNodeNS(s),r=!1)))}},Y=({dataset:e})=>t=>{for(const n in t){const r=t[n];null==r?delete e[n]:e[n]=r}},ee=(e,t)=>"dataset"===t?Y(e):n=>{e[t]=n},te=/^(?:form|list)$/i,ne=(e,t)=>e.ownerDocument.createTextNode(t);function re(e){return this.type=e,G(this)}function se(e){return e(this)}re.prototype={attribute(e,t,n){const r="svg"===this.type;switch(t){case"class":if(r)return X(e,t);t="className";case"props":return ee(e,t);case"aria":return(e=>t=>{for(const n in t){const r="role"===n?n:`aria-${n}`,s=t[n];null==s?e.removeAttribute(r):e.setAttribute(r,s)}})(e);case"style":return Q(e,n,r);case"ref":return(e=>t=>{"function"==typeof t?t(e):t.current=e})(e);case".dataset":return Y(e);default:return"."===t.slice(0,1)?ee(e,t.slice(1)):"?"===t.slice(0,1)?((e,t,n)=>r=>{n!==!!r&&((n=!!r)?e.setAttribute(t,""):e.removeAttribute(t))})(e,t.slice(1)):"on"===t.slice(0,2)?((e,t)=>{let n,r=t.slice(2);return!(t in e)&&t.toLowerCase()in e&&(r=r.toLowerCase()),t=>{const s=O(t)?t:[t,!1];n!==s[0]&&(n&&e.removeEventListener(r,n,s[1]),(n=s[0])&&e.addEventListener(r,n,s[1]))}})(e,t):!(t in e)||r||te.test(t)?X(e,t):((e,t)=>{let n;return r=>{n!==r&&(n=r,e[t]!==r&&(null==r?(e[t]="",e.removeAttribute(t)):e[t]=r))}})(e,t)}},any(e,t){const{type:n}=this;let r,s=!1;const a=o=>{switch(typeof o){case"string":case"number":case"boolean":s?r!==o&&(r=o,t[0].textContent=o):(s=!0,r=o,t=P(e.parentNode,t,[ne(e,o)],M,e));break;case"function":a(o(e));break;case"object":case"undefined":if(null==o){s=!1,t=P(e.parentNode,t,[],M,e);break}default:if(s=!1,r=o,O(o))if(0===o.length)t.length&&(t=P(e.parentNode,t,[],M,e));else switch(typeof o[0]){case"string":case"number":case"boolean":a(String(o));break;case"function":a(o.map(se,e));break;case"object":O(o[0])&&(o=o.concat.apply([],o));default:t=P(e.parentNode,t,o,M,e)}else"ELEMENT_NODE"in o?t=P(e.parentNode,t,11===o.nodeType?_.call(o.childNodes):[o],M,e):"text"in o?a(String(o.text)):"any"in o?a(o.any):"html"in o?t=P(e.parentNode,t,_.call(R([].concat(o.html).join(""),n).childNodes),M,e):"length"in o&&a(_.call(o))}};return a},text(e){let t;const n=r=>{if(t!==r){t=r;const s=typeof r;"object"===s&&r?"text"in r?n(String(r.text)):"any"in r?n(r.any):"html"in r?n([].concat(r.html).join("")):"length"in r&&n(_.call(r).join("")):"function"===s?n(r(e)):e.textContent=null==r?"":r}};return n}};const{create:ae,freeze:oe,keys:ie}=Object,ce=re.prototype,le=L(new t),ue=e=>({html:fe("html",e),svg:fe("svg",e),render(t,n){const r="function"==typeof n?n():n,s=le.get(t)||le.set(t,he()),a=r instanceof ge?pe(e,s,r):r;return a!==s.wire&&(s.wire=a,t.textContent="",t.appendChild(a.valueOf())),t}}),he=()=>({stack:[],entry:null,wire:null}),fe=(e,n)=>{const r=L(new t);return s.for=(e,t)=>{const a=r.get(e)||r.set(e,ae(null));return a[t]||(a[t]=(e=>function(){return pe(n,e,s.apply(null,arguments))})(he()))},s.node=function(){return pe(n,he(),s.apply(null,arguments)).valueOf()},s;function s(){return new ge(e,ve.apply(null,arguments))}},pe=(e,t,{type:n,template:r,values:s})=>{const{length:a}=s;de(e,t,s,a);let{entry:o}=t;if(o&&o.template===r&&o.type===n)o.tag(r,...s);else{const a=new e(n);t.entry=o={type:n,template:r,tag:a,wire:T(a(r,...s))}}return o.wire},de=(e,{stack:t},n,r)=>{for(let s=0;s<r;s++){const r=n[s];r instanceof me?n[s]=pe(e,t[s]||(t[s]=he()),r):O(r)?de(e,t[s]||(t[s]=he()),r,r.length):t[s]=null}r<t.length&&t.splice(r)};function ge(e,t){this.type=e,this.template=t.shift(),this.values=t}oe(ge);const me=ge;function ve(){let e=[],t=0,{length:n}=arguments;for(;t<n;)e.push(arguments[t++]);return e}ue(re);var be="function"==typeof cancelAnimationFrame,ye=be?cancelAnimationFrame:clearTimeout,we=be?requestAnimationFrame:setTimeout;function Ee(e){var t,n,r,s,a;return i(),function(e,i,l){return r=e,s=i,a=l,n||(n=we(o)),--t<0&&c(!0),c};function o(){i(),r.apply(s,a||[])}function i(){t=e||1/0,n=be?0:null}function c(e){var t=!!n;return t&&(ye(n),e&&o()),t}}
10
+ /*! (c) Andrea Giammarchi - ISC */let xe=null;const Ce=L(new WeakMap),Ne=(e,t,n)=>{e.apply(t,n)},ke={async:!1,always:!1},Ae=(e,t)=>"function"==typeof t?t(e):t,$e=(e,t,n,r)=>{const s=xe.i++,{hook:a,args:o,stack:i,length:c}=xe;s===c&&(xe.length=i.push({}));const l=i[s];if(l.args=o,s===c){const s="function"==typeof n,{async:o,always:i}=(s?r:n)||r||ke;l.$=s?n(t):Ae(void 0,t),l._=o?Ce.get(a)||Ce.set(a,Ee()):Ne,l.f=t=>{const n=e(l.$,t);(i||l.$!==n)&&(l.$=n,l._(a,null,l.args))}}return[l.$,l.f]},je=new WeakMap;function Oe({hook:e}){return e===this.hook}const Se=new WeakMap,_e=L(Se),Le=()=>{},Me=e=>(t,n)=>{const r=xe.i++,{hook:s,after:a,stack:o,length:i}=xe;if(r<i){const s=o[r],{update:i,values:c,stop:l}=s;if(!n||n.some(Ze,c)){s.values=n,e&&l(e);const{clean:r}=s;r&&(s.clean=null,r());const o=()=>{s.clean=t()};e?i(o):a.push(o)}}else{const r=e?Ee():Le,i={clean:null,update:r,values:n,stop:Le};xe.length=o.push(i),(_e.get(s)||_e.set(s,[])).push(i);const c=()=>{i.clean=t()};e?i.stop=r(c):a.push(c)}},Te=e=>{(Se.get(e)||[]).forEach((e=>{const{clean:t,stop:n}=e;n(),t&&(e.clean=null,t())}))};Se.has.bind(Se);const Re=Me(!0),Pe=Me(!1),We=(e,t)=>{const n=xe.i++,{stack:r,length:s}=xe;return n===s?xe.length=r.push({$:e(),_:t}):t&&!t.some(Ze,r[n]._)||(r[n]={$:e(),_:t}),r[n].$};function Ze(e,t){return e!==this[t]}let Be=null;try{Be=new{o(){}}.o}catch(zt){}let ze=e=>class extends e{};if(Be){const{getPrototypeOf:e,setPrototypeOf:t}=Object,{construct:n}="object"==typeof Reflect?Reflect:{construct(e,n,r){const s=[null];for(let e=0;e<n.length;e++)s.push(n[e]);const a=e.bind.apply(e,s);return t(new a,r.prototype)}};ze=function(r,s){function a(){return n(s?e(r):r,arguments,a)}return t(a.prototype,r.prototype),t(a,r)}}const De={map:{},re:null},Ue=e=>new RegExp(`<(/)?(${e.join("|")})([^A-Za-z0-9:._-])`,"g");let Fe=null;const He=(e,t)=>{const{map:n,re:r}=Fe||t;return e.replace(r,((e,t,r,s)=>{const{tagName:a,is:o,element:i}=n[r];return i?t?`</${o}>`:`<${o}${s}`:t?`</${a}>`:`<${a} is="${o}"${s}`}))},Ie=({tagName:e,is:t,element:n})=>n?t:`${e}[is="${t}"]`,Ve=()=>Fe,qe=e=>{Fe=e},Ke={useCallback:(e,t)=>We((()=>e),t),useContext:e=>{const{hook:t,args:n}=xe,r=je.get(e),s={hook:t,args:n};return r.some(Oe,s)||r.push(s),e.value},useEffect:Re,useLayoutEffect:Pe,useMemo:We,useReducer:$e,useRef:e=>{const t=xe.i++,{stack:n,length:r}=xe;return t===r&&(xe.length=n.push({current:e})),n[t]},useState:(e,t)=>$e(Ae,e,void 0,t)},{render:Ge,html:Je,svg:Qe}=(e=>{const t=ae(ce);return ie(e).forEach((n=>{t[n]=e[n](t[n]||("convert"===n?v:String))})),n.prototype=t,ue(n);function n(){return re.apply(this,arguments)}})({transform:()=>e=>He(e,De)}),Xe="_🔥",{defineProperties:Ye}=Object,et=new t,tt=new t,nt=new t,rt=new c,st=!0,at="attributeChangedCallback",ot="connectedCallback",it=`dis${ot}`,ct=(e,t,n)=>{if(n in e){const r=e[n];t[n]={configurable:st,value(){return wt.call(this),r.apply(this,arguments)}}}else t[n]={configurable:st,value:wt}},lt=e=>{const{prototype:n}=e,r=[],s={html:{configurable:st,get:vt},svg:{configurable:st,get:bt}};if(s[Xe]={value:{events:r,info:null}},"handleEvent"in n||(s.handleEvent={configurable:st,value:yt}),"render"in n&&n.render.length){const{oninit:e}=n;Ye(n,{oninit:{configurable:st,value(){const t=(e=>{const t=[];return function n(){const r=xe,s=[];xe={hook:n,args:arguments,stack:t,i:0,length:t.length,after:s};try{return e.apply(null,arguments)}finally{xe=r;for(let e=0,{length:t}=s;e<t;e++)s[e]()}}})(this.render.bind(this,Ke));Ye(this,{render:{configurable:st,value:t}}),this.addEventListener("disconnected",Te.bind(null,t),!1),e&&e.apply(this,arguments)}}})}"oninit"in n&&(r.push("init"),ct(n,s,"render")),ct(n,s,at),ct(n,s,ot),ct(n,s,it),[[at,"onattributechanged",Et],[ot,"onconnected",xt],[it,"ondisconnected",Nt],[ot,"render",Ct]].forEach((([e,t,a])=>{if(!(e in n)&&t in n)if("render"!==t&&r.push(t.slice(2)),e in s){const t=s[e].value;s[e]={configurable:st,value(){return t.apply(this,arguments),a.apply(this,arguments)}}}else s[e]={configurable:st,value:a}}));const a=e.booleanAttributes||[];a.forEach((e=>{e in n||(s[e]={configurable:st,get(){return this.hasAttribute(e)},set(t){t&&"false"!==t?this.setAttribute(e,t):this.removeAttribute(e)}})}));const o=e.observedAttributes||[];o.forEach((e=>{e in n||(s[e]={configurable:st,get(){return this.getAttribute(e)},set(t){null==t?this.removeAttribute(e):this.setAttribute(e,t)}})}));(e.mappedAttributes||[]).forEach((e=>{const a=new t,o="on"+e in n;o&&r.push(e),s[e]={configurable:st,get(){return a.get(this)},set(t){if(a.set(this,t),o){const n=ut(e);if(n.detail=t,rt.has(this))this.dispatchEvent(n);else{const e=nt.get(this);e?e.push(n):nt.set(this,[n])}}}}})),Ye(n,s);const i=a.concat(o);return i.length?Ye(e,{observedAttributes:{configurable:st,get:()=>i}}):e},ut=e=>new r(e),ht=(...e)=>new me("html",e);ht.for=Je.for;const ft=(...e)=>new me("svg",e);ft.for=Qe.for;const pt=(e,n,r)=>{const s=dt(e,n,new t);return r.set(e,s),s},dt=(e,t,n)=>(r,...s)=>{const a=n.get(r)||((e,t,{info:n})=>{const r=n?He(t.join(Xe),n).split(Xe):t;return e.set(t,r),r})(n,r,e[Xe]);return Ge(e,(()=>t(a,...s)))};function gt(e){this.addEventListener(e,this)}function mt(e){this.dispatchEvent(e)}function vt(){return et.get(this)||pt(this,ht,et)}function bt(){return tt.get(this)||pt(this,ft,tt)}function yt(e){this[`on${e.type}`](e)}function wt(){if(!rt.has(this)){rt.add(this),this[Xe].events.forEach(gt,this),this.dispatchEvent(ut("init"));const e=nt.get(this);e&&(nt.delete(this),e.forEach(mt,this))}}function Et(e,t,n){const r=ut("attributechanged");r.attributeName=e,r.oldValue=t,r.newValue=n,this.dispatchEvent(r)}function xt(){this.dispatchEvent(ut("connected"))}function Ct(){this.render()}function Nt(){this.dispatchEvent(ut("disconnected"))}const{create:kt,defineProperty:At,defineProperties:$t,getOwnPropertyNames:jt,getOwnPropertySymbols:Ot,getOwnPropertyDescriptor:St,keys:_t}=Object,Lt={element:HTMLElement},Mt=new t;new t;const Tt=new t;new t;const Rt=e=>{const t=kt(null),n=kt(null),r={prototype:n,statics:t};return jt(e).concat(Ot(e)).forEach((r=>{const s=St(e,r);switch(s.enumerable=!1,r){case"extends":r="tagName";case"contains":case"includes":case"name":case"booleanAttributes":case"mappedAttributes":case"observedAttributes":case"style":case"tagName":t[r]=s;break;default:n[r]=s}})),r},Pt=(e,t,n)=>{if(!/^([A-Z][A-Za-z0-9_]*)(<([A-Za-z0-9:._-]+)>|:([A-Za-z0-9:._-]+))?$/.test(e))throw"Invalid name";const{$1:r,$3:s,$4:a}=RegExp;let o=s||a||t.tagName||t.extends||"element";const i="fragment"===o;if(i)o="element";else if(!/^[A-Za-z0-9:._-]+$/.test(o))throw"Invalid tag";let c="",l="";o.indexOf("-")<0?(c=r.replace(/(([A-Z0-9])([A-Z0-9][a-z]))|(([a-z])([A-Z]))/g,"$2$5-$3$6").toLowerCase()+n,c.indexOf("-")<0&&(l="-heresy")):(c=o+n,o="element");const u=c+l;if(customElements.get(u))throw`Duplicated ${u} definition`;const h=ze("object"==typeof t?Tt.get(t)||((e,t)=>{const{statics:n,prototype:r}=Rt(e),s=ze(Lt[t]||(Lt[t]=document.createElement(t).constructor),!1);return $t(s.prototype,r),$t(s,n),Tt.set(e,lt(s)),s})(t,o):Mt.get(t)||(e=>{const t=ze(e,!1);return Mt.set(e,lt(t)),t})(t),!0),f="element"===o;if(At(h,"new",{value:f?()=>document.createElement(u):()=>document.createElement(o,{is:u})}),At(h.prototype,"is",{value:u}),""===n){const e=(e=>{const{length:t}=e;let n=0,r=0;for(;r<t;)n=(n<<5)-n+e.charCodeAt(r++),n&=n;return n.toString(36)})(c.toUpperCase());De.map[r]=Wt(h,o,u,{id:e,i:0}),De.re=Ue(_t(De.map))}if(i){const{render:e}=h.prototype;At(h.prototype,"render",{configurable:!0,value(){if(e&&e.apply(this,arguments),this.parentNode){const{firstChild:e}=this;let t=null;if(e){const n=document.createRange();n.setStartBefore(e),n.setEndAfter(this.lastChild),t=n.extractContents(),this.parentNode.replaceChild(t,this)}}}})}const p=[u,h];return f||p.push({extends:o}),customElements.define(...p),{Class:h,is:u,name:r,tagName:o}},Wt=(e,t,n,r)=>{const{prototype:s}=e,a=((e,t)=>({tagName:e,is:t,element:"element"===e}))(t,n),o=[Ie(a)],i=e.includes||e.contains;if(i){const e={};_t(i).forEach((t=>{const n=`-${r.id}-${r.i++}`,{Class:s,is:a,name:c,tagName:l}=Pt(t,i[t],n);o.push(Ie(e[c]=Wt(s,l,a,r)))}));const t=Ue(_t(e)),{events:n}=s[Xe],a={events:n,info:{map:e,re:t}};if(At(s,Xe,{value:a}),"render"in s){const{render:e}=s,{info:t}=a;At(s,"render",{configurable:!0,value(){const n=Ve();qe(t);const r=e.apply(this,arguments);return qe(n),r}})}}return"style"in e&&(e=>{if((e||"").length){const t=document.createElement("style");t.type="text/css",t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e));const n=document.head||document.querySelector("head");n.insertBefore(t,n.lastChild)}})(e.style(...o)),a},Zt="2.0.0-beta3",Bt=["audio","background","cameraaccess","chat","people","embed","emptyRoomInvitation","help","leaveButton","precallReview","screenshare","video","floatSelf","recording","logo","locking","participantCount","settingsButton","pipButton","moreButton","personality","subgridLabels","lowData","breakout"];var zt,Dt;zt="WherebyEmbed",Dt={oninit(){this.iframe=((e,t)=>e?e[t]||(e[t]={current:null}):{current:null})()},onconnected(){window.addEventListener("message",this.onmessage.bind(this))},ondisconnected(){window.removeEventListener("message",this.onmessage.bind(this))},observedAttributes:["displayName","minimal","room","subdomain","lang","metadata","groups","virtualBackgroundUrl","avatarUrl","externalId",...Bt].map((e=>e.toLowerCase())),onattributechanged({attributeName:e,oldValue:t}){["room","subdomain"].includes(e)&&null==t||this.render()},style:e=>`\n ${e} {\n display: block;\n }\n ${e} iframe {\n border: none;\n height: 100%;\n width: 100%;\n }\n `,_postCommand(e,t=[]){this.iframe.current&&this.iframe.current.contentWindow.postMessage({command:e,args:t},this.url.origin)},startRecording(){this._postCommand("start_recording")},stopRecording(){this._postCommand("stop_recording")},toggleCamera(e){this._postCommand("toggle_camera",[e])},toggleMicrophone(e){this._postCommand("toggle_microphone",[e])},toggleScreenshare(e){this._postCommand("toggle_screenshare",[e])},onmessage({origin:e,data:t}){if(e!==this.url.origin)return;const{type:n,payload:r}=t;this.dispatchEvent(new CustomEvent(n,{detail:r}))},render(){const{avatarurl:e,displayname:t,externalId:n,lang:r,metadata:s,minimal:a,room:o,groups:i,virtualbackgroundurl:c}=this;if(!o)return this.html`Whereby: Missing room attribute.`;const l=/https:\/\/([^.]+)(\.whereby.com|-ip-\d+-\d+-\d+-\d+.hereby.dev:4443)\/.+/.exec(o),u=l&&l[1]||this.subdomain;if(!u)return this.html`Whereby: Missing subdomain attr.`;if(!l)return this.html`could not parse URL.`;const h=l[2]||".whereby.com";this.url=new URL(o,`https://${u}${h}`);const f=new URL(o);return f.searchParams.get("roomKey")&&this.url.searchParams.append("roomKey",f.searchParams.get("roomKey")),Object.entries(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({jsApi:!0,we:"2.0.0-beta3",iframeSource:u},t&&{displayName:t}),r&&{lang:r}),s&&{metadata:s}),n&&{externalId:n}),i&&{groups:i}),c&&{virtualBackgroundUrl:c}),e&&{avatarUrl:e}),null!=a&&{embed:a}),Bt.reduce(((e,t)=>null!=this[t.toLowerCase()]?Object.assign(Object.assign({},e),{[t]:this[t.toLowerCase()]}):e),{}))).forEach((([e,t])=>{this.url.searchParams.has(e)||"string"!=typeof t||this.url.searchParams.set(e,t)})),this.html`
11
+ <iframe
12
+ ref=${this.iframe}
13
+ src=${this.url}
14
+ allow="autoplay; camera; microphone; fullscreen; speaker; display-capture" />
15
+ `}},("string"==typeof zt?Pt(zt,Dt,""):Pt(zt.name,zt,"")).Class;export{Zt as sdkVersion};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whereby.com/browser-sdk",
3
- "version": "2.0.0-beta2",
3
+ "version": "2.0.0-beta3",
4
4
  "description": "Modules for integration Whereby video in web apps",
5
5
  "author": "Whereby AS",
6
6
  "license": "MIT",
@@ -11,9 +11,18 @@
11
11
  "browserslist": "> 0.5%, last 2 versions, not dead",
12
12
  "source": "src/index.js",
13
13
  "exports": {
14
- "./react": "./dist/react/index.js",
15
- "./embed": "./dist/embed/index.js",
16
- "./utils": "./dist/utils/index.js"
14
+ "./react": {
15
+ "import": "./dist/react/index.esm.js",
16
+ "types": "./dist/react/index.d.ts"
17
+ },
18
+ "./embed": {
19
+ "import": "./dist/embed/index.esm.js",
20
+ "types": "./dist/embed/index.d.ts"
21
+ },
22
+ "./utils": {
23
+ "import": "./dist/utils/index.esm.js",
24
+ "types": "./dist/utils/index.d.ts"
25
+ }
17
26
  },
18
27
  "typesVersions": {
19
28
  "*": {
@@ -34,8 +43,7 @@
34
43
  ],
35
44
  "scripts": {
36
45
  "prebuild": "rimraf dist",
37
- "build": "node build.js",
38
- "postbuild": "tsc --project tsconfig.build.json",
46
+ "build": "rollup -c rollup.config.js",
39
47
  "build:storybook": "storybook build",
40
48
  "dev": "storybook dev -p 6006",
41
49
  "install:e2e-sample-app": "cd test/sample-app && yarn custom_install",
@@ -55,10 +63,10 @@
55
63
  "@babel/preset-react": "^7.22.15",
56
64
  "@babel/preset-typescript": "^7.23.2",
57
65
  "@playwright/test": "^1.38.1",
58
- "@rollup/plugin-commonjs": "^24.0.0",
59
- "@rollup/plugin-json": "^6.0.0",
60
- "@rollup/plugin-node-resolve": "^13.3.0",
61
- "@rollup/plugin-replace": "^4.0.0",
66
+ "@rollup/plugin-commonjs": "^25.0.7",
67
+ "@rollup/plugin-json": "^6.0.1",
68
+ "@rollup/plugin-node-resolve": "^15.2.3",
69
+ "@rollup/plugin-replace": "^5.0.5",
62
70
  "@storybook/addon-actions": "^7.5.2",
63
71
  "@storybook/addon-essentials": "^7.5.2",
64
72
  "@storybook/addon-links": "^7.5.2",
@@ -75,8 +83,6 @@
75
83
  "babel-loader": "^8.2.5",
76
84
  "dotenv": "^16.3.1",
77
85
  "dotenv-run-script": "^0.4.1",
78
- "esbuild": "^0.19.4",
79
- "esbuild-plugin-replace": "^1.4.0",
80
86
  "eslint": "^8.29.0",
81
87
  "eslint-plugin-jest": "^26.5.3",
82
88
  "jest": "29.4.3",
@@ -86,6 +92,10 @@
86
92
  "react": "^18.2.0",
87
93
  "react-dom": "^18.2.0",
88
94
  "rimraf": "^3.0.2",
95
+ "rollup": "^4.3.0",
96
+ "rollup-plugin-dts": "^6.1.0",
97
+ "rollup-plugin-terser": "^7.0.2",
98
+ "rollup-plugin-typescript2": "^0.36.0",
89
99
  "storybook": "^7.5.2",
90
100
  "ts-jest": "29.0.5",
91
101
  "tslib": "^2.4.1",
@@ -1,70 +0,0 @@
1
- import RtcManager from "@whereby/jslib-media/src/webrtc/RtcManager";
2
- type CameraEnabledEvent = {
3
- enabled: boolean;
4
- };
5
- type MicrophoneEnabledEvent = {
6
- enabled: boolean;
7
- };
8
- type DeviceListUpdatedEvent = {
9
- cameraDevices: MediaDeviceInfo[];
10
- microphoneDevices: MediaDeviceInfo[];
11
- speakerDevices: MediaDeviceInfo[];
12
- };
13
- type DeviceListUpdateErrorEvent = {
14
- error: unknown;
15
- };
16
- type StreamUpdatedEvent = {
17
- stream: MediaStream;
18
- };
19
- type StopResumeVideoEvent = {
20
- track: MediaStreamTrack;
21
- enable: boolean;
22
- };
23
- interface LocalMediaEventsMap {
24
- camera_enabled: CustomEvent<CameraEnabledEvent>;
25
- device_list_updated: CustomEvent<DeviceListUpdatedEvent>;
26
- device_list_update_error: CustomEvent<DeviceListUpdateErrorEvent>;
27
- microphone_enabled: CustomEvent<MicrophoneEnabledEvent>;
28
- stream_updated: CustomEvent<StreamUpdatedEvent>;
29
- stopresumevideo: CustomEvent<StopResumeVideoEvent>;
30
- }
31
- interface LocalMediaEventTarget extends EventTarget {
32
- addEventListener<K extends keyof LocalMediaEventsMap>(type: K, listener: (ev: LocalMediaEventsMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
33
- addEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean): void;
34
- }
35
- declare const TypedLocalMediaEventTarget: new () => LocalMediaEventTarget;
36
- export interface LocalMediaOptions {
37
- audio: boolean;
38
- video: boolean;
39
- }
40
- export default class LocalMedia extends TypedLocalMediaEventTarget {
41
- private _options;
42
- _rtcManagers: RtcManager[];
43
- private _devices;
44
- stream: MediaStream;
45
- screenshareStream?: MediaStream;
46
- private _cameraEnabled;
47
- private _currentCameraDeviceId;
48
- private _isTogglingCameraEnabled;
49
- private _microphoneEnabled;
50
- private _currentMicrophoneDeviceId;
51
- constructor(optionsOrStream: LocalMediaOptions | MediaStream);
52
- addRtcManager(rtcManager: RtcManager): void;
53
- removeRtcManager(rtcManager: RtcManager): void;
54
- getCameraDeviceId(): string | undefined;
55
- getMicrophoneDeviceId(): string | undefined;
56
- isCameraEnabled(): boolean;
57
- isMicrophoneEnabled(): boolean;
58
- toggleCameraEnabled(enabled?: boolean): Promise<void>;
59
- toggleMichrophoneEnabled(enabled?: boolean): void;
60
- startScreenshare(): Promise<MediaStream>;
61
- stopScreenshare(): void;
62
- private _getConstraintsOptions;
63
- private _setDevice;
64
- setCameraDevice(deviceId: string): Promise<void>;
65
- setMicrophoneDevice(deviceId: string): Promise<void>;
66
- private _updateDeviceList;
67
- start(): Promise<MediaStream>;
68
- stop(): void;
69
- }
70
- export {};
@@ -1,208 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { getStream } from "@whereby/jslib-media/src/webrtc/MediaDevices";
3
- class LocalMediaEvent extends CustomEvent {
4
- constructor(eventType, eventInitDict) {
5
- super(eventType, eventInitDict);
6
- }
7
- }
8
- const TypedLocalMediaEventTarget = EventTarget;
9
- export default class LocalMedia extends TypedLocalMediaEventTarget {
10
- constructor(optionsOrStream) {
11
- var _a, _b;
12
- super();
13
- this._options = null;
14
- this._devices = [];
15
- this._isTogglingCameraEnabled = false;
16
- if (optionsOrStream instanceof MediaStream) {
17
- this.stream = optionsOrStream;
18
- }
19
- else {
20
- this._options = optionsOrStream;
21
- this.stream = new MediaStream();
22
- }
23
- this._cameraEnabled = ((_a = this.stream.getVideoTracks()[0]) === null || _a === void 0 ? void 0 : _a.enabled) || false;
24
- this._microphoneEnabled = ((_b = this.stream.getAudioTracks()[0]) === null || _b === void 0 ? void 0 : _b.enabled) || false;
25
- this._rtcManagers = [];
26
- this.screenshareStream = undefined;
27
- navigator.mediaDevices.addEventListener("devicechange", this._updateDeviceList.bind(this));
28
- }
29
- addRtcManager(rtcManager) {
30
- this._rtcManagers.push(rtcManager);
31
- }
32
- removeRtcManager(rtcManager) {
33
- this._rtcManagers = this._rtcManagers.filter((r) => r !== rtcManager);
34
- }
35
- getCameraDeviceId() {
36
- return this._currentCameraDeviceId;
37
- }
38
- getMicrophoneDeviceId() {
39
- return this._currentMicrophoneDeviceId;
40
- }
41
- isCameraEnabled() {
42
- return this._cameraEnabled;
43
- }
44
- isMicrophoneEnabled() {
45
- return this._microphoneEnabled;
46
- }
47
- toggleCameraEnabled(enabled) {
48
- return __awaiter(this, void 0, void 0, function* () {
49
- if (this._isTogglingCameraEnabled) {
50
- return;
51
- }
52
- let track = this.stream.getVideoTracks()[0];
53
- const newValue = enabled !== null && enabled !== void 0 ? enabled : !(track === null || track === void 0 ? void 0 : track.enabled);
54
- if (this._cameraEnabled === newValue) {
55
- return;
56
- }
57
- this._cameraEnabled = newValue;
58
- this.dispatchEvent(new LocalMediaEvent("camera_enabled", { detail: { enabled: this._cameraEnabled } }));
59
- const shouldStopTrack = !!this._options;
60
- this._isTogglingCameraEnabled = true;
61
- try {
62
- if (this._cameraEnabled) {
63
- if (track) {
64
- track.enabled = true;
65
- }
66
- else {
67
- yield getStream(Object.assign(Object.assign({}, this._getConstraintsOptions()), { audioId: false, videoId: this._currentCameraDeviceId, type: "exact" }), { replaceStream: this.stream });
68
- track = this.stream.getVideoTracks()[0];
69
- }
70
- }
71
- else {
72
- if (!track) {
73
- return;
74
- }
75
- track.enabled = false;
76
- if (shouldStopTrack) {
77
- track.stop();
78
- this.stream.removeTrack(track);
79
- }
80
- }
81
- this.stream.dispatchEvent(new LocalMediaEvent("stopresumevideo", { detail: { track, enable: this._cameraEnabled } }));
82
- }
83
- catch (error) {
84
- }
85
- this._isTogglingCameraEnabled = false;
86
- });
87
- }
88
- toggleMichrophoneEnabled(enabled) {
89
- const audioTrack = this.stream.getAudioTracks()[0];
90
- if (!audioTrack) {
91
- return;
92
- }
93
- this._microphoneEnabled = enabled !== null && enabled !== void 0 ? enabled : !audioTrack.enabled;
94
- this.dispatchEvent(new LocalMediaEvent("microphone_enabled", { detail: { enabled: this._microphoneEnabled } }));
95
- audioTrack.enabled = this._microphoneEnabled;
96
- }
97
- startScreenshare() {
98
- return __awaiter(this, void 0, void 0, function* () {
99
- if (this.screenshareStream) {
100
- return this.screenshareStream;
101
- }
102
- const screenshareStream = yield navigator.mediaDevices.getDisplayMedia();
103
- this.screenshareStream = screenshareStream;
104
- return this.screenshareStream;
105
- });
106
- }
107
- stopScreenshare() {
108
- var _a;
109
- (_a = this.screenshareStream) === null || _a === void 0 ? void 0 : _a.getTracks().forEach((track) => track.stop());
110
- this.screenshareStream = undefined;
111
- }
112
- _getConstraintsOptions() {
113
- return {
114
- devices: this._devices,
115
- options: {
116
- disableAEC: false,
117
- disableAGC: false,
118
- hd: true,
119
- lax: false,
120
- lowDataMode: false,
121
- simulcast: true,
122
- widescreen: true,
123
- },
124
- };
125
- }
126
- _setDevice({ audioId, videoId }) {
127
- return __awaiter(this, void 0, void 0, function* () {
128
- const { replacedTracks } = yield getStream(Object.assign(Object.assign({}, this._getConstraintsOptions()), { audioId,
129
- videoId, type: "exact" }), { replaceStream: this.stream });
130
- if (replacedTracks) {
131
- replacedTracks.forEach((oldTrack) => {
132
- const newTrack = oldTrack.kind === "audio" ? this.stream.getAudioTracks()[0] : this.stream.getVideoTracks()[0];
133
- this._rtcManagers.forEach((rtcManager) => {
134
- rtcManager.replaceTrack(oldTrack, newTrack);
135
- });
136
- });
137
- }
138
- this.dispatchEvent(new LocalMediaEvent("stream_updated", {
139
- detail: { stream: this.stream },
140
- }));
141
- });
142
- }
143
- setCameraDevice(deviceId) {
144
- return __awaiter(this, void 0, void 0, function* () {
145
- this._currentCameraDeviceId = deviceId;
146
- yield this._setDevice({ videoId: this._currentCameraDeviceId, audioId: false });
147
- });
148
- }
149
- setMicrophoneDevice(deviceId) {
150
- return __awaiter(this, void 0, void 0, function* () {
151
- this._currentMicrophoneDeviceId = deviceId;
152
- yield this._setDevice({ audioId: this._currentMicrophoneDeviceId, videoId: false });
153
- });
154
- }
155
- _updateDeviceList() {
156
- return __awaiter(this, void 0, void 0, function* () {
157
- try {
158
- const devices = yield navigator.mediaDevices.enumerateDevices();
159
- this.dispatchEvent(new LocalMediaEvent("device_list_updated", {
160
- detail: {
161
- cameraDevices: devices.filter((d) => d.kind === "videoinput"),
162
- microphoneDevices: devices.filter((d) => d.kind === "audioinput"),
163
- speakerDevices: devices.filter((d) => d.kind === "audiooutput"),
164
- },
165
- }));
166
- this._devices = devices;
167
- }
168
- catch (error) {
169
- this.dispatchEvent(new LocalMediaEvent("device_list_update_error", {
170
- detail: {
171
- error,
172
- },
173
- }));
174
- throw error;
175
- }
176
- });
177
- }
178
- start() {
179
- return __awaiter(this, void 0, void 0, function* () {
180
- yield this._updateDeviceList();
181
- if (this._options) {
182
- yield getStream(Object.assign(Object.assign({}, this._getConstraintsOptions()), { audioId: this._options.audio, videoId: this._options.video }), { replaceStream: this.stream });
183
- const cameraTrack = this.stream.getVideoTracks()[0];
184
- if (cameraTrack) {
185
- this._cameraEnabled = cameraTrack.enabled;
186
- this._currentCameraDeviceId = cameraTrack.getSettings().deviceId;
187
- }
188
- const microphoneTrack = this.stream.getAudioTracks()[0];
189
- if (microphoneTrack) {
190
- this._microphoneEnabled = microphoneTrack.enabled;
191
- this._currentMicrophoneDeviceId = microphoneTrack.getSettings().deviceId;
192
- }
193
- }
194
- this.dispatchEvent(new LocalMediaEvent("stream_updated", {
195
- detail: { stream: this.stream },
196
- }));
197
- return this.stream;
198
- });
199
- }
200
- stop() {
201
- var _a;
202
- if (this._options) {
203
- (_a = this.stream) === null || _a === void 0 ? void 0 : _a.getTracks().forEach((t) => {
204
- t.stop();
205
- });
206
- }
207
- }
208
- }