@viibe/impulse-integration-js 2.3.10 → 2.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/index.js +1 -1
- package/package.json +2 -2
- package/src/index.js +25 -25
- package/test/dist.test.js +2 -2
package/README.md
CHANGED
|
@@ -62,6 +62,27 @@ The contact itself;
|
|
|
62
62
|
- for `phone` category, should be a full phone number (including national prefix)
|
|
63
63
|
- for `expertise` category, should be an `id_expertise`
|
|
64
64
|
|
|
65
|
+
`suggestions[]` **(array, optional)**
|
|
66
|
+
|
|
67
|
+
A list of suggested contacts to call.
|
|
68
|
+
Each item is an object with the following format:
|
|
69
|
+
|
|
70
|
+
`category` **(string, mandatory)**
|
|
71
|
+
|
|
72
|
+
The type of contact (`email` or `phone`)
|
|
73
|
+
|
|
74
|
+
`value` **(string, mandatory)**
|
|
75
|
+
|
|
76
|
+
The contact itself;
|
|
77
|
+
|
|
78
|
+
- for `email` category, should be a valid email
|
|
79
|
+
- for `phone` category, should be a full phone number (including national prefix)
|
|
80
|
+
|
|
81
|
+
`description` **(string, optional)**
|
|
82
|
+
|
|
83
|
+
An optional text to add information about the contact (his name for example).
|
|
84
|
+
Displayed between brackets after the `value` field.
|
|
85
|
+
|
|
65
86
|
`ticket`
|
|
66
87
|
|
|
67
88
|
Represents the host application entity the call will be attached to. Viibe calls should typically be attached to a ticket, conversation or issue within the host application
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var t={579:t=>{function n(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function e(t,n){for(var e=0;e<n.length;e++){var o=n[e];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function o(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}function i(t){return function(n){return Boolean(n.isTrusted&&0===n.origin.indexOf(t))}}function a(t){var n=new URL(t),e="".concat(n.protocol,"//").concat(n.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(n,o){var a=window.open(t,"Authorization",r.join(", "));a||o("Failed to open window");var c=setInterval((function(){a.closed&&(s(),o("User closed window"))}),100);function s(){window.removeEventListener("message",u),clearInterval(c)}function u(t){if(!i(e)(t))return null;if(t.data.token&&(s(),n(t.data.token)),t.data.error&&(s(),o(t.data.error)),t.data&&t.data.event&&t.data.payload)switch(t.data.event){case"authentication:success":return s(),n(t.data);case"authentication:failure":return s(),o(t.data)}return null}window.addEventListener("message",u)}))}var r=
|
|
1
|
+
(()=>{var t={579:t=>{function n(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function e(t,n){for(var e=0;e<n.length;e++){var o=n[e];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function o(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}function i(t){return function(n){return Boolean(n.isTrusted&&0===n.origin.indexOf(t))}}function a(t){var n=new URL(t),e="".concat(n.protocol,"//").concat(n.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(n,o){var a=window.open(t,"Authorization",r.join(", "));a||o("Failed to open window");var c=setInterval((function(){a.closed&&(s(),o("User closed window"))}),100);function s(){window.removeEventListener("message",u),clearInterval(c)}function u(t){if(!i(e)(t))return null;if(t.data.token&&(s(),n(t.data.token)),t.data.error&&(s(),o(t.data.error)),t.data&&t.data.event&&t.data.payload)switch(t.data.event){case"authentication:success":return s(),n(t.data);case"authentication:failure":return s(),o(t.data)}return null}window.addEventListener("message",u)}))}var r=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"auth.viibe.pro";n(this,t),this.host=e}return o(t,[{key:"loginZendesk",value:function(t){var n=document.location.origin;return a("https://".concat(this.host,"/auth/zendesk/login?subdomain=").concat(t,"&origin=").concat(n))}}]),t}(),c=function(){function t(e){n(this,t),this.handlers=[],this.host=e.host,this.origin=/^localhost/.test(this.host)?"http://".concat(this.host):"https://".concat(this.host),this.apiOrigin=/^localhost/.test(this.host)?"http://".concat(this.host):"https://api-".concat(this.host),this.source=e.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-".concat(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,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.host)throw new Error("fillHost");if(!this.source)throw new Error("fillSource");var e=this.generateIframeSrc(n),o=document.createElement("iframe");return o.name="viibe-".concat(Math.floor(1e4*Math.random())),o.style="border: 0;width: calc(100% - 1rem);margin: 0.5rem;",o.src=e,o.allow="geolocation;autoplay;microphone;camera;midi;encrypted-media;clipboard-write;",this.on(o,"document",(function(n){return t.onDocument(n)})),o}},{key:"generateIframeSrc",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.clipboard,e=void 0!==n&&n,o=t.components,i=t.links,a=t.o2m,r=void 0!==a&&a,c=t.ticket,s=t.token,u=t.locale,l=t.standalone,h=t.suggestions,d="".concat(this.origin,"/integration/features/ticket"),f=new URLSearchParams({origin:document.location.origin,resize:"true",source:this.source});if(c&&c.title&&f.set("title",c.title),c&&c.integration&&f.set("thirdPartyId",c.integration.id),i){var v=i instanceof Array?i.map((function(t){return"".concat(t.category,":").concat(t.value)})).join(","):String(i);f.set("links",v)}if(h){var m=h instanceof Array?h.map((function(t){var n=t.category,e=t.value,o=t.description,i="".concat(n,":").concat(e);return o&&(i+=":".concat(o)),i})).join(","):String(h);f.set("suggestions",m)}if(s&&f.set("token",s),u&&f.set("locale",u),o){var w=o instanceof Array?o.join(","):String(o);f.set("components",w)}return l&&f.set("standalone",Boolean(l)),f.set("clipboard",Boolean(e)),f.set("o2m",Boolean(r)),d+"?".concat(f)}},{key:"dispatch",value:function(t,n,e){return this.handlers.filter((function(n){return n.eventName===t&&(!n.windowName||n.windowName===e)})).map((function(t){return t.func(n)}))}},{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,n,e){"string"==typeof t&&"function"==typeof n&&void 0===e&&(e=n,n=t,t=null);var o={eventName:n,func:e,windowName:t?t.name:null};this.handlers.push(o)}},{key:"onDocument",value:function(t){window.open(t.signed_url,"_blank")}},{key:"authenticate",value:function(t){var n=document.location,e=n.protocol,o=n.host;return a("".concat(e,"//api-").concat(o,"/auth/login/").concat(t,"?origin=").concat(origin))}}]),t}();c.Auth=r,"undefined"!=typeof window&&(window.Viibe=c),t.exports=c}},n={},e=function e(o){var i=n[o];if(void 0!==i)return i.exports;var a=n[o]={exports:{}};return t[o](a,a.exports,e),a.exports}(579);module.exports=e})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viibe/impulse-integration-js",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.11",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">= 10.0.0"
|
|
6
6
|
},
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"core-js": "^3.18.2",
|
|
26
26
|
"jest": "^28.1.1",
|
|
27
27
|
"jest-environment-jsdom": "^28.1.1",
|
|
28
|
-
"webpack": "
|
|
28
|
+
"webpack": "5.82.0",
|
|
29
29
|
"webpack-cli": "^4.9.0"
|
|
30
30
|
}
|
|
31
31
|
}
|
package/src/index.js
CHANGED
|
@@ -81,20 +81,20 @@ function openAuthPopup(src) {
|
|
|
81
81
|
// events from auth.viibe.tech
|
|
82
82
|
if (event.data && event.data.event && event.data.payload) {
|
|
83
83
|
switch (event.data.event) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
84
|
+
case 'authentication:success':
|
|
85
|
+
destroy();
|
|
86
|
+
|
|
87
|
+
return resolve(event.data);
|
|
88
|
+
case 'authentication:failure':
|
|
89
|
+
destroy();
|
|
90
|
+
|
|
91
|
+
return reject(event.data);
|
|
92
|
+
default:
|
|
93
|
+
|
|
94
94
|
}
|
|
95
|
-
|
|
95
|
+
|
|
96
96
|
}
|
|
97
|
-
|
|
97
|
+
|
|
98
98
|
return null;
|
|
99
99
|
}
|
|
100
100
|
|
|
@@ -114,7 +114,7 @@ class ViibeAuth {
|
|
|
114
114
|
loginZendesk(subdomain) {
|
|
115
115
|
const { origin } = document.location;
|
|
116
116
|
const url = `https://${this.host}/auth/zendesk/login?subdomain=${subdomain}&origin=${origin}`;
|
|
117
|
-
|
|
117
|
+
|
|
118
118
|
return openAuthPopup(url);
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -164,7 +164,7 @@ class Viibe {
|
|
|
164
164
|
iframe.name = `viibe-${Math.floor(Math.random() * IFRAME_NAME_RANGE)}`;
|
|
165
165
|
iframe.style = 'border: 0;width: 0;';
|
|
166
166
|
iframe.src = `${this.origin}/integration/features/notifications`;
|
|
167
|
-
|
|
167
|
+
|
|
168
168
|
return iframe;
|
|
169
169
|
}
|
|
170
170
|
|
|
@@ -222,8 +222,8 @@ class Viibe {
|
|
|
222
222
|
|
|
223
223
|
if (links) {
|
|
224
224
|
const linksParams = (links instanceof Array)
|
|
225
|
-
|
|
226
|
-
|
|
225
|
+
? links.map(link => `${link.category}:${link.value}`).join(',')
|
|
226
|
+
: String(links);
|
|
227
227
|
|
|
228
228
|
params.set('links', linksParams);
|
|
229
229
|
}
|
|
@@ -250,8 +250,8 @@ class Viibe {
|
|
|
250
250
|
|
|
251
251
|
if (components) {
|
|
252
252
|
const componentsParams = (components instanceof Array)
|
|
253
|
-
|
|
254
|
-
|
|
253
|
+
? components.join(',')
|
|
254
|
+
: String(components);
|
|
255
255
|
|
|
256
256
|
params.set('components', componentsParams);
|
|
257
257
|
}
|
|
@@ -280,11 +280,11 @@ class Viibe {
|
|
|
280
280
|
*/
|
|
281
281
|
dispatch(eventName, payload, windowName) {
|
|
282
282
|
return this.handlers
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
283
|
+
.filter(handler =>
|
|
284
|
+
handler.eventName === eventName &&
|
|
285
|
+
(!handler.windowName || (handler.windowName === windowName)),
|
|
286
|
+
)
|
|
287
|
+
.map(handler => handler.func(payload));
|
|
288
288
|
}
|
|
289
289
|
|
|
290
290
|
/**
|
|
@@ -323,8 +323,8 @@ class Viibe {
|
|
|
323
323
|
*/
|
|
324
324
|
on(iframe, eventName, func) {
|
|
325
325
|
if (typeof iframe === 'string' &&
|
|
326
|
-
|
|
327
|
-
|
|
326
|
+
typeof eventName === 'function' &&
|
|
327
|
+
typeof func === 'undefined') {
|
|
328
328
|
func = eventName;
|
|
329
329
|
eventName = iframe;
|
|
330
330
|
iframe = null;
|
package/test/dist.test.js
CHANGED
|
@@ -62,7 +62,7 @@ describe('dist', () => {
|
|
|
62
62
|
source: 'jest',
|
|
63
63
|
});
|
|
64
64
|
const iframe = viibe.createCallIframe();
|
|
65
|
-
//
|
|
65
|
+
//const callUrl = viibe.createCallUrl();
|
|
66
66
|
|
|
67
67
|
expect(iframe).toBeInstanceOf(HTMLIFrameElement);
|
|
68
68
|
expect(iframe.name).toMatch(/^viibe-[0-9]{1,4}$/);
|
|
@@ -70,6 +70,6 @@ describe('dist', () => {
|
|
|
70
70
|
expect(iframe.style.border).toBe('0px');
|
|
71
71
|
expect(iframe.style.margin).toBe('0.5rem');
|
|
72
72
|
expect(iframe.style.width).toBe('calc(100% - 1rem)');
|
|
73
|
-
//
|
|
73
|
+
//expect(iframe.src).toEqual(callUrl);
|
|
74
74
|
});
|
|
75
75
|
});
|