@botpress/webchat 0.5.0 → 1.0.0

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 (295) hide show
  1. package/dist/App.d.ts +10 -0
  2. package/dist/Utils/colors.d.ts +18 -0
  3. package/dist/Utils/eventEmitter.d.ts +12 -0
  4. package/dist/Utils/index.d.ts +2 -0
  5. package/dist/client/MessagingClient.d.ts +27 -0
  6. package/dist/client/adapters/Audio.d.ts +19 -0
  7. package/dist/client/adapters/Card.d.ts +188 -0
  8. package/dist/client/adapters/Carousel.d.ts +147 -0
  9. package/dist/client/adapters/Choice.d.ts +45 -0
  10. package/dist/client/adapters/Dropdown.d.ts +46 -0
  11. package/dist/client/adapters/File.d.ts +19 -0
  12. package/dist/client/adapters/Image.d.ts +19 -0
  13. package/dist/client/adapters/Location.d.ts +27 -0
  14. package/dist/client/adapters/Message.d.ts +433 -0
  15. package/dist/client/adapters/Text.d.ts +20 -0
  16. package/dist/client/adapters/Utils.d.ts +5 -0
  17. package/dist/client/adapters/Video.d.ts +19 -0
  18. package/dist/client/adapters/Voice.d.ts +15 -0
  19. package/dist/client/adapters/index.d.ts +12 -0
  20. package/dist/client/index.d.ts +2 -0
  21. package/dist/components/Avatar.d.ts +6 -0
  22. package/dist/components/Block.d.ts +4 -0
  23. package/dist/components/Composer.d.ts +12 -14
  24. package/dist/components/Container.d.ts +2 -12
  25. package/dist/components/Header.d.ts +36 -26
  26. package/dist/components/LoadingIndicator.d.ts +2 -0
  27. package/dist/components/Message.d.ts +7 -0
  28. package/dist/components/MessageList.d.ts +2 -0
  29. package/dist/components/Modal.d.ts +17 -0
  30. package/dist/components/RestartConversation.d.ts +5 -0
  31. package/dist/components/Webchat.d.ts +6 -0
  32. package/dist/components/dev-tools/DevTools.d.ts +1 -0
  33. package/dist/components/dev-tools/configuration.d.ts +2 -0
  34. package/dist/components/dev-tools/helpers.d.ts +5 -0
  35. package/dist/components/index.d.ts +12 -0
  36. package/dist/components/renderers/Audio.d.ts +3 -0
  37. package/dist/components/renderers/Bubble.d.ts +5 -0
  38. package/dist/components/renderers/Button.d.ts +4 -0
  39. package/dist/components/renderers/Carousel.d.ts +3 -0
  40. package/dist/components/renderers/Column.d.ts +5 -0
  41. package/dist/components/renderers/Dropdown.d.ts +5 -0
  42. package/dist/components/renderers/File.d.ts +3 -0
  43. package/dist/components/renderers/Image.d.ts +3 -0
  44. package/dist/components/renderers/Location.d.ts +3 -0
  45. package/dist/components/renderers/Row.d.ts +5 -0
  46. package/dist/components/renderers/Text.d.ts +4 -0
  47. package/dist/components/renderers/Video.d.ts +3 -0
  48. package/dist/components/renderers/index.d.ts +2 -0
  49. package/dist/contexts/ComposerContext.d.ts +8 -0
  50. package/dist/contexts/MessageContext.d.ts +8 -0
  51. package/dist/contexts/ModalContext.d.ts +14 -0
  52. package/dist/contexts/WebchatContext.d.ts +56 -0
  53. package/dist/contexts/index.d.ts +4 -0
  54. package/dist/hooks/index.d.ts +3 -0
  55. package/dist/hooks/useImageSize.d.ts +2 -0
  56. package/dist/hooks/useRefresh.d.ts +10 -0
  57. package/dist/hooks/useWebchatStore.d.ts +30 -0
  58. package/dist/index.d.ts +3 -17
  59. package/dist/index.js +43569 -48
  60. package/dist/index.umd.cjs +702 -0
  61. package/dist/main.d.ts +11 -13
  62. package/dist/providers/ModalProvider.d.ts +8 -0
  63. package/dist/providers/WebchatProvider.d.ts +13 -0
  64. package/dist/providers/index.d.ts +2 -0
  65. package/dist/schemas/index.d.ts +1 -0
  66. package/dist/schemas/theme.d.ts +3371 -0
  67. package/dist/services/clipboard.d.ts +1 -0
  68. package/dist/services/images.d.ts +2 -0
  69. package/dist/services/index.d.ts +3 -0
  70. package/dist/services/toast.d.ts +17 -0
  71. package/dist/themes/dawn.d.ts +2 -0
  72. package/dist/themes/duskTheme.d.ts +2 -0
  73. package/dist/themes/eggplant.d.ts +2 -0
  74. package/dist/themes/galaxy.d.ts +2 -0
  75. package/dist/themes/index.d.ts +6 -0
  76. package/dist/themes/midnight.d.ts +2 -0
  77. package/dist/themes/prism.d.ts +2 -0
  78. package/dist/twind.config.d.ts +9 -0
  79. package/dist/types/block-type.d.ts +93 -0
  80. package/dist/types/image.d.ts +11 -0
  81. package/dist/types/index.d.ts +2 -0
  82. package/dist/vite.svg +1 -0
  83. package/index.html +18 -0
  84. package/package.json +60 -48
  85. package/public/vite.svg +1 -0
  86. package/src/App.tsx +41 -0
  87. package/src/Utils/colors.ts +45 -0
  88. package/src/Utils/eventEmitter.ts +31 -0
  89. package/src/Utils/index.ts +2 -0
  90. package/src/assets/check-circle-bold.svg +5 -0
  91. package/src/assets/chevron-up.svg +3 -0
  92. package/src/assets/file-05.svg +6 -0
  93. package/src/assets/globe-02.svg +6 -0
  94. package/src/assets/help-circle.svg +3 -0
  95. package/src/assets/info-circle.svg +3 -0
  96. package/src/assets/lock-01.svg +4 -0
  97. package/src/assets/mail-01.svg +6 -0
  98. package/src/assets/minus-circle.svg +3 -0
  99. package/src/assets/phone.svg +6 -0
  100. package/src/assets/send-03.svg +4 -0
  101. package/src/assets/share-04.svg +5 -0
  102. package/src/assets/slash-circle-01.svg +3 -0
  103. package/src/assets/x-circle-bold.svg +5 -0
  104. package/src/assets/x-close.svg +3 -0
  105. package/src/assets/x.svg +3 -0
  106. package/src/client/MessagingClient.ts +87 -0
  107. package/src/client/adapters/Audio.ts +10 -0
  108. package/src/client/adapters/Card.ts +104 -0
  109. package/src/client/adapters/Carousel.ts +11 -0
  110. package/src/client/adapters/Choice.ts +48 -0
  111. package/src/client/adapters/Dropdown.ts +39 -0
  112. package/src/client/adapters/File.ts +10 -0
  113. package/src/client/adapters/Image.ts +10 -0
  114. package/src/client/adapters/Location.ts +18 -0
  115. package/src/client/adapters/Message.ts +26 -0
  116. package/src/client/adapters/Text.ts +11 -0
  117. package/src/client/adapters/Utils.ts +11 -0
  118. package/src/client/adapters/Video.ts +10 -0
  119. package/src/client/adapters/Voice.ts +9 -0
  120. package/src/client/adapters/index.ts +12 -0
  121. package/src/client/index.ts +2 -0
  122. package/src/components/Avatar.tsx +22 -0
  123. package/src/components/Block.tsx +17 -0
  124. package/src/components/Composer.tsx +115 -0
  125. package/src/components/Container.tsx +17 -0
  126. package/src/components/Header.tsx +141 -0
  127. package/src/components/LoadingIndicator.tsx +15 -0
  128. package/src/components/Message.tsx +52 -0
  129. package/src/components/MessageList.tsx +75 -0
  130. package/src/components/Modal.tsx +49 -0
  131. package/src/components/RestartConversation.tsx +52 -0
  132. package/src/components/Webchat.tsx +68 -0
  133. package/src/components/dev-tools/DevTools.tsx +496 -0
  134. package/src/components/dev-tools/configuration.tsx +27 -0
  135. package/src/components/dev-tools/helpers.ts +21 -0
  136. package/src/components/index.ts +12 -0
  137. package/src/components/renderers/Audio.tsx +11 -0
  138. package/src/components/renderers/Bubble.tsx +12 -0
  139. package/src/components/renderers/Button.tsx +59 -0
  140. package/src/components/renderers/Carousel.tsx +51 -0
  141. package/src/components/renderers/Column.tsx +22 -0
  142. package/src/components/renderers/Dropdown.tsx +170 -0
  143. package/src/components/renderers/File.tsx +13 -0
  144. package/src/components/renderers/Image.tsx +63 -0
  145. package/src/components/renderers/Location.tsx +16 -0
  146. package/src/components/renderers/Row.tsx +22 -0
  147. package/src/components/renderers/Text.tsx +32 -0
  148. package/src/components/renderers/Video.tsx +11 -0
  149. package/src/components/renderers/index.ts +28 -0
  150. package/src/contexts/ComposerContext.ts +16 -0
  151. package/src/contexts/MessageContext.ts +16 -0
  152. package/src/contexts/ModalContext.ts +19 -0
  153. package/src/contexts/WebchatContext.ts +61 -0
  154. package/src/contexts/index.ts +4 -0
  155. package/src/hooks/index.ts +3 -0
  156. package/src/hooks/useImageSize.ts +30 -0
  157. package/src/hooks/useRefresh.ts +33 -0
  158. package/src/hooks/useWebchatStore.ts +45 -0
  159. package/src/index.css +18 -0
  160. package/src/index.ts +3 -0
  161. package/src/main.tsx +33 -0
  162. package/src/providers/ModalProvider.tsx +35 -0
  163. package/src/providers/WebchatProvider.tsx +107 -0
  164. package/src/providers/index.ts +2 -0
  165. package/src/schemas/index.ts +1 -0
  166. package/src/schemas/theme.ts +188 -0
  167. package/src/services/clipboard.ts +8 -0
  168. package/src/services/images.ts +39 -0
  169. package/src/services/index.ts +3 -0
  170. package/src/services/toast.tsx +71 -0
  171. package/src/themes/dawn.ts +277 -0
  172. package/src/themes/duskTheme.ts +349 -0
  173. package/src/themes/eggplant.ts +353 -0
  174. package/src/themes/galaxy.ts +323 -0
  175. package/src/themes/index.ts +6 -0
  176. package/src/themes/midnight.ts +276 -0
  177. package/src/themes/prism.ts +349 -0
  178. package/src/twind.config.ts +31 -0
  179. package/src/types/block-type.ts +150 -0
  180. package/src/types/image.ts +10 -0
  181. package/src/types/index.ts +2 -0
  182. package/src/vite-env.d.ts +1 -0
  183. package/tailwind.config.js +0 -0
  184. package/tsconfig.json +30 -0
  185. package/tsconfig.node.json +10 -0
  186. package/vite.config.ts +31 -0
  187. package/README.md +0 -31
  188. package/assets/fonts/roboto/roboto.woff2 +0 -0
  189. package/assets/fonts/roboto/roboto500.woff2 +0 -0
  190. package/assets/fonts/roboto.css +0 -128
  191. package/assets/notification.mp3 +0 -0
  192. package/dist/components/Composer.js +0 -118
  193. package/dist/components/Container.js +0 -62
  194. package/dist/components/ConversationList.d.ts +0 -10
  195. package/dist/components/ConversationList.js +0 -41
  196. package/dist/components/Footer.d.ts +0 -3
  197. package/dist/components/Footer.js +0 -21
  198. package/dist/components/Header.js +0 -181
  199. package/dist/components/VoiceRecorder.d.ts +0 -10
  200. package/dist/components/VoiceRecorder.js +0 -137
  201. package/dist/components/common/Avatar/index.d.ts +0 -9
  202. package/dist/components/common/Avatar/index.js +0 -13
  203. package/dist/components/common/BotInfo/index.d.ts +0 -10
  204. package/dist/components/common/BotInfo/index.js +0 -102
  205. package/dist/components/common/BotInfo/style.scss +0 -88
  206. package/dist/components/common/ConfirmDialog/index.d.ts +0 -11
  207. package/dist/components/common/ConfirmDialog/index.js +0 -78
  208. package/dist/components/common/ConfirmDialog/style.module.scss +0 -48
  209. package/dist/components/common/Dialog/index.d.ts +0 -17
  210. package/dist/components/common/Dialog/index.js +0 -57
  211. package/dist/components/common/Dialog/style.module.scss +0 -29
  212. package/dist/components/common/ToolTip/index.d.ts +0 -10
  213. package/dist/components/common/ToolTip/index.js +0 -163
  214. package/dist/components/common/ToolTip/style.module.scss +0 -108
  215. package/dist/components/common/ToolTip/utils.d.ts +0 -15
  216. package/dist/components/common/ToolTip/utils.js +0 -78
  217. package/dist/components/common/variables.scss +0 -38
  218. package/dist/components/messages/InlineFeedback.d.ts +0 -11
  219. package/dist/components/messages/InlineFeedback.js +0 -56
  220. package/dist/components/messages/Message.d.ts +0 -11
  221. package/dist/components/messages/Message.js +0 -106
  222. package/dist/components/messages/MessageGroup.d.ts +0 -23
  223. package/dist/components/messages/MessageGroup.js +0 -63
  224. package/dist/components/messages/MessageList.d.ts +0 -10
  225. package/dist/components/messages/MessageList.js +0 -154
  226. package/dist/core/api.d.ts +0 -23
  227. package/dist/core/api.js +0 -117
  228. package/dist/core/constants.d.ts +0 -14
  229. package/dist/core/constants.js +0 -29
  230. package/dist/core/socket.d.ts +0 -14
  231. package/dist/core/socket.js +0 -57
  232. package/dist/declaration.d.ts +0 -1
  233. package/dist/declaration.js +0 -1
  234. package/dist/fonts/roboto.d.ts +0 -4
  235. package/dist/fonts/roboto.js +0 -9
  236. package/dist/globals.d.ts +0 -7
  237. package/dist/globals.js +0 -2
  238. package/dist/icons/Add.d.ts +0 -6
  239. package/dist/icons/Add.js +0 -10
  240. package/dist/icons/Cancel.d.ts +0 -5
  241. package/dist/icons/Cancel.js +0 -10
  242. package/dist/icons/Chat.d.ts +0 -6
  243. package/dist/icons/Chat.js +0 -9
  244. package/dist/icons/Close.d.ts +0 -3
  245. package/dist/icons/Close.js +0 -10
  246. package/dist/icons/Delete.d.ts +0 -3
  247. package/dist/icons/Delete.js +0 -11
  248. package/dist/icons/Download.d.ts +0 -3
  249. package/dist/icons/Download.js +0 -10
  250. package/dist/icons/Email.d.ts +0 -3
  251. package/dist/icons/Email.js +0 -8
  252. package/dist/icons/Information.d.ts +0 -3
  253. package/dist/icons/Information.js +0 -12
  254. package/dist/icons/List.d.ts +0 -3
  255. package/dist/icons/List.js +0 -15
  256. package/dist/icons/Microphone.d.ts +0 -5
  257. package/dist/icons/Microphone.js +0 -12
  258. package/dist/icons/Phone.d.ts +0 -3
  259. package/dist/icons/Phone.js +0 -8
  260. package/dist/icons/Reload.d.ts +0 -3
  261. package/dist/icons/Reload.js +0 -10
  262. package/dist/icons/ThumbsDown.d.ts +0 -3
  263. package/dist/icons/ThumbsDown.js +0 -11
  264. package/dist/icons/ThumbsUp.d.ts +0 -3
  265. package/dist/icons/ThumbsUp.js +0 -11
  266. package/dist/icons/Website.d.ts +0 -3
  267. package/dist/icons/Website.js +0 -8
  268. package/dist/main.js +0 -336
  269. package/dist/store/composer.d.ts +0 -17
  270. package/dist/store/composer.js +0 -98
  271. package/dist/store/index.d.ts +0 -82
  272. package/dist/store/index.js +0 -576
  273. package/dist/store/view.d.ts +0 -61
  274. package/dist/store/view.js +0 -361
  275. package/dist/translations/ar.json +0 -30
  276. package/dist/translations/de.json +0 -32
  277. package/dist/translations/en.json +0 -40
  278. package/dist/translations/es.json +0 -19
  279. package/dist/translations/fr.json +0 -40
  280. package/dist/translations/index.d.ts +0 -9
  281. package/dist/translations/index.js +0 -95
  282. package/dist/translations/it.json +0 -38
  283. package/dist/translations/pt.json +0 -19
  284. package/dist/translations/ru.json +0 -24
  285. package/dist/translations/uk.json +0 -24
  286. package/dist/typings.d.ts +0 -378
  287. package/dist/typings.js +0 -2
  288. package/dist/utils/analytics.d.ts +0 -5
  289. package/dist/utils/analytics.js +0 -37
  290. package/dist/utils/index.d.ts +0 -3
  291. package/dist/utils/index.js +0 -27
  292. package/dist/utils/storage.d.ts +0 -16
  293. package/dist/utils/storage.js +0 -129
  294. package/dist/utils/webchatEvents.d.ts +0 -2
  295. package/dist/utils/webchatEvents.js +0 -14
@@ -1,576 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
- return new (P || (P = Promise))(function (resolve, reject) {
11
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
- step((generator = generator.apply(thisArg, _arguments || [])).next());
15
- });
16
- };
17
- var __importDefault = (this && this.__importDefault) || function (mod) {
18
- return (mod && mod.__esModule) ? mod : { "default": mod };
19
- };
20
- Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.RootStore = void 0;
22
- const axios_1 = __importDefault(require("axios"));
23
- const is_before_1 = __importDefault(require("date-fns/is_before"));
24
- const is_valid_1 = __importDefault(require("date-fns/is_valid"));
25
- const merge_1 = __importDefault(require("lodash/merge"));
26
- const orderBy_1 = __importDefault(require("lodash/orderBy"));
27
- const mobx_1 = require("mobx");
28
- const api_1 = __importDefault(require("../core/api"));
29
- const main_1 = require("../main");
30
- const translations_1 = require("../translations");
31
- const utils_1 = require("../utils");
32
- const analytics_1 = require("../utils/analytics");
33
- const webchatEvents_1 = require("../utils/webchatEvents");
34
- const composer_1 = __importDefault(require("./composer"));
35
- const view_1 = __importDefault(require("./view"));
36
- class RootStore {
37
- constructor(options, config) {
38
- this.conversations = [];
39
- this.isBotTyping = mobx_1.observable.box(false);
40
- this.delayedMessages = [];
41
- this.composer = new composer_1.default(this);
42
- this.view = new view_1.default(this, options.fullscreen);
43
- if (config) {
44
- this.updateConfig(config);
45
- }
46
- this.botUILanguage = (0, translations_1.getUserLocale)();
47
- }
48
- setIntlProvider(provider) {
49
- this.intl = provider;
50
- }
51
- setSocket(socket) {
52
- this.api = new api_1.default(socket);
53
- }
54
- setSelectedMessage(messageId) {
55
- this.selectedMessageId = messageId;
56
- }
57
- get isConversationStarted() {
58
- var _a;
59
- return !!((_a = this.currentConversation) === null || _a === void 0 ? void 0 : _a.messages.length);
60
- }
61
- get botName() {
62
- var _a, _b;
63
- return ((_a = this.config) === null || _a === void 0 ? void 0 : _a.botName) || ((_b = this.botInfo) === null || _b === void 0 ? void 0 : _b.name) || 'Bot';
64
- }
65
- get hasBotInfoDescription() {
66
- var _a;
67
- return !!((_a = this.config.botConversationDescription) === null || _a === void 0 ? void 0 : _a.length);
68
- }
69
- get botAvatarUrl() {
70
- var _a, _b, _c;
71
- return ((_b = (_a = this.botInfo) === null || _a === void 0 ? void 0 : _a.details) === null || _b === void 0 ? void 0 : _b.avatarUrl) || ((_c = this.config) === null || _c === void 0 ? void 0 : _c.avatarUrl) || undefined;
72
- }
73
- get rtl() {
74
- return (0, translations_1.isRTLLocale)(this.preferredLanguage);
75
- }
76
- get escapeHTML() {
77
- var _a, _b;
78
- return (_b = (_a = this.botInfo) === null || _a === void 0 ? void 0 : _a.security) === null || _b === void 0 ? void 0 : _b.escapeHTML;
79
- }
80
- get currentMessages() {
81
- var _a;
82
- return ((_a = this.currentConversation) === null || _a === void 0 ? void 0 : _a.messages) || [];
83
- }
84
- get currentConversationId() {
85
- var _a;
86
- return (_a = this.currentConversation) === null || _a === void 0 ? void 0 : _a.id;
87
- }
88
- updateMessages(messages) {
89
- if (this.currentConversation) {
90
- this.currentConversation.messages = messages;
91
- }
92
- }
93
- updateLastMessage(conversationId, message) {
94
- for (const conversation of this.conversations) {
95
- if (conversation.id === conversationId) {
96
- conversation.lastMessage = message;
97
- return;
98
- }
99
- }
100
- }
101
- clearMessages() {
102
- if (this.currentConversation) {
103
- this.currentConversation.messages = [];
104
- }
105
- }
106
- deleteConversation() {
107
- return __awaiter(this, void 0, void 0, function* () {
108
- if (this.currentConversationId) {
109
- yield this.api.deleteConversation(this.currentConversationId);
110
- const index = this.conversations.findIndex((c) => c.id === this.currentConversationId);
111
- if (index > -1) {
112
- this.conversations.splice(index, 1);
113
- }
114
- this.resetConversation();
115
- yield this.fetchConversation();
116
- }
117
- });
118
- }
119
- addEventToConversation(event) {
120
- var _a;
121
- return __awaiter(this, void 0, void 0, function* () {
122
- if (!this.currentConversation || (this.isInitialized && this.currentConversationId !== event.conversationId)) {
123
- yield this.fetchConversations();
124
- yield this.fetchConversation(event.conversationId);
125
- return;
126
- }
127
- // Autoplay bot voice messages
128
- if (((_a = event.payload) === null || _a === void 0 ? void 0 : _a.type) === 'voice' && !event.authorId) {
129
- event.payload.autoPlay = true;
130
- }
131
- const message = Object.assign(Object.assign({}, event), { conversationId: event.conversationId });
132
- if (this.isBotTyping.get() && !event.authorId) {
133
- this.delayedMessages.push({ message, showAt: this.currentConversation.typingUntil });
134
- }
135
- else {
136
- this.currentConversation.messages.push(message);
137
- }
138
- });
139
- }
140
- updateTyping(event) {
141
- return __awaiter(this, void 0, void 0, function* () {
142
- if (!this.currentConversation || (this.isInitialized && this.currentConversationId !== event.conversationId)) {
143
- yield this.fetchConversations();
144
- yield this.fetchConversation(event.conversationId);
145
- return;
146
- }
147
- let start = new Date();
148
- if ((0, is_before_1.default)(start, this.currentConversation.typingUntil)) {
149
- start = this.currentConversation.typingUntil;
150
- }
151
- this.currentConversation.typingUntil = new Date(+start + (event.timeInMs || main_1.DEFAULT_TYPING_DELAY));
152
- this._startTypingTimer();
153
- });
154
- }
155
- /** Loads the initial state, for the first time or when the user ID is changed. */
156
- initializeChat() {
157
- return __awaiter(this, void 0, void 0, function* () {
158
- try {
159
- yield this.fetchConversations();
160
- yield this.fetchConversation();
161
- (0, mobx_1.runInAction)('-> setInitialized', () => {
162
- this.isInitialized = true;
163
- (0, webchatEvents_1.postMessageToParent)('LIFECYCLE.READY', undefined, this.config.chatId);
164
- });
165
- }
166
- catch (err) {
167
- console.error('Error while fetching data, creating new conversation...', err);
168
- yield this.createConversation();
169
- }
170
- this.fetchLanguage();
171
- });
172
- }
173
- fetchBotInfo() {
174
- return __awaiter(this, void 0, void 0, function* () {
175
- if (!this.config.mediaFileServiceUrl) {
176
- return;
177
- }
178
- try {
179
- const { data } = yield axios_1.default.get(this.config.mediaFileServiceUrl);
180
- if (!data) {
181
- return;
182
- }
183
- (0, mobx_1.runInAction)('-> setBotInfo', () => {
184
- this.botInfo = data;
185
- });
186
- this.mergeConfig({
187
- disableNotificationSound: data.disableNotificationSound
188
- });
189
- }
190
- catch (err) {
191
- console.error('Error while loading bot info', err);
192
- }
193
- });
194
- }
195
- fetchLanguage() {
196
- const language = (0, translations_1.getUserLocale)(this.config.locale);
197
- (0, mobx_1.runInAction)('-> setPreferredLanguage', () => {
198
- this.updateBotUILanguage(language);
199
- });
200
- }
201
- /** Fetches the list of conversation, and update the corresponding config values */
202
- fetchConversations() {
203
- return __awaiter(this, void 0, void 0, function* () {
204
- const conversations = yield this.api.fetchConversations();
205
- (0, mobx_1.runInAction)('-> setConversations', () => {
206
- if (!(conversations === null || conversations === void 0 ? void 0 : conversations.length)) {
207
- this.view.showBotInfo();
208
- }
209
- this.conversations = conversations;
210
- });
211
- });
212
- }
213
- /** Fetch the specified conversation ID, or try to fetch a valid one from the list */
214
- fetchConversation(convoId) {
215
- return __awaiter(this, void 0, void 0, function* () {
216
- const conversationId = convoId || this._getCurrentConvoId();
217
- if (!conversationId) {
218
- return this.createConversation();
219
- }
220
- const conversation = (yield this.api.fetchConversation(convoId || this._getCurrentConvoId()));
221
- if (conversation === null || conversation === void 0 ? void 0 : conversation.messages) {
222
- conversation.messages = conversation.messages.sort((a, b) => new Date(a.sentOn).getTime() - new Date(b.sentOn).getTime());
223
- yield this.extractFeedback(conversation.messages);
224
- }
225
- (0, mobx_1.runInAction)('-> setConversation', () => {
226
- this.currentConversation = conversation;
227
- this.view.hideConversations();
228
- });
229
- });
230
- }
231
- /** Sends the specified message, or fetch the message in the composer */
232
- sendMessage(textMessage) {
233
- return __awaiter(this, void 0, void 0, function* () {
234
- textMessage = textMessage || this.composer.message;
235
- if (!textMessage) {
236
- return;
237
- }
238
- this.composer.updateMessage('');
239
- try {
240
- const message = yield this.sendData({ type: 'text', text: textMessage });
241
- (0, analytics_1.trackMessage)('sent');
242
- if (message) {
243
- (0, webchatEvents_1.postMessageToParent)('MESSAGE.SENT', message, this.config.chatId);
244
- }
245
- this.composer.addMessageToHistory(textMessage);
246
- }
247
- catch (e) {
248
- this.composer.updateMessage(textMessage);
249
- console.error('Webchat cloud not send message');
250
- throw e;
251
- }
252
- });
253
- }
254
- /** Sends an event to start conversation & hide the bot info page */
255
- startConversation() {
256
- return __awaiter(this, void 0, void 0, function* () {
257
- yield this.sendData({ type: 'request_start_conversation' });
258
- this.view.toggleBotInfo();
259
- });
260
- }
261
- /** Creates a new conversation and switches to it */
262
- createConversation() {
263
- return __awaiter(this, void 0, void 0, function* () {
264
- const newId = yield this.api.createConversation();
265
- yield this.api.startConversation();
266
- yield this.fetchConversations();
267
- yield this.fetchConversation(newId);
268
- return newId;
269
- });
270
- }
271
- resetConversation() {
272
- this.currentConversation = undefined;
273
- }
274
- extractFeedback(messages) {
275
- return __awaiter(this, void 0, void 0, function* () {
276
- const feedbackMessageIds = messages.filter((x) => x.payload && x.payload.collectFeedback).map((x) => x.id);
277
- const feedbackInfo = feedbackMessageIds.map((x) => ({ messageId: x, feedback: 1 }));
278
- (0, mobx_1.runInAction)('-> setFeedbackInfo', () => {
279
- this.messageFeedbacks = feedbackInfo;
280
- });
281
- });
282
- }
283
- sendFeedback(feedback, messageId) {
284
- return __awaiter(this, void 0, void 0, function* () {
285
- yield this.api.sendFeedback(feedback, messageId);
286
- });
287
- }
288
- downloadConversation() {
289
- return __awaiter(this, void 0, void 0, function* () {
290
- try {
291
- const formatDate = (date) => {
292
- return new Date(date).toLocaleString();
293
- };
294
- const conversation = this.currentConversation;
295
- if (!conversation) {
296
- console.warn('Cannot download the current conversation as it is undefined.');
297
- return;
298
- }
299
- let info = `Conversation Id: ${conversation.id}\nCreated on: ${formatDate(conversation.createdOn)}\nUser: ${conversation.userId}\n-----------------`;
300
- const messages = yield this.api.listCurrentConversationMessages(500);
301
- for (const message of (0, orderBy_1.default)(messages, 'sentOn', 'desc')) {
302
- const payload = message.payload;
303
- if (payload.type === 'session_reset') {
304
- continue;
305
- }
306
- info += `\n[${formatDate(message.sentOn)}] ${message.authorId ? 'User' : this.config.botName || 'Bot'}: Event (${payload.type}): ${payload.text ||
307
- payload.audio ||
308
- payload.image ||
309
- payload.video ||
310
- payload.file ||
311
- payload.message ||
312
- payload.title ||
313
- ''}`;
314
- }
315
- const blobFile = new Blob([info]);
316
- (0, utils_1.downloadFile)(`conversation-${conversation.id}`, blobFile);
317
- }
318
- catch (err) {
319
- console.error('Error trying to download conversation', err);
320
- }
321
- });
322
- }
323
- /** Sends an event or a message, depending on how the backend manages those types */
324
- sendData(data) {
325
- return __awaiter(this, void 0, void 0, function* () {
326
- if (!this.isInitialized || !this.currentConversationId) {
327
- console.warn('[webchat] Cannot send data until the webchat is ready');
328
- return;
329
- }
330
- const message = yield this.api.sendMessage(data, this.currentConversationId);
331
- this.updateLastMessage(this.currentConversationId, message);
332
- return message;
333
- });
334
- }
335
- /** Sends a message of type voice */
336
- sendVoiceMessage(voice, ext) {
337
- return __awaiter(this, void 0, void 0, function* () {
338
- if (this.currentConversationId) {
339
- return this.api.sendVoiceMessage(voice, ext, this.currentConversationId);
340
- }
341
- });
342
- }
343
- /** Use this method to replace a value or add a new config */
344
- mergeConfig(config) {
345
- this.config = (0, merge_1.default)(this.config, config);
346
- this._applyConfig();
347
- }
348
- /** This replaces all the configurations by this object */
349
- updateConfig(config) {
350
- this.config = config;
351
- this._applyConfig();
352
- }
353
- _applyConfig() {
354
- window.BP_STORAGE.config = this.config;
355
- this.config.layoutWidth && this.view.setLayoutWidth(this.config.layoutWidth);
356
- this.config.containerWidth && this.view.setContainerWidth(this.config.containerWidth);
357
- this.view.disableAnimations = !!this.config.disableAnimations;
358
- this.config.showPoweredBy ? this.view.showPoweredBy() : this.view.hidePoweredBy();
359
- document.title = this.config.botName || 'Botpress Webchat';
360
- if (!this.isInitialized) {
361
- window.USE_SESSION_STORAGE = !!this.config.useSessionStorage;
362
- }
363
- else if (window.USE_SESSION_STORAGE !== this.config.useSessionStorage) {
364
- console.warn('[WebChat] "useSessionStorage" value cannot be altered once the webchat is initialized');
365
- }
366
- const locale = (0, translations_1.getUserLocale)(this.config.locale);
367
- this.updateBotUILanguage(locale);
368
- document.documentElement.setAttribute('lang', locale);
369
- (0, webchatEvents_1.postMessageToParent)('CONFIG.SET', Object.assign({}, this.config), this.config.chatId);
370
- }
371
- updatePreferredLanguage(lang) {
372
- this.preferredLanguage = lang;
373
- (0, translations_1.setUserLocale)(lang);
374
- }
375
- /** Starts a timer to remove the typing animation when it's completed */
376
- _startTypingTimer() {
377
- if (this._typingInterval) {
378
- return;
379
- }
380
- this.isBotTyping.set(true);
381
- this._typingInterval = setInterval(() => {
382
- var _a;
383
- const typeUntil = new Date((_a = this.currentConversation) === null || _a === void 0 ? void 0 : _a.typingUntil);
384
- if (!typeUntil || !(0, is_valid_1.default)(typeUntil) || (0, is_before_1.default)(typeUntil, new Date())) {
385
- this._expireTyping();
386
- }
387
- else {
388
- this.emptyDelayedMessagesQueue(false);
389
- }
390
- }, 50);
391
- }
392
- _expireTyping() {
393
- this.emptyDelayedMessagesQueue(true);
394
- this.isBotTyping.set(false);
395
- if (this.currentConversation) {
396
- this.currentConversation.typingUntil = undefined;
397
- }
398
- clearInterval(this._typingInterval);
399
- this._typingInterval = undefined;
400
- }
401
- updateBotUILanguage(lang) {
402
- lang = (0, translations_1.getUserLocale)(lang); // Ensure language is supported
403
- (0, mobx_1.runInAction)('-> setBotUILanguage', () => {
404
- this.botUILanguage = lang;
405
- this.preferredLanguage = lang;
406
- (0, translations_1.setUserLocale)(lang);
407
- });
408
- }
409
- emptyDelayedMessagesQueue(removeAll) {
410
- if (!this.currentConversation) {
411
- return;
412
- }
413
- while (this.delayedMessages.length) {
414
- const message = this.delayedMessages[0];
415
- if (removeAll || (0, is_before_1.default)(message.showAt, new Date())) {
416
- this.currentConversation.messages.push(message.message);
417
- this.delayedMessages.shift();
418
- }
419
- else {
420
- break;
421
- }
422
- }
423
- }
424
- /** Returns the current conversation ID, or the last one. */
425
- _getCurrentConvoId() {
426
- if (this.currentConversationId) {
427
- return this.currentConversationId;
428
- }
429
- if (!this.conversations.length) {
430
- return;
431
- }
432
- return this.conversations[0].id;
433
- }
434
- }
435
- __decorate([
436
- mobx_1.observable
437
- ], RootStore.prototype, "conversations", void 0);
438
- __decorate([
439
- mobx_1.observable
440
- ], RootStore.prototype, "currentConversation", void 0);
441
- __decorate([
442
- mobx_1.observable
443
- ], RootStore.prototype, "selectedMessageId", void 0);
444
- __decorate([
445
- mobx_1.observable
446
- ], RootStore.prototype, "botInfo", void 0);
447
- __decorate([
448
- mobx_1.observable
449
- ], RootStore.prototype, "config", void 0);
450
- __decorate([
451
- mobx_1.observable
452
- ], RootStore.prototype, "preferredLanguage", void 0);
453
- __decorate([
454
- mobx_1.observable
455
- ], RootStore.prototype, "isInitialized", void 0);
456
- __decorate([
457
- mobx_1.observable
458
- ], RootStore.prototype, "messageFeedbacks", void 0);
459
- __decorate([
460
- mobx_1.observable
461
- ], RootStore.prototype, "botUILanguage", void 0);
462
- __decorate([
463
- mobx_1.action.bound
464
- ], RootStore.prototype, "setIntlProvider", null);
465
- __decorate([
466
- mobx_1.action.bound
467
- ], RootStore.prototype, "setSocket", null);
468
- __decorate([
469
- mobx_1.action.bound
470
- ], RootStore.prototype, "setSelectedMessage", null);
471
- __decorate([
472
- mobx_1.computed
473
- ], RootStore.prototype, "isConversationStarted", null);
474
- __decorate([
475
- mobx_1.computed
476
- ], RootStore.prototype, "botName", null);
477
- __decorate([
478
- mobx_1.computed
479
- ], RootStore.prototype, "hasBotInfoDescription", null);
480
- __decorate([
481
- mobx_1.computed
482
- ], RootStore.prototype, "botAvatarUrl", null);
483
- __decorate([
484
- mobx_1.computed
485
- ], RootStore.prototype, "rtl", null);
486
- __decorate([
487
- mobx_1.computed
488
- ], RootStore.prototype, "escapeHTML", null);
489
- __decorate([
490
- mobx_1.computed
491
- ], RootStore.prototype, "currentMessages", null);
492
- __decorate([
493
- mobx_1.computed
494
- ], RootStore.prototype, "currentConversationId", null);
495
- __decorate([
496
- mobx_1.action.bound
497
- ], RootStore.prototype, "updateMessages", null);
498
- __decorate([
499
- mobx_1.action.bound
500
- ], RootStore.prototype, "updateLastMessage", null);
501
- __decorate([
502
- mobx_1.action.bound
503
- ], RootStore.prototype, "clearMessages", null);
504
- __decorate([
505
- mobx_1.action.bound
506
- ], RootStore.prototype, "deleteConversation", null);
507
- __decorate([
508
- mobx_1.action.bound
509
- ], RootStore.prototype, "addEventToConversation", null);
510
- __decorate([
511
- mobx_1.action.bound
512
- ], RootStore.prototype, "updateTyping", null);
513
- __decorate([
514
- mobx_1.action.bound
515
- ], RootStore.prototype, "initializeChat", null);
516
- __decorate([
517
- mobx_1.action.bound
518
- ], RootStore.prototype, "fetchBotInfo", null);
519
- __decorate([
520
- mobx_1.action.bound
521
- ], RootStore.prototype, "fetchLanguage", null);
522
- __decorate([
523
- mobx_1.action.bound
524
- ], RootStore.prototype, "fetchConversations", null);
525
- __decorate([
526
- mobx_1.action.bound
527
- ], RootStore.prototype, "fetchConversation", null);
528
- __decorate([
529
- mobx_1.action.bound
530
- ], RootStore.prototype, "sendMessage", null);
531
- __decorate([
532
- mobx_1.action.bound
533
- ], RootStore.prototype, "startConversation", null);
534
- __decorate([
535
- mobx_1.action.bound
536
- ], RootStore.prototype, "createConversation", null);
537
- __decorate([
538
- mobx_1.action.bound
539
- ], RootStore.prototype, "resetConversation", null);
540
- __decorate([
541
- mobx_1.action.bound
542
- ], RootStore.prototype, "extractFeedback", null);
543
- __decorate([
544
- mobx_1.action.bound
545
- ], RootStore.prototype, "sendFeedback", null);
546
- __decorate([
547
- mobx_1.action.bound
548
- ], RootStore.prototype, "downloadConversation", null);
549
- __decorate([
550
- mobx_1.action.bound
551
- ], RootStore.prototype, "sendData", null);
552
- __decorate([
553
- mobx_1.action.bound
554
- ], RootStore.prototype, "sendVoiceMessage", null);
555
- __decorate([
556
- mobx_1.action.bound
557
- ], RootStore.prototype, "mergeConfig", null);
558
- __decorate([
559
- mobx_1.action.bound
560
- ], RootStore.prototype, "updateConfig", null);
561
- __decorate([
562
- mobx_1.action.bound
563
- ], RootStore.prototype, "updatePreferredLanguage", null);
564
- __decorate([
565
- mobx_1.action.bound
566
- ], RootStore.prototype, "_startTypingTimer", null);
567
- __decorate([
568
- mobx_1.action.bound
569
- ], RootStore.prototype, "_expireTyping", null);
570
- __decorate([
571
- mobx_1.action.bound
572
- ], RootStore.prototype, "updateBotUILanguage", null);
573
- __decorate([
574
- mobx_1.action.bound
575
- ], RootStore.prototype, "emptyDelayedMessagesQueue", null);
576
- exports.RootStore = RootStore;
@@ -1,61 +0,0 @@
1
- import { ChatDimensions, CustomAction, CustomButton } from '../typings';
2
- import { RootStore } from '.';
3
- declare class ViewStore {
4
- private rootStore;
5
- /** If false, probably embedded on a website or on the studio */
6
- isFullscreen: boolean;
7
- unreadCount: number;
8
- dimensions: ChatDimensions;
9
- isConversationsDisplayed: boolean;
10
- activeView: string;
11
- private transitions;
12
- private _isLoading;
13
- private _showBotInfo;
14
- isPoweredByDisplayed: boolean;
15
- focusedArea: import("mobx").IObservableValue<string>;
16
- /** These buttons are displayed in the header, and can point to actions on your custom components */
17
- customButtons: CustomButton[];
18
- customActions: CustomAction[];
19
- disableAnimations: boolean;
20
- constructor(rootStore: RootStore, fullscreen: boolean);
21
- get showConversationsButton(): boolean | undefined;
22
- get showBotInfoButton(): boolean;
23
- get showDownloadButton(): boolean | undefined;
24
- get showDeleteConversationButton(): boolean | undefined;
25
- get showCloseButton(): boolean;
26
- get showWidgetButton(): boolean;
27
- get hasUnreadMessages(): boolean;
28
- get isWebchatReady(): string | false;
29
- get isBotInfoDisplayed(): boolean;
30
- /** Returns the active transition for the side panel, like fade in or out */
31
- get sideTransition(): any;
32
- get widgetTransition(): any;
33
- get displayWidgetView(): boolean;
34
- /** Sets the current focus to that element */
35
- setFocus(element: string): void;
36
- focusPrevious(): void;
37
- focusNext(): void;
38
- incrementUnread(): void;
39
- resetUnread(): void;
40
- toggleBotInfo(): void;
41
- showBotInfo(): void;
42
- toggleConversations(): void;
43
- hideConversations(): void;
44
- setLoadingCompleted(): void;
45
- showPoweredBy(): void;
46
- hidePoweredBy(): void;
47
- setLayoutWidth(width: string | number): void;
48
- setContainerWidth(width: string | number): void;
49
- addCustomAction(newAction: CustomAction): void;
50
- removeCustomAction(actionId: string): void;
51
- addHeaderButton(newButton: CustomButton): void;
52
- /** Updates one or multiple properties of a specific button */
53
- updateHeaderButton(buttonId: string, newProps: Partial<CustomButton>): void;
54
- removeHeaderButton(buttonId: string): void;
55
- showChat(): void;
56
- hideChat(): void;
57
- private _endAnimation;
58
- private _updateTransitions;
59
- private _getFocusOrder;
60
- }
61
- export default ViewStore;