@mtkruto/browser 0.119.0 → 0.120.0
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/README.md +1 -1
- package/esm/0_errors.d.ts.map +1 -1
- package/esm/0_errors.js +9 -31
- package/esm/3_errors.js +2 -12
- package/esm/4_errors.js +2 -12
- package/esm/_dnt.polyfills.d.ts +0 -99
- package/esm/_dnt.polyfills.d.ts.map +1 -1
- package/esm/_dnt.polyfills.js +1 -127
- package/esm/client/0_abortable_loop.js +26 -39
- package/esm/client/0_storage_operations.js +179 -218
- package/esm/client/1_client_plain.js +4 -22
- package/esm/client/2_account_manager.js +140 -149
- package/esm/client/2_bot_info_manager.js +26 -38
- package/esm/client/2_business_connection_manager.js +10 -23
- package/esm/client/2_client_encrypted.js +198 -215
- package/esm/client/2_file_manager.js +255 -262
- package/esm/client/2_network_statistics_manager.js +31 -44
- package/esm/client/2_payment_manager.js +7 -20
- package/esm/client/2_reaction_manager.js +7 -20
- package/esm/client/2_translations_manager.js +101 -111
- package/esm/client/2_update_manager.js +750 -745
- package/esm/client/3_client_encrypted_pool.js +10 -26
- package/esm/client/3_message_manager.js +503 -508
- package/esm/client/3_video_chat_manager.js +57 -68
- package/esm/client/4_callback_query_manager.js +18 -30
- package/esm/client/4_chat_list_manager.js +140 -146
- package/esm/client/4_chat_manager.js +161 -169
- package/esm/client/4_checklist_manager.js +26 -39
- package/esm/client/4_context.js +244 -259
- package/esm/client/4_forum_manager.js +67 -73
- package/esm/client/4_gift_manager.js +22 -35
- package/esm/client/4_inline_query_manager.js +16 -28
- package/esm/client/4_link_preview_manager.js +6 -19
- package/esm/client/4_poll_manager.js +44 -57
- package/esm/client/4_story_manager.js +41 -53
- package/esm/client/5_composer.js +13 -26
- package/esm/client/6_client.js +866 -896
- package/esm/client/6_client_dispatcher.js +308 -325
- package/esm/client/7_client_worker.js +16 -29
- package/esm/connection/1_connection_tcp.js +55 -82
- package/esm/connection/1_connection_web_socket.js +75 -91
- package/esm/deps/jsr.io/@roj/tgcrypto/1.0.1/dist/tgcrypto.js +3 -11
- package/esm/deps/jsr.io/@std/async/1.2.0/mux_async_iterator.js +31 -47
- package/esm/deps/jsr.io/@std/async/1.2.0/tee.js +11 -34
- package/esm/deps/jsr.io/@std/cache/0.2.2/lru_cache.js +30 -47
- package/esm/deps/jsr.io/@std/datetime/0.225.7/_date_time_formatter.js +4 -17
- package/esm/session/0_session_state.js +12 -38
- package/esm/session/1_session.js +49 -72
- package/esm/session/2_session_encrypted.js +422 -420
- package/esm/storage/2_storage_indexed_db.js +26 -44
- package/esm/storage/2_storage_local_storage.js +3 -16
- package/esm/storage/2_storage_memory.js +24 -41
- package/esm/storage/2_storage_session_storage.js +3 -16
- package/esm/tl/1_tl_reader.d.ts +1 -1
- package/esm/tl/1_tl_reader.d.ts.map +1 -1
- package/esm/tl/1_tl_reader.js +95 -103
- package/esm/tl/1_tl_writer.js +169 -178
- package/esm/transport/0_transport.js +1 -8
- package/esm/transport/1_transport_abridged.js +11 -24
- package/esm/transport/1_transport_intermediate.js +10 -23
- package/esm/utilities/0_mutex.js +4 -19
- package/esm/utilities/0_part_stream.js +11 -25
- package/esm/utilities/1_crypto.js +42 -53
- package/esm/utilities/2_queue.js +29 -47
- package/package.json +1 -1
- package/script/0_errors.d.ts.map +1 -1
- package/script/0_errors.js +9 -31
- package/script/3_errors.js +2 -12
- package/script/4_errors.js +2 -12
- package/script/_dnt.polyfills.d.ts +0 -99
- package/script/_dnt.polyfills.d.ts.map +1 -1
- package/script/_dnt.polyfills.js +0 -128
- package/script/client/0_abortable_loop.js +27 -40
- package/script/client/0_storage_operations.js +179 -218
- package/script/client/1_client_plain.js +4 -22
- package/script/client/2_account_manager.js +140 -149
- package/script/client/2_bot_info_manager.js +26 -38
- package/script/client/2_business_connection_manager.js +10 -23
- package/script/client/2_client_encrypted.js +199 -216
- package/script/client/2_file_manager.js +255 -262
- package/script/client/2_network_statistics_manager.js +32 -45
- package/script/client/2_payment_manager.js +7 -20
- package/script/client/2_reaction_manager.js +7 -20
- package/script/client/2_translations_manager.js +102 -112
- package/script/client/2_update_manager.js +750 -745
- package/script/client/3_client_encrypted_pool.js +10 -26
- package/script/client/3_message_manager.js +503 -508
- package/script/client/3_video_chat_manager.js +57 -68
- package/script/client/4_callback_query_manager.js +18 -30
- package/script/client/4_chat_list_manager.js +140 -146
- package/script/client/4_chat_manager.js +161 -169
- package/script/client/4_checklist_manager.js +26 -39
- package/script/client/4_context.js +244 -259
- package/script/client/4_forum_manager.js +67 -73
- package/script/client/4_gift_manager.js +22 -35
- package/script/client/4_inline_query_manager.js +16 -28
- package/script/client/4_link_preview_manager.js +6 -19
- package/script/client/4_poll_manager.js +44 -57
- package/script/client/4_story_manager.js +41 -53
- package/script/client/5_composer.js +13 -26
- package/script/client/6_client.js +866 -896
- package/script/client/6_client_dispatcher.js +308 -325
- package/script/client/7_client_worker.js +16 -29
- package/script/connection/1_connection_tcp.js +55 -82
- package/script/connection/1_connection_web_socket.js +75 -91
- package/script/deps/jsr.io/@roj/tgcrypto/1.0.1/dist/tgcrypto.js +3 -11
- package/script/deps/jsr.io/@std/async/1.2.0/mux_async_iterator.js +31 -47
- package/script/deps/jsr.io/@std/async/1.2.0/tee.js +11 -34
- package/script/deps/jsr.io/@std/cache/0.2.2/lru_cache.js +30 -47
- package/script/deps/jsr.io/@std/datetime/0.225.7/_date_time_formatter.js +4 -17
- package/script/session/0_session_state.js +12 -38
- package/script/session/1_session.js +49 -72
- package/script/session/2_session_encrypted.js +423 -421
- package/script/storage/2_storage_indexed_db.js +26 -44
- package/script/storage/2_storage_local_storage.js +3 -16
- package/script/storage/2_storage_memory.js +24 -41
- package/script/storage/2_storage_session_storage.js +3 -16
- package/script/tl/1_tl_reader.d.ts +1 -1
- package/script/tl/1_tl_reader.d.ts.map +1 -1
- package/script/tl/1_tl_reader.js +96 -104
- package/script/tl/1_tl_writer.js +170 -179
- package/script/transport/0_transport.js +1 -8
- package/script/transport/1_transport_abridged.js +11 -24
- package/script/transport/1_transport_intermediate.js +10 -23
- package/script/utilities/0_mutex.js +4 -19
- package/script/utilities/0_part_stream.js +11 -25
- package/script/utilities/1_crypto.js +43 -54
- package/script/utilities/2_queue.js +30 -48
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
// Copyright 2018-2026 the Deno authors. MIT license.
|
|
2
2
|
// This module is browser compatible.
|
|
3
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
4
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
5
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
6
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
7
|
-
};
|
|
8
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
9
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
10
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
11
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
12
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
13
|
-
};
|
|
14
|
-
var _MuxAsyncIterator_instances, _MuxAsyncIterator_iteratorCount, _MuxAsyncIterator_yields, _MuxAsyncIterator_throws, _MuxAsyncIterator_signal, _MuxAsyncIterator_callIteratorNext;
|
|
15
3
|
/**
|
|
16
4
|
* Multiplexes multiple async iterators into a single stream. It currently
|
|
17
5
|
* makes an assumption that the final result (the value returned and not
|
|
@@ -47,14 +35,11 @@ var _MuxAsyncIterator_instances, _MuxAsyncIterator_iteratorCount, _MuxAsyncItera
|
|
|
47
35
|
* @typeParam T The type of the provided async iterables and generated async iterable.
|
|
48
36
|
*/
|
|
49
37
|
export class MuxAsyncIterator {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
_MuxAsyncIterator_throws.set(this, []);
|
|
56
|
-
_MuxAsyncIterator_signal.set(this, Promise.withResolvers());
|
|
57
|
-
}
|
|
38
|
+
#iteratorCount = 0;
|
|
39
|
+
#yields = [];
|
|
40
|
+
// deno-lint-ignore no-explicit-any
|
|
41
|
+
#throws = [];
|
|
42
|
+
#signal = Promise.withResolvers();
|
|
58
43
|
/**
|
|
59
44
|
* Add an async iterable to the stream.
|
|
60
45
|
*
|
|
@@ -80,9 +65,23 @@ export class MuxAsyncIterator {
|
|
|
80
65
|
* ```
|
|
81
66
|
*/
|
|
82
67
|
add(iterable) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
68
|
+
++this.#iteratorCount;
|
|
69
|
+
this.#callIteratorNext(iterable[Symbol.asyncIterator]());
|
|
70
|
+
}
|
|
71
|
+
async #callIteratorNext(iterator) {
|
|
72
|
+
try {
|
|
73
|
+
const { value, done } = await iterator.next();
|
|
74
|
+
if (done) {
|
|
75
|
+
--this.#iteratorCount;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.#yields.push({ iterator, value });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
this.#throws.push(e);
|
|
83
|
+
}
|
|
84
|
+
this.#signal.resolve();
|
|
86
85
|
}
|
|
87
86
|
/**
|
|
88
87
|
* Returns an async iterator of the stream.
|
|
@@ -108,22 +107,22 @@ export class MuxAsyncIterator {
|
|
|
108
107
|
* ```
|
|
109
108
|
*/
|
|
110
109
|
async *iterate() {
|
|
111
|
-
while (
|
|
110
|
+
while (this.#iteratorCount > 0) {
|
|
112
111
|
// Sleep until any of the wrapped iterators yields.
|
|
113
|
-
await
|
|
112
|
+
await this.#signal.promise;
|
|
114
113
|
// Note that while we're looping over `yields`, new items may be added.
|
|
115
|
-
for (const { iterator, value } of
|
|
114
|
+
for (const { iterator, value } of this.#yields) {
|
|
116
115
|
yield value;
|
|
117
|
-
|
|
116
|
+
this.#callIteratorNext(iterator);
|
|
118
117
|
}
|
|
119
|
-
if (
|
|
120
|
-
for (const e of
|
|
118
|
+
if (this.#throws.length) {
|
|
119
|
+
for (const e of this.#throws) {
|
|
121
120
|
throw e;
|
|
122
121
|
}
|
|
123
122
|
}
|
|
124
123
|
// Clear the `yields` list and reset the `signal` promise.
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
this.#yields.length = 0;
|
|
125
|
+
this.#signal = Promise.withResolvers();
|
|
127
126
|
}
|
|
128
127
|
}
|
|
129
128
|
/**
|
|
@@ -149,22 +148,7 @@ export class MuxAsyncIterator {
|
|
|
149
148
|
* assertEquals(result, [1, 2, 3]);
|
|
150
149
|
* ```
|
|
151
150
|
*/
|
|
152
|
-
[(
|
|
153
|
-
var _a;
|
|
154
|
-
try {
|
|
155
|
-
const { value, done } = await iterator.next();
|
|
156
|
-
if (done) {
|
|
157
|
-
__classPrivateFieldSet(this, _MuxAsyncIterator_iteratorCount, (_a = __classPrivateFieldGet(this, _MuxAsyncIterator_iteratorCount, "f"), --_a), "f");
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
__classPrivateFieldGet(this, _MuxAsyncIterator_yields, "f").push({ iterator, value });
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
catch (e) {
|
|
164
|
-
__classPrivateFieldGet(this, _MuxAsyncIterator_throws, "f").push(e);
|
|
165
|
-
}
|
|
166
|
-
__classPrivateFieldGet(this, _MuxAsyncIterator_signal, "f").resolve();
|
|
167
|
-
}, Symbol.asyncIterator)]() {
|
|
151
|
+
[Symbol.asyncIterator]() {
|
|
168
152
|
return this.iterate();
|
|
169
153
|
}
|
|
170
154
|
}
|
|
@@ -1,57 +1,34 @@
|
|
|
1
1
|
// Copyright 2018-2026 the Deno authors. MIT license.
|
|
2
2
|
// This module is browser compatible.
|
|
3
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
4
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
5
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
6
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
7
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
8
|
-
};
|
|
9
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
10
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
11
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
12
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
13
|
-
};
|
|
14
|
-
var _Queue_source, _Queue_queue;
|
|
15
3
|
class Queue {
|
|
4
|
+
#source;
|
|
5
|
+
#queue;
|
|
6
|
+
head;
|
|
7
|
+
done;
|
|
16
8
|
constructor(iterable) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Object.defineProperty(this, "head", {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
configurable: true,
|
|
22
|
-
writable: true,
|
|
23
|
-
value: void 0
|
|
24
|
-
});
|
|
25
|
-
Object.defineProperty(this, "done", {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
configurable: true,
|
|
28
|
-
writable: true,
|
|
29
|
-
value: void 0
|
|
30
|
-
});
|
|
31
|
-
__classPrivateFieldSet(this, _Queue_source, iterable[Symbol.asyncIterator](), "f");
|
|
32
|
-
__classPrivateFieldSet(this, _Queue_queue, {
|
|
9
|
+
this.#source = iterable[Symbol.asyncIterator]();
|
|
10
|
+
this.#queue = {
|
|
33
11
|
value: undefined,
|
|
34
12
|
next: undefined,
|
|
35
|
-
}
|
|
36
|
-
this.head =
|
|
13
|
+
};
|
|
14
|
+
this.head = this.#queue;
|
|
37
15
|
this.done = false;
|
|
38
16
|
}
|
|
39
17
|
async next() {
|
|
40
|
-
const result = await
|
|
18
|
+
const result = await this.#source.next();
|
|
41
19
|
if (!result.done) {
|
|
42
20
|
const nextNode = {
|
|
43
21
|
value: result.value,
|
|
44
22
|
next: undefined,
|
|
45
23
|
};
|
|
46
|
-
|
|
47
|
-
|
|
24
|
+
this.#queue.next = nextNode;
|
|
25
|
+
this.#queue = nextNode;
|
|
48
26
|
}
|
|
49
27
|
else {
|
|
50
28
|
this.done = true;
|
|
51
29
|
}
|
|
52
30
|
}
|
|
53
31
|
}
|
|
54
|
-
_Queue_source = new WeakMap(), _Queue_queue = new WeakMap();
|
|
55
32
|
/**
|
|
56
33
|
* Branches the given async iterable into the `n` branches.
|
|
57
34
|
*
|
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
// Copyright 2018-2026 the Deno authors. MIT license.
|
|
2
2
|
// This module is browser compatible.
|
|
3
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
4
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
5
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
6
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
7
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
8
|
-
};
|
|
9
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
10
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
11
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
12
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
13
|
-
};
|
|
14
|
-
var _LruCache_instances, _LruCache_eject, _LruCache_setMostRecentlyUsed, _LruCache_pruneToMaxSize;
|
|
15
3
|
/**
|
|
16
4
|
* Least-recently-used cache.
|
|
17
5
|
*
|
|
@@ -67,6 +55,20 @@ var _LruCache_instances, _LruCache_eject, _LruCache_setMostRecentlyUsed, _LruCac
|
|
|
67
55
|
* ```
|
|
68
56
|
*/
|
|
69
57
|
export class LruCache extends Map {
|
|
58
|
+
/**
|
|
59
|
+
* The maximum number of entries to store in the cache.
|
|
60
|
+
*
|
|
61
|
+
* @example Max size
|
|
62
|
+
* ```ts no-assert
|
|
63
|
+
* import { LruCache } from "@std/cache";
|
|
64
|
+
* import { assertEquals } from "@std/assert";
|
|
65
|
+
*
|
|
66
|
+
* const cache = new LruCache<string, number>(100);
|
|
67
|
+
* assertEquals(cache.maxSize, 100);
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
maxSize;
|
|
71
|
+
#eject;
|
|
70
72
|
/**
|
|
71
73
|
* Constructs a new `LruCache`.
|
|
72
74
|
*
|
|
@@ -75,28 +77,18 @@ export class LruCache extends Map {
|
|
|
75
77
|
*/
|
|
76
78
|
constructor(maxSize, options) {
|
|
77
79
|
super();
|
|
78
|
-
_LruCache_instances.add(this);
|
|
79
|
-
/**
|
|
80
|
-
* The maximum number of entries to store in the cache.
|
|
81
|
-
*
|
|
82
|
-
* @example Max size
|
|
83
|
-
* ```ts no-assert
|
|
84
|
-
* import { LruCache } from "@std/cache";
|
|
85
|
-
* import { assertEquals } from "@std/assert";
|
|
86
|
-
*
|
|
87
|
-
* const cache = new LruCache<string, number>(100);
|
|
88
|
-
* assertEquals(cache.maxSize, 100);
|
|
89
|
-
* ```
|
|
90
|
-
*/
|
|
91
|
-
Object.defineProperty(this, "maxSize", {
|
|
92
|
-
enumerable: true,
|
|
93
|
-
configurable: true,
|
|
94
|
-
writable: true,
|
|
95
|
-
value: void 0
|
|
96
|
-
});
|
|
97
|
-
_LruCache_eject.set(this, void 0);
|
|
98
80
|
this.maxSize = maxSize;
|
|
99
|
-
|
|
81
|
+
this.#eject = options?.onEject ?? (() => { });
|
|
82
|
+
}
|
|
83
|
+
#setMostRecentlyUsed(key, value) {
|
|
84
|
+
// delete then re-add to ensure most recently accessed elements are last
|
|
85
|
+
super.delete(key);
|
|
86
|
+
super.set(key, value);
|
|
87
|
+
}
|
|
88
|
+
#pruneToMaxSize() {
|
|
89
|
+
if (this.size > this.maxSize) {
|
|
90
|
+
this.delete(this.keys().next().value);
|
|
91
|
+
}
|
|
100
92
|
}
|
|
101
93
|
/**
|
|
102
94
|
* Checks whether an element with the specified key exists or not.
|
|
@@ -118,7 +110,7 @@ export class LruCache extends Map {
|
|
|
118
110
|
has(key) {
|
|
119
111
|
const exists = super.has(key);
|
|
120
112
|
if (exists) {
|
|
121
|
-
|
|
113
|
+
this.#setMostRecentlyUsed(key, super.get(key));
|
|
122
114
|
}
|
|
123
115
|
return exists;
|
|
124
116
|
}
|
|
@@ -142,7 +134,7 @@ export class LruCache extends Map {
|
|
|
142
134
|
get(key) {
|
|
143
135
|
if (super.has(key)) {
|
|
144
136
|
const value = super.get(key);
|
|
145
|
-
|
|
137
|
+
this.#setMostRecentlyUsed(key, value);
|
|
146
138
|
return value;
|
|
147
139
|
}
|
|
148
140
|
return undefined;
|
|
@@ -163,8 +155,8 @@ export class LruCache extends Map {
|
|
|
163
155
|
* ```
|
|
164
156
|
*/
|
|
165
157
|
set(key, value) {
|
|
166
|
-
|
|
167
|
-
|
|
158
|
+
this.#setMostRecentlyUsed(key, value);
|
|
159
|
+
this.#pruneToMaxSize();
|
|
168
160
|
return this;
|
|
169
161
|
}
|
|
170
162
|
/**
|
|
@@ -189,17 +181,8 @@ export class LruCache extends Map {
|
|
|
189
181
|
*/
|
|
190
182
|
delete(key) {
|
|
191
183
|
if (super.has(key)) {
|
|
192
|
-
|
|
184
|
+
this.#eject(key, super.get(key));
|
|
193
185
|
}
|
|
194
186
|
return super.delete(key);
|
|
195
187
|
}
|
|
196
188
|
}
|
|
197
|
-
_LruCache_eject = new WeakMap(), _LruCache_instances = new WeakSet(), _LruCache_setMostRecentlyUsed = function _LruCache_setMostRecentlyUsed(key, value) {
|
|
198
|
-
// delete then re-add to ensure most recently accessed elements are last
|
|
199
|
-
super.delete(key);
|
|
200
|
-
super.set(key, value);
|
|
201
|
-
}, _LruCache_pruneToMaxSize = function _LruCache_pruneToMaxSize() {
|
|
202
|
-
if (this.size > this.maxSize) {
|
|
203
|
-
this.delete(this.keys().next().value);
|
|
204
|
-
}
|
|
205
|
-
};
|
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
// Copyright 2018-2026 the Deno authors. MIT license.
|
|
2
2
|
// This module is browser compatible.
|
|
3
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
4
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
5
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
6
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
7
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
8
|
-
};
|
|
9
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
10
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
11
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
12
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
13
|
-
};
|
|
14
|
-
var _DateTimeFormatter_formatParts;
|
|
15
3
|
function digits(value, count = 2) {
|
|
16
4
|
return String(value).padStart(count, "0");
|
|
17
5
|
}
|
|
@@ -134,14 +122,14 @@ function sortDateTimeFormatParts(parts) {
|
|
|
134
122
|
return result;
|
|
135
123
|
}
|
|
136
124
|
export class DateTimeFormatter {
|
|
125
|
+
#formatParts;
|
|
137
126
|
constructor(formatString) {
|
|
138
|
-
|
|
139
|
-
__classPrivateFieldSet(this, _DateTimeFormatter_formatParts, formatToFormatParts(formatString), "f");
|
|
127
|
+
this.#formatParts = formatToFormatParts(formatString);
|
|
140
128
|
}
|
|
141
129
|
format(date, options = {}) {
|
|
142
130
|
let string = "";
|
|
143
131
|
const utc = options.timeZone === "UTC";
|
|
144
|
-
for (const part of
|
|
132
|
+
for (const part of this.#formatParts) {
|
|
145
133
|
const type = part.type;
|
|
146
134
|
switch (type) {
|
|
147
135
|
case "year": {
|
|
@@ -274,7 +262,7 @@ export class DateTimeFormatter {
|
|
|
274
262
|
}
|
|
275
263
|
formatToParts(string) {
|
|
276
264
|
const parts = [];
|
|
277
|
-
for (const part of
|
|
265
|
+
for (const part of this.#formatParts) {
|
|
278
266
|
const type = part.type;
|
|
279
267
|
let length = 0;
|
|
280
268
|
let value = "";
|
|
@@ -547,4 +535,3 @@ export class DateTimeFormatter {
|
|
|
547
535
|
return this.partsToDate(parts);
|
|
548
536
|
}
|
|
549
537
|
}
|
|
550
|
-
_DateTimeFormatter_formatParts = new WeakMap();
|
|
@@ -17,61 +17,35 @@
|
|
|
17
17
|
* You should have received a copy of the GNU Lesser General Public License
|
|
18
18
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
19
19
|
*/
|
|
20
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
21
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
22
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
23
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
24
|
-
};
|
|
25
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
26
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
27
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
28
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
29
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
30
|
-
};
|
|
31
|
-
var _SessionState_seqNo, _SessionState_messageId;
|
|
32
20
|
import { toUnixTimestamp } from "../1_utilities.js";
|
|
33
21
|
export class SessionState {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
writable: true,
|
|
39
|
-
value: 0
|
|
40
|
-
});
|
|
41
|
-
Object.defineProperty(this, "serverSalt", {
|
|
42
|
-
enumerable: true,
|
|
43
|
-
configurable: true,
|
|
44
|
-
writable: true,
|
|
45
|
-
value: 0n
|
|
46
|
-
});
|
|
47
|
-
_SessionState_seqNo.set(this, 0);
|
|
48
|
-
_SessionState_messageId.set(this, 0n);
|
|
49
|
-
}
|
|
22
|
+
timeDifference = 0;
|
|
23
|
+
serverSalt = 0n;
|
|
24
|
+
#seqNo = 0;
|
|
25
|
+
#messageId = 0n;
|
|
50
26
|
nextMessageId() {
|
|
51
27
|
const now = toUnixTimestamp(new Date()) + this.timeDifference;
|
|
52
28
|
const nanoseconds = Math.floor((now - Math.floor(now)) * 1e9);
|
|
53
29
|
const newMessageId = (BigInt(Math.floor(now)) << 32n) || (BigInt(nanoseconds) << 2n);
|
|
54
|
-
if (
|
|
55
|
-
|
|
30
|
+
if (this.#messageId >= newMessageId) {
|
|
31
|
+
this.#messageId += 4n;
|
|
56
32
|
}
|
|
57
33
|
else {
|
|
58
|
-
|
|
34
|
+
this.#messageId = newMessageId;
|
|
59
35
|
}
|
|
60
|
-
return
|
|
36
|
+
return this.#messageId;
|
|
61
37
|
}
|
|
62
38
|
nextSeqNo(contentRelated) {
|
|
63
|
-
|
|
64
|
-
let seqNo = __classPrivateFieldGet(this, _SessionState_seqNo, "f") * 2;
|
|
39
|
+
let seqNo = this.#seqNo * 2;
|
|
65
40
|
if (contentRelated) {
|
|
66
41
|
seqNo++;
|
|
67
|
-
|
|
42
|
+
this.#seqNo++;
|
|
68
43
|
}
|
|
69
44
|
return seqNo;
|
|
70
45
|
}
|
|
71
46
|
reset() {
|
|
72
47
|
this.serverSalt = 0n;
|
|
73
|
-
|
|
74
|
-
|
|
48
|
+
this.#seqNo = 0;
|
|
49
|
+
this.#messageId = 0n;
|
|
75
50
|
}
|
|
76
51
|
}
|
|
77
|
-
_SessionState_seqNo = new WeakMap(), _SessionState_messageId = new WeakMap();
|
package/esm/session/1_session.js
CHANGED
|
@@ -17,18 +17,6 @@
|
|
|
17
17
|
* You should have received a copy of the GNU Lesser General Public License
|
|
18
18
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
19
19
|
*/
|
|
20
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
21
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
22
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
23
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
24
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
25
|
-
};
|
|
26
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
27
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
28
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
29
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
30
|
-
};
|
|
31
|
-
var _Session_instances, _Session_dc, _Session_isCdn, _Session_lastConnect, _Session_isDisconnected, _Session_L, _Session_onConnectionStateChange, _Session_lastState, _Session_stateChangeHandler, _Session_connectMutex;
|
|
32
20
|
import { delay, SECOND } from "../0_deps.js";
|
|
33
21
|
import { drop, getLogger, Mutex } from "../1_utilities.js";
|
|
34
22
|
import { transportProviderTcp, transportProviderWebSocket } from "../3_transport.js";
|
|
@@ -38,50 +26,37 @@ let id = 0;
|
|
|
38
26
|
// @ts-ignore: lib
|
|
39
27
|
const defaultTransportProvider = typeof Deno === "undefined" ? transportProviderWebSocket : transportProviderTcp;
|
|
40
28
|
export class Session {
|
|
29
|
+
#dc;
|
|
30
|
+
#isCdn;
|
|
31
|
+
state = new SessionState();
|
|
32
|
+
transport;
|
|
33
|
+
#lastConnect;
|
|
34
|
+
#isDisconnected = true;
|
|
35
|
+
#L;
|
|
36
|
+
#onConnectionStateChange;
|
|
41
37
|
constructor(dc, params) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
_Session_isCdn.set(this, void 0);
|
|
45
|
-
Object.defineProperty(this, "state", {
|
|
46
|
-
enumerable: true,
|
|
47
|
-
configurable: true,
|
|
48
|
-
writable: true,
|
|
49
|
-
value: new SessionState()
|
|
50
|
-
});
|
|
51
|
-
Object.defineProperty(this, "transport", {
|
|
52
|
-
enumerable: true,
|
|
53
|
-
configurable: true,
|
|
54
|
-
writable: true,
|
|
55
|
-
value: void 0
|
|
56
|
-
});
|
|
57
|
-
_Session_lastConnect.set(this, void 0);
|
|
58
|
-
_Session_isDisconnected.set(this, true);
|
|
59
|
-
_Session_L.set(this, void 0);
|
|
60
|
-
_Session_onConnectionStateChange.set(this, void 0);
|
|
61
|
-
_Session_lastState.set(this, void 0);
|
|
62
|
-
_Session_connectMutex.set(this, new Mutex());
|
|
63
|
-
__classPrivateFieldSet(this, _Session_dc, dc, "f");
|
|
64
|
-
__classPrivateFieldSet(this, _Session_isCdn, params?.isCdn ?? false, "f");
|
|
38
|
+
this.#dc = dc;
|
|
39
|
+
this.#isCdn = params?.isCdn ?? false;
|
|
65
40
|
const transportProvider = params?.transportProvider ?? defaultTransportProvider();
|
|
66
|
-
this.transport = transportProvider({ dc:
|
|
41
|
+
this.transport = transportProvider({ dc: this.#dc, isCdn: this.#isCdn });
|
|
67
42
|
this.transport.connection.stateChangeHandler = (connected) => {
|
|
68
43
|
setTimeout(() => {
|
|
69
|
-
drop(
|
|
44
|
+
drop(this.#stateChangeHandler(connected));
|
|
70
45
|
});
|
|
71
46
|
};
|
|
72
|
-
|
|
47
|
+
this.#L = getLogger("Session").client(id++);
|
|
73
48
|
}
|
|
74
49
|
set onConnectionStateChange(onConnectionStateChange) {
|
|
75
|
-
|
|
50
|
+
this.#onConnectionStateChange = onConnectionStateChange;
|
|
76
51
|
}
|
|
77
52
|
set connectionCallback(connectionCallback) {
|
|
78
53
|
this.transport.connection.callback = connectionCallback;
|
|
79
54
|
}
|
|
80
55
|
get dc() {
|
|
81
|
-
return
|
|
56
|
+
return this.#dc;
|
|
82
57
|
}
|
|
83
58
|
get isCdn() {
|
|
84
|
-
return
|
|
59
|
+
return this.#isCdn;
|
|
85
60
|
}
|
|
86
61
|
set serverSalt(serverSalt) {
|
|
87
62
|
this.state.serverSalt = serverSalt;
|
|
@@ -89,59 +64,61 @@ export class Session {
|
|
|
89
64
|
get serverSalt() {
|
|
90
65
|
return this.state.serverSalt;
|
|
91
66
|
}
|
|
67
|
+
#lastState;
|
|
68
|
+
async #stateChangeHandler(isConnected) {
|
|
69
|
+
if (this.#lastState !== isConnected) {
|
|
70
|
+
setTimeout(() => {
|
|
71
|
+
this.#onConnectionStateChange?.(isConnected);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (this.#lastState === isConnected) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.#lastState = isConnected;
|
|
78
|
+
if (isConnected || this.#isDisconnected) {
|
|
79
|
+
if (this.#isDisconnected) {
|
|
80
|
+
this.#L.debug("not reconnecting because explicitly disconnected");
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (this.#lastConnect && Date.now() - this.#lastConnect.getTime() <= 10 * SECOND) {
|
|
85
|
+
this.#L.debug("reconnecting after a delay");
|
|
86
|
+
await delay(3 * SECOND);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.#L.debug("reconnecting");
|
|
90
|
+
}
|
|
91
|
+
await this.connect();
|
|
92
|
+
}
|
|
92
93
|
get isConnected() {
|
|
93
94
|
return this.transport.connection.isConnected;
|
|
94
95
|
}
|
|
96
|
+
#connectMutex = new Mutex();
|
|
95
97
|
async connect() {
|
|
96
|
-
const unlock = await
|
|
98
|
+
const unlock = await this.#connectMutex.lock();
|
|
97
99
|
try {
|
|
98
100
|
if (this.isConnected) {
|
|
99
101
|
return;
|
|
100
102
|
}
|
|
101
103
|
await this.transport.connection.open();
|
|
102
104
|
await this.transport.transport.initialize();
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
this.#lastConnect = new Date();
|
|
106
|
+
this.#isDisconnected = false;
|
|
105
107
|
}
|
|
106
108
|
finally {
|
|
107
109
|
unlock();
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
112
|
async waitUntilConnected() {
|
|
111
|
-
(await
|
|
113
|
+
(await this.#connectMutex.lock())();
|
|
112
114
|
}
|
|
113
115
|
get isDisconnected() {
|
|
114
|
-
return
|
|
116
|
+
return this.#isDisconnected;
|
|
115
117
|
}
|
|
116
118
|
disconnect() {
|
|
117
|
-
|
|
119
|
+
this.#isDisconnected = true;
|
|
118
120
|
if (this.transport.connection.isConnected) {
|
|
119
121
|
this.transport.connection.close();
|
|
120
122
|
}
|
|
121
123
|
}
|
|
122
124
|
}
|
|
123
|
-
_Session_dc = new WeakMap(), _Session_isCdn = new WeakMap(), _Session_lastConnect = new WeakMap(), _Session_isDisconnected = new WeakMap(), _Session_L = new WeakMap(), _Session_onConnectionStateChange = new WeakMap(), _Session_lastState = new WeakMap(), _Session_connectMutex = new WeakMap(), _Session_instances = new WeakSet(), _Session_stateChangeHandler = async function _Session_stateChangeHandler(isConnected) {
|
|
124
|
-
if (__classPrivateFieldGet(this, _Session_lastState, "f") !== isConnected) {
|
|
125
|
-
setTimeout(() => {
|
|
126
|
-
__classPrivateFieldGet(this, _Session_onConnectionStateChange, "f")?.call(this, isConnected);
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
if (__classPrivateFieldGet(this, _Session_lastState, "f") === isConnected) {
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
__classPrivateFieldSet(this, _Session_lastState, isConnected, "f");
|
|
133
|
-
if (isConnected || __classPrivateFieldGet(this, _Session_isDisconnected, "f")) {
|
|
134
|
-
if (__classPrivateFieldGet(this, _Session_isDisconnected, "f")) {
|
|
135
|
-
__classPrivateFieldGet(this, _Session_L, "f").debug("not reconnecting because explicitly disconnected");
|
|
136
|
-
}
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
if (__classPrivateFieldGet(this, _Session_lastConnect, "f") && Date.now() - __classPrivateFieldGet(this, _Session_lastConnect, "f").getTime() <= 10 * SECOND) {
|
|
140
|
-
__classPrivateFieldGet(this, _Session_L, "f").debug("reconnecting after a delay");
|
|
141
|
-
await delay(3 * SECOND);
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
__classPrivateFieldGet(this, _Session_L, "f").debug("reconnecting");
|
|
145
|
-
}
|
|
146
|
-
await this.connect();
|
|
147
|
-
};
|