UNPKG

tdlib-native

Version:

🚀 Telegram TDLib native nodejs wrapper

126 lines (125 loc) • 3.7 kB
"use strict"; 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;