@subiz/widget-v4 4.1.2 → 4.1.5

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 (108) hide show
  1. package/compiled_src/chatbox/ChatButton.js +25 -0
  2. package/compiled_src/lib.js +18 -3
  3. package/compiled_src/notif/notif.js +17 -11
  4. package/compiled_src/store/api.js +116 -108
  5. package/compiled_src/store/api_fake.js +4 -5
  6. package/compiled_src/store/store.js +51 -35
  7. package/dist/132.js +6611 -0
  8. package/dist/178.js +406 -0
  9. package/dist/18575b13d4f.132.js +1 -0
  10. package/dist/18575b13d4f.178.js +1 -0
  11. package/dist/18575b13d4f.213.js +1 -0
  12. package/dist/18575b13d4f.335.js +1 -0
  13. package/dist/18575b13d4f.362.js +1 -0
  14. package/dist/18575b13d4f.441.js +1 -0
  15. package/dist/18575b13d4f.605.js +1 -0
  16. package/dist/18575b13d4f.678.js +1 -0
  17. package/dist/18575b13d4f.782.js +1 -0
  18. package/dist/18575b13d4f.app.js +1 -0
  19. package/dist/18575b13d4f.index.html +26 -0
  20. package/dist/18575b13d4f.library.html +26 -0
  21. package/dist/18575b13d4f.library.js +1 -0
  22. package/dist/18575b13d4f.preview.html +759 -0
  23. package/dist/18575b13d4f.preview.js +1 -0
  24. package/dist/18575b13d4f.screenshoot.js +1 -0
  25. package/dist/18575b13d4f.webview.js +1 -0
  26. package/dist/213.js +2774 -0
  27. package/dist/335.js +372 -0
  28. package/dist/362.js +107 -0
  29. package/dist/441.js +2855 -0
  30. package/dist/605.js +303 -0
  31. package/dist/678.js +107 -0
  32. package/dist/782.js +107 -0
  33. package/dist/HASH +1 -0
  34. package/dist/assets/img/Facebook.64607ec.png +0 -0
  35. package/dist/assets/img/Zalo.6845707.png +0 -0
  36. package/dist/assets/img/award1a.1a58e10.png +0 -0
  37. package/dist/assets/img/award3a.3b74423.png +0 -0
  38. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  39. package/dist/assets/img/award5.39eb7ae.png +0 -0
  40. package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
  41. package/dist/assets/img/caret.998eb8f.svg +1 -0
  42. package/dist/assets/img/convos_empty.2353007.svg +72 -0
  43. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  44. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  45. package/dist/assets/img/done_gray.d7e8203.svg +4 -0
  46. package/dist/assets/img/done_green.b817fd4.svg +4 -0
  47. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  48. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  49. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  50. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  51. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  52. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  53. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  54. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  55. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  56. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  57. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  68. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  69. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  70. package/dist/assets/img/empty.29bed2d.svg +23 -0
  71. package/dist/assets/img/empty_1.0b98af0.svg +11 -0
  72. package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
  73. package/dist/assets/img/external-link.90577cc.svg +1 -0
  74. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  75. package/dist/assets/img/ghn.070f8e3.svg +17 -0
  76. package/dist/assets/img/ghtk.326eac1.svg +18 -0
  77. package/dist/assets/img/image_default.be0698b.png +0 -0
  78. package/dist/assets/img/info.ebce7ea.svg +1 -0
  79. package/dist/assets/img/loader.37000a7.svg +1 -0
  80. package/dist/assets/img/loading_static.8f403ae.svg +10 -0
  81. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  82. package/dist/assets/img/main-service2.9b99549.png +0 -0
  83. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  84. package/dist/assets/img/package.8d37d0f.svg +5 -0
  85. package/dist/assets/img/package_fade.763c001.svg +1 -0
  86. package/dist/assets/img/rating--average.1ea492c.svg +12 -0
  87. package/dist/assets/img/rating--great.e3d712e.svg +16 -0
  88. package/dist/assets/img/rating--poor.2938a25.svg +12 -0
  89. package/dist/assets/img/search.f9705ff.svg +1 -0
  90. package/dist/assets/img/send.6db52a9.svg +3 -0
  91. package/dist/assets/img/shop.f7dc7d8.svg +1 -0
  92. package/dist/assets/img/shop_faded.df7845a.svg +1 -0
  93. package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
  94. package/dist/assets/img/x.26fdfa3.svg +5 -0
  95. package/dist/malicious-app.js +13 -0
  96. package/dist/screenshoot.html +7 -0
  97. package/dist/screenshoot.js +5608 -0
  98. package/inject.js +2 -6
  99. package/package.json +9 -8
  100. package/src/chatbox/ChatButton.js +30 -0
  101. package/src/lib.js +23 -3
  102. package/src/notif/notif.js +40 -30
  103. package/src/store/api.js +139 -114
  104. package/src/store/api_fake.js +1 -2
  105. package/src/store/store.js +53 -44
  106. package/webpack.dev.js +1 -0
  107. package/webpack.prod.js +1 -0
  108. package/webview.js +43 -0
@@ -310,6 +310,7 @@ class ChatButton extends _common.Com {
310
310
  defmsg = defmsg || 'Sent you a message';
311
311
  let message = _index.default.get(ev, 'data.message.text');
312
312
  var format = _index.default.get(ev, 'data.message.format');
313
+ if (format === 'delta') return this.renderDeltaMessagePreview(ev, defmsg);
313
314
  if (format && format !== 'plaintext') message = defmsg;
314
315
  if (!message && _index.default.size(_index.default.get(ev, 'data.message.attachments')) > 0) message = defmsg;
315
316
  if (!message) return null;
@@ -323,6 +324,30 @@ class ChatButton extends _common.Com {
323
324
  });
324
325
  return tags;
325
326
  }
327
+ renderDeltaMessagePreview(ev, defmsg) {
328
+ defmsg = defmsg || 'Sent you a message';
329
+ let message = _index.default.get(ev, 'data.message.quill_delta');
330
+ if (!message && _index.default.size(_index.default.get(ev, 'data.message.attachments')) > 0) message = defmsg;
331
+ if (!message) return;
332
+ let quilldeltas = _index.default.parseJSON(message) || {};
333
+ if (!quilldeltas || _index.default.size(quilldeltas.ops) === 0) return null;
334
+ let $deltas = _index.default.map(quilldeltas.ops, delta => {
335
+ let html = '';
336
+ let insert = delta.insert;
337
+ let attributes = delta.attributes;
338
+ if (insert.dynamicField) {
339
+ return _index.default.get(insert, 'dynamicField.text', '');
340
+ }
341
+ if (insert.emoji) return (0, _preact.h)(_Emoji.default, {
342
+ emojiCode: `:${insert.emoji}:`
343
+ });
344
+ if (typeof insert === 'string') {
345
+ return insert;
346
+ }
347
+ return null;
348
+ });
349
+ return $deltas;
350
+ }
326
351
  closePreview(e) {
327
352
  if (e) {
328
353
  e.preventDefault();
@@ -51,12 +51,27 @@ class Widget {
51
51
  this.domGate.open();
52
52
  return user;
53
53
  }
54
- logout(accid) {
55
- return this.store.logout();
54
+ logout(userref) {
55
+ return this.store.logout(userref);
56
+ }
57
+ async init(param, $container) {
58
+ param = param || {};
59
+ let accid = param.account_id;
60
+ let ref = param.ref;
61
+ let user = await this.store.init(accid, undefined, ref);
62
+ if (!$container) $container = document.body || document;
63
+ this.pluginMgr = new _plugin.default(this, $container);
64
+ let clean = setInterval(() => {
65
+ if ($container && $container.isConnected) return;
66
+ this.pluginMgr.destroy();
67
+ clearInterval(clean);
68
+ }, 1000);
69
+ this.domGate.open();
70
+ return user;
56
71
  }
57
72
  async setAccount(id, $container, mask, cb) {
58
73
  let outmask = await this.store.init(id, mask);
59
- if (!$container) $container = document.body;
74
+ if (!$container) $container = document.body || document;
60
75
  this.pluginMgr = new _plugin.default(this, $container);
61
76
  let clean = setInterval(() => {
62
77
  if ($container && $container.isConnected) return;
@@ -211,7 +211,7 @@ class Notif extends _common.Com {
211
211
  if (_index.default.get(op, 'attributes.bold')) out = (0, _preact.h)("b", null, out);
212
212
  if (_index.default.get(op, 'attributes.italic')) out = (0, _preact.h)("b", null, out);
213
213
  return out;
214
- });
214
+ }).filter(a => a);
215
215
  }
216
216
  render() {
217
217
  if (!this.props.t) return null;
@@ -236,6 +236,19 @@ class Notif extends _common.Com {
236
236
  let st = 'position: fixed !important; z-index: 1000000000 !important';
237
237
  if (this.props.plugin._preview) st = 'position: absolute !important;';
238
238
  if (this.state.closeAnimation) animation = 'fadeOut';
239
+ let $avatar = null;
240
+ if (user.avatar_url) $avatar = (0, _preact.h)("img", {
241
+ alt: "notification avatar",
242
+ class: "notif_avatar__img",
243
+ src: user.avatar_url
244
+ });
245
+ let $time = (0, _preact.h)("div", {
246
+ class: "notif_time",
247
+ style: _index.default.js2css(notif.subtext_style)
248
+ }, this.state.timestamp);
249
+ let $title = this.renderTextFromQuillDelta(this.state.title, user);
250
+ let $message = this.renderTextFromQuillDelta(this.state.message, user);
251
+ if (!lo.size($title) && !lo.size($message)) $time = null;
239
252
  return (0, _preact.h)("div", {
240
253
  class: animation + ' notif' + ' notif__' + pos,
241
254
  onClick: e => this.onClick(e),
@@ -252,22 +265,15 @@ class Notif extends _common.Com {
252
265
  }), this.renderCloseButton(), (0, _preact.h)("div", {
253
266
  class: "notif_avatar",
254
267
  style: _index.default.js2css(notif.avatar_style)
255
- }, (0, _preact.h)("img", {
256
- alt: "notification avatar",
257
- class: "notif_avatar__img",
258
- src: user.avatar_url
259
- })), (0, _preact.h)("div", {
268
+ }, $avatar), (0, _preact.h)("div", {
260
269
  class: "notif_body"
261
270
  }, (0, _preact.h)("div", {
262
271
  class: "notif_title",
263
272
  style: _index.default.js2css(notif.title_style)
264
- }, this.renderTextFromQuillDelta(this.state.title, user)), (0, _preact.h)("div", {
273
+ }, $title), (0, _preact.h)("div", {
265
274
  class: "notif_message",
266
275
  style: _index.default.js2css(notif.message_style)
267
- }, this.renderTextFromQuillDelta(this.state.message, user)), (0, _preact.h)("div", {
268
- class: "notif_time",
269
- style: _index.default.js2css(notif.subtext_style)
270
- }, this.state.timestamp))));
276
+ }, $message), $time)));
271
277
  }
272
278
  }
273
279
  exports.default = Notif;
@@ -11,7 +11,6 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
11
11
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
12
12
  const ajax = require('@subiz/ajax/src/ajax.js');
13
13
  ajax.env.XMLHttpRequest = window.XMLHttpRequest;
14
- const findAnswer = challenge => challenge.answer;
15
14
  function jsonifyTextPlain(param, done) {
16
15
  let req = param.request;
17
16
  if (req.content_type === 'text/plain' && req.body !== undefined) req.body = _index.default.stringify(req.body);
@@ -19,8 +18,8 @@ function jsonifyTextPlain(param, done) {
19
18
  }
20
19
  class _default {
21
20
  constructor(ApiURL, FileURL) {
22
- _defineProperty(this, "listConversations", _ => this.apireq.addQuery('user_id', this.uid).addQuery('integration_id', `${this.accid}.subizv4.subikon`).get('/conversations'));
23
- _defineProperty(this, "listMessages", (cid, limit, start_id) => this.apireq.addQuery('limit', limit).addQuery('start_id', start_id).get(`/conversations/${cid}/messages`));
21
+ _defineProperty(this, "listConversations", _ => this.apireq.addQuery('user_id', this.uid).addQuery('integration_id', `${this.accid}.subizv4.subikon`).get(`/accounts/${this.accid}/conversations`));
22
+ _defineProperty(this, "listMessages", (cid, limit, start_id) => this.apireq.addQuery('limit', limit).addQuery('start_id', start_id).get(`/accounts/${this.accid}/conversations/${cid}/messages`));
24
23
  _defineProperty(this, "ajax", ajax);
25
24
  _defineProperty(this, "start", extraData => {
26
25
  let data = {
@@ -34,16 +33,16 @@ class _default {
34
33
  _index.default.each(extraData, (v, k) => {
35
34
  data[k] = v;
36
35
  });
37
- return this.apireq.post('/conversations', data);
36
+ return this.apireq.post(`/accounts/${this.accid}/conversations`, data);
38
37
  });
39
38
  _defineProperty(this, "sendConvoEvent", (cid, ev) => this.apireq.post(`/accounts/${this.accid}/conversations/${cid}/events`, ev));
40
39
  _defineProperty(this, "createPostback", (cid, p) => this.apireq.post(`/accounts/${this.accid}/conversations/${cid}/postbacks`, p));
41
- _defineProperty(this, "markAsReceived", (cid, messageId) => this.apireq.post(`/conversations/${cid}/messages/${messageId}/receive`));
42
- _defineProperty(this, "markAsSeen", (cid, messageId) => this.apireq.post(`/conversations/${cid}/messages/${messageId}/seen`));
43
- _defineProperty(this, "getConversation", cid => this.apireq.get(`/conversations/${cid}`));
40
+ _defineProperty(this, "markAsReceived", (cid, messageId) => this.apireq.post(`/accounts/${this.accid}/conversations/${cid}/messages/${messageId}/receive`));
41
+ _defineProperty(this, "markAsSeen", (cid, messageId) => this.apireq.post(`/accounts/${this.accid}/conversations/${cid}/messages/${messageId}/seen`));
42
+ _defineProperty(this, "getConversation", cid => this.apireq.get(`/accounts/${this.accid}/conversations/${cid}`));
44
43
  _defineProperty(this, "getLocaleContent", locale => this.apireq.get(`/accounts/${this.accid}/locales/${locale}`));
45
- _defineProperty(this, "sendEvent", data => this.apireq.post(`/users/${this.uid}/events`, data));
46
- _defineProperty(this, "sendTyping", cid => this.apireq.post(`/conversations/${cid}/typing`));
44
+ _defineProperty(this, "sendEvent", data => this.apireq.post(`/accounts/${this.accid}/users/${this.uid}/events`, data));
45
+ _defineProperty(this, "sendTyping", cid => this.apireq.post(`/accounts/${this.accid}/conversations/${cid}/typing`));
47
46
  _defineProperty(this, "sendLostFocus", (device, productid, source_id, sku) => this.sendEvent({
48
47
  by: {
49
48
  id: this.uid,
@@ -95,9 +94,8 @@ class _default {
95
94
  url: this.FileURL + body.url
96
95
  };
97
96
  });
98
- _defineProperty(this, "getChallenge", accid => this.apireq.post(`/accounts/${accid}/scrypt-challenges`));
99
- _defineProperty(this, "time", _ => this.apireq.get('/time'));
100
- _defineProperty(this, "updateUser", data => this.apireq.post(`/users/${this.uid}`, data));
97
+ _defineProperty(this, "time", _ => ajax.setBaseUrl(this.ApiURL).withCredentials(true).setParser('json').get('/time'));
98
+ _defineProperty(this, "updateUser", data => this.apireq.post(`/accounts/${this.accid}/users/${this.uid}`, data));
101
99
  _defineProperty(this, "getUser", _ => this.apireq.get(`/accounts/${this.accid}/users/${this.uid}`));
102
100
  _defineProperty(this, "getAccountSetting", () => this.apireq.get(`/accounts/${this.accid}/settings`));
103
101
  _defineProperty(this, "getIsOnline", () => this.apireq.get(`/accounts/${this.accid}/is_online`));
@@ -129,99 +127,130 @@ class _default {
129
127
  });
130
128
  return;
131
129
  }
132
- if (this.mask) param.request = param.request.addQuery('x-user-mask', this.mask);
130
+ if (this.ref) param.request = param.request.addQuery('x-user-ref', this.ref);else if (this.mask) param.request = param.request.addQuery('x-user-mask', this.mask);
133
131
  return done(true);
134
132
  });
135
133
  }
136
134
  setAgentId(agid) {
137
135
  this.agentid = agid;
138
136
  }
139
- setAuth(obj) {
140
- this.accid = obj.accid;
137
+ async setAuth(obj) {
138
+ if (obj.accid) this.accid = obj.accid;
139
+ if (obj.ref) this.ref = obj.ref;
141
140
  this.mask = obj.mask;
142
- this.uid = obj.uid;
143
- }
144
- async setTokenGenerator(accid, uid, tokenGenerator) {
145
- this.tokensession = this.tokensession || 0;
146
- this.tokensession++;
147
- let tokensession = this.tokensession;
148
- if (!accid || !_index.default.startsWith(accid, 'ac')) return {
149
- error: 'invalid_account_id'
150
- };
151
- if (!uid) return {
152
- error: 'invalid_user_id'
153
- };
154
- if (typeof tokenGenerator !== 'function') return {
155
- error: 'invalid_token_generator'
156
- };
157
- this.accid = accid;
158
- this.profile_id = uid;
159
- this.token_generator = async force => {
160
- await this.refreshLock.lock();
161
- if (tokensession != this.tokensession) {
162
- this.refreshLock.unlock();
163
- return;
141
+ this.profile_id = obj.profile_id;
142
+ if (obj.ref) {
143
+ let outuser;
144
+ for (let i = 0; true; i++) {
145
+ outuser = await ajax.setBaseUrl(this.ApiURL).withCredentials(true).addQuery('v', '6').addQuery('x-user-ref', this.ref).setParser('json').get(`/accounts/${this.accid}/users/${this.ref}`);
146
+ if (!_index.default.get(outuser, 'body.id')) {
147
+ let sleeptime = Math.min(2000 + i * 200, 60000);
148
+ await _index.default.sleep(sleeptime);
149
+ continue;
150
+ }
151
+ break;
164
152
  }
165
- let age = (_index.default.Date.now() - (this.last_token_at || 0)) / 1000;
166
- if (!force && this.last_token && age < 1800) {
167
- this.refreshLock.unlock();
168
- return this.last_token;
153
+ if (outuser.error) {
154
+ if (_index.default.get(outuser.body.code)) return {
155
+ error: outuser.body.code
156
+ };
157
+ return outuser;
169
158
  }
170
- if (!force && this.last_token && age < 3000) {
171
- if (this.token_generator) setTimeout(async () => {
172
- let token, err;
173
- try {
174
- token = await tokenGenerator(uid);
175
- } catch (e) {
176
- err = e;
177
- }
178
- if (tokensession != this.tokensession) {
159
+ this.uid = outuser.body.id;
160
+ return outuser.body;
161
+ }
162
+ if (obj.tokenGenerator) {
163
+ this.tokensession = this.tokensession || 0;
164
+ this.tokensession++;
165
+ let tokensession = this.tokensession;
166
+ if (!this.accid || !_index.default.startsWith(this.accid, 'ac')) return {
167
+ error: 'invalid_account_id'
168
+ };
169
+ if (!this.profile_id) return {
170
+ error: 'invalid_profile_id'
171
+ };
172
+ if (typeof this.tokenGenerator !== 'function') return {
173
+ error: 'invalid_token_generator'
174
+ };
175
+ let profile_id = this.profile_id;
176
+ this.token_generator = async force => {
177
+ await this.refreshLock.lock();
178
+ if (tokensession != this.tokensession) {
179
+ this.refreshLock.unlock();
180
+ return;
181
+ }
182
+ let age = (_index.default.Date.now() - (this.last_token_at || 0)) / 1000;
183
+ if (!force && this.last_token && age < 1800) {
184
+ this.refreshLock.unlock();
185
+ return this.last_token;
186
+ }
187
+ if (!force && this.last_token && age < 3000) {
188
+ if (this.token_generator) setTimeout(async () => {
189
+ let token, err;
190
+ try {
191
+ token = await tokenGenerator(profile_id);
192
+ } catch (e) {
193
+ err = e;
194
+ }
195
+ if (tokensession != this.tokensession) {
196
+ this.refreshLock.unlock();
197
+ return;
198
+ }
199
+ if (err) this.last_token = 'error';else this.last_token = token;
200
+ this.last_token_at = _index.default.Date.now();
179
201
  this.refreshLock.unlock();
180
- return;
181
- }
182
- if (err) this.last_token = 'error';else this.last_token = token;
183
- this.last_token_at = _index.default.Date.now();
202
+ });
203
+ return this.last_token;
204
+ }
205
+ let token;
206
+ let err;
207
+ try {
208
+ token = await tokenGenerator(profile_id);
209
+ } catch (e) {
210
+ err = e;
211
+ }
212
+ if (tokensession != this.tokensession) {
184
213
  this.refreshLock.unlock();
185
- });
186
- return this.last_token;
187
- }
188
- let token;
189
- let err;
190
- try {
191
- token = await tokenGenerator(uid);
192
- } catch (e) {
193
- err = e;
194
- }
195
- if (tokensession != this.tokensession) {
214
+ return;
215
+ }
216
+ if (err) this.last_token = 'error';else this.last_token = token;
217
+ this.last_token_at = _index.default.Date.now();
196
218
  this.refreshLock.unlock();
197
- return;
219
+ return this.last_token;
220
+ };
221
+ let outuser;
222
+ for (let i = 0; true; i++) {
223
+ await this.token_generator(true);
224
+ if (tokensession != this.tokensession) break;
225
+ outuser = await ajax.setBaseUrl(this.ApiURL).withCredentials(true).addQuery('v', '6').addQuery('x-access-token', this.last_token).setParser('json').get(`/accounts/${accid}/users/${profile_id}`);
226
+ if (!_index.default.get(outuser, 'body.id')) {
227
+ let sleeptime = Math.min(2000 + i * 100, 120000);
228
+ await _index.default.sleep(sleeptime);
229
+ continue;
230
+ }
231
+ break;
198
232
  }
199
- if (err) this.last_token = 'error';else this.last_token = token;
200
- this.last_token_at = _index.default.Date.now();
201
- this.refreshLock.unlock();
202
- return this.last_token;
203
- };
204
- let outuser;
205
- for (let i = 0; true; i++) {
206
- await this.token_generator(true);
207
- if (tokensession != this.tokensession) break;
208
- outuser = await ajax.setBaseUrl(this.ApiURL).withCredentials(true).addQuery('v', '6').addQuery('x-access-token', this.last_token).setParser('json').get(`/accounts/${accid}/users/${uid}`);
209
- if (!_index.default.get(outuser, 'body.id')) {
210
- let sleeptime = Math.min(2000 + i * 100, 120000);
211
- await _index.default.sleep(sleeptime);
212
- continue;
233
+ if (outuser.error) {
234
+ if (_index.default.get(outuser.body.code)) return {
235
+ error: outuser.body.code
236
+ };
237
+ return outuser;
213
238
  }
214
- break;
239
+ this.uid = outuser.body.id;
240
+ return outuser.body;
215
241
  }
216
- if (outuser.error) {
217
- if (_index.default.get(outuser.body.code)) return {
218
- error: outuser.body.code
242
+ if (this.mask) {
243
+ let parts = this.mask.split('@');
244
+ this.uid = parts[1];
245
+ return {
246
+ id: this.uid
219
247
  };
220
- return outuser;
221
248
  }
222
- this.uid = outuser.body.id;
223
- return outuser.body;
249
+ return {
250
+ error: 'invalid_auth'
251
+ };
224
252
  }
253
+ async setTokenGenerator(accid, uid, tokenGenerator) {}
225
254
  sendContentView(device, pageUrl, pageTitle, id, source_id, sku) {
226
255
  if (!id) id = undefined;
227
256
  if (!source_id) source_id = undefined;
@@ -243,26 +272,5 @@ class _default {
243
272
  }
244
273
  });
245
274
  }
246
- async createUser(accid) {
247
- for (var i = 0; i < 10; i++) {
248
- const {
249
- body: challenge
250
- } = await this.getChallenge(accid);
251
- const answer = findAnswer(challenge);
252
- const data = {
253
- challenge_id: challenge.id,
254
- answer: '' + answer
255
- };
256
- let {
257
- body: user,
258
- error
259
- } = await this.apireq.post(`/accounts/${accid}/scrypt-challenges/users`, data);
260
- if (error) {
261
- await _index.default.sleep(1000);
262
- continue;
263
- }
264
- return user;
265
- }
266
- }
267
275
  }
268
276
  exports.default = _default;
@@ -56,11 +56,6 @@ class _default {
56
56
  _defineProperty(this, "sendContent", data => OK200);
57
57
  _defineProperty(this, "uploadToS3", async file => OK200);
58
58
  _defineProperty(this, "getChallenge", accid => OK200);
59
- _defineProperty(this, "createUser", accid => Promise.resolve({
60
- account_id: accid,
61
- id: 'usqzgtgfake',
62
- mask: 'fakemask'
63
- }));
64
59
  _defineProperty(this, "time", _ => Promise.resolve({
65
60
  code: 200,
66
61
  body: new _index.default.Date().toISOString()
@@ -89,6 +84,10 @@ class _default {
89
84
  this.accid = obj.accid;
90
85
  this.mask = obj.mask;
91
86
  this.uid = obj.uid;
87
+ return {
88
+ account_id: accid,
89
+ id: 'usqzgtgfake'
90
+ };
92
91
  }
93
92
  }
94
93
  exports.default = _default;
@@ -163,6 +163,14 @@ class Store {
163
163
  this.fake = fakeapi;
164
164
  this.FileURL = FileURL;
165
165
  if (this.fake) this.api = new _api_fake.default(ApiURL, FileURL);else this.api = new _api.default(ApiURL, FileURL);
166
+ if (!inmem) {
167
+ try {
168
+ document.cookie;
169
+ localStorage;
170
+ } catch (e) {
171
+ inmem = true;
172
+ }
173
+ }
166
174
  if (inmem) {
167
175
  this.inmem = inmem;
168
176
  this.cookie = inmemCookie;
@@ -302,58 +310,64 @@ class Store {
302
310
  await this.readyGate.entry();
303
311
  if (!this.isInsync('account')) this.reconnect();
304
312
  }
305
- async init(accid, mask) {
313
+ async init(accid, mask, userRef) {
306
314
  this.readyGate.close();
307
315
  accid = (accid || '').trim();
308
316
  this.api.setAuth({
309
317
  accid: accid
310
318
  });
311
319
  this.g_sync = {};
312
- if (!mask) {
320
+ if (!userRef) {
313
321
  try {
314
- mask = this.cookie.get('__sbmask', '');
322
+ userRef = this.cookie.get('__sbref', '');
315
323
  } catch (e) {}
324
+ if (!userRef) {
325
+ if (!mask) {
326
+ try {
327
+ mask = this.cookie.get('__sbmask', '');
328
+ } catch (e) {}
329
+ }
330
+ if (mask) {
331
+ let parts = mask.split('@');
332
+ if (parts[0] != accid) {
333
+ userRef = _index.default.randomString(40);
334
+ this.new_visitor = true;
335
+ }
336
+ this.new_visitor = false;
337
+ this.cookie.set('__sbmask', mask);
338
+ } else {
339
+ userRef = _index.default.randomString(40);
340
+ this.new_visitor = true;
341
+ }
342
+ }
316
343
  }
317
- let localstorageMask = this.kv.match('mask');
318
- if (!mask && localstorageMask) mask = localstorageMask;
319
- if (mask && localstorageMask && mask !== localstorageMask) this.clearBrowserData();
320
- var userId = '';
321
- if (mask) {
322
- let parts = mask.split('@');
323
- if (parts[0] != accid) {
324
- mask = '';
325
- this.clearBrowserData();
326
- } else userId = parts[1];
327
- }
328
- if (!mask) {
329
- let user = await this.api.createUser(accid);
330
- this.new_visitor = true;
331
- mask = user.mask;
332
- userId = user.id;
333
- } else {
334
- this.new_visitor = false;
335
- }
336
- this.cookie.set('__sbmask', mask);
337
- this.kv.put('mask', mask);
344
+ if (userRef) this.cookie.set('__sbref', userRef);
345
+ let user = await this.api.setAuth({
346
+ accid: accid,
347
+ mask: mask,
348
+ ref: userRef
349
+ });
350
+ if (user.error) return;
338
351
  if (this.realtime) this.realtime.stop();
339
352
  if (this.fake) this.realtime = new _realtime_fake.default();else this.realtime = new Realtime(this.RealtimeURL, {
353
+ account_id: accid,
354
+ user_ref: userRef,
340
355
  user_mask: mask
341
356
  });
342
357
  this.realtime.onEvent(this.onWs.bind(this));
343
- this.realtime.onInterrupted(() => this.reconnectWs(accid, userId));
344
- this.api.setAuth({
345
- accid: accid,
346
- uid: userId,
347
- mask: mask
348
- });
358
+ this.realtime.onInterrupted(() => this.reconnectWs(accid, user.id));
349
359
  this.seenLoop();
350
360
  await this.reconnect();
351
361
  this.readyGate.open();
352
- this.reconnectWs(accid, userId);
353
- return mask;
362
+ this.reconnectWs(accid, user.id);
363
+ return user;
354
364
  }
355
365
  async login(accid, user_id, tokenGenerator) {
356
- let user = await this.api.setTokenGenerator(accid, user_id, tokenGenerator);
366
+ let user = await this.api.setAuth({
367
+ accid: accid,
368
+ profile_id: user_id,
369
+ tokenGenerator: tokenGenerator
370
+ });
357
371
  if (user.error) return user;
358
372
  this.clearBrowserData();
359
373
  this.readyGate.close();
@@ -372,8 +386,10 @@ class Store {
372
386
  this.reconnectWs(accid, user.id);
373
387
  return user;
374
388
  }
375
- logout(user_id) {
376
- this.api.setTokenGenerator(undefined, undefined, undefined);
389
+ logout(userRef) {
390
+ return this.api.setAuth({
391
+ ref: userRef
392
+ });
377
393
  }
378
394
  seenLoop() {
379
395
  this.seenQueue = [];