@subiz/widget-v4 4.1.191 → 4.1.196

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 (120) hide show
  1. package/assets/less/chatbox.less +0 -1
  2. package/assets/less/message.less +71 -4
  3. package/compiled_src/chatbox/Event.js +37 -6
  4. package/compiled_src/chatbox/Events.js +20 -0
  5. package/compiled_src/chatbox/FileAttachments.js +36 -4
  6. package/compiled_src/chatbox/ImageAttachments.js +31 -4
  7. package/compiled_src/chatbox/QuoteMessage.js +99 -0
  8. package/compiled_src/chatbox/Rating.js +4 -0
  9. package/compiled_src/chatbox/TextMessage.js +49 -4
  10. package/compiled_src/chatbox/Widget.js +43 -1
  11. package/compiled_src/store/api.js +2 -0
  12. package/compiled_src/store/store.js +45 -3
  13. package/compiled_src/util/common.js +13 -1
  14. package/dist/127.js +273 -0
  15. package/dist/132.js +2802 -0
  16. package/dist/185.js +1827 -0
  17. package/dist/19b9941db90.127.js +1 -0
  18. package/dist/19b9941db90.132.js +1 -0
  19. package/dist/19b9941db90.185.js +1 -0
  20. package/dist/19b9941db90.27.js +1 -0
  21. package/dist/19b9941db90.278.js +1 -0
  22. package/dist/19b9941db90.339.js +1 -0
  23. package/dist/19b9941db90.459.js +1 -0
  24. package/dist/19b9941db90.490.js +1 -0
  25. package/dist/19b9941db90.74.js +1 -0
  26. package/dist/19b9941db90.997.js +1 -0
  27. package/dist/19b9941db90.app.js +1 -0
  28. package/dist/19b9941db90.chat.html +1 -0
  29. package/dist/19b9941db90.chat.js +1 -0
  30. package/dist/19b9941db90.form.html +1 -0
  31. package/dist/19b9941db90.form.js +1 -0
  32. package/dist/19b9941db90.index.html +72 -0
  33. package/dist/19b9941db90.library.html +72 -0
  34. package/dist/19b9941db90.library.js +1 -0
  35. package/dist/19b9941db90.preview.html +759 -0
  36. package/dist/19b9941db90.preview.js +1 -0
  37. package/dist/19b9941db90.webview.js +1 -0
  38. package/dist/27.js +35 -0
  39. package/dist/459.js +35 -0
  40. package/dist/490.js +305 -0
  41. package/dist/74.js +372 -0
  42. package/dist/997.js +35 -0
  43. package/dist/HASH +1 -0
  44. package/dist/assets/img/Facebook.64607ec.png +0 -0
  45. package/dist/assets/img/Zalo.6845707.png +0 -0
  46. package/dist/assets/img/award1a.1a58e10.png +0 -0
  47. package/dist/assets/img/award3a.3b74423.png +0 -0
  48. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  49. package/dist/assets/img/award5.39eb7ae.png +0 -0
  50. package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
  51. package/dist/assets/img/caret.998eb8f.svg +1 -0
  52. package/dist/assets/img/convos_empty.2353007.svg +72 -0
  53. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  54. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  55. package/dist/assets/img/done_gray.d7e8203.svg +4 -0
  56. package/dist/assets/img/done_green.b817fd4.svg +4 -0
  57. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  68. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  69. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  70. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  71. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  72. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  73. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  74. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  75. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  76. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  77. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  78. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  79. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  80. package/dist/assets/img/empty.29bed2d.svg +23 -0
  81. package/dist/assets/img/empty_1.0b98af0.svg +11 -0
  82. package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
  83. package/dist/assets/img/external-link.90577cc.svg +1 -0
  84. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  85. package/dist/assets/img/ghn.070f8e3.svg +17 -0
  86. package/dist/assets/img/ghtk.326eac1.svg +18 -0
  87. package/dist/assets/img/image_default.be0698b.png +0 -0
  88. package/dist/assets/img/info.ebce7ea.svg +1 -0
  89. package/dist/assets/img/loader.37000a7.svg +1 -0
  90. package/dist/assets/img/loading_static.a27f0ac.svg +10 -0
  91. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  92. package/dist/assets/img/main-service2.9b99549.png +0 -0
  93. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  94. package/dist/assets/img/package.8d37d0f.svg +5 -0
  95. package/dist/assets/img/package_fade.763c001.svg +1 -0
  96. package/dist/assets/img/rating--average.1ea492c.svg +12 -0
  97. package/dist/assets/img/rating--great.e3d712e.svg +16 -0
  98. package/dist/assets/img/rating--poor.2938a25.svg +12 -0
  99. package/dist/assets/img/search.f9705ff.svg +1 -0
  100. package/dist/assets/img/send.6db52a9.svg +3 -0
  101. package/dist/assets/img/shop.f7dc7d8.svg +1 -0
  102. package/dist/assets/img/shop_faded.df7845a.svg +1 -0
  103. package/dist/assets/img/stars_v2.79cf728.png +0 -0
  104. package/dist/assets/img/subiz-mono.8fbc067.svg +3 -0
  105. package/dist/assets/img/x.26fdfa3.svg +5 -0
  106. package/dist/malicious-app.js +17 -0
  107. package/dist/screenshoot.html +7 -0
  108. package/dist/screenshoot.js +13026 -0
  109. package/package.json +8 -8
  110. package/src/chatbox/Event.js +48 -7
  111. package/src/chatbox/Events.js +21 -1
  112. package/src/chatbox/FileAttachments.js +31 -4
  113. package/src/chatbox/ImageAttachments.js +26 -3
  114. package/src/chatbox/QuoteMessage.js +94 -0
  115. package/src/chatbox/Rating.js +5 -0
  116. package/src/chatbox/TextMessage.js +50 -2
  117. package/src/chatbox/Widget.js +52 -0
  118. package/src/store/api.js +3 -0
  119. package/src/store/store.js +51 -2
  120. package/src/util/common.js +19 -1
@@ -15,6 +15,8 @@ let memlocalStorage = require('./inmem_localstorage.js')
15
15
  const MAX_CONVO = 20
16
16
  const page_loaded = sb.Date.now()
17
17
 
18
+ const DEBUG_ACCOUNT_IDS = ['acqsulrowbxiugvginhw', 'acryguzgwxmamhzmqlyx'] // acc test and minvoice
19
+
18
20
  // available localstorage key mask, user, hasManuallyClosed, isopen, close_preview_at, lastview, bot_run_logs, plugin_run_logs
19
21
  export default class Store {
20
22
  inmem = false
@@ -25,6 +27,7 @@ export default class Store {
25
27
  this.CONNECTION_CHECK_INTERVAL = 3000
26
28
  this.reconnectTimestamp = 0
27
29
  this.g_sync = {}
30
+ this.agent_rt_message_sent_dict = {}
28
31
  this._die = false
29
32
  this.forceDevice = null
30
33
  this.forcePlugins = {}
@@ -461,6 +464,18 @@ export default class Store {
461
464
  return this._doFetchMsg(convoid)
462
465
  }
463
466
 
467
+ reloadConvoEvents = async (convoid) => {
468
+ await this.chain.reload(convoid, () => {
469
+ return [[], '']
470
+ })
471
+ let {error} = await this.chain.fetchMore(convoid, 150, async (type, anchor, limit) => {
472
+ let [events, newanchor, error, outofmsg] = await this.listmessageapi(type, anchor, limit)
473
+ if (outofmsg) this.outofmsgM[convoid] = true
474
+ return [events, newanchor, error]
475
+ })
476
+ return {error}
477
+ }
478
+
464
479
  _doFetchMsg = async (convoid) => {
465
480
  let {error} = await this.chain.fetchMore(convoid, 150, async (type, anchor, limit) => {
466
481
  if (this.outofmsgM[convoid]) return [[], '']
@@ -607,6 +622,7 @@ export default class Store {
607
622
 
608
623
  async _initResource(accid, auth, realtimep) {
609
624
  this.g_sync = {}
625
+ this._current_acc_id = accid
610
626
 
611
627
  let user = await this.api.setAuth(auth)
612
628
  if (typeof sbz_info != 'undefined') sbz_info.store_7 = true
@@ -621,7 +637,7 @@ export default class Store {
621
637
  this.cache = new KV(new LSDB('sbz2023', true), 'kv')
622
638
  if (this.realtime) this.realtime.stop()
623
639
  if (this.fake) this.realtime = new RealtimeFake()
624
- else this.realtime = new Realtime(this.RealtimeURL, realtimep, xhrsend)
640
+ else this.realtime = new Realtime(this.RealtimeURL, realtimep, xhrsend, accid)
625
641
 
626
642
  this.realtime.onEvent(this.onWs.bind(this))
627
643
  this.realtime.onInterrupted(async () => {
@@ -733,6 +749,7 @@ export default class Store {
733
749
  `message_pong.account.${accid}.user.${userid}`,
734
750
  `conversation_rating_requested.account.${accid}.user.${userid}`,
735
751
  `conversation_rated.account.${accid}.user.${userid}`,
752
+ `conversation_events.account.${accid}.user.${userid}`,
736
753
  ])
737
754
  await this.readyGate.entry()
738
755
  }
@@ -910,7 +927,33 @@ export default class Store {
910
927
  this.wsGate.open()
911
928
  }
912
929
 
930
+ sendBugReport = (str) => this.api.sendBugReport(str)
931
+
932
+ matchDebugAccountIds = () => DEBUG_ACCOUNT_IDS
933
+
934
+ handleLogCompare(ev) {
935
+ if (!DEBUG_ACCOUNT_IDS.includes(this._current_acc_id)) return
936
+ if (ev.type !== 'message_sent') return
937
+ let byType = sb.get(ev, 'by.type')
938
+ if (byType === 'user') return
939
+
940
+ this.agent_rt_message_sent_dict[ev.id] = ev
941
+ }
942
+
943
+ sbzListConversations = () => {
944
+ return this.api.listConversations()
945
+ }
946
+
947
+ sbzListMessages = (cid) => {
948
+ return this.api.listMessages(cid, 100, '')
949
+ }
950
+
951
+ listAgentRealtimeMessageSent = () => {
952
+ return this.agent_rt_message_sent_dict
953
+ }
954
+
913
955
  async _onWs(ev) {
956
+ this.handleLogCompare(ev)
914
957
  if (this._die) return
915
958
  if (!ev || !ev.type) return
916
959
  ev.created = sb.getMs(ev.created)
@@ -923,6 +966,11 @@ export default class Store {
923
966
  return
924
967
  }
925
968
 
969
+ if (ev.type === 'message_deleted') {
970
+ this.pubsub.publish('message_updated', ev)
971
+ return
972
+ }
973
+
926
974
  // convo events
927
975
  let user = this.cache.match('user') || {}
928
976
  let cid = sb.convoOfEv(ev)
@@ -940,7 +988,7 @@ export default class Store {
940
988
  }
941
989
  }
942
990
 
943
- if (cid.startsWith('cslight')) {
991
+ if (cid && cid.startsWith('cslight')) {
944
992
  convo = this.lightConvos[cid]
945
993
  if (!convo) return
946
994
  convo.events.push(ev)
@@ -1213,6 +1261,7 @@ export default class Store {
1213
1261
 
1214
1262
  onConvoEvent = (o, cb) => this.pubsub.on2(o, 'events', cb)
1215
1263
  onWidgetClose = (o, cb) => this.pubsub.on2(o, 'sbz_close_widget', cb)
1264
+ onMessageUpdated = (o, cb) => this.pubsub.on2(o, 'message_updated', cb)
1216
1265
 
1217
1266
  seenConvo = (id) => {
1218
1267
  if (!id || id === 'create') return
@@ -274,6 +274,7 @@ export function convoToEv(convoid, ev) {
274
274
  switch (ev.type) {
275
275
  case 'message_sent':
276
276
  case 'message_updated':
277
+ case 'message_deleted':
277
278
  case 'message_pong':
278
279
  return op.set(ev, 'data.message.conversation_id', convoid)
279
280
  case 'ticket_updated':
@@ -1596,5 +1597,22 @@ export function isEmptyBlock(block) {
1596
1597
 
1597
1598
  export function isEmptyMessage(msg) {
1598
1599
  if (!msg) return true
1599
- if (!msg.text && isEmptyBlock(msg.block) && !size(msg.attachments)) return true
1600
+ if (!msg.text && isEmptyBlock(msg.block) && isEmptyAttachment(msg)) return true
1601
+ return false
1602
+ }
1603
+
1604
+ function isEmptyAttachment(msg) {
1605
+ if (!msg) return true
1606
+ if (!size(msg.attachments)) return true
1607
+ return (
1608
+ size(
1609
+ filter(msg.attachments, (att) => {
1610
+ // true => has value
1611
+ if (att.type == 'quick_replies') {
1612
+ return size(filter(att.quick_replies, (r) => size(trim(r)) > 0)) > 0
1613
+ }
1614
+ return true
1615
+ }),
1616
+ ) == 0
1617
+ )
1600
1618
  }