@telia-ace/knowledge-widget-bot-provider 0.0.1-alpha.5 → 0.0.1-alpha.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/contact-method-list.js +111 -0
  2. package/dist/contact-method-list.js.map +1 -0
  3. package/dist/contact-method.js +154 -0
  4. package/dist/contact-method.js.map +1 -0
  5. package/dist/entry-handler.d.ts +2 -0
  6. package/dist/feedback-list.js +72 -0
  7. package/dist/feedback-list.js.map +1 -0
  8. package/dist/http-client.d.ts +42 -0
  9. package/{lib-esm → dist}/index.d.ts +0 -0
  10. package/dist/index.js +6 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/index2.js +914 -0
  13. package/dist/index2.js.map +1 -0
  14. package/dist/no-good-alternative.js +46 -0
  15. package/dist/no-good-alternative.js.map +1 -0
  16. package/dist/notification-list.js +74 -0
  17. package/dist/notification-list.js.map +1 -0
  18. package/dist/plugin.d.ts +3 -0
  19. package/dist/provider.d.ts +25 -0
  20. package/dist/store.d.ts +15 -0
  21. package/dist/styles.js +13 -0
  22. package/dist/styles.js.map +1 -0
  23. package/dist/types.d.ts +78 -0
  24. package/dist/ui/contact-method-list.d.ts +10 -0
  25. package/dist/ui/contact-method.d.ts +9 -0
  26. package/dist/ui/feedback-list.d.ts +8 -0
  27. package/dist/ui/no-good-alternative.d.ts +6 -0
  28. package/dist/ui/notification-list.d.ts +11 -0
  29. package/dist/ui/styles.d.ts +1 -0
  30. package/dist/utils.d.ts +26 -0
  31. package/package.json +44 -45
  32. package/lib/client/chat.client.d.ts +0 -15
  33. package/lib/client/chat.client.js +0 -80
  34. package/lib/client/contact-method.client.d.ts +0 -22
  35. package/lib/client/contact-method.client.js +0 -276
  36. package/lib/client/http.client.d.ts +0 -22
  37. package/lib/client/http.client.js +0 -114
  38. package/lib/client/middleware.client.d.ts +0 -13
  39. package/lib/client/middleware.client.js +0 -60
  40. package/lib/contract/custom-component/contact-method-item.d.ts +0 -8
  41. package/lib/contract/custom-component/contact-method-item.js +0 -76
  42. package/lib/contract/custom-component/contact-method-list.d.ts +0 -7
  43. package/lib/contract/custom-component/contact-method-list.js +0 -41
  44. package/lib/contract/custom-component/contact-method.d.ts +0 -3
  45. package/lib/contract/custom-component/contact-method.js +0 -38
  46. package/lib/contract/enum/server-entry-type.enum.d.ts +0 -6
  47. package/lib/contract/enum/server-entry-type.enum.js +0 -10
  48. package/lib/contract/model/conversation-api-model/list.model.d.ts +0 -5
  49. package/lib/contract/model/conversation-api-model/list.model.js +0 -2
  50. package/lib/contract/model/conversation-api-model/message.model.d.ts +0 -7
  51. package/lib/contract/model/conversation-api-model/message.model.js +0 -2
  52. package/lib/contract/model/http/action.model.d.ts +0 -3
  53. package/lib/contract/model/http/action.model.js +0 -2
  54. package/lib/contract/model/http/client-action.model.d.ts +0 -4
  55. package/lib/contract/model/http/client-action.model.js +0 -3
  56. package/lib/contract/model/http/client-envelope.model.d.ts +0 -9
  57. package/lib/contract/model/http/client-envelope.model.js +0 -2
  58. package/lib/contract/model/http/connect-options.model.d.ts +0 -5
  59. package/lib/contract/model/http/connect-options.model.js +0 -2
  60. package/lib/contract/model/http/global-state.model.d.ts +0 -8
  61. package/lib/contract/model/http/global-state.model.js +0 -2
  62. package/lib/contract/model/http/http-client-options.model.d.ts +0 -5
  63. package/lib/contract/model/http/http-client-options.model.js +0 -2
  64. package/lib/contract/model/http/server-entry.model.d.ts +0 -11
  65. package/lib/contract/model/http/server-entry.model.js +0 -2
  66. package/lib/contract/model/http/server-envelope.model.d.ts +0 -10
  67. package/lib/contract/model/http/server-envelope.model.js +0 -2
  68. package/lib/contract/model/middleware/aggregator-state.model.d.ts +0 -4
  69. package/lib/contract/model/middleware/aggregator-state.model.js +0 -3
  70. package/lib/contract/model/shared/loose-object.model.d.ts +0 -3
  71. package/lib/contract/model/shared/loose-object.model.js +0 -2
  72. package/lib/helper/chat.helper.d.ts +0 -8
  73. package/lib/helper/chat.helper.js +0 -21
  74. package/lib/helper/http.helper.d.ts +0 -13
  75. package/lib/helper/http.helper.js +0 -33
  76. package/lib/helper/middleware.helper.d.ts +0 -12
  77. package/lib/helper/middleware.helper.js +0 -72
  78. package/lib/helper/store.helper.d.ts +0 -22
  79. package/lib/helper/store.helper.js +0 -80
  80. package/lib/index.d.ts +0 -2
  81. package/lib/index.js +0 -8
  82. package/lib/interface/entry.interface.d.ts +0 -17
  83. package/lib/interface/entry.interface.js +0 -138
  84. package/lib/interface/middleware/contact-expanded.interface.d.ts +0 -0
  85. package/lib/interface/middleware/contact-expanded.interface.js +0 -50
  86. package/lib/interface/middleware/legacy-contact-methods.interface.d.ts +0 -0
  87. package/lib/interface/middleware/legacy-contact-methods.interface.js +0 -394
  88. package/lib/interface/middleware/paging.interface.d.ts +0 -4
  89. package/lib/interface/middleware/paging.interface.js +0 -55
  90. package/lib/interface/middleware/processor.interface.d.ts +0 -10
  91. package/lib/interface/middleware/processor.interface.js +0 -120
  92. package/lib/plugin.d.ts +0 -3
  93. package/lib/plugin.js +0 -172
  94. package/lib-esm/client/chat.client.d.ts +0 -15
  95. package/lib-esm/client/chat.client.js +0 -75
  96. package/lib-esm/client/contact-method.client.d.ts +0 -22
  97. package/lib-esm/client/contact-method.client.js +0 -270
  98. package/lib-esm/client/http.client.d.ts +0 -22
  99. package/lib-esm/client/http.client.js +0 -108
  100. package/lib-esm/client/middleware.client.d.ts +0 -13
  101. package/lib-esm/client/middleware.client.js +0 -55
  102. package/lib-esm/contract/custom-component/contact-method-item.d.ts +0 -8
  103. package/lib-esm/contract/custom-component/contact-method-item.js +0 -51
  104. package/lib-esm/contract/custom-component/contact-method-list.d.ts +0 -7
  105. package/lib-esm/contract/custom-component/contact-method-list.js +0 -13
  106. package/lib-esm/contract/custom-component/contact-method.d.ts +0 -3
  107. package/lib-esm/contract/custom-component/contact-method.js +0 -33
  108. package/lib-esm/contract/enum/server-entry-type.enum.d.ts +0 -6
  109. package/lib-esm/contract/enum/server-entry-type.enum.js +0 -7
  110. package/lib-esm/contract/model/conversation-api-model/list.model.d.ts +0 -5
  111. package/lib-esm/contract/model/conversation-api-model/list.model.js +0 -1
  112. package/lib-esm/contract/model/conversation-api-model/message.model.d.ts +0 -7
  113. package/lib-esm/contract/model/conversation-api-model/message.model.js +0 -1
  114. package/lib-esm/contract/model/http/action.model.d.ts +0 -3
  115. package/lib-esm/contract/model/http/action.model.js +0 -1
  116. package/lib-esm/contract/model/http/client-action.model.d.ts +0 -4
  117. package/lib-esm/contract/model/http/client-action.model.js +0 -2
  118. package/lib-esm/contract/model/http/client-envelope.model.d.ts +0 -9
  119. package/lib-esm/contract/model/http/client-envelope.model.js +0 -1
  120. package/lib-esm/contract/model/http/connect-options.model.d.ts +0 -5
  121. package/lib-esm/contract/model/http/connect-options.model.js +0 -1
  122. package/lib-esm/contract/model/http/global-state.model.d.ts +0 -8
  123. package/lib-esm/contract/model/http/global-state.model.js +0 -1
  124. package/lib-esm/contract/model/http/http-client-options.model.d.ts +0 -5
  125. package/lib-esm/contract/model/http/http-client-options.model.js +0 -1
  126. package/lib-esm/contract/model/http/server-entry.model.d.ts +0 -11
  127. package/lib-esm/contract/model/http/server-entry.model.js +0 -1
  128. package/lib-esm/contract/model/http/server-envelope.model.d.ts +0 -10
  129. package/lib-esm/contract/model/http/server-envelope.model.js +0 -1
  130. package/lib-esm/contract/model/middleware/aggregator-state.model.d.ts +0 -4
  131. package/lib-esm/contract/model/middleware/aggregator-state.model.js +0 -2
  132. package/lib-esm/contract/model/shared/loose-object.model.d.ts +0 -3
  133. package/lib-esm/contract/model/shared/loose-object.model.js +0 -1
  134. package/lib-esm/helper/chat.helper.d.ts +0 -8
  135. package/lib-esm/helper/chat.helper.js +0 -18
  136. package/lib-esm/helper/http.helper.d.ts +0 -13
  137. package/lib-esm/helper/http.helper.js +0 -30
  138. package/lib-esm/helper/middleware.helper.d.ts +0 -12
  139. package/lib-esm/helper/middleware.helper.js +0 -69
  140. package/lib-esm/helper/store.helper.d.ts +0 -22
  141. package/lib-esm/helper/store.helper.js +0 -77
  142. package/lib-esm/index.js +0 -2
  143. package/lib-esm/interface/entry.interface.d.ts +0 -17
  144. package/lib-esm/interface/entry.interface.js +0 -136
  145. package/lib-esm/interface/middleware/paging.interface.d.ts +0 -4
  146. package/lib-esm/interface/middleware/paging.interface.js +0 -53
  147. package/lib-esm/interface/middleware/processor.interface.d.ts +0 -10
  148. package/lib-esm/interface/middleware/processor.interface.js +0 -118
  149. package/lib-esm/plugin.d.ts +0 -3
  150. package/lib-esm/plugin.js +0 -144
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index2.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';\r\n\r\nexport enum CustomMessageTypes {\r\n ContactMethod = 'ace-knowledge-bot-contact-method',\r\n ContactList = 'ace-knowledge-bot-contact-list',\r\n FeedbackList = 'ace-knowledge-bot-feedback-list',\r\n NotificationList = 'ace-knowledge-bot-notification-list',\r\n NoGoodAlternative = 'ace-knowledge-bot-no-good-alternative',\r\n}\r\n\r\ntype LooseObject = { [key: string]: any };\r\n\r\nexport interface ActionItem {\r\n label: string;\r\n actionKey: string;\r\n data?: any;\r\n}\r\n\r\nexport interface MessageGroup {\r\n id: string;\r\n isUser: boolean;\r\n items: MessageGroupItem[];\r\n writer?: any;\r\n meta: { [key: string]: any };\r\n}\r\n\r\nexport interface MessageGroupItem {\r\n id: string;\r\n groupId: string;\r\n isUser: boolean;\r\n message: [ConversationMessageListItemType | CustomMessageTypes, any];\r\n}\r\n\r\nexport interface ClientEnvelope {\r\n command?: LooseObject;\r\n action?: {\r\n key: string;\r\n content: any;\r\n };\r\n globalState?: LooseObject;\r\n localState?: LooseObject;\r\n clientId?: string;\r\n}\r\n\r\nexport interface ServerEnvelope {\r\n clientId?: string | undefined;\r\n entries: ServerEntry[];\r\n globalState?: GlobalState;\r\n resolveCommand?: string;\r\n clientEnvelope?: ClientEnvelope;\r\n}\r\n\r\nexport interface GlobalState {\r\n completedInteractionsCount: number;\r\n lastQuestion?: string;\r\n lastBotGuide: number;\r\n lastGuideTitle?: string;\r\n site: string;\r\n invincibleParameters: object;\r\n}\r\n\r\nexport interface ServerEntry {\r\n id: string;\r\n type: string;\r\n content: any;\r\n actions: { [key: string]: any };\r\n tags: string[];\r\n relation?: string;\r\n timestamp: string;\r\n localState?: { [key: string]: any };\r\n}\r\n\r\nexport interface ListContent {\r\n header?: string;\r\n actions: ActionItem[];\r\n contactMethodIds?: string[];\r\n entryId: string;\r\n groupId: string;\r\n}\r\n","import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';\r\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\r\nimport { FormBuilder, submitButton } from '@telia-ace/widget-forms';\r\nimport { Symbol } from '@telia-ace/widget-ui';\r\nimport { uuid } from '@telia-ace/widget-utilities';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { CustomMessageTypes, MessageGroup, MessageGroupItem } from './types';\r\n\r\nconst convertLegacySymbol = (symbol?: { type: string; content: string }): Symbol | undefined => {\r\n if (symbol) {\r\n const { type, content } = symbol;\r\n if (type && content) {\r\n return { type, content };\r\n }\r\n }\r\n};\r\n\r\nexport const createGroup = ({\r\n isUser,\r\n items = [],\r\n meta = {},\r\n}: {\r\n isUser: boolean;\r\n items?: Partial<MessageGroupItem>[];\r\n meta?: MessageGroup['meta'];\r\n}) => {\r\n const groupId = uuid();\r\n\r\n const group = {\r\n id: groupId,\r\n isUser,\r\n items: items.map((i) => {\r\n return {\r\n id: i.id || uuid(),\r\n isUser: isUser,\r\n groupId: groupId,\r\n message: i.message || [],\r\n };\r\n }),\r\n meta,\r\n } as MessageGroup;\r\n\r\n return group;\r\n};\r\n\r\nexport const contactMethodFromLegacy = (\r\n {\r\n id,\r\n title,\r\n defaultIcon,\r\n exits: [exit],\r\n exitType,\r\n confirmationText,\r\n expandFormAutomatically,\r\n form,\r\n description,\r\n }: any,\r\n options: {\r\n validation?: any;\r\n guideId?: string;\r\n } = {}\r\n): any => {\r\n const { adapter } = exit || { Adapter: {} };\r\n const { clientName = '', settings: adapterSettings = {}, customClientName = '' } = adapter;\r\n const { validation } = options;\r\n\r\n const settings: any = {\r\n id: id.toString(),\r\n title: title,\r\n description: description,\r\n symbol: convertLegacySymbol(defaultIcon),\r\n clientName: clientName === 'custom.adapter' ? customClientName : clientName,\r\n expanded: true,\r\n inline: true,\r\n body: {},\r\n };\r\n\r\n if (clientName.indexOf('phone') > -1 || clientName.indexOf('freetext') > -1) {\r\n const { displayTextBeforeClick, textBeforeClick } = adapterSettings;\r\n if (displayTextBeforeClick === 'true') {\r\n settings.expanded = false;\r\n settings.title = textBeforeClick;\r\n }\r\n\r\n if (clientName.indexOf('phone.text') > -1) {\r\n settings.body.phoneNumber = adapterSettings.phoneNumber;\r\n } else {\r\n settings.body.freetext = adapterSettings.freetext;\r\n }\r\n }\r\n\r\n if (\r\n clientName.indexOf('chat.popup') > -1 ||\r\n clientName.indexOf('link') > -1 ||\r\n (clientName === 'custom.adapter' && exitType === 'custom')\r\n ) {\r\n settings.body = adapterSettings;\r\n settings.body.confirmationFallback = confirmationText;\r\n }\r\n\r\n if (clientName.indexOf('ace') > -1) {\r\n settings.body = adapterSettings;\r\n }\r\n\r\n if (form && form.hasValueComponents) {\r\n if (validation) {\r\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form, validation).get();\r\n } else {\r\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form).get();\r\n }\r\n if (!expandFormAutomatically) {\r\n settings.expanded = settings.inline = false;\r\n }\r\n\r\n settings.body = updateForm(settings, { submit: 'Submit' });\r\n }\r\n\r\n if (options.guideId) {\r\n settings.body.guideId = options.guideId;\r\n }\r\n\r\n return settings;\r\n};\r\n\r\nexport const getListType = (state: any) => {\r\n if (state?.$type === 'Humany.Matching.Bots.Conversations.GuideListState, Humany.Matching') {\r\n return ConversationMessageListItemType.LinkList;\r\n } else if (\r\n state?.$type ===\r\n 'Humany.Matching.Bots.Conversations.States.GuideFeedbackState, Humany.Matching'\r\n ) {\r\n return CustomMessageTypes.FeedbackList;\r\n } else if (\r\n state?.$type === 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\r\n ) {\r\n return CustomMessageTypes.ContactList;\r\n } else return ConversationMessageListItemType.ButtonList;\r\n};\r\n\r\nexport const getKnowledgeBotEndpoint = (\r\n container: Container,\r\n component: any /*: ComponentNodeController */\r\n) => {\r\n const { knowledgeBotEndpoint } = component.properties();\r\n\r\n if (knowledgeBotEndpoint) {\r\n return `${knowledgeBotEndpoint}/conversations`;\r\n }\r\n\r\n const { data } = container.get('$settings');\r\n\r\n if (!data || !data.projection) throw new Error('Missing Knowledge Bot endpoint');\r\n\r\n return `${data.projection}/conversations`;\r\n};\r\n\r\nexport const updateForm = (\r\n contactMethod: ContactMethodType,\r\n {\r\n submit,\r\n errors,\r\n meta,\r\n }: { submit: string; errors?: { [key: string]: string }; meta?: { [key: string]: string } }\r\n): any => {\r\n if (contactMethod?.body?.form) {\r\n const { body } = contactMethod;\r\n const builder = new FormBuilder(body.form);\r\n\r\n if (!body.form.layout.submit) {\r\n builder.createComponent(submitButton(submit, 'submit'));\r\n }\r\n\r\n if (errors) {\r\n builder.setValidationErrors(errors);\r\n }\r\n\r\n if (meta) {\r\n (builder as any).setMeta(meta);\r\n }\r\n\r\n return {\r\n ...body,\r\n form: builder.get(),\r\n };\r\n }\r\n return contactMethod?.body || {};\r\n};\r\n","import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\r\nimport { uuid } from '@telia-ace/widget-utilities';\r\nimport {\r\n ActionItem,\r\n CustomMessageTypes,\r\n ListContent,\r\n MessageGroup,\r\n MessageGroupItem,\r\n ServerEntry,\r\n} from './types';\r\nimport { contactMethodFromLegacy, createGroup, getListType } from './utils';\r\n\r\nconst createGroupItem = ({\r\n messageId,\r\n message,\r\n group,\r\n}: {\r\n messageId: string;\r\n message: MessageGroupItem['message'];\r\n group: MessageGroup;\r\n}) => {\r\n return {\r\n id: messageId,\r\n message,\r\n groupId: group.id,\r\n isUser: group.isUser,\r\n };\r\n};\r\n\r\nexport const processEntries = async (entries: ServerEntry[], prevGroup?: MessageGroup) => {\r\n const createListContent = (\r\n listType: string,\r\n entry: ServerEntry,\r\n groupId: string,\r\n listContent: ListContent = {\r\n actions: [],\r\n entryId: entry.id,\r\n groupId,\r\n }\r\n ) => {\r\n const contactMethodIds: string[] = [];\r\n\r\n listContent.actions = entry.content.items.map((i: any) => {\r\n const action = {\r\n label: i.title,\r\n actionKey: i.actionKey,\r\n } as ActionItem;\r\n\r\n if (i.data) {\r\n const entryAction = entry.actions[i.actionKey];\r\n if (listType === CustomMessageTypes.ContactList) {\r\n contactMethodIds.push(i.data.id);\r\n action.data = contactMethodFromLegacy(i.data, {\r\n guideId: entryAction?.guideId?.toString(),\r\n });\r\n } else {\r\n action.data = i.data;\r\n }\r\n }\r\n return action;\r\n });\r\n\r\n if (listType === CustomMessageTypes.ContactList) {\r\n listContent.contactMethodIds = contactMethodIds;\r\n }\r\n\r\n return listContent;\r\n };\r\n\r\n const transform = async (\r\n entry: ServerEntry,\r\n group: MessageGroup,\r\n related: ServerEntry[] = [],\r\n prevGroup?: MessageGroup\r\n ) => {\r\n const messageId = uuid();\r\n\r\n switch (entry.type) {\r\n case 'List':\r\n {\r\n const { header, items, html } = entry.content;\r\n\r\n const result = [];\r\n\r\n let listContent = {\r\n actions: [],\r\n entryId: entry.id,\r\n groupId: group.id,\r\n } as ListContent;\r\n\r\n if (header) {\r\n listContent.header = header;\r\n }\r\n\r\n if (items?.length > 0) {\r\n const listType = getListType(entry.localState);\r\n listContent = createListContent(listType, entry, group.id, listContent);\r\n\r\n // entry has related entries\r\n if (!!related.length) {\r\n const pagingEntry = related.find((e) => e.tags.includes('paging'));\r\n const fallbackEntry = related.find((e) => e.tags.includes('fallback'));\r\n\r\n if (pagingEntry?.content) {\r\n group.meta.paging = {\r\n actions: pagingEntry.actions,\r\n items: pagingEntry.content.items,\r\n localState: pagingEntry.localState,\r\n };\r\n pagingEntry.content.items.forEach((i: any) => {\r\n listContent.actions.push({\r\n label: i.title,\r\n actionKey: i.actionKey,\r\n data: {\r\n groupId: !!prevGroup ? prevGroup.id : group.id,\r\n },\r\n });\r\n });\r\n }\r\n\r\n if (fallbackEntry) {\r\n const fallbackAction = fallbackEntry.content.items.find(\r\n (i: any) => i.actionKey === 'help'\r\n );\r\n if (fallbackAction) {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.Separator,\r\n undefined,\r\n ],\r\n group,\r\n })\r\n );\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n CustomMessageTypes.NoGoodAlternative,\r\n { body: fallbackAction.title },\r\n ],\r\n group,\r\n })\r\n );\r\n }\r\n }\r\n }\r\n\r\n result.unshift(\r\n createGroupItem({\r\n messageId,\r\n message: [listType, listContent],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n if (html) {\r\n result.unshift(\r\n createGroupItem({\r\n messageId,\r\n message: [ConversationMessageListItemType.HTML, { body: html }],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n break;\r\n case 'Text':\r\n {\r\n const result = [];\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n { body: entry.content.html },\r\n ],\r\n group,\r\n })\r\n );\r\n\r\n // embedded contact methods\r\n if (!!related.length) {\r\n const contactMethodListEntry = related.find(\r\n (e) =>\r\n e.type === 'List' &&\r\n e.localState?.$type ===\r\n 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\r\n );\r\n\r\n const dialogListEntry = related.find((e) => e.tags.includes('dialog'));\r\n const feedbackEntry = related.find((e) => e.tags.includes('feedback'));\r\n\r\n if (dialogListEntry) {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.ButtonList,\r\n {\r\n actions: dialogListEntry.content.items.map((i: any) => {\r\n return {\r\n label: i.title,\r\n actionKey: i.actionKey,\r\n };\r\n }),\r\n },\r\n ],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n if (contactMethodListEntry) {\r\n const listContent = createListContent(\r\n CustomMessageTypes.ContactList,\r\n contactMethodListEntry,\r\n group.id\r\n );\r\n\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [ConversationMessageListItemType.Separator, undefined],\r\n group,\r\n })\r\n );\r\n\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [CustomMessageTypes.ContactList, listContent],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n if (feedbackEntry) {\r\n if (feedbackEntry.content.html) {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n group,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: feedbackEntry.content.html,\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n group,\r\n message: [\r\n CustomMessageTypes.FeedbackList,\r\n {\r\n actions: feedbackEntry.content.items.map((i: any) => {\r\n return {\r\n actionKey: i.actionKey,\r\n label: i.title,\r\n };\r\n }),\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n }\r\n return result;\r\n }\r\n break;\r\n case 'Contact': {\r\n return [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n CustomMessageTypes.ContactMethod,\r\n {\r\n contactMethodId: entry.content.id,\r\n groupId: group.id,\r\n guideId: entry.content.guideId,\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n }\r\n case 'CategorizedNoticeList': {\r\n const result = [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n CustomMessageTypes.NotificationList,\r\n {\r\n id: entry.content.item.id.toString(),\r\n header: entry.content.item.title,\r\n items: entry.content.item.listNotices,\r\n symbol: entry.content.item.defaultIcon,\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n\r\n (entry.content.notices || []).forEach((notice: any) => {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: notice.body,\r\n },\r\n ],\r\n group,\r\n })\r\n );\r\n });\r\n\r\n return result;\r\n }\r\n case 'footerNotice': {\r\n return [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: entry.content.item.body,\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n }\r\n case 'Error': {\r\n return [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: entry.content.message || 'Something went wrong.',\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n }\r\n\r\n default:\r\n return [];\r\n }\r\n };\r\n\r\n const splitEntry = (entry: ServerEntry): ServerEntry | ServerEntry[] => {\r\n if (['CategorizedNoticeList', 'NoticeList'].includes(entry.type)) {\r\n return (entry.content.items || []).reduce((acc: any, item: any) => {\r\n if (!entry.content.isInitialNotices) {\r\n return acc;\r\n }\r\n acc.push({\r\n ...entry,\r\n id: uuid(),\r\n type: item.type || entry.type,\r\n content: {\r\n $type: entry.content.$type,\r\n isInitialNotices: entry.content.isInitialNotices,\r\n notices: item.notices,\r\n item,\r\n },\r\n });\r\n return acc;\r\n }, []);\r\n }\r\n return entry;\r\n };\r\n\r\n // map of in which order the messages should be displayed\r\n // lower numbers will be displayed above higher\r\n const sortMap = new Map<string, number>([\r\n ['Text', 1],\r\n ['List', 2],\r\n ['Contact', 3],\r\n ['CategorizedNoticeList', 10],\r\n ]);\r\n\r\n const result: MessageGroup[] = [];\r\n const filteredEntries = entries\r\n .sort((item, other) => {\r\n // sort the entries based on it's types sort value\r\n const defaultSortValue = 20;\r\n\r\n var sortValue = sortMap.get(item.type) || defaultSortValue;\r\n var sortValueOther = sortMap.get(other.type) || defaultSortValue;\r\n return sortValue - sortValueOther;\r\n })\r\n .filter((entry) => !entry.relation) // remove any \"relation entries\"\r\n .reduce<ServerEntry[]>((acc, entry) => {\r\n // some entries needs to be splitted into seperate groups\r\n return acc.concat(splitEntry(entry));\r\n }, []);\r\n\r\n for (const entry of filteredEntries) {\r\n const relatedEntries = entries.filter((other) => other.relation === entry.id);\r\n const group = createGroup({ isUser: false });\r\n\r\n const items = await transform(entry, group, relatedEntries, prevGroup);\r\n items.forEach((item) => {\r\n group.items.push(item);\r\n });\r\n\r\n if (group.items.length) {\r\n result.push(group);\r\n }\r\n }\r\n return result;\r\n};\r\n","import { uuid } from '@telia-ace/widget-utilities';\r\nimport { Container, EventManager } from '@webprovisions/platform';\r\nimport { processEntries } from './entry-handler';\r\nimport Store from './store';\r\nimport { ClientEnvelope, MessageGroup, ServerEntry, ServerEnvelope } from './types';\r\n\r\nclass HttpClient {\r\n private globalState: any;\r\n private clientId: string;\r\n private entries: ServerEntry[];\r\n\r\n constructor(\r\n private endpoint: string,\r\n private events: EventManager,\r\n private store: Store,\r\n private container: Container\r\n ) {\r\n this.clientId = uuid();\r\n this.entries = [];\r\n }\r\n\r\n async start() {\r\n const storedMessages = await this.store.read();\r\n\r\n // if there are a session stored, rehydrate the messages\r\n // otherwise create a new session\r\n if (storedMessages && storedMessages.length > 0) {\r\n const storedGlobalState = this.store.readGlobalState();\r\n this.globalState = storedGlobalState;\r\n return storedMessages;\r\n } else {\r\n const envelope = this.createInitialEnvelope();\r\n const initialResponse = await this.postEnvelope(envelope);\r\n return initialResponse;\r\n }\r\n }\r\n\r\n async sendMessage(message: string) {\r\n const envelope = {\r\n command: { phrase: message },\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n };\r\n\r\n const result = await this.postEnvelope(envelope);\r\n return result;\r\n }\r\n\r\n async helpAction() {\r\n return this.postEnvelope({\r\n action: {\r\n key: 'help',\r\n content: {\r\n $type: 'Humany.Matching.Bots.Conversations.Actions.Help, Humany.Matching',\r\n },\r\n },\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n });\r\n }\r\n\r\n async nextAction(group: MessageGroup) {\r\n const { paging } = group.meta;\r\n if (!paging.actions?.next) {\r\n return;\r\n }\r\n return this.postEnvelope(\r\n {\r\n action: {\r\n key: 'next',\r\n content: paging.actions.next,\r\n },\r\n localState: paging.localState,\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n },\r\n group\r\n ).then((response) => {\r\n const listItemIndex = group.items.findIndex((item) => item.message[0] === 'link-list');\r\n if (listItemIndex === -1 || !response) {\r\n return group;\r\n }\r\n\r\n return {\r\n ...group,\r\n meta: {\r\n ...group.meta,\r\n ...response[0].meta,\r\n },\r\n items: [\r\n ...group.items.slice(0, listItemIndex),\r\n {\r\n ...group.items[listItemIndex],\r\n message: [\r\n response[0].items[0].message[0],\r\n {\r\n ...group.items[listItemIndex].message[1],\r\n ...response[0].items[0].message[1],\r\n },\r\n ],\r\n },\r\n ...group.items.slice(listItemIndex + 1),\r\n ],\r\n };\r\n });\r\n }\r\n\r\n async showContactMethodAction(data: {\r\n contactMethod: any;\r\n actionKey: string;\r\n entryId: string;\r\n }) {\r\n const entry = this.entries.find((e) => e.id === data.entryId);\r\n const actionItem = entry?.actions[data.actionKey];\r\n\r\n if (!actionItem) {\r\n return;\r\n }\r\n\r\n return this.postEnvelope({\r\n action: {\r\n key: data.actionKey,\r\n content: actionItem,\r\n },\r\n localState: entry.localState,\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n });\r\n }\r\n\r\n async defaultAction(action: string) {\r\n const entry = this.getEntryOfAction(action);\r\n\r\n if (!entry) {\r\n return;\r\n }\r\n\r\n return this.postEnvelope({\r\n action: {\r\n key: action,\r\n content: entry.actions[action],\r\n },\r\n localState: entry.localState,\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n });\r\n }\r\n\r\n private createInitialEnvelope(): ClientEnvelope {\r\n return {\r\n command: { site: this.endpoint },\r\n clientId: this.clientId,\r\n globalState: {},\r\n };\r\n }\r\n\r\n private async postEnvelope(envelope: ClientEnvelope, prevGroup?: MessageGroup) {\r\n try {\r\n const response = await fetch(this.endpoint, this.getHttpOptions(envelope));\r\n\r\n if (!response.ok) {\r\n throw response;\r\n }\r\n\r\n const data = await response.json();\r\n\r\n return this.handleResponse(data, prevGroup);\r\n } catch (error: any) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('Something went wrong when posting the envelope.');\r\n }\r\n let message = 'Something went wrong';\r\n\r\n if (error.message === 'Failed to fetch') {\r\n message = 'Lost connection... Please try again.';\r\n }\r\n return this.handleResponse({\r\n entries: [\r\n {\r\n id: uuid(),\r\n type: 'Error',\r\n timestamp: new Date().toISOString(),\r\n content: {\r\n message,\r\n },\r\n actions: {},\r\n tags: [],\r\n },\r\n ],\r\n });\r\n }\r\n }\r\n\r\n private async handleResponse(data: ServerEnvelope, prevGroup?: MessageGroup) {\r\n this.entries = this.entries.concat(data.entries);\r\n\r\n const widgetEntry = data.entries.find((e) => e.type === 'Widget');\r\n\r\n if (widgetEntry) {\r\n this.events.dispatch('provider:widget-entry', widgetEntry.content);\r\n }\r\n\r\n if (data.globalState) {\r\n this.globalState = data.globalState;\r\n }\r\n const groups = await processEntries(data.entries, prevGroup);\r\n return groups;\r\n }\r\n\r\n private getHttpOptions(envelope: ClientEnvelope) {\r\n const fetchOptions = {\r\n method: 'POST',\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n };\r\n return Object.assign({}, fetchOptions, {\r\n body: JSON.stringify(envelope),\r\n credentials: 'same-origin' as RequestCredentials,\r\n });\r\n }\r\n\r\n private getEntryOfAction(action: string) {\r\n return this.entries.find((entry) => !!entry.actions[action]);\r\n }\r\n}\r\n\r\nexport default HttpClient;\r\n","import { createStorageWriter, readStorage, StorageCategory } from '@telia-ace/widget-services';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { GlobalState, MessageGroup } from './types';\r\n\r\nclass Store {\r\n private enabled = false; // set whether or not to store data\r\n private sessionMessageStorageVariable: string = 'knowledge-bot-messages';\r\n private botProviderGlobalStateKey = 'bot-provider-global-state';\r\n private botProviderMetaStateKey = 'bot-provider-conversation-meta';\r\n\r\n constructor(private container: Container) {}\r\n\r\n async readGlobalState() {\r\n if (!this.enabled) {\r\n return undefined;\r\n }\r\n const state: GlobalState | undefined = await readStorage(\r\n this.container,\r\n this.botProviderGlobalStateKey\r\n );\r\n return state;\r\n }\r\n\r\n async readMetaState() {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n return readStorage(this.container, this.botProviderMetaStateKey);\r\n }\r\n\r\n async write(groups: MessageGroup[]) {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n return createStorageWriter(\r\n this.container,\r\n this.sessionMessageStorageVariable,\r\n StorageCategory.Necessary\r\n ).then((write) => {\r\n return write(groups);\r\n });\r\n }\r\n\r\n async read() {\r\n if (!this.enabled) {\r\n return [];\r\n }\r\n return readStorage<MessageGroup[]>(this.container, this.sessionMessageStorageVariable).then(\r\n (groups) => {\r\n return groups || [];\r\n }\r\n );\r\n }\r\n}\r\n\r\nexport default Store;\r\n","import { ComponentNodeController } from '@telia-ace/knowledge-widget-core';\r\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\r\nimport { createStorageWriter, StorageCategory } from '@telia-ace/widget-services';\r\nimport { uuid } from '@telia-ace/widget-utilities';\r\nimport { Container, EventManager, Widget } from '@webprovisions/platform';\r\nimport HttpClient from './http-client';\r\nimport Store from './store';\r\nimport { MessageGroup, ServerEntry } from './types';\r\nimport { createGroup, getKnowledgeBotEndpoint } from './utils';\r\n\r\nclass KnowledgeBotProvider {\r\n private agent: any;\r\n private user: any;\r\n private httpClient: HttpClient;\r\n private events: EventManager;\r\n private groups: MessageGroup[] = [];\r\n private store: Store;\r\n\r\n constructor(\r\n private container: Container,\r\n private conversation: any,\r\n component: ComponentNodeController\r\n ) {\r\n const { events } = this.container.get('$widget') as Widget;\r\n this.events = events;\r\n this.store = new Store(container);\r\n this.agent = conversation.createAgent({\r\n name: '',\r\n avatar: undefined,\r\n });\r\n this.user = conversation.user;\r\n const endpoint = getKnowledgeBotEndpoint(container, component);\r\n this.httpClient = new HttpClient(endpoint, events, this.store, this.container);\r\n\r\n this.events.subscribe('provider:widget-entry', (_event, data: ServerEntry['content']) => {\r\n this.onWidgetEntryReceived(data);\r\n });\r\n\r\n this.events.subscribe(\r\n 'provider:open-contact-method',\r\n async (_event, data: { contactMethod: any; entryId: string; actionKey: string }) => {\r\n const response = await this.httpClient.showContactMethodAction(data);\r\n\r\n if (response) {\r\n if (!!data.contactMethod.title) this.printUserMessage(data.contactMethod.title);\r\n this.onMessagesReceived(response);\r\n }\r\n }\r\n );\r\n }\r\n\r\n async initialize() {\r\n const loader = this.conversation.loading();\r\n\r\n const storedMeta: any = await this.store.readMetaState();\r\n if (storedMeta?.agent) {\r\n this.agent.update({\r\n name: storedMeta.agent.name,\r\n avatar: storedMeta.agent.avatar,\r\n });\r\n }\r\n\r\n const response = await this.httpClient.start();\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n\r\n loader();\r\n }\r\n\r\n async onMessagesReceived(groups: MessageGroup[]) {\r\n this.groups = this.groups.concat(groups);\r\n await this.store.write(this.groups);\r\n groups.forEach((group) => {\r\n const items = group.items.map((item) => item.message);\r\n if (group.isUser) {\r\n group.writer = this.user.print(items);\r\n } else {\r\n group.writer = this.agent.print(items);\r\n }\r\n });\r\n }\r\n\r\n async onInput(action: string | { [key: string]: any; actionKey: string; label?: string }) {\r\n const actionKey = typeof action === 'string' ? action : action.actionKey;\r\n\r\n switch (actionKey) {\r\n case 'next':\r\n {\r\n if (typeof action === 'string') {\r\n return;\r\n }\r\n const group = this.groups.find((other) => other.id === action.data?.groupId);\r\n\r\n if (group) {\r\n const response = await this.httpClient.nextAction(group);\r\n if (response) {\r\n const combined = response.items.map((item) => item.message);\r\n group.meta.paging = response?.meta.paging;\r\n group.writer.update(combined);\r\n }\r\n }\r\n }\r\n break;\r\n case 'help':\r\n {\r\n const loader = this.conversation.loading();\r\n\r\n const response = await this.httpClient.helpAction();\r\n loader();\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n }\r\n break;\r\n default:\r\n {\r\n if (typeof action !== 'string' && action.label) {\r\n this.printUserMessage(action.label);\r\n }\r\n const loader = this.conversation.loading();\r\n const response = await this.httpClient.defaultAction(actionKey);\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n loader();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private printUserMessage(message: string) {\r\n const group = createGroup({\r\n isUser: true,\r\n items: [\r\n {\r\n id: uuid(),\r\n isUser: true,\r\n message: [ConversationMessageListItemType.HTML, { body: message }],\r\n },\r\n ],\r\n });\r\n this.onMessagesReceived([group]);\r\n return group;\r\n }\r\n\r\n async onMessageSend(message: string) {\r\n const loader = this.conversation.loading();\r\n const response = await this.httpClient.sendMessage(message);\r\n\r\n this.printUserMessage(message);\r\n\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n loader();\r\n }\r\n\r\n private async onWidgetEntryReceived(data: ServerEntry['content']) {\r\n const agentSettings = {\r\n name: data.agent.name,\r\n avatar: data.agent.avatar,\r\n };\r\n this.agent.update(agentSettings);\r\n const write = await createStorageWriter(\r\n this.container,\r\n 'bot-provider-conversation-meta',\r\n StorageCategory.Necessary\r\n );\r\n write({\r\n agent: agentSettings,\r\n });\r\n }\r\n}\r\n\r\nexport default KnowledgeBotProvider;\r\n","import {\r\n ConversationPlatform,\r\n registerCustomMessageComponent,\r\n} from '@telia-ace/widget-conversation';\r\nimport { Container, Widget } from '@webprovisions/platform';\r\nimport KnowledgeBotProvider from './provider';\r\nimport { CustomMessageTypes } from './types';\r\n\r\nconst KnowledgeBotProviderPlugin = async (container: Container) => {\r\n const platform = await ConversationPlatform.getInstance(container);\r\n\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.ContactList,\r\n import('./ui/contact-method-list')\r\n );\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.ContactMethod,\r\n import('./ui/contact-method')\r\n );\r\n\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.NotificationList,\r\n import('./ui/notification-list')\r\n );\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.NoGoodAlternative,\r\n import('./ui/no-good-alternative')\r\n );\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.FeedbackList,\r\n import('./ui/feedback-list')\r\n );\r\n\r\n platform.registerProvider('ace-knowledge-bot', (conversation, component) => {\r\n const provider = new KnowledgeBotProvider(container, conversation, component);\r\n provider.initialize();\r\n\r\n component.actions.watch('conversation.user-submit', (input, next) => {\r\n provider.onMessageSend(input.text);\r\n });\r\n\r\n component.actions.watch('conversation.action', (input, next) => {\r\n provider.onInput(input);\r\n\r\n return next(input);\r\n });\r\n\r\n component.actions.create('evaluate', (input) => {\r\n const { events } = container.get('$widget') as Widget;\r\n events.dispatch('bot-provider:evaluate', input);\r\n });\r\n\r\n component.actions.create('submit', (input) => {\r\n const { events } = container.get('$widget') as Widget;\r\n events.dispatch('bot-provider:form-submitted', input);\r\n });\r\n });\r\n};\r\n\r\nexport default KnowledgeBotProviderPlugin;\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { useDispatch, SymbolBadge, Button, borderTabStyle } from "@telia-ace/knowledge-widget-ui";
2
+ import React from "react";
3
+ import styled, { css } from "styled-components";
4
+ import { m as messageContentPadding } from "./styles.js";
5
+ const NoGoodAlternative = ({ body }) => {
6
+ const dispatch = useDispatch();
7
+ return /* @__PURE__ */ React.createElement(Wrapper, null, /* @__PURE__ */ React.createElement(StyledButton, {
8
+ onClick: () => {
9
+ dispatch("action", "help");
10
+ },
11
+ "aria-label": body,
12
+ title: body
13
+ }, /* @__PURE__ */ React.createElement(SymbolBadge, {
14
+ size: 14,
15
+ symbol: {
16
+ type: "FontAwesome",
17
+ content: "meh-o"
18
+ }
19
+ }), /* @__PURE__ */ React.createElement("span", null, body)));
20
+ };
21
+ const Wrapper = styled.div`
22
+ display: flex;
23
+ align-items: center;
24
+ justify-content: center;
25
+ ${messageContentPadding}
26
+ `;
27
+ const StyledButton = styled(Button)`
28
+ > i,
29
+ svg {
30
+ margin-right: ${(p) => {
31
+ var _a;
32
+ return (_a = p.theme.sizes) == null ? void 0 : _a.small;
33
+ }};
34
+ }
35
+
36
+ &:focus {
37
+ ${(p) => {
38
+ var _a;
39
+ return ((_a = p.theme.accessibility) == null ? void 0 : _a.isTabbing) && css`
40
+ ${borderTabStyle}
41
+ `;
42
+ }};
43
+ }
44
+ `;
45
+ export { NoGoodAlternative as default };
46
+ //# sourceMappingURL=no-good-alternative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-good-alternative.js","sources":["../src/ui/no-good-alternative.tsx"],"sourcesContent":["import { borderTabStyle, Button, SymbolBadge, useDispatch } from '@telia-ace/knowledge-widget-ui';\r\nimport React from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { messageContentPadding } from './styles';\r\n\r\ntype Props = {\r\n body: string;\r\n};\r\nconst NoGoodAlternative: React.FC<Props> = ({ body }) => {\r\n const dispatch = useDispatch();\r\n return (\r\n <Wrapper>\r\n <StyledButton\r\n onClick={() => {\r\n dispatch('action', 'help');\r\n }}\r\n aria-label={body}\r\n title={body}\r\n >\r\n <SymbolBadge\r\n size={14}\r\n symbol={{\r\n type: 'FontAwesome',\r\n content: 'meh-o',\r\n }}\r\n />\r\n <span>{body}</span>\r\n </StyledButton>\r\n </Wrapper>\r\n );\r\n};\r\n\r\nexport default NoGoodAlternative;\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n ${messageContentPadding}\r\n`;\r\n\r\nconst StyledButton = styled(Button)`\r\n > i,\r\n svg {\r\n margin-right: ${(p) => p.theme.sizes?.small};\r\n }\r\n\r\n &:focus {\r\n ${(p) =>\r\n p.theme.accessibility?.isTabbing &&\r\n css`\r\n ${borderTabStyle}\r\n `};\r\n }\r\n`;\r\n"],"names":[],"mappings":";;;;AAQM,MAAA,oBAAqC,CAAC,EAAE,WAAW;AACrD,QAAM,WAAW;AAEb,SAAA,sBAAA,cAAC,eACI,sBAAA,cAAA,cAAA;AAAA,IACG,SAAS,MAAM;AACX,eAAS,UAAU,MAAM;AAAA,IAC7B;AAAA,IACA,cAAY;AAAA,IACZ,OAAO;AAAA,EAAA,GAEN,sBAAA,cAAA,aAAA;AAAA,IACG,MAAM;AAAA,IACN,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACb;AAAA,EAAA,CACJ,GACA,sBAAA,cAAC,QAAM,MAAA,IAAK,CAChB,CACJ;AAER;AAIA,MAAM,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA,MAIjB;AAAA;AAGN,MAAM,eAAe,OAAO,MAAM;AAAA;AAAA;AAAA,wBAGV,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA;AAAA;AAAA;AAAA,UAIpC,CAAC,MAAA;;AACC,kBAAE,MAAM,kBAAR,mBAAuB,cACvB;AAAA,kBACM;AAAA;AAAA;AAAA;AAAA;;"}
@@ -0,0 +1,74 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ var __objRest = (source, exclude) => {
18
+ var target = {};
19
+ for (var prop in source)
20
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
21
+ target[prop] = source[prop];
22
+ if (source != null && __getOwnPropSymbols)
23
+ for (var prop of __getOwnPropSymbols(source)) {
24
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
25
+ target[prop] = source[prop];
26
+ }
27
+ return target;
28
+ };
29
+ import { NotificationList as NotificationList$1 } from "@telia-ace/knowledge-widget-ui";
30
+ import React, { useMemo } from "react";
31
+ import styled from "styled-components";
32
+ import { m as messageContentPadding } from "./styles.js";
33
+ const NotificationList = (_a) => {
34
+ var _b = _a, { id, header, items, symbol, className } = _b, other = __objRest(_b, ["id", "header", "items", "symbol", "className"]);
35
+ const list = useMemo(() => {
36
+ return {
37
+ id,
38
+ title: header,
39
+ symbol,
40
+ defaultHeaderOptions: {
41
+ visible: true
42
+ },
43
+ notifications: items.map((item) => ({
44
+ id: item.id.toString(),
45
+ title: item.title,
46
+ body: item.body,
47
+ modified: item.modified,
48
+ expandable: true
49
+ }))
50
+ };
51
+ }, [header, items]);
52
+ if (!list) {
53
+ return null;
54
+ }
55
+ return /* @__PURE__ */ React.createElement(StyledNotificationListUi, __spreadValues({
56
+ className,
57
+ showHeader: true,
58
+ notificationList: list,
59
+ loading: false
60
+ }, other));
61
+ };
62
+ const StyledNotificationListUi = styled(NotificationList$1)`
63
+ ${messageContentPadding}
64
+ min-width: 10em;
65
+
66
+ span {
67
+ color: ${(p) => {
68
+ var _a;
69
+ return (_a = p.theme.colors) == null ? void 0 : _a.text;
70
+ }};
71
+ }
72
+ `;
73
+ export { NotificationList as default };
74
+ //# sourceMappingURL=notification-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-list.js","sources":["../src/ui/notification-list.tsx"],"sourcesContent":["import { NotificationList as NotificationListUi, Symbol } from '@telia-ace/knowledge-widget-ui';\r\nimport React, { useMemo } from 'react';\r\nimport styled from 'styled-components';\r\nimport { messageContentPadding } from './styles';\r\n\r\ntype Props = {\r\n id: string;\r\n header: string;\r\n items: any[];\r\n symbol?: Symbol;\r\n className?: string;\r\n};\r\nconst NotificationList: React.FC<Props> = ({ id, header, items, symbol, className, ...other }) => {\r\n const list = useMemo(() => {\r\n return {\r\n id: id,\r\n title: header,\r\n symbol,\r\n defaultHeaderOptions: {\r\n visible: true,\r\n },\r\n notifications: items.map((item) => ({\r\n id: item.id.toString(),\r\n title: item.title,\r\n body: item.body,\r\n modified: item.modified,\r\n expandable: true,\r\n })),\r\n };\r\n }, [header, items]);\r\n\r\n if (!list) {\r\n return null;\r\n }\r\n\r\n return (\r\n <StyledNotificationListUi\r\n className={className}\r\n showHeader={true}\r\n notificationList={list}\r\n loading={false}\r\n {...other}\r\n />\r\n );\r\n};\r\n\r\nexport default NotificationList;\r\n\r\nconst StyledNotificationListUi = styled(NotificationListUi)`\r\n ${messageContentPadding}\r\n min-width: 10em;\r\n\r\n span {\r\n color: ${(p) => p.theme.colors?.text};\r\n }\r\n`;\r\n"],"names":["NotificationListUi"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYM,MAAA,mBAAoC,CAAC,OAAuD;AAAvD,eAAE,MAAI,QAAQ,OAAO,QAAQ,cAA7B,IAA2C,kBAA3C,IAA2C,CAAzC,MAAI,UAAQ,SAAO,UAAQ;AAC9D,QAAA,OAAO,QAAQ,MAAM;AAChB,WAAA;AAAA,MACH;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,sBAAsB;AAAA,QAClB,SAAS;AAAA,MACb;AAAA,MACA,eAAe,MAAM,IAAI,CAAC,SAAU;AAAA,QAChC,IAAI,KAAK,GAAG,SAAS;AAAA,QACrB,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK;AAAA,QACX,UAAU,KAAK;AAAA,QACf,YAAY;AAAA,MAAA,EACd;AAAA,IAAA;AAAA,EACN,GACD,CAAC,QAAQ,KAAK,CAAC;AAElB,MAAI,CAAC,MAAM;AACA,WAAA;AAAA,EACX;AAEA,SACK,sBAAA,cAAA,0BAAA;AAAA,IACG;AAAA,IACA,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,SAAS;AAAA,KACL,MACR;AAER;AAIA,MAAM,2BAA2B,OAAOA,kBAAkB;AAAA,MACpD;AAAA;AAAA;AAAA;AAAA,iBAIW,CAAC,MAAM;;AAAA,iBAAE,MAAM,WAAR,mBAAgB;AAAA;AAAA;AAAA;;"}
@@ -0,0 +1,3 @@
1
+ import { Container } from '@webprovisions/platform';
2
+ declare const KnowledgeBotProviderPlugin: (container: Container) => Promise<void>;
3
+ export default KnowledgeBotProviderPlugin;
@@ -0,0 +1,25 @@
1
+ import { ComponentNodeController } from '@telia-ace/knowledge-widget-core';
2
+ import { Container } from '@webprovisions/platform';
3
+ import { MessageGroup } from './types';
4
+ declare class KnowledgeBotProvider {
5
+ private container;
6
+ private conversation;
7
+ private agent;
8
+ private user;
9
+ private httpClient;
10
+ private events;
11
+ private groups;
12
+ private store;
13
+ constructor(container: Container, conversation: any, component: ComponentNodeController);
14
+ initialize(): Promise<void>;
15
+ onMessagesReceived(groups: MessageGroup[]): Promise<void>;
16
+ onInput(action: string | {
17
+ [key: string]: any;
18
+ actionKey: string;
19
+ label?: string;
20
+ }): Promise<void>;
21
+ private printUserMessage;
22
+ onMessageSend(message: string): Promise<void>;
23
+ private onWidgetEntryReceived;
24
+ }
25
+ export default KnowledgeBotProvider;
@@ -0,0 +1,15 @@
1
+ import { Container } from '@webprovisions/platform';
2
+ import { GlobalState, MessageGroup } from './types';
3
+ declare class Store {
4
+ private container;
5
+ private enabled;
6
+ private sessionMessageStorageVariable;
7
+ private botProviderGlobalStateKey;
8
+ private botProviderMetaStateKey;
9
+ constructor(container: Container);
10
+ readGlobalState(): Promise<GlobalState | undefined>;
11
+ readMetaState(): Promise<unknown>;
12
+ write(groups: MessageGroup[]): Promise<void>;
13
+ read(): Promise<MessageGroup[]>;
14
+ }
15
+ export default Store;
package/dist/styles.js ADDED
@@ -0,0 +1,13 @@
1
+ import { css } from "styled-components";
2
+ const messageContentPadding = css`
3
+ margin: ${(p) => {
4
+ var _a;
5
+ return (_a = p.theme.sizes) == null ? void 0 : _a.normal;
6
+ }} 0;
7
+ padding: 0 ${(p) => {
8
+ var _a;
9
+ return (_a = p.theme.sizes) == null ? void 0 : _a.normal;
10
+ }};
11
+ `;
12
+ export { messageContentPadding as m };
13
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sources":["../src/ui/styles.tsx"],"sourcesContent":["import { css } from 'styled-components';\r\n\r\nexport const messageContentPadding = css`\r\n margin: ${(p) => p.theme.sizes?.normal} 0;\r\n padding: 0 ${(p) => p.theme.sizes?.normal};\r\n`;\r\n"],"names":[],"mappings":";AAEO,MAAM,wBAAwB;AAAA,cACvB,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA,iBACnB,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA;;"}
@@ -0,0 +1,78 @@
1
+ import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';
2
+ export declare enum CustomMessageTypes {
3
+ ContactMethod = "ace-knowledge-bot-contact-method",
4
+ ContactList = "ace-knowledge-bot-contact-list",
5
+ FeedbackList = "ace-knowledge-bot-feedback-list",
6
+ NotificationList = "ace-knowledge-bot-notification-list",
7
+ NoGoodAlternative = "ace-knowledge-bot-no-good-alternative"
8
+ }
9
+ declare type LooseObject = {
10
+ [key: string]: any;
11
+ };
12
+ export interface ActionItem {
13
+ label: string;
14
+ actionKey: string;
15
+ data?: any;
16
+ }
17
+ export interface MessageGroup {
18
+ id: string;
19
+ isUser: boolean;
20
+ items: MessageGroupItem[];
21
+ writer?: any;
22
+ meta: {
23
+ [key: string]: any;
24
+ };
25
+ }
26
+ export interface MessageGroupItem {
27
+ id: string;
28
+ groupId: string;
29
+ isUser: boolean;
30
+ message: [ConversationMessageListItemType | CustomMessageTypes, any];
31
+ }
32
+ export interface ClientEnvelope {
33
+ command?: LooseObject;
34
+ action?: {
35
+ key: string;
36
+ content: any;
37
+ };
38
+ globalState?: LooseObject;
39
+ localState?: LooseObject;
40
+ clientId?: string;
41
+ }
42
+ export interface ServerEnvelope {
43
+ clientId?: string | undefined;
44
+ entries: ServerEntry[];
45
+ globalState?: GlobalState;
46
+ resolveCommand?: string;
47
+ clientEnvelope?: ClientEnvelope;
48
+ }
49
+ export interface GlobalState {
50
+ completedInteractionsCount: number;
51
+ lastQuestion?: string;
52
+ lastBotGuide: number;
53
+ lastGuideTitle?: string;
54
+ site: string;
55
+ invincibleParameters: object;
56
+ }
57
+ export interface ServerEntry {
58
+ id: string;
59
+ type: string;
60
+ content: any;
61
+ actions: {
62
+ [key: string]: any;
63
+ };
64
+ tags: string[];
65
+ relation?: string;
66
+ timestamp: string;
67
+ localState?: {
68
+ [key: string]: any;
69
+ };
70
+ }
71
+ export interface ListContent {
72
+ header?: string;
73
+ actions: ActionItem[];
74
+ contactMethodIds?: string[];
75
+ entryId: string;
76
+ groupId: string;
77
+ }
78
+ export {};
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { ActionItem } from '../types';
3
+ declare type Props = {
4
+ actions: ActionItem[];
5
+ contactMethodIds?: string[];
6
+ entryId: string;
7
+ groupId: string;
8
+ };
9
+ declare const ContactMethodList: React.FC<Props>;
10
+ export default ContactMethodList;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ declare type Props = {
3
+ contactMethodId: string;
4
+ groupId: string;
5
+ guideId?: string;
6
+ className?: string;
7
+ };
8
+ declare const ContactMethod: React.FC<Props>;
9
+ export default ContactMethod;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ declare type Props = {
3
+ actions: {
4
+ [key: string]: string;
5
+ }[];
6
+ };
7
+ declare const FeedbackList: React.FC<Props>;
8
+ export default FeedbackList;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ declare type Props = {
3
+ body: string;
4
+ };
5
+ declare const NoGoodAlternative: React.FC<Props>;
6
+ export default NoGoodAlternative;
@@ -0,0 +1,11 @@
1
+ import { Symbol } from '@telia-ace/knowledge-widget-ui';
2
+ import React from 'react';
3
+ declare type Props = {
4
+ id: string;
5
+ header: string;
6
+ items: any[];
7
+ symbol?: Symbol;
8
+ className?: string;
9
+ };
10
+ declare const NotificationList: React.FC<Props>;
11
+ export default NotificationList;
@@ -0,0 +1 @@
1
+ export declare const messageContentPadding: import("styled-components").FlattenInterpolation<import("styled-components").ThemeProps<any>>;
@@ -0,0 +1,26 @@
1
+ import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';
2
+ import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';
3
+ import { Container } from '@webprovisions/platform';
4
+ import { CustomMessageTypes, MessageGroup, MessageGroupItem } from './types';
5
+ export declare const createGroup: ({ isUser, items, meta, }: {
6
+ isUser: boolean;
7
+ items?: Partial<MessageGroupItem>[] | undefined;
8
+ meta?: {
9
+ [key: string]: any;
10
+ } | undefined;
11
+ }) => MessageGroup;
12
+ export declare const contactMethodFromLegacy: ({ id, title, defaultIcon, exits: [exit], exitType, confirmationText, expandFormAutomatically, form, description, }: any, options?: {
13
+ validation?: any;
14
+ guideId?: string;
15
+ }) => any;
16
+ export declare const getListType: (state: any) => ConversationMessageListItemType.LinkList | ConversationMessageListItemType.ButtonList | CustomMessageTypes.ContactList | CustomMessageTypes.FeedbackList;
17
+ export declare const getKnowledgeBotEndpoint: (container: Container, component: any) => string;
18
+ export declare const updateForm: (contactMethod: ContactMethodType, { submit, errors, meta, }: {
19
+ submit: string;
20
+ errors?: {
21
+ [key: string]: string;
22
+ } | undefined;
23
+ meta?: {
24
+ [key: string]: string;
25
+ } | undefined;
26
+ }) => any;
package/package.json CHANGED
@@ -1,45 +1,44 @@
1
- {
2
- "name": "@telia-ace/knowledge-widget-bot-provider",
3
- "version": "0.0.1-alpha.5",
4
- "description": "Bot Provider Plugin ACE Knowledge Widgets.",
5
- "license": "SEE LICENSE IN LICENSE.txt",
6
- "author": "Telia Company AB",
7
- "keywords": [
8
- "telia"
9
- ],
10
- "main": "lib/index.js",
11
- "module": "lib-esm/index.js",
12
- "files": [
13
- "LICENSE.txt",
14
- "README.md",
15
- "lib/",
16
- "lib-esm/"
17
- ],
18
- "publishConfig": {
19
- "access": "public"
20
- },
21
- "scripts": {
22
- "clean": "cleandir lib && cleandir lib-esm",
23
- "compile": "tsc -p tsconfig.cjs.json && tsc -p tsconfig.esm.json"
24
- },
25
- "sideEffects": false,
26
- "typings": "lib/index.d.ts",
27
- "dependencies": {
28
- "@telia-ace/knowledge-widget-adapters": "^1.0.2",
29
- "@telia-ace/knowledge-widget-core": "^1.0.2",
30
- "@telia-ace/knowledge-widget-types-grid": "^1.0.2",
31
- "@telia-ace/widget-components-area": "^1.0.2",
32
- "@telia-ace/widget-components-widget-header": "^1.0.2",
33
- "@telia-ace/widget-conversation": "^1.0.2",
34
- "@telia-ace/widget-forms": "^1.0.2",
35
- "@telia-ace/widget-services": "^1.0.2",
36
- "@telia-ace/widget-types-grid": "^1.0.2",
37
- "@telia-ace/widget-ui": "^1.0.2",
38
- "@telia-ace/widget-utilities": "^1.0.1",
39
- "@webprovisions/bootstrapping": "^1.0.12",
40
- "uuid": "^8.3.2"
41
- },
42
- "devDependencies": {
43
- "@types/uuid": "^8.3.4"
44
- }
45
- }
1
+ {
2
+ "name": "@telia-ace/knowledge-widget-bot-provider",
3
+ "version": "0.0.1-alpha.52",
4
+ "description": "Bot Provider Plugin ACE Knowledge Widgets.",
5
+ "license": "SEE LICENSE IN LICENSE.txt",
6
+ "author": "Telia Company AB",
7
+ "keywords": [
8
+ "telia"
9
+ ],
10
+ "module": "dist/index.js",
11
+ "types": "dist/index.d.ts",
12
+ "files": [
13
+ "LICENSE.txt",
14
+ "README.md",
15
+ "dist/"
16
+ ],
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "scripts": {
21
+ "clean": "rimraf ./dist",
22
+ "precompile": "tsc -emitDeclarationOnly",
23
+ "compile": "vite build"
24
+ },
25
+ "sideEffects": false,
26
+ "dependencies": {
27
+ "@telia-ace/knowledge-widget-adapters": "^1.0.19",
28
+ "@telia-ace/knowledge-widget-types-grid": "^1.0.19",
29
+ "@telia-ace/knowledge-widget-ui": "^1.0.16",
30
+ "@telia-ace/widget-conversation": "^1.0.17",
31
+ "@telia-ace/widget-forms": "^1.0.13",
32
+ "@telia-ace/widget-services": "^1.0.9",
33
+ "@telia-ace/widget-utilities": "^1.0.2",
34
+ "@webprovisions/bootstrapping": "^1.0.12"
35
+ },
36
+ "peerDependencies": {
37
+ "react": "^16.8.0",
38
+ "styled-components": "^4.3.2"
39
+ },
40
+ "devDependencies": {
41
+ "@types/uuid": "^8.3.4"
42
+ },
43
+ "gitHead": "1ebcbf462e3e5d7ba00dfce49f11b5936c7da555"
44
+ }
@@ -1,15 +0,0 @@
1
- import { Message } from '../contract/model/conversation-api-model/message.model';
2
- import EntryInterface from '../interface/entry.interface';
3
- export default class ChatClient {
4
- entryInterface: EntryInterface;
5
- constructor();
6
- static initialize(user: any, agent: any): void;
7
- processMessageArrayAndStoreIt(messages: Message[]): void;
8
- updateMessageArrayAndStoreIt(messages: Message[]): void;
9
- printUserMessageAndStoreIt(action: string): void;
10
- private postUserMessage;
11
- private postAgentMessage;
12
- private getTitleFromEntry;
13
- private getTitleFromText;
14
- private getTitleFromList;
15
- }