@subiz/widget-v4 4.0.91 → 4.0.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compiled_src/bot.js +0 -11
- package/compiled_src/call/call.js +0 -61
- package/compiled_src/call/css.js +0 -2
- package/compiled_src/chatbox/AgentsAvatar.js +0 -16
- package/compiled_src/chatbox/AudioAttachments.js +0 -14
- package/compiled_src/chatbox/ButtonAttachments.js +1 -14
- package/compiled_src/chatbox/Buttons.js +0 -13
- package/compiled_src/chatbox/ChatButton.js +1 -78
- package/compiled_src/chatbox/DropdownSelect.js +3 -44
- package/compiled_src/chatbox/Emoji.js +0 -7
- package/compiled_src/chatbox/Event.js +0 -59
- package/compiled_src/chatbox/Events.js +4 -44
- package/compiled_src/chatbox/FileAttachments.js +0 -14
- package/compiled_src/chatbox/FormAttachment.js +1 -52
- package/compiled_src/chatbox/FormAttachments.js +0 -14
- package/compiled_src/chatbox/FormSubmitAttachments.js +0 -11
- package/compiled_src/chatbox/GenericTemplateAttachments.js +1 -20
- package/compiled_src/chatbox/Header.js +1 -46
- package/compiled_src/chatbox/ImageAttachments.js +0 -16
- package/compiled_src/chatbox/InfoMessage.js +0 -13
- package/compiled_src/chatbox/ListField.js +0 -16
- package/compiled_src/chatbox/MessageInput.js +1 -47
- package/compiled_src/chatbox/Order.js +0 -35
- package/compiled_src/chatbox/OrderAttachments.js +1 -23
- package/compiled_src/chatbox/PoweredBy.js +0 -7
- package/compiled_src/chatbox/ProductAttachments.js +0 -19
- package/compiled_src/chatbox/QuickReplies.js +0 -18
- package/compiled_src/chatbox/Rating.js +0 -37
- package/compiled_src/chatbox/ShadowDomRoot.js +0 -9
- package/compiled_src/chatbox/TextMessage.js +0 -64
- package/compiled_src/chatbox/Typing.js +0 -15
- package/compiled_src/chatbox/VideoAttachments.js +0 -14
- package/compiled_src/chatbox/Widget.js +6 -167
- package/compiled_src/chatbox/css.js +0 -2
- package/compiled_src/chatbox/dragscroll.js +1 -5
- package/compiled_src/chatbox/main.js +3 -43
- package/compiled_src/chatbox/releaseAnimation.js +0 -11
- package/compiled_src/chatbox/spinner.js +0 -10
- package/compiled_src/chatbox/time.js +0 -22
- package/compiled_src/chatbox/touchscroll.js +0 -7
- package/compiled_src/common.js +0 -22
- package/compiled_src/contact/contact.js +2 -52
- package/compiled_src/contact/css.js +0 -2
- package/compiled_src/lib.js +19 -46
- package/compiled_src/notif/css.js +0 -2
- package/compiled_src/notif/notif.js +0 -63
- package/compiled_src/order/address_picker.js +4 -38
- package/compiled_src/order/icon.js +0 -16
- package/compiled_src/order/index.js +1 -34
- package/compiled_src/order/order.js +2 -156
- package/compiled_src/plugin.js +1 -77
- package/compiled_src/popup/countdown.js +2 -33
- package/compiled_src/popup/css.js +0 -2
- package/compiled_src/popup/popup.js +2 -165
- package/compiled_src/popup/tick.core.commonjs.js +72 -222
- package/compiled_src/popup/tick.view.flip.commonjs.js +23 -31
- package/compiled_src/store/api.js +103 -66
- package/compiled_src/store/api_fake.js +3 -39
- package/compiled_src/store/realtime_fake.js +0 -6
- package/compiled_src/store/store.js +46 -257
- package/compiled_src/util/campaign.js +0 -13
- package/compiled_src/util/common.js +15 -190
- package/compiled_src/util/common.test.js +0 -4
- package/compiled_src/util/extractor.js +1 -21
- package/compiled_src/util/extractor.test.js +0 -3
- package/compiled_src/util/gate.js +0 -7
- package/compiled_src/util/gate.test.js +1 -2
- package/compiled_src/util/index.js +1 -7
- package/compiled_src/util/mutex.js +31 -0
- package/compiled_src/util/op.js +1 -14
- package/compiled_src/util/pubsub.js +0 -6
- package/compiled_src/util/pubsub.test.js +0 -2
- package/package.json +12 -12
- package/src/chatbox/main.js +3 -3
- package/src/lib.js +24 -2
- package/src/store/api.js +111 -22
- package/src/store/api_fake.js +5 -6
- package/src/store/store.js +38 -14
- package/src/util/common.js +0 -4
- package/src/util/index.js +1 -0
- package/src/util/mutex.js +27 -0
- package/dist/0b82fa7e5c3b07b40a44.png +0 -1
- package/dist/0f4af006e38ee8b93633.png +0 -1
- package/dist/132.js +0 -6777
- package/dist/178.js +0 -573
- package/dist/17f00e48d38.132.js +0 -1
- package/dist/17f00e48d38.178.js +0 -1
- package/dist/17f00e48d38.213.js +0 -1
- package/dist/17f00e48d38.335.js +0 -1
- package/dist/17f00e48d38.362.js +0 -1
- package/dist/17f00e48d38.441.js +0 -1
- package/dist/17f00e48d38.605.js +0 -1
- package/dist/17f00e48d38.678.js +0 -1
- package/dist/17f00e48d38.782.js +0 -1
- package/dist/17f00e48d38.app.js +0 -1
- package/dist/17f00e48d38.index.html +0 -22
- package/dist/17f00e48d38.library.html +0 -22
- package/dist/17f00e48d38.library.js +0 -1
- package/dist/17f00e48d38.preview.html +0 -759
- package/dist/17f00e48d38.preview.js +0 -1
- package/dist/17f00e48d38.screenshoot.js +0 -1
- package/dist/1ea1c6cd21d25176810c.png +0 -1
- package/dist/213.js +0 -3188
- package/dist/292d42404e1b03398f61.png +0 -1
- package/dist/312d376370831b7bea83.png +0 -1
- package/dist/313d1bfc1cf776d1aefe.png +0 -1
- package/dist/335.js +0 -411
- package/dist/362.js +0 -157
- package/dist/441.js +0 -2732
- package/dist/4aa58bb7a66bb44975aa.png +0 -1
- package/dist/56ce063bc6c81adb7322.png +0 -1
- package/dist/605.js +0 -328
- package/dist/678.js +0 -157
- package/dist/6a411166ef5cc79e0714.png +0 -1
- package/dist/6faf403782fefacc1649.png +0 -1
- package/dist/782.js +0 -204
- package/dist/79dca33c68fab79c067f.png +0 -1
- package/dist/82da1578fa84f9debaeb.png +0 -1
- package/dist/8b8e0f0824743974b282.png +0 -1
- package/dist/8d551390d81e39130a3c.png +0 -1
- package/dist/9fc61b9479877ebdb6c7.png +0 -1
- package/dist/HASH +0 -1
- package/dist/a165d31dcb3dc90f1057.png +0 -1
- package/dist/a98d4a5698812c4426b3.png +0 -1
- package/dist/assets/img/Facebook.64607ec.png +0 -0
- package/dist/assets/img/Zalo.6845707.png +0 -0
- package/dist/assets/img/award1a.1a58e10.png +0 -0
- package/dist/assets/img/award3a.3b74423.png +0 -0
- package/dist/assets/img/award4a.ed6ccd4.png +0 -0
- package/dist/assets/img/award5.39eb7ae.png +0 -0
- package/dist/assets/img/bubble_default.7d5e4ab.svg +0 -20
- package/dist/assets/img/caret.998eb8f.svg +0 -1
- package/dist/assets/img/convos_empty.2353007.svg +0 -72
- package/dist/assets/img/default.06e6ee0.jpg +0 -0
- package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
- package/dist/assets/img/done_gray.d7e8203.svg +0 -4
- package/dist/assets/img/done_green.b817fd4.svg +0 -4
- package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
- package/dist/assets/img/empty.29bed2d.svg +0 -23
- package/dist/assets/img/empty_1.0b98af0.svg +0 -11
- package/dist/assets/img/examplte_logo.f86535f.svg +0 -1
- package/dist/assets/img/external-link.90577cc.svg +0 -1
- package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
- package/dist/assets/img/ghn.070f8e3.svg +0 -17
- package/dist/assets/img/ghtk.326eac1.svg +0 -18
- package/dist/assets/img/image_default.be0698b.png +0 -0
- package/dist/assets/img/info.ebce7ea.svg +0 -1
- package/dist/assets/img/loader.37000a7.svg +0 -1
- package/dist/assets/img/loading_static.8f403ae.svg +0 -10
- package/dist/assets/img/main-service1.d536cc2.png +0 -0
- package/dist/assets/img/main-service2.9b99549.png +0 -0
- package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
- package/dist/assets/img/package.8d37d0f.svg +0 -5
- package/dist/assets/img/package_fade.763c001.svg +0 -1
- package/dist/assets/img/rating--average.1ea492c.svg +0 -12
- package/dist/assets/img/rating--great.e3d712e.svg +0 -16
- package/dist/assets/img/rating--poor.2938a25.svg +0 -12
- package/dist/assets/img/search.f9705ff.svg +0 -1
- package/dist/assets/img/send.6db52a9.svg +0 -3
- package/dist/assets/img/shop.f7dc7d8.svg +0 -1
- package/dist/assets/img/shop_faded.df7845a.svg +0 -1
- package/dist/assets/img/subiz-mono.877e9f5.svg +0 -3
- package/dist/assets/img/x.26fdfa3.svg +0 -5
- package/dist/c41606bf9d1b604e46d5.png +0 -1
- package/dist/ce1f7450ce6c1aacd330.png +0 -1
- package/dist/cf8c01e88f4770a6e3e5.png +0 -1
- package/dist/dfbcfeab1d5622a737e2.png +0 -1
- package/dist/e4893ed8c2f7b8329919.png +0 -1
- package/dist/ec2ab4eb4ef73d186186.png +0 -1
- package/dist/malicious-app.js +0 -13
- package/dist/screenshoot.html +0 -7
- package/dist/screenshoot.js +0 -5919
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
const test = require('tape');
|
|
4
|
-
|
|
5
4
|
const util = require('./common.js');
|
|
6
|
-
|
|
7
5
|
test('util.getNotiDescription', t => {
|
|
8
6
|
var tcs = [{
|
|
9
7
|
desc: 'not a message sent',
|
|
@@ -442,11 +440,9 @@ test('mapize', t => {
|
|
|
442
440
|
value: 4
|
|
443
441
|
}];
|
|
444
442
|
var m = util.mapize(arr, 'id');
|
|
445
|
-
|
|
446
443
|
for (var i = 0; i < arr.length; i++) {
|
|
447
444
|
t.equal(m[i], arr[i]);
|
|
448
445
|
}
|
|
449
|
-
|
|
450
446
|
t.end();
|
|
451
447
|
});
|
|
452
448
|
test('convo id from topic', t => {
|
|
@@ -10,15 +10,11 @@ exports.extractLinks = extractLinks;
|
|
|
10
10
|
exports.extractPhones = extractPhones;
|
|
11
11
|
exports.extractText = extractText;
|
|
12
12
|
exports.pipeExtracts = pipeExtracts;
|
|
13
|
-
|
|
14
13
|
var common = require('./common.js');
|
|
15
|
-
|
|
16
14
|
let emojis = ['like', 'unlike', 'wink', 'tongue-out', 'tired', 'surprised', 'smiling', 'sleepy', 'sad', 'neutral', 'heart-eyes', 'grinning', 'crying', 'confused', 'angry', 'cry', 'heart_eyes', 'neutral_face', 'emoji--disappointed', 'smile', 'open_mouth', 'tired_face', 'stuck_out_tongue', 'moyai', 'thumbsdown', 'dislike', 'thumbsup', 'ok_hand', 'octopus', 'pig2', 'wave', 'mouse', 'mouse2', 'rat'];
|
|
17
15
|
emojis = common.map(emojis, e => ':' + e + ':');
|
|
18
|
-
|
|
19
16
|
function extractEmojis(text) {
|
|
20
17
|
var out = [];
|
|
21
|
-
|
|
22
18
|
for (var i = 0; i < text.length; i++) {
|
|
23
19
|
for (var e = 0; e < emojis.length; e++) {
|
|
24
20
|
if (text.indexOf(emojis[e], i) !== i) continue;
|
|
@@ -30,77 +26,63 @@ function extractEmojis(text) {
|
|
|
30
26
|
break;
|
|
31
27
|
}
|
|
32
28
|
}
|
|
33
|
-
|
|
34
29
|
return out;
|
|
35
30
|
}
|
|
36
|
-
|
|
37
31
|
function extractLinks(text) {
|
|
38
32
|
text = text || '';
|
|
39
33
|
var reg = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.,~#?&//=]*)/gim;
|
|
40
34
|
var out = [];
|
|
41
35
|
var match;
|
|
42
|
-
|
|
43
36
|
while (match = reg.exec(text)) {
|
|
44
37
|
out.push({
|
|
45
38
|
index: match.index,
|
|
46
39
|
length: reg.lastIndex - match.index
|
|
47
40
|
});
|
|
48
41
|
}
|
|
49
|
-
|
|
50
42
|
return out;
|
|
51
43
|
}
|
|
52
|
-
|
|
53
44
|
function extractEmails(text) {
|
|
54
45
|
text = text || '';
|
|
55
46
|
var reg = /(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/gim;
|
|
56
47
|
var out = [];
|
|
57
48
|
var match;
|
|
58
|
-
|
|
59
49
|
while (match = reg.exec(text)) {
|
|
60
50
|
out.push({
|
|
61
51
|
index: match.index,
|
|
62
52
|
length: reg.lastIndex - match.index
|
|
63
53
|
});
|
|
64
54
|
}
|
|
65
|
-
|
|
66
55
|
return out;
|
|
67
56
|
}
|
|
68
|
-
|
|
69
57
|
function extractPhones(msg) {
|
|
70
58
|
msg = msg || '';
|
|
71
59
|
var fgmsg = '';
|
|
72
|
-
var realchmap = {};
|
|
73
60
|
|
|
61
|
+
var realchmap = {};
|
|
74
62
|
for (var i = 0; i < msg.length; i++) {
|
|
75
63
|
var ch = msg.charAt(i);
|
|
76
|
-
|
|
77
64
|
if (ch !== '.' && ch !== '-' && ch !== ' ') {
|
|
78
65
|
fgmsg += ch;
|
|
79
66
|
realchmap[fgmsg.length - 1] = i;
|
|
80
67
|
continue;
|
|
81
68
|
}
|
|
82
|
-
|
|
83
69
|
var prevCh = i > 0 ? msg.charAt(i - 1) : '-';
|
|
84
70
|
var nextCh = i < msg.length - 1 ? msg.charAt(i + 1) : '-';
|
|
85
71
|
if ('0123456789'.indexOf(prevCh) !== -1 && '0123456789'.indexOf(nextCh) !== -1) continue;
|
|
86
72
|
fgmsg += ch;
|
|
87
73
|
realchmap[fgmsg.length - 1] = i;
|
|
88
74
|
}
|
|
89
|
-
|
|
90
75
|
var reg = /([0-9]{8,13})/gim;
|
|
91
76
|
var out = [];
|
|
92
77
|
var match;
|
|
93
|
-
|
|
94
78
|
while (match = reg.exec(fgmsg)) {
|
|
95
79
|
out.push({
|
|
96
80
|
index: realchmap[match.index],
|
|
97
81
|
length: realchmap[reg.lastIndex - 1] - realchmap[match.index] + 1
|
|
98
82
|
});
|
|
99
83
|
}
|
|
100
|
-
|
|
101
84
|
return out;
|
|
102
85
|
}
|
|
103
|
-
|
|
104
86
|
function extract(text, extractor, type) {
|
|
105
87
|
if (!text) return [];
|
|
106
88
|
var out = [];
|
|
@@ -128,7 +110,6 @@ function extract(text, extractor, type) {
|
|
|
128
110
|
});
|
|
129
111
|
return common.filter(out, o => o.text !== '');
|
|
130
112
|
}
|
|
131
|
-
|
|
132
113
|
function pipeExtracts(text, extractors) {
|
|
133
114
|
var out = [];
|
|
134
115
|
if (common.size(extractors) === 0) return [{
|
|
@@ -143,7 +124,6 @@ function pipeExtracts(text, extractors) {
|
|
|
143
124
|
});
|
|
144
125
|
return out;
|
|
145
126
|
}
|
|
146
|
-
|
|
147
127
|
function extractText(text) {
|
|
148
128
|
var link = extractLinks;
|
|
149
129
|
link.type = 'link';
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var test = require('tape');
|
|
4
|
-
|
|
5
4
|
var lo = require('lodash');
|
|
6
|
-
|
|
7
5
|
let {
|
|
8
6
|
extractEmails,
|
|
9
7
|
extractPhones,
|
|
@@ -12,7 +10,6 @@ let {
|
|
|
12
10
|
extractEmojis,
|
|
13
11
|
maskEmojis
|
|
14
12
|
} = require('./extractor.js');
|
|
15
|
-
|
|
16
13
|
test('extract emails', t => {
|
|
17
14
|
var tcs = [{
|
|
18
15
|
text: 'email',
|
|
@@ -4,13 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
class Gate {
|
|
9
8
|
constructor(isOpen) {
|
|
10
9
|
this.isOpen = isOpen === true;
|
|
11
10
|
this.cbs = [];
|
|
12
11
|
}
|
|
13
|
-
|
|
14
12
|
open() {
|
|
15
13
|
this.isOpen = true;
|
|
16
14
|
let newcbs = [];
|
|
@@ -19,18 +17,15 @@ class Gate {
|
|
|
19
17
|
});
|
|
20
18
|
this.cbs = newcbs;
|
|
21
19
|
}
|
|
22
|
-
|
|
23
20
|
close() {
|
|
24
21
|
this.isOpen = false;
|
|
25
22
|
}
|
|
26
|
-
|
|
27
23
|
entry(cb, lock) {
|
|
28
24
|
if (this.isOpen) {
|
|
29
25
|
if (lock) this.isOpen = false;
|
|
30
26
|
cb && cb();
|
|
31
27
|
return Promise.resolve();
|
|
32
28
|
}
|
|
33
|
-
|
|
34
29
|
return new Promise(resolve => {
|
|
35
30
|
this.cbs.push(() => {
|
|
36
31
|
if (lock) this.isOpen = false;
|
|
@@ -39,7 +34,5 @@ class Gate {
|
|
|
39
34
|
});
|
|
40
35
|
});
|
|
41
36
|
}
|
|
42
|
-
|
|
43
37
|
}
|
|
44
|
-
|
|
45
38
|
exports.default = Gate;
|
|
@@ -4,23 +4,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var common = _interopRequireWildcard(require("./common.js"));
|
|
9
|
-
|
|
10
8
|
var extractor = _interopRequireWildcard(require("./extractor.js"));
|
|
11
|
-
|
|
12
9
|
var campaign = _interopRequireWildcard(require("./campaign.js"));
|
|
13
|
-
|
|
14
10
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
|
-
|
|
16
11
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
12
|
|
|
18
13
|
var sb = {};
|
|
19
14
|
sb = Object.assign(sb, common);
|
|
20
15
|
sb.Gate = require('./gate.js').default;
|
|
21
|
-
|
|
16
|
+
sb.Mutex = require('./mutex.js').default;
|
|
22
17
|
var op = require('./op.js');
|
|
23
|
-
|
|
24
18
|
sb.get = op.get;
|
|
25
19
|
sb.set = op.set;
|
|
26
20
|
sb.Pubsub = require('./pubsub.js').default;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
class Mutex {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.isOpen = true;
|
|
10
|
+
this.cbs = [];
|
|
11
|
+
}
|
|
12
|
+
_check() {
|
|
13
|
+
if (!this.isOpen) return;
|
|
14
|
+
let cb = this.cbs.pop();
|
|
15
|
+
if (!cb) return;
|
|
16
|
+
this.isOpen = false;
|
|
17
|
+
cb();
|
|
18
|
+
}
|
|
19
|
+
lock() {
|
|
20
|
+
return new Promise(resolve => {
|
|
21
|
+
this.cbs.push(resolve);
|
|
22
|
+
this._check();
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
unlock() {
|
|
26
|
+
if (this.isOpen) return;
|
|
27
|
+
this.isOpen = true;
|
|
28
|
+
this._check();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.default = Mutex;
|
package/compiled_src/util/op.js
CHANGED
|
@@ -5,65 +5,52 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.get = get;
|
|
7
7
|
exports.set = set;
|
|
8
|
-
var toStr = Object.prototype.toString;
|
|
9
8
|
|
|
9
|
+
var toStr = Object.prototype.toString;
|
|
10
10
|
var isArray = Array.isArray || function (obj) {
|
|
11
11
|
return toStr.call(obj) === '[object Array]';
|
|
12
12
|
};
|
|
13
|
-
|
|
14
13
|
function hasOwnProperty(obj, prop) {
|
|
15
14
|
if (obj == null) return false;
|
|
16
15
|
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
16
|
}
|
|
18
|
-
|
|
19
17
|
function getKey(key) {
|
|
20
18
|
var intKey = parseInt(key);
|
|
21
19
|
return intKey.toString() === key ? intKey : key;
|
|
22
20
|
}
|
|
23
|
-
|
|
24
21
|
function hasShallowProperty(obj, prop) {
|
|
25
22
|
return typeof prop === 'number' && isArray(obj) || hasOwnProperty(obj, prop);
|
|
26
23
|
}
|
|
27
|
-
|
|
28
24
|
function getShallowProperty(obj, prop) {
|
|
29
25
|
if (hasShallowProperty(obj, prop)) return obj[prop];
|
|
30
26
|
}
|
|
31
|
-
|
|
32
27
|
function get(obj, path, defaultValue) {
|
|
33
28
|
if (typeof path === 'number') path = [path];
|
|
34
29
|
if (!path || path.length === 0) return obj;
|
|
35
30
|
if (obj == null) return defaultValue;
|
|
36
|
-
|
|
37
31
|
if (typeof path === 'string') {
|
|
38
32
|
return get(obj, path.split('.'), defaultValue);
|
|
39
33
|
}
|
|
40
|
-
|
|
41
34
|
var currentPath = getKey(path[0]);
|
|
42
35
|
var nextObj = getShallowProperty(obj, currentPath);
|
|
43
36
|
if (nextObj === void 0) return defaultValue;
|
|
44
37
|
if (path.length === 1) return nextObj;
|
|
45
38
|
return get(obj[currentPath], path.slice(1), defaultValue);
|
|
46
39
|
}
|
|
47
|
-
|
|
48
40
|
function set(obj, path, value) {
|
|
49
41
|
if (typeof path === 'number') path = [path];
|
|
50
42
|
if (!path || path.length === 0) return obj;
|
|
51
|
-
|
|
52
43
|
if (typeof path === 'string') {
|
|
53
44
|
return set(obj, path.split('.').map(getKey), value);
|
|
54
45
|
}
|
|
55
|
-
|
|
56
46
|
var currentPath = path[0];
|
|
57
47
|
var currentValue = getShallowProperty(obj, currentPath);
|
|
58
|
-
|
|
59
48
|
if (path.length === 1) {
|
|
60
49
|
obj[currentPath] = value;
|
|
61
50
|
return currentValue;
|
|
62
51
|
}
|
|
63
|
-
|
|
64
52
|
if (currentValue === void 0) {
|
|
65
53
|
obj[currentPath] = typeof path[1] === 'number' ? [] : {};
|
|
66
54
|
}
|
|
67
|
-
|
|
68
55
|
return set(obj[currentPath], path.slice(1), value);
|
|
69
56
|
}
|
|
@@ -4,17 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var {
|
|
9
8
|
filter,
|
|
10
9
|
map
|
|
11
10
|
} = require('./common.js');
|
|
12
|
-
|
|
13
11
|
class Pubsub {
|
|
14
12
|
constructor() {
|
|
15
13
|
this.listeners = {};
|
|
16
14
|
}
|
|
17
|
-
|
|
18
15
|
publish(topic, payload, payload2, payload3) {
|
|
19
16
|
this.listeners[topic] = filter(this.listeners[topic], sub => sub.obj._isMounted);
|
|
20
17
|
map(this.listeners[topic], _ref => {
|
|
@@ -24,7 +21,6 @@ class Pubsub {
|
|
|
24
21
|
return cb(payload, payload2, payload3);
|
|
25
22
|
});
|
|
26
23
|
}
|
|
27
|
-
|
|
28
24
|
on2(obj, topic, cb) {
|
|
29
25
|
if (!this.listeners[topic]) this.listeners[topic] = [];
|
|
30
26
|
this.listeners[topic].push({
|
|
@@ -32,7 +28,5 @@ class Pubsub {
|
|
|
32
28
|
cb
|
|
33
29
|
});
|
|
34
30
|
}
|
|
35
|
-
|
|
36
31
|
}
|
|
37
|
-
|
|
38
32
|
exports.default = Pubsub;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@subiz/widget-v4",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.93",
|
|
4
4
|
"main": "./compiled_src/lib.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "npx webpack serve --config webpack.dev.js",
|
|
@@ -14,27 +14,27 @@
|
|
|
14
14
|
"@subiz/storage": "0.0.8",
|
|
15
15
|
"@subiz/wsclient": "^3.1.7",
|
|
16
16
|
"cookie_js": "1.4.2",
|
|
17
|
-
"core-js": "^3.
|
|
17
|
+
"core-js": "^3.26.1",
|
|
18
18
|
"css-loader": "5.2.7",
|
|
19
19
|
"file-loader": "^6.2.0",
|
|
20
20
|
"less": "^4.1.3",
|
|
21
|
-
"less-loader": "^11.
|
|
22
|
-
"marked": "^4.
|
|
23
|
-
"preact": "^10.11.
|
|
21
|
+
"less-loader": "^11.1.0",
|
|
22
|
+
"marked": "^4.2.2",
|
|
23
|
+
"preact": "^10.11.3"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@babel/cli": "^7.
|
|
27
|
-
"@babel/core": "^7.
|
|
26
|
+
"@babel/cli": "^7.19.3",
|
|
27
|
+
"@babel/core": "^7.20.2",
|
|
28
28
|
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
|
29
29
|
"@babel/plugin-transform-react-jsx": "^7.19.0",
|
|
30
|
-
"@babel/preset-env": "^7.
|
|
31
|
-
"babel-loader": "^
|
|
30
|
+
"@babel/preset-env": "^7.20.2",
|
|
31
|
+
"babel-loader": "^9.1.0",
|
|
32
32
|
"babel-plugin-syntax-jsx": "^6.18.0",
|
|
33
33
|
"html-webpack-plugin": "^5.5.0",
|
|
34
34
|
"prettier": "^2.7.1",
|
|
35
|
-
"puppeteer": "^
|
|
36
|
-
"webpack": "^5.
|
|
37
|
-
"webpack-bundle-analyzer": "^4.
|
|
35
|
+
"puppeteer": "^19.2.2",
|
|
36
|
+
"webpack": "^5.75.0",
|
|
37
|
+
"webpack-bundle-analyzer": "^4.7.0",
|
|
38
38
|
"webpack-cli": "^4.10.0",
|
|
39
39
|
"webpack-dev-server": "^4.11.1"
|
|
40
40
|
}
|
package/src/chatbox/main.js
CHANGED
|
@@ -22,7 +22,8 @@ export default class Main extends Com {
|
|
|
22
22
|
let found = sb.find(plugins, (plugin) => plugin.id === this.props.plugin.id)
|
|
23
23
|
if (!found) return
|
|
24
24
|
let css = (await promiseMainCSS).default.default.toString()
|
|
25
|
-
|
|
25
|
+
|
|
26
|
+
var outcss = sb.replaceCssVariable(css, found.chatbox)
|
|
26
27
|
sb.setCss(this.props.plugin.id, this.$cssStyleDiv, outcss)
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -68,9 +69,8 @@ export default class Main extends Com {
|
|
|
68
69
|
if (!this.state.cssready) return null
|
|
69
70
|
if (sb.isUserBanned(this.props.store.matchUser())) return null
|
|
70
71
|
if (!this.props.t) return null
|
|
71
|
-
var cls = this.props.store.isMobile() ? 'mobile' : 'desktop'
|
|
72
72
|
return (
|
|
73
|
-
<div class={
|
|
73
|
+
<div class={this.props.store.isMobile() ? 'mobile' : 'desktop'}>
|
|
74
74
|
<ChatButton
|
|
75
75
|
plugin={this.props.plugin}
|
|
76
76
|
store={this.props.store}
|
package/src/lib.js
CHANGED
|
@@ -10,9 +10,9 @@ document.head.append($link)
|
|
|
10
10
|
sb.preloadWebfonts(['Roboto'], [400, 500])
|
|
11
11
|
|
|
12
12
|
class Widget {
|
|
13
|
-
constructor(ApiURL, FileURL, RealtimeURL, inmem, fake
|
|
13
|
+
constructor(ApiURL, FileURL, RealtimeURL, inmem, fake) {
|
|
14
14
|
this.domGate = new sb.Gate()
|
|
15
|
-
this.store = new Store(ApiURL, FileURL, RealtimeURL, inmem, fake
|
|
15
|
+
this.store = new Store(ApiURL, FileURL, RealtimeURL, inmem, fake)
|
|
16
16
|
|
|
17
17
|
// expose store for debugging purpose
|
|
18
18
|
window.sbz_store = this.store
|
|
@@ -37,6 +37,28 @@ class Widget {
|
|
|
37
37
|
cb()
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
async cleanLogin(user_id, tokenGenerator) {}
|
|
41
|
+
|
|
42
|
+
async login(accid, user_id, tokenGenerator, $container) {
|
|
43
|
+
let user = await this.store.login(accid, user_id, tokenGenerator)
|
|
44
|
+
|
|
45
|
+
if (!$container) $container = document.body
|
|
46
|
+
this.pluginMgr = new PluginMgr(this, $container)
|
|
47
|
+
|
|
48
|
+
let clean = setInterval(() => {
|
|
49
|
+
// check if the dom is deleted
|
|
50
|
+
if ($container && $container.isConnected) return
|
|
51
|
+
this.pluginMgr.destroy()
|
|
52
|
+
clearInterval(clean)
|
|
53
|
+
}, 1000)
|
|
54
|
+
this.domGate.open()
|
|
55
|
+
return user
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
logout(accid) {
|
|
59
|
+
return this.store.logout()
|
|
60
|
+
}
|
|
61
|
+
|
|
40
62
|
async setAccount(id, $container, mask, cb) {
|
|
41
63
|
let outmask = await this.store.init(id, mask)
|
|
42
64
|
// add container to client site
|
package/src/store/api.js
CHANGED
|
@@ -13,6 +13,8 @@ function jsonifyTextPlain(param, done) {
|
|
|
13
13
|
|
|
14
14
|
export default class {
|
|
15
15
|
constructor(ApiURL, FileURL) {
|
|
16
|
+
this.refreshLock = new sb.Mutex()
|
|
17
|
+
|
|
16
18
|
this.FileURL = FileURL
|
|
17
19
|
this.ApiURL = ApiURL
|
|
18
20
|
this.apireq = ajax
|
|
@@ -23,7 +25,19 @@ export default class {
|
|
|
23
25
|
.beforeHook(jsonifyTextPlain)
|
|
24
26
|
.setParser('json')
|
|
25
27
|
.beforeHook((param, done) => {
|
|
26
|
-
|
|
28
|
+
if (this.token_generator) {
|
|
29
|
+
let user_id = this.profile_id
|
|
30
|
+
this.token_generator().then((token) => {
|
|
31
|
+
if (user_id != this.profile_id) return done(true) // outdated
|
|
32
|
+
|
|
33
|
+
if (!token) return done(false)
|
|
34
|
+
if (token == 'error') return done(false)
|
|
35
|
+
param.request = param.request.addQuery('x-access-token', token)
|
|
36
|
+
return done(true)
|
|
37
|
+
})
|
|
38
|
+
return
|
|
39
|
+
}
|
|
40
|
+
|
|
27
41
|
if (this.mask) param.request = param.request.addQuery('x-user-mask', this.mask)
|
|
28
42
|
return done(true)
|
|
29
43
|
})
|
|
@@ -40,6 +54,101 @@ export default class {
|
|
|
40
54
|
this.uid = obj.uid
|
|
41
55
|
}
|
|
42
56
|
|
|
57
|
+
async setTokenGenerator(accid, uid, tokenGenerator) {
|
|
58
|
+
this.tokensession = this.tokensession || 0
|
|
59
|
+
this.tokensession++
|
|
60
|
+
let tokensession = this.tokensession
|
|
61
|
+
|
|
62
|
+
if (!accid || !sb.startsWith(accid, 'ac')) return {error: 'invalid_account_id'}
|
|
63
|
+
if (!uid) return {error: 'invalid_user_id'}
|
|
64
|
+
if (typeof tokenGenerator !== 'function') return {error: 'invalid_token_generator'}
|
|
65
|
+
|
|
66
|
+
this.accid = accid
|
|
67
|
+
this.profile_id = uid
|
|
68
|
+
this.token_generator = async (force) => {
|
|
69
|
+
await this.refreshLock.lock()
|
|
70
|
+
if (tokensession != this.tokensession) {
|
|
71
|
+
this.refreshLock.unlock()
|
|
72
|
+
return // outdated
|
|
73
|
+
}
|
|
74
|
+
let age = (sb.Date.now() - (this.last_token_at || 0)) / 1000
|
|
75
|
+
|
|
76
|
+
// very good token, use this one
|
|
77
|
+
if (!force && this.last_token && age < 1800) {
|
|
78
|
+
this.refreshLock.unlock()
|
|
79
|
+
return this.last_token
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (!force && this.last_token && age < 3000) {
|
|
83
|
+
// the token is still good, but should get new one
|
|
84
|
+
if (this.token_generator)
|
|
85
|
+
setTimeout(async () => {
|
|
86
|
+
let token, err
|
|
87
|
+
try {
|
|
88
|
+
token = await tokenGenerator(uid)
|
|
89
|
+
} catch (e) {
|
|
90
|
+
err = e
|
|
91
|
+
}
|
|
92
|
+
if (tokensession != this.tokensession) {
|
|
93
|
+
this.refreshLock.unlock()
|
|
94
|
+
return // outdated
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (err) this.last_token = 'error'
|
|
98
|
+
else this.last_token = token
|
|
99
|
+
this.last_token_at = sb.Date.now()
|
|
100
|
+
this.refreshLock.unlock()
|
|
101
|
+
})
|
|
102
|
+
return this.last_token
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// the token is outdated, must get new one
|
|
106
|
+
let token
|
|
107
|
+
let err
|
|
108
|
+
try {
|
|
109
|
+
token = await tokenGenerator(uid)
|
|
110
|
+
} catch (e) {
|
|
111
|
+
err = e
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (tokensession != this.tokensession) {
|
|
115
|
+
this.refreshLock.unlock()
|
|
116
|
+
return // outdated
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (err) this.last_token = 'error'
|
|
120
|
+
else this.last_token = token
|
|
121
|
+
this.last_token_at = sb.Date.now()
|
|
122
|
+
this.refreshLock.unlock()
|
|
123
|
+
return this.last_token
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
let outuser
|
|
127
|
+
for (let i = 0; true; i++) {
|
|
128
|
+
await this.token_generator(true)
|
|
129
|
+
if (tokensession != this.tokensession) break // outdated
|
|
130
|
+
outuser = await ajax
|
|
131
|
+
.setBaseUrl(this.ApiURL)
|
|
132
|
+
.withCredentials(true)
|
|
133
|
+
.addQuery('v', '6')
|
|
134
|
+
.addQuery('x-access-token', this.last_token)
|
|
135
|
+
.setParser('json')
|
|
136
|
+
.get(`/accounts/${accid}/users/${uid}`)
|
|
137
|
+
if (!sb.get(outuser, 'body.id')) {
|
|
138
|
+
let sleeptime = Math.min(2000 + i * 100, 120000)
|
|
139
|
+
await sb.sleep(sleeptime)
|
|
140
|
+
continue
|
|
141
|
+
}
|
|
142
|
+
break
|
|
143
|
+
}
|
|
144
|
+
if (outuser.error) {
|
|
145
|
+
if (sb.get(outuser.body.code)) return {error: outuser.body.code}
|
|
146
|
+
return outuser
|
|
147
|
+
}
|
|
148
|
+
this.uid = outuser.body.id
|
|
149
|
+
return outuser.body
|
|
150
|
+
}
|
|
151
|
+
|
|
43
152
|
listConversations = (_) =>
|
|
44
153
|
this.apireq
|
|
45
154
|
.addQuery('user_id', this.uid)
|
|
@@ -52,7 +161,7 @@ export default class {
|
|
|
52
161
|
ajax = ajax
|
|
53
162
|
|
|
54
163
|
start = (extraData) => {
|
|
55
|
-
let data = {starter_id: this.uid, starter_type: 'user',
|
|
164
|
+
let data = {starter_id: this.uid, starter_type: 'user', touchpoint: {channel: 'subiz', source: 'web'}}
|
|
56
165
|
sb.each(extraData, (v, k) => {
|
|
57
166
|
data[k] = v
|
|
58
167
|
})
|
|
@@ -119,26 +228,6 @@ export default class {
|
|
|
119
228
|
|
|
120
229
|
getChallenge = (accid) => this.apireq.post(`/accounts/${accid}/scrypt-challenges`)
|
|
121
230
|
|
|
122
|
-
async createAgentUser(agenttoken) {
|
|
123
|
-
for (var i = 0; i < 10; i++) {
|
|
124
|
-
let {body, error} = await ajax
|
|
125
|
-
.setBaseUrl(this.ApiURL)
|
|
126
|
-
.setContentType('text/plain')
|
|
127
|
-
.beforeHook(jsonifyTextPlain)
|
|
128
|
-
.setParser('json')
|
|
129
|
-
.addQuery('x-access-token', agenttoken)
|
|
130
|
-
.post(`/agent-users`)
|
|
131
|
-
if (error) {
|
|
132
|
-
await sb.sleep(1000)
|
|
133
|
-
continue
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
let userid = body ? body.id || '' : ''
|
|
137
|
-
if (!userid) return ''
|
|
138
|
-
return body.account_id + '@' + userid
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
231
|
async createUser(accid) {
|
|
143
232
|
for (var i = 0; i < 10; i++) {
|
|
144
233
|
const {body: challenge} = await this.getChallenge(accid)
|
package/src/store/api_fake.js
CHANGED
|
@@ -16,11 +16,7 @@ const OK200 = Promise.resolve({code: 200})
|
|
|
16
16
|
export default class {
|
|
17
17
|
constructor(ApiURL, FileURL) {
|
|
18
18
|
this.FileURL = FileURL
|
|
19
|
-
this.apireq = ajax
|
|
20
|
-
.setBaseUrl(ApiURL)
|
|
21
|
-
.setContentType('text/plain')
|
|
22
|
-
.beforeHook(jsonifyTextPlain)
|
|
23
|
-
.setParser('json')
|
|
19
|
+
this.apireq = ajax.setBaseUrl(ApiURL).setContentType('text/plain').beforeHook(jsonifyTextPlain).setParser('json')
|
|
24
20
|
}
|
|
25
21
|
|
|
26
22
|
// for faking data (optional for real api)
|
|
@@ -28,6 +24,10 @@ export default class {
|
|
|
28
24
|
this.agentid = agid
|
|
29
25
|
}
|
|
30
26
|
|
|
27
|
+
setTokenGenerator(accid, uid, tokenGenerator) {
|
|
28
|
+
this.accid = accid
|
|
29
|
+
}
|
|
30
|
+
|
|
31
31
|
setAuth(obj) {
|
|
32
32
|
this.accid = obj.accid
|
|
33
33
|
this.mask = obj.mask
|
|
@@ -66,7 +66,6 @@ export default class {
|
|
|
66
66
|
getChallenge = (accid) => OK200
|
|
67
67
|
|
|
68
68
|
createUser = (accid) => Promise.resolve({account_id: accid, id: 'usqzgtgfake', mask: 'fakemask'})
|
|
69
|
-
createAgentUser = (agenttoken) => Promise.resolve('fakemask')
|
|
70
69
|
|
|
71
70
|
time = (_) => Promise.resolve({code: 200, body: new sb.Date().toISOString()})
|
|
72
71
|
updateUser = (data) => OK200
|