@telia-ace/knowledge-widget-bot-provider 0.0.21-next.3 → 0.0.21-next.5
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/{contact-method-list.189ed807.js → contact-method-list.e0e6b881.js} +3 -3
- package/dist/{contact-method-list.189ed807.js.map → contact-method-list.e0e6b881.js.map} +1 -1
- package/dist/{contact-method.190ef5ed.js → contact-method.20d7a622.js} +2 -2
- package/dist/{contact-method.190ef5ed.js.map → contact-method.20d7a622.js.map} +1 -1
- package/dist/{index.c8e4c7d2.js → index.4cc04b4e.js} +113 -112
- package/dist/index.4cc04b4e.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/utils.d.ts +1 -1
- package/package.json +10 -10
- package/dist/index.c8e4c7d2.js.map +0 -1
|
@@ -30,10 +30,10 @@ import y from "@emotion/styled";
|
|
|
30
30
|
import { ContactList as v, ContactMethod as w } from "@telia-ace/knowledge-widget-adapters";
|
|
31
31
|
import { useDispatch as A, useContainer as K } from "@telia-ace/knowledge-widget-ui";
|
|
32
32
|
import h, { useState as b, useEffect as P } from "react";
|
|
33
|
-
import R from "./contact-method.
|
|
33
|
+
import R from "./contact-method.20d7a622.js";
|
|
34
34
|
import "@telia-ace/knowledge-data-client";
|
|
35
35
|
import "@telia-ace/widget-forms";
|
|
36
|
-
import "./index.
|
|
36
|
+
import "./index.4cc04b4e.js";
|
|
37
37
|
import "@telia-ace/widget-conversation";
|
|
38
38
|
import "@telia-ace/widget-services";
|
|
39
39
|
import "@telia-ace/widget-utilities";
|
|
@@ -124,4 +124,4 @@ const Y = ({ actions: t, entryId: e, groupId: n }) => {
|
|
|
124
124
|
export {
|
|
125
125
|
Y as default
|
|
126
126
|
};
|
|
127
|
-
//# sourceMappingURL=contact-method-list.
|
|
127
|
+
//# sourceMappingURL=contact-method-list.e0e6b881.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-method-list.
|
|
1
|
+
{"version":3,"file":"contact-method-list.e0e6b881.js","sources":["../src/ui/contact-method-list.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport {\n ContactList,\n ContactMethod as GenericContactMethod,\n ContactMethodType,\n} from '@telia-ace/knowledge-widget-adapters';\nimport { useContainer, useDispatch } from '@telia-ace/knowledge-widget-ui';\nimport React, { useEffect, useState } from 'react';\nimport { ActionItem } from '../types';\nimport ContactMethod from './contact-method';\n\ntype Props = {\n actions: ActionItem[];\n contactMethodIds?: string[];\n entryId: string;\n groupId: string;\n};\nconst ContactMethodList: React.FC<Props> = ({ actions, entryId, groupId }) => {\n const dispatch = useDispatch();\n const container = useContainer();\n const [items, setItems] = useState<any[]>([]);\n const [expanded, setExpanded] = useState<string[]>([]);\n\n useEffect(() => {\n container.getAsync('contactMethods').then((platform: any) => {\n if (!platform) {\n return;\n }\n const promises = actions.map(async (action) => {\n if (!action.data?.clientName) {\n return null;\n }\n const cm = await platform.handleAdapters(action.data);\n\n return {\n ...cm,\n ...action.data,\n description: action.data.description ? action.data.description : cm.description,\n onClick: (event: React.MouseEvent, data: ContactMethodType) => {\n if (typeof cm.onClick === 'function') {\n cm.onClick(event, data);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n if (data.inline && !data.expanded) {\n setExpanded([...expanded, data.id]);\n } else {\n const { events } = container.get('$widget');\n events.dispatch('provider:open-contact-method', {\n entryId,\n contactMethod: data,\n actionKey: action.actionKey,\n });\n }\n },\n };\n });\n\n Promise.all(promises).then((result) => {\n setItems(result.filter((i) => !!i));\n });\n });\n }, [actions, container, entryId, expanded]);\n\n if (!items.length) {\n return null;\n }\n\n return (\n <StyledContactList\n contactMethods={items}\n dispatch={dispatch}\n itemRenderer={(cm: any, props: any) => {\n const isExpanded = expanded.includes(cm.id) || cm.expanded;\n if (isExpanded && cm.inline) {\n return (\n <StyledContactMethod\n contactMethodId={cm.id}\n groupId={groupId}\n guideId={cm.body.guideId}\n />\n );\n }\n return <StyledGenericContactMethod {...cm} {...props} />;\n }}\n />\n );\n};\n\nexport default ContactMethodList;\n\nconst StyledContactList = styled(ContactList)`\n > ul > li {\n a {\n display: flex;\n align-items: center;\n outline-offset: -2px;\n }\n\n &:not(:last-child) {\n ${(p) => p.theme.border && `border-bottom: ${p.theme.border};`}\n }\n }\n`;\n\nconst StyledContactMethod = styled(ContactMethod)`\n i {\n margin: 0 ${(p) => p.theme.sizes?.medium} 0 0;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n`;\nconst StyledGenericContactMethod = styled(GenericContactMethod)`\n padding: ${(p) => p.theme.sizes?.medium};\n i {\n margin: 0 ${(p) => p.theme.sizes?.medium} 0 0;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n`;\n"],"names":["ContactMethodList","actions","entryId","groupId","dispatch","useDispatch","container","useContainer","items","setItems","useState","expanded","setExpanded","useEffect","platform","promises","action","__async","_a","cm","__spreadProps","__spreadValues","event","data","events","result","i","React","StyledContactList","props","StyledContactMethod","StyledGenericContactMethod","styled","ContactList","p","ContactMethod","GenericContactMethod"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,MAAMA,IAAqC,CAAC,EAAE,SAAAC,GAAS,SAAAC,GAAS,SAAAC,QAAc;AAC1E,QAAMC,IAAWC,KACXC,IAAYC,KACZ,CAACC,GAAOC,CAAQ,IAAIC,EAAgB,CAAE,CAAA,GACtC,CAACC,GAAUC,CAAW,IAAIF,EAAmB,CAAE,CAAA;AA6CjD,SA3CJG,EAAU,MAAM;AACZ,IAAAP,EAAU,SAAS,gBAAgB,EAAE,KAAK,CAACQ,MAAkB;AACzD,UAAI,CAACA;AACD;AAEJ,YAAMC,IAAWd,EAAQ,IAAI,CAAOe,MAAWC,EAAA;;AACvC,YAAA,GAACC,IAAAF,EAAO,SAAP,QAAAE,EAAa;AACP,iBAAA;AAEX,cAAMC,IAAK,MAAML,EAAS,eAAeE,EAAO,IAAI;AAE7C,eAAAI,EAAAC,IAAA,IACAF,IACAH,EAAO,OAFP;AAAA,UAGH,aAAaA,EAAO,KAAK,cAAcA,EAAO,KAAK,cAAcG,EAAG;AAAA,UACpE,SAAS,CAACG,GAAyBC,MAA4B;AAK3D,gBAJI,OAAOJ,EAAG,WAAY,cACnBA,EAAA,QAAQG,GAAOC,CAAI,GAGtB,CAAAD,EAAM;AAGV,kBAAIC,EAAK,UAAU,CAACA,EAAK;AACrB,gBAAAX,EAAY,CAAC,GAAGD,GAAUY,EAAK,EAAE,CAAC;AAAA,mBAC/B;AACH,sBAAM,EAAE,QAAAC,EAAW,IAAAlB,EAAU,IAAI,SAAS;AAC1C,gBAAAkB,EAAO,SAAS,gCAAgC;AAAA,kBAC5C,SAAAtB;AAAA,kBACA,eAAeqB;AAAA,kBACf,WAAWP,EAAO;AAAA,gBAAA,CACrB;AAAA,cACL;AAAA,UACJ;AAAA,QAAA;AAAA,MACJ,EACH;AAED,cAAQ,IAAID,CAAQ,EAAE,KAAK,CAACU,MAAW;AACnC,QAAAhB,EAASgB,EAAO,OAAO,CAACC,MAAM,CAAC,CAACA,CAAC,CAAC;AAAA,MAAA,CACrC;AAAA,IAAA,CACJ;AAAA,KACF,CAACzB,GAASK,GAAWJ,GAASS,CAAQ,CAAC,GAErCH,EAAM,SAKP,gBAAAmB,EAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,gBAAgBpB;AAAA,MAChB,UAAAJ;AAAA,MACA,cAAc,CAACe,GAASU,OACDlB,EAAS,SAASQ,EAAG,EAAE,KAAKA,EAAG,aAChCA,EAAG,SAEb,gBAAAQ,EAAA;AAAA,QAACG;AAAA,QAAA;AAAA,UACG,iBAAiBX,EAAG;AAAA,UACpB,SAAAhB;AAAA,UACA,SAASgB,EAAG,KAAK;AAAA,QAAA;AAAA,MAAA,IAIrB,gBAAAQ,EAAA,cAAAI,GAAAV,IAAA,IAA+BF,IAAQU,EAAO;AAAA,IAC1D;AAAA,EAAA,IAnBG;AAsBf,GAIMD,IAAoBI,EAAOC,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAS9B,CAACC,MAAMA,EAAE,MAAM,UAAU,kBAAkBA,EAAE,MAAM;AAAA;AAAA;AAAA,GAK3DJ,IAAsBE,EAAOG,CAAa;AAAA;AAAA,oBAE5B,CAACD,MAAM;;AAAA,UAAAhB,IAAAgB,EAAE,MAAM,UAAR,gBAAAhB,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAMpCa,IAA6BC,EAAOI,CAAoB;AAAA,eAC/C,CAACF,MAAM;;AAAA,UAAAhB,IAAAgB,EAAE,MAAM,UAAR,gBAAAhB,EAAe;AAAA;AAAA;AAAA,oBAEjB,CAACgB,MAAM;;AAAA,UAAAhB,IAAAgB,EAAE,MAAM,UAAR,gBAAAhB,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|
|
@@ -32,7 +32,7 @@ import { ContactMethod as H } from "@telia-ace/knowledge-widget-adapters";
|
|
|
32
32
|
import { useContainer as J, useDispatch as K, useConversation as L } from "@telia-ace/knowledge-widget-ui";
|
|
33
33
|
import { FormBuilder as N } from "@telia-ace/widget-forms";
|
|
34
34
|
import O, { useState as P, useRef as Q, useEffect as z, useCallback as U } from "react";
|
|
35
|
-
import { u as A } from "./index.
|
|
35
|
+
import { u as A } from "./index.4cc04b4e.js";
|
|
36
36
|
import "@telia-ace/widget-conversation";
|
|
37
37
|
import "@telia-ace/widget-services";
|
|
38
38
|
import "@telia-ace/widget-utilities";
|
|
@@ -133,4 +133,4 @@ const mt = ({ contactMethodId: e, guideId: t, groupId: r, className: h }) => {
|
|
|
133
133
|
export {
|
|
134
134
|
mt as default
|
|
135
135
|
};
|
|
136
|
-
//# sourceMappingURL=contact-method.
|
|
136
|
+
//# sourceMappingURL=contact-method.20d7a622.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-method.
|
|
1
|
+
{"version":3,"file":"contact-method.20d7a622.js","sources":["../src/ui/contact-method.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { DataClient, DataType } from '@telia-ace/knowledge-data-client';\nimport {\n ContactMethod as GenericContactMethod,\n ContactMethodPlatform,\n} from '@telia-ace/knowledge-widget-adapters';\nimport { useContainer, useConversation, useDispatch } from '@telia-ace/knowledge-widget-ui';\nimport { FormBuilder } from '@telia-ace/widget-forms';\nimport { Widget } from '@webprovisions/platform';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { updateForm } from '../utils';\n\ntype Props = {\n contactMethodId: string;\n groupId: string;\n guideId?: string;\n className?: string;\n};\nconst ContactMethod: React.FC<Props> = ({ contactMethodId, guideId, groupId, className }) => {\n const [contactMethod, setContactMethod] = useState<any>();\n const container = useContainer();\n const dispatch = useDispatch();\n const mountedRef = useRef<boolean>(true);\n const currentConversation = useConversation();\n\n useEffect(() => {\n const { events } = container.get('$widget') as Widget;\n\n const unsubscribe = events.subscribe('bot-provider:form-submitted', async (_, data) => {\n // making sure that this is the form that is submitted\n if (data.form.meta?.groupId !== groupId || data.id !== contactMethod.id) {\n return;\n }\n\n if (currentConversation) {\n if (!data.form.meta) {\n data.form.meta = {};\n }\n\n data.form.meta.conversation = currentConversation;\n }\n\n const platform = (await container.getAsync('contactMethods')) as ContactMethodPlatform;\n\n const updatedMethod = {\n ...contactMethod,\n body: {\n ...contactMethod.body,\n form: data.form,\n },\n };\n\n const { errors, valid, errorTypes } = await platform.validate(updatedMethod);\n\n if (!valid) {\n const builder = new FormBuilder(contactMethod.body.form);\n setContactMethod(undefined);\n\n builder.setValidationErrors(errors);\n\n updatedMethod.body = {\n ...updatedMethod.body,\n form: builder.get(),\n };\n\n setContactMethod({ ...updatedMethod });\n return;\n }\n\n const result = await platform.submit(updatedMethod);\n\n updatedMethod.confirmation = result;\n setContactMethod(updatedMethod);\n });\n\n const unsubscribeEvaluate = events.subscribe('bot-provider:evaluate', async (_, data) => {\n if (data.id != contactMethodId) {\n return;\n }\n\n const platform = (await container.getAsync('contactMethods')) as ContactMethodPlatform;\n\n const updatedForm = await platform.evaluate(contactMethod);\n\n let updatedMethod = {\n ...contactMethod,\n body: {\n ...contactMethod.body,\n form: updatedForm,\n },\n };\n\n const updatedBody = updateForm(updatedMethod, {\n submit: 'Submit',\n errors: {},\n meta: { groupId },\n });\n\n updatedMethod = {\n ...updatedMethod,\n body: updatedBody,\n };\n\n setContactMethod(updatedMethod);\n });\n\n return () => {\n unsubscribe();\n unsubscribeEvaluate();\n };\n }, [container, contactMethod, setContactMethod, currentConversation]);\n\n const fetchContactMethod = useCallback(\n async (id: string) => {\n const dataClient = await DataClient.getInstance(container);\n\n const cm = await dataClient.fetch(\n DataType.ContactMethod,\n {\n contactMethodId: id,\n guideId,\n },\n { noCache: true }\n );\n\n const body = updateForm(cm, {\n submit: 'Submit',\n errors: {},\n meta: { groupId },\n });\n cm.body = body;\n cm.body.guideId = guideId;\n\n if (!mountedRef.current) {\n return null;\n }\n setContactMethod(cm);\n },\n [mountedRef]\n );\n\n useEffect(() => {\n fetchContactMethod(contactMethodId);\n return () => {\n mountedRef.current = false; // clean up\n };\n }, [contactMethodId, fetchContactMethod]);\n\n if (!contactMethod) {\n return null;\n }\n return (\n <StyledGenericContactMethod\n {...contactMethod}\n body={{\n ...contactMethod.body,\n form: contactMethod.body.form\n ? {\n ...contactMethod.body.form,\n data: contactMethod.body.form?.data,\n layout: { ...contactMethod.body.form.layout },\n meta: contactMethod.body.form?.meta,\n schema: contactMethod.body.form?.schema,\n }\n : undefined,\n guideId: contactMethod.body.guideId,\n }}\n inline={true}\n expanded={true}\n dispatch={dispatch}\n className={className}\n />\n );\n};\n\nexport default ContactMethod;\n\nconst StyledGenericContactMethod = styled(GenericContactMethod)`\n padding: ${(p) => p.theme.sizes?.normal} ${(p) => p.theme.sizes?.medium};\n`;\n"],"names":["ContactMethod","contactMethodId","guideId","groupId","className","contactMethod","setContactMethod","useState","container","useContainer","dispatch","useDispatch","mountedRef","useRef","currentConversation","useConversation","useEffect","events","unsubscribe","_","data","__async","_a","platform","updatedMethod","__spreadProps","__spreadValues","errors","valid","errorTypes","builder","FormBuilder","result","unsubscribeEvaluate","updatedForm","updatedBody","updateForm","fetchContactMethod","useCallback","id","cm","DataClient","DataType","body","React","StyledGenericContactMethod","_b","_c","styled","GenericContactMethod","p"],"mappings":"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"}
|
|
@@ -2,72 +2,72 @@ var _ = Object.defineProperty, D = Object.defineProperties;
|
|
|
2
2
|
var J = Object.getOwnPropertyDescriptors;
|
|
3
3
|
var T = Object.getOwnPropertySymbols;
|
|
4
4
|
var q = Object.prototype.hasOwnProperty, Q = Object.prototype.propertyIsEnumerable;
|
|
5
|
-
var O = (
|
|
5
|
+
var O = (s, t, e) => t in s ? _(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e, K = (s, t) => {
|
|
6
6
|
for (var e in t || (t = {}))
|
|
7
|
-
q.call(t, e) && O(
|
|
7
|
+
q.call(t, e) && O(s, e, t[e]);
|
|
8
8
|
if (T)
|
|
9
9
|
for (var e of T(t))
|
|
10
|
-
Q.call(t, e) && O(
|
|
11
|
-
return
|
|
12
|
-
}, A = (
|
|
13
|
-
var f = (
|
|
14
|
-
var u = (
|
|
10
|
+
Q.call(t, e) && O(s, e, t[e]);
|
|
11
|
+
return s;
|
|
12
|
+
}, A = (s, t) => D(s, J(t));
|
|
13
|
+
var f = (s, t, e) => (O(s, typeof t != "symbol" ? t + "" : t, e), e);
|
|
14
|
+
var u = (s, t, e) => new Promise((i, n) => {
|
|
15
15
|
var c = (y) => {
|
|
16
16
|
try {
|
|
17
|
-
|
|
17
|
+
h(e.next(y));
|
|
18
18
|
} catch (k) {
|
|
19
|
-
|
|
19
|
+
n(k);
|
|
20
20
|
}
|
|
21
21
|
}, r = (y) => {
|
|
22
22
|
try {
|
|
23
|
-
|
|
23
|
+
h(e.throw(y));
|
|
24
24
|
} catch (k) {
|
|
25
|
-
|
|
25
|
+
n(k);
|
|
26
26
|
}
|
|
27
|
-
},
|
|
28
|
-
|
|
27
|
+
}, h = (y) => y.done ? i(y.value) : Promise.resolve(y.value).then(c, r);
|
|
28
|
+
h((e = e.apply(s, t)).next());
|
|
29
29
|
});
|
|
30
30
|
import { ConversationMessageListItemType as S, ConversationPlatform as X, registerCustomMessageComponent as B } from "@telia-ace/widget-conversation";
|
|
31
31
|
import { readStorage as Y, createStorageWriter as U, StorageCategory as V } from "@telia-ace/widget-services";
|
|
32
32
|
import { uuid as N } from "@telia-ace/widget-utilities";
|
|
33
33
|
import { FormBuilder as R, submitButton as Z } from "@telia-ace/widget-forms";
|
|
34
|
-
var p = /* @__PURE__ */ ((
|
|
35
|
-
const tt = (
|
|
36
|
-
if (
|
|
37
|
-
const { type: t, content: e } =
|
|
34
|
+
var p = /* @__PURE__ */ ((s) => (s.ContactMethod = "ace-knowledge-bot-contact-method", s.ContactList = "ace-knowledge-bot-contact-list", s.FeedbackList = "ace-knowledge-bot-feedback-list", s.NotificationList = "ace-knowledge-bot-notification-list", s.NoGoodAlternative = "ace-knowledge-bot-no-good-alternative", s))(p || {});
|
|
35
|
+
const tt = (s) => {
|
|
36
|
+
if (s) {
|
|
37
|
+
const { type: t, content: e } = s;
|
|
38
38
|
if (t && e)
|
|
39
39
|
return { type: t, content: e };
|
|
40
40
|
}
|
|
41
41
|
}, j = ({
|
|
42
|
-
isUser:
|
|
42
|
+
isUser: s,
|
|
43
43
|
items: t = [],
|
|
44
44
|
meta: e = {}
|
|
45
45
|
}) => {
|
|
46
46
|
const i = N();
|
|
47
47
|
return {
|
|
48
48
|
id: i,
|
|
49
|
-
isUser:
|
|
49
|
+
isUser: s,
|
|
50
50
|
items: t.map((c) => ({
|
|
51
51
|
id: c.id || N(),
|
|
52
|
-
isUser:
|
|
52
|
+
isUser: s,
|
|
53
53
|
groupId: i,
|
|
54
54
|
message: c.message || []
|
|
55
55
|
})),
|
|
56
56
|
meta: e
|
|
57
57
|
};
|
|
58
58
|
}, et = ({
|
|
59
|
-
id:
|
|
59
|
+
id: s,
|
|
60
60
|
title: t,
|
|
61
61
|
defaultIcon: e,
|
|
62
62
|
exits: [i],
|
|
63
|
-
exitType:
|
|
63
|
+
exitType: n,
|
|
64
64
|
confirmationText: c,
|
|
65
65
|
expandFormAutomatically: r,
|
|
66
|
-
form:
|
|
66
|
+
form: h,
|
|
67
67
|
description: y
|
|
68
68
|
}, k = {}) => {
|
|
69
|
-
const { adapter: a } = i || { Adapter: {} }, { clientName: o = "", settings: l = {}, customClientName: I = "" } = a, { validation: w } = k,
|
|
70
|
-
id:
|
|
69
|
+
const { adapter: a } = i || { Adapter: {} }, { clientName: o = "", settings: l = {}, customClientName: I = "" } = a, { validation: w } = k, d = {
|
|
70
|
+
id: s.toString(),
|
|
71
71
|
title: t,
|
|
72
72
|
description: y,
|
|
73
73
|
symbol: tt(e),
|
|
@@ -78,70 +78,71 @@ const tt = (n) => {
|
|
|
78
78
|
};
|
|
79
79
|
if (o.indexOf("phone") > -1 || o.indexOf("freetext") > -1) {
|
|
80
80
|
const { displayTextBeforeClick: P, textBeforeClick: g } = l;
|
|
81
|
-
P === "true" && (
|
|
81
|
+
P === "true" && (d.expanded = !1, d.title = g), o.indexOf("phone.text") > -1 ? d.body.phoneNumber = l.phoneNumber : d.body.freetext = l.freetext;
|
|
82
82
|
}
|
|
83
|
-
return (o.indexOf("chat.popup") > -1 || o.indexOf("link") > -1 || o === "custom.adapter" &&
|
|
84
|
-
}, it = (
|
|
85
|
-
const { localState: t } =
|
|
86
|
-
return
|
|
87
|
-
},
|
|
83
|
+
return (o.indexOf("chat.popup") > -1 || o.indexOf("link") > -1 || o === "custom.adapter" && n === "custom") && (d.body = l, d.body.confirmationFallback = c), o.indexOf("ace") > -1 && (d.body = l), h && h.hasValueComponents && (w ? d.body.form = R.fromLegacyForm(s.toString(), h, w).get() : d.body.form = R.fromLegacyForm(s.toString(), h).get(), r || (d.expanded = d.inline = !1), d.body = nt(d, { submit: "Submit" })), k.guideId && (d.body.guideId = k.guideId), d;
|
|
84
|
+
}, it = (s) => {
|
|
85
|
+
const { localState: t } = s;
|
|
86
|
+
return s.tags.includes("category") && s.tags.includes("contact") ? S.ItemList : s.tags.includes("suggestion") ? S.LinkList : (t == null ? void 0 : t.$type) === "Humany.Matching.Bots.Conversations.GuideListState, Humany.Matching" ? S.LinkList : (t == null ? void 0 : t.$type) === "Humany.Matching.Bots.Conversations.States.GuideFeedbackState, Humany.Matching" ? p.FeedbackList : (t == null ? void 0 : t.$type) === "Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching" ? p.ContactList : S.ButtonList;
|
|
87
|
+
}, st = (s, t) => {
|
|
88
88
|
const { knowledgeBotEndpoint: e } = t.properties();
|
|
89
89
|
if (e)
|
|
90
90
|
return `${e}/conversations`;
|
|
91
|
-
const { data: i } =
|
|
91
|
+
const { data: i } = s.get("$settings");
|
|
92
92
|
if (!i || !i.projection)
|
|
93
93
|
throw new Error("Missing Knowledge Bot endpoint");
|
|
94
94
|
return `${i.projection}/conversations`;
|
|
95
|
-
},
|
|
95
|
+
}, nt = (s, {
|
|
96
96
|
submit: t,
|
|
97
97
|
errors: e,
|
|
98
98
|
meta: i
|
|
99
99
|
}) => {
|
|
100
|
-
var
|
|
101
|
-
if ((
|
|
102
|
-
const { body: c } =
|
|
100
|
+
var n;
|
|
101
|
+
if ((n = s == null ? void 0 : s.body) != null && n.form) {
|
|
102
|
+
const { body: c } = s, r = new R(c.form);
|
|
103
103
|
return c.form.layout.submit || r.createComponent(Z(t, "submit")), e && r.setValidationErrors(e), i && r.setMeta(i), A(K({}, c), {
|
|
104
104
|
form: r.get()
|
|
105
105
|
});
|
|
106
106
|
}
|
|
107
|
-
return (
|
|
108
|
-
}, z = (
|
|
109
|
-
(yield (yield
|
|
107
|
+
return (s == null ? void 0 : s.body) || {};
|
|
108
|
+
}, z = (s, t, e) => u(void 0, null, function* () {
|
|
109
|
+
(yield (yield s.getAsync("dataClient")).getClient()).parameters.set(t, e);
|
|
110
110
|
}), b = ({
|
|
111
|
-
messageId:
|
|
111
|
+
messageId: s,
|
|
112
112
|
message: t,
|
|
113
113
|
group: e
|
|
114
114
|
}) => ({
|
|
115
|
-
id:
|
|
115
|
+
id: s,
|
|
116
116
|
message: t,
|
|
117
117
|
groupId: e.id,
|
|
118
118
|
isUser: e.isUser
|
|
119
|
-
}), ot = (
|
|
119
|
+
}), ot = (s, t, e) => u(void 0, null, function* () {
|
|
120
120
|
const i = (a, o, l, I = {
|
|
121
121
|
actions: [],
|
|
122
122
|
entryId: o.id,
|
|
123
123
|
groupId: l
|
|
124
124
|
}) => {
|
|
125
125
|
const w = [];
|
|
126
|
-
return I.actions = o.content.items.map((
|
|
126
|
+
return I.actions = o.content.items.map((d) => {
|
|
127
127
|
var g;
|
|
128
128
|
const P = {
|
|
129
|
-
label:
|
|
130
|
-
actionKey:
|
|
131
|
-
symbol:
|
|
129
|
+
label: d.title,
|
|
130
|
+
actionKey: d.actionKey,
|
|
131
|
+
symbol: d.symbol ? d.symbol : void 0,
|
|
132
|
+
description: d.description || void 0
|
|
132
133
|
};
|
|
133
|
-
if (
|
|
134
|
-
const H = o.actions[
|
|
135
|
-
a === p.ContactList ? (w.push(
|
|
134
|
+
if (d.data) {
|
|
135
|
+
const H = o.actions[d.actionKey];
|
|
136
|
+
a === p.ContactList ? (w.push(d.data.id), P.data = et(d.data, {
|
|
136
137
|
guideId: (g = H == null ? void 0 : H.guideId) == null ? void 0 : g.toString()
|
|
137
|
-
})) : P.data =
|
|
138
|
+
})) : P.data = d.data;
|
|
138
139
|
}
|
|
139
140
|
return P;
|
|
140
141
|
}), a === p.ContactList && (I.contactMethodIds = w), I;
|
|
141
|
-
},
|
|
142
|
+
}, n = (w, d, ...P) => u(void 0, [w, d, ...P], function* (a, o, l = [], I) {
|
|
142
143
|
var H, F;
|
|
143
144
|
const g = N();
|
|
144
|
-
switch (a.type !== "List" && a.tags.includes("guide") && ((F = (H = a.content.hints) == null ? void 0 : H[0]) == null ? void 0 : F.id) && (yield z(
|
|
145
|
+
switch (a.type !== "List" && a.tags.includes("guide") && ((F = (H = a.content.hints) == null ? void 0 : H[0]) == null ? void 0 : F.id) && (yield z(s, "LastGuideId", a.content.hints[0].id)), a.type) {
|
|
145
146
|
case "List": {
|
|
146
147
|
const { header: v, items: x, html: $ } = a.content, C = [];
|
|
147
148
|
let E = {
|
|
@@ -391,7 +392,7 @@ const tt = (n) => {
|
|
|
391
392
|
["List", 2],
|
|
392
393
|
["Contact", 3],
|
|
393
394
|
["CategorizedNoticeList", 10]
|
|
394
|
-
]),
|
|
395
|
+
]), h = [], y = t.sort((a, o) => {
|
|
395
396
|
var I = r.get(a.type) || 20, w = r.get(o.type) || 20;
|
|
396
397
|
return I - w;
|
|
397
398
|
}).filter((a) => !a.relation).reduce((a, o) => a.concat(c(o)), []), k = (a) => typeof a.actions.selector != "undefined";
|
|
@@ -399,24 +400,24 @@ const tt = (n) => {
|
|
|
399
400
|
const o = t.filter(
|
|
400
401
|
(w) => w.relation === a.id && !k(w)
|
|
401
402
|
), l = j({ isUser: !1 });
|
|
402
|
-
(yield
|
|
403
|
+
(yield n(a, l, o, e)).forEach((w) => {
|
|
403
404
|
l.items.push(w);
|
|
404
|
-
}), l.items.length &&
|
|
405
|
+
}), l.items.length && h.push(l);
|
|
405
406
|
}
|
|
406
|
-
return
|
|
407
|
+
return h;
|
|
407
408
|
});
|
|
408
409
|
class at {
|
|
409
|
-
constructor(t, e, i,
|
|
410
|
+
constructor(t, e, i, n) {
|
|
410
411
|
f(this, "globalState");
|
|
411
412
|
f(this, "localState");
|
|
412
413
|
f(this, "clientId");
|
|
413
414
|
f(this, "entries");
|
|
414
|
-
this.endpoint = t, this.events = e, this.store = i, this.container =
|
|
415
|
+
this.endpoint = t, this.events = e, this.store = i, this.container = n, this.clientId = N(), this.entries = [];
|
|
415
416
|
}
|
|
416
417
|
start(e) {
|
|
417
418
|
return u(this, arguments, function* ({ silent: t }) {
|
|
418
|
-
const i = yield this.store.read("globalState"),
|
|
419
|
-
if (this.globalState = i || this.globalState, this.localState =
|
|
419
|
+
const i = yield this.store.read("globalState"), n = yield this.store.read("localState"), c = yield this.store.read("entries");
|
|
420
|
+
if (this.globalState = i || this.globalState, this.localState = n || this.localState, this.entries = c || this.entries, t)
|
|
420
421
|
return;
|
|
421
422
|
const r = this.createInitialEnvelope();
|
|
422
423
|
return yield this.postEnvelope(r);
|
|
@@ -462,16 +463,16 @@ class at {
|
|
|
462
463
|
clientId: this.clientId
|
|
463
464
|
},
|
|
464
465
|
t
|
|
465
|
-
).then((
|
|
466
|
+
).then((n) => {
|
|
466
467
|
const c = t.items.findIndex((r) => r.message[0] === "link-list");
|
|
467
|
-
return c === -1 || !
|
|
468
|
-
meta: K(K({}, t.meta),
|
|
468
|
+
return c === -1 || !n ? t : A(K({}, t), {
|
|
469
|
+
meta: K(K({}, t.meta), n[0].meta),
|
|
469
470
|
items: [
|
|
470
471
|
...t.items.slice(0, c),
|
|
471
472
|
A(K({}, t.items[c]), {
|
|
472
473
|
message: [
|
|
473
|
-
|
|
474
|
-
K(K({}, t.items[c].message[1]),
|
|
474
|
+
n[0].items[0].message[0],
|
|
475
|
+
K(K({}, t.items[c].message[1]), n[0].items[0].message[1])
|
|
475
476
|
]
|
|
476
477
|
}),
|
|
477
478
|
...t.items.slice(c + 1)
|
|
@@ -482,7 +483,7 @@ class at {
|
|
|
482
483
|
}
|
|
483
484
|
showContactMethodAction(t) {
|
|
484
485
|
return u(this, null, function* () {
|
|
485
|
-
const e = this.entries.find((
|
|
486
|
+
const e = this.entries.find((n) => n.id === t.entryId), i = e == null ? void 0 : e.actions[t.actionKey];
|
|
486
487
|
if (!!i)
|
|
487
488
|
return this.postEnvelope({
|
|
488
489
|
action: {
|
|
@@ -524,19 +525,19 @@ class at {
|
|
|
524
525
|
const i = yield fetch(this.endpoint, this.getHttpOptions(t));
|
|
525
526
|
if (!i.ok)
|
|
526
527
|
throw i;
|
|
527
|
-
const
|
|
528
|
-
return this.handleResponse(
|
|
528
|
+
const n = yield i.json();
|
|
529
|
+
return this.handleResponse(n, e);
|
|
529
530
|
} catch (i) {
|
|
530
531
|
process.env.NODE_ENV !== "production" && console.warn("Something went wrong when posting the envelope.");
|
|
531
|
-
let
|
|
532
|
-
return (i.message === "Failed to fetch" || i.message === "NetworkError when attempting to fetch resource.") && (
|
|
532
|
+
let n = "Something went wrong";
|
|
533
|
+
return (i.message === "Failed to fetch" || i.message === "NetworkError when attempting to fetch resource.") && (n = "Lost connection... Please try again."), this.handleResponse({
|
|
533
534
|
entries: [
|
|
534
535
|
{
|
|
535
536
|
id: N(),
|
|
536
537
|
type: "Error",
|
|
537
538
|
timestamp: new Date().toISOString(),
|
|
538
539
|
content: {
|
|
539
|
-
message:
|
|
540
|
+
message: n
|
|
540
541
|
},
|
|
541
542
|
actions: {},
|
|
542
543
|
tags: []
|
|
@@ -624,20 +625,20 @@ class dt {
|
|
|
624
625
|
f(this, "groups", []);
|
|
625
626
|
f(this, "store");
|
|
626
627
|
this.container = t, this.conversation = e;
|
|
627
|
-
const { events:
|
|
628
|
-
this.events =
|
|
628
|
+
const { events: n } = this.container.get("$widget");
|
|
629
|
+
this.events = n, this.store = new lt(t), this.agent = e.createAgent({
|
|
629
630
|
id: "knowledge-bot-agent",
|
|
630
631
|
name: "",
|
|
631
632
|
avatar: void 0
|
|
632
633
|
}), this.user = e.user;
|
|
633
|
-
const c =
|
|
634
|
-
this.httpClient = new ct(c,
|
|
635
|
-
this.onWidgetEntryReceived(
|
|
634
|
+
const c = st(t, i);
|
|
635
|
+
this.httpClient = new ct(c, n, this.store, this.container), this.events.subscribe("provider:widget-entry", (r, h) => {
|
|
636
|
+
this.onWidgetEntryReceived(h);
|
|
636
637
|
}), this.events.subscribe(
|
|
637
638
|
"provider:open-contact-method",
|
|
638
|
-
(r,
|
|
639
|
-
const y = yield this.httpClient.showContactMethodAction(
|
|
640
|
-
y && (
|
|
639
|
+
(r, h) => u(this, null, function* () {
|
|
640
|
+
const y = yield this.httpClient.showContactMethodAction(h);
|
|
641
|
+
y && (h.contactMethod.title && this.printUserMessage(h.contactMethod.title), this.onMessagesReceived(y));
|
|
641
642
|
})
|
|
642
643
|
);
|
|
643
644
|
}
|
|
@@ -649,16 +650,16 @@ class dt {
|
|
|
649
650
|
name: e.agent.name,
|
|
650
651
|
avatar: e.agent.avatar
|
|
651
652
|
});
|
|
652
|
-
const i = yield this.conversation.isRehydrated(),
|
|
653
|
+
const i = yield this.conversation.isRehydrated(), n = yield this.httpClient.start({
|
|
653
654
|
silent: ((c = this.conversation.options) == null ? void 0 : c.silent) || i
|
|
654
655
|
});
|
|
655
|
-
|
|
656
|
+
n && this.onMessagesReceived(n), t();
|
|
656
657
|
});
|
|
657
658
|
}
|
|
658
659
|
onMessagesReceived(t) {
|
|
659
660
|
return u(this, null, function* () {
|
|
660
661
|
this.groups = this.groups.concat(t), t.forEach((e) => {
|
|
661
|
-
const i = e.items.map((
|
|
662
|
+
const i = e.items.map((n) => n.message);
|
|
662
663
|
e.isUser ? e.writer = this.user.print(i) : e.writer = this.agent.print(i);
|
|
663
664
|
});
|
|
664
665
|
});
|
|
@@ -671,30 +672,30 @@ class dt {
|
|
|
671
672
|
{
|
|
672
673
|
if (typeof t == "string")
|
|
673
674
|
return;
|
|
674
|
-
const i = this.groups.find((
|
|
675
|
+
const i = this.groups.find((n) => {
|
|
675
676
|
var c;
|
|
676
|
-
return
|
|
677
|
+
return n.id === ((c = t.data) == null ? void 0 : c.groupId);
|
|
677
678
|
});
|
|
678
679
|
if (i) {
|
|
679
|
-
const
|
|
680
|
-
if (
|
|
681
|
-
const c =
|
|
682
|
-
i.meta.paging =
|
|
680
|
+
const n = yield this.httpClient.nextAction(i);
|
|
681
|
+
if (n) {
|
|
682
|
+
const c = n.items.map((r) => r.message);
|
|
683
|
+
i.meta.paging = n == null ? void 0 : n.meta.paging, i.writer.update(c);
|
|
683
684
|
}
|
|
684
685
|
}
|
|
685
686
|
}
|
|
686
687
|
break;
|
|
687
688
|
case "help":
|
|
688
689
|
{
|
|
689
|
-
const i = this.conversation.loading(),
|
|
690
|
-
i(),
|
|
690
|
+
const i = this.conversation.loading(), n = yield this.httpClient.helpAction();
|
|
691
|
+
i(), n && this.onMessagesReceived(n);
|
|
691
692
|
}
|
|
692
693
|
break;
|
|
693
694
|
default:
|
|
694
695
|
{
|
|
695
696
|
typeof t != "string" && t.label && this.printUserMessage(t.label);
|
|
696
|
-
const i = this.conversation.loading(),
|
|
697
|
-
|
|
697
|
+
const i = this.conversation.loading(), n = yield this.httpClient.defaultAction(e);
|
|
698
|
+
n && this.onMessagesReceived(n), i();
|
|
698
699
|
}
|
|
699
700
|
break;
|
|
700
701
|
}
|
|
@@ -737,47 +738,47 @@ class dt {
|
|
|
737
738
|
});
|
|
738
739
|
}
|
|
739
740
|
}
|
|
740
|
-
const ht = dt, gt = (
|
|
741
|
-
const t = yield X.getInstance(
|
|
741
|
+
const ht = dt, gt = (s) => u(void 0, null, function* () {
|
|
742
|
+
const t = yield X.getInstance(s);
|
|
742
743
|
B(
|
|
743
|
-
|
|
744
|
+
s,
|
|
744
745
|
p.ContactList,
|
|
745
|
-
import("./contact-method-list.
|
|
746
|
+
import("./contact-method-list.e0e6b881.js")
|
|
746
747
|
), B(
|
|
747
|
-
|
|
748
|
+
s,
|
|
748
749
|
p.ContactMethod,
|
|
749
|
-
import("./contact-method.
|
|
750
|
+
import("./contact-method.20d7a622.js")
|
|
750
751
|
), B(
|
|
751
|
-
|
|
752
|
+
s,
|
|
752
753
|
p.NotificationList,
|
|
753
754
|
import("./notification-list.c3df3ee1.js")
|
|
754
755
|
), B(
|
|
755
|
-
|
|
756
|
+
s,
|
|
756
757
|
p.NoGoodAlternative,
|
|
757
758
|
import("./no-good-alternative.e5e48f22.js")
|
|
758
759
|
), B(
|
|
759
|
-
|
|
760
|
+
s,
|
|
760
761
|
p.FeedbackList,
|
|
761
762
|
import("./feedback-list.73d8aa69.js")
|
|
762
763
|
), t.registerProvider("ace-knowledge-bot", (e, i) => {
|
|
763
|
-
const
|
|
764
|
-
|
|
764
|
+
const n = new ht(s, e, i);
|
|
765
|
+
n.initialize();
|
|
765
766
|
const c = [];
|
|
766
767
|
return c.push(
|
|
767
|
-
i.actions.watch("conversation.user-submit", (r,
|
|
768
|
-
|
|
768
|
+
i.actions.watch("conversation.user-submit", (r, h) => {
|
|
769
|
+
n.onMessageSend(r.text);
|
|
769
770
|
})
|
|
770
771
|
), c.push(
|
|
771
|
-
i.actions.watch("conversation.action", (r,
|
|
772
|
+
i.actions.watch("conversation.action", (r, h) => (n.onInput(r), h(r)))
|
|
772
773
|
), c.push(
|
|
773
774
|
i.actions.create("evaluate", (r) => {
|
|
774
|
-
const { events:
|
|
775
|
-
|
|
775
|
+
const { events: h } = s.get("$widget");
|
|
776
|
+
h.dispatch("bot-provider:evaluate", r);
|
|
776
777
|
})
|
|
777
778
|
), c.push(
|
|
778
779
|
i.actions.create("submit", (r) => {
|
|
779
|
-
const { events:
|
|
780
|
-
|
|
780
|
+
const { events: h } = s.get("$widget");
|
|
781
|
+
h.dispatch("bot-provider:form-submitted", r);
|
|
781
782
|
})
|
|
782
783
|
), () => {
|
|
783
784
|
c.forEach((r) => {
|
|
@@ -788,6 +789,6 @@ const ht = dt, gt = (n) => u(void 0, null, function* () {
|
|
|
788
789
|
}), yt = gt;
|
|
789
790
|
export {
|
|
790
791
|
yt as K,
|
|
791
|
-
|
|
792
|
+
nt as u
|
|
792
793
|
};
|
|
793
|
-
//# sourceMappingURL=index.
|
|
794
|
+
//# sourceMappingURL=index.4cc04b4e.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.4cc04b4e.js","sources":["../src/types.ts","../src/utils.ts","../src/entry-handler.ts","../src/http-client.ts","../src/store.ts","../src/provider.ts","../src/plugin.ts"],"sourcesContent":["import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\n\nexport enum CustomMessageTypes {\n ContactMethod = 'ace-knowledge-bot-contact-method',\n ContactList = 'ace-knowledge-bot-contact-list',\n FeedbackList = 'ace-knowledge-bot-feedback-list',\n NotificationList = 'ace-knowledge-bot-notification-list',\n NoGoodAlternative = 'ace-knowledge-bot-no-good-alternative',\n}\n\nexport type LooseObject = { [key: string]: any };\n\nexport interface ActionItem {\n label: string;\n actionKey: string;\n data?: any;\n description?: string;\n}\n\nexport interface MessageGroup {\n id: string;\n isUser: boolean;\n items: MessageGroupItem[];\n writer?: any;\n meta: { [key: string]: any };\n}\n\nexport interface MessageGroupItem {\n id: string;\n groupId: string;\n isUser: boolean;\n message: [ConversationMessageListItemType | CustomMessageTypes, any];\n}\n\nexport interface ClientEnvelope {\n command?: LooseObject;\n action?: {\n key: string;\n content: any;\n };\n globalState?: LooseObject;\n localState?: LooseObject;\n clientId?: string;\n funnel?: string;\n}\n\nexport interface ServerEnvelope {\n clientId?: string | undefined;\n entries: ServerEntry[];\n globalState?: GlobalState;\n resolveCommand?: string;\n clientEnvelope?: ClientEnvelope;\n}\n\nexport interface GlobalState {\n completedInteractionsCount: number;\n lastQuestion?: string;\n lastBotGuide: number;\n lastGuideTitle?: string;\n site: string;\n invincibleParameters: object;\n}\n\nexport interface ServerEntry {\n id: string;\n type: string;\n content: any;\n actions: { [key: string]: any };\n tags: string[];\n relation?: string;\n timestamp: string;\n localState?: { [key: string]: any };\n}\n\nexport interface ListContent {\n header?: string;\n actions: ActionItem[];\n contactMethodIds?: string[];\n entryId: string;\n groupId: string;\n}\n","import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';\nimport { Symbol } from '@telia-ace/knowledge-widget-ui';\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\nimport { FormBuilder, submitButton } from '@telia-ace/widget-forms';\nimport { uuid } from '@telia-ace/widget-utilities';\nimport { Container } from '@webprovisions/platform';\nimport { CustomMessageTypes, MessageGroup, MessageGroupItem, ServerEntry } from './types';\n\nconst convertLegacySymbol = (symbol?: { type: string; content: string }): Symbol | undefined => {\n if (symbol) {\n const { type, content } = symbol;\n if (type && content) {\n return { type, content };\n }\n }\n};\n\nexport const createGroup = ({\n isUser,\n items = [],\n meta = {},\n}: {\n isUser: boolean;\n items?: Partial<MessageGroupItem>[];\n meta?: MessageGroup['meta'];\n}) => {\n const groupId = uuid();\n\n const group = {\n id: groupId,\n isUser,\n items: items.map((i) => {\n return {\n id: i.id || uuid(),\n isUser: isUser,\n groupId: groupId,\n message: i.message || [],\n };\n }),\n meta,\n } as MessageGroup;\n\n return group;\n};\n\nexport const contactMethodFromLegacy = (\n {\n id,\n title,\n defaultIcon,\n exits: [exit],\n exitType,\n confirmationText,\n expandFormAutomatically,\n form,\n description,\n }: any,\n options: {\n validation?: any;\n guideId?: string;\n } = {}\n): any => {\n const { adapter } = exit || { Adapter: {} };\n const { clientName = '', settings: adapterSettings = {}, customClientName = '' } = adapter;\n const { validation } = options;\n\n const settings: any = {\n id: id.toString(),\n title: title,\n description: description,\n symbol: convertLegacySymbol(defaultIcon),\n clientName: clientName === 'custom.adapter' ? customClientName : clientName,\n expanded: true,\n inline: true,\n body: {},\n };\n\n if (clientName.indexOf('phone') > -1 || clientName.indexOf('freetext') > -1) {\n const { displayTextBeforeClick, textBeforeClick } = adapterSettings;\n if (displayTextBeforeClick === 'true') {\n settings.expanded = false;\n settings.title = textBeforeClick;\n }\n\n if (clientName.indexOf('phone.text') > -1) {\n settings.body.phoneNumber = adapterSettings.phoneNumber;\n } else {\n settings.body.freetext = adapterSettings.freetext;\n }\n }\n\n if (\n clientName.indexOf('chat.popup') > -1 ||\n clientName.indexOf('link') > -1 ||\n (clientName === 'custom.adapter' && exitType === 'custom')\n ) {\n settings.body = adapterSettings;\n settings.body.confirmationFallback = confirmationText;\n }\n\n if (clientName.indexOf('ace') > -1) {\n settings.body = adapterSettings;\n }\n\n if (form && form.hasValueComponents) {\n if (validation) {\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form, validation).get();\n } else {\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form).get();\n }\n if (!expandFormAutomatically) {\n settings.expanded = settings.inline = false;\n }\n\n settings.body = updateForm(settings, { submit: 'Submit' });\n }\n\n if (options.guideId) {\n settings.body.guideId = options.guideId;\n }\n\n return settings;\n};\n\nexport const getListType = (entry: ServerEntry) => {\n const { localState: state } = entry;\n\n if (entry.tags.includes('category') && entry.tags.includes('contact')) {\n return ConversationMessageListItemType.ItemList;\n }\n\n if (entry.tags.includes('suggestion')) {\n return ConversationMessageListItemType.LinkList;\n }\n\n if (state?.$type === 'Humany.Matching.Bots.Conversations.GuideListState, Humany.Matching') {\n return ConversationMessageListItemType.LinkList;\n } else if (\n state?.$type ===\n 'Humany.Matching.Bots.Conversations.States.GuideFeedbackState, Humany.Matching'\n ) {\n return CustomMessageTypes.FeedbackList;\n } else if (\n state?.$type === 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\n ) {\n return CustomMessageTypes.ContactList;\n } else return ConversationMessageListItemType.ButtonList;\n};\n\nexport const getKnowledgeBotEndpoint = (\n container: Container,\n component: any /*: ComponentNodeController */\n) => {\n const { knowledgeBotEndpoint } = component.properties();\n\n if (knowledgeBotEndpoint) {\n return `${knowledgeBotEndpoint}/conversations`;\n }\n\n const { data } = container.get('$settings');\n\n if (!data || !data.projection) throw new Error('Missing Knowledge Bot endpoint');\n\n return `${data.projection}/conversations`;\n};\n\nexport const updateForm = (\n contactMethod: ContactMethodType,\n {\n submit,\n errors,\n meta,\n }: { submit: string; errors?: { [key: string]: string }; meta?: { [key: string]: string } }\n): any => {\n if (contactMethod?.body?.form) {\n const { body } = contactMethod;\n const builder = new FormBuilder(body.form);\n\n if (!body.form.layout.submit) {\n builder.createComponent(submitButton(submit, 'submit'));\n }\n\n if (errors) {\n builder.setValidationErrors(errors);\n }\n\n if (meta) {\n (builder as any).setMeta(meta);\n }\n\n return {\n ...body,\n form: builder.get(),\n };\n }\n return contactMethod?.body || {};\n};\n\n// since we interacting with knowledge through the /conversations endpoint\n// and not using the service client we sync parameters here\nexport const setServiceClientParameter = async (\n container: Container,\n key: string,\n value: string\n) => {\n const dataClient = await container.getAsync('dataClient');\n const matchingClient = await dataClient.getClient();\n matchingClient.parameters.set(key, value);\n};\n","import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\nimport { uuid } from '@telia-ace/widget-utilities';\nimport { Container } from '@webprovisions/platform';\nimport {\n ActionItem,\n CustomMessageTypes,\n ListContent,\n MessageGroup,\n MessageGroupItem,\n ServerEntry,\n} from './types';\nimport {\n contactMethodFromLegacy,\n createGroup,\n getListType,\n setServiceClientParameter,\n} from './utils';\n\nconst createGroupItem = ({\n messageId,\n message,\n group,\n}: {\n messageId: string;\n message: MessageGroupItem['message'];\n group: MessageGroup;\n}) => {\n return {\n id: messageId,\n message,\n groupId: group.id,\n isUser: group.isUser,\n };\n};\n\nexport const processEntries = async (\n container: Container,\n entries: ServerEntry[],\n prevGroup?: MessageGroup\n) => {\n const createListContent = (\n listType: string,\n entry: ServerEntry,\n groupId: string,\n listContent: ListContent = {\n actions: [],\n entryId: entry.id,\n groupId,\n }\n ) => {\n const contactMethodIds: string[] = [];\n\n listContent.actions = entry.content.items.map((i: any) => {\n const action = {\n label: i.title,\n actionKey: i.actionKey,\n symbol: !!i.symbol ? i.symbol : undefined,\n description: i.description || undefined,\n } as ActionItem;\n\n if (i.data) {\n const entryAction = entry.actions[i.actionKey];\n if (listType === CustomMessageTypes.ContactList) {\n contactMethodIds.push(i.data.id);\n action.data = contactMethodFromLegacy(i.data, {\n guideId: entryAction?.guideId?.toString(),\n });\n } else {\n action.data = i.data;\n }\n }\n return action;\n });\n\n if (listType === CustomMessageTypes.ContactList) {\n listContent.contactMethodIds = contactMethodIds;\n }\n\n return listContent;\n };\n\n const transform = async (\n entry: ServerEntry,\n group: MessageGroup,\n related: ServerEntry[] = [],\n prevGroup?: MessageGroup\n ) => {\n const messageId = uuid();\n\n if (entry.type !== 'List' && entry.tags.includes('guide') && entry.content.hints?.[0]?.id) {\n await setServiceClientParameter(container, 'LastGuideId', entry.content.hints[0].id);\n }\n\n switch (entry.type) {\n case 'List':\n {\n const { header, items, html } = entry.content;\n\n const result = [];\n\n let listContent = {\n actions: [],\n entryId: entry.id,\n groupId: group.id,\n } as ListContent;\n\n if (header) {\n listContent.header = header;\n }\n\n if (items?.length > 0) {\n const listType = getListType(entry);\n listContent = createListContent(listType, entry, group.id, listContent);\n\n // entry has related entries\n if (!!related.length) {\n const pagingEntry = related.find((e) => e.tags.includes('paging'));\n const fallbackEntry = related.find((e) => e.tags.includes('fallback'));\n\n if (pagingEntry?.content) {\n group.meta.paging = {\n actions: pagingEntry.actions,\n items: pagingEntry.content.items,\n localState: pagingEntry.localState,\n };\n pagingEntry.content.items.forEach((i: any) => {\n listContent.actions.push({\n label: i.title,\n actionKey: i.actionKey,\n data: {\n groupId: !!prevGroup ? prevGroup.id : group.id,\n },\n });\n });\n }\n\n if (fallbackEntry) {\n const fallbackAction = fallbackEntry.content.items.find(\n (i: any) => i.actionKey === 'help'\n );\n if (fallbackAction) {\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.Separator,\n undefined,\n ],\n group,\n })\n );\n result.push(\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.NoGoodAlternative,\n { body: fallbackAction.title },\n ],\n group,\n })\n );\n }\n }\n }\n\n result.unshift(\n createGroupItem({\n messageId,\n message: [listType, listContent],\n group,\n })\n );\n }\n\n if (html) {\n result.unshift(\n createGroupItem({\n messageId,\n message: [ConversationMessageListItemType.HTML, { body: html }],\n group,\n })\n );\n }\n\n return result;\n }\n break;\n case 'Text':\n {\n const result = [];\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n { body: entry.content.html },\n ],\n group,\n })\n );\n\n // embedded contact methods\n if (!!related.length) {\n const contactMethodListEntry = related.find(\n (e) =>\n e.type === 'List' &&\n e.localState?.$type ===\n 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\n );\n\n const dialogListEntry = related.find((e) => e.tags.includes('dialog'));\n const feedbackEntry = related.find((e) => e.tags.includes('feedback'));\n const contactMethodEntry = related.find(\n (e) => e.tags.includes('contact') && e.type === 'Contact'\n );\n\n if (contactMethodEntry) {\n result.push(\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.ContactMethod,\n {\n contactMethodId: contactMethodEntry.content.id,\n groupId: group.id,\n guideId: contactMethodEntry.content.guideId,\n },\n ],\n group,\n })\n );\n }\n\n if (dialogListEntry) {\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.ButtonList,\n {\n actions: dialogListEntry.content.items.map((i: any) => {\n return {\n label: i.title,\n actionKey: i.actionKey,\n };\n }),\n },\n ],\n group,\n })\n );\n }\n\n if (contactMethodListEntry) {\n const listContent = createListContent(\n CustomMessageTypes.ContactList,\n contactMethodListEntry,\n group.id\n );\n\n result.push(\n createGroupItem({\n messageId,\n message: [ConversationMessageListItemType.Separator, undefined],\n group,\n })\n );\n\n result.push(\n createGroupItem({\n messageId,\n message: [CustomMessageTypes.ContactList, listContent],\n group,\n })\n );\n }\n\n if (feedbackEntry) {\n if (feedbackEntry.content.html) {\n result.push(\n createGroupItem({\n messageId,\n group,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: feedbackEntry.content.html,\n },\n ],\n })\n );\n }\n result.push(\n createGroupItem({\n messageId,\n group,\n message: [\n CustomMessageTypes.FeedbackList,\n {\n actions: feedbackEntry.content.items.map((i: any) => {\n return {\n actionKey: i.actionKey,\n label: i.title,\n };\n }),\n },\n ],\n })\n );\n }\n }\n return result;\n }\n break;\n case 'Contact': {\n return [\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.ContactMethod,\n {\n contactMethodId: entry.content.id,\n groupId: group.id,\n guideId: entry.content.guideId,\n },\n ],\n group,\n }),\n ];\n }\n case 'CategorizedNoticeList': {\n const result = [\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.NotificationList,\n {\n id: entry.content.item.id.toString(),\n header: entry.content.item.title,\n items: entry.content.item.listNotices,\n symbol: entry.content.item.defaultIcon,\n },\n ],\n group,\n }),\n ];\n\n (entry.content.notices || []).forEach((notice: any) => {\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: notice.body,\n },\n ],\n group,\n })\n );\n });\n\n return result;\n }\n case 'footerNotice': {\n return [\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: entry.content.item.body,\n },\n ],\n group,\n }),\n ];\n }\n case 'Error': {\n return [\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: entry.content.message || 'Something went wrong.',\n },\n ],\n group,\n }),\n ];\n }\n\n default:\n return [];\n }\n };\n\n const splitEntry = (entry: ServerEntry): ServerEntry | ServerEntry[] => {\n if (['CategorizedNoticeList', 'NoticeList'].includes(entry.type)) {\n return (entry.content.items || []).reduce((acc: any, item: any) => {\n if (!entry.content.isInitialNotices) {\n return acc;\n }\n acc.push({\n ...entry,\n id: uuid(),\n type: item.type || entry.type,\n content: {\n $type: entry.content.$type,\n isInitialNotices: entry.content.isInitialNotices,\n notices: item.notices,\n item,\n },\n });\n return acc;\n }, []);\n }\n return entry;\n };\n\n // map of in which order the messages should be displayed\n // lower numbers will be displayed above higher\n const sortMap = new Map<string, number>([\n ['Text', 1],\n ['List', 2],\n ['Contact', 3],\n ['CategorizedNoticeList', 10],\n ]);\n\n const result: MessageGroup[] = [];\n const filteredEntries = entries\n .sort((item, other) => {\n // sort the entries based on it's types sort value\n const defaultSortValue = 20;\n\n var sortValue = sortMap.get(item.type) || defaultSortValue;\n var sortValueOther = sortMap.get(other.type) || defaultSortValue;\n return sortValue - sortValueOther;\n })\n .filter((entry) => !entry.relation) // remove any \"relation entries\"\n .reduce<ServerEntry[]>((acc, entry) => {\n // some entries needs to be splitted into seperate groups\n return acc.concat(splitEntry(entry));\n }, []);\n\n // we dont want to display this type of entry\n // as we dont support it, and it was not supported in v4 either\n const isNonVisibleRelatedEntry = (e: ServerEntry) => {\n return typeof e.actions['selector'] !== 'undefined';\n };\n\n for (const entry of filteredEntries) {\n const relatedEntries = entries.filter(\n (other) => other.relation === entry.id && !isNonVisibleRelatedEntry(other)\n );\n const group = createGroup({ isUser: false });\n\n const items = await transform(entry, group, relatedEntries, prevGroup);\n items.forEach((item) => {\n group.items.push(item);\n });\n\n if (group.items.length) {\n result.push(group);\n }\n }\n return result;\n};\n","import { uuid } from '@telia-ace/widget-utilities';\nimport { Container, EventManager } from '@webprovisions/platform';\nimport { processEntries } from './entry-handler';\nimport Store from './store';\nimport { ClientEnvelope, MessageGroup, ServerEntry, ServerEnvelope } from './types';\n\nclass HttpClient {\n private globalState: any;\n private localState: ServerEntry['localState'];\n private clientId: string;\n private entries: ServerEntry[];\n\n constructor(\n private endpoint: string,\n private events: EventManager,\n private store: Store,\n private container: Container\n ) {\n this.clientId = uuid();\n this.entries = [];\n }\n\n async start({ silent }: { silent: boolean }) {\n const storedGlobalState = await this.store.read('globalState');\n const storedLocalState = await this.store.read('localState');\n const storedEntries = await this.store.read('entries');\n\n // if there is state stored we need to set it\n this.globalState = storedGlobalState || this.globalState;\n this.localState = storedLocalState || this.localState;\n this.entries = storedEntries || this.entries;\n\n // dont create initial envelope if the client should just\n // set local and global state and then start silently\n if (silent) {\n return;\n }\n\n const envelope = this.createInitialEnvelope();\n const initialResponse = await this.postEnvelope(envelope);\n return initialResponse;\n }\n\n async sendMessage(message: string) {\n const envelope = {\n command: { phrase: message },\n globalState: this.globalState,\n clientId: this.clientId,\n };\n\n const result = await this.postEnvelope(envelope);\n return result;\n }\n\n async helpAction() {\n return this.postEnvelope({\n action: {\n key: 'help',\n content: {\n $type: 'Humany.Matching.Bots.Conversations.Actions.Help, Humany.Matching',\n },\n },\n globalState: this.globalState,\n clientId: this.clientId,\n });\n }\n\n async nextAction(group: MessageGroup) {\n const { paging } = group.meta;\n if (!paging.actions?.next) {\n return;\n }\n return this.postEnvelope(\n {\n action: {\n key: 'next',\n content: paging.actions.next,\n },\n localState: paging.localState,\n globalState: this.globalState,\n clientId: this.clientId,\n },\n group\n ).then((response) => {\n const listItemIndex = group.items.findIndex((item) => item.message[0] === 'link-list');\n if (listItemIndex === -1 || !response) {\n return group;\n }\n\n return {\n ...group,\n meta: {\n ...group.meta,\n ...response[0].meta,\n },\n items: [\n ...group.items.slice(0, listItemIndex),\n {\n ...group.items[listItemIndex],\n message: [\n response[0].items[0].message[0],\n {\n ...group.items[listItemIndex].message[1],\n ...response[0].items[0].message[1],\n },\n ],\n },\n ...group.items.slice(listItemIndex + 1),\n ],\n };\n });\n }\n\n async showContactMethodAction(data: {\n contactMethod: any;\n actionKey: string;\n entryId: string;\n }) {\n const entry = this.entries.find((e) => e.id === data.entryId);\n const actionItem = entry?.actions[data.actionKey];\n\n if (!actionItem) {\n return;\n }\n\n return this.postEnvelope({\n action: {\n key: data.actionKey,\n content: actionItem,\n },\n localState: entry.localState,\n globalState: this.globalState,\n clientId: this.clientId,\n });\n }\n\n async defaultAction(action: string) {\n const entry = this.getEntryOfAction(action);\n\n if (!entry) {\n return;\n }\n\n return this.postEnvelope({\n action: {\n key: action,\n content: entry.actions[action],\n },\n localState: entry.localState,\n globalState: this.globalState,\n clientId: this.clientId,\n });\n }\n\n private createInitialEnvelope(): ClientEnvelope {\n return {\n command: { site: this.endpoint },\n clientId: this.clientId,\n globalState: {},\n funnel: this.container.get('$widget').name,\n };\n }\n\n private async postEnvelope(envelope: ClientEnvelope, prevGroup?: MessageGroup) {\n try {\n const response = await fetch(this.endpoint, this.getHttpOptions(envelope));\n\n if (!response.ok) {\n throw response;\n }\n\n const data = await response.json();\n\n return this.handleResponse(data, prevGroup);\n } catch (error: any) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Something went wrong when posting the envelope.');\n }\n let message = 'Something went wrong';\n if (\n error.message === 'Failed to fetch' ||\n error.message === 'NetworkError when attempting to fetch resource.'\n ) {\n message = 'Lost connection... Please try again.';\n }\n return this.handleResponse({\n entries: [\n {\n id: uuid(),\n type: 'Error',\n timestamp: new Date().toISOString(),\n content: {\n message,\n },\n actions: {},\n tags: [],\n },\n ],\n });\n }\n }\n\n private async handleResponse(data: ServerEnvelope, prevGroup?: MessageGroup) {\n this.entries = this.entries.concat(data.entries);\n this.store.write(this.entries, 'entries');\n\n const widgetEntry = data.entries.find((e) => e.type === 'Widget');\n\n if (widgetEntry) {\n this.events.dispatch('provider:widget-entry', widgetEntry.content);\n }\n\n if (data.globalState) {\n this.globalState = data.globalState;\n this.store.write(data.globalState, 'globalState');\n }\n\n this.localState = data.entries.reduce<ServerEntry['localState']>((acc, entry) => {\n if (entry.localState) {\n return entry.localState;\n }\n return acc;\n }, undefined);\n this.store.write(this.localState, 'localState');\n\n const groups = await processEntries(this.container, data.entries, prevGroup);\n return groups;\n }\n\n private getHttpOptions(envelope: ClientEnvelope) {\n const fetchOptions = {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n };\n envelope.funnel = this.container.get('$widget').name;\n envelope.localState = envelope.localState || this.localState;\n return Object.assign({}, fetchOptions, {\n body: JSON.stringify(envelope),\n credentials: 'same-origin' as RequestCredentials,\n });\n }\n\n private getEntryOfAction(action: string) {\n return this.entries.find((entry) => !!entry.actions[action]);\n }\n}\n\nexport default HttpClient;\n","import { createStorageWriter, readStorage, StorageCategory } from '@telia-ace/widget-services';\nimport { Container } from '@webprovisions/platform';\nimport { GlobalState, LooseObject, ServerEntry } from './types';\n\ntype MetaData = {\n agent: {\n name: string;\n avatar?: string;\n };\n};\n\ntype StorageTypes = 'localState' | 'globalState' | 'entries' | 'meta';\n\nclass Store {\n private enabled = true; // set whether or not to store data\n private botProviderGlobalStateKey = 'bot-provider-global-state';\n private botProviderLocalStateKey = 'bot-provider-local-state';\n private botProviderEntriesKey = 'bot-provider-entries';\n private botProviderMetaStateKey = 'bot-provider-conversation-meta';\n\n constructor(private container: Container) {}\n\n private getKey(type: StorageTypes) {\n let key;\n switch (type) {\n case 'localState':\n key = this.botProviderLocalStateKey;\n break;\n case 'globalState':\n key = this.botProviderGlobalStateKey;\n break;\n case 'entries':\n key = this.botProviderEntriesKey;\n break;\n case 'meta':\n key = this.botProviderMetaStateKey;\n break;\n\n default:\n break;\n }\n return key;\n }\n\n async read(type: 'localState'): Promise<LooseObject | undefined>;\n async read(type: 'meta'): Promise<MetaData | undefined>;\n async read(type: 'entries'): Promise<ServerEntry[] | undefined>;\n async read(type: 'globalState'): Promise<GlobalState | undefined>;\n async read(type: StorageTypes): Promise<any | undefined> {\n const key = this.getKey(type);\n if (!this.enabled || !key) {\n return;\n }\n\n return readStorage(this.container, key);\n }\n\n async write(data: any, type: StorageTypes) {\n const key = this.getKey(type);\n if (!this.enabled || !key) {\n return;\n }\n\n const write = await createStorageWriter(this.container, key, StorageCategory.Necessary);\n write(data);\n }\n}\n\nexport default Store;\n","import { ComponentNodeController } from '@telia-ace/knowledge-widget-core';\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\nimport { createStorageWriter, StorageCategory } from '@telia-ace/widget-services';\nimport { uuid } from '@telia-ace/widget-utilities';\nimport { Container, EventManager, Widget } from '@webprovisions/platform';\nimport HttpClient from './http-client';\nimport Store from './store';\nimport { MessageGroup, ServerEntry } from './types';\nimport { createGroup, getKnowledgeBotEndpoint, setServiceClientParameter } from './utils';\n\nclass KnowledgeBotProvider {\n private agent: any;\n private user: any;\n private httpClient: HttpClient;\n private events: EventManager;\n private groups: MessageGroup[] = [];\n private store: Store;\n\n constructor(\n private container: Container,\n private conversation: any,\n component: ComponentNodeController\n ) {\n const { events } = this.container.get('$widget') as Widget;\n this.events = events;\n this.store = new Store(container);\n this.agent = conversation.createAgent({\n id: 'knowledge-bot-agent', // we need to specify an ID here to allow rehydration to work\n name: '',\n avatar: undefined,\n });\n this.user = conversation.user;\n const endpoint = getKnowledgeBotEndpoint(container, component);\n this.httpClient = new HttpClient(endpoint, events, this.store, this.container);\n\n this.events.subscribe('provider:widget-entry', (_event, data: ServerEntry['content']) => {\n this.onWidgetEntryReceived(data);\n });\n\n this.events.subscribe(\n 'provider:open-contact-method',\n async (_event, data: { contactMethod: any; entryId: string; actionKey: string }) => {\n const response = await this.httpClient.showContactMethodAction(data);\n\n if (response) {\n if (!!data.contactMethod.title) this.printUserMessage(data.contactMethod.title);\n this.onMessagesReceived(response);\n }\n }\n );\n }\n\n async initialize() {\n const loader = this.conversation.loading();\n\n const storedMeta = await this.store.read('meta');\n if (storedMeta?.agent) {\n this.agent.update({\n name: storedMeta.agent.name,\n avatar: storedMeta.agent.avatar,\n });\n }\n\n const rehydrated = await this.conversation.isRehydrated();\n\n const response = await this.httpClient.start({\n silent: this.conversation.options?.silent || rehydrated,\n });\n if (response) {\n this.onMessagesReceived(response);\n }\n\n loader();\n }\n\n async onMessagesReceived(groups: MessageGroup[]) {\n this.groups = this.groups.concat(groups);\n groups.forEach((group) => {\n const items = group.items.map((item) => item.message);\n if (group.isUser) {\n group.writer = this.user.print(items);\n } else {\n group.writer = this.agent.print(items);\n }\n });\n }\n\n async onInput(action: string | { [key: string]: any; actionKey: string; label?: string }) {\n const actionKey = typeof action === 'string' ? action : action.actionKey;\n\n switch (actionKey) {\n case 'next':\n {\n if (typeof action === 'string') {\n return;\n }\n const group = this.groups.find((other) => other.id === action.data?.groupId);\n\n if (group) {\n const response = await this.httpClient.nextAction(group);\n if (response) {\n const combined = response.items.map((item) => item.message);\n group.meta.paging = response?.meta.paging;\n group.writer.update(combined);\n }\n }\n }\n break;\n case 'help':\n {\n const loader = this.conversation.loading();\n\n const response = await this.httpClient.helpAction();\n loader();\n if (response) {\n this.onMessagesReceived(response);\n }\n }\n break;\n default:\n {\n if (typeof action !== 'string' && action.label) {\n this.printUserMessage(action.label);\n }\n const loader = this.conversation.loading();\n const response = await this.httpClient.defaultAction(actionKey);\n if (response) {\n this.onMessagesReceived(response);\n }\n loader();\n }\n break;\n }\n }\n\n private printUserMessage(message: string) {\n const group = createGroup({\n isUser: true,\n items: [\n {\n id: uuid(),\n isUser: true,\n message: [ConversationMessageListItemType.HTML, { body: message }],\n },\n ],\n });\n this.onMessagesReceived([group]);\n return group;\n }\n\n async onMessageSend(message: string) {\n const loader = this.conversation.loading();\n const response = await this.httpClient.sendMessage(message);\n\n await setServiceClientParameter(this.container, 'phrase', message);\n\n this.printUserMessage(message);\n\n if (response) {\n this.onMessagesReceived(response);\n }\n loader();\n }\n\n private async onWidgetEntryReceived(data: ServerEntry['content']) {\n if (data.agent) {\n const agentSettings = {\n name: data.agent.name,\n avatar: data.agent.avatar,\n };\n this.agent.update(agentSettings);\n const write = await createStorageWriter(\n this.container,\n 'bot-provider-conversation-meta',\n StorageCategory.Necessary\n );\n write({\n agent: agentSettings,\n });\n }\n }\n}\n\nexport default KnowledgeBotProvider;\n","import {\n ConversationPlatform,\n registerCustomMessageComponent,\n} from '@telia-ace/widget-conversation';\nimport { Container, Widget } from '@webprovisions/platform';\nimport KnowledgeBotProvider from './provider';\nimport { CustomMessageTypes } from './types';\n\nconst KnowledgeBotProviderPlugin = async (container: Container) => {\n const platform = await ConversationPlatform.getInstance(container);\n\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.ContactList,\n import('./ui/contact-method-list')\n );\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.ContactMethod,\n import('./ui/contact-method')\n );\n\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.NotificationList,\n import('./ui/notification-list')\n );\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.NoGoodAlternative,\n import('./ui/no-good-alternative')\n );\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.FeedbackList,\n import('./ui/feedback-list')\n );\n\n platform.registerProvider('ace-knowledge-bot', (conversation, component) => {\n const provider = new KnowledgeBotProvider(container, conversation, component);\n provider.initialize();\n\n const subscriptions: any[] = [];\n subscriptions.push(\n component.actions.watch('conversation.user-submit', (input, next) => {\n provider.onMessageSend(input.text);\n })\n );\n\n subscriptions.push(\n component.actions.watch('conversation.action', (input, next) => {\n provider.onInput(input);\n\n return next(input);\n })\n );\n\n subscriptions.push(\n component.actions.create('evaluate', (input) => {\n const { events } = container.get('$widget') as Widget;\n events.dispatch('bot-provider:evaluate', input);\n })\n );\n\n subscriptions.push(\n component.actions.create('submit', (input) => {\n const { events } = container.get('$widget') as Widget;\n events.dispatch('bot-provider:form-submitted', input);\n })\n );\n\n return () => {\n // cleaning up when provider is disposed\n subscriptions.forEach((unsubscribe) => {\n unsubscribe();\n });\n };\n });\n};\n\nexport default KnowledgeBotProviderPlugin;\n"],"names":["CustomMessageTypes","convertLegacySymbol","symbol","type","content","createGroup","isUser","items","meta","groupId","uuid","i","contactMethodFromLegacy","id","title","defaultIcon","exit","exitType","confirmationText","expandFormAutomatically","form","description","options","adapter","clientName","adapterSettings","customClientName","validation","settings","displayTextBeforeClick","textBeforeClick","FormBuilder","updateForm","getListType","entry","state","ConversationMessageListItemType","getKnowledgeBotEndpoint","container","component","knowledgeBotEndpoint","data","contactMethod","submit","errors","_a","body","builder","submitButton","__spreadProps","__spreadValues","setServiceClientParameter","key","value","__async","createGroupItem","messageId","message","group","processEntries","entries","prevGroup","createListContent","listType","listContent","contactMethodIds","action","entryAction","transform","_0","_1","_2","related","_b","header","html","result","pagingEntry","e","fallbackEntry","fallbackAction","contactMethodListEntry","dialogListEntry","feedbackEntry","contactMethodEntry","notice","splitEntry","acc","item","sortMap","filteredEntries","other","sortValue","sortValueOther","isNonVisibleRelatedEntry","relatedEntries","HttpClient","endpoint","events","store","__publicField","silent","storedGlobalState","storedLocalState","storedEntries","envelope","paging","response","listItemIndex","actionItem","error","widgetEntry","fetchOptions","HttpClient$1","Store","readStorage","createStorageWriter","StorageCategory","Store$1","KnowledgeBotProvider","conversation","_event","loader","storedMeta","rehydrated","groups","actionKey","combined","agentSettings","KnowledgeBotProvider$1","KnowledgeBotProviderPlugin","platform","ConversationPlatform","registerCustomMessageComponent","provider","subscriptions","input","next","unsubscribe","KnowledgeBotProviderPlugin$1"],"mappings":"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"}
|
package/dist/index.js
CHANGED
package/dist/types.d.ts
CHANGED
package/dist/utils.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare const contactMethodFromLegacy: ({ id, title, defaultIcon, exits:
|
|
|
13
13
|
validation?: any;
|
|
14
14
|
guideId?: string | undefined;
|
|
15
15
|
}) => any;
|
|
16
|
-
export declare const getListType: (entry: ServerEntry) => ConversationMessageListItemType.LinkList | ConversationMessageListItemType.ButtonList | CustomMessageTypes.ContactList | CustomMessageTypes.FeedbackList;
|
|
16
|
+
export declare const getListType: (entry: ServerEntry) => ConversationMessageListItemType.LinkList | ConversationMessageListItemType.ButtonList | ConversationMessageListItemType.ItemList | CustomMessageTypes.ContactList | CustomMessageTypes.FeedbackList;
|
|
17
17
|
export declare const getKnowledgeBotEndpoint: (container: Container, component: any) => string;
|
|
18
18
|
export declare const updateForm: (contactMethod: ContactMethodType, { submit, errors, meta, }: {
|
|
19
19
|
submit: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telia-ace/knowledge-widget-bot-provider",
|
|
3
|
-
"version": "0.0.21-next.
|
|
3
|
+
"version": "0.0.21-next.5",
|
|
4
4
|
"description": "Bot Provider Plugin ACE Knowledge Widgets.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"author": "Telia Company AB",
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
},
|
|
22
22
|
"sideEffects": false,
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@telia-ace/knowledge-data-client": "1.0.7-next.
|
|
25
|
-
"@telia-ace/knowledge-widget-adapters": "1.0.50-next.
|
|
26
|
-
"@telia-ace/knowledge-widget-ui": "1.0.46-next.
|
|
27
|
-
"@telia-ace/widget-conversation": "^1.0.38-next.
|
|
28
|
-
"@telia-ace/widget-forms": "^1.0.32-next.
|
|
29
|
-
"@telia-ace/widget-services": "^1.0.25-next.
|
|
30
|
-
"@telia-ace/widget-utilities": "^1.0.14-next.
|
|
24
|
+
"@telia-ace/knowledge-data-client": "1.0.7-next.5",
|
|
25
|
+
"@telia-ace/knowledge-widget-adapters": "1.0.50-next.5",
|
|
26
|
+
"@telia-ace/knowledge-widget-ui": "1.0.46-next.5",
|
|
27
|
+
"@telia-ace/widget-conversation": "^1.0.38-next.1",
|
|
28
|
+
"@telia-ace/widget-forms": "^1.0.32-next.1",
|
|
29
|
+
"@telia-ace/widget-services": "^1.0.25-next.1",
|
|
30
|
+
"@telia-ace/widget-utilities": "^1.0.14-next.1",
|
|
31
31
|
"@webprovisions/bootstrapping": "^1.0.12"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@emotion/react": "^11.10.6",
|
|
40
40
|
"@emotion/styled": "^11.10.6",
|
|
41
|
-
"@telia-ace/knowledge-widget-core": "1.0.40-next.
|
|
42
|
-
"@types/react": "^18.0.
|
|
41
|
+
"@telia-ace/knowledge-widget-core": "1.0.40-next.5",
|
|
42
|
+
"@types/react": "^18.0.37",
|
|
43
43
|
"@webprovisions/platform": "^1.1.2",
|
|
44
44
|
"react": "^18.2.0"
|
|
45
45
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.c8e4c7d2.js","sources":["../src/types.ts","../src/utils.ts","../src/entry-handler.ts","../src/http-client.ts","../src/store.ts","../src/provider.ts","../src/plugin.ts"],"sourcesContent":["import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\n\nexport enum CustomMessageTypes {\n ContactMethod = 'ace-knowledge-bot-contact-method',\n ContactList = 'ace-knowledge-bot-contact-list',\n FeedbackList = 'ace-knowledge-bot-feedback-list',\n NotificationList = 'ace-knowledge-bot-notification-list',\n NoGoodAlternative = 'ace-knowledge-bot-no-good-alternative',\n}\n\nexport type LooseObject = { [key: string]: any };\n\nexport interface ActionItem {\n label: string;\n actionKey: string;\n data?: any;\n}\n\nexport interface MessageGroup {\n id: string;\n isUser: boolean;\n items: MessageGroupItem[];\n writer?: any;\n meta: { [key: string]: any };\n}\n\nexport interface MessageGroupItem {\n id: string;\n groupId: string;\n isUser: boolean;\n message: [ConversationMessageListItemType | CustomMessageTypes, any];\n}\n\nexport interface ClientEnvelope {\n command?: LooseObject;\n action?: {\n key: string;\n content: any;\n };\n globalState?: LooseObject;\n localState?: LooseObject;\n clientId?: string;\n funnel?: string;\n}\n\nexport interface ServerEnvelope {\n clientId?: string | undefined;\n entries: ServerEntry[];\n globalState?: GlobalState;\n resolveCommand?: string;\n clientEnvelope?: ClientEnvelope;\n}\n\nexport interface GlobalState {\n completedInteractionsCount: number;\n lastQuestion?: string;\n lastBotGuide: number;\n lastGuideTitle?: string;\n site: string;\n invincibleParameters: object;\n}\n\nexport interface ServerEntry {\n id: string;\n type: string;\n content: any;\n actions: { [key: string]: any };\n tags: string[];\n relation?: string;\n timestamp: string;\n localState?: { [key: string]: any };\n}\n\nexport interface ListContent {\n header?: string;\n actions: ActionItem[];\n contactMethodIds?: string[];\n entryId: string;\n groupId: string;\n}\n","import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';\nimport { Symbol } from '@telia-ace/knowledge-widget-ui';\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\nimport { FormBuilder, submitButton } from '@telia-ace/widget-forms';\nimport { uuid } from '@telia-ace/widget-utilities';\nimport { Container } from '@webprovisions/platform';\nimport { CustomMessageTypes, MessageGroup, MessageGroupItem, ServerEntry } from './types';\n\nconst convertLegacySymbol = (symbol?: { type: string; content: string }): Symbol | undefined => {\n if (symbol) {\n const { type, content } = symbol;\n if (type && content) {\n return { type, content };\n }\n }\n};\n\nexport const createGroup = ({\n isUser,\n items = [],\n meta = {},\n}: {\n isUser: boolean;\n items?: Partial<MessageGroupItem>[];\n meta?: MessageGroup['meta'];\n}) => {\n const groupId = uuid();\n\n const group = {\n id: groupId,\n isUser,\n items: items.map((i) => {\n return {\n id: i.id || uuid(),\n isUser: isUser,\n groupId: groupId,\n message: i.message || [],\n };\n }),\n meta,\n } as MessageGroup;\n\n return group;\n};\n\nexport const contactMethodFromLegacy = (\n {\n id,\n title,\n defaultIcon,\n exits: [exit],\n exitType,\n confirmationText,\n expandFormAutomatically,\n form,\n description,\n }: any,\n options: {\n validation?: any;\n guideId?: string;\n } = {}\n): any => {\n const { adapter } = exit || { Adapter: {} };\n const { clientName = '', settings: adapterSettings = {}, customClientName = '' } = adapter;\n const { validation } = options;\n\n const settings: any = {\n id: id.toString(),\n title: title,\n description: description,\n symbol: convertLegacySymbol(defaultIcon),\n clientName: clientName === 'custom.adapter' ? customClientName : clientName,\n expanded: true,\n inline: true,\n body: {},\n };\n\n if (clientName.indexOf('phone') > -1 || clientName.indexOf('freetext') > -1) {\n const { displayTextBeforeClick, textBeforeClick } = adapterSettings;\n if (displayTextBeforeClick === 'true') {\n settings.expanded = false;\n settings.title = textBeforeClick;\n }\n\n if (clientName.indexOf('phone.text') > -1) {\n settings.body.phoneNumber = adapterSettings.phoneNumber;\n } else {\n settings.body.freetext = adapterSettings.freetext;\n }\n }\n\n if (\n clientName.indexOf('chat.popup') > -1 ||\n clientName.indexOf('link') > -1 ||\n (clientName === 'custom.adapter' && exitType === 'custom')\n ) {\n settings.body = adapterSettings;\n settings.body.confirmationFallback = confirmationText;\n }\n\n if (clientName.indexOf('ace') > -1) {\n settings.body = adapterSettings;\n }\n\n if (form && form.hasValueComponents) {\n if (validation) {\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form, validation).get();\n } else {\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form).get();\n }\n if (!expandFormAutomatically) {\n settings.expanded = settings.inline = false;\n }\n\n settings.body = updateForm(settings, { submit: 'Submit' });\n }\n\n if (options.guideId) {\n settings.body.guideId = options.guideId;\n }\n\n return settings;\n};\n\nexport const getListType = (entry: ServerEntry) => {\n const { localState: state } = entry;\n\n if (entry.tags.includes('suggestion')) {\n return ConversationMessageListItemType.LinkList;\n }\n\n if (state?.$type === 'Humany.Matching.Bots.Conversations.GuideListState, Humany.Matching') {\n return ConversationMessageListItemType.LinkList;\n } else if (\n state?.$type ===\n 'Humany.Matching.Bots.Conversations.States.GuideFeedbackState, Humany.Matching'\n ) {\n return CustomMessageTypes.FeedbackList;\n } else if (\n state?.$type === 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\n ) {\n return CustomMessageTypes.ContactList;\n } else return ConversationMessageListItemType.ButtonList;\n};\n\nexport const getKnowledgeBotEndpoint = (\n container: Container,\n component: any /*: ComponentNodeController */\n) => {\n const { knowledgeBotEndpoint } = component.properties();\n\n if (knowledgeBotEndpoint) {\n return `${knowledgeBotEndpoint}/conversations`;\n }\n\n const { data } = container.get('$settings');\n\n if (!data || !data.projection) throw new Error('Missing Knowledge Bot endpoint');\n\n return `${data.projection}/conversations`;\n};\n\nexport const updateForm = (\n contactMethod: ContactMethodType,\n {\n submit,\n errors,\n meta,\n }: { submit: string; errors?: { [key: string]: string }; meta?: { [key: string]: string } }\n): any => {\n if (contactMethod?.body?.form) {\n const { body } = contactMethod;\n const builder = new FormBuilder(body.form);\n\n if (!body.form.layout.submit) {\n builder.createComponent(submitButton(submit, 'submit'));\n }\n\n if (errors) {\n builder.setValidationErrors(errors);\n }\n\n if (meta) {\n (builder as any).setMeta(meta);\n }\n\n return {\n ...body,\n form: builder.get(),\n };\n }\n return contactMethod?.body || {};\n};\n\n// since we interacting with knowledge through the /conversations endpoint\n// and not using the service client we sync parameters here\nexport const setServiceClientParameter = async (\n container: Container,\n key: string,\n value: string\n) => {\n const dataClient = await container.getAsync('dataClient');\n const matchingClient = await dataClient.getClient();\n matchingClient.parameters.set(key, value);\n};\n","import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\nimport { uuid } from '@telia-ace/widget-utilities';\nimport { Container } from '@webprovisions/platform';\nimport {\n ActionItem,\n CustomMessageTypes,\n ListContent,\n MessageGroup,\n MessageGroupItem,\n ServerEntry,\n} from './types';\nimport {\n contactMethodFromLegacy,\n createGroup,\n getListType,\n setServiceClientParameter,\n} from './utils';\n\nconst createGroupItem = ({\n messageId,\n message,\n group,\n}: {\n messageId: string;\n message: MessageGroupItem['message'];\n group: MessageGroup;\n}) => {\n return {\n id: messageId,\n message,\n groupId: group.id,\n isUser: group.isUser,\n };\n};\n\nexport const processEntries = async (\n container: Container,\n entries: ServerEntry[],\n prevGroup?: MessageGroup\n) => {\n const createListContent = (\n listType: string,\n entry: ServerEntry,\n groupId: string,\n listContent: ListContent = {\n actions: [],\n entryId: entry.id,\n groupId,\n }\n ) => {\n const contactMethodIds: string[] = [];\n\n listContent.actions = entry.content.items.map((i: any) => {\n const action = {\n label: i.title,\n actionKey: i.actionKey,\n symbol: !!i.symbol ? i.symbol : undefined,\n } as ActionItem;\n\n if (i.data) {\n const entryAction = entry.actions[i.actionKey];\n if (listType === CustomMessageTypes.ContactList) {\n contactMethodIds.push(i.data.id);\n action.data = contactMethodFromLegacy(i.data, {\n guideId: entryAction?.guideId?.toString(),\n });\n } else {\n action.data = i.data;\n }\n }\n return action;\n });\n\n if (listType === CustomMessageTypes.ContactList) {\n listContent.contactMethodIds = contactMethodIds;\n }\n\n return listContent;\n };\n\n const transform = async (\n entry: ServerEntry,\n group: MessageGroup,\n related: ServerEntry[] = [],\n prevGroup?: MessageGroup\n ) => {\n const messageId = uuid();\n\n if (entry.type !== 'List' && entry.tags.includes('guide') && entry.content.hints?.[0]?.id) {\n await setServiceClientParameter(container, 'LastGuideId', entry.content.hints[0].id);\n }\n\n switch (entry.type) {\n case 'List':\n {\n const { header, items, html } = entry.content;\n\n const result = [];\n\n let listContent = {\n actions: [],\n entryId: entry.id,\n groupId: group.id,\n } as ListContent;\n\n if (header) {\n listContent.header = header;\n }\n\n if (items?.length > 0) {\n const listType = getListType(entry);\n listContent = createListContent(listType, entry, group.id, listContent);\n\n // entry has related entries\n if (!!related.length) {\n const pagingEntry = related.find((e) => e.tags.includes('paging'));\n const fallbackEntry = related.find((e) => e.tags.includes('fallback'));\n\n if (pagingEntry?.content) {\n group.meta.paging = {\n actions: pagingEntry.actions,\n items: pagingEntry.content.items,\n localState: pagingEntry.localState,\n };\n pagingEntry.content.items.forEach((i: any) => {\n listContent.actions.push({\n label: i.title,\n actionKey: i.actionKey,\n data: {\n groupId: !!prevGroup ? prevGroup.id : group.id,\n },\n });\n });\n }\n\n if (fallbackEntry) {\n const fallbackAction = fallbackEntry.content.items.find(\n (i: any) => i.actionKey === 'help'\n );\n if (fallbackAction) {\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.Separator,\n undefined,\n ],\n group,\n })\n );\n result.push(\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.NoGoodAlternative,\n { body: fallbackAction.title },\n ],\n group,\n })\n );\n }\n }\n }\n\n result.unshift(\n createGroupItem({\n messageId,\n message: [listType, listContent],\n group,\n })\n );\n }\n\n if (html) {\n result.unshift(\n createGroupItem({\n messageId,\n message: [ConversationMessageListItemType.HTML, { body: html }],\n group,\n })\n );\n }\n\n return result;\n }\n break;\n case 'Text':\n {\n const result = [];\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n { body: entry.content.html },\n ],\n group,\n })\n );\n\n // embedded contact methods\n if (!!related.length) {\n const contactMethodListEntry = related.find(\n (e) =>\n e.type === 'List' &&\n e.localState?.$type ===\n 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\n );\n\n const dialogListEntry = related.find((e) => e.tags.includes('dialog'));\n const feedbackEntry = related.find((e) => e.tags.includes('feedback'));\n const contactMethodEntry = related.find(\n (e) => e.tags.includes('contact') && e.type === 'Contact'\n );\n\n if (contactMethodEntry) {\n result.push(\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.ContactMethod,\n {\n contactMethodId: contactMethodEntry.content.id,\n groupId: group.id,\n guideId: contactMethodEntry.content.guideId,\n },\n ],\n group,\n })\n );\n }\n\n if (dialogListEntry) {\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.ButtonList,\n {\n actions: dialogListEntry.content.items.map((i: any) => {\n return {\n label: i.title,\n actionKey: i.actionKey,\n };\n }),\n },\n ],\n group,\n })\n );\n }\n\n if (contactMethodListEntry) {\n const listContent = createListContent(\n CustomMessageTypes.ContactList,\n contactMethodListEntry,\n group.id\n );\n\n result.push(\n createGroupItem({\n messageId,\n message: [ConversationMessageListItemType.Separator, undefined],\n group,\n })\n );\n\n result.push(\n createGroupItem({\n messageId,\n message: [CustomMessageTypes.ContactList, listContent],\n group,\n })\n );\n }\n\n if (feedbackEntry) {\n if (feedbackEntry.content.html) {\n result.push(\n createGroupItem({\n messageId,\n group,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: feedbackEntry.content.html,\n },\n ],\n })\n );\n }\n result.push(\n createGroupItem({\n messageId,\n group,\n message: [\n CustomMessageTypes.FeedbackList,\n {\n actions: feedbackEntry.content.items.map((i: any) => {\n return {\n actionKey: i.actionKey,\n label: i.title,\n };\n }),\n },\n ],\n })\n );\n }\n }\n return result;\n }\n break;\n case 'Contact': {\n return [\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.ContactMethod,\n {\n contactMethodId: entry.content.id,\n groupId: group.id,\n guideId: entry.content.guideId,\n },\n ],\n group,\n }),\n ];\n }\n case 'CategorizedNoticeList': {\n const result = [\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.NotificationList,\n {\n id: entry.content.item.id.toString(),\n header: entry.content.item.title,\n items: entry.content.item.listNotices,\n symbol: entry.content.item.defaultIcon,\n },\n ],\n group,\n }),\n ];\n\n (entry.content.notices || []).forEach((notice: any) => {\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: notice.body,\n },\n ],\n group,\n })\n );\n });\n\n return result;\n }\n case 'footerNotice': {\n return [\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: entry.content.item.body,\n },\n ],\n group,\n }),\n ];\n }\n case 'Error': {\n return [\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: entry.content.message || 'Something went wrong.',\n },\n ],\n group,\n }),\n ];\n }\n\n default:\n return [];\n }\n };\n\n const splitEntry = (entry: ServerEntry): ServerEntry | ServerEntry[] => {\n if (['CategorizedNoticeList', 'NoticeList'].includes(entry.type)) {\n return (entry.content.items || []).reduce((acc: any, item: any) => {\n if (!entry.content.isInitialNotices) {\n return acc;\n }\n acc.push({\n ...entry,\n id: uuid(),\n type: item.type || entry.type,\n content: {\n $type: entry.content.$type,\n isInitialNotices: entry.content.isInitialNotices,\n notices: item.notices,\n item,\n },\n });\n return acc;\n }, []);\n }\n return entry;\n };\n\n // map of in which order the messages should be displayed\n // lower numbers will be displayed above higher\n const sortMap = new Map<string, number>([\n ['Text', 1],\n ['List', 2],\n ['Contact', 3],\n ['CategorizedNoticeList', 10],\n ]);\n\n const result: MessageGroup[] = [];\n const filteredEntries = entries\n .sort((item, other) => {\n // sort the entries based on it's types sort value\n const defaultSortValue = 20;\n\n var sortValue = sortMap.get(item.type) || defaultSortValue;\n var sortValueOther = sortMap.get(other.type) || defaultSortValue;\n return sortValue - sortValueOther;\n })\n .filter((entry) => !entry.relation) // remove any \"relation entries\"\n .reduce<ServerEntry[]>((acc, entry) => {\n // some entries needs to be splitted into seperate groups\n return acc.concat(splitEntry(entry));\n }, []);\n\n // we dont want to display this type of entry\n // as we dont support it, and it was not supported in v4 either\n const isNonVisibleRelatedEntry = (e: ServerEntry) => {\n return typeof e.actions['selector'] !== 'undefined';\n };\n\n for (const entry of filteredEntries) {\n const relatedEntries = entries.filter(\n (other) => other.relation === entry.id && !isNonVisibleRelatedEntry(other)\n );\n const group = createGroup({ isUser: false });\n\n const items = await transform(entry, group, relatedEntries, prevGroup);\n items.forEach((item) => {\n group.items.push(item);\n });\n\n if (group.items.length) {\n result.push(group);\n }\n }\n return result;\n};\n","import { uuid } from '@telia-ace/widget-utilities';\nimport { Container, EventManager } from '@webprovisions/platform';\nimport { processEntries } from './entry-handler';\nimport Store from './store';\nimport { ClientEnvelope, MessageGroup, ServerEntry, ServerEnvelope } from './types';\n\nclass HttpClient {\n private globalState: any;\n private localState: ServerEntry['localState'];\n private clientId: string;\n private entries: ServerEntry[];\n\n constructor(\n private endpoint: string,\n private events: EventManager,\n private store: Store,\n private container: Container\n ) {\n this.clientId = uuid();\n this.entries = [];\n }\n\n async start({ silent }: { silent: boolean }) {\n const storedGlobalState = await this.store.read('globalState');\n const storedLocalState = await this.store.read('localState');\n const storedEntries = await this.store.read('entries');\n\n // if there is state stored we need to set it\n this.globalState = storedGlobalState || this.globalState;\n this.localState = storedLocalState || this.localState;\n this.entries = storedEntries || this.entries;\n\n // dont create initial envelope if the client should just\n // set local and global state and then start silently\n if (silent) {\n return;\n }\n\n const envelope = this.createInitialEnvelope();\n const initialResponse = await this.postEnvelope(envelope);\n return initialResponse;\n }\n\n async sendMessage(message: string) {\n const envelope = {\n command: { phrase: message },\n globalState: this.globalState,\n clientId: this.clientId,\n };\n\n const result = await this.postEnvelope(envelope);\n return result;\n }\n\n async helpAction() {\n return this.postEnvelope({\n action: {\n key: 'help',\n content: {\n $type: 'Humany.Matching.Bots.Conversations.Actions.Help, Humany.Matching',\n },\n },\n globalState: this.globalState,\n clientId: this.clientId,\n });\n }\n\n async nextAction(group: MessageGroup) {\n const { paging } = group.meta;\n if (!paging.actions?.next) {\n return;\n }\n return this.postEnvelope(\n {\n action: {\n key: 'next',\n content: paging.actions.next,\n },\n localState: paging.localState,\n globalState: this.globalState,\n clientId: this.clientId,\n },\n group\n ).then((response) => {\n const listItemIndex = group.items.findIndex((item) => item.message[0] === 'link-list');\n if (listItemIndex === -1 || !response) {\n return group;\n }\n\n return {\n ...group,\n meta: {\n ...group.meta,\n ...response[0].meta,\n },\n items: [\n ...group.items.slice(0, listItemIndex),\n {\n ...group.items[listItemIndex],\n message: [\n response[0].items[0].message[0],\n {\n ...group.items[listItemIndex].message[1],\n ...response[0].items[0].message[1],\n },\n ],\n },\n ...group.items.slice(listItemIndex + 1),\n ],\n };\n });\n }\n\n async showContactMethodAction(data: {\n contactMethod: any;\n actionKey: string;\n entryId: string;\n }) {\n const entry = this.entries.find((e) => e.id === data.entryId);\n const actionItem = entry?.actions[data.actionKey];\n\n if (!actionItem) {\n return;\n }\n\n return this.postEnvelope({\n action: {\n key: data.actionKey,\n content: actionItem,\n },\n localState: entry.localState,\n globalState: this.globalState,\n clientId: this.clientId,\n });\n }\n\n async defaultAction(action: string) {\n const entry = this.getEntryOfAction(action);\n\n if (!entry) {\n return;\n }\n\n return this.postEnvelope({\n action: {\n key: action,\n content: entry.actions[action],\n },\n localState: entry.localState,\n globalState: this.globalState,\n clientId: this.clientId,\n });\n }\n\n private createInitialEnvelope(): ClientEnvelope {\n return {\n command: { site: this.endpoint },\n clientId: this.clientId,\n globalState: {},\n funnel: this.container.get('$widget').name,\n };\n }\n\n private async postEnvelope(envelope: ClientEnvelope, prevGroup?: MessageGroup) {\n try {\n const response = await fetch(this.endpoint, this.getHttpOptions(envelope));\n\n if (!response.ok) {\n throw response;\n }\n\n const data = await response.json();\n\n return this.handleResponse(data, prevGroup);\n } catch (error: any) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Something went wrong when posting the envelope.');\n }\n let message = 'Something went wrong';\n if (\n error.message === 'Failed to fetch' ||\n error.message === 'NetworkError when attempting to fetch resource.'\n ) {\n message = 'Lost connection... Please try again.';\n }\n return this.handleResponse({\n entries: [\n {\n id: uuid(),\n type: 'Error',\n timestamp: new Date().toISOString(),\n content: {\n message,\n },\n actions: {},\n tags: [],\n },\n ],\n });\n }\n }\n\n private async handleResponse(data: ServerEnvelope, prevGroup?: MessageGroup) {\n this.entries = this.entries.concat(data.entries);\n this.store.write(this.entries, 'entries');\n\n const widgetEntry = data.entries.find((e) => e.type === 'Widget');\n\n if (widgetEntry) {\n this.events.dispatch('provider:widget-entry', widgetEntry.content);\n }\n\n if (data.globalState) {\n this.globalState = data.globalState;\n this.store.write(data.globalState, 'globalState');\n }\n\n this.localState = data.entries.reduce<ServerEntry['localState']>((acc, entry) => {\n if (entry.localState) {\n return entry.localState;\n }\n return acc;\n }, undefined);\n this.store.write(this.localState, 'localState');\n\n const groups = await processEntries(this.container, data.entries, prevGroup);\n return groups;\n }\n\n private getHttpOptions(envelope: ClientEnvelope) {\n const fetchOptions = {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n };\n envelope.funnel = this.container.get('$widget').name;\n envelope.localState = envelope.localState || this.localState;\n return Object.assign({}, fetchOptions, {\n body: JSON.stringify(envelope),\n credentials: 'same-origin' as RequestCredentials,\n });\n }\n\n private getEntryOfAction(action: string) {\n return this.entries.find((entry) => !!entry.actions[action]);\n }\n}\n\nexport default HttpClient;\n","import { createStorageWriter, readStorage, StorageCategory } from '@telia-ace/widget-services';\nimport { Container } from '@webprovisions/platform';\nimport { GlobalState, LooseObject, ServerEntry } from './types';\n\ntype MetaData = {\n agent: {\n name: string;\n avatar?: string;\n };\n};\n\ntype StorageTypes = 'localState' | 'globalState' | 'entries' | 'meta';\n\nclass Store {\n private enabled = true; // set whether or not to store data\n private botProviderGlobalStateKey = 'bot-provider-global-state';\n private botProviderLocalStateKey = 'bot-provider-local-state';\n private botProviderEntriesKey = 'bot-provider-entries';\n private botProviderMetaStateKey = 'bot-provider-conversation-meta';\n\n constructor(private container: Container) {}\n\n private getKey(type: StorageTypes) {\n let key;\n switch (type) {\n case 'localState':\n key = this.botProviderLocalStateKey;\n break;\n case 'globalState':\n key = this.botProviderGlobalStateKey;\n break;\n case 'entries':\n key = this.botProviderEntriesKey;\n break;\n case 'meta':\n key = this.botProviderMetaStateKey;\n break;\n\n default:\n break;\n }\n return key;\n }\n\n async read(type: 'localState'): Promise<LooseObject | undefined>;\n async read(type: 'meta'): Promise<MetaData | undefined>;\n async read(type: 'entries'): Promise<ServerEntry[] | undefined>;\n async read(type: 'globalState'): Promise<GlobalState | undefined>;\n async read(type: StorageTypes): Promise<any | undefined> {\n const key = this.getKey(type);\n if (!this.enabled || !key) {\n return;\n }\n\n return readStorage(this.container, key);\n }\n\n async write(data: any, type: StorageTypes) {\n const key = this.getKey(type);\n if (!this.enabled || !key) {\n return;\n }\n\n const write = await createStorageWriter(this.container, key, StorageCategory.Necessary);\n write(data);\n }\n}\n\nexport default Store;\n","import { ComponentNodeController } from '@telia-ace/knowledge-widget-core';\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\nimport { createStorageWriter, StorageCategory } from '@telia-ace/widget-services';\nimport { uuid } from '@telia-ace/widget-utilities';\nimport { Container, EventManager, Widget } from '@webprovisions/platform';\nimport HttpClient from './http-client';\nimport Store from './store';\nimport { MessageGroup, ServerEntry } from './types';\nimport { createGroup, getKnowledgeBotEndpoint, setServiceClientParameter } from './utils';\n\nclass KnowledgeBotProvider {\n private agent: any;\n private user: any;\n private httpClient: HttpClient;\n private events: EventManager;\n private groups: MessageGroup[] = [];\n private store: Store;\n\n constructor(\n private container: Container,\n private conversation: any,\n component: ComponentNodeController\n ) {\n const { events } = this.container.get('$widget') as Widget;\n this.events = events;\n this.store = new Store(container);\n this.agent = conversation.createAgent({\n id: 'knowledge-bot-agent', // we need to specify an ID here to allow rehydration to work\n name: '',\n avatar: undefined,\n });\n this.user = conversation.user;\n const endpoint = getKnowledgeBotEndpoint(container, component);\n this.httpClient = new HttpClient(endpoint, events, this.store, this.container);\n\n this.events.subscribe('provider:widget-entry', (_event, data: ServerEntry['content']) => {\n this.onWidgetEntryReceived(data);\n });\n\n this.events.subscribe(\n 'provider:open-contact-method',\n async (_event, data: { contactMethod: any; entryId: string; actionKey: string }) => {\n const response = await this.httpClient.showContactMethodAction(data);\n\n if (response) {\n if (!!data.contactMethod.title) this.printUserMessage(data.contactMethod.title);\n this.onMessagesReceived(response);\n }\n }\n );\n }\n\n async initialize() {\n const loader = this.conversation.loading();\n\n const storedMeta = await this.store.read('meta');\n if (storedMeta?.agent) {\n this.agent.update({\n name: storedMeta.agent.name,\n avatar: storedMeta.agent.avatar,\n });\n }\n\n const rehydrated = await this.conversation.isRehydrated();\n\n const response = await this.httpClient.start({\n silent: this.conversation.options?.silent || rehydrated,\n });\n if (response) {\n this.onMessagesReceived(response);\n }\n\n loader();\n }\n\n async onMessagesReceived(groups: MessageGroup[]) {\n this.groups = this.groups.concat(groups);\n groups.forEach((group) => {\n const items = group.items.map((item) => item.message);\n if (group.isUser) {\n group.writer = this.user.print(items);\n } else {\n group.writer = this.agent.print(items);\n }\n });\n }\n\n async onInput(action: string | { [key: string]: any; actionKey: string; label?: string }) {\n const actionKey = typeof action === 'string' ? action : action.actionKey;\n\n switch (actionKey) {\n case 'next':\n {\n if (typeof action === 'string') {\n return;\n }\n const group = this.groups.find((other) => other.id === action.data?.groupId);\n\n if (group) {\n const response = await this.httpClient.nextAction(group);\n if (response) {\n const combined = response.items.map((item) => item.message);\n group.meta.paging = response?.meta.paging;\n group.writer.update(combined);\n }\n }\n }\n break;\n case 'help':\n {\n const loader = this.conversation.loading();\n\n const response = await this.httpClient.helpAction();\n loader();\n if (response) {\n this.onMessagesReceived(response);\n }\n }\n break;\n default:\n {\n if (typeof action !== 'string' && action.label) {\n this.printUserMessage(action.label);\n }\n const loader = this.conversation.loading();\n const response = await this.httpClient.defaultAction(actionKey);\n if (response) {\n this.onMessagesReceived(response);\n }\n loader();\n }\n break;\n }\n }\n\n private printUserMessage(message: string) {\n const group = createGroup({\n isUser: true,\n items: [\n {\n id: uuid(),\n isUser: true,\n message: [ConversationMessageListItemType.HTML, { body: message }],\n },\n ],\n });\n this.onMessagesReceived([group]);\n return group;\n }\n\n async onMessageSend(message: string) {\n const loader = this.conversation.loading();\n const response = await this.httpClient.sendMessage(message);\n\n await setServiceClientParameter(this.container, 'phrase', message);\n\n this.printUserMessage(message);\n\n if (response) {\n this.onMessagesReceived(response);\n }\n loader();\n }\n\n private async onWidgetEntryReceived(data: ServerEntry['content']) {\n if (data.agent) {\n const agentSettings = {\n name: data.agent.name,\n avatar: data.agent.avatar,\n };\n this.agent.update(agentSettings);\n const write = await createStorageWriter(\n this.container,\n 'bot-provider-conversation-meta',\n StorageCategory.Necessary\n );\n write({\n agent: agentSettings,\n });\n }\n }\n}\n\nexport default KnowledgeBotProvider;\n","import {\n ConversationPlatform,\n registerCustomMessageComponent,\n} from '@telia-ace/widget-conversation';\nimport { Container, Widget } from '@webprovisions/platform';\nimport KnowledgeBotProvider from './provider';\nimport { CustomMessageTypes } from './types';\n\nconst KnowledgeBotProviderPlugin = async (container: Container) => {\n const platform = await ConversationPlatform.getInstance(container);\n\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.ContactList,\n import('./ui/contact-method-list')\n );\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.ContactMethod,\n import('./ui/contact-method')\n );\n\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.NotificationList,\n import('./ui/notification-list')\n );\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.NoGoodAlternative,\n import('./ui/no-good-alternative')\n );\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.FeedbackList,\n import('./ui/feedback-list')\n );\n\n platform.registerProvider('ace-knowledge-bot', (conversation, component) => {\n const provider = new KnowledgeBotProvider(container, conversation, component);\n provider.initialize();\n\n const subscriptions: any[] = [];\n subscriptions.push(\n component.actions.watch('conversation.user-submit', (input, next) => {\n provider.onMessageSend(input.text);\n })\n );\n\n subscriptions.push(\n component.actions.watch('conversation.action', (input, next) => {\n provider.onInput(input);\n\n return next(input);\n })\n );\n\n subscriptions.push(\n component.actions.create('evaluate', (input) => {\n const { events } = container.get('$widget') as Widget;\n events.dispatch('bot-provider:evaluate', input);\n })\n );\n\n subscriptions.push(\n component.actions.create('submit', (input) => {\n const { events } = container.get('$widget') as Widget;\n events.dispatch('bot-provider:form-submitted', input);\n })\n );\n\n return () => {\n // cleaning up when provider is disposed\n subscriptions.forEach((unsubscribe) => {\n unsubscribe();\n });\n };\n });\n};\n\nexport default KnowledgeBotProviderPlugin;\n"],"names":["CustomMessageTypes","convertLegacySymbol","symbol","type","content","createGroup","isUser","items","meta","groupId","uuid","i","contactMethodFromLegacy","id","title","defaultIcon","exit","exitType","confirmationText","expandFormAutomatically","form","description","options","adapter","clientName","adapterSettings","customClientName","validation","settings","displayTextBeforeClick","textBeforeClick","FormBuilder","updateForm","getListType","entry","state","ConversationMessageListItemType","getKnowledgeBotEndpoint","container","component","knowledgeBotEndpoint","data","contactMethod","submit","errors","_a","body","builder","submitButton","__spreadProps","__spreadValues","setServiceClientParameter","key","value","__async","createGroupItem","messageId","message","group","processEntries","entries","prevGroup","createListContent","listType","listContent","contactMethodIds","action","entryAction","transform","_0","_1","_2","related","_b","header","html","result","pagingEntry","e","fallbackEntry","fallbackAction","contactMethodListEntry","dialogListEntry","feedbackEntry","contactMethodEntry","notice","splitEntry","acc","item","sortMap","filteredEntries","other","sortValue","sortValueOther","isNonVisibleRelatedEntry","relatedEntries","HttpClient","endpoint","events","store","__publicField","silent","storedGlobalState","storedLocalState","storedEntries","envelope","paging","response","listItemIndex","actionItem","error","widgetEntry","fetchOptions","HttpClient$1","Store","readStorage","createStorageWriter","StorageCategory","Store$1","KnowledgeBotProvider","conversation","_event","loader","storedMeta","rehydrated","groups","actionKey","combined","agentSettings","KnowledgeBotProvider$1","KnowledgeBotProviderPlugin","platform","ConversationPlatform","registerCustomMessageComponent","provider","subscriptions","input","next","unsubscribe","KnowledgeBotProviderPlugin$1"],"mappings":"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"}
|