@viibe/impulse-integration-js 2.3.4-alpha1 → 2.3.4-alpha2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- (()=>{var t={579:t=>{function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function o(t,e,o){return e&&n(t.prototype,e),o&&n(t,o),t}function i(t){var e=this,n=window.screen.width/2-240,o=window.screen.height/2-300,i=["toolbar=no","location=no","directories=no","status=no","menubar=no","scrollbars=no","resizable=no","copyhistory=no","width=".concat(480),"height=".concat(600),"top=".concat(o),"left=".concat(n)];return new Promise((function(n,o){var a=window.open(t,"Authorization",i.join(", "));a||o("Failed to open window");var r=setInterval((function(){a.closed&&(c(),s())}),100),s=function(){o("User closed window")},c=function(){window.removeEventListener("message",l),clearInterval(r)},l=function(t){if(!e.isViibeEvent(t))return null;t.data.token&&(c(),n(t.data.token)),t.data.error&&(c(),o(t.data.error))};window.addEventListener("message",l)}))}var a,r,s,c=function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"https://auth.viibe.tech";e(this,t),this.host=n}return o(t,[{key:"loginZendesk",value:function(t){return i("https://".concat(this.host,"/auth/zendesk/login?subdomain=").concat(t))}}]),t}(),l=function(){function t(n){e(this,t),this.handlers=[],this.host=n.host,this.origin=/^localhost/.test(this.host)?"http://".concat(this.host):"https://".concat(this.host),this.source=n.source,window.addEventListener("message",this.onMessage.bind(this))}return o(t,[{key:"createNotificationIframe",value:function(){if(!this.host)throw new Error("fillHost");if(!this.source)throw new Error("fillSource");var t=document.createElement("iframe");return t.name="viibe-"+Math.floor(1e4*Math.random()),t.style="border: 0;width: 0;",t.src="".concat(this.origin,"/integration/features/notifications"),t}},{key:"createCallIframe",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.host)throw new Error("fillHost");if(!this.source)throw new Error("fillSource");var n=this.createCallUrl(e),o=document.createElement("iframe");return o.name="viibe-"+Math.floor(1e4*Math.random()),o.style="border: 0;width: calc(100% - 1rem);margin: 0.5rem;",o.src=n,o.allow="geolocation;autoplay;microphone;camera;midi;encrypted-media;clipboard-write;",this.on(o,"document",(function(e){return t.onDocument(e)})),o}},{key:"createCallUrl",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.clipboard,n=void 0!==e&&e,o=t.components,i=t.links,a=t.o2m,r=void 0!==a&&a,s=t.ticket,c=t.token,l=t.locale,u=t.standalone,d="".concat(this.origin,"/integration/features/call"),h=new URLSearchParams({resize:"true",source:this.source});if(s&&s.title&&h.set("title",s.title),s&&s.integration&&h.set("thirdPartyId",s.integration.id),i){var f=i instanceof Array?i.map((function(t){return"".concat(t.category,":").concat(t.value)})).join(","):String(i);h.set("links",f)}if(c&&h.set("token",c),l&&h.set("locale",l),o){var v=o instanceof Array?o.join(","):String(o);h.set("components",v)}return u&&h.set("standalone",Boolean(u)),h.set("clipboard",Boolean(n)),h.set("o2m",Boolean(r)),d+"?".concat(h)}},{key:"isViibeEvent",value:function(t){return Boolean(t.isTrusted&&0===t.origin.indexOf(this.origin))}},{key:"dispatch",value:function(t,e,n){return this.handlers.filter((function(e){return e.eventName===t&&(!e.windowName||e.windowName===n)})).map((function(t){return t.func(e)}))}},{key:"onMessage",value:function(t){return this.isViibeEvent(t)?t.data&&t.data.event&&t.data.payload?this.dispatch(t.data.event,t.data.payload,t.data.windowName):t.data&&t.data.token?this.dispatch("authentication:token",t.data.token):t.data&&t.data.error?this.dispatch("authentication:error",t.data.error):null:null}},{key:"on",value:function(t,e,n){"string"==typeof t&&"function"==typeof e&&void 0===n&&(n=e,e=t,t=null);var o={eventName:e,windowName:t?t.name:null,func:n};this.handlers.push(o)}},{key:"onDocument",value:function(t){window.open(t.signed_url,"_blank")}},{key:"authenticate",value:function(t){return i("".concat(this.origin,"/api/auth/login/").concat(t))}}]),t}();s=c,(r="Auth")in(a=l)?Object.defineProperty(a,r,{value:s,enumerable:!0,configurable:!0,writable:!0}):a.Auth=s,"undefined"!=typeof window&&(window.Viibe=l),t.exports=l}},e={},n=function n(o){var i=e[o];if(void 0!==i)return i.exports;var a=e[o]={exports:{}};return t[o](a,a.exports,n),a.exports}(579);module.exports=n})();
1
+ (()=>{var t={579:t=>{function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function o(t,e,o){return e&&n(t.prototype,e),o&&n(t,o),t}function i(t){return function(e){return Boolean(e.isTrusted&&0===e.origin.indexOf(t))}}function a(t){var e=new URL(t),n="".concat(e.protocol,"://").concat(e.host),o=window.screen.width/2-240,a=window.screen.height/2-300,r=["toolbar=no","location=no","directories=no","status=no","menubar=no","scrollbars=no","resizable=no","copyhistory=no","width=".concat(480),"height=".concat(600),"top=".concat(a),"left=".concat(o)];return new Promise((function(e,o){var a=window.open(t,"Authorization",r.join(", "));a||o("Failed to open window");var c=setInterval((function(){a.closed&&(l(),s())}),100),s=function(){o("User closed window")},l=function(){window.removeEventListener("message",u),clearInterval(c)},u=function(t){if(!i(n)(t))return null;t.data.token&&(l(),e(t.data.token)),t.data.error&&(l(),o(t.data.error))};window.addEventListener("message",u)}))}var r,c,s,l=function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"auth.viibe.tech";e(this,t),this.host=n}return o(t,[{key:"loginZendesk",value:function(t){return a("https://".concat(this.host,"/auth/zendesk/login?subdomain=").concat(t))}}]),t}(),u=function(){function t(n){e(this,t),this.handlers=[],this.host=n.host,this.origin=/^localhost/.test(this.host)?"http://".concat(this.host):"https://".concat(this.host),this.source=n.source,this.isViibeEvent=i(this.origin),window.addEventListener("message",this.onMessage.bind(this))}return o(t,[{key:"createNotificationIframe",value:function(){if(!this.host)throw new Error("fillHost");if(!this.source)throw new Error("fillSource");var t=document.createElement("iframe");return t.name="viibe-"+Math.floor(1e4*Math.random()),t.style="border: 0;width: 0;",t.src="".concat(this.origin,"/integration/features/notifications"),t}},{key:"createCallIframe",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.host)throw new Error("fillHost");if(!this.source)throw new Error("fillSource");var n=this.createCallUrl(e),o=document.createElement("iframe");return o.name="viibe-"+Math.floor(1e4*Math.random()),o.style="border: 0;width: calc(100% - 1rem);margin: 0.5rem;",o.src=n,o.allow="geolocation;autoplay;microphone;camera;midi;encrypted-media;clipboard-write;",this.on(o,"document",(function(e){return t.onDocument(e)})),o}},{key:"createCallUrl",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.clipboard,n=void 0!==e&&e,o=t.components,i=t.links,a=t.o2m,r=void 0!==a&&a,c=t.ticket,s=t.token,l=t.locale,u=t.standalone,d="".concat(this.origin,"/integration/features/call"),h=new URLSearchParams({resize:"true",source:this.source});if(c&&c.title&&h.set("title",c.title),c&&c.integration&&h.set("thirdPartyId",c.integration.id),i){var f=i instanceof Array?i.map((function(t){return"".concat(t.category,":").concat(t.value)})).join(","):String(i);h.set("links",f)}if(s&&h.set("token",s),l&&h.set("locale",l),o){var v=o instanceof Array?o.join(","):String(o);h.set("components",v)}return u&&h.set("standalone",Boolean(u)),h.set("clipboard",Boolean(n)),h.set("o2m",Boolean(r)),d+"?".concat(h)}},{key:"dispatch",value:function(t,e,n){return this.handlers.filter((function(e){return e.eventName===t&&(!e.windowName||e.windowName===n)})).map((function(t){return t.func(e)}))}},{key:"onMessage",value:function(t){return this.isViibeEvent(t)?t.data&&t.data.event&&t.data.payload?this.dispatch(t.data.event,t.data.payload,t.data.windowName):t.data&&t.data.token?this.dispatch("authentication:token",t.data.token):t.data&&t.data.error?this.dispatch("authentication:error",t.data.error):null:null}},{key:"on",value:function(t,e,n){"string"==typeof t&&"function"==typeof e&&void 0===n&&(n=e,e=t,t=null);var o={eventName:e,windowName:t?t.name:null,func:n};this.handlers.push(o)}},{key:"onDocument",value:function(t){window.open(t.signed_url,"_blank")}},{key:"authenticate",value:function(t){return a("".concat(this.origin,"/api/auth/login/").concat(t))}}]),t}();s=l,(c="Auth")in(r=u)?Object.defineProperty(r,c,{value:s,enumerable:!0,configurable:!0,writable:!0}):r.Auth=s,"undefined"!=typeof window&&(window.Viibe=u),t.exports=u}},e={},n=function n(o){var i=e[o];if(void 0!==i)return i.exports;var a=e[o]={exports:{}};return t[o](a,a.exports,n),a.exports}(579);module.exports=n})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viibe/impulse-integration-js",
3
- "version": "2.3.4-alpha1",
3
+ "version": "2.3.4-alpha2",
4
4
  "description": "ViiBE integration in js native",
5
5
  "main": "index.js",
6
6
  "publishConfig": {
package/src/index.js CHANGED
@@ -1,76 +1,85 @@
1
+ function isFromOrigin(origin) {
2
+ return function (event) {
3
+ return Boolean(event.isTrusted && event.origin.indexOf(origin) === 0)
4
+ }
5
+ }
6
+
1
7
  function openAuthPopup(src) {
8
+ const url = new URL(src);
9
+ const origin = `${url.protocol}://${url.host}`;
10
+
2
11
  const width = 480
3
- const height = 600
4
- const TWO = 2
5
-
6
- const left = (window.screen.width / TWO) - (width / TWO)
7
- const top = (window.screen.height / TWO) - (height / TWO)
8
- const windowParams = [
9
- 'toolbar=no',
10
- 'location=no',
11
- 'directories=no',
12
- 'status=no',
13
- 'menubar=no',
14
- 'scrollbars=no',
15
- 'resizable=no',
16
- 'copyhistory=no',
17
- `width=${width}`,
18
- `height=${height}`,
19
- `top=${top}`,
20
- `left=${left}`,
21
- ]
22
-
23
- return new Promise((resolve, reject) => {
24
- const win = window.open(src, 'Authorization', windowParams.join(', '))
25
-
26
- if (!win) {
27
- reject('Failed to open window')
12
+ const height = 600
13
+ const TWO = 2
14
+
15
+ const left = (window.screen.width / TWO) - (width / TWO)
16
+ const top = (window.screen.height / TWO) - (height / TWO)
17
+ const windowParams = [
18
+ 'toolbar=no',
19
+ 'location=no',
20
+ 'directories=no',
21
+ 'status=no',
22
+ 'menubar=no',
23
+ 'scrollbars=no',
24
+ 'resizable=no',
25
+ 'copyhistory=no',
26
+ `width=${width}`,
27
+ `height=${height}`,
28
+ `top=${top}`,
29
+ `left=${left}`,
30
+ ]
31
+
32
+ return new Promise((resolve, reject) => {
33
+ const win = window.open(src, 'Authorization', windowParams.join(', '))
34
+
35
+ if (!win) {
36
+ reject('Failed to open window')
37
+ }
38
+
39
+ // pings the login window to check if it was closed
40
+ const closeCheck = setInterval(() => {
41
+ if (win.closed) {
42
+ destroy();
43
+ onClose();
28
44
  }
29
45
 
30
- // pings the login window to check if it was closed
31
- const closeCheck = setInterval(() => {
32
- if (win.closed) {
33
- destroy();
34
- onClose();
35
- }
46
+ }, 100)
36
47
 
37
- }, 100)
48
+ // triggered if the window was closed
49
+ const onClose = () => {
50
+ reject('User closed window')
51
+ }
38
52
 
39
- // triggered if the window was closed
40
- const onClose = () => {
41
- reject('User closed window')
42
- }
53
+ // completes the process, either because the user closes or because the authentication completed
54
+ // cleans intervals and event listeners
55
+ const destroy = () => {
56
+ window.removeEventListener('message', onMessage)
57
+ clearInterval(closeCheck)
58
+ }
43
59
 
44
- // completes the process, either because the user closes or because the authentication completed
45
- // cleans intervals and event listeners
46
- const destroy = () => {
47
- window.removeEventListener('message', onMessage)
48
- clearInterval(closeCheck)
60
+ // triggered when a message is received on the current window
61
+ const onMessage = event => {
62
+ if (!isFromOrigin(origin)(event)) {
63
+ return null
49
64
  }
50
-
51
- // triggered when a message is received on the current window
52
- const onMessage = event => {
53
- if (!this.isViibeEvent(event)) {
54
- return null
55
- }
56
- if (event.data.token) {
57
- destroy();
58
- resolve(event.data.token)
59
- }
60
- if (event.data.error) {
61
- destroy();
62
- reject(event.data.error)
63
- }
65
+ if (event.data.token) {
66
+ destroy();
67
+ resolve(event.data.token)
64
68
  }
69
+ if (event.data.error) {
70
+ destroy();
71
+ reject(event.data.error)
72
+ }
73
+ }
65
74
 
66
- window.addEventListener('message', onMessage)
67
- })
75
+ window.addEventListener('message', onMessage)
76
+ })
68
77
  }
69
78
 
70
79
  class ViibeAuth {
71
80
 
72
81
  // FIXME
73
- constructor(host = 'https://auth.viibe.tech') {
82
+ constructor(host = 'auth.viibe.tech') {
74
83
  this.host = host;
75
84
  }
76
85
 
@@ -101,6 +110,8 @@ class Viibe {
101
110
  this.origin = /^localhost/.test(this.host) ? `http://${this.host}` : `https://${this.host}`
102
111
  this.source = options.source
103
112
 
113
+ this.isViibeEvent = isFromOrigin(this.origin);
114
+
104
115
  window.addEventListener('message', this.onMessage.bind(this))
105
116
  }
106
117
 
@@ -185,10 +196,6 @@ class Viibe {
185
196
  return src
186
197
  }
187
198
 
188
- isViibeEvent(event) {
189
- return Boolean(event.isTrusted && event.origin.indexOf(this.origin) === 0)
190
- }
191
-
192
199
  /**
193
200
  * Dispatches an event ie calls handlers corresponding to that event.
194
201
  * Handlers with not windowName will be triggered regardless of the origin windowName
@@ -243,8 +250,8 @@ class Viibe {
243
250
  */
244
251
  on(iframe, eventName, func) {
245
252
  if (typeof iframe === 'string'
246
- && typeof eventName === 'function'
247
- && typeof func === 'undefined') {
253
+ && typeof eventName === 'function'
254
+ && typeof func === 'undefined') {
248
255
  func = eventName;
249
256
  eventName = iframe;
250
257
  iframe = null;
@@ -269,7 +276,7 @@ class Viibe {
269
276
  */
270
277
  authenticate(provider) {
271
278
  const src = `${this.origin}/api/auth/login/${provider}`
272
-
279
+
273
280
  return openAuthPopup(src);
274
281
  }
275
282