tdlib-native
Version:
🚀 Telegram TDLib native nodejs wrapper
126 lines (125 loc) • 3.7 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const types = require("./generated/types.js");
const warn = require("./warn.js");
class TDLibOptions {
/**
*
*
* @static
* @param {$AsyncApi} api
* @returns {*} {TDLibOptions}
* @memberof TDLibOptions
* @deprecated Removed instance caching, use `new TDLibOptions()` instead
*/
static for(api) {
return new TDLibOptions(api);
}
_api;
/**
* Creates an instance of TDLibOptions.
* @param {$AsyncApi} api
* @memberof TDLibOptions
*/
constructor(api) {
this._api = api;
}
/**
* **Waits for `setTdlibParameters` to be called to respond.**
* Exception: "version", "commit_hash"
*
* @see {@link https://t.me/tdlibchat/155412}
* @see {@link https://core.telegram.org/tdlib/options}
* @template {Keys} T
* @param {T} key
* @returns {Promise<*>} {Promise<TelegramOptionsExtended[T]>}
* @memberof TDLibOptions
*/
async get(key) {
const warner = setTimeout(() => {
warn.warnOnce(
"W001",
"tdlibOptions.get() takes too long to respond. This method waits for tdlibParameters to be passed. Use api.setTdlibParameters()"
);
}, 1e3);
const value = await this._api.getOption({ name: key }).catch(() => ({ [types.typename]: types.OptionValue$Type.Empty })).finally(() => clearTimeout(warner));
switch (value._) {
case types.OptionValue$Type.Integer: {
return BigInt(value.value);
}
case types.OptionValue$Type.Empty: {
return void 0;
}
default: {
return value.value;
}
}
}
/**
* **Waits for `setTdlibParameters` to be called to respond.**
*
* @see {@link https://t.me/tdlibchat/155412}
* @see {@link https://core.telegram.org/tdlib/options}
* @template {Keys} T
* @param {T} key
* @param {*} value
* @returns {Promise<void>} {Promise<void>}
* @memberof TDLibOptions
*/
async set(key, value) {
let option = { [types.typename]: types.OptionValue$Type.Empty };
switch (typeof value) {
case "number":
case "bigint": {
option = {
[types.typename]: types.OptionValue$Type.Integer,
value: BigInt(value).toString()
};
break;
}
case "boolean": {
option = { [types.typename]: types.OptionValue$Type.Boolean, value };
break;
}
case "string": {
option = { [types.typename]: types.OptionValue$Type.String, value };
break;
}
}
const warner = setTimeout(() => {
warn.warnOnce(
"W002",
"tdlibOptions.set() takes too long to respond. This method waits for tdlibParameters to be passed. Use api.setTdlibParameters()"
);
}, 1e3);
await this._api.setOption({ name: key, value: option }).finally(() => clearTimeout(warner));
}
/**
* **Waits for `setTdlibParameters` to be called to respond.**
*
* @see {@link https://t.me/tdlibchat/155412}
* @see {@link https://core.telegram.org/tdlib/options}
* @param {Keys} key
* @memberof TDLibOptions
* @returns {Promise<void>}
*/
async delete(key) {
await this.set(key, void 0);
}
/**
* **Waits for `setTdlibParameters` to be called to respond.**
*
* @see {@link https://t.me/tdlibchat/155412}
* @see {@link https://core.telegram.org/tdlib/options}
* @param {OptionsWritable} values
* @memberof TDLibOptions
* @returns {Promise<void>}
*/
async assign(values) {
const promises = Object.entries(values).map(
([key, value]) => this.set(key, value)
);
await Promise.all(promises);
}
}
exports.TDLibOptions = TDLibOptions;