@mtcute/web 0.16.6 → 0.16.9

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 (140) hide show
  1. package/README.md +4 -4
  2. package/{cjs/client.d.ts → client.d.ts} +1 -1
  3. package/{esm/crypto.d.ts → crypto.d.ts} +1 -1
  4. package/idb/idb.test.d.ts +1 -0
  5. package/index.cjs +961 -0
  6. package/index.d.ts +7 -1
  7. package/index.js +951 -1
  8. package/methods.cjs +14 -0
  9. package/methods.d.ts +1 -1
  10. package/methods.js +1 -1
  11. package/package.json +56 -40
  12. package/utils.cjs +14 -0
  13. package/utils.d.ts +1 -1
  14. package/utils.js +1 -1
  15. package/{esm/websocket.d.ts → websocket.d.ts} +3 -3
  16. package/websocket.test.d.ts +1 -0
  17. package/{cjs/worker.d.ts → worker.d.ts} +1 -1
  18. package/cjs/client.js +0 -41
  19. package/cjs/client.js.map +0 -1
  20. package/cjs/common-internals-web/base64.js +0 -112
  21. package/cjs/common-internals-web/base64.js.map +0 -1
  22. package/cjs/common-internals-web/hex.js +0 -69
  23. package/cjs/common-internals-web/hex.js.map +0 -1
  24. package/cjs/common-internals-web/logging.js +0 -35
  25. package/cjs/common-internals-web/logging.js.map +0 -1
  26. package/cjs/common-internals-web/utf8.js +0 -29
  27. package/cjs/common-internals-web/utf8.js.map +0 -1
  28. package/cjs/crypto.d.ts +0 -21
  29. package/cjs/crypto.js +0 -73
  30. package/cjs/crypto.js.map +0 -1
  31. package/cjs/exit-hook.js +0 -24
  32. package/cjs/exit-hook.js.map +0 -1
  33. package/cjs/idb/driver.js +0 -139
  34. package/cjs/idb/driver.js.map +0 -1
  35. package/cjs/idb/index.js +0 -34
  36. package/cjs/idb/index.js.map +0 -1
  37. package/cjs/idb/repository/auth-keys.js +0 -71
  38. package/cjs/idb/repository/auth-keys.js.map +0 -1
  39. package/cjs/idb/repository/kv.js +0 -35
  40. package/cjs/idb/repository/kv.js.map +0 -1
  41. package/cjs/idb/repository/peers.js +0 -39
  42. package/cjs/idb/repository/peers.js.map +0 -1
  43. package/cjs/idb/repository/ref-messages.js +0 -62
  44. package/cjs/idb/repository/ref-messages.js.map +0 -1
  45. package/cjs/idb/utils.js +0 -18
  46. package/cjs/idb/utils.js.map +0 -1
  47. package/cjs/index.js +0 -30
  48. package/cjs/index.js.map +0 -1
  49. package/cjs/methods.js +0 -24
  50. package/cjs/methods.js.map +0 -1
  51. package/cjs/package.json +0 -3
  52. package/cjs/platform.js +0 -49
  53. package/cjs/platform.js.map +0 -1
  54. package/cjs/utils.js +0 -24
  55. package/cjs/utils.js.map +0 -1
  56. package/cjs/wasm.js +0 -36
  57. package/cjs/wasm.js.map +0 -1
  58. package/cjs/websocket.d.ts +0 -46
  59. package/cjs/websocket.js +0 -132
  60. package/cjs/websocket.js.map +0 -1
  61. package/cjs/worker.js +0 -129
  62. package/cjs/worker.js.map +0 -1
  63. package/esm/client.d.ts +0 -30
  64. package/esm/client.js +0 -36
  65. package/esm/client.js.map +0 -1
  66. package/esm/common-internals-web/base64.d.ts +0 -2
  67. package/esm/common-internals-web/base64.js +0 -107
  68. package/esm/common-internals-web/base64.js.map +0 -1
  69. package/esm/common-internals-web/hex.d.ts +0 -2
  70. package/esm/common-internals-web/hex.js +0 -64
  71. package/esm/common-internals-web/hex.js.map +0 -1
  72. package/esm/common-internals-web/logging.d.ts +0 -2
  73. package/esm/common-internals-web/logging.js +0 -31
  74. package/esm/common-internals-web/logging.js.map +0 -1
  75. package/esm/common-internals-web/utf8.d.ts +0 -3
  76. package/esm/common-internals-web/utf8.js +0 -23
  77. package/esm/common-internals-web/utf8.js.map +0 -1
  78. package/esm/crypto.js +0 -69
  79. package/esm/crypto.js.map +0 -1
  80. package/esm/exit-hook.d.ts +0 -1
  81. package/esm/exit-hook.js +0 -20
  82. package/esm/exit-hook.js.map +0 -1
  83. package/esm/idb/driver.d.ts +0 -18
  84. package/esm/idb/driver.js +0 -135
  85. package/esm/idb/driver.js.map +0 -1
  86. package/esm/idb/index.d.ts +0 -22
  87. package/esm/idb/index.js +0 -29
  88. package/esm/idb/index.js.map +0 -1
  89. package/esm/idb/repository/auth-keys.d.ts +0 -14
  90. package/esm/idb/repository/auth-keys.js +0 -67
  91. package/esm/idb/repository/auth-keys.js.map +0 -1
  92. package/esm/idb/repository/kv.d.ts +0 -11
  93. package/esm/idb/repository/kv.js +0 -31
  94. package/esm/idb/repository/kv.js.map +0 -1
  95. package/esm/idb/repository/peers.d.ts +0 -12
  96. package/esm/idb/repository/peers.js +0 -35
  97. package/esm/idb/repository/peers.js.map +0 -1
  98. package/esm/idb/repository/ref-messages.d.ts +0 -12
  99. package/esm/idb/repository/ref-messages.js +0 -58
  100. package/esm/idb/repository/ref-messages.js.map +0 -1
  101. package/esm/idb/utils.d.ts +0 -2
  102. package/esm/idb/utils.js +0 -13
  103. package/esm/idb/utils.js.map +0 -1
  104. package/esm/index.d.ts +0 -7
  105. package/esm/index.js +0 -8
  106. package/esm/index.js.map +0 -1
  107. package/esm/methods.d.ts +0 -1
  108. package/esm/methods.js +0 -2
  109. package/esm/methods.js.map +0 -1
  110. package/esm/platform.d.ts +0 -21
  111. package/esm/platform.js +0 -45
  112. package/esm/platform.js.map +0 -1
  113. package/esm/utils.d.ts +0 -1
  114. package/esm/utils.js +0 -2
  115. package/esm/utils.js.map +0 -1
  116. package/esm/wasm.d.ts +0 -2
  117. package/esm/wasm.js +0 -32
  118. package/esm/wasm.js.map +0 -1
  119. package/esm/websocket.js +0 -124
  120. package/esm/websocket.js.map +0 -1
  121. package/esm/worker.d.ts +0 -10
  122. package/esm/worker.js +0 -124
  123. package/esm/worker.js.map +0 -1
  124. /package/{cjs/common-internals-web → common-internals-web}/base64.d.ts +0 -0
  125. /package/{cjs/common-internals-web → common-internals-web}/hex.d.ts +0 -0
  126. /package/{cjs/common-internals-web → common-internals-web}/logging.d.ts +0 -0
  127. /package/{cjs/common-internals-web → common-internals-web}/utf8.d.ts +0 -0
  128. /package/{cjs/exit-hook.d.ts → exit-hook.d.ts} +0 -0
  129. /package/{cjs/idb → idb}/driver.d.ts +0 -0
  130. /package/{cjs/idb → idb}/index.d.ts +0 -0
  131. /package/{cjs/idb → idb}/repository/auth-keys.d.ts +0 -0
  132. /package/{cjs/idb → idb}/repository/kv.d.ts +0 -0
  133. /package/{cjs/idb → idb}/repository/peers.d.ts +0 -0
  134. /package/{cjs/idb → idb}/repository/ref-messages.d.ts +0 -0
  135. /package/{cjs/idb → idb}/utils.d.ts +0 -0
  136. /package/{cjs/index.d.ts → index.d.cts} +0 -0
  137. /package/{cjs/methods.d.ts → methods.d.cts} +0 -0
  138. /package/{cjs/platform.d.ts → platform.d.ts} +0 -0
  139. /package/{cjs/utils.d.ts → utils.d.cts} +0 -0
  140. /package/{cjs/wasm.d.ts → wasm.d.ts} +0 -0
package/esm/worker.js DELETED
@@ -1,124 +0,0 @@
1
- import { setPlatform } from '@mtcute/core/platform.js';
2
- import { TelegramWorker as TelegramWorkerBase, TelegramWorkerPort as TelegramWorkerPortBase, } from '@mtcute/core/worker.js';
3
- import { WebPlatform } from './platform.js';
4
- let _registered = false;
5
- export class TelegramWorker extends TelegramWorkerBase {
6
- registerWorker(handler) {
7
- if (_registered) {
8
- throw new Error('TelegramWorker must be created only once');
9
- }
10
- _registered = true;
11
- if (typeof SharedWorkerGlobalScope !== 'undefined' && self instanceof SharedWorkerGlobalScope) {
12
- const connections = [];
13
- const broadcast = (message) => {
14
- for (const port of connections) {
15
- port.postMessage(message);
16
- }
17
- };
18
- self.onconnect = (event) => {
19
- const port = event.ports[0];
20
- connections.push(port);
21
- const respond = port.postMessage.bind(port);
22
- // not very reliable, but better than nothing
23
- // SharedWorker API doesn't provide a way to detect when the client closes the connection
24
- // so we just assume that the client is done when it sends a 'close' message
25
- // and keep a timeout for the case when the client closes without sending a 'close' message
26
- const onClose = () => {
27
- port.close();
28
- const idx = connections.indexOf(port);
29
- if (idx >= 0) {
30
- connections.splice(connections.indexOf(port), 1);
31
- }
32
- };
33
- const onTimeout = () => {
34
- console.warn('some connection timed out!');
35
- respond({ __type__: 'timeout' });
36
- onClose();
37
- };
38
- // 60s should be a reasonable timeout considering that the client should send a ping every 10s
39
- // so even if the browser has suspended the timers, we should still get a ping within a minute
40
- let timeout = setTimeout(onTimeout, 60000);
41
- port.addEventListener('message', (message) => {
42
- if (message.data.__type__ === 'close') {
43
- onClose();
44
- return;
45
- }
46
- if (message.data.__type__ === 'ping') {
47
- clearTimeout(timeout);
48
- timeout = setTimeout(onTimeout, 60000);
49
- return;
50
- }
51
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
52
- handler(message.data, respond);
53
- });
54
- port.start();
55
- };
56
- return broadcast;
57
- }
58
- if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {
59
- const respond = self.postMessage.bind(self);
60
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
61
- self.addEventListener('message', (message) => handler(message.data, respond));
62
- return respond;
63
- }
64
- throw new Error('TelegramWorker must be created from a worker');
65
- }
66
- }
67
- const platform = new WebPlatform();
68
- export class TelegramWorkerPort extends TelegramWorkerPortBase {
69
- options;
70
- constructor(options) {
71
- setPlatform(platform);
72
- super(options);
73
- this.options = options;
74
- }
75
- connectToWorker(worker, handler) {
76
- if (worker instanceof Worker) {
77
- const send = worker.postMessage.bind(worker);
78
- const messageHandler = (ev) => {
79
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
80
- handler(ev.data);
81
- };
82
- worker.addEventListener('message', messageHandler);
83
- return [
84
- send,
85
- () => {
86
- worker.removeEventListener('message', messageHandler);
87
- },
88
- ];
89
- }
90
- if (worker instanceof SharedWorker) {
91
- const send = worker.port.postMessage.bind(worker.port);
92
- const pingInterval = setInterval(() => {
93
- worker.port.postMessage({ __type__: 'ping' });
94
- }, 10000);
95
- const messageHandler = (ev) => {
96
- if (ev.data.__type__ === 'timeout') {
97
- // we got disconnected from the worker due to timeout
98
- // if the page is still alive (which is unlikely), we should reconnect
99
- // however it's not really possible with SharedWorker API without re-creating the worker
100
- // so we just reload the page for now
101
- location.reload();
102
- return;
103
- }
104
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
105
- handler(ev.data);
106
- };
107
- worker.port.addEventListener('message', messageHandler);
108
- worker.port.start();
109
- // eslint-disable-next-line prefer-const
110
- let cancelBeforeExit;
111
- const close = () => {
112
- clearInterval(pingInterval);
113
- worker.port.postMessage({ __type__: 'close' });
114
- worker.port.removeEventListener('message', messageHandler);
115
- worker.port.close();
116
- cancelBeforeExit();
117
- };
118
- cancelBeforeExit = platform.beforeExit(close);
119
- return [send, close];
120
- }
121
- throw new Error('Only workers and shared workers are supported');
122
- }
123
- }
124
- //# sourceMappingURL=worker.js.map
package/esm/worker.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { setPlatform } from '@mtcute/core/platform.js'\nimport {\n ClientMessageHandler,\n RespondFn,\n SendFn,\n SomeWorker,\n TelegramWorker as TelegramWorkerBase,\n TelegramWorkerOptions,\n TelegramWorkerPort as TelegramWorkerPortBase,\n TelegramWorkerPortOptions,\n WorkerCustomMethods,\n WorkerMessageHandler,\n} from '@mtcute/core/worker.js'\n\nimport { WebPlatform } from './platform.js'\n\nexport type { TelegramWorkerOptions, TelegramWorkerPortOptions, WorkerCustomMethods }\n\nlet _registered = false\n\nexport class TelegramWorker<T extends WorkerCustomMethods> extends TelegramWorkerBase<T> {\n registerWorker(handler: WorkerMessageHandler): RespondFn {\n if (_registered) {\n throw new Error('TelegramWorker must be created only once')\n }\n\n _registered = true\n\n if (typeof SharedWorkerGlobalScope !== 'undefined' && self instanceof SharedWorkerGlobalScope) {\n const connections: MessagePort[] = []\n\n const broadcast = (message: unknown) => {\n for (const port of connections) {\n port.postMessage(message)\n }\n }\n\n self.onconnect = (event: MessageEvent) => {\n const port = event.ports[0]\n connections.push(port)\n\n const respond = port.postMessage.bind(port)\n\n // not very reliable, but better than nothing\n // SharedWorker API doesn't provide a way to detect when the client closes the connection\n // so we just assume that the client is done when it sends a 'close' message\n // and keep a timeout for the case when the client closes without sending a 'close' message\n const onClose = () => {\n port.close()\n const idx = connections.indexOf(port)\n\n if (idx >= 0) {\n connections.splice(connections.indexOf(port), 1)\n }\n }\n\n const onTimeout = () => {\n console.warn('some connection timed out!')\n respond({ __type__: 'timeout' })\n onClose()\n }\n\n // 60s should be a reasonable timeout considering that the client should send a ping every 10s\n // so even if the browser has suspended the timers, we should still get a ping within a minute\n let timeout = setTimeout(onTimeout, 60000)\n\n port.addEventListener('message', (message) => {\n if (message.data.__type__ === 'close') {\n onClose()\n\n return\n }\n\n if (message.data.__type__ === 'ping') {\n clearTimeout(timeout)\n timeout = setTimeout(onTimeout, 60000)\n\n return\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n handler(message.data, respond)\n })\n port.start()\n }\n\n return broadcast\n }\n\n if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\n const respond: RespondFn = self.postMessage.bind(self)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n self.addEventListener('message', (message: MessageEvent) => handler(message.data, respond))\n\n return respond\n }\n\n throw new Error('TelegramWorker must be created from a worker')\n }\n}\n\nconst platform = new WebPlatform()\n\nexport class TelegramWorkerPort<T extends WorkerCustomMethods> extends TelegramWorkerPortBase<T> {\n constructor(readonly options: TelegramWorkerPortOptions) {\n setPlatform(platform)\n super(options)\n }\n\n connectToWorker(worker: SomeWorker, handler: ClientMessageHandler): [SendFn, () => void] {\n if (worker instanceof Worker) {\n const send: SendFn = worker.postMessage.bind(worker)\n\n const messageHandler = (ev: MessageEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n handler(ev.data)\n }\n\n worker.addEventListener('message', messageHandler)\n\n return [\n send,\n () => {\n worker.removeEventListener('message', messageHandler)\n },\n ]\n }\n\n if (worker instanceof SharedWorker) {\n const send: SendFn = worker.port.postMessage.bind(worker.port)\n\n const pingInterval = setInterval(() => {\n worker.port.postMessage({ __type__: 'ping' })\n }, 10000)\n\n const messageHandler = (ev: MessageEvent) => {\n if (ev.data.__type__ === 'timeout') {\n // we got disconnected from the worker due to timeout\n // if the page is still alive (which is unlikely), we should reconnect\n // however it's not really possible with SharedWorker API without re-creating the worker\n // so we just reload the page for now\n location.reload()\n\n return\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n handler(ev.data)\n }\n\n worker.port.addEventListener('message', messageHandler)\n worker.port.start()\n\n // eslint-disable-next-line prefer-const\n let cancelBeforeExit: () => void\n\n const close = () => {\n clearInterval(pingInterval)\n worker.port.postMessage({ __type__: 'close' })\n worker.port.removeEventListener('message', messageHandler)\n worker.port.close()\n cancelBeforeExit()\n }\n\n cancelBeforeExit = platform.beforeExit(close)\n\n return [send, close]\n }\n\n throw new Error('Only workers and shared workers are supported')\n }\n}\n"]}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes