@telia-ace/knowledge-widget-bot-provider 0.0.20-next.3 → 0.0.20-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.6e5a7c28.js → contact-method-list.189ed807.js} +3 -3
- package/dist/{contact-method-list.6e5a7c28.js.map → contact-method-list.189ed807.js.map} +1 -1
- package/dist/{contact-method.00113ea4.js → contact-method.190ef5ed.js} +10 -6
- package/dist/contact-method.190ef5ed.js.map +1 -0
- package/dist/{index.0f04f568.js → index.c8e4c7d2.js} +4 -4
- package/dist/index.c8e4c7d2.js.map +1 -0
- package/dist/index.js +1 -1
- package/package.json +10 -10
- package/dist/contact-method.00113ea4.js.map +0 -1
- package/dist/index.0f04f568.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.190ef5ed.js";
|
|
34
34
|
import "@telia-ace/knowledge-data-client";
|
|
35
35
|
import "@telia-ace/widget-forms";
|
|
36
|
-
import "./index.
|
|
36
|
+
import "./index.c8e4c7d2.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.189ed807.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-method-list.
|
|
1
|
+
{"version":3,"file":"contact-method-list.189ed807.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.c8e4c7d2.js";
|
|
36
36
|
import "@telia-ace/widget-conversation";
|
|
37
37
|
import "@telia-ace/widget-services";
|
|
38
38
|
import "@telia-ace/widget-utilities";
|
|
@@ -83,10 +83,14 @@ const mt = ({ contactMethodId: e, guideId: t, groupId: r, className: h }) => {
|
|
|
83
83
|
}, [c, o, d, u]);
|
|
84
84
|
const w = U(
|
|
85
85
|
(l) => p(void 0, null, function* () {
|
|
86
|
-
const f = yield (yield j.getInstance(c)).fetch(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
86
|
+
const f = yield (yield j.getInstance(c)).fetch(
|
|
87
|
+
q.ContactMethod,
|
|
88
|
+
{
|
|
89
|
+
contactMethodId: l,
|
|
90
|
+
guideId: t
|
|
91
|
+
},
|
|
92
|
+
{ noCache: !0 }
|
|
93
|
+
), C = A(f, {
|
|
90
94
|
submit: "Submit",
|
|
91
95
|
errors: {},
|
|
92
96
|
meta: { groupId: r }
|
|
@@ -129,4 +133,4 @@ const mt = ({ contactMethodId: e, guideId: t, groupId: r, className: h }) => {
|
|
|
129
133
|
export {
|
|
130
134
|
mt as default
|
|
131
135
|
};
|
|
132
|
-
//# sourceMappingURL=contact-method.
|
|
136
|
+
//# sourceMappingURL=contact-method.190ef5ed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-method.190ef5ed.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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,MAAMA,KAAiC,CAAC,EAAE,iBAAAC,GAAiB,SAAAC,GAAS,SAAAC,GAAS,WAAAC,QAAgB;;AACzF,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAc,GAClDC,IAAYC,KACZC,IAAWC,KACXC,IAAaC,EAAgB,EAAI,GACjCC,IAAsBC;AAE5B,EAAAC,EAAU,MAAM;AACZ,UAAM,EAAE,QAAAC,EAAW,IAAAT,EAAU,IAAI,SAAS,GAEpCU,IAAcD,EAAO,UAAU,+BAA+B,CAAOE,GAAGC,MAASC,EAAA;;AAE/E,YAAAC,IAAAF,EAAK,KAAK,SAAV,gBAAAE,EAAgB,aAAYnB,KAAWiB,EAAK,OAAOf,EAAc;AACjE;AAGJ,MAAIS,MACKM,EAAK,KAAK,SACNA,EAAA,KAAK,OAAO,KAGhBA,EAAA,KAAK,KAAK,eAAeN;AAGlC,YAAMS,IAAY,MAAMf,EAAU,SAAS,gBAAgB,GAErDgB,IAAgBC,EAAAC,EAAA,IACfrB,IADe;AAAA,QAElB,MAAMoB,EAAAC,EAAA,IACCrB,EAAc,OADf;AAAA,UAEF,MAAMe,EAAK;AAAA,QACf;AAAA,MAAA,IAGE,EAAE,QAAAO,GAAQ,OAAAC,GAAO,YAAAC,EAAA,IAAe,MAAMN,EAAS,SAASC,CAAa;AAE3E,UAAI,CAACI,GAAO;AACR,cAAME,IAAU,IAAIC,EAAY1B,EAAc,KAAK,IAAI;AACvD,QAAAC,EAAiB,MAAS,GAE1BwB,EAAQ,oBAAoBH,CAAM,GAElCH,EAAc,OAAOC,EAAAC,EAAA,IACdF,EAAc,OADA;AAAA,UAEjB,MAAMM,EAAQ,IAAI;AAAA,QAAA,IAGLxB,EAAAoB,EAAA,IAAKF,EAAe;AACrC;AAAA,MACJ;AAEA,YAAMQ,IAAS,MAAMT,EAAS,OAAOC,CAAa;AAElD,MAAAA,EAAc,eAAeQ,GAC7B1B,EAAiBkB,CAAa;AAAA,IAAA,EACjC,GAEKS,IAAsBhB,EAAO,UAAU,yBAAyB,CAAOE,GAAGC,MAASC,EAAA;AACjF,UAAAD,EAAK,MAAMnB;AACX;AAKJ,YAAMiC,IAAc,OAFF,MAAM1B,EAAU,SAAS,gBAAgB,GAExB,SAASH,CAAa;AAEzD,UAAImB,IAAgBC,EAAAC,EAAA,IACbrB,IADa;AAAA,QAEhB,MAAMoB,EAAAC,EAAA,IACCrB,EAAc,OADf;AAAA,UAEF,MAAM6B;AAAA,QACV;AAAA,MAAA;AAGE,YAAAC,IAAcC,EAAWZ,GAAe;AAAA,QAC1C,QAAQ;AAAA,QACR,QAAQ,CAAC;AAAA,QACT,MAAM,EAAE,SAAArB,EAAQ;AAAA,MAAA,CACnB;AAEe,MAAAqB,IAAAC,EAAAC,EAAA,IACTF,IADS;AAAA,QAEZ,MAAMW;AAAA,MAAA,IAGV7B,EAAiBkB,CAAa;AAAA,IAAA,EACjC;AAED,WAAO,MAAM;AACG,MAAAN,KACQe;IAAA;AAAA,KAEzB,CAACzB,GAAWH,GAAeC,GAAkBQ,CAAmB,CAAC;AAEpE,QAAMuB,IAAqBC;AAAA,IACvB,CAAOC,MAAelB,EAAA;AAGZ,YAAAmB,IAAK,OAFQ,MAAMC,EAAW,YAAYjC,CAAS,GAE7B;AAAA,QACxBkC,EAAS;AAAA,QACT;AAAA,UACI,iBAAiBH;AAAA,UACjB,SAAArC;AAAA,QACJ;AAAA,QACA,EAAE,SAAS,GAAK;AAAA,MAAA,GAGdyC,IAAOP,EAAWI,GAAI;AAAA,QACxB,QAAQ;AAAA,QACR,QAAQ,CAAC;AAAA,QACT,MAAM,EAAE,SAAArC,EAAQ;AAAA,MAAA,CACnB;AAIG,UAHJqC,EAAG,OAAOG,GACVH,EAAG,KAAK,UAAUtC,GAEd,CAACU,EAAW;AACL,eAAA;AAEX,MAAAN,EAAiBkC,CAAE;AAAA,IACvB;AAAA,IACA,CAAC5B,CAAU;AAAA,EAAA;AAUf,SAPAI,EAAU,OACNqB,EAAmBpC,CAAe,GAC3B,MAAM;AACT,IAAAW,EAAW,UAAU;AAAA,EAAA,IAE1B,CAACX,GAAiBoC,CAAkB,CAAC,GAEnChC,IAID,gBAAAuC,EAAA;AAAA,IAACC;AAAA,IAAApB,EAAAC,EAAA,IACOrB,IADP;AAAA,MAEG,MAAMoB,EAAAC,EAAA,IACCrB,EAAc,OADf;AAAA,QAEF,MAAMA,EAAc,KAAK,OACnBoB,EAAAC,EAAA,IACOrB,EAAc,KAAK,OAD1B;AAAA,UAEI,OAAMiB,IAAAjB,EAAc,KAAK,SAAnB,gBAAAiB,EAAyB;AAAA,UAC/B,QAAQI,EAAA,IAAKrB,EAAc,KAAK,KAAK;AAAA,UACrC,OAAMyC,IAAAzC,EAAc,KAAK,SAAnB,gBAAAyC,EAAyB;AAAA,UAC/B,SAAQC,IAAA1C,EAAc,KAAK,SAAnB,gBAAA0C,EAAyB;AAAA,QAErC,KAAA;AAAA,QACN,SAAS1C,EAAc,KAAK;AAAA,MAChC;AAAA,MACA,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAAK;AAAA,MACA,WAAAN;AAAA,IAAA;AAAA,EAAA,IArBG;AAwBf,GAIMyC,IAA6BG,EAAOC,CAAoB;AAAA,eAC/C,CAACC,MAAM;;AAAA,UAAA5B,IAAA4B,EAAE,MAAM,UAAR,gBAAA5B,EAAe;AAAA,KAAU,CAAC4B,MAAA;;AAAM,UAAA5B,IAAA4B,EAAE,MAAM,UAAR,gBAAA5B,EAAe;AAAA;AAAA;"}
|
|
@@ -141,7 +141,7 @@ const tt = (n) => {
|
|
|
141
141
|
}, s = (w, h, ...P) => u(void 0, [w, h, ...P], function* (a, o, l = [], I) {
|
|
142
142
|
var H, F;
|
|
143
143
|
const g = N();
|
|
144
|
-
switch (a.tags.includes("guide") && ((F = (H = a.content.hints) == null ? void 0 : H[0]) == null ? void 0 : F.id) && (yield z(n, "LastGuideId", a.content.hints[0].id)), a.type) {
|
|
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(n, "LastGuideId", a.content.hints[0].id)), a.type) {
|
|
145
145
|
case "List": {
|
|
146
146
|
const { header: v, items: x, html: $ } = a.content, C = [];
|
|
147
147
|
let E = {
|
|
@@ -742,11 +742,11 @@ const ht = dt, gt = (n) => u(void 0, null, function* () {
|
|
|
742
742
|
B(
|
|
743
743
|
n,
|
|
744
744
|
p.ContactList,
|
|
745
|
-
import("./contact-method-list.
|
|
745
|
+
import("./contact-method-list.189ed807.js")
|
|
746
746
|
), B(
|
|
747
747
|
n,
|
|
748
748
|
p.ContactMethod,
|
|
749
|
-
import("./contact-method.
|
|
749
|
+
import("./contact-method.190ef5ed.js")
|
|
750
750
|
), B(
|
|
751
751
|
n,
|
|
752
752
|
p.NotificationList,
|
|
@@ -790,4 +790,4 @@ export {
|
|
|
790
790
|
yt as K,
|
|
791
791
|
st as u
|
|
792
792
|
};
|
|
793
|
-
//# sourceMappingURL=index.
|
|
793
|
+
//# sourceMappingURL=index.c8e4c7d2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telia-ace/knowledge-widget-bot-provider",
|
|
3
|
-
"version": "0.0.20-next.
|
|
3
|
+
"version": "0.0.20-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.6-next.
|
|
25
|
-
"@telia-ace/knowledge-widget-adapters": "1.0.49-next.
|
|
26
|
-
"@telia-ace/knowledge-widget-ui": "1.0.45-next.
|
|
27
|
-
"@telia-ace/widget-conversation": "^1.0.37-next.
|
|
28
|
-
"@telia-ace/widget-forms": "^1.0.31-next.
|
|
29
|
-
"@telia-ace/widget-services": "^1.0.24-next.
|
|
30
|
-
"@telia-ace/widget-utilities": "^1.0.13-next.
|
|
24
|
+
"@telia-ace/knowledge-data-client": "1.0.6-next.5",
|
|
25
|
+
"@telia-ace/knowledge-widget-adapters": "1.0.49-next.5",
|
|
26
|
+
"@telia-ace/knowledge-widget-ui": "1.0.45-next.5",
|
|
27
|
+
"@telia-ace/widget-conversation": "^1.0.37-next.3",
|
|
28
|
+
"@telia-ace/widget-forms": "^1.0.31-next.3",
|
|
29
|
+
"@telia-ace/widget-services": "^1.0.24-next.3",
|
|
30
|
+
"@telia-ace/widget-utilities": "^1.0.13-next.3",
|
|
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.39-next.
|
|
42
|
-
"@types/react": "^18.0.
|
|
41
|
+
"@telia-ace/knowledge-widget-core": "1.0.39-next.5",
|
|
42
|
+
"@types/react": "^18.0.32",
|
|
43
43
|
"@webprovisions/platform": "^1.1.2",
|
|
44
44
|
"react": "^18.2.0"
|
|
45
45
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contact-method.00113ea4.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(DataType.ContactMethod, {\n contactMethodId: id,\n guideId,\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,MAAMA,KAAiC,CAAC,EAAE,iBAAAC,GAAiB,SAAAC,GAAS,SAAAC,GAAS,WAAAC,QAAgB;;AACzF,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAc,GAClDC,IAAYC,KACZC,IAAWC,KACXC,IAAaC,EAAgB,EAAI,GACjCC,IAAsBC;AAE5B,EAAAC,EAAU,MAAM;AACZ,UAAM,EAAE,QAAAC,EAAW,IAAAT,EAAU,IAAI,SAAS,GAEpCU,IAAcD,EAAO,UAAU,+BAA+B,CAAOE,GAAGC,MAASC,EAAA;;AAE/E,YAAAC,IAAAF,EAAK,KAAK,SAAV,gBAAAE,EAAgB,aAAYnB,KAAWiB,EAAK,OAAOf,EAAc;AACjE;AAGJ,MAAIS,MACKM,EAAK,KAAK,SACNA,EAAA,KAAK,OAAO,KAGhBA,EAAA,KAAK,KAAK,eAAeN;AAGlC,YAAMS,IAAY,MAAMf,EAAU,SAAS,gBAAgB,GAErDgB,IAAgBC,EAAAC,EAAA,IACfrB,IADe;AAAA,QAElB,MAAMoB,EAAAC,EAAA,IACCrB,EAAc,OADf;AAAA,UAEF,MAAMe,EAAK;AAAA,QACf;AAAA,MAAA,IAGE,EAAE,QAAAO,GAAQ,OAAAC,GAAO,YAAAC,EAAA,IAAe,MAAMN,EAAS,SAASC,CAAa;AAE3E,UAAI,CAACI,GAAO;AACR,cAAME,IAAU,IAAIC,EAAY1B,EAAc,KAAK,IAAI;AACvD,QAAAC,EAAiB,MAAS,GAE1BwB,EAAQ,oBAAoBH,CAAM,GAElCH,EAAc,OAAOC,EAAAC,EAAA,IACdF,EAAc,OADA;AAAA,UAEjB,MAAMM,EAAQ,IAAI;AAAA,QAAA,IAGLxB,EAAAoB,EAAA,IAAKF,EAAe;AACrC;AAAA,MACJ;AAEA,YAAMQ,IAAS,MAAMT,EAAS,OAAOC,CAAa;AAElD,MAAAA,EAAc,eAAeQ,GAC7B1B,EAAiBkB,CAAa;AAAA,IAAA,EACjC,GAEKS,IAAsBhB,EAAO,UAAU,yBAAyB,CAAOE,GAAGC,MAASC,EAAA;AACjF,UAAAD,EAAK,MAAMnB;AACX;AAKJ,YAAMiC,IAAc,OAFF,MAAM1B,EAAU,SAAS,gBAAgB,GAExB,SAASH,CAAa;AAEzD,UAAImB,IAAgBC,EAAAC,EAAA,IACbrB,IADa;AAAA,QAEhB,MAAMoB,EAAAC,EAAA,IACCrB,EAAc,OADf;AAAA,UAEF,MAAM6B;AAAA,QACV;AAAA,MAAA;AAGE,YAAAC,IAAcC,EAAWZ,GAAe;AAAA,QAC1C,QAAQ;AAAA,QACR,QAAQ,CAAC;AAAA,QACT,MAAM,EAAE,SAAArB,EAAQ;AAAA,MAAA,CACnB;AAEe,MAAAqB,IAAAC,EAAAC,EAAA,IACTF,IADS;AAAA,QAEZ,MAAMW;AAAA,MAAA,IAGV7B,EAAiBkB,CAAa;AAAA,IAAA,EACjC;AAED,WAAO,MAAM;AACG,MAAAN,KACQe;IAAA;AAAA,KAEzB,CAACzB,GAAWH,GAAeC,GAAkBQ,CAAmB,CAAC;AAEpE,QAAMuB,IAAqBC;AAAA,IACvB,CAAOC,MAAelB,EAAA;AAGlB,YAAMmB,IAAK,OAFQ,MAAMC,EAAW,YAAYjC,CAAS,GAE7B,MAAMkC,EAAS,eAAe;AAAA,QACtD,iBAAiBH;AAAA,QACjB,SAAArC;AAAA,MAAA,CACH,GAEKyC,IAAOP,EAAWI,GAAI;AAAA,QACxB,QAAQ;AAAA,QACR,QAAQ,CAAC;AAAA,QACT,MAAM,EAAE,SAAArC,EAAQ;AAAA,MAAA,CACnB;AAIG,UAHJqC,EAAG,OAAOG,GACVH,EAAG,KAAK,UAAUtC,GAEd,CAACU,EAAW;AACL,eAAA;AAEX,MAAAN,EAAiBkC,CAAE;AAAA,IACvB;AAAA,IACA,CAAC5B,CAAU;AAAA,EAAA;AAUf,SAPAI,EAAU,OACNqB,EAAmBpC,CAAe,GAC3B,MAAM;AACT,IAAAW,EAAW,UAAU;AAAA,EAAA,IAE1B,CAACX,GAAiBoC,CAAkB,CAAC,GAEnChC,IAID,gBAAAuC,EAAA;AAAA,IAACC;AAAA,IAAApB,EAAAC,EAAA,IACOrB,IADP;AAAA,MAEG,MAAMoB,EAAAC,EAAA,IACCrB,EAAc,OADf;AAAA,QAEF,MAAMA,EAAc,KAAK,OACnBoB,EAAAC,EAAA,IACOrB,EAAc,KAAK,OAD1B;AAAA,UAEI,OAAMiB,IAAAjB,EAAc,KAAK,SAAnB,gBAAAiB,EAAyB;AAAA,UAC/B,QAAQI,EAAA,IAAKrB,EAAc,KAAK,KAAK;AAAA,UACrC,OAAMyC,IAAAzC,EAAc,KAAK,SAAnB,gBAAAyC,EAAyB;AAAA,UAC/B,SAAQC,IAAA1C,EAAc,KAAK,SAAnB,gBAAA0C,EAAyB;AAAA,QAErC,KAAA;AAAA,QACN,SAAS1C,EAAc,KAAK;AAAA,MAChC;AAAA,MACA,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAAK;AAAA,MACA,WAAAN;AAAA,IAAA;AAAA,EAAA,IArBG;AAwBf,GAIMyC,IAA6BG,EAAOC,CAAoB;AAAA,eAC/C,CAACC,MAAM;;AAAA,UAAA5B,IAAA4B,EAAE,MAAM,UAAR,gBAAA5B,EAAe;AAAA,KAAU,CAAC4B,MAAA;;AAAM,UAAA5B,IAAA4B,EAAE,MAAM,UAAR,gBAAA5B,EAAe;AAAA;AAAA;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.0f04f568.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.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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"}
|