@botonic/core 1.0.0-alpha.0 → 1.0.0-dev.2

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 (363) hide show
  1. package/lib/cjs/constants.d.ts +4 -0
  2. package/lib/cjs/constants.js +8 -0
  3. package/lib/cjs/constants.js.map +1 -0
  4. package/lib/cjs/core-bot.d.ts +36 -0
  5. package/lib/cjs/core-bot.js +96 -0
  6. package/lib/cjs/core-bot.js.map +1 -0
  7. package/lib/cjs/debug/index.d.ts +1 -0
  8. package/lib/cjs/debug/index.js +5 -0
  9. package/lib/cjs/debug/index.js.map +1 -0
  10. package/lib/cjs/debug/inspector.d.ts +24 -0
  11. package/lib/{debug → cjs/debug}/inspector.js +5 -3
  12. package/lib/cjs/debug/inspector.js.map +1 -0
  13. package/lib/cjs/handoff.d.ts +67 -0
  14. package/lib/{handoff.js → cjs/handoff.js} +25 -12
  15. package/lib/cjs/handoff.js.map +1 -0
  16. package/lib/cjs/hubtype-service.d.ts +69 -0
  17. package/lib/{hubtype-service.js → cjs/hubtype-service.js} +17 -14
  18. package/lib/cjs/hubtype-service.js.map +1 -0
  19. package/lib/cjs/i18n.d.ts +2 -0
  20. package/lib/{i18n.js → cjs/i18n.js} +0 -1
  21. package/lib/cjs/i18n.js.map +1 -0
  22. package/lib/cjs/index.d.ts +11 -0
  23. package/lib/cjs/index.js +15 -0
  24. package/lib/cjs/index.js.map +1 -0
  25. package/lib/cjs/models/bot-state.d.ts +11 -0
  26. package/lib/cjs/models/bot-state.js +3 -0
  27. package/lib/cjs/models/bot-state.js.map +1 -0
  28. package/lib/cjs/models/channels.d.ts +9 -0
  29. package/lib/cjs/models/channels.js +14 -0
  30. package/lib/cjs/models/channels.js.map +1 -0
  31. package/lib/cjs/models/events/base-event.d.ts +20 -0
  32. package/lib/{models/events/index.js → cjs/models/events/base-event.js} +7 -1
  33. package/lib/cjs/models/events/base-event.js.map +1 -0
  34. package/lib/cjs/models/events/botonic-event.d.ts +4 -0
  35. package/lib/cjs/models/events/botonic-event.js +3 -0
  36. package/lib/cjs/models/events/botonic-event.js.map +1 -0
  37. package/lib/{models/events/connections/index.d.ts → cjs/models/events/connection/connection-event.d.ts} +1 -1
  38. package/lib/{models/events/connections/index.js → cjs/models/events/connection/connection-event.js} +1 -1
  39. package/lib/cjs/models/events/connection/connection-event.js.map +1 -0
  40. package/lib/cjs/models/events/connection/index.d.ts +1 -0
  41. package/lib/cjs/models/events/connection/index.js +5 -0
  42. package/lib/cjs/models/events/connection/index.js.map +1 -0
  43. package/lib/cjs/models/events/index.d.ts +4 -0
  44. package/lib/cjs/models/events/index.js +8 -0
  45. package/lib/cjs/models/events/index.js.map +1 -0
  46. package/lib/cjs/models/events/integration/index.d.ts +1 -0
  47. package/lib/cjs/models/events/integration/index.js +5 -0
  48. package/lib/cjs/models/events/integration/index.js.map +1 -0
  49. package/lib/cjs/models/events/integration/integration-event.d.ts +6 -0
  50. package/lib/cjs/models/events/integration/integration-event.js +3 -0
  51. package/lib/cjs/models/events/integration/integration-event.js.map +1 -0
  52. package/lib/{models → cjs/models}/events/message/buttons.d.ts +0 -0
  53. package/lib/{models → cjs/models}/events/message/buttons.js +0 -0
  54. package/lib/cjs/models/events/message/buttons.js.map +1 -0
  55. package/lib/{models → cjs/models}/events/message/carousel.d.ts +1 -1
  56. package/lib/{models → cjs/models}/events/message/carousel.js +0 -0
  57. package/lib/cjs/models/events/message/carousel.js.map +1 -0
  58. package/lib/{models → cjs/models}/events/message/custom.d.ts +2 -2
  59. package/lib/{models → cjs/models}/events/message/custom.js +0 -0
  60. package/lib/cjs/models/events/message/custom.js.map +1 -0
  61. package/lib/cjs/models/events/message/index.d.ts +9 -0
  62. package/lib/cjs/models/events/message/index.js +13 -0
  63. package/lib/cjs/models/events/message/index.js.map +1 -0
  64. package/lib/{models → cjs/models}/events/message/location.d.ts +1 -1
  65. package/lib/{models → cjs/models}/events/message/location.js +0 -0
  66. package/lib/cjs/models/events/message/location.js.map +1 -0
  67. package/lib/{models → cjs/models}/events/message/media.d.ts +1 -1
  68. package/lib/cjs/models/events/message/media.js +11 -0
  69. package/lib/cjs/models/events/message/media.js.map +1 -0
  70. package/lib/{models/events/message/index.d.ts → cjs/models/events/message/message-event.d.ts} +2 -1
  71. package/lib/{models/events/message/index.js → cjs/models/events/message/message-event.js} +5 -1
  72. package/lib/cjs/models/events/message/message-event.js.map +1 -0
  73. package/lib/cjs/models/events/message/postback.d.ts +4 -0
  74. package/lib/cjs/models/events/message/postback.js +3 -0
  75. package/lib/cjs/models/events/message/postback.js.map +1 -0
  76. package/lib/{models → cjs/models}/events/message/replies.d.ts +0 -0
  77. package/lib/{models → cjs/models}/events/message/replies.js +0 -0
  78. package/lib/cjs/models/events/message/replies.js.map +1 -0
  79. package/lib/{models → cjs/models}/events/message/text.d.ts +1 -1
  80. package/lib/{models → cjs/models}/events/message/text.js +0 -0
  81. package/lib/cjs/models/events/message/text.js.map +1 -0
  82. package/lib/cjs/models/index.d.ts +6 -0
  83. package/lib/cjs/models/index.js +10 -0
  84. package/lib/cjs/models/index.js.map +1 -0
  85. package/lib/cjs/models/legacy-types.d.ts +184 -0
  86. package/lib/cjs/models/legacy-types.js +59 -0
  87. package/lib/cjs/models/legacy-types.js.map +1 -0
  88. package/lib/cjs/models/session.d.ts +3 -0
  89. package/lib/cjs/models/session.js +3 -0
  90. package/lib/cjs/models/session.js.map +1 -0
  91. package/lib/cjs/models/user.d.ts +14 -0
  92. package/lib/{models → cjs/models}/user.js +0 -0
  93. package/lib/{models → cjs/models}/user.js.map +1 -1
  94. package/lib/cjs/output-parser/botonic-output-parser.d.ts +16 -0
  95. package/lib/{output-parser/index.js → cjs/output-parser/botonic-output-parser.js} +8 -2
  96. package/lib/cjs/output-parser/botonic-output-parser.js.map +1 -0
  97. package/lib/{output-parser → cjs/output-parser}/factory.d.ts +1 -1
  98. package/lib/{output-parser → cjs/output-parser}/factory.js +9 -7
  99. package/lib/cjs/output-parser/factory.js.map +1 -0
  100. package/lib/cjs/output-parser/index.d.ts +3 -0
  101. package/lib/cjs/output-parser/index.js +7 -0
  102. package/lib/cjs/output-parser/index.js.map +1 -0
  103. package/lib/{output-parser → cjs/output-parser}/parsers.d.ts +4 -8
  104. package/lib/{output-parser → cjs/output-parser}/parsers.js +41 -26
  105. package/lib/cjs/output-parser/parsers.js.map +1 -0
  106. package/lib/cjs/plugins.d.ts +6 -0
  107. package/lib/{plugins.js → cjs/plugins.js} +10 -6
  108. package/lib/cjs/plugins.js.map +1 -0
  109. package/lib/cjs/routing/index.d.ts +2 -0
  110. package/lib/cjs/routing/index.js +6 -0
  111. package/lib/cjs/routing/index.js.map +1 -0
  112. package/lib/cjs/routing/router-utils.d.ts +11 -0
  113. package/lib/cjs/routing/router-utils.js +89 -0
  114. package/lib/cjs/routing/router-utils.js.map +1 -0
  115. package/lib/cjs/routing/router.d.ts +54 -0
  116. package/lib/cjs/routing/router.js +319 -0
  117. package/lib/cjs/routing/router.js.map +1 -0
  118. package/lib/cjs/utils.d.ts +11 -0
  119. package/lib/{utils.js → cjs/utils.js} +14 -5
  120. package/lib/cjs/utils.js.map +1 -0
  121. package/lib/esm/constants.d.ts +4 -0
  122. package/lib/esm/constants.js +5 -0
  123. package/lib/esm/constants.js.map +1 -0
  124. package/lib/esm/core-bot.d.ts +36 -0
  125. package/lib/esm/core-bot.js +92 -0
  126. package/lib/esm/core-bot.js.map +1 -0
  127. package/lib/esm/debug/index.d.ts +1 -0
  128. package/lib/esm/debug/index.js +2 -0
  129. package/lib/esm/debug/index.js.map +1 -0
  130. package/lib/esm/debug/inspector.d.ts +24 -0
  131. package/lib/esm/debug/inspector.js +65 -0
  132. package/lib/esm/debug/inspector.js.map +1 -0
  133. package/lib/esm/handoff.d.ts +67 -0
  134. package/lib/esm/handoff.js +173 -0
  135. package/lib/esm/handoff.js.map +1 -0
  136. package/lib/esm/hubtype-service.d.ts +69 -0
  137. package/lib/esm/hubtype-service.js +185 -0
  138. package/lib/esm/hubtype-service.js.map +1 -0
  139. package/lib/esm/i18n.d.ts +2 -0
  140. package/lib/esm/i18n.js +7 -0
  141. package/lib/esm/i18n.js.map +1 -0
  142. package/lib/esm/index.d.ts +11 -0
  143. package/lib/esm/index.js +12 -0
  144. package/lib/esm/index.js.map +1 -0
  145. package/lib/esm/models/bot-state.d.ts +11 -0
  146. package/lib/esm/models/bot-state.js +2 -0
  147. package/lib/esm/models/bot-state.js.map +1 -0
  148. package/lib/esm/models/channels.d.ts +9 -0
  149. package/lib/esm/models/channels.js +11 -0
  150. package/lib/esm/models/channels.js.map +1 -0
  151. package/lib/esm/models/events/base-event.d.ts +20 -0
  152. package/lib/esm/models/events/base-event.js +14 -0
  153. package/lib/esm/models/events/base-event.js.map +1 -0
  154. package/lib/esm/models/events/botonic-event.d.ts +4 -0
  155. package/lib/esm/models/events/botonic-event.js +2 -0
  156. package/lib/esm/models/events/botonic-event.js.map +1 -0
  157. package/lib/esm/models/events/connection/connection-event.d.ts +9 -0
  158. package/lib/esm/models/events/connection/connection-event.js +6 -0
  159. package/lib/esm/models/events/connection/connection-event.js.map +1 -0
  160. package/lib/esm/models/events/connection/index.d.ts +1 -0
  161. package/lib/esm/models/events/connection/index.js +2 -0
  162. package/lib/esm/models/events/connection/index.js.map +1 -0
  163. package/lib/esm/models/events/index.d.ts +4 -0
  164. package/lib/esm/models/events/index.js +5 -0
  165. package/lib/esm/models/events/index.js.map +1 -0
  166. package/lib/esm/models/events/integration/index.d.ts +1 -0
  167. package/lib/esm/models/events/integration/index.js +2 -0
  168. package/lib/esm/models/events/integration/index.js.map +1 -0
  169. package/lib/esm/models/events/integration/integration-event.d.ts +6 -0
  170. package/lib/esm/models/events/integration/integration-event.js +2 -0
  171. package/lib/esm/models/events/integration/integration-event.js.map +1 -0
  172. package/lib/esm/models/events/message/buttons.d.ts +18 -0
  173. package/lib/esm/models/events/message/buttons.js +2 -0
  174. package/lib/esm/models/events/message/buttons.js.map +1 -0
  175. package/lib/esm/models/events/message/carousel.d.ts +11 -0
  176. package/lib/esm/models/events/message/carousel.js +2 -0
  177. package/lib/esm/models/events/message/carousel.js.map +1 -0
  178. package/lib/esm/models/events/message/custom.d.ts +6 -0
  179. package/lib/esm/models/events/message/custom.js +2 -0
  180. package/lib/esm/models/events/message/custom.js.map +1 -0
  181. package/lib/esm/models/events/message/index.d.ts +9 -0
  182. package/lib/esm/models/events/message/index.js +10 -0
  183. package/lib/esm/models/events/message/index.js.map +1 -0
  184. package/lib/esm/models/events/message/location.d.ts +6 -0
  185. package/lib/esm/models/events/message/location.js +2 -0
  186. package/lib/esm/models/events/message/location.js.map +1 -0
  187. package/lib/esm/models/events/message/media.d.ts +18 -0
  188. package/lib/esm/models/events/message/media.js +8 -0
  189. package/lib/esm/models/events/message/media.js.map +1 -0
  190. package/lib/esm/models/events/message/message-event.d.ts +30 -0
  191. package/lib/esm/models/events/message/message-event.js +29 -0
  192. package/lib/esm/models/events/message/message-event.js.map +1 -0
  193. package/lib/esm/models/events/message/postback.d.ts +4 -0
  194. package/lib/esm/models/events/message/postback.js +2 -0
  195. package/lib/esm/models/events/message/postback.js.map +1 -0
  196. package/lib/esm/models/events/message/replies.d.ts +7 -0
  197. package/lib/esm/models/events/message/replies.js +2 -0
  198. package/lib/esm/models/events/message/replies.js.map +1 -0
  199. package/lib/esm/models/events/message/text.d.ts +8 -0
  200. package/lib/esm/models/events/message/text.js +2 -0
  201. package/lib/esm/models/events/message/text.js.map +1 -0
  202. package/lib/esm/models/index.d.ts +6 -0
  203. package/lib/esm/models/index.js +7 -0
  204. package/lib/esm/models/index.js.map +1 -0
  205. package/lib/esm/models/legacy-types.d.ts +184 -0
  206. package/lib/esm/models/legacy-types.js +56 -0
  207. package/lib/esm/models/legacy-types.js.map +1 -0
  208. package/lib/esm/models/session.d.ts +3 -0
  209. package/lib/esm/models/session.js +2 -0
  210. package/lib/esm/models/session.js.map +1 -0
  211. package/lib/esm/models/user.d.ts +14 -0
  212. package/lib/esm/models/user.js +2 -0
  213. package/lib/esm/models/user.js.map +1 -0
  214. package/lib/esm/output-parser/botonic-output-parser.d.ts +16 -0
  215. package/lib/esm/output-parser/botonic-output-parser.js +33 -0
  216. package/lib/esm/output-parser/botonic-output-parser.js.map +1 -0
  217. package/lib/esm/output-parser/factory.d.ts +4 -0
  218. package/lib/esm/output-parser/factory.js +28 -0
  219. package/lib/esm/output-parser/factory.js.map +1 -0
  220. package/lib/esm/output-parser/index.d.ts +3 -0
  221. package/lib/esm/output-parser/index.js +4 -0
  222. package/lib/esm/output-parser/index.js.map +1 -0
  223. package/lib/esm/output-parser/parsers.d.ts +22 -0
  224. package/lib/esm/output-parser/parsers.js +130 -0
  225. package/lib/esm/output-parser/parsers.js.map +1 -0
  226. package/lib/esm/plugins.d.ts +6 -0
  227. package/lib/esm/plugins.js +43 -0
  228. package/lib/esm/plugins.js.map +1 -0
  229. package/lib/esm/routing/index.d.ts +2 -0
  230. package/lib/esm/routing/index.js +3 -0
  231. package/lib/esm/routing/index.js.map +1 -0
  232. package/lib/esm/routing/router-utils.d.ts +11 -0
  233. package/lib/esm/routing/router-utils.js +79 -0
  234. package/lib/esm/routing/router-utils.js.map +1 -0
  235. package/lib/esm/routing/router.d.ts +54 -0
  236. package/lib/esm/routing/router.js +315 -0
  237. package/lib/esm/routing/router.js.map +1 -0
  238. package/lib/esm/utils.d.ts +11 -0
  239. package/lib/esm/utils.js +78 -0
  240. package/lib/esm/utils.js.map +1 -0
  241. package/package.json +15 -8
  242. package/src/constants.ts +6 -0
  243. package/src/core-bot.ts +181 -0
  244. package/src/{types/debug/index.d.ts → debug/index.ts} +0 -0
  245. package/src/debug/{inspector.js → inspector.ts} +39 -14
  246. package/src/{handoff.js → handoff.ts} +103 -26
  247. package/src/{hubtype-service.js → hubtype-service.ts} +77 -35
  248. package/src/{i18n.js → i18n.ts} +7 -1
  249. package/src/index.ts +11 -0
  250. package/src/models/bot-state.ts +12 -0
  251. package/src/models/channels.ts +9 -0
  252. package/src/models/events/base-event.ts +22 -0
  253. package/src/models/events/botonic-event.ts +26 -0
  254. package/src/models/events/{connections/index.ts → connection/connection-event.ts} +1 -1
  255. package/src/models/events/connection/index.ts +1 -0
  256. package/src/models/events/index.ts +4 -37
  257. package/src/models/events/integration/index.ts +1 -0
  258. package/src/models/events/integration/integration-event.ts +13 -0
  259. package/src/models/events/message/carousel.ts +1 -1
  260. package/src/models/events/message/custom.ts +2 -2
  261. package/src/models/events/message/index.ts +9 -33
  262. package/src/models/events/message/location.ts +1 -1
  263. package/src/models/events/message/media.ts +1 -1
  264. package/src/models/events/message/message-event.ts +37 -0
  265. package/src/models/events/message/postback.ts +5 -0
  266. package/src/models/events/message/text.ts +1 -1
  267. package/src/models/index.ts +6 -0
  268. package/src/models/legacy-types.ts +262 -0
  269. package/src/models/session.ts +3 -0
  270. package/src/models/user.ts +10 -3
  271. package/src/output-parser/botonic-output-parser.ts +38 -0
  272. package/src/output-parser/factory.ts +5 -3
  273. package/src/output-parser/index.ts +3 -32
  274. package/src/output-parser/parsers.ts +45 -18
  275. package/src/{plugins.js → plugins.ts} +28 -13
  276. package/src/routing/index.ts +2 -0
  277. package/src/routing/router-utils.ts +100 -0
  278. package/src/routing/router.ts +415 -0
  279. package/src/{utils.js → utils.ts} +26 -13
  280. package/index.d.ts +0 -1
  281. package/lib/constants.d.ts +0 -15
  282. package/lib/constants.js +0 -19
  283. package/lib/constants.js.map +0 -1
  284. package/lib/core-bot.d.ts +0 -40
  285. package/lib/core-bot.js +0 -80
  286. package/lib/core-bot.js.map +0 -1
  287. package/lib/debug/index.d.ts +0 -1
  288. package/lib/debug/index.js +0 -9
  289. package/lib/debug/index.js.map +0 -1
  290. package/lib/debug/inspector.d.ts +0 -20
  291. package/lib/debug/inspector.js.map +0 -1
  292. package/lib/debug/inspector.test.d.ts +0 -1
  293. package/lib/debug/inspector.test.js +0 -8
  294. package/lib/debug/inspector.test.js.map +0 -1
  295. package/lib/errors.d.ts +0 -4
  296. package/lib/errors.js +0 -11
  297. package/lib/errors.js.map +0 -1
  298. package/lib/handoff.d.ts +0 -34
  299. package/lib/handoff.js.map +0 -1
  300. package/lib/handoff.test.d.ts +0 -1
  301. package/lib/handoff.test.js +0 -62
  302. package/lib/handoff.test.js.map +0 -1
  303. package/lib/hubtype-service.d.ts +0 -58
  304. package/lib/hubtype-service.js.map +0 -1
  305. package/lib/hubtype-service.test.d.ts +0 -1
  306. package/lib/hubtype-service.test.js +0 -21
  307. package/lib/hubtype-service.test.js.map +0 -1
  308. package/lib/i18n.d.ts +0 -1
  309. package/lib/i18n.js.map +0 -1
  310. package/lib/index.d.ts +0 -48
  311. package/lib/index.js +0 -58
  312. package/lib/index.js.map +0 -1
  313. package/lib/models/events/connections/index.js.map +0 -1
  314. package/lib/models/events/index.d.ts +0 -20
  315. package/lib/models/events/index.js.map +0 -1
  316. package/lib/models/events/message/buttons.js.map +0 -1
  317. package/lib/models/events/message/carousel.js.map +0 -1
  318. package/lib/models/events/message/custom.js.map +0 -1
  319. package/lib/models/events/message/index.js.map +0 -1
  320. package/lib/models/events/message/location.js.map +0 -1
  321. package/lib/models/events/message/media.js +0 -11
  322. package/lib/models/events/message/media.js.map +0 -1
  323. package/lib/models/events/message/replies.js.map +0 -1
  324. package/lib/models/events/message/text.js.map +0 -1
  325. package/lib/models/user.d.ts +0 -9
  326. package/lib/output-parser/factory.js.map +0 -1
  327. package/lib/output-parser/index.d.ts +0 -11
  328. package/lib/output-parser/index.js.map +0 -1
  329. package/lib/output-parser/parsers.js.map +0 -1
  330. package/lib/output-parser/util.d.ts +0 -2
  331. package/lib/output-parser/util.js +0 -14
  332. package/lib/output-parser/util.js.map +0 -1
  333. package/lib/plugins.d.ts +0 -2
  334. package/lib/plugins.js.map +0 -1
  335. package/lib/router.d.ts +0 -55
  336. package/lib/router.js +0 -268
  337. package/lib/router.js.map +0 -1
  338. package/lib/router.test.d.ts +0 -1
  339. package/lib/router.test.js +0 -273
  340. package/lib/router.test.js.map +0 -1
  341. package/lib/utils.d.ts +0 -8
  342. package/lib/utils.js.map +0 -1
  343. package/src/constants.js +0 -15
  344. package/src/core-bot.js +0 -106
  345. package/src/debug/index.js +0 -6
  346. package/src/debug/inspector.test.js +0 -6
  347. package/src/errors.js +0 -8
  348. package/src/handoff.test.js +0 -61
  349. package/src/hubtype-service.test.js +0 -23
  350. package/src/index.js +0 -51
  351. package/src/output-parser/util.ts +0 -8
  352. package/src/router.js +0 -273
  353. package/src/router.test.js +0 -347
  354. package/src/types/constants.d.ts +0 -14
  355. package/src/types/core-bot.d.ts +0 -45
  356. package/src/types/debug/inspector.d.ts +0 -33
  357. package/src/types/handoff.d.ts +0 -75
  358. package/src/types/hubtype-service.d.ts +0 -52
  359. package/src/types/i18n.d.ts +0 -8
  360. package/src/types/index.d.ts +0 -226
  361. package/src/types/plugins.d.ts +0 -13
  362. package/src/types/router.d.ts +0 -57
  363. package/src/types/utils.d.ts +0 -12
@@ -1,35 +1,54 @@
1
+ import { Route, RouteMatcher } from '../models'
1
2
  export class RouteInspector {
2
- routeMatched(route, routeKey, routeValue, input) {}
3
- routeNotMatched(route, routeKey, routeValue, inputValue) {}
3
+ routeMatched(
4
+ _route: Route,
5
+ _routeKey: string,
6
+ _routeValue: RouteMatcher,
7
+ _input: any
8
+ ): void {}
9
+ routeNotMatched(
10
+ _route: Route,
11
+ _routeKey: string,
12
+ _routeValue: RouteMatcher,
13
+ _input: any
14
+ ): void {}
4
15
  }
5
16
 
6
17
  export class FocusRouteInspector extends RouteInspector {
18
+ focusRoutePaths: string[] | null
19
+ focusOnMatches: boolean
7
20
  constructor() {
8
21
  super()
9
22
  this.focusRoutePaths = null
10
23
  this.focusOnMatches = false
11
24
  }
12
25
 
13
- focusOnlyOnRoutes(focusRoutePaths) {
26
+ focusOnlyOnRoutes(focusRoutePaths: string[]): this {
14
27
  this.focusRoutePaths = focusRoutePaths
15
28
  return this
16
29
  }
17
30
 
18
- focusOnlyOnMatches() {
31
+ focusOnlyOnMatches(): this {
19
32
  this.focusOnMatches = true
20
33
  return this
21
34
  }
22
35
 
23
- _isOnFocus(route) {
24
- if (this.focusRoutePaths == null) {
36
+ _isOnFocus(route: Route): boolean {
37
+ if (this.focusRoutePaths === null) {
25
38
  return true
26
39
  }
40
+ // @ts-ignore
27
41
  return this.focusRoutePaths.includes(route.path)
28
42
  }
29
43
  }
30
44
 
31
45
  export class LogRouteInspector extends FocusRouteInspector {
32
- routeMatched(route, routeKey, routeValue, inputValue) {
46
+ routeMatched(
47
+ route: Route,
48
+ routeKey: string,
49
+ routeValue: RouteMatcher,
50
+ inputValue: string
51
+ ): void {
33
52
  if (!this._isOnFocus(route)) {
34
53
  return
35
54
  }
@@ -39,7 +58,13 @@ export class LogRouteInspector extends FocusRouteInspector {
39
58
  )
40
59
  }
41
60
 
42
- routeNotMatched(route, routeKey, routeValue, inputValue) {
61
+ // @ts-ignore
62
+ routeNotMatched(
63
+ route: Route,
64
+ routeKey: string,
65
+ routeValue: RouteMatcher,
66
+ inputValue: string
67
+ ): void {
43
68
  if (!this._isOnFocus(route) || this.focusOnMatches) {
44
69
  return
45
70
  }
@@ -49,7 +74,7 @@ export class LogRouteInspector extends FocusRouteInspector {
49
74
  )
50
75
  }
51
76
 
52
- _routeName(obj) {
77
+ _routeName(obj: Route): string {
53
78
  let name = obj.path || '<<no path defined>>'
54
79
  if (obj.action) {
55
80
  name = `'${name}' (to action '${obj.action.name}')`
@@ -57,21 +82,21 @@ export class LogRouteInspector extends FocusRouteInspector {
57
82
  if (obj.redirect) {
58
83
  name = `'${name}' (with redirect to '${obj.redirect}')`
59
84
  }
60
-
61
- return name
85
+ return name as string
62
86
  }
63
87
 
64
- _log(message, ...optionalParams) {
88
+ _log(message: string, ...optionalParams: string[]): void {
65
89
  console.log(message, ...optionalParams)
66
90
  }
67
91
  }
68
92
 
69
93
  export class Inspector {
70
- constructor(routeInspector = undefined) {
94
+ routeInspector: RouteInspector
95
+ constructor(routeInspector: RouteInspector | undefined = undefined) {
71
96
  this.routeInspector = routeInspector || new RouteInspector()
72
97
  }
73
98
 
74
- getRouteInspector() {
99
+ getRouteInspector(): RouteInspector {
75
100
  return this.routeInspector
76
101
  }
77
102
  }
@@ -1,10 +1,49 @@
1
1
  import axios from 'axios'
2
2
 
3
+ import { PATH_PAYLOAD_IDENTIFIER } from './constants'
4
+ import { BotState, Session } from './models'
5
+
3
6
  const HUBTYPE_API_URL = 'https://api.hubtype.com'
4
7
 
5
- export async function getOpenQueues(session) {
8
+ export interface HubtypeAgentsInfo {
9
+ attending_count: number
10
+ email: string
11
+ idle_count: number
12
+ last_message_sent: string
13
+ status: string
14
+ }
15
+ export interface HubtypeSession extends Session {
16
+ _hubtype_api?: string
17
+ _access_token: string
18
+ }
19
+
20
+ export interface SessionWithBotonicAction extends Session {
21
+ _botonic_action: string
22
+ }
23
+ export interface BackendContext {
24
+ timeoutMs: number
25
+ }
26
+
27
+ export interface VacationRange {
28
+ end_date: number // timestamp
29
+ id: number
30
+ start_date: number // timestamp
31
+ }
32
+
33
+ function contextDefaults(context: any): BackendContext {
34
+ return {
35
+ timeoutMs: context.timeoutMs || 10000,
36
+ }
37
+ }
38
+
39
+ export async function getOpenQueues(
40
+ session: HubtypeSession,
41
+ context = {}
42
+ ): Promise<{ queues: string[] }> {
43
+ //be aware of https://github.com/axios/axios/issues/1543
6
44
  const baseUrl = session._hubtype_api || HUBTYPE_API_URL
7
45
  const endpointUrl = `${baseUrl}/v1/queues/get_open_queues/`
46
+ context = contextDefaults(context)
8
47
  const resp = await axios({
9
48
  headers: {
10
49
  Authorization: `Bearer ${session._access_token}`,
@@ -12,58 +51,68 @@ export async function getOpenQueues(session) {
12
51
  method: 'post',
13
52
  url: endpointUrl,
14
53
  data: { bot_id: session.bot.id },
54
+ timeout: (context as BackendContext).timeoutMs,
15
55
  })
16
56
  return resp.data
17
57
  }
18
58
 
19
59
  export class HandOffBuilder {
20
- constructor(session) {
21
- this._session = session
60
+ _botState: any
61
+ _queue: string
62
+ _onFinish: string
63
+ _email: string
64
+ _agentId: string
65
+ _note: string
66
+ _caseInfo: string
67
+ _shadowing: boolean
68
+
69
+ constructor(botState: any) {
70
+ this._botState = botState
22
71
  }
23
72
 
24
- withQueue(queueNameOrId) {
73
+ withQueue(queueNameOrId: string): this {
25
74
  this._queue = queueNameOrId
26
75
  return this
27
76
  }
28
77
 
29
- withOnFinishPayload(payload) {
78
+ withOnFinishPayload(payload: string): this {
30
79
  this._onFinish = payload
31
80
  return this
32
81
  }
33
82
 
34
- withOnFinishPath(path) {
35
- this._onFinish = `__PATH_PAYLOAD__${path}`
83
+ withOnFinishPath(path: string): this {
84
+ this._onFinish = `${PATH_PAYLOAD_IDENTIFIER}${path}`
36
85
  return this
37
86
  }
38
87
 
39
- withAgentEmail(email) {
88
+ withAgentEmail(email: string): this {
40
89
  this._email = email
41
90
  return this
42
91
  }
43
92
 
44
- withAgentId(agentId) {
93
+ withAgentId(agentId: string): this {
45
94
  this._agentId = agentId
46
95
  return this
47
96
  }
48
97
 
49
- withNote(note) {
98
+ withNote(note: string): this {
50
99
  this._note = note
51
100
  return this
52
101
  }
53
102
 
54
- withCaseInfo(caseInfo) {
103
+ withCaseInfo(caseInfo: string): this {
55
104
  this._caseInfo = caseInfo
56
105
  return this
57
106
  }
58
107
 
59
- withShadowing(shadowing = true) {
108
+ withShadowing(shadowing = true): this {
60
109
  this._shadowing = shadowing
61
110
  return this
62
111
  }
63
112
 
64
- async handOff() {
113
+ async handOff(): Promise<void> {
65
114
  return _humanHandOff(
66
- this._session,
115
+ this._botState,
67
116
  this._queue,
68
117
  this._onFinish,
69
118
  this._email,
@@ -95,17 +144,26 @@ export async function humanHandOff(session, queueNameOrId = '', onFinish) {
95
144
  return builder.handOff()
96
145
  }
97
146
 
147
+ interface HubtypeHandoffParams {
148
+ queue?: string
149
+ agent_email?: string
150
+ agent_id?: string
151
+ case_info?: string
152
+ note?: string
153
+ shadowing?: boolean
154
+ on_finish?: string
155
+ }
98
156
  async function _humanHandOff(
99
- session,
157
+ botState: any,
100
158
  queueNameOrId = '',
101
- onFinish,
159
+ onFinish: string,
102
160
  agentEmail = '',
103
161
  agentId = '',
104
162
  caseInfo = '',
105
163
  note = '',
106
164
  shadowing = false
107
165
  ) {
108
- const params = {}
166
+ const params: HubtypeHandoffParams = {}
109
167
  if (queueNameOrId) {
110
168
  params.queue = queueNameOrId
111
169
  }
@@ -127,12 +185,18 @@ async function _humanHandOff(
127
185
  if (onFinish) {
128
186
  params.on_finish = onFinish
129
187
  }
130
- session._botonic_action = `create_case:${JSON.stringify(params)}`
188
+ botState.botonicAction = `create_case:${JSON.stringify(params)}`
189
+ botState.isHandoff = true
131
190
  }
132
191
 
133
- export async function storeCaseRating(session, rating) {
192
+ export async function storeCaseRating(
193
+ session: HubtypeSession,
194
+ rating: number,
195
+ context: any = {}
196
+ ): Promise<{ status: string }> {
134
197
  const baseUrl = session._hubtype_api || HUBTYPE_API_URL
135
198
  const chatId = session.user.id
199
+ context = contextDefaults(context)
136
200
  const resp = await axios({
137
201
  headers: {
138
202
  Authorization: `Bearer ${session._access_token}`,
@@ -140,11 +204,15 @@ export async function storeCaseRating(session, rating) {
140
204
  method: 'post',
141
205
  url: `${baseUrl}/v1/chats/${chatId}/store_case_rating/`,
142
206
  data: { chat_id: chatId, rating },
207
+ timeout: (context as BackendContext).timeoutMs,
143
208
  })
144
209
  return resp.data
145
210
  }
146
211
 
147
- export async function getAvailableAgentsByQueue(session, queueId) {
212
+ export async function getAvailableAgentsByQueue(
213
+ session: HubtypeSession,
214
+ queueId: string
215
+ ): Promise<{ agents: string[] }> {
148
216
  const baseUrl = session._hubtype_api || HUBTYPE_API_URL
149
217
  const resp = await axios({
150
218
  headers: {
@@ -156,7 +224,9 @@ export async function getAvailableAgentsByQueue(session, queueId) {
156
224
  return resp.data
157
225
  }
158
226
 
159
- export async function getAvailableAgents(session) {
227
+ export async function getAvailableAgents(
228
+ session: HubtypeSession
229
+ ): Promise<{ agents: HubtypeAgentsInfo[] }> {
160
230
  const baseUrl = session._hubtype_api || HUBTYPE_API_URL
161
231
  const botId = session.bot.id
162
232
  const resp = await axios({
@@ -169,7 +239,10 @@ export async function getAvailableAgents(session) {
169
239
  return resp.data
170
240
  }
171
241
 
172
- export async function getAgentVacationRanges(session, { agentId, agentEmail }) {
242
+ export async function getAgentVacationRanges(
243
+ session: HubtypeSession,
244
+ { agentId, agentEmail }: { agentId?: string; agentEmail?: string }
245
+ ): Promise<{ vacation_ranges: VacationRange[] }> {
173
246
  const baseUrl = session._hubtype_api || HUBTYPE_API_URL
174
247
  const botId = session.bot.id
175
248
  const resp = await axios({
@@ -183,12 +256,16 @@ export async function getAgentVacationRanges(session, { agentId, agentEmail }) {
183
256
  return resp.data
184
257
  }
185
258
 
186
- export function cancelHandoff(session, typification = null) {
259
+ export function cancelHandoff(
260
+ botState: BotState,
261
+ typification: string | null = null
262
+ ): void {
187
263
  let action = 'discard_case'
188
264
  if (typification) action = `${action}:${JSON.stringify({ typification })}`
189
- session._botonic_action = action
265
+ botState.botonicAction = action
266
+ botState.isHandoff = false // TODO: Review handoff functionalities
190
267
  }
191
268
 
192
- export function deleteUser(session) {
193
- session._botonic_action = `delete_user`
269
+ export function deleteUser(botState: BotState): void {
270
+ botState.botonicAction = `delete_user`
194
271
  }
@@ -1,16 +1,42 @@
1
- import axios from 'axios'
2
- import Pusher from 'pusher-js'
1
+ import axios, { AxiosResponse } from 'axios'
2
+ import Pusher, { AuthOptions, Channel } from 'pusher-js'
3
+ import Channels from 'pusher-js/types/src/core/channels/channels'
3
4
 
5
+ import { Input } from './models'
4
6
  import { getWebpackEnvVar } from './utils'
5
7
 
8
+ interface UnsentInput {
9
+ id: string
10
+ ack: number
11
+ unsentInput: Input
12
+ }
13
+ interface BotonicHeaders {
14
+ 'X-BOTONIC-USER-ID': string
15
+ 'X-BOTONIC-LAST-MESSAGE-ID': string
16
+ 'X-BOTONIC-LAST-MESSAGE-UPDATE-DATE': string
17
+ }
18
+ interface ServerConfig {
19
+ activityTimeout?: number
20
+ pongTimeout?: number
21
+ }
22
+ interface HubtypeServiceArgs {
23
+ appId: string
24
+ user: any
25
+ lastMessageId: string
26
+ lastMessageUpdateDate: string
27
+ onEvent: any
28
+ unsentInputs: () => UnsentInput[]
29
+ server: ServerConfig
30
+ }
31
+
6
32
  const _WEBCHAT_PUSHER_KEY_ = getWebpackEnvVar(
7
- // eslint-disable-next-line no-undef
33
+ // @ts-ignore
8
34
  typeof WEBCHAT_PUSHER_KEY !== 'undefined' && WEBCHAT_PUSHER_KEY,
9
35
  'WEBCHAT_PUSHER_KEY',
10
36
  '434ca667c8e6cb3f641c'
11
37
  )
12
38
  const _HUBTYPE_API_URL_ = getWebpackEnvVar(
13
- // eslint-disable-next-line no-undef
39
+ // @ts-ignore
14
40
  typeof HUBTYPE_API_URL !== 'undefined' && HUBTYPE_API_URL,
15
41
  'HUBTYPE_API_URL',
16
42
  'https://api.hubtype.com'
@@ -23,6 +49,15 @@ const PONG_TIMEOUT = 5 * 1000 // https://pusher.com/docs/channels/using_channels
23
49
  * Calls Hubtype APIs from Webchat
24
50
  */
25
51
  export class HubtypeService {
52
+ appId: string
53
+ user: any
54
+ lastMessageId: string
55
+ lastMessageUpdateDate: string
56
+ onEvent: any
57
+ unsentInputs: () => UnsentInput[]
58
+ pusher: Pusher | null
59
+ channel: Channel
60
+ server: ServerConfig
26
61
  PUSHER_CONNECT_TIMEOUT_MS = 10000
27
62
  constructor({
28
63
  appId,
@@ -32,7 +67,7 @@ export class HubtypeService {
32
67
  onEvent,
33
68
  unsentInputs,
34
69
  server,
35
- }) {
70
+ }: HubtypeServiceArgs) {
36
71
  this.appId = appId
37
72
  this.user = user || {}
38
73
  this.lastMessageId = lastMessageId
@@ -44,6 +79,7 @@ export class HubtypeService {
44
79
  // It's safe not awaiting Promise because:
45
80
  // * it will never be called from AWS lambda
46
81
  // * though init() is called again from postMesage, it does nothing if Pusher already created
82
+ // @ts-ignore
47
83
  this.init()
48
84
  }
49
85
  }
@@ -51,7 +87,7 @@ export class HubtypeService {
51
87
  /**
52
88
  * @returns {Promise<void>}
53
89
  */
54
- init(user, lastMessageId, lastMessageUpdateDate) {
90
+ init(user, lastMessageId, lastMessageUpdateDate): Promise<void> {
55
91
  if (user) this.user = user
56
92
  if (lastMessageId) this.lastMessageId = lastMessageId
57
93
  if (lastMessageUpdateDate)
@@ -62,7 +98,7 @@ export class HubtypeService {
62
98
  /**
63
99
  * @returns {Promise<void>}
64
100
  */
65
- _initPusher() {
101
+ _initPusher(): Promise<void> {
66
102
  if (this.pusher) return Promise.resolve()
67
103
  if (!this.user.id || !this.appId) {
68
104
  // TODO recover user & appId somehow
@@ -74,11 +110,11 @@ export class HubtypeService {
74
110
  forceTLS: true,
75
111
  auth: {
76
112
  headers: this.constructHeaders(),
77
- },
113
+ } as AuthOptions,
78
114
  ...this.resolveServerConfig(),
79
115
  })
80
116
  this.channel = this.pusher.subscribe(this.pusherChannel)
81
- const connectionPromise = new Promise((resolve, reject) => {
117
+ const connectionPromise = new Promise<void>((resolve, reject) => {
82
118
  const cleanAndReject = msg => {
83
119
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
84
120
  clearTimeout(connectTimeout)
@@ -98,16 +134,17 @@ export class HubtypeService {
98
134
  this.channel.bind('botonic_response', data => this.onPusherEvent(data))
99
135
  this.channel.bind('update_message_info', data => this.onPusherEvent(data))
100
136
 
101
- this.pusher.connection.bind('error', event => {
102
- if (event.type == 'WebSocketError') this.handleConnectionChange(false)
103
- else {
104
- const errorMsg =
105
- event.error && event.error.data
106
- ? event.error.data.code || event.error.data.message
107
- : 'Connection error'
108
- cleanAndReject(`Pusher error (${errorMsg})`)
109
- }
110
- })
137
+ this.pusher &&
138
+ this.pusher.connection.bind('error', event => {
139
+ if (event.type == 'WebSocketError') this.handleConnectionChange(false)
140
+ else {
141
+ const errorMsg =
142
+ event.error && event.error.data
143
+ ? event.error.data.code || event.error.data.message
144
+ : 'Connection error'
145
+ cleanAndReject(`Pusher error (${errorMsg})`)
146
+ }
147
+ })
111
148
  })
112
149
  this.pusher.connection.bind('state_change', states => {
113
150
  if (states.current === 'connecting') this.updateAuthHeaders()
@@ -118,17 +155,17 @@ export class HubtypeService {
118
155
  return connectionPromise
119
156
  }
120
157
 
121
- constructHeaders() {
158
+ constructHeaders(): BotonicHeaders {
122
159
  const headers = {}
123
160
  if (this.user && this.user.id) headers['X-BOTONIC-USER-ID'] = this.user.id
124
161
  if (this.lastMessageId)
125
162
  headers['X-BOTONIC-LAST-MESSAGE-ID'] = this.lastMessageId
126
163
  if (this.lastMessageUpdateDate)
127
164
  headers['X-BOTONIC-LAST-MESSAGE-UPDATE-DATE'] = this.lastMessageUpdateDate
128
- return headers
165
+ return headers as BotonicHeaders
129
166
  }
130
167
 
131
- resolveServerConfig() {
168
+ resolveServerConfig(): ServerConfig {
132
169
  if (!this.server) {
133
170
  return { activityTimeout: ACTIVITY_TIMEOUT, pongTimeout: PONG_TIMEOUT }
134
171
  }
@@ -138,7 +175,7 @@ export class HubtypeService {
138
175
  }
139
176
  }
140
177
 
141
- updateAuthHeaders() {
178
+ updateAuthHeaders(): void {
142
179
  if (this.pusher) {
143
180
  this.pusher.config.auth.headers = {
144
181
  ...this.pusher.config.auth.headers,
@@ -147,26 +184,26 @@ export class HubtypeService {
147
184
  }
148
185
  }
149
186
 
150
- handleConnectionChange(online) {
151
- this.onPusherEvent({ action: 'connectionChange', online })
187
+ handleConnectionChange(online: boolean): void {
188
+ this.onPusherEvent({ action: 'connection_change', online })
152
189
  }
153
190
 
154
- onPusherEvent(event) {
191
+ onPusherEvent(event: any): void {
155
192
  if (this.onEvent && typeof this.onEvent === 'function') this.onEvent(event)
156
193
  }
157
194
 
158
- get pusherChannel() {
195
+ get pusherChannel(): string {
159
196
  return `private-encrypted-${this.appId}-${this.user.id}`
160
197
  }
161
198
 
162
- handleSentInput(message) {
199
+ handleSentInput(message: any): void {
163
200
  this.onEvent({
164
201
  action: 'update_message_info',
165
202
  message: { id: message.id, ack: 1 },
166
203
  })
167
204
  }
168
205
 
169
- handleUnsentInput(message) {
206
+ handleUnsentInput(message: any): void {
170
207
  this.onEvent({
171
208
  action: 'update_message_info',
172
209
  message: { id: message.id, ack: 0, unsentInput: message },
@@ -176,8 +213,9 @@ export class HubtypeService {
176
213
  /**
177
214
  * @return {Promise<void>}
178
215
  */
179
- async postMessage(user, message) {
216
+ async postMessage(user: any, message: any): Promise<void> {
180
217
  try {
218
+ // @ts-ignore
181
219
  await this.init(user)
182
220
  await axios.post(
183
221
  `${_HUBTYPE_API_URL_}/v1/provider_accounts/webhooks/webchat/${this.appId}/`,
@@ -196,26 +234,30 @@ export class HubtypeService {
196
234
  return Promise.resolve()
197
235
  }
198
236
 
199
- static async getWebchatVisibility({ appId }) {
237
+ static async getWebchatVisibility({
238
+ appId,
239
+ }: {
240
+ appId: string
241
+ }): Promise<AxiosResponse<any>> {
200
242
  return axios.get(
201
243
  `${_HUBTYPE_API_URL_}/v1/provider_accounts/${appId}/visibility/`
202
244
  )
203
245
  }
204
246
 
205
- destroyPusher() {
247
+ destroyPusher(): void {
206
248
  if (!this.pusher) return
207
249
  this.pusher.disconnect()
208
250
  this.pusher.unsubscribe(this.pusherChannel)
209
251
  this.pusher.unbind_all()
210
- this.pusher.channels = {}
252
+ this.pusher.channels = {} as Channels
211
253
  this.pusher = null
212
254
  }
213
255
 
214
- async onConnectionRegained() {
256
+ async onConnectionRegained(): Promise<void> {
215
257
  await this.resendUnsentInputs()
216
258
  }
217
259
 
218
- async resendUnsentInputs() {
260
+ async resendUnsentInputs(): Promise<void> {
219
261
  for (const message of this.unsentInputs()) {
220
262
  message.unsentInput &&
221
263
  (await this.postMessage(this.user, message.unsentInput))
@@ -1,5 +1,11 @@
1
1
  // eslint-disable-next-line filenames/match-regex
2
- export const getString = (locales, locale, stringID) => {
2
+ import { Locales } from './models'
3
+
4
+ export const getString = (
5
+ locales: Locales,
6
+ locale: string,
7
+ stringID: string
8
+ ): string => {
3
9
  let l = stringID.split('.').reduce((o, i) => o[i], locales[locale])
4
10
  if (l instanceof Array) l = l[Math.floor(Math.random() * l.length)]
5
11
  return String(l)
package/src/index.ts ADDED
@@ -0,0 +1,11 @@
1
+ export * from './constants'
2
+ export * from './core-bot'
3
+ export * from './debug'
4
+ export * from './handoff'
5
+ export * from './hubtype-service'
6
+ export * from './i18n'
7
+ export * from './models'
8
+ export * from './output-parser'
9
+ export * from './plugins'
10
+ export * from './routing'
11
+ export * from './utils'
@@ -0,0 +1,12 @@
1
+ import { RoutePath } from './legacy-types'
2
+
3
+ export interface BotState {
4
+ botId: string
5
+ isFirstInteraction: boolean
6
+ isHandoff: boolean
7
+ isShadowing: boolean
8
+ lastRoutePath: RoutePath
9
+ locale?: string
10
+ retries: number
11
+ botonicAction?: any
12
+ }
@@ -0,0 +1,9 @@
1
+ export enum Channels {
2
+ DEV = 'dev',
3
+ FACEBOOK = 'facebook',
4
+ GENERIC = 'generic',
5
+ TELEGRAM = 'telegram',
6
+ TWITTER = 'twitter',
7
+ WEBCHAT = 'webchat',
8
+ WHATSAPP = 'whatsapp',
9
+ }
@@ -0,0 +1,22 @@
1
+ export enum EventTypes {
2
+ CONNECTION = 'connection',
3
+ MESSAGE = 'message',
4
+ ACK = 'ack',
5
+ TRACK = 'track',
6
+ // Integration Events
7
+ NEW_USER = 'newUser',
8
+ RECEIVED_MESSAGE = 'receivedMessage',
9
+ BOT_EXECUTED = 'botExecuted',
10
+ BOT_ACTION = 'botAction',
11
+ ACTION_SENT = 'actionSent',
12
+ }
13
+
14
+ export interface BaseEvent {
15
+ eventId: string
16
+ userId: string
17
+ eventType: EventTypes
18
+ createdAt: string
19
+ modifiedAt?: string
20
+ channel: string
21
+ idFromChannel: string
22
+ }