proto.io 0.0.208 → 0.0.210

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 (80) hide show
  1. package/dist/adapters/file/aliyun-oss.d.ts +6 -6
  2. package/dist/adapters/file/aliyun-oss.js +14 -13
  3. package/dist/adapters/file/aliyun-oss.js.map +1 -1
  4. package/dist/adapters/file/aliyun-oss.mjs +14 -13
  5. package/dist/adapters/file/aliyun-oss.mjs.map +1 -1
  6. package/dist/adapters/file/database.d.ts +3 -3
  7. package/dist/adapters/file/database.js +2 -2
  8. package/dist/adapters/file/database.js.map +1 -1
  9. package/dist/adapters/file/database.mjs +2 -2
  10. package/dist/adapters/file/database.mjs.map +1 -1
  11. package/dist/adapters/file/filesystem.d.ts +5 -5
  12. package/dist/adapters/file/filesystem.js +11 -7
  13. package/dist/adapters/file/filesystem.js.map +1 -1
  14. package/dist/adapters/file/filesystem.mjs +11 -7
  15. package/dist/adapters/file/filesystem.mjs.map +1 -1
  16. package/dist/adapters/file/google-cloud-storage.d.ts +6 -6
  17. package/dist/adapters/file/google-cloud-storage.js +23 -13
  18. package/dist/adapters/file/google-cloud-storage.js.map +1 -1
  19. package/dist/adapters/file/google-cloud-storage.mjs +23 -13
  20. package/dist/adapters/file/google-cloud-storage.mjs.map +1 -1
  21. package/dist/adapters/storage/progres.d.ts +1 -1
  22. package/dist/adapters/storage/progres.js +22 -28
  23. package/dist/adapters/storage/progres.js.map +1 -1
  24. package/dist/adapters/storage/progres.mjs +22 -28
  25. package/dist/adapters/storage/progres.mjs.map +1 -1
  26. package/dist/client.d.ts +3 -3
  27. package/dist/client.js +2 -1
  28. package/dist/client.js.map +1 -1
  29. package/dist/client.mjs +3 -2
  30. package/dist/client.mjs.map +1 -1
  31. package/dist/index.d.ts +3 -3
  32. package/dist/index.js +159 -31
  33. package/dist/index.js.map +1 -1
  34. package/dist/index.mjs +152 -24
  35. package/dist/index.mjs.map +1 -1
  36. package/dist/internals/{base-wSknxBv7.d.ts → base-C1ndp06_.d.ts} +2 -2
  37. package/dist/internals/base-C1ndp06_.d.ts.map +1 -0
  38. package/dist/internals/{base-CfQi0T0I.mjs → base-DYc1_peK.mjs} +3 -3
  39. package/dist/internals/{base-CfQi0T0I.mjs.map → base-DYc1_peK.mjs.map} +1 -1
  40. package/dist/internals/{base-BFKQpiws.js → base-NsJYo2MG.js} +3 -3
  41. package/dist/internals/{base-BFKQpiws.js.map → base-NsJYo2MG.js.map} +1 -1
  42. package/dist/internals/{chunk-BuMQw4dz.js → chunk-BuKmyceG.js} +5 -3
  43. package/dist/internals/chunk-BuKmyceG.js.map +1 -0
  44. package/dist/internals/{chunk-C_BXf1Er.d.ts → chunk-DF4KyvgB.d.ts} +6 -6
  45. package/dist/internals/chunk-DF4KyvgB.d.ts.map +1 -0
  46. package/dist/internals/{chunk-DxYhYVky.mjs → chunk-bpt1C6W4.mjs} +5 -3
  47. package/dist/internals/chunk-bpt1C6W4.mjs.map +1 -0
  48. package/dist/internals/const-C3I6cfav.js +42 -0
  49. package/dist/internals/const-C3I6cfav.js.map +1 -0
  50. package/dist/internals/const-Dkp7Nsv5.mjs +34 -0
  51. package/dist/internals/const-Dkp7Nsv5.mjs.map +1 -0
  52. package/dist/internals/index-B8TESzd9.js.map +1 -1
  53. package/dist/internals/{index-BvwYz4Yp.mjs → index-BgSBzm-K.mjs} +95 -20
  54. package/dist/internals/index-BgSBzm-K.mjs.map +1 -0
  55. package/dist/internals/{index-DVUiXLfI.js → index-Clo9hepf.js} +101 -29
  56. package/dist/internals/index-Clo9hepf.js.map +1 -0
  57. package/dist/internals/{index-CkAvNaAe.js → index-D8O7SinR.js} +50 -3
  58. package/dist/internals/index-D8O7SinR.js.map +1 -0
  59. package/dist/internals/{index-A-hoMfDO.d.ts → index-DIRjiWPh.d.ts} +32 -1
  60. package/dist/internals/index-DIRjiWPh.d.ts.map +1 -0
  61. package/dist/internals/{index-DlY33lfO.mjs → index-DPPLcZx8.mjs} +51 -4
  62. package/dist/internals/index-DPPLcZx8.mjs.map +1 -0
  63. package/dist/internals/index-al1N-qi7.mjs.map +1 -1
  64. package/dist/internals/{index-iqOd-Wdg.d.ts → index-l-Mk0lCc.d.ts} +2 -2
  65. package/dist/internals/index-l-Mk0lCc.d.ts.map +1 -0
  66. package/dist/internals/{random-B0V0EnjP.js → random-CyU_Y2Ay.js} +2 -2
  67. package/dist/internals/{random-B0V0EnjP.js.map → random-CyU_Y2Ay.js.map} +1 -1
  68. package/dist/internals/{random-ZgzzM5v_.mjs → random-ycCeBd0S.mjs} +2 -2
  69. package/dist/internals/{random-ZgzzM5v_.mjs.map → random-ycCeBd0S.mjs.map} +1 -1
  70. package/package.json +1 -1
  71. package/dist/internals/base-wSknxBv7.d.ts.map +0 -1
  72. package/dist/internals/chunk-BuMQw4dz.js.map +0 -1
  73. package/dist/internals/chunk-C_BXf1Er.d.ts.map +0 -1
  74. package/dist/internals/chunk-DxYhYVky.mjs.map +0 -1
  75. package/dist/internals/index-A-hoMfDO.d.ts.map +0 -1
  76. package/dist/internals/index-BvwYz4Yp.mjs.map +0 -1
  77. package/dist/internals/index-CkAvNaAe.js.map +0 -1
  78. package/dist/internals/index-DVUiXLfI.js.map +0 -1
  79. package/dist/internals/index-DlY33lfO.mjs.map +0 -1
  80. package/dist/internals/index-iqOd-Wdg.d.ts.map +0 -1
@@ -5,6 +5,7 @@ var _private = require('./private-Ciddhure.js');
5
5
  var _ = require('lodash');
6
6
  var index = require('./index-B8TESzd9.js');
7
7
  var axios = require('axios');
8
+ var _const$1 = require('./const-C3I6cfav.js');
8
9
  var _const = require('@o2ter/server-js/dist/const');
9
10
  var socket_ioClient = require('socket.io-client');
10
11
  var cryptoJs = require('@o2ter/crypto-js');
@@ -577,11 +578,22 @@ class TQuery extends TQueryBase {
577
578
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
578
579
  // THE SOFTWARE.
579
580
  //
580
- const MASTER_USER_HEADER_NAME = 'X-PROTO-MASTER-USER';
581
- const MASTER_PASS_HEADER_NAME = 'X-PROTO-MASTER-PASS';
582
- const UPLOAD_TOKEN_HEADER_NAME = 'X-PROTO-UPLOAD-TOKEN';
583
- const AUTH_COOKIE_KEY = 'x-proto-auth';
584
- const PROTO_NOTY_MSG = 'PROTO_NOTY_MSG';
581
+ class LiveQuerySubscription {
582
+ _className;
583
+ _proto;
584
+ _filter;
585
+ constructor(className, proto, filter) {
586
+ this._className = className;
587
+ this._proto = proto;
588
+ this._filter = _.isArray(filter) ? filter : [filter];
589
+ }
590
+ get className() {
591
+ return this._className;
592
+ }
593
+ on(event, callback) {
594
+ return this._proto[_private.PVK].liveQuery(this._proto, event, this.className, this._filter, (object) => callback(object));
595
+ }
596
+ }
585
597
 
586
598
  //
587
599
  // file.ts
@@ -1178,6 +1190,7 @@ const applyObjectMethods = (object, proto) => {
1178
1190
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1179
1191
  // THE SOFTWARE.
1180
1192
  //
1193
+ const _logLevels = ['error', 'warn', 'info', 'debug', 'trace'];
1181
1194
  class ProtoType {
1182
1195
  isQuery = isQuery;
1183
1196
  isObject = isObject;
@@ -1395,6 +1408,9 @@ class ProtoClientQuery extends _ProtoClientQuery {
1395
1408
  clone[_private.PVK].options = options ?? { ...this[_private.PVK].options };
1396
1409
  return clone;
1397
1410
  }
1411
+ subscribe() {
1412
+ return new LiveQuerySubscription(this.className, this._proto, this[_private.PVK].options.filter ?? []);
1413
+ }
1398
1414
  }
1399
1415
  class ProtoClientRelationQuery extends _ProtoClientQuery {
1400
1416
  constructor(proto, opts) {
@@ -1411,6 +1427,9 @@ class ProtoClientRelationQuery extends _ProtoClientQuery {
1411
1427
  clone[_private.PVK].options = options ?? { ...this[_private.PVK].options };
1412
1428
  return clone;
1413
1429
  }
1430
+ subscribe() {
1431
+ throw Error('Unable to subscribe to relationship query');
1432
+ }
1414
1433
  }
1415
1434
 
1416
1435
  //
@@ -1457,7 +1476,7 @@ class Service {
1457
1476
  setSessionToken(token) {
1458
1477
  this.token = token;
1459
1478
  if (typeof window === 'undefined') {
1460
- this.service.defaults.headers.Cookie = token ? `${AUTH_COOKIE_KEY}=${token}` : null;
1479
+ this.service.defaults.headers.Cookie = token ? `${_const$1.AUTH_COOKIE_KEY}=${token}` : null;
1461
1480
  }
1462
1481
  for (const socket of this.sockets) {
1463
1482
  socket.emit('auth', token);
@@ -1470,8 +1489,8 @@ class Service {
1470
1489
  headers: {
1471
1490
  'Content-Type': 'application/json; charset=utf-8',
1472
1491
  ...master ? {
1473
- [MASTER_USER_HEADER_NAME]: this.proto.options.masterUser?.user,
1474
- [MASTER_PASS_HEADER_NAME]: this.proto.options.masterUser?.pass,
1492
+ [_const$1.MASTER_USER_HEADER_NAME]: this.proto.options.masterUser?.user,
1493
+ [_const$1.MASTER_PASS_HEADER_NAME]: this.proto.options.masterUser?.pass,
1475
1494
  } : {},
1476
1495
  ...headers,
1477
1496
  },
@@ -1479,7 +1498,7 @@ class Service {
1479
1498
  });
1480
1499
  if (res.headers['set-cookie']) {
1481
1500
  const cookies = res.headers['set-cookie'];
1482
- const pattern = `${AUTH_COOKIE_KEY}=`;
1501
+ const pattern = `${_const$1.AUTH_COOKIE_KEY}=`;
1483
1502
  const token = _.findLast(_.flatMap(cookies, x => x.split(';')), x => _.startsWith(x.trim(), pattern));
1484
1503
  this.setSessionToken(token?.trim().slice(pattern.length));
1485
1504
  }
@@ -1508,15 +1527,31 @@ class Service {
1508
1527
  const options = { auth: { token: this.token } };
1509
1528
  const socket = endpoint ? socket_ioClient.io(endpoint, options) : socket_ioClient.io(options);
1510
1529
  this.sockets.push(socket);
1511
- let listeners = {};
1530
+ let events = {};
1531
+ let queries = {};
1512
1532
  let destroyCallbacks = [];
1533
+ const register_event = () => {
1534
+ socket.emit('EV_NOTIFY', _.mapValues(events, x => x.selector ?? true));
1535
+ };
1536
+ const register_query = () => {
1537
+ socket.emit('EV_LIVEQUERY', _.mapValues(queries, x => x.options));
1538
+ };
1513
1539
  const register = () => {
1514
- socket.emit('register', _.mapValues(listeners, x => x.selector ?? true));
1540
+ register_event();
1541
+ register_query();
1515
1542
  };
1516
- socket.on('data', ({ ids, data }) => {
1517
- for (const [id, { callback }] of _.entries(listeners)) {
1543
+ socket.on('ON_EV_NOTIFY', ({ ids, data }) => {
1544
+ const payload = deserialize(JSON.stringify(data));
1545
+ for (const [id, { callback }] of _.entries(events)) {
1518
1546
  if (_.includes(ids, id))
1519
- callback(data);
1547
+ callback(payload);
1548
+ }
1549
+ });
1550
+ socket.on('ON_EV_LIVEQUERY', ({ ids, data }) => {
1551
+ const objects = deserialize(JSON.stringify(data));
1552
+ for (const [id, { callback }] of _.entries(queries)) {
1553
+ const keys = _.keys(_.pickBy(ids, v => _.includes(v, id)));
1554
+ callback(_.filter(objects, x => _.includes(keys, x.objectId)));
1520
1555
  }
1521
1556
  });
1522
1557
  socket.on('connect', register);
@@ -1528,17 +1563,33 @@ class Service {
1528
1563
  callback();
1529
1564
  }
1530
1565
  };
1566
+ const destroyIfNeed = () => {
1567
+ if (!_.isEmpty(events))
1568
+ return;
1569
+ if (!_.isEmpty(queries))
1570
+ return;
1571
+ destroy();
1572
+ };
1531
1573
  return {
1532
1574
  socket,
1533
1575
  listen: (callback, selector) => {
1534
1576
  const id = cryptoJs.randomUUID();
1535
- listeners[id] = { callback, selector };
1536
- register();
1577
+ events[id] = { callback, selector };
1578
+ register_event();
1579
+ return () => {
1580
+ events = _.omit(events, id);
1581
+ register_event();
1582
+ destroyIfNeed();
1583
+ };
1584
+ },
1585
+ liveQuery: (callback, options) => {
1586
+ const id = cryptoJs.randomUUID();
1587
+ queries[id] = { callback, options };
1588
+ register_query();
1537
1589
  return () => {
1538
- listeners = _.omit(listeners, id);
1539
- register();
1540
- if (_.isEmpty(listeners))
1541
- destroy();
1590
+ queries = _.omit(queries, id);
1591
+ register_query();
1592
+ destroyIfNeed();
1542
1593
  };
1543
1594
  },
1544
1595
  onDestroy: (callback) => {
@@ -1737,7 +1788,7 @@ class ProtoClientInternal {
1737
1788
  },
1738
1789
  headers: {
1739
1790
  'Content-Type': 'multipart/form-data',
1740
- [UPLOAD_TOKEN_HEADER_NAME]: uploadToken,
1791
+ [_const$1.UPLOAD_TOKEN_HEADER_NAME]: uploadToken,
1741
1792
  },
1742
1793
  ...opts,
1743
1794
  });
@@ -1801,9 +1852,10 @@ class ProtoClientInternal {
1801
1852
  });
1802
1853
  }
1803
1854
  listen(proto, callback, selector) {
1804
- const { socket, listen, onDestroy } = this.socket ?? this.service.socket();
1855
+ const _socket = this.socket ?? this.service.socket();
1856
+ const { socket, listen, onDestroy } = _socket;
1805
1857
  if (_.isNil(this.socket)) {
1806
- this.socket = { socket, listen, onDestroy };
1858
+ this.socket = _socket;
1807
1859
  onDestroy(() => { this.socket = undefined; });
1808
1860
  }
1809
1861
  return {
@@ -1813,6 +1865,29 @@ class ProtoClientInternal {
1813
1865
  }, selector),
1814
1866
  };
1815
1867
  }
1868
+ liveQuery(proto, event, className, filter, callback) {
1869
+ const _socket = this.socket ?? this.service.socket();
1870
+ const { socket, liveQuery, onDestroy } = _socket;
1871
+ if (_.isNil(this.socket)) {
1872
+ this.socket = _socket;
1873
+ onDestroy(() => { this.socket = undefined; });
1874
+ }
1875
+ return {
1876
+ socket,
1877
+ remove: liveQuery((objects) => {
1878
+ for (const object of proto.rebind(objects)) {
1879
+ (async () => {
1880
+ try {
1881
+ await callback(object);
1882
+ }
1883
+ catch (e) {
1884
+ proto.logger.error(e);
1885
+ }
1886
+ })();
1887
+ }
1888
+ }, { event, className, filter }),
1889
+ };
1890
+ }
1816
1891
  refs(proto, object, options) {
1817
1892
  if (!object.objectId)
1818
1893
  throw Error('Invalid object');
@@ -1939,15 +2014,12 @@ class ProtoClient extends ProtoType {
1939
2014
  }
1940
2015
  }
1941
2016
 
1942
- exports.AUTH_COOKIE_KEY = AUTH_COOKIE_KEY;
1943
- exports.MASTER_PASS_HEADER_NAME = MASTER_PASS_HEADER_NAME;
1944
- exports.MASTER_USER_HEADER_NAME = MASTER_USER_HEADER_NAME;
1945
- exports.PROTO_NOTY_MSG = PROTO_NOTY_MSG;
2017
+ exports.LiveQuerySubscription = LiveQuerySubscription;
1946
2018
  exports.ProtoClient = ProtoClient;
1947
2019
  exports.ProtoType = ProtoType;
1948
2020
  exports.TQuery = TQuery;
1949
2021
  exports.TUser = TUser;
1950
- exports.UPLOAD_TOKEN_HEADER_NAME = UPLOAD_TOKEN_HEADER_NAME;
2022
+ exports._logLevels = _logLevels;
1951
2023
  exports.classExtends = classExtends;
1952
2024
  exports.deserialize = deserialize;
1953
2025
  exports.isFile = isFile;
@@ -1957,4 +2029,4 @@ exports.isQuery = isQuery;
1957
2029
  exports.isRole = isRole;
1958
2030
  exports.isUser = isUser;
1959
2031
  exports.serialize = serialize;
1960
- //# sourceMappingURL=index-DVUiXLfI.js.map
2032
+ //# sourceMappingURL=index-Clo9hepf.js.map