@bitrix24/b24jssdk 0.1.0 → 0.1.1
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/dist/commonjs/index.cjs +1432 -1398
- package/dist/commonjs/index.cjs.map +1 -1
- package/dist/commonjs/index.d.cts +40 -242
- package/dist/commonjs/index.d.mts +40 -242
- package/dist/commonjs/index.d.ts +40 -242
- package/dist/esm/index.d.mts +40 -242
- package/dist/esm/index.d.ts +40 -242
- package/dist/esm/index.mjs +1432 -1398
- package/dist/esm/index.mjs.map +1 -1
- package/dist/umd/index.js +1432 -1398
- package/dist/umd/index.js.map +1 -1
- package/dist/umd/index.min.js +16 -16
- package/dist/umd/index.min.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/logger/browser.ts","../../src/types/common.ts","../../src/tools/type.ts","../../src/tools/uuidv7.ts","../../src/tools/text.ts","../../src/tools/browser.ts","../../src/types/http.ts","../../src/types/crm/entity-type.ts","../../src/types/b24-helper.ts","../../src/types/pull.ts","../../src/core/result.ts","../../src/core/http/ajaxError.ts","../../src/core/http/ajaxResult.ts","../../src/core/http/restrictionManager.ts","../../src/core/http/requestIdGenerator.ts","../../src/core/http/controller.ts","../../src/core/abstract-b24.ts","../../src/core/language/list.ts","../../src/tools/scroll-size.ts","../../src/tools/formatters/numbers.ts","../../src/tools/formatters/iban.ts","../../src/tools/use-formatters.ts","../../src/hook/auth.ts","../../src/hook/controller.ts","../../src/frame/message/commands.ts","../../src/frame/message/controller.ts","../../src/frame/frame.ts","../../src/frame/auth.ts","../../src/frame/parent.ts","../../src/frame/options.ts","../../src/frame/dialog.ts","../../src/frame/slider.ts","../../src/frame/placement.ts","../../src/frame/controller.ts","../../src/helper/abstractHelper.ts","../../src/helper/profileManager.ts","../../src/helper/appManager.ts","../../src/helper/paymentManager.ts","../../src/helper/licenseManager.ts","../../src/helper/currencyManager.ts","../../src/helper/optionsManager.ts","../../src/pullClient/storage-manager.ts","../../src/pullClient/errors.ts","../../src/pullClient/json-rpc.ts","../../src/pullClient/shared-config.ts","../../src/pullClient/channelManager.ts","../../src/pullClient/protobuf/model.js","../../src/pullClient/protobuf/index.ts","../../src/pullClient/abstractConnector.ts","../../src/pullClient/web-socket-connector.ts","../../src/pullClient/long-polling-connector.ts","../../src/pullClient/client.ts","../../src/helper/helperManager.ts","../../src/helper/useB24Helper.ts","../../src/loader-b24frame.ts"],"sourcesContent":["export enum LoggerType\n{\n\tdesktop = 'desktop',\n\tlog = 'log',\n\tinfo = 'info',\n\twarn = 'warn',\n\terror = 'error',\n\ttrace = 'trace',\n}\n\ninterface LoggerTypes\n{\n\tdesktop: boolean;\n\tlog: boolean;\n\tinfo: boolean;\n\twarn: boolean;\n\terror: boolean;\n\ttrace: boolean;\n}\n\n// region StyleCollection ////\nconst styleCollection: Map<string, string[]> = new Map();\n\nstyleCollection.set(\n\t'title',\n\t[\n\t\t'%c#title#',\n\t\t'color: #959ca4; font-style: italic; padding: 0 6px; border-top: 1px solid #ccc; border-left: 1px solid #ccc; border-bottom: 1px solid #ccc'\n\t]\n);\n\nstyleCollection.set(\n\tLoggerType.desktop,\n\t[\n\t\t`%cDESKTOP`,\n\t\t'color: white; font-style: italic; background-color: #29619b; padding: 0 6px; border: 1px solid #29619b'\n\t]\n);\n\nstyleCollection.set(\n\tLoggerType.log,\n\t[\n\t\t`%cLOG`,\n\t\t'color: #2a323b; font-style: italic; background-color: #ccc; padding: 0 6px; border: 1px solid #ccc'\n\t]\n);\n\nstyleCollection.set(\n\tLoggerType.info,\n\t[\n\t\t`%cINFO`,\n\t\t'color: #fff; font-style: italic; background-color: #6b7f96; padding: 0 6px; border: 1px solid #6b7f96'\n\t]\n);\n\nstyleCollection.set(\n\tLoggerType.warn,\n\t[\n\t\t`%cWARNING`,\n\t\t'color: #f0a74f; font-style: italic; padding: 0 6px; border: 1px solid #f0a74f'\n\t]\n);\n\nstyleCollection.set(\n\tLoggerType.error,\n\t[\n\t\t`%cERROR`,\n\t\t'color: white; font-style: italic; background-color: #8a3232; padding: 0 6px; border: 1px solid #8a3232'\n\t]\n);\n\nstyleCollection.set(\n\tLoggerType.trace,\n\t[\n\t\t`%cTRACE`,\n\t\t'color: #2a323b; font-style: italic; background-color: #ccc; padding: 0 6px; border: 1px solid #ccc'\n\t]\n);\n// endregion ////\n\nexport class LoggerBrowser\n{\n\t#title: string;\n\t#types: LoggerTypes = {\n\t\tdesktop: true,\n\t\tlog: false,\n\t\tinfo: false,\n\t\twarn: false,\n\t\terror: true,\n\t\ttrace: true,\n\t};\n\n\tstatic build(\n\t\ttitle: string,\n\t\tisDevelopment: boolean = false\n\t): LoggerBrowser\n\t{\n\t\tconst logger = new LoggerBrowser(title);\n\t\t\n\t\tif(isDevelopment)\n\t\t{\n\t\t\tlogger.enable(LoggerType.log);\n\t\t\tlogger.enable(LoggerType.info);\n\t\t\tlogger.enable(LoggerType.warn);\n\t\t}\n\t\t\n\t\treturn logger;\n\t}\n\t\n\tprivate constructor(\n\t\ttitle: string\n\t)\n\t{\n\t\tthis.#title = title;\n\t}\n\t\n\t// region Styles ////\n\t#getStyle(type: LoggerType): string[]\n\t{\n\t\tconst resultText: string[] = [];\n\t\tconst resultStyle: string[] = [];\n\t\t\n\t\tif(styleCollection.has('title'))\n\t\t{\n\t\t\tconst styleTitle = styleCollection.get('title') as string[];\n\t\t\tif(styleTitle[0])\n\t\t\t{\n\t\t\t\tresultText.push(styleTitle[0].replace('#title#', this.#title));\n\t\t\t\tresultStyle.push(styleTitle[1] || '');\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(styleCollection.has(type))\n\t\t{\n\t\t\tconst styleBadge = styleCollection.get(type) as string[];\n\t\t\tif(styleBadge[0])\n\t\t\t{\n\t\t\t\tresultText.push(styleBadge[0]);\n\t\t\t\tresultStyle.push(styleBadge[1] || '');\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn [resultText.join(''), ...resultStyle];\n\t}\n\t// endregion ////\n\t\n\t// region Config ////\n\tsetConfig(types: Record<string|LoggerType, boolean>): void\n\t{\n\t\tfor (const type in types)\n\t\t{\n\t\t\tthis.#types[(type as LoggerType)] = (types[type] as boolean);\n\t\t}\n\t}\n\t\n\tenable(type: LoggerType): boolean\n\t{\n\t\tif (typeof this.#types[type] === 'undefined')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tthis.#types[type] = true;\n\t\t\n\t\treturn true;\n\t}\n\t\n\tdisable(type: LoggerType): boolean\n\t{\n\t\tif (typeof this.#types[type] === 'undefined')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tthis.#types[type] = false;\n\t\t\n\t\treturn true;\n\t}\n\t\n\tisEnabled(type: LoggerType): boolean\n\t{\n\t\treturn this.#types[type];\n\t}\n\t// endregion ////\n\t\n\t// region Functions ////\n\tdesktop(...params: any[]): void\n\t{\n\t\tif (this.isEnabled(LoggerType.desktop))\n\t\t{\n\t\t\tconsole.log(...[...this.#getStyle(LoggerType.desktop), ...params]);\n\t\t}\n\t}\n\t\n\tlog(...params: any[]): void\n\t{\n\t\tif (this.isEnabled(LoggerType.log))\n\t\t{\n\t\t\tconsole.log(...[...this.#getStyle(LoggerType.log), ...params]);\n\t\t}\n\t}\n\t\n\tinfo(...params: any[]): void\n\t{\n\t\tif (this.isEnabled(LoggerType.info))\n\t\t{\n\t\t\tconsole.info(...[...this.#getStyle(LoggerType.info), ...params]);\n\t\t}\n\t}\n\t\n\twarn(...params: any[]): void\n\t{\n\t\tif (this.isEnabled(LoggerType.warn))\n\t\t{\n\t\t\tconsole.warn(...[...this.#getStyle(LoggerType.warn), ...params]);\n\t\t}\n\t}\n\t\n\terror(...params: any[]): void\n\t{\n\t\tif (this.isEnabled(LoggerType.error))\n\t\t{\n\t\t\tconsole.error(...[...this.#getStyle(LoggerType.error), ...params]);\n\t\t}\n\t}\n\t\n\ttrace(...params: any[]): void\n\t{\n\t\tif (this.isEnabled(LoggerType.trace))\n\t\t{\n\t\t\tconsole.trace(...[...this.#getStyle(LoggerType.trace), ...params]);\n\t\t}\n\t}\n\t// endregion ////\n}\n","/**\n * String which is actually a number, like `'20.23'`\n */\nexport type NumberString = string\n\n/**\n * Like `'2018-06-07T03:00:00+03:00'`\n */\nexport type ISODate = string;\nexport type BoolString = 'Y' | 'N';\nexport type GenderString = 'M' | 'F' | '';\n\nexport type PlacementViewMode = 'view' | 'edit';\n\nexport type Fields = {\n\treadonly [key: string]: {\n\t\treadonly type: string\n\t\treadonly isRequired: boolean\n\t\treadonly isReadOnly: boolean\n\t\treadonly isImmutable: boolean\n\t\treadonly isMultiple: boolean\n\t\treadonly isDynamic: boolean\n\t\treadonly title: string\n\t\treadonly upperName?: string\n\t}\n}\n\nexport type MultiField = {\n\treadonly ID: NumberString\n\treadonly VALUE_TYPE: string\n\treadonly VALUE: string\n\treadonly TYPE_ID: string\n}\n\nexport type MultiFieldArray = ReadonlyArray<Pick<MultiField, 'VALUE' | 'VALUE_TYPE'>>\n\n/**\n * Describes the inline settings in UF\n */\nexport type UserFieldType = {\n\tUSER_TYPE_ID: string\n\tHANDLER: string\n\tTITLE: string\n\tDESCRIPTION: string\n\tOPTIONS?: {\n\t\theight: number\n\t}\n}\n\n/**\n * Data types\n * @link https://apidocs.bitrix24.ru/api-reference/data-types.html\n * @link https://dev.1c-bitrix.ru/rest_help/crm/dynamic/methodscrmitem/crm_item_fields.php\n */\nexport enum DataType\n{\n\tundefined = 'undefined',\n\tany = 'any',\n\tinteger = 'integer',\n\tboolean = 'boolean',\n\tdouble = 'double',\n\tdate = 'date',\n\tdatetime = 'datetime',\n\tstring = 'string',\n\ttext = 'text',\n\tfile = 'file',\n\tarray = 'array',\n\tobject = 'object',\n\tuser = 'user',\n\tlocation = 'location',\n\tcrmCategory = 'crm_category',\n\tcrmStatus = 'crm_status',\n\tcrmCurrency = 'crm_currency',\n}","const objectCtorString = Function.prototype.toString.call(Object)\n\n/**\n * The `Type` class is designed to check and determine data types\n *\n * @see bitrix/js/main/core/src/lib/type.js\n */\nclass TypeManager\n{\n\tgetTag(value: any): string\n\t{\n\t\treturn Object.prototype.toString.call(value)\n\t}\n\t\n\t/**\n\t * Checks that value is string\n\t * @param value\n\t * @return {boolean}\n\t *\n\t * @memo get from pull.client.Utils\n\t */\n\tisString(value: any): boolean\n\t{\n\t\treturn value === ''\n\t\t\t? true\n\t\t\t: (\n\t\t\t\tvalue\n\t\t\t\t? (typeof (value) === 'string' || value instanceof String)\n\t\t\t\t: false\n\t\t\t)\n\t}\n\n\t/**\n\t * Returns true if a value is not empty string\n\t * @param value\n\t * @returns {boolean}\n\t */\n\tisStringFilled(value: any): boolean\n\t{\n\t\treturn this.isString(value) && value !== ''\n\t}\n\n\t/**\n\t * Checks that value is function\n\t * @param value\n\t * @return {boolean}\n\t *\n\t * @memo get from pull.client.Utils\n\t */\n\tisFunction(value: any): boolean\n\t{\n\t\treturn value === null\n\t\t\t? false\n\t\t\t: (typeof (value) === 'function' || value instanceof Function)\n\t}\n\n\t/**\n\t * Checks that value is object\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisObject(value: any): boolean\n\t{\n\t\treturn !!value && (typeof value === 'object' || typeof value === 'function')\n\t}\n\t\n\t/**\n\t * Checks that value is object like\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisObjectLike(value: any): boolean\n\t{\n\t\treturn !!value && typeof value === 'object'\n\t}\n\n\t/**\n\t * Checks that value is plain object\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisPlainObject(value: any): boolean\n\t{\n\t\tif (!this.isObjectLike(value) || this.getTag(value) !== '[object Object]')\n\t\t{\n\t\t\treturn false\n\t\t}\n\n\t\tconst proto = Object.getPrototypeOf(value)\n\t\tif (proto === null)\n\t\t{\n\t\t\treturn true\n\t\t}\n\n\t\tconst ctor = proto.hasOwnProperty('constructor') && proto.constructor\n\n\t\treturn (\n\t\t\ttypeof ctor === 'function' &&\n\t\t\tFunction.prototype.toString.call(ctor) === objectCtorString\n\t\t)\n\t}\n\t\n\tisJsonRpcRequest(value: any): boolean\n\t{\n\t\treturn (\n\t\t\ttypeof (value) === 'object'\n\t\t\t&& value\n\t\t\t&& 'jsonrpc' in value\n\t\t\t&& this.isStringFilled(value.jsonrpc)\n\t\t\t&& 'method' in value\n\t\t\t&& this.isStringFilled(value.method)\n\t\t)\n\t}\n\n\tisJsonRpcResponse(value: any): boolean\n\t{\n\t\treturn (\n\t\t\ttypeof (value) === \"object\"\n\t\t\t&& value\n\t\t\t&& 'jsonrpc' in value\n\t\t\t&& this.isStringFilled(value.jsonrpc)\n\t\t\t&& 'id' in value\n\t\t\t&& (\n\t\t\t\t'result' in value\n\t\t\t\t|| 'error' in value\n\t\t\t)\n\t\t)\n\t}\n\t\n\t/**\n\t * Checks that value is boolean\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisBoolean(value: any): boolean\n\t{\n\t\treturn value === true || value === false\n\t}\n\n\t/**\n\t * Checks that value is number\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisNumber(value: any): boolean\n\t{\n\t\treturn !Number.isNaN(value) && typeof value === 'number'\n\t}\n\n\t/**\n\t * Checks that value is integer\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisInteger(value: any): boolean\n\t{\n\t\treturn this.isNumber(value) && (value % 1) === 0\n\t}\n\n\t/**\n\t * Checks that value is float\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisFloat(value: any): boolean\n\t{\n\t\treturn this.isNumber(value) && !this.isInteger(value)\n\t}\n\n\t/**\n\t * Checks that value is nil\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisNil(value: any): boolean\n\t{\n\t\treturn value === null || value === undefined\n\t}\n\n\t/**\n\t * Checks that value is array\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisArray(value: any): boolean\n\t{\n\t\treturn !this.isNil(value) && Array.isArray(value)\n\t}\n\n\t/**\n\t * Returns true if a value is an array, and it has at least one element\n\t * @param value\n\t * @returns {boolean}\n\t */\n\tisArrayFilled(value: any): boolean\n\t{\n\t\treturn this.isArray(value) && value.length > 0\n\t}\n\n\t/**\n\t * Checks that value is array like\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisArrayLike(value: any): boolean\n\t{\n\t\treturn (\n\t\t\t!this.isNil(value)\n\t\t\t&& !this.isFunction(value)\n\t\t\t&& value.length > -1\n\t\t\t&& value.length <= Number.MAX_SAFE_INTEGER\n\t\t)\n\t}\n\n\t/**\n\t * Checks that value is Date\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisDate(value: any): boolean\n\t{\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object Date]'\n\t}\n\n\t/**\n\t * Checks that is DOM node\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisDomNode(value: any): boolean\n\t{\n\t\treturn this.isObjectLike(value) && !this.isPlainObject(value) && 'nodeType' in value\n\t}\n\n\t/**\n\t * Checks that value is element node\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisElementNode(value: any): boolean\n\t{\n\t\treturn this.isDomNode(value) && value.nodeType === Node.ELEMENT_NODE\n\t}\n\n\t/**\n\t * Checks that value is text node\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisTextNode(value: any): boolean\n\t{\n\t\treturn this.isDomNode(value) && value.nodeType === Node.TEXT_NODE\n\t}\n\n\t/**\n\t * Checks that value is Map\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisMap(value: any): boolean\n\t{\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object Map]'\n\t}\n\n\t/**\n\t * Checks that value is Set\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisSet(value: any): boolean\n\t{\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object Set]'\n\t}\n\n\t/**\n\t * Checks that value is WeakMap\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisWeakMap(value: any): boolean\n\t{\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object WeakMap]'\n\t}\n\n\t/**\n\t * Checks that value is WeakSet\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisWeakSet(value: any): boolean\n\t{\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object WeakSet]'\n\t}\n\n\t/**\n\t * Checks that value is prototype\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisPrototype(value: any): boolean\n\t{\n\t\treturn (\n\t\t\t(((typeof (value && value.constructor) === 'function') && value.constructor.prototype) || Object.prototype) === value\n\t\t)\n\t}\n\n\t/**\n\t * Checks that value is regexp\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisRegExp(value: any): boolean\n\t{\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object RegExp]'\n\t}\n\n\t/**\n\t * Checks that value is null\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisNull(value: any): boolean\n\t{\n\t\treturn value === null\n\t}\n\n\t/**\n\t * Checks that value is undefined\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisUndefined(value: any): boolean\n\t{\n\t\treturn typeof value === 'undefined'\n\t}\n\n\t/**\n\t * Checks that value is ArrayBuffer\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisArrayBuffer(value: any): boolean\n\t{\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object ArrayBuffer]'\n\t}\n\n\t/**\n\t * Checks that value is typed array\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisTypedArray(value: any): boolean\n\t{\n\t\tconst regExpTypedTag = (\n\t\t\t/^\\[object (?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)]$/\n\t\t)\n\t\treturn this.isObjectLike(value) && regExpTypedTag.test(this.getTag(value))\n\t}\n\n\t/**\n\t * Checks that value is Blob\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisBlob(value: any): boolean\n\t{\n\t\treturn (\n\t\t\tthis.isObjectLike(value)\n\t\t\t&& this.isNumber(value.size)\n\t\t\t&& this.isString(value.type)\n\t\t\t&& this.isFunction(value.slice)\n\t\t)\n\t}\n\n\t/**\n\t * Checks that value is File\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisFile(value: any): boolean\n\t{\n\t\treturn (\n\t\t\tthis.isBlob(value)\n\t\t\t&& this.isString(value.name)\n\t\t\t&& (this.isNumber(value.lastModified) || this.isObjectLike(value.lastModifiedDate))\n\t\t)\n\t}\n\n\t/**\n\t * Checks that value is FormData\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisFormData(value: any): boolean\n\t{\n\t\treturn value instanceof FormData\n\t}\n\t\n\tclone(\n\t\tobj: any,\n\t\tbCopyObj: boolean = true\n\t): any\n\t{\n\t\tlet _obj, i, l\n\t\t\n\t\tif(obj === null)\n\t\t{\n\t\t\treturn null\n\t\t}\n\t\t\n\t\tif(this.isDomNode(obj))\n\t\t{\n\t\t\t_obj = obj.cloneNode(bCopyObj)\n\t\t}\n\t\telse if(typeof obj == 'object')\n\t\t{\n\t\t\tif (this.isArray(obj))\n\t\t\t{\n\t\t\t\t_obj = []\n\t\t\t\tfor (i = 0, l = obj.length; i < l; i++)\n\t\t\t\t{\n\t\t\t\t\tif (typeof obj[i] == \"object\" && bCopyObj)\n\t\t\t\t\t{\n\t\t\t\t\t\t_obj[i] = this.clone(obj[i], bCopyObj)\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_obj[i] = obj[i]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_obj = {}\n\t\t\t\tif (obj.constructor)\n\t\t\t\t{\n\t\t\t\t\tif (this.isDate(obj))\n\t\t\t\t\t{\n\t\t\t\t\t\t_obj = new Date(obj)\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_obj = new obj.constructor()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor(i in obj)\n\t\t\t\t{\n\t\t\t\t\tif (!obj.hasOwnProperty(i))\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof obj[i] === \"object\" && bCopyObj)\n\t\t\t\t\t{\n\t\t\t\t\t\t_obj[i] = this.clone(obj[i], bCopyObj)\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_obj[i] = obj[i]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_obj = obj\n\t\t}\n\t\t\n\t\treturn _obj\n\t}\n}\n\nconst Type = new TypeManager()\n\nexport default Type","/**\n * uuid v7\n *\n * @link https://github.com/uuidjs/uuid\n */\n\ntype V7State = {\n\t// time, milliseconds\n\tmsecs?: number\n\t// sequence number (32-bits)\n\tseq?: number\n}\n\nconst _state: V7State = {}\n\nlet getRandomValues: typeof crypto.getRandomValues | undefined\nconst randoms8 = new Uint8Array(16)\n\nconst byteToHex: string[] = [];\nfor(let i = 0; i < 256; ++i)\n{\n\tbyteToHex.push((i + 0x100).toString(16).slice(1))\n}\n\nfunction updateV7State(\n\tstate: V7State,\n\tnow: number,\n\trandoms: Uint8Array\n)\n{\n\tstate.msecs ??= -Infinity\n\tstate.seq ??= 0\n\t\n\tif(now > state.msecs)\n\t{\n\t\t// Time has moved on! Pick a new random sequence number\n\t\tstate.seq = (randoms[6] << 23) | (randoms[7] << 16) | (randoms[8] << 8) | randoms[9]\n\t\tstate.msecs = now\n\t}\n\telse\n\t{\n\t\t// Bump sequence counter w/ 32-bit rollover\n\t\tstate.seq = Math.trunc(state.seq + 1)\n\t\t\n\t\t// In case of rollover, bump timestamp to preserve monotonicity. This is\n\t\t// allowed by the RFC and should self-correct as the system clock catches\n\t\t// up. See https://www.rfc-editor.org/rfc/rfc9562.html#section-6.2-9.4\n\t\tif(state.seq === 0)\n\t\t{\n\t\t\tstate.msecs++\n\t\t}\n\t}\n\t\n\treturn state\n}\n\nfunction v7Bytes(\n\trandoms: Uint8Array,\n\tmsecs?: number,\n\tseq?: number,\n\tbuf?: Uint8Array,\n\toffset = 0\n)\n{\n\tif(!buf)\n\t{\n\t\tbuf = new Uint8Array(16)\n\t\toffset = 0\n\t}\n\t\n\t// Defaults\n\tmsecs ??= Date.now()\n\tseq ??= ((randoms[6] * 0x7f) << 24) | (randoms[7] << 16) | (randoms[8] << 8) | randoms[9]\n\t\n\t// byte 0-5: timestamp (48 bits)\n\tbuf[offset++] = (msecs / 0x10000000000) & 0xff\n\tbuf[offset++] = (msecs / 0x100000000) & 0xff\n\tbuf[offset++] = (msecs / 0x1000000) & 0xff\n\tbuf[offset++] = (msecs / 0x10000) & 0xff\n\tbuf[offset++] = (msecs / 0x100) & 0xff\n\tbuf[offset++] = msecs & 0xff\n\t\n\t// byte 6: `version` (4 bits) | sequence bits 28-31 (4 bits)\n\tbuf[offset++] = 0x70 | ((seq >>> 28) & 0x0f)\n\t\n\t// byte 7: sequence bits 20-27 (8 bits)\n\tbuf[offset++] = (seq >>> 20) & 0xff\n\t\n\t// byte 8: `variant` (2 bits) | sequence bits 14-19 (6 bits)\n\tbuf[offset++] = 0x80 | ((seq >>> 14) & 0x3f)\n\t\n\t// byte 9: sequence bits 6-13 (8 bits)\n\tbuf[offset++] = (seq >>> 6) & 0xff\n\t\n\t// byte 10: sequence bits 0-5 (6 bits) | random (2 bits)\n\tbuf[offset++] = ((seq << 2) & 0xff) | (randoms[10] & 0x03)\n\t\n\t// bytes 11-15: random (40 bits)\n\tbuf[offset++] = randoms[11]\n\tbuf[offset++] = randoms[12]\n\tbuf[offset++] = randoms[13]\n\tbuf[offset++] = randoms[14]\n\tbuf[offset++] = randoms[15]\n\t\n\treturn buf\n}\n\nfunction unsafeStringify(\n\tarr: Uint8Array,\n\toffset = 0\n): string\n{\n\t// Note: Be careful editing this code! It's been tuned for performance\n\t// and works in ways you may not expect.\n\t//\n\t// Note to future-self: No, you can't remove the `toLowerCase()` call.\n\treturn (\n\t\tbyteToHex[arr[offset]] +\n\t\tbyteToHex[arr[offset + 1]] +\n\t\tbyteToHex[arr[offset + 2]] +\n\t\tbyteToHex[arr[offset + 3]] +\n\t\t'-' +\n\t\tbyteToHex[arr[offset + 4]] +\n\t\tbyteToHex[arr[offset + 5]] +\n\t\t'-' +\n\t\tbyteToHex[arr[offset + 6]] +\n\t\tbyteToHex[arr[offset + 7]] +\n\t\t'-' +\n\t\tbyteToHex[arr[offset + 8]] +\n\t\tbyteToHex[arr[offset + 9]] +\n\t\t'-' +\n\t\tbyteToHex[arr[offset + 10]] +\n\t\tbyteToHex[arr[offset + 11]] +\n\t\tbyteToHex[arr[offset + 12]] +\n\t\tbyteToHex[arr[offset + 13]] +\n\t\tbyteToHex[arr[offset + 14]] +\n\t\tbyteToHex[arr[offset + 15]]\n\t).toLowerCase()\n}\n\nexport default function uuidv7(): string\n{\n\t\n\tconst buf = undefined\n\tconst offset = undefined\n\t\n\tconst now = Date.now()\n\t\n\tif (!getRandomValues)\n\t{\n\t\tif(\n\t\t\ttypeof crypto === 'undefined'\n\t\t\t|| !crypto.getRandomValues\n\t\t){\n\t\t\tthrow new Error(\n\t\t\t\t'crypto.getRandomValues() not supported.'\n\t\t\t)\n\t\t}\n\t\t\n\t\tgetRandomValues = crypto.getRandomValues.bind(crypto)\n\t}\n\t\n\tconst randoms = getRandomValues(randoms8);\n\t\n\tupdateV7State(_state, now, randoms)\n\t\n\tconst bytes: Uint8Array = v7Bytes(randoms, _state.msecs, _state.seq, buf, offset)\n\t\n\treturn unsafeStringify(bytes)\n}","import { DateTime, type DateTimeOptions } from 'luxon'\nimport uuidv7 from '../tools/uuidv7'\nimport Type from './type'\n\n// eslint-disable-next-line\nconst reEscape = /[&<>'\"]/g\nconst reUnescape = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34)/g\n\nconst escapeEntities: Record<string, string> = {\n\t'&': '&',\n\t'<': '<',\n\t'>': '>',\n\t\"'\": ''',\n\t'\"': '"',\n}\n\nconst unescapeEntities: Record<string, string> = {\n\t'&': '&',\n\t'&': '&',\n\t'<': '<',\n\t'<': '<',\n\t'>': '>',\n\t'>': '>',\n\t'&apos': \"'\",\n\t''': \"'\",\n\t'"': '\"',\n\t'"': '\"',\n}\n\n\n/**\n * The `Text` class provides a set of utility methods for working with text data.\n * It includes functions for encoding and decoding HTML entities, generating random strings,\n * converting values to different data types, and changing the case and format of strings\n *\n * @see bitrix/js/main/core/src/lib/text.js\n */\nclass TextManager\n{\n\tgetRandom(length = 8): string\n\t{\n\t\t// eslint-disable-next-line\n\t\treturn [...Array(length)].map(() => (~~(Math.random() * 36)).toString(36)).join('')\n\t}\n\t\n\t/**\n\t * Generates UUID\n\t */\n\tgetUniqId(): string\n\t{\n\t\treturn 'xxxxxxxx-xlsx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n\t\t\tconst r = Math.trunc(Math.random() * 16)\n\t\t\tconst v = c === 'x' ? r : (r & 0x3 | 0x8)\n\t\t\treturn v.toString(16)\n\t\t})\n\t}\n\t\n\t/**\n\t * Generate uuid v7\n\t * @return {string}\n\t */\n\tgetUuidRfc4122(): string\n\t{\n\t\treturn uuidv7()\n\t}\n\t\n\t/**\n\t * Encodes all unsafe entities\n\t * @param {string} value\n\t * @return {string}\n\t */\n\tencode(value: string): string\n\t{\n\t\tif (Type.isString(value))\n\t\t{\n\t\t\treturn value.replace(reEscape, item => escapeEntities[item])\n\t\t}\n\n\t\treturn value\n\t}\n\n\t/**\n\t * Decodes all encoded entities\n\t * @param {string} value\n\t * @return {string}\n\t */\n\tdecode(value: string): string\n\t{\n\t\tif (Type.isString(value))\n\t\t{\n\t\t\treturn value.replace(reUnescape, item => unescapeEntities[item])\n\t\t}\n\n\t\treturn value\n\t}\n\t\n\ttoNumber(value: any): number\n\t{\n\t\tconst parsedValue = Number.parseFloat(value)\n\n\t\tif (Type.isNumber(parsedValue))\n\t\t{\n\t\t\treturn parsedValue\n\t\t}\n\n\t\treturn 0.0\n\t}\n\n\ttoInteger(value: any): number\n\t{\n\t\treturn this.toNumber(Number.parseInt(value, 10))\n\t}\n\n\ttoBoolean(value: any, trueValues: string[] = []): boolean\n\t{\n\t\tconst transformedValue = Type.isString(value) ? value.toLowerCase() : value\n\t\treturn ['true', 'y', '1', 1, true, ...trueValues].includes(transformedValue)\n\t}\n\t\n\ttoCamelCase(str: string): string\n\t{\n\t\tif (!Type.isStringFilled(str))\n\t\t{\n\t\t\treturn str\n\t\t}\n\t\t\n\t\t// eslint-disable-next-line\n\t\tconst regex = /[-_\\s]+(.)?/g\n\t\tif (!regex.test(str))\n\t\t{\n\t\t\t// eslint-disable-next-line\n\t\t\treturn str.match(/^[A-Z]+$/) ? str.toLowerCase() : str[0].toLowerCase() + str.slice(1)\n\t\t}\n\n\t\tstr = str.toLowerCase()\n\t\tstr = str.replace(regex, (_match: string, letter) => letter ? letter.toUpperCase() : '')\n\t\t\n\t\t// eslint-disable-next-line\n\t\treturn str[0].toLowerCase() + str.substring(1)\n\t}\n\n\ttoPascalCase(str: string): string\n\t{\n\t\tif (!Type.isStringFilled(str))\n\t\t{\n\t\t\treturn str\n\t\t}\n\n\t\treturn this.capitalize(this.toCamelCase(str))\n\t}\n\n\ttoKebabCase(str: string): string\n\t{\n\t\tif (!Type.isStringFilled(str))\n\t\t{\n\t\t\treturn str\n\t\t}\n\t\t\n\t\t// eslint-disable-next-line\n\t\tconst matches = str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)\n\t\tif (!matches)\n\t\t{\n\t\t\treturn str\n\t\t}\n\n\t\treturn matches.map(x => x.toLowerCase()).join('-')\n\t}\n\n\tcapitalize(str: string): string\n\t{\n\t\tif (!Type.isStringFilled(str))\n\t\t{\n\t\t\treturn str\n\t\t}\n\t\t\n\t\t// eslint-disable-next-line\n\t\treturn str[0].toUpperCase() + str.substring(1)\n\t}\n\t\n\tnumberFormat(\n\t\tnumber: number,\n\t\tdecimals: number = 0,\n\t\tdecPoint: string = '.',\n\t\tthousandsSep: string = ','\n\t): string\n\t{\n\t\t// eslint-disable-next-line\n\t\tconst n = !Number.isFinite(number) ? 0 : number\n\t\t// eslint-disable-next-line\n\t\tconst fractionDigits = !Number.isFinite(decimals) ? 0 : Math.abs(decimals)\n\t\t\n\t\tconst toFixedFix = (n: number, fractionDigits: number): number => {\n\t\t\tconst k = Math.pow(10, fractionDigits)\n\t\t\treturn Math.round(n * k) / k\n\t\t}\n\t\t\n\t\tconst s = (fractionDigits ? toFixedFix(n, fractionDigits) : Math.round(n)).toString().split('.')\n\t\t\n\t\tif (s[0].length > 3) {\n\t\t\ts[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, thousandsSep)\n\t\t}\n\t\t\n\t\tif ((s[1] || '').length < fractionDigits) {\n\t\t\ts[1] = s[1] || ''\n\t\t\t// eslint-disable-next-line\n\t\t\ts[1] += new Array(fractionDigits - s[1].length + 1).join('0')\n\t\t}\n\t\t\n\t\treturn s.join(decPoint)\n\t}\n\t\n\t/**\n\t * Convert string to DateTime from ISO 8601 or self template\n\t *\n\t * @param {string} dateString\n\t * @param {string} template\n\t * @param opts\n\t * @returns {DateTime}\n\t *\n\t * @link https://moment.github.io/luxon/#/parsing?id=parsing-technical-formats\n\t */\n\ttoDateTime (\n\t\tdateString: string,\n\t\ttemplate?: string,\n\t\topts?: DateTimeOptions\n\t): DateTime\n\t{\n\t\tif(\n\t\t\t!(typeof template === 'undefined')\n\t\t\t&& Type.isStringFilled(template)\n\t\t)\n\t\t{\n\t\t\treturn DateTime.fromFormat(\n\t\t\t\tdateString,\n\t\t\t\ttemplate,\n\t\t\t\topts\n\t\t\t)\n\t\t}\n\t\t\n\t\treturn DateTime.fromISO(dateString, opts)\n\t}\n\t\n\tgetDateForLog(): string\n\t{\n\t\tconst now = DateTime.now();\n\t\treturn now.toFormat('y-MM-dd HH:mm:ss')\n\t}\n\t\n\tbuildQueryString(params: any): string\n\t{\n\t\tlet result = ''\n\t\tfor(const key in params)\n\t\t{\n\t\t\tif(!params.hasOwnProperty(key))\n\t\t\t{\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t\n\t\t\tconst value = params[key]\n\t\t\tif(Type.isArray(value))\n\t\t\t{\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\tvalue.forEach((valueElement: any, index: any) => {\n\t\t\t\t\tresult += encodeURIComponent(key + \"[\" + index + \"]\") + \"=\" + encodeURIComponent(valueElement) + \"&\"\n\t\t\t\t})\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult += encodeURIComponent(key) + \"=\" + encodeURIComponent(value) + \"&\"\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (result.length > 0)\n\t\t{\n\t\t\t// eslint-disable-next-line\n\t\t\tresult = result.substring(0, result.length - 1)\n\t\t}\n\t\t\n\t\treturn result\n\t}\n}\n\nconst Text = new TextManager()\n\nexport default Text","import Type from './type'\n\nlet UA: string = ''\ntry\n{\n\tUA = navigator?.userAgent.toLowerCase()\n}\ncatch {\n\tUA = '?'\n}\n\n/**\n * @see bitrix/js/main/core/src/lib/browser.js\n */\nclass BrowserManager\n{\n\tisOpera(): boolean\n\t{\n\t\treturn UA.includes('opera')\n\t}\n\n\tisIE(): boolean\n\t{\n\t\treturn ('attachEvent' in document) && !this.isOpera()\n\t}\n\n\tisIE6(): boolean\n\t{\n\t\treturn UA.includes('msie 6')\n\t}\n\n\tisIE7(): boolean\n\t{\n\t\treturn UA.includes('msie 7')\n\t}\n\n\tisIE8(): boolean\n\t{\n\t\treturn UA.includes('msie 8')\n\t}\n\n\tisIE9(): boolean\n\t{\n\t\t// @ts-ignore ////\n\t\treturn ('documentMode' in document) && document.documentMode >= 9\n\t}\n\n\tisIE10(): boolean\n\t{\n\t\t// @ts-ignore ////\n\t\treturn ('documentMode' in document) && document.documentMode >= 10\n\t}\n\n\tisSafari(): boolean\n\t{\n\t\treturn UA.includes('safari') && !UA.includes('chrome')\n\t}\n\n\tisFirefox()\n\t{\n\t\treturn UA.includes('firefox')\n\t}\n\n\tisChrome()\n\t{\n\t\treturn UA.includes('chrome')\n\t}\n\n\tdetectIEVersion()\n\t{\n\t\tif (this.isOpera() || this.isSafari() || this.isFirefox() || this.isChrome())\n\t\t{\n\t\t\treturn -1\n\t\t}\n\n\t\tlet rv = -1\n\n\t\tif (\n\t\t\t// @ts-ignore ////\n\t\t\t!!(window.MSStream)\n\t\t\t// @ts-ignore ////\n\t\t\t&& !(window.ActiveXObject)\n\t\t\t&& ('ActiveXObject' in window)\n\t\t)\n\t\t{\n\t\t\trv = 11\n\t\t}\n\t\telse if (this.isIE10())\n\t\t{\n\t\t\trv = 10\n\t\t}\n\t\telse if (this.isIE9())\n\t\t{\n\t\t\trv = 9\n\t\t}\n\t\telse if (this.isIE())\n\t\t{\n\t\t\trv = 8\n\t\t}\n\n\t\tif (rv === -1 || rv === 8)\n\t\t{\n\t\t\t// @ts-ignore ////\n\t\t\tif (navigator.appName === 'Microsoft Internet Explorer')\n\t\t\t{\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\tconst re = new RegExp('MSIE ([0-9]+[.0-9]*)')\n\t\t\t\tconst res = navigator.userAgent.match(re)\n\t\t\t\t\n\t\t\t\t// @ts-ignore ////\n\t\t\t\tif (Type.isArrayLike(res) && res.length > 0)\n\t\t\t\t{\n\t\t\t\t\t// @ts-ignore ////\n\t\t\t\t\trv = Number.parseFloat(res[1])\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// @ts-ignore ////\n\t\t\tif (navigator.appName === 'Netscape')\n\t\t\t{\n\t\t\t\t// Alternative check for IE 11\n\t\t\t\trv = 11\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\tconst re = new RegExp('Trident/.*rv:([0-9]+[.0-9]*)')\n\n\t\t\t\tif (re.exec(navigator.userAgent) != null)\n\t\t\t\t{\n\t\t\t\t\tconst res = navigator.userAgent.match(re)\n\t\t\t\t\t\n\t\t\t\t\t// @ts-ignore ////\n\t\t\t\t\tif (Type.isArrayLike(res) && res.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t// @ts-ignore ////\n\t\t\t\t\t\trv = Number.parseFloat(res[1])\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn rv\n\t}\n\n\tisIE11(): boolean\n\t{\n\t\treturn this.detectIEVersion() >= 11\n\t}\n\n\tisMac(): boolean\n\t{\n\t\treturn UA.includes('macintosh')\n\t}\n\n\tisWin(): boolean\n\t{\n\t\treturn UA.includes('windows')\n\t}\n\n\tisLinux(): boolean\n\t{\n\t\treturn UA.includes('linux') && !this.isAndroid()\n\t}\n\n\tisAndroid(): boolean\n\t{\n\t\treturn UA.includes('android')\n\t}\n\n\tisIPad(): boolean\n\t{\n\t\treturn UA.includes('ipad;') || (this.isMac() && this.isTouchDevice())\n\t}\n\n\tisIPhone(): boolean\n\t{\n\t\treturn UA.includes('iphone;')\n\t}\n\n\tisIOS(): boolean\n\t{\n\t\treturn this.isIPad() || this.isIPhone()\n\t}\n\n\tisMobile(): boolean\n\t{\n\t\treturn (\n\t\t\tthis.isIPhone()\n\t\t\t|| this.isIPad()\n\t\t\t|| this.isAndroid()\n\t\t\t|| UA.includes('mobile')\n\t\t\t|| UA.includes('touch')\n\t\t);\n\t}\n\n\tisRetina(): boolean\n\t{\n\t\treturn (window.devicePixelRatio && window.devicePixelRatio >= 2) === true\n\t}\n\n\tisTouchDevice(): boolean\n\t{\n\t\treturn (\n\t\t\t('ontouchstart' in window)\n\t\t\t|| navigator.maxTouchPoints > 0\n\t\t\t// @ts-ignore ////\n\t\t\t|| navigator.msMaxTouchPoints > 0\n\t\t);\n\t}\n\n\tisDoctype(target: any): boolean\n\t{\n\t\tconst doc = target || document\n\n\t\tif (doc.compatMode)\n\t\t{\n\t\t\treturn (doc.compatMode === 'CSS1Compat')\n\t\t}\n\n\t\treturn (doc.documentElement && doc.documentElement.clientHeight)\n\t}\n\n\tisLocalStorageSupported(): boolean\n\t{\n\t\ttry\n\t\t{\n\t\t\tlocalStorage.setItem('test', 'test')\n\t\t\tlocalStorage.removeItem('test');\n\t\t\treturn true;\n\t\t}\n\t\tcatch {\n\t\t\treturn false\n\t\t}\n\t}\n\t\n\tdetectAndroidVersion(): number\n\t{\n\t\t// eslint-disable-next-line\n\t\tconst re = new RegExp('Android ([0-9]+[.0-9]*)')\n\n\t\tif (re.exec(navigator.userAgent) != null)\n\t\t{\n\t\t\tconst res = navigator.userAgent.match(re)\n\n\t\t\t// @ts-ignore ////\n\t\t\tif (Type.isArrayLike(res) && res.length > 0)\n\t\t\t{\n\t\t\t\t// @ts-ignore ////\n\t\t\t\treturn Number.parseFloat(res[1])\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n}\n\nconst Browser = new BrowserManager()\n\nexport default Browser","import { LoggerBrowser } from '../logger/browser'\nimport { Result } from '../core/result'\nimport { AjaxResult } from '../core/http/ajaxResult'\n\nexport type TypeHttp = {\n\tsetLogger(logger: LoggerBrowser): void\n\tgetLogger(): LoggerBrowser\n\t\n\tbatch(\n\t\tcalls: any[]|object,\n\t\tisHaltOnError: boolean\n\t): Promise<Result>\n\t\n\tcall(\n\t\tmethod: string,\n\t\tparams: object,\n\t\tstart: number\n\t): Promise<AjaxResult>\n\t\n\tsetRestrictionManagerParams(params: TypeRestrictionManagerParams): void\n\t\n\tgetRestrictionManagerParams(): TypeRestrictionManagerParams\n\t\n\tsetLogTag(logTag?: string): void\n\tclearLogTag(): void\n}\n\nexport interface IRequestIdGenerator {\n\tgetRequestId(): string\n\tgetHeaderFieldName(): string\n\tgetQueryStringParameterName():string\n\tgetQueryStringSdkParameterName():string\n}\n\nexport type TypeRestrictionManagerParams = {\n\tsleep: number\n\tspeed: number\n\tamount: number\n}\n\nexport const RestrictionManagerParamsBase = {\n\tsleep: 1_000,\n\tspeed: 0.001,\n\tamount: 30\n} as TypeRestrictionManagerParams\n\n/**\n * @todo Need test\n */\nexport const RestrictionManagerParamsForEnterprise = {\n\tsleep: 600,\n\tspeed: 0.01,\n\tamount: 30 * 5\n} as TypeRestrictionManagerParams","/**\n * CRM Entity Types\n * @link https://dev.1c-bitrix.ru/rest_help/crm/constants.php\n */\nexport enum EnumCrmEntityType\n{\n\tundefined = 'UNDEFINED',\n\tlead = 'CRM_LEAD',\n\tdeal = 'CRM_DEAL',\n\tcontact = 'CRM_CONTACT',\n\tcompany = 'CRM_COMPANY',\n\toldInvoice = 'CRM_INVOICE',\n\tinvoice = 'CRM_SMART_INVOICE',\n\tquote = 'CRM_QUOTE',\n\trequisite = 'CRM_REQUISITE',\n}\n\nexport enum EnumCrmEntityTypeId\n{\n\tundefined = 0,\n\tlead = 1,\n\tdeal = 2,\n\tcontact = 3,\n\tcompany = 4,\n\toldInvoice = 5,\n\tinvoice = 31,\n\tquote = 7,\n\trequisite = 8,\n}","import { DateTime } from 'luxon'\n\nimport type {\n\tBoolString,\n\tGenderString\n} from \"./common\";\n\nexport enum LoadDataType {\n\tApp = 'app',\n\tProfile = 'profile',\n\tCurrency = 'currency',\n\tAppOptions = 'appOptions',\n\tUserOptions = 'userOptions'\n}\n\nexport type TypeUser = {\n\treadonly isAdmin: boolean;\n\t\n\treadonly id: null|number;\n\treadonly lastName: null|string;\n\treadonly name: null|string;\n\t\n\treadonly gender: GenderString;\n\t\n\treadonly photo: null|string;\n\t\n\treadonly TimeZone: null|string;\n\treadonly TimeZoneOffset: null|number;\n}\n\nexport const EnumAppStatus = {\n\t// free ////\n\tFree: 'F',\n\t\n\t// demo version ////\n\tDemo: 'D',\n\t\n\t// trial version (limited time) ////\n\tTrial: 'T',\n\t\n\t// paid application ////\n\tPaid: 'P',\n\t\n\t// local application ////\n\tLocal: 'L',\n\t\n\t// subscription application ////\n\tSubscription: 'S',\n} as const\n\nexport const StatusDescriptions: Record<typeof EnumAppStatus[keyof typeof EnumAppStatus], string> = {\n\t[EnumAppStatus.Free]: 'Free',\n\t[EnumAppStatus.Demo]: 'Demo',\n\t[EnumAppStatus.Trial]: 'Trial',\n\t[EnumAppStatus.Paid]: 'Paid',\n\t[EnumAppStatus.Local]: 'Local',\n\t[EnumAppStatus.Subscription]: 'Subscription',\n}\n\nexport type TypeEnumAppStatus = keyof typeof EnumAppStatus\n\n/**\n * @link https://dev.1c-bitrix.ru/rest_help/general/app_info.php\n */\nexport type TypeApp = {\n\t\n\t/**\n\t * Local application identifier on the portal\n\t */\n\treadonly id: number;\n\t\n\t/**\n\t * application code\n\t */\n\treadonly code: string;\n\t\n\t/**\n\t * installed version of the application\n\t */\n\treadonly version: number;\n\t\n\t/**\n\t * application status\n\t */\n\treadonly status: TypeEnumAppStatus;\n\t\n\t/**\n\t * application installed flag\n\t */\n\treadonly isInstalled: boolean;\n}\n\n/**\n * @link https://dev.1c-bitrix.ru/rest_help/general/app_info.php\n */\nexport type TypePayment = {\n\t/**\n\t * flag indicating whether the paid period or trial period has expired\n\t */\n\treadonly isExpired: boolean;\n\t\n\t/**\n\t * number of days remaining until the end of the paid period or trial period\n\t */\n\treadonly days: number;\n}\n\n/**\n * @link https://dev.1c-bitrix.ru/rest_help/general/app_info.php\n */\nexport type TypeLicense = {\n\t/**\n\t * language code designation\n\t */\n\treadonly languageId: null|string;\n\t/**\n\t * tariff designation with indication of the region as a prefix\n\t */\n\treadonly license: null|string;\n\t\n\t/**\n\t * internal tariff designation without indication of region\n\t */\n\treadonly licenseType: null|string;\n\t\n\t/**\n\t * past meaning of license\n\t */\n\treadonly licensePrevious: null|string;\n\t\n\t/**\n\t * Tariff designation without specifying the region.\n\t */\n\treadonly licenseFamily: null|string;\n\t\n\t/**\n\t * flag indicating whether it is a box (true) or a cloud (false)\n\t */\n\treadonly isSelfHosted: boolean;\n}\n\nexport const TypeSpecificUrl = {\n\tMainSettings: 'MainSettings',\n\tUfList: 'UfList',\n\tUfPage: 'UfPage'\n} as const\n\nexport type TypeB24Form = {\n\t\n\treadonly app_code: string,\n\treadonly app_status: string,\n\t\n\treadonly payment_expired: BoolString,\n\treadonly days: number,\n\t\n\t/**\n\t * B24 tariff plan identifier (if cloud)\n\t */\n\treadonly b24_plan: string,\n\t\n\treadonly c_name: string,\n\treadonly c_last_name: string,\n\t\n\treadonly hostname: string\n}\n\nexport type CurrencyFormat = {\n\tdecimals: number\n\tdecPoint: string\n\tformatString: string\n\tfullName: string\n\tisHideZero: boolean\n\tthousandsSep?: string\n\tthousandsVariant?: 'N'|'D'|'C'|'S'|'B'|'OWN'|string\n}\n\nexport type Currency = {\n\tamount: number\n\tamountCnt: number\n\tisBase: boolean\n\tcurrencyCode: string\n\tdateUpdate: DateTime\n\tdecimals: number\n\tdecPoint: string\n\tformatString: string\n\tfullName: string\n\tlid: string\n\tsort: number\n\tthousandsSep?: string,\n\tlang: Record<string, CurrencyFormat>\n}\n\nexport enum TypeOption {\n\tNotSet = 'notSet',\n\tJsonArray = 'jsonArray',\n\tJsonObject = 'jsonObject',\n\tFloatVal = 'float',\n\tIntegerVal = 'integer',\n\tBoolYN = 'boolYN',\n\tStringVal = 'string',\n}\n","import { LoggerBrowser } from '../logger/browser'\nimport type { TypeB24 } from './b24'\nimport type { ISODate, NumberString } from './common'\n\nexport type TypePullMessage = {\n\tcommand: string,\n\tparams: Record<string, any>,\n\textra: Record<string, any>\n}\n\nexport type TypePullClientMessageBody = {\n\tmodule_id: string,\n\tcommand: string,\n\tparams: any,\n\textra?: {\n\t\trevision_web?: number\n\t\tsender?: {\n\t\t\ttype: SenderType\n\t\t},\n\t\tserver_time_unix? : number,\n\t\tserver_time_ago? : number,\n\t}\n}\n\nexport enum ConnectionType {\n\tUndefined = 'undefined',\n\tWebSocket = 'webSocket',\n\tLongPolling = 'longPolling'\n}\n\nexport type TypeConnector = {\n\tsetLogger(logger: LoggerBrowser): void,\n\tdestroy(): void,\n\tconnect(): void,\n\tdisconnect( code: number, reason: string ): void,\n\tsend(buffer: ArrayBuffer|string): boolean,\n\tconnected: boolean\n\tconnectionPath: string\n}\n\nexport type ConnectorParent = {\n\tsession: TypePullClientSession,\n\tgetConnectionPath(connectionType: ConnectionType): string\n\tgetPublicationPath(): string\n\tsetLastMessageId(lastMessageId: string): void\n\tisProtobufSupported(): boolean\n\tisJsonRpc(): boolean\n}\n\nexport type ConnectorCallbacks = {\n\tonOpen: () => void,\n\tonDisconnect: (response: {\n\t\tcode: number,\n\t\treason: string\n\t}) => void,\n\tonError: (error: Error) => void,\n\tonMessage: (response: string|ArrayBuffer) => void,\n}\n\nexport type ConnectorConfig = {\n\tparent: ConnectorParent,\n\tonOpen?: () => void,\n\tonDisconnect?: (response: {\n\t\tcode: number,\n\t\treason: string\n\t}) => void,\n\tonError?: (error: Error) => void,\n\tonMessage?: (response: string|ArrayBuffer) => void,\n}\n\nexport type StorageManagerParams = {\n\tuserId?: number,\n\tsiteId?: string\n}\n\nexport type TypeStorageManager = {\n\tsetLogger(logger: LoggerBrowser): void\n\tgetLogger(): LoggerBrowser\n\t\n\tset(name: string, value: any): void\n\tget(name: string, defaultValue: any): any\n\tremove(name: string): void\n\tcompareKey(eventKey: string, userKey: string): boolean\n}\n\nexport enum LsKeys {\n\tPullConfig = 'bx-pull-config',\n\tWebsocketBlocked = 'bx-pull-websocket-blocked',\n\tLongPollingBlocked = 'bx-pull-longpolling-blocked',\n\tLoggingEnabled = 'bx-pull-logging-enabled'\n}\n\nexport type SharedConfigCallbacks = {\n\tonWebSocketBlockChanged: (response: {\n\t\tisWebSocketBlocked: boolean,\n\t}) => void,\n}\n\nexport type SharedConfigParams = {\n\tstorage?: TypeStorageManager,\n\tonWebSocketBlockChanged?: (response: {\n\t\tisWebSocketBlocked: boolean,\n\t}) => void,\n}\n\nexport enum PullStatus {\n\tOnline = 'online',\n\tOffline = 'offline',\n\tConnecting = 'connect'\n}\n\nexport enum SenderType {\n\tUnknown = 0,\n\tClient = 1,\n\tBackend = 2\n}\n\nexport enum SubscriptionType {\n\tServer = 'server',\n\tClient = 'client',\n\tOnline = 'online',\n\tStatus = 'status',\n\tRevision = 'revision'\n}\n\nexport type TypeSubscriptionOptions = {\n\t/**\n\t * Subscription type\n\t */\n\ttype?: SubscriptionType,\n\t\n\t/**\n\t * Name of the module\n\t */\n\tmoduleId?: string,\n\t\n\t/**\n\t * Name of the command\n\t */\n\tcommand?: null|string,\n\t\n\t/**\n\t * Function, that will be called for incoming messages\n\t */\n\t// eslint-disable-next-line\n\tcallback: Function,\n}\n\nexport interface UserStatusCallback {\n\t(params: {\n\t\tuserId: number,\n\t\tisOnline: boolean\n\t}): void\n}\n\nexport interface CommandHandlerFunctionV1 {\n\t(\n\t\tdata: Record<string, any>,\n\t\tinfo?: {\n\t\t\ttype: SubscriptionType,\n\t\t\tmoduleId?: string\n\t\t}\n\t): void\n}\n\nexport interface CommandHandlerFunctionV2 {\n\t(\n\t\tparams: Record<string, any>,\n\t\textra: Record<string, any>,\n\t\tcommand: string,\n\t\tinfo?: {\n\t\t\ttype: SubscriptionType,\n\t\t\tmoduleId: string\n\t\t}\n\t): void\n}\n\nexport interface TypeSubscriptionCommandHandler {\n\tgetModuleId: () => string,\n\tgetSubscriptionType?: () => SubscriptionType,\n\tgetMap?: () => Record<string, CommandHandlerFunctionV2>,\n\t[key: string]: CommandHandlerFunctionV2 | undefined\n}\n\nexport type TypePullClientEmitConfig = {\n\ttype: SubscriptionType,\n\tmoduleId?: string,\n\tdata?: Record<string, any>\n}\n\nexport enum CloseReasons {\n\tNORMAL_CLOSURE = 1000,\n\tSERVER_DIE = 1001,\n\tCONFIG_REPLACED = 3000,\n\tCHANNEL_EXPIRED = 3001,\n\tSERVER_RESTARTED = 3002,\n\tCONFIG_EXPIRED = 3003,\n\tMANUAL = 3004,\n\tSTUCK = 3005,\n\tWRONG_CHANNEL_ID = 4010,\n}\n\nexport enum SystemCommands {\n\tCHANNEL_EXPIRE = 'CHANNEL_EXPIRE',\n\tCONFIG_EXPIRE = 'CONFIG_EXPIRE',\n\tSERVER_RESTART = 'SERVER_RESTART'\n}\n\nexport enum ServerMode {\n\tShared = 'shared',\n\tPersonal = 'personal'\n}\n\nexport type RpcError = {\n\tcode: number,\n\tmessage: string\n}\n\nexport const ListRpcError = {\n\tParse: {code: -32700, message: 'Parse error'} as RpcError,\n\tInvalidRequest: {code: -32600, message: 'Invalid Request'} as RpcError,\n\tMethodNotFound: {code: -32601, message: 'Method not found'} as RpcError,\n\tInvalidParams: {code: -32602, message: 'Invalid params'} as RpcError,\n\tInternal: {code: -32603, message: 'Internal error'} as RpcError,\n} as const\n\nexport type JsonRpcRequest = {\n\tmethod: string,\n\tparams: any,\n\tid: number,\n}\n\nexport type RpcCommand = {\n\tjsonrpc: string,\n\tmethod: string,\n\tparams: any,\n\tid: number,\n}\n\nexport type RpcRequest = RpcCommand & {}\n\nexport type RpcCommandResult = {\n\tjsonrpc?: string,\n\tid?: number,\n\t/**\n\t * @fix this TypeRpcResponseAwaiters.resolve(response)\n\t */\n\tresult?: any,\n\terror?: RpcError,\n}\n\nexport enum RpcMethod {\n\tPublish = \"publish\",\n\tGetUsersLastSeen = \"getUsersLastSeen\",\n\tPing = \"ping\",\n\tListChannels = \"listChannels\",\n\tSubscribeStatusChange = \"subscribeStatusChange\",\n\tUnsubscribeStatusChange = \"unsubscribeStatusChange\",\n}\n\nexport type TypeRpcResponseAwaiters = {\n\t/**\n\t * @fix this RpcCommandResult.result\n\t */\n\tresolve: (response: any) => void,\n\treject: (error: string|RpcError) => void,\n\ttimeout: number,\n}\n\nexport type TypeJsonRpcConfig = {\n\tconnector: TypeConnector,\n\thandlers: Record<string, (params: any) => RpcCommandResult>\n}\n\nexport type TypePublicIdDescriptor = {\n\tid?: string,\n\tuser_id?: NumberString,\n\tpublic_id?: string,\n\tsignature?: string,\n\tstart: ISODate,\n\tend: ISODate,\n\ttype?: string\n}\n\nexport type TypeChanel = {\n\tuserId: number,\n\tpublicId: string,\n\tsignature: string,\n\tstart: Date,\n\tend: Date\n}\n\nexport type TypeChannelManagerParams = {\n\tb24: TypeB24,\n\tgetPublicListMethod: string\n}\n\nexport type TypePullClientSession = {\n\tmid: null|string,\n\ttag: null|string,\n\ttime: null|number,\n\thistory: any,\n\tlastMessageIds: string[],\n\tmessageCount: number\n}\n\nexport type TypeSessionEvent = {\n\tmid: string,\n\ttag?: string,\n\ttime?: number,\n\ttext: Record<string, any>|TypePullClientMessageBody\n}\n\nexport type TypePullClientParams = {\n\tb24: TypeB24,\n\tskipCheckRevision?: boolean,\n\trestApplication?: string,\n\tsiteId?: string,\n\t\n\tguestMode?: boolean\n\tguestUserId?: number\n\t\n\tuserId?: number\n\t\n\tserverEnabled?: boolean,\n\tconfigGetMethod?: string,\n\tgetPublicListMethod?: string,\n\tskipStorageInit?: boolean,\n\tconfigTimestamp?: number\n}\n\nexport type TypePullClientConfig = {\n\t/**\n\t * @fix this\n\t */\n\tclientId: null,\n\tapi: {\n\t\trevision_mobile: number,\n\t\trevision_web: number\n\t}\n\tchannels: {\n\t\tprivate?: TypePublicIdDescriptor,\n\t\tshared?: TypePublicIdDescriptor\n\t},\n\tpublicChannels: Record<string, TypePublicIdDescriptor>\n\tserver: {\n\t\ttimeShift: number,\n\t\tconfig_timestamp: number\n\t\tlong_polling: string\n\t\tlong_pooling_secure: string\n\t\tmode: string\n\t\tpublish: string\n\t\tpublish_enabled: boolean,\n\t\tpublish_secure: string\n\t\tserver_enabled: boolean,\n\t\tversion: number\n\t\twebsocket: string\n\t\twebsocket_enabled: boolean,\n\t\twebsocket_secure: string\n\t},\n\tjwt: null|string,\n\texp: number\n}\n\nexport type TypePullClientMessageBatch = {\n\tuserList?: number[],\n\tchannelList?: (string|{\n\t\tpublicId: string,\n\t\tsignature: string,\n\t})[],\n\tbody: TypePullClientMessageBody,\n\texpiry?: number\n}","/**\n * Interface defining the structure and methods of a Result object.\n */\nexport interface IResult\n{\n\t/**\n\t * Indicates whether the operation resulted in success (no errors).\n\t */\n\tisSuccess: boolean;\n\t\n\t/**\n\t * Sets the data associated with the result.\n\t *\n\t * @param data The data to be stored in the result.\n\t * @returns The current Result object for chaining methods.\n\t */\n\tsetData: (data: any) => IResult;\n\t\n\t/**\n\t * Retrieves the data associated with the result.\n\t *\n\t * @returns The data stored in the result, if any.\n\t */\n\tgetData: () => any;\n\t\n\t/**\n\t * Adds an error message or Error object to the result.\n\t *\n\t * @param error The error message or Error object to be added.\n\t * @returns The current Result object for chaining methods.\n\t */\n\taddError: (error: Error|string) => IResult;\n\t\n\t/**\n\t * Adds multiple errors to the result in a single call.\n\t *\n\t * @param errors An array of errors or strings that will be converted to errors.\n\t * @returns The current Result object for chaining methods.\n\t */\n\taddErrors: (errors: (Error|string)[]) => IResult;\n\t\n\t/**\n\t * Retrieves an iterator for the errors collected in the result.\n\t *\n\t * @returns An iterator over the stored Error objects.\n\t */\n\tgetErrors: () => IterableIterator<Error>;\n\t\n\t/**\n\t * Retrieves an array of error messages from the collected errors.\n\t *\n\t * @returns An array of strings representing the error messages.\n\t */\n\tgetErrorMessages: () => string[];\n\t\n\t/**\n\t * Converts the Result object to a string.\n\t *\n\t * @returns {string} Returns a string representation of the result operation\n\t */\n\ttoString: () => string;\n}\n\n/**\n * A class representing an operation result with success/failure status, data, and errors.\n * Similar to \\Bitrix\\Main\\Result from Bitrix Framework.\n * @link https://dev.1c-bitrix.ru/api_d7/bitrix/main/result/index.php\n */\nexport class Result\n\timplements IResult\n{\n\tprivate _errorCollection: Set<Error>;\n\tprotected _data: any;\n\t\n\tconstructor()\n\t{\n\t\tthis._errorCollection = new Set();\n\t\tthis._data = null;\n\t}\n\t\n\t/**\n\t * Getter for the `isSuccess` property.\n\t * Checks if the `_errorCollection` is empty to determine success.\n\t *\n\t * @returns Whether the operation resulted in success (no errors).\n\t */\n\tget isSuccess(): boolean\n\t{\n\t\treturn this._errorCollection.size < 1;\n\t}\n\t\n\t/**\n\t * Sets the data associated with the result.\n\t *\n\t * @param data The data to be stored in the result.\n\t * @returns The current Result object for chaining methods.\n\t */\n\tsetData(data: any): Result\n\t{\n\t\tthis._data = data;\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Retrieves the data associated with the result.\n\t *\n\t * @returns The data stored in the result, if any.\n\t */\n\tgetData(): any\n\t{\n\t\treturn this._data;\n\t}\n\t\n\t/**\n\t * Adds an error message or Error object to the result.\n\t *\n\t * @param error The error message or Error object to be added.\n\t * @returns The current Result object for chaining methods.\n\t */\n\taddError(error: Error|string): Result\n\t{\n\t\tif(error instanceof Error)\n\t\t{\n\t\t\tthis._errorCollection.add(error);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._errorCollection.add(new Error(error.toString()));\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Adds multiple errors to the result in a single call.\n\t *\n\t * @param errors An array of errors or strings that will be converted to errors.\n\t * @returns The current Result object for chaining methods.\n\t */\n\taddErrors(errors: (Error|string)[]): Result\n\t{\n\t\terrors.forEach(error =>\n\t\t{\n\t\t\tif(error instanceof Error)\n\t\t\t{\n\t\t\t\tthis._errorCollection.add(error);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis._errorCollection.add(new Error(error.toString()));\n\t\t\t}\n\t\t})\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Retrieves an iterator for the errors collected in the result.\n\t * @returns An iterator over the stored Error objects.\n\t */\n\tgetErrors(): IterableIterator<Error>\n\t{\n\t\treturn this._errorCollection.values();\n\t}\n\t\n\t/**\n\t * Retrieves an array of error messages from the collected errors.\n\t *\n\t * @returns An array of strings representing the error messages. Each string\n\t * contains the message of a corresponding error object.\n\t */\n\tgetErrorMessages(): string[]\n\t{\n\t\treturn Array.from(this.getErrors())\n\t\t\t.map((error: Error) => error.message);\n\t}\n\t\n\t/**\n\t * Converts the Result object to a string.\n\t *\n\t * @returns {string} Returns a string representation of the result operation\n\t */\n\ttoString(): string\n\t{\n\t\tif(this.isSuccess)\n\t\t{\n\t\t\treturn `Result (success): data: ${JSON.stringify(this._data)}`;\n\t\t}\n\t\t\n\t\treturn `Result (failure): errors: ${this.getErrorMessages().join(\", \")}`;\n\t}\n}","export type AnswerError = {\n\terror: string,\n\terrorDescription: string\n}\n\nexport type AjaxErrorParams = {\n\tstatus: number,\n\tanswerError: AnswerError,\n\tcause?: Error\n}\n\n/**\n * Error requesting RestApi\n */\nexport class AjaxError\n\textends Error\n{\n\toverride cause: null|Error\n\tprivate _status: number\n\tprivate _answerError: AnswerError\n\t\n\tconstructor(params: AjaxErrorParams)\n\t{\n\t\tconst message = `${params.answerError.error}${\n\t\t\t!!params.answerError.errorDescription\n\t\t\t? ': ' + params.answerError.errorDescription\n\t\t\t: ''\n\t\t}`\n\t\t\n\t\tsuper(message)\n\t\tthis.cause = params.cause || null\n\t\tthis.name = this.constructor.name\n\t\t\n\t\tthis._status = params.status\n\t\tthis._answerError = params.answerError\n\t}\n\t\n\tget answerError(): AnswerError\n\t{\n\t\treturn this._answerError\n\t}\n\t\n\tget status(): number\n\t{\n\t\treturn this._status\n\t}\n\t\n\tset status(status: number)\n\t{\n\t\tthis._status = status\n\t}\n\t\n\toverride toString(): string\n\t{\n\t\treturn `${this.answerError.error}${\n\t\t\t!!this.answerError.errorDescription\n\t\t\t? ': ' + this.answerError.errorDescription\n\t\t\t: ''\n\t\t} (${this.status})`\n\t}\n}","import Type from '../../tools/type'\nimport Text from '../../tools/text'\nimport { Result, type IResult } from '../result'\nimport { AjaxError } from './ajaxError'\nimport type { NumberString } from '../../types/common'\nimport type { GetPayload, Payload } from '../../types/payloads'\nimport type { TypeHttp } from '../../types/http'\n\nexport type AjaxQuery = {\n\tmethod: string,\n\tparams: {},\n\tstart: number\n}\n\nexport type AjaxResultParams = {\n\terror?: string|{error: string, error_description: string};\n\terror_description?: string\n\tresult: any;\n\tnext?: NumberString,\n\ttotal?: NumberString,\n}\n\n/**\n * Result of request to Rest Api\n */\nexport class AjaxResult\n\textends Result\n\timplements IResult\n{\n\tprivate readonly _status: number\n\tprivate readonly _query: AjaxQuery\n\tprotected override _data: AjaxResultParams\n\t\n\tconstructor(\n\t\tanswer: AjaxResultParams,\n\t\tquery: AjaxQuery,\n\t\tstatus: number\n\t)\n\t{\n\t\tsuper()\n\t\t\n\t\tthis._data = answer\n\t\tthis._query = structuredClone(query)\n\t\tthis._status = status\n\t\t\n\t\tif(typeof this._data.error !== 'undefined')\n\t\t{\n\t\t\tlet error = (\n\t\t\t\ttypeof this._data.error === 'string'\n\t\t\t\t\t? this._data\n\t\t\t\t\t: this._data.error\n\t\t\t)\n\t\t\t\n\t\t\tthis.addError(new AjaxError({\n\t\t\t\tstatus: this._status,\n\t\t\t\tanswerError: {\n\t\t\t\t\terror: (error.error as string) || '',\n\t\t\t\t\terrorDescription: error.error_description || ''\n\t\t\t\t}\n\t\t\t}))\n\t\t}\n\t}\n\t\n\t// @ts-ignore\n\toverride setData(data: any): Result\n\t{\n\t\tthrow new Error('AjaxResult not support setData()')\n\t}\n\t\n\toverride getData(): Payload<unknown>\n\t{\n\t\treturn this._data as GetPayload<unknown>\n\t}\n\t\n\tisMore():boolean\n\t{\n\t\treturn Type.isNumber(this._data?.next as any)\n\t}\n\t\n\tgetTotal(): number\n\t{\n\t\treturn Text.toInteger(this._data?.total as any)\n\t}\n\t\n\tgetStatus(): number\n\t{\n\t\treturn this._status\n\t}\n\t\n\tgetQuery(): AjaxQuery\n\t{\n\t\treturn this._query\n\t}\n\t\n\tasync getNext(http: TypeHttp): Promise<false|AjaxResult>\n\t{\n\t\tif(\n\t\t\tthis.isMore()\n\t\t\t&& this.isSuccess\n\t\t)\n\t\t{\n\t\t\tthis._query.start = parseInt(this._data?.next as any)\n\t\t\t\n\t\t\treturn http.call(\n\t\t\t\tthis._query.method,\n\t\t\t\tthis._query.params,\n\t\t\t\tthis._query.start\n\t\t\t);\n\t\t}\n\t\t\n\t\treturn Promise.resolve(false)\n\t}\n}","import { LoggerBrowser, LoggerType } from '../../logger/browser'\nimport {\n\tRestrictionManagerParamsBase,\n\ttype TypeRestrictionManagerParams\n} from '../../types/http'\n\n/**\n * @link https://apidocs.bitrix24.com/limits.html\n *\n * It is important to know that the intensity is tracked separately for each Bitrix24 account.\n * In other words, if your application uses REST too intensively on one account and hits the limits, it will not affect the application's operation on another account.\n * This means that users on different accounts can use your solutions with varying intensity, allowing you to make the application logic quite flexible.\n *\n * On the other hand, Bitrix24 only considers the IP address from which the REST request is made.\n * In other words, if your server hosts several applications that all work with the same Bitrix24, the request intensity limit will be shared among all applications.\n * Keep this feature in mind when designing.\n */\nexport default class RestrictionManager\n{\n\t#params: TypeRestrictionManagerParams\n\t#lastDecrement: number\n\t#currentAmount: number\n\t\n\tprivate _logger: null|LoggerBrowser = null\n\t\n\tconstructor()\n\t{\n\t\tthis.#params = RestrictionManagerParamsBase\n\t\t\n\t\tthis.#currentAmount = 0\n\t\tthis.#lastDecrement = 0\n\t}\n\t\n\tsetLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t}\n\t\n\tgetLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(\n\t\t\t\t`NullLogger`\n\t\t\t)\n\t\t\t\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._logger\n\t}\n\t\n\tget params(): TypeRestrictionManagerParams\n\t{\n\t\treturn { ...this.#params }\n\t}\n\t\n\tset params(params: TypeRestrictionManagerParams)\n\t{\n\t\tthis.#params = params\n\t\t\n\t\tthis.getLogger().log(\n\t\t\t`new restriction manager params`, params\n\t\t)\n\t}\n\t\n\tcheck(\n\t\thash: string = ''\n\t): Promise<null>\n\t{\n\t\treturn new Promise(resolve => {\n\t\t\tthis.#decrementStorage()\n\t\t\t\n\t\t\tif(this.#checkStorage())\n\t\t\t{\n\t\t\t\tthis.getLogger().log(`>> no sleep >>> ${hash}`, this.#getStorageStatus())\n\t\t\t\tthis.#incrementStorage()\n\t\t\t\t\n\t\t\t\treturn resolve(null)\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\tconst sleep = (callback: Function) => {\n\t\t\t\t\tthis.getLogger().info(`>> go sleep >>> ${hash}`, this.#getStorageStatus())\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}, this.#params.sleep)\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tconst wait = () => {\n\t\t\t\t\tthis.#decrementStorage()\n\t\t\t\t\tif(this.#checkStorage())\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getLogger().info(`<< stop sleep <<< ${hash}`, this.#getStorageStatus())\n\t\t\t\t\t\tthis.#incrementStorage()\n\t\t\t\t\t\treturn resolve(null)\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tsleep(wait)\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tsleep(wait)\n\t\t\t}\n\t\t});\n\t}\n\t\n\t#getStorageStatus()\n\t{\n\t\treturn `${this.#currentAmount.toFixed(4)} from ${this.#params.amount}`\n\t}\n\t\n\t#decrementStorage(): void\n\t{\n\t\tif(this.#lastDecrement > 0)\n\t\t{\n\t\t\tthis.#currentAmount -= (Date.now() - this.#lastDecrement) * this.#params.speed\n\t\t\t\n\t\t\tif(this.#currentAmount < 0)\n\t\t\t{\n\t\t\t\tthis.#currentAmount = 0\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.#lastDecrement = Date.now()\n\t}\n\t\n\t#incrementStorage(): void\n\t{\n\t\tthis.#currentAmount++\n\t}\n\t\n\t#checkStorage(): boolean\n\t{\n\t\treturn this.#currentAmount < this.#params.amount\n\t}\n}\n","import { type IRequestIdGenerator } from '../../types/http'\nimport Text from '../../tools/text'\n\nconst DEFAULT_REQUEST_ID_HEADER_FIELD_NAME = 'X-Request-ID'\nconst DEFAULT_QUERY_STRING_PARAMETER_NAME = 'bx24_request_id'\nconst DEFAULT_QUERY_STRING_SDK_PARAMETER_NAME = 'bx24_sdk_ver'\n\nexport default class DefaultRequestIdGenerator\n\timplements IRequestIdGenerator\n{\n\tpublic getQueryStringParameterName(): string\n\t{\n\t\treturn DEFAULT_QUERY_STRING_PARAMETER_NAME;\n\t}\n\t\n\tpublic getQueryStringSdkParameterName(): string\n\t{\n\t\treturn DEFAULT_QUERY_STRING_SDK_PARAMETER_NAME;\n\t}\n\t\n\tprivate generate(): string\n\t{\n\t\treturn Text.getUuidRfc4122();\n\t}\n\t\n\tpublic getRequestId(): string\n\t{\n\t\treturn this.generate()\n\t}\n\t\n\tpublic getHeaderFieldName(): string\n\t{\n\t\treturn DEFAULT_REQUEST_ID_HEADER_FIELD_NAME;\n\t}\n}","import { LoggerBrowser, LoggerType } from '../../logger/browser'\nimport type {TypeHttp, TypeRestrictionManagerParams} from '../../types/http'\nimport { default as RestrictionManager } from './restrictionManager'\nimport { default as RequestIdGenerator } from './requestIdGenerator'\nimport { Result } from '../result'\nimport { AjaxError, type AjaxErrorParams } from './ajaxError'\nimport { AjaxResult } from './ajaxResult'\nimport type { AjaxQuery, AjaxResultParams } from './ajaxResult'\nimport type { AuthActions, AuthData, TypeDescriptionError } from '../../types/auth'\nimport type { BatchPayload } from \"../../types/payloads\"\n\nimport axios, { type AxiosInstance, AxiosError } from 'axios'\nimport qs from 'qs'\n\ntype AjaxResponse = {\n\tstatus: number,\n\tpayload: AjaxResultParams\n}\n\nconst BITRIX24_OAUTH_SERVER_URL = 'https://oauth.bitrix.info'\n\n/**\n * Class for working with RestApi requests via http\n *\n * @link https://dev.1c-bitrix.ru/rest_help/\n */\nexport default class Http\n\timplements TypeHttp\n{\n\t#clientAxios: AxiosInstance\n\t#authActions: AuthActions\n\t#restrictionManager: RestrictionManager\n\t#requestIdGenerator: RequestIdGenerator\n\tprivate _logger: null|LoggerBrowser = null\n\t\n\t#logTag: string = ''\n\t\n\tconstructor(\n\t\tbaseURL: string,\n\t\tauthActions: AuthActions,\n\t\toptions?: null|{}\n\t)\n\t{\n\t\t/**\n\t\t * @memo can be added on the server side\n\t\t */\n\t\t/*/\n\t\t\theaders: {\n\t\t\t\t'User-Agent': '__SDK_USER_AGENT__-v-__SDK_VERSION__',\n\t\t\t\t'X-BITRIX24-JS-SDK-VERSION': '__SDK_VERSION__',\n\t\t\t},\n\t\t//*/\n\t\tthis.#clientAxios = axios.create({\n\t\t\tbaseURL: baseURL,\n\t\t\t...(options ?? {})\n\t\t})\n\t\t\n\t\tthis.#authActions = authActions\n\t\tthis.#restrictionManager = new RestrictionManager()\n\t\tthis.#requestIdGenerator = new RequestIdGenerator()\n\t}\n\t\n\tsetLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t\tthis.#restrictionManager.setLogger(this.getLogger())\n\t}\n\t\n\tgetLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(\n\t\t\t\t`NullLogger`\n\t\t\t)\n\t\t\t\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._logger\n\t}\n\t\n\tsetRestrictionManagerParams(params: TypeRestrictionManagerParams): void\n\t{\n\t\tthis.#restrictionManager.params = params\n\t}\n\t\n\tgetRestrictionManagerParams(): TypeRestrictionManagerParams\n\t{\n\t\treturn this.#restrictionManager.params\n\t}\n\t\n\tsetLogTag(logTag: string): void\n\t{\n\t\tthis.#logTag = logTag\n\t}\n\t\n\tclearLogTag(): void\n\t{\n\t\tthis.#logTag = ''\n\t}\n\t\n\tasync batch(\n\t\tcalls: any[]|object,\n\t\tisHaltOnError: boolean = true\n\t): Promise<Result>\n\t{\n\t\tconst isArrayMode = Array.isArray(calls)\n\t\tlet cmd: any = isArrayMode ? [] : {}\n\t\tlet cnt = 0\n\t\t\n\t\tconst processRow = (row: any, index: string|number) => {\n\t\t\tlet method = null\n\t\t\tlet params = null\n\t\t\t\n\t\t\tif(Array.isArray(row))\n\t\t\t{\n\t\t\t\tmethod = row[0]\n\t\t\t\tparams = row[1]\n\t\t\t}\n\t\t\telse if(!!row.method)\n\t\t\t{\n\t\t\t\tmethod = row.method\n\t\t\t\tparams = row.params\n\t\t\t}\n\t\t\t\n\t\t\tif(!!method)\n\t\t\t{\n\t\t\t\tcnt++\n\t\t\t\t\n\t\t\t\tlet data = method + '?' + qs.stringify(params)\n\t\t\t\tif(isArrayMode || Array.isArray(cmd))\n\t\t\t\t{\n\t\t\t\t\tcmd.push(data)\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tcmd[index] = data\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(isArrayMode)\n\t\t{\n\t\t\tcalls.forEach((item, index) => processRow(item, index))\n\t\t}\n\t\telse\n\t\t{\n\t\t\tObject.entries(calls).forEach(([index, item]) => processRow(item, index))\n\t\t}\n\t\t\n\t\tif(cnt < 1)\n\t\t{\n\t\t\treturn Promise.resolve(new Result())\n\t\t}\n\t\t\n\t\treturn this.call(\n\t\t\t'batch',\n\t\t\t{\n\t\t\t\thalt: isHaltOnError ? 1 : 0,\n\t\t\t\tcmd: cmd\n\t\t\t}\n\t\t)\n\t\t.then((response: AjaxResult) => {\n\t\t\t\n\t\t\tconst responseResult = (response.getData() as BatchPayload<unknown>).result\n\t\t\tconst results: any = isArrayMode ? [] : {}\n\t\t\t\n\t\t\tconst processResponse = (row: string, index: string|number) => {\n\t\t\t\t\n\t\t\t\tif(\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\ttypeof responseResult.result[index] !== 'undefined'\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t|| typeof responseResult.result_error[index] !== 'undefined'\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tlet q = row.split('?')\n\t\t\t\t\t\n\t\t\t\t\tlet data = new AjaxResult(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tresult: typeof responseResult.result[index] !== 'undefined'\n\t\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\t\t? responseResult.result[index]\n\t\t\t\t\t\t\t\t: {},\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\terror: responseResult?.result_error[index] || undefined,\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\ttotal: responseResult.result_total[index],\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tnext: responseResult.result_next[index]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: q[0] || '',\n\t\t\t\t\t\t\tparams: qs.parse(q[1] || ''),\n\t\t\t\t\t\t\tstart: 0\n\t\t\t\t\t\t} as AjaxQuery,\n\t\t\t\t\t\tresponse.getStatus(),\n\t\t\t\t\t)\n\t\t\t\t\t\n\t\t\t\t\tif(isArrayMode || Array.isArray(results))\n\t\t\t\t\t{\n\t\t\t\t\t\tresults.push(data)\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tresults[index] = data\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\tif(Array.isArray(cmd))\n\t\t\t{\n\t\t\t\tcmd.forEach((item, index) => processResponse(item, index))\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tObject.entries(cmd).forEach(([index, item]) => processResponse(\n\t\t\t\t\titem as string,\n\t\t\t\t\tindex\n\t\t\t\t))\n\t\t\t}\n\t\t\t\n\t\t\tlet dataResult\n\t\t\t\n\t\t\tconst initError = (result: AjaxResult): AjaxError => {\n\t\t\t\treturn new AjaxError({\n\t\t\t\t\tstatus: 0,\n\t\t\t\t\tanswerError: {\n\t\t\t\t\t\terror: result.getErrorMessages().join('; '),\n\t\t\t\t\t\terrorDescription: `batch ${result.getQuery().method}: ${qs.stringify(result.getQuery().params, {encode: false})}`,\n\t\t\t\t\t},\n\t\t\t\t\tcause: result.getErrors().next().value\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst result = new Result()\n\t\t\t\n\t\t\tif(isArrayMode || Array.isArray(results))\n\t\t\t{\n\t\t\t\tdataResult = []\n\n\t\t\t\tfor(let data of (results as AjaxResult[]))\n\t\t\t\t{\n\t\t\t\t\tif (data.getStatus() !== 200 || !data.isSuccess)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst error = initError(data)\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (!isHaltOnError && !data.isSuccess)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult.addError(error)\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn Promise.reject(error)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tdataResult.push(data.getData().result)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdataResult = {}\n\n\t\t\t\tfor(let key of Object.keys(results))\n\t\t\t\t{\n\t\t\t\t\tlet data: AjaxResult = results[key]\n\n\t\t\t\t\tif (data.getStatus() !== 200 || !data.isSuccess)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst error = initError(data)\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (!isHaltOnError && !data.isSuccess)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult.addError(error)\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn Promise.reject(error)\n\t\t\t\t\t}\n\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tdataResult[key] = data.getData().result\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tresult.setData(dataResult)\n\t\t\t\n\t\t\treturn Promise.resolve(result)\n\t\t})\n\t}\n\t\n\t/**\n\t * Calling the RestApi function\n\t *\n\t * If we get a problem with authorization, we make 1 attempt to update the access token\n\t *\n\t * @param method\n\t * @param params\n\t * @param start\n\t */\n\tasync call(\n\t\tmethod: string,\n\t\tparams: {},\n\t\tstart: number = 0\n\t): Promise<AjaxResult>\n\t{\n\t\tlet authData = this.#authActions.getAuthData()\n\t\tif(authData === false)\n\t\t{\n\t\t\tauthData = await this.#authActions.refreshAuth()\n\t\t}\n\t\t\n\t\tawait this.#restrictionManager.check()\n\t\t\n\t\treturn this.#clientAxios.post(\n\t\t\tthis.#prepareMethod(method),\n\t\t\tthis.#prepareParams(authData, params, start),\n\t\t)\n\t\t.then(\n\t\t\t(response: { data: AjaxResultParams; status: any }): Promise<AjaxResponse> => {\n\t\t\t\tconst payload = response.data as AjaxResultParams\n\t\t\t\treturn Promise.resolve({\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t\tpayload: payload\n\t\t\t\t} as AjaxResponse)\n\t\t\t},\n\t\t\tasync (problem: AxiosError) =>\n\t\t\t{\n\t\t\t\tlet answerError = {\n\t\t\t\t\terror: problem?.code || 0,\n\t\t\t\t\terrorDescription: problem?.message || ''\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(\n\t\t\t\t\tproblem instanceof AxiosError\n\t\t\t\t\t&& problem.response\n\t\t\t\t\t&& problem.response.data\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tconst response = problem.response.data as {\n\t\t\t\t\t\terror: string\n\t\t\t\t\t\terror_description: string\n\t\t\t\t\t} as TypeDescriptionError\n\t\t\t\t\t\n\t\t\t\t\tanswerError = {\n\t\t\t\t\t\terror: response.error,\n\t\t\t\t\t\terrorDescription: response.error_description\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst problemError: AjaxError = new AjaxError({\n\t\t\t\t\tstatus: problem.response?.status || 0,\n\t\t\t\t\tanswerError,\n\t\t\t\t\tcause: problem\n\t\t\t\t} as AjaxErrorParams)\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Is response status === 401 -> refresh Auth\n\t\t\t\t */\n\t\t\t\tif(problemError.status === 401)\n\t\t\t\t{\n\t\t\t\t\tif(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t'expired_token',\n\t\t\t\t\t\t\t'invalid_token'\n\t\t\t\t\t\t].includes(problemError.answerError.error)\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getLogger().info(`refreshAuth >> ${problemError.answerError.error} >>>`)\n\t\t\t\t\t\t\n\t\t\t\t\t\tauthData = await this.#authActions.refreshAuth()\n\t\t\t\t\t\tawait this.#restrictionManager.check()\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn this.#clientAxios.post(\n\t\t\t\t\t\t\tthis.#prepareMethod(method),\n\t\t\t\t\t\t\tthis.#prepareParams(authData, params, start),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\tasync(response: { data: AjaxResultParams; status: any }): Promise<AjaxResponse> =>\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst payload = response.data as AjaxResultParams\n\t\t\t\t\t\t\t\treturn Promise.resolve({\n\t\t\t\t\t\t\t\t\tstatus: response.status,\n\t\t\t\t\t\t\t\t\tpayload: payload\n\t\t\t\t\t\t\t\t} as AjaxResponse)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tasync (problem: AxiosError) =>\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet answerError = {\n\t\t\t\t\t\t\t\t\terror: problem?.code || 0,\n\t\t\t\t\t\t\t\t\terrorDescription: problem?.message || ''\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\t\tproblem instanceof AxiosError\n\t\t\t\t\t\t\t\t\t&& problem.response\n\t\t\t\t\t\t\t\t\t&& problem.response.data\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst response = problem.response.data as {\n\t\t\t\t\t\t\t\t\t\terror: string\n\t\t\t\t\t\t\t\t\t\terror_description: string\n\t\t\t\t\t\t\t\t\t} as TypeDescriptionError\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tanswerError = {\n\t\t\t\t\t\t\t\t\t\terror: response.error,\n\t\t\t\t\t\t\t\t\t\terrorDescription: response.error_description\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tconst problemError: AjaxError = new AjaxError({\n\t\t\t\t\t\t\t\t\tstatus: problem.response?.status || 0,\n\t\t\t\t\t\t\t\t\tanswerError,\n\t\t\t\t\t\t\t\t\tcause: problem\n\t\t\t\t\t\t\t\t} as AjaxErrorParams)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn Promise.reject(problemError)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn Promise.reject(problemError)\n\t\t\t}\n\n\t\t)\n\t\t.then((response: AjaxResponse): Promise<AjaxResult> => {\n\t\t\tconst result = new AjaxResult(\n\t\t\t\tresponse.payload,\n\t\t\t\t{\n\t\t\t\t\tmethod,\n\t\t\t\t\tparams,\n\t\t\t\t\tstart\n\t\t\t\t} as AjaxQuery,\n\t\t\t\tresponse.status,\n\t\t\t)\n\t\t\t\n\t\t\treturn Promise.resolve(result)\n\t\t})\n\t}\n\t\n\t/**\n\t * Processes function parameters and adds authorization\n\t *\n\t * @param authData\n\t * @param params\n\t * @param start\n\t *\n\t * @private\n\t */\n\t#prepareParams(\n\t\tauthData: AuthData,\n\t\tparams: any,\n\t\tstart: number = 0\n\t): object\n\t{\n\t\tlet result = Object.assign({}, params)\n\t\t\n\t\tif(this.#logTag.length > 0)\n\t\t{\n\t\t\tresult.logTag = this.#logTag\n\t\t}\n\t\t\n\t\tresult[this.#requestIdGenerator.getQueryStringParameterName()] = this.#requestIdGenerator.getRequestId()\n\t\tresult[this.#requestIdGenerator.getQueryStringSdkParameterName()] = '__SDK_VERSION__'\n\t\t\n\t\tif(!!result.data)\n\t\t{\n\t\t\tif(!!result.data.start)\n\t\t\t{\n\t\t\t\tdelete result.data.start\n\t\t\t}\n\t\t}\n\t\t\n\t\t/**\n\t\t * @memo we skip auth for hook\n\t\t */\n\t\tif(authData.refresh_token !== 'hook')\n\t\t{\n\t\t\tresult.auth = authData.access_token\n\t\t}\n\t\t\n\t\tresult.start = start\n\t\t\n\t\treturn result\n\t}\n\t\n\t/**\n\t * Makes the function name safe and adds json format\n\t *\n\t * @param method\n\t * @private\n\t */\n\t#prepareMethod(method: string): string\n\t{\n\t\treturn `${encodeURIComponent(method)}.json`\n\t}\n}","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport { Result } from './result'\nimport { AjaxResult } from './http/ajaxResult'\nimport Type from './../tools/type'\nimport type { TypeB24 } from '../types/b24'\nimport type { TypeHttp } from '../types/http'\nimport type { ListPayload } from '../types/payloads'\nimport type { AuthActions } from '../types/auth'\n\nexport abstract class AbstractB24\n\timplements TypeB24\n{\n\tstatic readonly batchSize = 50\n\t\n\tprotected _isInit: boolean = false\n\tprotected _http: null|TypeHttp = null\n\tprotected _logger: null|LoggerBrowser = null\n\t\n\t// region Init ////\n\tprotected constructor()\n\t{\n\t\tthis._isInit = false\n\t}\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\tget isInit(): boolean\n\t{\n\t\treturn this._isInit\n\t}\n\t\n\tasync init(): Promise<void>\n\t{\n\t\tthis._isInit = true\n\t\treturn;\n\t}\n\t\n\tdestroy(): void\n\t{}\n\t\n\tpublic setLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t\tthis.getHttpClient().setLogger(this.getLogger())\n\t}\n\t\n\tpublic getLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(\n\t\t\t\t`NullLogger`\n\t\t\t)\n\t\t\t\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._logger\n\t}\n\t// endregion ////\n\t\n\t// region Core ////\n\tabstract get auth(): AuthActions\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\tabstract getTargetOrigin(): string\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\tabstract getTargetOriginWithPath(): string\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\tcallMethod(\n\t\tmethod: string,\n\t\tparams?: object,\n\t\tstart?: number\n\t): Promise<AjaxResult>\n\t{\n\t\treturn this.getHttpClient().call(\n\t\t\tmethod,\n\t\t\tparams || {},\n\t\t\tstart || 0\n\t\t)\n\t}\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\tasync callListMethod(\n\t\tmethod: string,\n\t\tparams: object = {},\n\t\tprogress: null|((progress: number) => void) = null,\n\t\tcustomKeyForResult: null|string = null\n\t): Promise<Result>\n\t{\n\t\tconst result = new Result()\n\t\t\n\t\tif(\n\t\t\tType.isFunction(progress)\n\t\t\t&& null !== progress\n\t\t)\n\t\t{\n\t\t\tprogress(0)\n\t\t}\n\t\t\n\t\treturn this.callMethod(\n\t\t\tmethod,\n\t\t\tparams,\n\t\t\t0\n\t\t)\n\t\t.then(async(response) =>\n\t\t{\n\t\t\tlet list: any[] = []\n\t\t\t\n\t\t\tlet resultData\n\t\t\tif(null === customKeyForResult)\n\t\t\t{\n\t\t\t\tresultData = (response.getData() as ListPayload<any>).result as []\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresultData = (response.getData() as ListPayload<any>).result[customKeyForResult] as []\n\t\t\t}\n\t\t\t\n\t\t\tlist = [...list, ...resultData]\n\t\t\tif(response.isMore())\n\t\t\t{\n\t\t\t\tlet responseLoop: false|AjaxResult = response\n\t\t\t\twhile(true)\n\t\t\t\t{\n\t\t\t\t\tresponseLoop = await responseLoop.getNext(this.getHttpClient())\n\t\t\t\t\t\n\t\t\t\t\tif(responseLoop === false)\n\t\t\t\t\t{\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet resultData = undefined\n\t\t\t\t\tif(null === customKeyForResult)\n\t\t\t\t\t{\n\t\t\t\t\t\tresultData = (responseLoop.getData() as ListPayload<any>).result as []\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tresultData = (responseLoop.getData() as ListPayload<any>).result[customKeyForResult] as []\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlist = [...list, ...resultData]\n\t\t\t\t\t\n\t\t\t\t\tif(progress)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst total = responseLoop.getTotal()\n\t\t\t\t\t\tprogress(total > 0 ? Math.round(100 * list.length / total) : 100)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tresult.setData(list)\n\t\t\tif(progress)\n\t\t\t{\n\t\t\t\tprogress(100)\n\t\t\t}\n\t\t\t\n\t\t\treturn result;\n\t\t})\n\t}\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\tasync *fetchListMethod(\n\t\tmethod: string,\n\t\tparams: any = {},\n\t\tidKey: string = 'ID',\n\t\tcustomKeyForResult: null|string = null\n\t): AsyncGenerator<any[]>\n\t{\n\t\tparams.order = params.order || {}\n\t\tparams.filter = params.filter || {}\n\t\tparams.start = -1\n\t\t\n\t\tconst moreIdKey = `>${idKey}`\n\t\t\n\t\tparams.order[idKey] = 'ASC'\n\t\tparams.filter[moreIdKey] = 0\n\t\t\n\t\tdo\n\t\t{\n\t\t\tconst result = await this.callMethod(method, params, params.start)\n\t\t\tlet data = undefined\n\t\t\tif(\n\t\t\t\tType.isNull(customKeyForResult)\n\t\t\t\t&& null !== customKeyForResult\n\t\t\t)\n\t\t\t{\n\t\t\t\tdata = result.getData().result[customKeyForResult] as []\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdata = result.getData().result as []\n\t\t\t}\n\t\t\t\n\t\t\tif(data.length === 0)\n\t\t\t{\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t\n\t\t\tyield data\n\t\t\t\n\t\t\tif(data.length < AbstractB24.batchSize)\n\t\t\t{\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t\n\t\t\tconst value = data.at( -1 )\n\t\t\tif(\n\t\t\t\tvalue\n\t\t\t\t&& idKey in value\n\t\t\t)\n\t\t\t{\n\t\t\t\tparams.filter[ moreIdKey ] = value[ idKey ]\n\t\t\t}\n\t\t\t\n\t\t} while(true)\n\t}\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\tasync callBatch(\n\t\tcalls: Array<any>|object,\n\t\tisHaltOnError: boolean = true\n\t): Promise<Result>\n\t{\n\t\treturn this.getHttpClient().batch(\n\t\t\tcalls,\n\t\t\tisHaltOnError\n\t\t)\n\t}\n\t\n\tchunkArray<T>(array: T[], chunkSize: number = 50): T[][]\n\t{\n\t\tconst result: T[][] = []\n\t\tfor(let i = 0; i < array.length; i += chunkSize)\n\t\t{\n\t\t\tconst chunk = array.slice(i, i + chunkSize)\n\t\t\tresult.push(chunk)\n\t\t}\n\t\treturn result\n\t}\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\tasync callBatchByChunk(\n\t\tcalls: Array<any>,\n\t\tisHaltOnError: boolean = true\n\t): Promise<Result>\n\t{\n\t\tconst result = new Result()\n\t\t\n\t\tconst data = []\n\t\tconst chunks = this.chunkArray(calls, AbstractB24.batchSize)\n\t\t\n\t\tfor(const chunkRequest of chunks)\n\t\t{\n\t\t\tconst response = await this.callBatch(chunkRequest, isHaltOnError)\n\t\t\tdata.push(...response.getData())\n\t\t}\n\n\t\treturn result.setData(data);\n\t}\n\t// endregion ////\n\t\n\t// region Tools ////\n\t/**\n\t * @inheritDoc\n\t */\n\tgetHttpClient(): TypeHttp\n\t{\n\t\tif(\n\t\t\t!this.isInit\n\t\t\t|| null === this._http\n\t\t)\n\t\t{\n\t\t\tthrow new Error(`Http not init`)\n\t\t}\n\t\t\n\t\treturn this._http\n\t}\n\t\n\t/**\n\t * Returns settings for http connection\n\t * @protected\n\t */\n\tprotected _getHttpOptions(): null|object\n\t{\n\t\treturn null\n\t}\n\n\t/**\n\t * Generates an object not initialized error\n\t * @protected\n\t */\n\tprotected _ensureInitialized(): void\n\t{\n\t\tif(!this._isInit)\n\t\t{\n\t\t\tthrow new Error('B24 not initialized')\n\t\t}\n\t}\n\t// endregion ////\n}","/**\n * List of supported languages in B24.Cloud\n *\n * It is worth remembering that there will be 1-2 languages for the B24.Box\n */\nexport enum B24LangList\n{\n\ten = 'en',\n\tde = 'de',\n\tla = 'la',\n\t\n\tbr = 'br',\n\tfr = 'fr',\n\tit = 'it',\n\t\n\tpl = 'pl',\n\tru = 'ru',\n\tua = 'ua',\n\t\n\ttr = 'tr',\n\tsc = 'sc',\n\ttc = 'tc',\n\t\n\tja = 'ja',\n\tvn = 'vn',\n\tid = 'id',\n\t\n\tms = 'ms',\n\tth = 'th',\n\tar = 'ar',\n}","/**\n * Returns scroll info\n */\nconst useScrollSize = (): {scrollWidth: number, scrollHeight: number} => {\n\treturn {\n\t\tscrollWidth: Math.max(\n\t\t\tdocument.documentElement.scrollWidth,\n\t\t\tdocument.documentElement.offsetWidth\n\t\t),\n\t\tscrollHeight: Math.max(\n\t\t\tdocument.documentElement.scrollHeight,\n\t\t\tdocument.documentElement.offsetHeight\n\t\t)\n\t};\n}\n\nexport default useScrollSize","import Type from '../type'\n\nexport default class FormatterNumbers\n{\n\tprivate static isInternalConstructing: boolean = false\n\tprivate static instance: FormatterNumbers|null = null\n\tprivate _defLocale: null|string = null\n\tprivate constructor()\n\t{\n\t\tif(!FormatterNumbers.isInternalConstructing)\n\t\t{\n\t\t\tthrow new TypeError('FormatterNumber is not constructable')\n\t\t}\n\t\tFormatterNumbers.isInternalConstructing = false\n\t}\n\t\n\t/**\n\t * @return FormatterNumbers\n\t */\n\tstatic getInstance(): FormatterNumbers\n\t{\n\t\tif(!FormatterNumbers.instance)\n\t\t{\n\t\t\tFormatterNumbers.isInternalConstructing = true\n\t\t\tFormatterNumbers.instance = new FormatterNumbers()\n\t\t}\n\t\treturn FormatterNumbers.instance\n\t}\n\t\n\tsetDefLocale(locale: string)\n\t{\n\t\tthis._defLocale = locale\n\t}\n\t\n\tformat(\n\t\tvalue: number,\n\t\tlocale?: string\n\t): string\n\t{\n\t\tlet formatter\n\t\tif(\n\t\t\ttypeof locale === 'undefined'\n\t\t\t|| !Type.isStringFilled(locale)\n\t\t)\n\t\t{\n\t\t\tlocale = Type.isStringFilled(this._defLocale)\n\t\t\t\t? this._defLocale || 'en'\n\t\t\t\t: navigator?.language\n\t\t}\n\t\t\n\t\tif(Number.isInteger(value))\n\t\t{\n\t\t\tformatter = new Intl.NumberFormat(\n\t\t\t\tlocale,\n\t\t\t\t{\n\t\t\t\t\tminimumFractionDigits: 0,\n\t\t\t\t\tmaximumFractionDigits: 0\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t\telse\n\t\t{\n\t\t\tformatter = new Intl.NumberFormat(\n\t\t\t\tlocale,\n\t\t\t\t{\n\t\t\t\t\tminimumFractionDigits: 2,\n\t\t\t\t\tmaximumFractionDigits: 2\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t\t\n\t\tlet result = formatter.format(value)\n\t\tif(locale.includes('ru'))\n\t\t{\n\t\t\tresult = result.replace(',', '.')\n\t\t}\n\t\t\n\t\treturn result\n\t}\n}","export class IbanSpecification\n{\n\t/**\n\t * the code of the country\n\t */\n\treadonly countryCode: string;\n\t\n\t/**\n\t * the length of the IBAN\n\t */\n\treadonly length: number;\n\t\n\t/**\n\t * the structure of the underlying BBAN (for validation and formatting)\n\t */\n\treadonly structure: string;\n\t\n\t/**\n\t * an example valid IBAN\n\t */\n\treadonly example: string;\n\t\n\tprivate _cachedRegex: null|RegExp = null;\n\t\n\tconstructor(\n\t\tcountryCode: string,\n\t\tlength: number,\n\t\tstructure: string,\n\t\texample: string\n\t)\n\t{\n\t\tthis.countryCode = countryCode;\n\t\tthis.length = length;\n\t\tthis.structure = structure;\n\t\tthis.example = example;\n\t}\n\t\n\t/**\n\t * Check if the passed iban is valid according to this specification.\n\t *\n\t * @param {String} iban the iban to validate\n\t * @returns {boolean} true if valid, false otherwise\n\t */\n\tisValid(iban: string): boolean\n\t{\n\t\treturn this.length === iban.length\n\t\t\t&& this.countryCode === iban.slice(0,2)\n\t\t\t&& this._regex().test(iban.slice(4))\n\t\t\t&& this._iso7064Mod9710(this._iso13616Prepare(iban)) == 1\n\t}\n\t\n\t/**\n\t * Convert the passed IBAN to a country-specific BBAN.\n\t *\n\t * @param iban the IBAN to convert\n\t * @param separator the separator to use between BBAN blocks\n\t * @returns {string} the BBAN\n\t */\n\ttoBBAN(\n\t\tiban: string,\n\t\tseparator: string\n\t): string\n\t{\n\t\treturn (this._regex().exec((iban.slice(4) || '')) || []).slice(1).join(separator)\n\t}\n\t\n\t/**\n\t * Convert the passed BBAN to an IBAN for this country specification.\n\t * Please note that <i>\"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account\"</i>.\n\t * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits\n\t *\n\t * @param bban the BBAN to convert to IBAN\n\t * @returns {string} the IBAN\n\t */\n\tfromBBAN(\n\t\tbban: string\n\t): string\n\t{\n\t\tif(!this.isValidBBAN(bban))\n\t\t{\n\t\t\tthrow new Error('Invalid BBAN')\n\t\t}\n\t\t\n\t\tconst remainder = this._iso7064Mod9710(\n\t\t\tthis._iso13616Prepare(\n\t\t\t\tthis.countryCode + '00' + bban\n\t\t\t)\n\t\t)\n\t\t\n\t\tconst checkDigit = ('0' + (98 - remainder)).slice(-2)\n\t\t\n\t\treturn this.countryCode + checkDigit + bban;\n\t};\n\t\n\t/**\n\t * Check of the passed BBAN is valid.\n\t * This function only checks the format of the BBAN (length and matching the letetr/number specs) but does not\n\t * verify the check digit.\n\t *\n\t * @param bban the BBAN to validate\n\t * @returns {boolean} true if the passed bban is a valid BBAN according to this specification, false otherwise\n\t */\n\tisValidBBAN(\n\t\tbban: string\n\t): boolean\n\t{\n\t\treturn this.length - 4 === bban.length\n\t\t\t&& this._regex().test(bban)\n\t}\n\t\n\t/**\n\t * Lazy-loaded regex (parse the structure and construct the regular expression the first time we need it for validation)\n\t */\n\tprivate _regex(): RegExp\n\t{\n\t\tif(null === this._cachedRegex)\n\t\t{\n\t\t\tthis._cachedRegex = this._parseStructure(this.structure)\n\t\t}\n\t\t\n\t\treturn this._cachedRegex\n\t}\n\t\n\t/**\n\t * Parse the BBAN structure used to configure each IBAN Specification and returns a matching regular expression.\n\t * A structure is composed of blocks of 3 characters (one letter and 2 digits). Each block represents\n\t * a logical group in the typical representation of the BBAN. For each group, the letter indicates which characters\n\t * are allowed in this group and the following 2-digits number tells the length of the group.\n\t *\n\t * @param {string} structure the structure to parse\n\t * @returns {RegExp}\n\t */\n\tprivate _parseStructure(\n\t\tstructure: string\n\t): RegExp\n\t{\n\t\t// split in blocks of 3 chars\n\t\tconst regex = (structure.match(/(.{3})/g) || [])\n\t\t\t.map((block: string): string => {\n\t\t\t\t\n\t\t\t\t// parse each structure block (1-char + 2-digits)\n\t\t\t\tlet format\n\t\t\t\tconst pattern = block.slice(0, 1)\n\t\t\t\tconst repeats = Number.parseInt(block.slice(1), 10)\n\t\t\t\t\n\t\t\t\tswitch(pattern)\n\t\t\t\t{\n\t\t\t\t\tcase \"A\": format = \"0-9A-Za-z\"; break\n\t\t\t\t\tcase \"B\": format = \"0-9A-Z\"; break\n\t\t\t\t\tcase \"C\": format = \"A-Za-z\"; break\n\t\t\t\t\tcase \"F\": format = \"0-9\"; break\n\t\t\t\t\tcase \"L\": format = \"a-z\"; break\n\t\t\t\t\tcase \"U\": format = \"A-Z\"; break\n\t\t\t\t\tcase \"W\": format = \"0-9a-z\"; break\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn '([' + format + ']{' + repeats + '})'\n\t\t\t})\n\t\t\n\t\treturn new RegExp('^' + regex.join('') + '$')\n\t}\n\t\n\t/**\n\t * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to\n\t * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.\n\t *\n\t * @param {string} iban the IBAN\n\t * @returns {string} the prepared IBAN\n\t */\n\tprivate _iso13616Prepare(\n\t\tiban: string\n\t): string\n\t{\n\t\t// eslint-disable-next-line\n\t\tconst A = 'A'.charCodeAt(0)\n\t\t// eslint-disable-next-line\n\t\tconst Z = 'Z'.charCodeAt(0)\n\t\t\n\t\tiban = iban.toUpperCase()\n\t\t// eslint-disable-next-line\n\t\tiban = iban.substring(4) + iban.substring(0,4)\n\t\t// eslint-disable-next-line\n\t\treturn iban.split('').map((n: string): string => {\n\t\t\t// eslint-disable-next-line\n\t\t\tconst code = n.charCodeAt(0)\n\t\t\tif(code >= A && code <= Z)\n\t\t\t{\n\t\t\t\t// A = 10, B = 11, ... Z = 35\n\t\t\t\treturn (code - A + 10).toString()\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn n\n\t\t\t}\n\t\t}).join('')\n\t}\n\t\n\t/**\n\t * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.\n\t *\n\t * @param iban\n\t * @returns {number}\n\t */\n\tprivate _iso7064Mod9710(\n\t\tiban: string\n\t): number\n\t{\n\t\tlet remainder = iban\n\t\tlet block\n\t\t\n\t\twhile(remainder.length > 2)\n\t\t{\n\t\t\tblock = remainder.slice(0, 9)\n\t\t\tremainder = Number.parseInt(block, 10) % 97 + remainder.slice(block.length)\n\t\t}\n\t\t\n\t\treturn Number.parseInt(remainder, 10) % 97\n\t}\n}\n\nexport class FormatterIban\n{\n\tprivate static isInternalConstructing: boolean = false\n\tprivate static instance: FormatterIban | null = null\n\t\n\tprivate _countries: Map<string, IbanSpecification>\n\t\n\t// region Init ////\n\tprivate constructor()\n\t{\n\t\tif(!FormatterIban.isInternalConstructing)\n\t\t{\n\t\t\tthrow new TypeError('FormatterIban is not constructable')\n\t\t}\n\t\tFormatterIban.isInternalConstructing = false\n\t\t\n\t\tthis._countries = new Map()\n\t}\n\t\n\t/**\n\t * @return FormatterIban\n\t */\n\tstatic getInstance(): FormatterIban\n\t{\n\t\tif (!FormatterIban.instance)\n\t\t{\n\t\t\tFormatterIban.isInternalConstructing = true;\n\t\t\tFormatterIban.instance = new FormatterIban();\n\t\t}\n\t\t\n\t\treturn FormatterIban.instance;\n\t}\n\t\n\taddSpecification(IBAN: IbanSpecification): void\n\t{\n\t\tthis._countries.set(\n\t\t\tIBAN.countryCode,\n\t\t\tIBAN\n\t\t)\n\t}\n\t// endregion ////\n\t\n\t// region IBAN ////\n\t/**\n\t * Check if an IBAN is valid.\n\t *\n\t * @param {String} iban the IBAN to validate.\n\t * @returns {boolean} true if the passed IBAN is valid, false otherwise\n\t */\n\tisValid(\n\t\tiban: string\n\t): boolean\n\t{\n\t\tif(!this._isString(iban))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tiban = this.electronicFormat(iban)\n\t\tconst countryCode = iban.slice(0, 2)\n\t\t\n\t\tif(!this._countries.has(countryCode))\n\t\t{\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\t\t\n\t\tconst countryStructure = this._countries.get(countryCode)\n\t\t\n\t\treturn !!countryStructure\n\t\t\t&& countryStructure.isValid(iban)\n\t}\n\t\n\tprintFormat(\n\t\tiban: string,\n\t\tseparator?: string\n\t): string\n\t{\n\t\tif(typeof separator == 'undefined')\n\t\t{\n\t\t\tseparator = ' ';\n\t\t}\n\t\t\n\t\tconst EVERY_FOUR_CHARS =/(.{4})(?!$)/g\n\t\t\n\t\treturn this.electronicFormat(iban)\n\t\t\t.replace(EVERY_FOUR_CHARS, \"$1\" + separator)\n\t}\n\t\n\telectronicFormat(iban: string): string\n\t{\n\t\t// eslint-disable-next-line\n\t\tconst NON_ALPHANUM = /[^a-zA-Z0-9]/g\n\t\t\n\t\treturn iban.replace(NON_ALPHANUM, '')\n\t\t\t.toUpperCase()\n\t}\n\t// endregion ////\n\t\n\t// region BBAN ////\n\t/**\n\t * Convert an IBAN to a BBAN.\n\t *\n\t * @param iban\n\t * @param {String} [separator] the separator to use between the blocks of the BBAN, defaults to ' '\n\t * @returns {string|*}\n\t */\n\ttoBBAN(\n\t\tiban: string,\n\t\tseparator?: string\n\t): string\n\t{\n\t\tif(typeof separator == 'undefined')\n\t\t{\n\t\t\tseparator = ' '\n\t\t}\n\t\t\n\t\tiban = this.electronicFormat(iban)\n\t\t\n\t\tconst countryCode = iban.slice(0, 2)\n\t\tif(!this._countries.has(countryCode))\n\t\t{\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\n\t\tconst countryStructure = this._countries.get(countryCode)\n\t\t\n\t\tif(!countryStructure)\n\t\t{\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\t\t\n\t\treturn countryStructure.toBBAN(\n\t\t\tiban,\n\t\t\tseparator\n\t\t)\n\t}\n\t\n\t/**\n\t * Convert the passed BBAN to an IBAN for this country specification.\n\t * Please note that <i>\"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account\"</i>.\n\t * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits\n\t *\n\t * @param countryCode the country of the BBAN\n\t * @param bban the BBAN to convert to IBAN\n\t * @returns {string} the IBAN\n\t */\n\tfromBBAN(\n\t\tcountryCode: string,\n\t\tbban: string\n\t): string\n\t{\n\t\tif(!this._countries.has(countryCode))\n\t\t{\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\t\t\n\t\tconst countryStructure = this._countries.get(countryCode)\n\t\t\n\t\tif(!countryStructure)\n\t\t{\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\t\t\n\t\treturn countryStructure.fromBBAN(\n\t\t\tthis.electronicFormat(bban)\n\t\t)\n\t}\n\t\n\t/**\n\t * Check the validity of the passed BBAN.\n\t *\n\t * @param countryCode the country of the BBAN\n\t * @param bban the BBAN to check the validity of\n\t */\n\tisValidBBAN(\n\t\tcountryCode: string,\n\t\tbban: string\n\t): boolean\n\t{\n\t\tif(!this._isString(bban))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tif(!this._countries.has(countryCode))\n\t\t{\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\t\t\n\t\tconst countryStructure = this._countries.get(countryCode)\n\t\t\n\t\treturn !!countryStructure\n\t\t\t&& countryStructure.isValidBBAN(\n\t\t\t\tthis.electronicFormat(bban)\n\t\t\t)\n\t}\n\t// endregion ////\n\t\n\t// region Tools ////\n\tprivate _isString(value: any): boolean\n\t{\n\t\treturn (\n\t\t\ttypeof value == 'string'\n\t\t\t|| value instanceof String\n\t\t);\n\t}\n\t// endregion ////\n}","import FormatterNumbers from './formatters/numbers'\nimport { IbanSpecification, FormatterIban } from './formatters/iban'\n\nexport const useFormatter = () => {\n\tconst formatterNumber = FormatterNumbers.getInstance()\n\t\n\t// region Iban ////\n\tconst formatterIban = FormatterIban.getInstance()\n\n\t// region addSpecification ////\n\tformatterIban.addSpecification(new IbanSpecification(\"AD\", 24, \"F04F04A12\", \"AD1200012030200359100100\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"AE\", 23, \"F03F16\", \"AE070331234567890123456\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"AL\", 28, \"F08A16\", \"AL47212110090000000235698741\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"AT\", 20, \"F05F11\", \"AT611904300234573201\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"AZ\", 28, \"U04A20\", \"AZ21NABZ00000000137010001944\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"BA\", 20, \"F03F03F08F02\", \"BA391290079401028494\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"BE\", 16, \"F03F07F02\", \"BE68539007547034\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"BG\", 22, \"U04F04F02A08\", \"BG80BNBG96611020345678\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"BH\", 22, \"U04A14\", \"BH67BMAG00001299123456\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"BR\", 29, \"F08F05F10U01A01\", \"BR9700360305000010009795493P1\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"BY\", 28, \"A04F04A16\", \"BY13NBRB3600900000002Z00AB00\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"CH\", 21, \"F05A12\", \"CH9300762011623852957\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"CR\", 22, \"F04F14\", \"CR72012300000171549015\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"CY\", 28, \"F03F05A16\", \"CY17002001280000001200527600\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"CZ\", 24, \"F04F06F10\", \"CZ6508000000192000145399\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"DE\", 22, \"F08F10\", \"DE89370400440532013000\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"DK\", 18, \"F04F09F01\", \"DK5000400440116243\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"DO\", 28, \"U04F20\", \"DO28BAGR00000001212453611324\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"EE\", 20, \"F02F02F11F01\", \"EE382200221020145685\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"EG\", 29, \"F04F04F17\", \"EG800002000156789012345180002\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"ES\", 24, \"F04F04F01F01F10\", \"ES9121000418450200051332\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"FI\", 18, \"F06F07F01\", \"FI2112345600000785\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"FO\", 18, \"F04F09F01\", \"FO6264600001631634\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"FR\", 27, \"F05F05A11F02\", \"FR1420041010050500013M02606\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"GB\", 22, \"U04F06F08\", \"GB29NWBK60161331926819\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"GE\", 22, \"U02F16\", \"GE29NB0000000101904917\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"GI\", 23, \"U04A15\", \"GI75NWBK000000007099453\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"GL\", 18, \"F04F09F01\", \"GL8964710001000206\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"GR\", 27, \"F03F04A16\", \"GR1601101250000000012300695\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"GT\", 28, \"A04A20\", \"GT82TRAJ01020000001210029690\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"HR\", 21, \"F07F10\", \"HR1210010051863000160\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"HU\", 28, \"F03F04F01F15F01\", \"HU42117730161111101800000000\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"IE\", 22, \"U04F06F08\", \"IE29AIBK93115212345678\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"IL\", 23, \"F03F03F13\", \"IL620108000000099999999\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"IS\", 26, \"F04F02F06F10\", \"IS140159260076545510730339\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"IT\", 27, \"U01F05F05A12\", \"IT60X0542811101000000123456\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"IQ\", 23, \"U04F03A12\", \"IQ98NBIQ850123456789012\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"JO\", 30, \"A04F22\", \"JO15AAAA1234567890123456789012\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"KW\", 30, \"U04A22\", \"KW81CBKU0000000000001234560101\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"KZ\", 20, \"F03A13\", \"KZ86125KZT5004100100\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"LB\", 28, \"F04A20\", \"LB62099900000001001901229114\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"LC\", 32, \"U04F24\", \"LC07HEMM000100010012001200013015\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"LI\", 21, \"F05A12\", \"LI21088100002324013AA\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"LT\", 20, \"F05F11\", \"LT121000011101001000\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"LU\", 20, \"F03A13\", \"LU280019400644750000\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"LV\", 21, \"U04A13\", \"LV80BANK0000435195001\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"MC\", 27, \"F05F05A11F02\", \"MC5811222000010123456789030\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"MD\", 24, \"U02A18\", \"MD24AG000225100013104168\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"ME\", 22, \"F03F13F02\", \"ME25505000012345678951\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"MK\", 19, \"F03A10F02\", \"MK07250120000058984\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"MR\", 27, \"F05F05F11F02\", \"MR1300020001010000123456753\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"MT\", 31, \"U04F05A18\", \"MT84MALT011000012345MTLCAST001S\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"MU\", 30, \"U04F02F02F12F03U03\", \"MU17BOMM0101101030300200000MUR\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"NL\", 18, \"U04F10\", \"NL91ABNA0417164300\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"NO\", 15, \"F04F06F01\", \"NO9386011117947\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"PK\", 24, \"U04A16\", \"PK36SCBL0000001123456702\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"PL\", 28, \"F08F16\", \"PL61109010140000071219812874\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"PS\", 29, \"U04A21\", \"PS92PALS000000000400123456702\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"PT\", 25, \"F04F04F11F02\", \"PT50000201231234567890154\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"QA\", 29, \"U04A21\", \"QA30AAAA123456789012345678901\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"RO\", 24, \"U04A16\", \"RO49AAAA1B31007593840000\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"RS\", 22, \"F03F13F02\", \"RS35260005601001611379\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"SA\", 24, \"F02A18\", \"SA0380000000608010167519\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"SC\", 31, \"U04F04F16U03\", \"SC18SSCB11010000000000001497USD\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"SE\", 24, \"F03F16F01\", \"SE4550000000058398257466\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"SI\", 19, \"F05F08F02\", \"SI56263300012039086\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"SK\", 24, \"F04F06F10\", \"SK3112000000198742637541\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"SM\", 27, \"U01F05F05A12\", \"SM86U0322509800000000270100\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"ST\", 25, \"F08F11F02\", \"ST68000100010051845310112\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"SV\", 28, \"U04F20\", \"SV62CENR00000000000000700025\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"TL\", 23, \"F03F14F02\", \"TL380080012345678910157\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"TN\", 24, \"F02F03F13F02\", \"TN5910006035183598478831\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"TR\", 26, \"F05F01A16\", \"TR330006100519786457841326\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"UA\", 29, \"F25\", \"UA511234567890123456789012345\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"VA\", 22, \"F18\", \"VA59001123000012345678\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"VG\", 24, \"U04F16\", \"VG96VPVG0000012345678901\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"XK\", 20, \"F04F10F02\", \"XK051212012345678906\" ))\n\n\n\t// The following countries are not included in the official IBAN registry but use the IBAN specification\n\t// Angola\n\tformatterIban.addSpecification(new IbanSpecification(\"AO\", 25, \"F21\", \"AO69123456789012345678901\" ))\n\t// Burkina\n\tformatterIban.addSpecification(new IbanSpecification(\"BF\", 27, \"F23\", \"BF2312345678901234567890123\" ))\n\t// Burundi\n\tformatterIban.addSpecification(new IbanSpecification(\"BI\", 16, \"F12\", \"BI41123456789012\" ))\n\t// Benin\n\tformatterIban.addSpecification(new IbanSpecification(\"BJ\", 28, \"F24\", \"BJ39123456789012345678901234\" ))\n\t// Ivory\n\tformatterIban.addSpecification(new IbanSpecification(\"CI\", 28, \"U02F22\", \"CI70CI1234567890123456789012\" ))\n\t// Cameron\n\tformatterIban.addSpecification(new IbanSpecification(\"CM\", 27, \"F23\", \"CM9012345678901234567890123\" ))\n\t// Cape Verde\n\tformatterIban.addSpecification(new IbanSpecification(\"CV\", 25, \"F21\", \"CV30123456789012345678901\" ))\n\t// Algeria\n\tformatterIban.addSpecification(new IbanSpecification(\"DZ\", 24, \"F20\", \"DZ8612345678901234567890\" ))\n\t// Iran\n\tformatterIban.addSpecification(new IbanSpecification(\"IR\", 26, \"F22\", \"IR861234568790123456789012\" ))\n\t// Madagascar\n\tformatterIban.addSpecification(new IbanSpecification(\"MG\", 27, \"F23\", \"MG1812345678901234567890123\" ))\n\t// Mali\n\tformatterIban.addSpecification(new IbanSpecification(\"ML\", 28, \"U01F23\", \"ML15A12345678901234567890123\" ))\n\t// Mozambique\n\tformatterIban.addSpecification(new IbanSpecification(\"MZ\", 25, \"F21\", \"MZ25123456789012345678901\" ))\n\t// Senegal\n\tformatterIban.addSpecification(new IbanSpecification(\"SN\", 28, \"U01F23\", \"SN52A12345678901234567890123\" ))\n\n\t// The following are regional and administrative French Republic subdivision IBAN specification (same structure as FR, only country code vary)\n\tformatterIban.addSpecification(new IbanSpecification(\"GF\", 27, \"F05F05A11F02\", \"GF121234512345123456789AB13\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"GP\", 27, \"F05F05A11F02\", \"GP791234512345123456789AB13\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"MQ\", 27, \"F05F05A11F02\", \"MQ221234512345123456789AB13\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"RE\", 27, \"F05F05A11F02\", \"RE131234512345123456789AB13\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"PF\", 27, \"F05F05A11F02\", \"PF281234512345123456789AB13\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"TF\", 27, \"F05F05A11F02\", \"TF891234512345123456789AB13\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"YT\", 27, \"F05F05A11F02\", \"YT021234512345123456789AB13\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"NC\", 27, \"F05F05A11F02\", \"NC551234512345123456789AB13\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"BL\", 27, \"F05F05A11F02\", \"BL391234512345123456789AB13\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"MF\", 27, \"F05F05A11F02\", \"MF551234512345123456789AB13\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"PM\", 27, \"F05F05A11F02\", \"PM071234512345123456789AB13\" ))\n\tformatterIban.addSpecification(new IbanSpecification(\"WF\", 27, \"F05F05A11F02\", \"WF621234512345123456789AB13\" ))\n\t// endregion ////\n\t// endregion ////\n\t\n\treturn {\n\t\tformatterNumber,\n\t\tformatterIban\n\t}\n}","import type { AuthActions, AuthData, B24HookParams } from \"../types/auth\";\n\n/**\n * Authorization Manager\n */\nexport class AuthHookManager\n\timplements AuthActions\n{\n\t#b24HookParams: B24HookParams;\n\t\n\tconstructor(\n\t\tb24HookParams: B24HookParams\n\t)\n\t{\n\t\tthis.#b24HookParams = Object.freeze(\n\t\t\tObject.assign(\n\t\t\t\t{},\n\t\t\t\tb24HookParams\n\t\t\t)\n\t\t);\n\t}\n\t\n\t/**\n\t * @see Http.#prepareParams\n\t */\n\tgetAuthData(): false|AuthData\n\t{\n\t\tconst domain = this.#b24HookParams.b24Url\n\t\t\t.replaceAll('https://', '')\n\t\t\t.replaceAll('http://', '')\n\t\t\t.replace(/:(80|443)$/, '');\n\t\t\n\t\treturn {\n\t\t\taccess_token: this.#b24HookParams.secret,\n\t\t\trefresh_token: 'hook',\n\t\t\texpires_in: 0,\n\t\t\tdomain: domain,\n\t\t\tmember_id: domain\n\t\t};\n\t}\n\t\n\trefreshAuth(): Promise<AuthData>\n\t{\n\t\treturn Promise.resolve(this.getAuthData() as AuthData);\n\t}\n\t\n\tgetUniq (prefix: string): string\n\t{\n\t\tconst authData = this.getAuthData()\n\t\tif(authData === false)\n\t\t{\n\t\t\tthrow new Error('AuthData not init')\n\t\t}\n\t\treturn [\n\t\t\tprefix,\n\t\t\tauthData.member_id\n\t\t].join('_')\n\t}\n\n\t/**\n\t * Get the account address BX24 ( https://name.bitrix24.com )\n\t */\n\tgetTargetOrigin(): string\n\t{\n\t\treturn `${this.#b24HookParams.b24Url}`;\n\t}\n\t\n\t/**\n\t * Get the account address BX24 with Path ( https://name.bitrix24.com/rest/1/xxxxx )\n\t */\n\tgetTargetOriginWithPath(): string\n\t{\n\t\treturn `${this.#b24HookParams.b24Url}/rest/${this.#b24HookParams.userId}/${this.#b24HookParams.secret}`;\n\t}\n\t\n\t/**\n\t * We believe that hooks are created only by the admin\n\t */\n\tget isAdmin(): boolean\n\t{\n\t\treturn true;\n\t}\n}","import { LoggerBrowser } from '../logger/browser'\nimport { AbstractB24 } from '../core/abstract-b24'\nimport type { TypeB24 } from '../types/b24'\nimport Http from '../core/http/controller'\nimport { AuthHookManager } from './auth'\nimport type { AuthActions, B24HookParams } from '../types/auth'\n\n/**\n * B24.Hook Manager.\n *\n * @link https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=99&LESSON_ID=8581&LESSON_PATH=8771.8583.8581\n */\nexport class B24Hook\n\textends AbstractB24\n\timplements TypeB24\n{\n\treadonly #authHookManager: AuthHookManager\n\t\n\t// region Init ////\n\tconstructor(\n\t\tb24HookParams: B24HookParams,\n\t)\n\t{\n\t\tsuper()\n\t\t\n\t\tthis.#authHookManager = new AuthHookManager(\n\t\t\tb24HookParams\n\t\t)\n\t\t\n\t\tthis._http = new Http(\n\t\t\tthis.#authHookManager.getTargetOriginWithPath(),\n\t\t\tthis.#authHookManager,\n\t\t\tthis._getHttpOptions()\n\t\t)\n\t\t\n\t\tthis._isInit = true\n\t}\n\t\n\tpublic override setLogger(logger: LoggerBrowser): void\n\t{\n\t\tsuper.setLogger(logger)\n\t}\n\t// endregion ////\n\t\n\toverride get auth(): AuthActions\n\t{\n\t\treturn this.#authHookManager\n\t}\n\t\n\t// region Core ////\n\t// endregion ////\n\t\n\t// region Get ////\n\t/**\n\t * Get the account address BX24 ( https://name.bitrix24.com )\n\t */\n\toverride getTargetOrigin(): string\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#authHookManager.getTargetOrigin()\n\t}\n\t\n\t/**\n\t * Get the account address BX24 with Path ( https://name.bitrix24.com/rest/1/xxxxx )\n\t */\n\toverride getTargetOriginWithPath(): string\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#authHookManager.getTargetOriginWithPath()\n\t}\n\t// endregion ////\n\t\n\t// region Tools ////\n\t// endregion ////\n}","/**\n * List of commands for the B24 parent window\n */\nexport enum MessageCommands\n{\n\tgetInitData = 'getInitData',\n\tsetInstallFinish = 'setInstallFinish',\n\tsetInstall = 'setInstall',\n\trefreshAuth = 'refreshAuth',\n\tsetAppOption = 'setAppOption',\n\tsetUserOption = 'setUserOption',\n\tresizeWindow = 'resizeWindow',\n\treloadWindow = 'reloadWindow',\n\tsetTitle = 'setTitle',\n\tsetScroll = 'setScroll',\n\topenApplication = 'openApplication',\n\tcloseApplication = 'closeApplication',\n\topenPath = 'openPath',\n\timCallTo = 'imCallTo',\n\timPhoneTo = 'imPhoneTo',\n\timOpenMessenger = 'imOpenMessenger',\n\timOpenHistory = 'imOpenHistory',\n\tselectUser = 'selectUser',\n\tselectAccess = 'selectAccess',\n\tselectCRM = 'selectCRM',\n\tshowAppForm = 'showAppForm',\n}","import { LoggerBrowser, LoggerType } from '../../logger/browser'\n\nimport { MessageCommands } from './commands'\nimport { AppFrame } from '../frame'\n\nimport Text from \"../../tools/text\"\n\ninterface PromiseHandlers\n{\n\tresolve: (value: any) => void\n\treject: (reason?: any) => void\n\ttimeoutId: any\n}\n\n/**\n * Parent Window Request Parameters\n * @prop isSafely auto completion mode Promise.resolve()\n * @prop safelyTime after what time (900 ms) should it be automatically resolved Promise\n */\nexport interface SendParams {\n\t[index: string]: any,\n\n\tisSafely?: boolean,\n\tsafelyTime?: number,\n}\n\n/**\n * Parent Window Communication Manager at B24\n */\nexport class MessageManager\n{\n\t#appFrame: AppFrame\n\t#callbackPromises: Map<string, PromiseHandlers>\n\tprotected _logger: null|LoggerBrowser = null\n\tprivate runCallbackHandler: OmitThisParameter<(event: MessageEvent) => void>\n\t\n\tconstructor(\n\t\tappFrame: AppFrame\n\t)\n\t{\n\t\tthis.#appFrame = appFrame\n\t\t\n\t\tthis.#callbackPromises = new Map()\n\t\t\n\t\tthis.runCallbackHandler = this._runCallback.bind(this)\n\t}\n\t\n\tsetLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t}\n\t\n\tgetLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(\n\t\t\t\t`NullLogger`\n\t\t\t)\n\t\t\t\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._logger\n\t}\n\t\n\t// region Events ////\n\t/**\n\t * Subscribe to the onMessage event of the parent window\n\t */\n\tsubscribe()\n\t{\n\t\twindow.addEventListener(\n\t\t\t'message',\n\t\t\tthis.runCallbackHandler\n\t\t)\n\t}\n\t\n\t/**\n\t * Unsubscribe from the onMessage event of the parent window\n\t */\n\tunsubscribe(): void\n\t{\n\t\twindow.removeEventListener(\n\t\t\t'message',\n\t\t\tthis.runCallbackHandler\n\t\t)\n\t}\n\t// endregion ////\n\t\n\t/**\n\t * Send message to parent window\n\t * The answer (if) we will get in _runCallback\n\t *\n\t * @param command\n\t * @param params\n\t */\n\tasync send(\n\t\tcommand: string|MessageCommands,\n\t\tparams: null|SendParams = null\n\t): Promise<any>\n\t{\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tlet cmd: string|{}\n\t\t\tconst promiseHandler: PromiseHandlers = { resolve, reject, timeoutId: null }\n\t\t\t\n\t\t\tconst keyPromise = this.#setCallbackPromise(promiseHandler)\n\t\t\t\n\t\t\tif(command.toString().indexOf(':') >= 0)\n\t\t\t{\n\t\t\t\tcmd = {\n\t\t\t\t\tmethod: command.toString(),\n\t\t\t\t\tparams: !!params ? params : '',\n\t\t\t\t\tcallback: keyPromise,\n\t\t\t\t\tappSid: this.#appFrame.getAppSid()\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t/**\n\t\t\t\t * @memo: delete after rest 22.0.0\n\t\t\t\t */\n\t\t\t\tcmd = command.toString()\n\t\t\t\tlet listParams = [\n\t\t\t\t\t!!params ? JSON.stringify(params) : null,\n\t\t\t\t\tkeyPromise,\n\t\t\t\t\tthis.#appFrame.getAppSid()\n\t\t\t\t]\n\t\t\t\t\n\t\t\t\tcmd += ':' + listParams.filter(Boolean).join(':')\n\t\t\t}\n\t\t\t\n\t\t\tthis.getLogger().log(`send to ${this.#appFrame.getTargetOrigin()}`, {cmd})\n\t\t\t\n\t\t\tparent.postMessage(\n\t\t\t\tcmd,\n\t\t\t\tthis.#appFrame.getTargetOrigin()\n\t\t\t)\n\t\t\t\n\t\t\tif(params?.isSafely)\n\t\t\t{\n\t\t\t\t// @ts-ignore\n\t\t\t\tthis.#callbackPromises.get(keyPromise).timeoutId = window.setTimeout(\n\t\t\t\t\t() => {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.#callbackPromises.has(keyPromise))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.getLogger().warn(\n\t\t\t\t\t\t\t\t`Action ${command.toString()} stop by timeout`\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.#callbackPromises.delete(keyPromise)\n\t\t\t\t\t\t\tresolve({isSafely: true})\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tparseInt(String(params?.safelyTime || 900))\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\t}\n\t\n\t/**\n\t * Fulfilling a promise based on messages from the parent window\n\t *\n\t * @param event\n\t * @private\n\t */\n\tpublic _runCallback(event: MessageEvent): void\n\t{\n\t\tif(event.origin !== this.#appFrame.getTargetOrigin())\n\t\t{\n\t\t\treturn\n\t\t}\n\t\t\n\t\tif(!!event.data)\n\t\t{\n\t\t\tthis.getLogger().log(`get from ${event.origin}`, {\n\t\t\t\tdata: event.data\n\t\t\t})\n\t\t\t\n\t\t\tlet tmp = event.data.split(':')\n\t\t\t\n\t\t\tconst cmd: { id: string, args: any } = {\n\t\t\t\tid: tmp[0],\n\t\t\t\targs: tmp.slice(1).join(':')\n\t\t\t}\n\t\t\t\n\t\t\tif(!!cmd.args)\n\t\t\t{\n\t\t\t\tcmd.args = JSON.parse(cmd.args)\n\t\t\t}\n\t\t\t\n\t\t\tif(this.#callbackPromises.has(cmd.id))\n\t\t\t{\n\t\t\t\tconst promise = this.#callbackPromises.get(cmd.id) as PromiseHandlers\n\t\t\t\tif(!!promise.timeoutId)\n\t\t\t\t{\n\t\t\t\t\tclearTimeout(promise.timeoutId)\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.#callbackPromises.delete(cmd.id)\n\t\t\t\t\n\t\t\t\tpromise.resolve(cmd.args)\n\t\t\t\t// promise.reject(cmd.args) ////\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Storing a promise for a message from the parent window\n\t *\n\t * @param promiseHandler\n\t * @private\n\t *\n\t * @memo We don't use Symbol here, because we need to pass it to the parent and then find and restore it.\n\t */\n\t#setCallbackPromise(promiseHandler: PromiseHandlers): string\n\t{\n\t\tlet key = Text.getUniqId()\n\t\t\n\t\tthis.#callbackPromises.set(\n\t\t\tkey,\n\t\t\tpromiseHandler\n\t\t)\n\t\t\n\t\treturn key\n\t}\n}","import { B24LangList } from \"../core/language/list\";\nimport type {\n\tB24FrameQueryParams,\n\tMessageInitData\n} from \"../types/auth\";\n\n/**\n * Application Frame Data Manager\n */\nexport class AppFrame\n{\n\t#domain: string = '';\n\t#protocol: boolean = true;\n\t#appSid: null|string = null;\n\t#path: null|string = null;\n\t#lang: null|string = null;\n\t\n\tconstructor(queryParams: B24FrameQueryParams)\n\t{\n\t\tif(queryParams.DOMAIN)\n\t\t{\n\t\t\tthis.#domain = queryParams.DOMAIN;\n\t\t\tthis.#domain = this.#domain.replace(/:(80|443)$/, '');\n\t\t}\n\t\t\n\t\tthis.#protocol = (queryParams.PROTOCOL === true);\n\t\t\n\t\tif(queryParams.LANG)\n\t\t{\n\t\t\tthis.#lang = queryParams.LANG;\n\t\t}\n\t\t\n\t\tif(queryParams.APP_SID)\n\t\t{\n\t\t\tthis.#appSid = queryParams.APP_SID;\n\t\t}\n\t}\n\t\n\t/**\n\t * Initializes the data received from the parent window message.\n\t * @param data\n\t */\n\tinitData(data: MessageInitData): AppFrame\n\t{\n\t\tif(!this.#domain)\n\t\t{\n\t\t\tthis.#domain = data.DOMAIN;\n\t\t}\n\t\t\n\t\tif(!this.#path)\n\t\t{\n\t\t\tthis.#path = data.PATH;\n\t\t}\n\t\t\n\t\tif(!this.#lang)\n\t\t{\n\t\t\tthis.#lang = data.LANG;\n\t\t}\n\t\t\n\t\tthis.#protocol = parseInt(data.PROTOCOL) === 1;\n\t\tthis.#domain = this.#domain.replace(/:(80|443)$/, '');\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Returns the sid of the application relative to the parent window like this `9c33468728e1d2c8c97562475edfd96`\n\t */\n\tgetAppSid(): string\n\t{\n\t\tif(null === this.#appSid)\n\t\t{\n\t\t\tthrow new Error(`Not init appSid`);\n\t\t}\n\t\t\n\t\treturn this.#appSid;\n\t}\n\t\n\t/**\n\t * Get the account address BX24 ( https://name.bitrix24.com )\n\t */\n\tgetTargetOrigin(): string\n\t{\n\t\treturn `${this.#protocol ? 'https' : 'http'}://${this.#domain}`;\n\t}\n\t\n\t/**\n\t * Get the account address BX24 with Path ( https://name.bitrix24.com/rest )\n\t */\n\tgetTargetOriginWithPath(): string\n\t{\n\t\treturn this.getTargetOrigin() + (this.#path ?? '');\n\t}\n\t\n\t/**\n\t * Returns the localization of the B24 interface\n\t * @return {B24LangList} - default B24LangList.en\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-get-lang.html\n\t */\n\tgetLang(): B24LangList\n\t{\n\t\treturn (this.#lang as B24LangList) || B24LangList.en;\n\t}\n}","import { AppFrame } from \"./frame\";\nimport { MessageManager, MessageCommands } from \"./message\";\nimport type {\n\tAuthActions,\n\tAuthData,\n\tRefreshAuthData,\n\tMessageInitData\n} from \"../types/auth\";\n\n/**\n * Authorization Manager\n */\nexport class AuthManager\n\timplements AuthActions\n{\n\t#accessToken: null|string = null;\n\t#refreshId: null|string = null;\n\t#authExpires: number = 0;\n\t#memberId: null|string = null;\n\t\n\t#isAdmin: boolean = false;\n\t\n\t#appFrame: AppFrame;\n\t#messageManager: MessageManager;\n\t\n\tconstructor(\n\t\tappFrame: AppFrame,\n\t\tmessageManager: MessageManager\n\t)\n\t{\n\t\tthis.#appFrame = appFrame;\n\t\tthis.#messageManager = messageManager;\n\t}\n\t\n\t/**\n\t * Initializes the data received from the parent window message.\n\t * @param data\n\t */\n\tinitData(data: MessageInitData): AuthManager\n\t{\n\t\tif(!!data.AUTH_ID)\n\t\t{\n\t\t\tthis.#accessToken = data.AUTH_ID;\n\t\t\tthis.#refreshId = data.REFRESH_ID;\n\t\t\tthis.#authExpires = (new Date()).valueOf() + parseInt(data.AUTH_EXPIRES) * 1_000;\n\t\t\t\n\t\t\tthis.#isAdmin = data.IS_ADMIN;\n\t\t\tthis.#memberId = data.MEMBER_ID || '';\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Returns authorization data\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-functions/bx24-get-auth.html\n\t */\n\tgetAuthData(): false|AuthData\n\t{\n\t\treturn (this.#authExpires > (new Date()).valueOf())\n\t\t? {\n\t\t\taccess_token: this.#accessToken,\n\t\t\trefresh_token: this.#refreshId,\n\t\t\texpires_in: this.#authExpires,\n\t\t\tdomain: this.#appFrame.getTargetOrigin(),\n\t\t\tmember_id: this.#memberId\n\t\t} as AuthData\n\t\t: false;\n\t}\n\t\n\t/**\n\t * Updates authorization data through the parent window\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-functions/bx24-refresh-auth.html\n\t */\n\tasync refreshAuth(): Promise<AuthData>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.refreshAuth,\n\t\t\t{},\n\t\t)\n\t\t.then((data: RefreshAuthData) => {\n\t\t\tthis.#accessToken = data.AUTH_ID;\n\t\t\tthis.#refreshId = data.REFRESH_ID;\n\t\t\tthis.#authExpires = (new Date()).valueOf() + parseInt(data.AUTH_EXPIRES) * 1_000;\n\t\t\t\n\t\t\treturn Promise.resolve(\n\t\t\t\tthis.getAuthData() as AuthData\n\t\t\t);\n\t\t});\n\t}\n\t\n\tgetUniq (prefix: string): string\n\t{\n\t\treturn [\n\t\t\tprefix,\n\t\t\tthis.#memberId || ''\n\t\t].join('_')\n\t}\n\t\n\t/**\n\t * Determines whether the current user has administrator rights\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-is-admin.html\n\t */\n\tget isAdmin(): boolean\n\t{\n\t\treturn this.#isAdmin;\n\t}\n}","import { MessageManager, MessageCommands } from './message'\nimport useScrollSize from '../tools/scroll-size'\n\n\n/**\n * Parent window manager\n *\n * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/\n */\nexport class ParentManager\n{\n\t#messageManager: MessageManager\n\t\n\tconstructor(\n\t\tmessageManager: MessageManager\n\t)\n\t{\n\t\tthis.#messageManager = messageManager\n\t}\n\t\n\t/**\n\t * The method closes the open modal window with the application\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-close-application.html\n\t */\n\tasync closeApplication(): Promise<void>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.closeApplication,\n\t\t\t{\n\t\t\t\t/**\n\t\t\t\t * @memo There is no point - everything will be closed and timeout will not be able to do anything\n\t\t\t\t */\n\t\t\t\tisSafely: false\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * Sets the size of the frame containing the application to the size of the frame's content.\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-fit-window.html\n\t *\n\t * @memo in certain situations it may not be executed (placement of the main window after installing the application), in this case isSafely mode will work\n\t */\n\tasync fitWindow(): Promise<any>\n\t{\n\t\tconst width = '100%'\n\t\tconst height = this.getScrollSize().scrollHeight\n\t\t\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.resizeWindow,\n\t\t\t{\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tisSafely: true\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * Sets the size of the frame containing the application to the size of the frame's content.\n\t *\n\t * @param {number} width\n\t * @param {number} height\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-resize-window.html\n\t *\n\t * @memo in certain situations it may not be executed, in this case isSafely mode will be triggered\n\t */\n\tasync resizeWindow(\n\t\twidth: number,\n\t\theight: number\n\t): Promise<void>\n\t{\n\t\tif(width > 0 && height > 0)\n\t\t{\n\t\t\treturn this.#messageManager.send(\n\t\t\t\tMessageCommands.resizeWindow,\n\t\t\t\t{\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tisSafely: true\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t\t\n\t\treturn Promise.reject(new Error(\n\t\t\t`Wrong width:number = ${width} or height:number = ${height}`\n\t\t))\n\t}\n\t\n\t/**\n\t * Automatically resize `document.body` of frame with application according to frame content dimensions\n\t * If you pass appNode, the height will be calculated relative to it\n\t *\n\t * @param {HTMLElement|null} appNode\n\t * @param {number} minHeight\n\t * @param {number} minWidth\n\t *\n\t * @return {Promise<void>}\n\t */\n\tasync resizeWindowAuto(\n\t\tappNode: null|HTMLElement = null,\n\t\tminHeight: number = 0,\n\t\tminWidth: number = 0\n\t): Promise<void>\n\t{\n\t\tconst body = document.body\n\t\t//const html = document.documentElement\n\t\t\n\t\tlet width = Math.max(\n\t\t\tbody.scrollWidth,\n\t\t\tbody.offsetWidth,\n\t\t\t\n\t\t\t//html.clientWidth,\n\t\t\t//html.scrollWidth,\n\t\t\t//html.offsetWidth\n\t\t)\n\t\t\n\t\tif(minWidth > 0)\n\t\t{\n\t\t\twidth = Math.max(minWidth, width)\n\t\t}\n\t\t\n\t\tlet height = Math.max(\n\t\t\tbody.scrollHeight,\n\t\t\tbody.offsetHeight,\n\t\t\t\n\t\t\t//html.clientHeight,\n\t\t\t//html.scrollHeight,\n\t\t\t//html.offsetHeight\n\t\t)\n\t\t\n\t\tif(!!appNode)\n\t\t{\n\t\t\theight = Math.max(\n\t\t\t\tappNode.scrollHeight,\n\t\t\t\tappNode.offsetHeight,\n\t\t\t)\n\t\t}\n\t\t\n\t\tif(minHeight > 0)\n\t\t{\n\t\t\theight = Math.max(minHeight, height)\n\t\t}\n\t\t\n\t\treturn this.resizeWindow(\n\t\t\twidth,\n\t\t\theight,\n\t\t)\n\t}\n\t\n\t/**\n\t * This function returns the inner dimensions of the application frame\n\t *\n\t * @return {Promise<{scrollWidth: number; scrollHeight: number}>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-get-scroll-size.html\n\t */\n\tgetScrollSize(): {\n\t\tscrollWidth: number\n\t\tscrollHeight: number\n\t}\n\t{\n\t\treturn useScrollSize()\n\t}\n\t\n\t/**\n\t * Scrolls the parent window\n\t *\n\t * @param {number} scroll should specify the vertical scrollbar position (0 - scroll to the very top)\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-scroll-parent-window.html\n\t */\n\tasync scrollParentWindow(\n\t\tscroll: number\n\t): Promise<void>\n\t{\n\t\tif(!Number.isInteger(scroll))\n\t\t{\n\t\t\treturn Promise.reject(new Error('Wrong scroll number'))\n\t\t}\n\t\t\n\t\tif(scroll < 0)\n\t\t{\n\t\t\tscroll = 0\n\t\t}\n\t\t\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.setScroll,\n\t\t\t{\n\t\t\t\tscroll,\n\t\t\t\tisSafely: true\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * Reload the page with the application (the whole page, not just the frame).\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-reload-window.html\n\t */\n\tasync reloadWindow(): Promise<void>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.reloadWindow,\n\t\t\t{\n\t\t\t\tisSafely: true\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * Set Page Title\n\t *\n\t * @param {string} title\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-set-title.html\n\t */\n\tasync setTitle(\n\t\ttitle: string\n\t): Promise<void>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.setTitle,\n\t\t\t{\n\t\t\t\ttitle: title.toString(),\n\t\t\t\tisSafely: true\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * Initiates a call via internal communication\n\t *\n\t * @param {number} userId The identifier of the account user\n\t * @param {boolean} isVideo true - video call, false - audio call. Optional parameter.\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-im-call-to.html\n\t */\n\tasync imCallTo(\n\t\tuserId: number,\n\t\tisVideo: boolean = true\n\t): Promise<void>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.imCallTo,\n\t\t\t{\n\t\t\t\tuserId,\n\t\t\t\tvideo: isVideo,\n\t\t\t\tisSafely: true\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * Makes a call to the phone number\n\t *\n\t * @param {string} phone Phone number. The number can be in the format: `+44 20 1234 5678` or `x (xxx) xxx-xx-xx`\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-im-phone-to.html\n\t */\n\tasync imPhoneTo(\n\t\tphone: string\n\t): Promise<void>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.imPhoneTo,\n\t\t\t{\n\t\t\t\tphone,\n\t\t\t\tisSafely: true\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * Opens the messenger window\n\t * userId or chatXXX - chat, where XXX is the chat identifier, which can simply be a number.\n\t * sgXXX - group chat, where XXX is the social network group number (the chat must be enabled in this group).\n\t *\n\t * XXXX** - open line, where XXX is the code obtained via the Rest method imopenlines.network.join.\n\t *\n\t * If nothing is passed, the chat interface will open with the last opened dialog.\n\t *\n\t * @param {number|`chat${number}`|`sg${number}`|`imol|${number}`|undefined} dialogId\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-im-open-messenger.html\n\t * @link https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&LESSON_ID=20152&LESSON_PATH=7657.7883.8025.20150.20152\n\t *\n\t */\n\tasync imOpenMessenger(\n\t\tdialogId: number|`chat${number}`|`sg${number}`|`imol|${number}`|undefined\n\t): Promise<void>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.imOpenMessenger,\n\t\t\t{\n\t\t\t\tdialogId: dialogId,\n\t\t\t\tisSafely: true\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * Opens the history window\n\t * Identifier of the dialog:\n\t *\n\t * userId or chatXXX - chat, where XXX is the chat identifier, which can simply be a number.\n\t * imol|XXXX - open line, where XXX is the session number of the open line.\n\t *\n\t * @param {number|`chat${number}`|`imol|${number}`} dialogId\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-im-open-history.html\n\t */\n\tasync imOpenHistory(\n\t\tdialogId: number|`chat${number}`|`imol|${number}`\n\t): Promise<void>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.imOpenHistory,\n\t\t\t{\n\t\t\t\tdialogId: dialogId,\n\t\t\t\tisSafely: true\n\t\t\t}\n\t\t)\n\t}\n}","import { MessageManager, MessageCommands } from \"./message\";\nimport type { MessageInitData } from \"../types/auth\";\n\n/**\n * Manager for working with application settings via communication with the parent window\n *\n * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/options/index.html\n */\nexport class OptionsManager\n{\n\t#messageManager: MessageManager;\n\t#appOptions: null | Record<string, any> = null;\n\t#userOptions: null | Record<string, any> = null;\n\t\n\tconstructor(\n\t\tmessageManager: MessageManager\n\t)\n\t{\n\t\tthis.#messageManager = messageManager;\n\t}\n\t\n\t/**\n\t * Initializes the data received from the parent window message.\n\t * @param data\n\t */\n\tinitData(data: MessageInitData): OptionsManager\n\t{\n\t\tif(!!data.APP_OPTIONS)\n\t\t{\n\t\t\tthis.#appOptions = data.APP_OPTIONS as Record<string, any>;\n\t\t}\n\t\t\n\t\tif(!!data.USER_OPTIONS)\n\t\t{\n\t\t\tthis.#userOptions = data.USER_OPTIONS as Record<string, any>;\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * Getting application option\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/options/bx24-app-option-get.html\n\t */\n\tappGet(option: string): any\n\t{\n\t\tif(this.#appOptions && !!this.#appOptions[option])\n\t\t{\n\t\t\treturn this.#appOptions[option];\n\t\t}\n\t\t\n\t\tthrow new Error(`app.option.${option} not set`);\n\t}\n\t\n\t/**\n\t * Updates application data through the parent window\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/options/bx24-app-option-set.html\n\t */\n\tasync appSet(\n\t\toption: string,\n\t\tvalue: any\n\t): Promise<void>\n\t{\n\t\tif(!this.#appOptions)\n\t\t{\n\t\t\tthis.#appOptions = [];\n\t\t}\n\t\t\n\t\tthis.#appOptions[option] = value;\n\t\t\n\t\treturn this.#sendParentMessage(\n\t\t\tMessageCommands.setAppOption,\n\t\t\toption,\n\t\t\tthis.#appOptions[option]\n\t\t);\n\t}\n\t\n\t/**\n\t * Getting user option\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/options/bx24-user-option-get.html\n\t */\n\tuserGet(option: string): any\n\t{\n\t\tif(this.#userOptions && !!this.#userOptions[option])\n\t\t{\n\t\t\treturn this.#userOptions[option];\n\t\t}\n\t\t\n\t\tthrow new Error(`user.option.${option} not set`);\n\t}\n\t\n\t/**\n\t * Updates user data through the parent window\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/options/bx24-user-option-set.html\n\t */\n\tasync userSet(\n\t\toption: string,\n\t\tvalue: any\n\t): Promise<void>\n\t{\n\t\tif(!this.#appOptions)\n\t\t{\n\t\t\tthis.#appOptions = [];\n\t\t}\n\t\t\n\t\tif(!this.#appOptions[option])\n\t\t{\n\t\t\tthis.#appOptions[option] = null;\n\t\t}\n\t\t\n\t\t// @ts-ignore\n\t\tthis.#userOptions[option] = value;\n\t\t\n\t\treturn this.#sendParentMessage(\n\t\t\tMessageCommands.setUserOption,\n\t\t\toption,\n\t\t\t// @ts-ignore\n\t\t\tthis.#userOptions[option]\n\t\t);\n\t}\n\t\n\tasync #sendParentMessage(\n\t\tcommand: string,\n\t\toption: string,\n\t\tvalue: any\n\t): Promise<void>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tcommand,\n\t\t\t{\n\t\t\t\tname: option,\n\t\t\t\tvalue: value,\n\t\t\t\tisSafely: true\n\t\t\t},\n\t\t)\n\t\t.then(() => {\n\t\t\treturn Promise.resolve();\n\t\t});\n\t}\n}","import { MessageManager, MessageCommands } from \"./message\";\nimport type {NumberString} from \"../types/common\";\n\nexport type SelectedUser = {\n\t/**\n\t * user identifier\n\t */\n\tid: NumberString,\n\t\n\t/**\n\t * formatted username\n\t */\n\tname: string,\n\t\n\tphoto: string,\n\t\n\tposition: string,\n\t\n\turl: string,\n\t\n\t/**\n\t * The flag indicates that the selected user is a subordinate of the current user\n\t */\n\tsub: boolean,\n\t\n\t/**\n\t * The flag indicates that the selected user is the manager of the current user\n\t */\n\tsup: boolean\n}\n\nexport type SelectedAccess = {\n\t/**\n\t * access permission identifier. Examples of identifiers:\n\t * - U1 — user with identifier 1\n\t * - IU1 — employees with identifier 1\n\t * - DR2 — all department and subdepartment employees with identifier 2\n\t * - D6 — all department employees with identifier 6\n\t * - G2 — group with identifier 2 (all visitors)\n\t * - SG4 — social network group with identifier 4\n\t * - AU — all authorized users\n\t * - CR — current user\n\t */\n\tid: `AU`|`CR`|`U${number}`|`IU${number}`|`DR${number}`|`D${number}`|`G${number}`|`SG${number}`\n\t\n\t/**\n\t * name of the access permission\n\t */\n\tname: string\n}\n\nexport type SelectCRMParamsEntityType = 'lead'|'contact'|'company'|'deal'|'quote'\n\nexport type SelectCRMParamsValue = {\n\tlead?: number[],\n\tcontact?: number[],\n\tcompany?: number[],\n\tdeal?: number[],\n\tquote?: number[],\n}\n\nexport type SelectCRMParams = {\n\t/**\n\t * Which types of objects to display in the dialog. Possible values:\n\t * - lead — Leads\n\t * - contact — Contacts\n\t * - company — Companies\n\t * - deal — Deals\n\t * - quote — Estimates\n\t */\n\tentityType: SelectCRMParamsEntityType[],\n\t\n\t/**\n\t * Whether multiple objects can be selected. Default is `false`\n\t */\n\tmultiple: boolean,\n\t\n\t/**\n\t * Which objects to initially add to the selected in the dialog. Works only if `multiple = true`\n\t */\n\tvalue?: SelectCRMParamsValue\n}\n\nexport type SelectedCRMEntity = {\n\tid: string,\n\ttype: SelectCRMParamsEntityType,\n\tplace: string,\n\ttitle: string,\n\tdesc: string,\n\turl: string\n}\n\nexport type SelectedCRM = {\n\tlead?: (SelectedCRMEntity & { id: `L_${number}` })[],\n\tcontact?: (SelectedCRMEntity & { id: `C_${number}`, image: string })[],\n\tcompany?: (SelectedCRMEntity & { id: `CO_${number}`, image: string })[],\n\tdeal?: (SelectedCRMEntity & { id: `D_${number}` })[],\n\tquote?: (SelectedCRMEntity & { id: `Q_${number}` })[],\n}\n\n/**\n * Select dialog manager\n *\n * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-dialogues/index.html\n */\nexport class DialogManager\n{\n\t#messageManager: MessageManager;\n\t\n\tconstructor(\n\t\tmessageManager: MessageManager\n\t)\n\t{\n\t\tthis.#messageManager = messageManager;\n\t}\n\t\n\t/**\n\t * Method displays the standard single user selection dialog\n\t * It only shows company employees\n\t *\n\t * @return {Promise<null|SelectedUser>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-dialogues/bx24-select-user.html\n\t */\n\tasync selectUser(): Promise<null|SelectedUser>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.selectUser,\n\t\t\t{\n\t\t\t\tmult: false\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * Method displays the standard multiple user selection dialog\n\t * It only shows company employees\n\t *\n\t * @return {Promise<SelectedUser[]>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-dialogues/bx24-select-users.html\n\t */\n\tasync selectUsers(): Promise<SelectedUser[]>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.selectUser,\n\t\t\t{\n\t\t\t\tmult: true\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * @deprecated\n\t * Method displays a standard access permission selection dialog\n\t *\n\t * @param {string[]} blockedAccessPermissions\n\t * @return {Promise<SelectedAccess[]>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-dialogues/bx24-select-access.html\n\t */\n\tasync selectAccess(\n\t\tblockedAccessPermissions: string[] = []\n\t): Promise<SelectedAccess[]>\n\t{\n\t\tconsole.warn(`@deprecated selectAccess`)\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.selectAccess,\n\t\t\t{\n\t\t\t\tvalue: blockedAccessPermissions\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * @deprecated\n\t * Method invokes the system dialog for selecting a CRM entity\n\t *\n\t * @param {SelectCRMParams} params\n\t * @return {Promise<SelectedCRM>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-dialogues/bx24-select-crm.html\n\t */\n\tasync selectCRM(\n\t\tparams?: SelectCRMParams\n\t): Promise<SelectedCRM>\n\t{\n\t\tconsole.warn(`@deprecated selectCRM`)\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.selectCRM,\n\t\t\t{\n\t\t\t\tentityType: params?.entityType,\n\t\t\t\tmultiple: params?.multiple,\n\t\t\t\tvalue: params?.value,\n\t\t\t}\n\t\t)\n\t}\n}","import { AppFrame } from \"./frame\"\nimport { MessageManager, MessageCommands } from \"./message\"\nimport type { StatusClose } from \"../types/slider\"\n\n/**\n * Sliders Manager\n */\nexport class SliderManager\n{\n\t#appFrame: AppFrame\n\t#messageManager: MessageManager\n\t\n\tconstructor(\n\t\tappFrame: AppFrame,\n\t\tmessageManager: MessageManager\n\t)\n\t{\n\t\tthis.#appFrame = appFrame\n\t\tthis.#messageManager = messageManager\n\t}\n\t\n\t/**\n\t * Returns the URL relative to the domain name and path\n\t */\n\tgetUrl(\n\t\tpath: string = '/'\n\t): URL\n\t{\n\t\treturn new URL(path, this.#appFrame.getTargetOrigin())\n\t}\n\t\n\t/**\n\t * Get the account address BX24\n\t */\n\tgetTargetOrigin(): string\n\t{\n\t\treturn this.#appFrame.getTargetOrigin()\n\t}\n\t\n\t/**\n\t * When the method is called, a pop-up window with the application frame will be opened.\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-open-application.html\n\t */\n\tasync openSliderAppPage(params: any = {}): Promise<any>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.openApplication,\n\t\t\tparams\n\t\t)\n\t}\n\t\n\t/**\n\t * The method closes the open modal window with the application\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-close-application.html\n\t */\n\tasync closeSliderAppPage(): Promise<void>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.closeApplication,\n\t\t\t{\n\t\t\t\t/**\n\t\t\t\t * @memo There is no point - everything will be closed and timeout will not be able to do anything\n\t\t\t\t */\n\t\t\t\tisSafely: false\n\t\t\t}\n\t\t)\n\t}\n\t\n\t/**\n\t * Defines the base path for width sampling.\n\t *\n\t * @param width\n\t * @private\n\t */\n\t#getBaseUrlByWidth(width: number = 1640): string\n\t{\n\t\tif(width > 0)\n\t\t{\n\t\t\t// region Init baseUrl by Width ////\n\t\t\tif(width > 1200 && width <= 1640)\n\t\t\t{\n\t\t\t\treturn '/crm/type/0/details/0/../../../../..'\n\t\t\t}\n\t\t\telse if(width > 950 && width <= 1200)\n\t\t\t{\n\t\t\t\treturn '/company/personal/user/0/groups/create/../../../../../..'\n\t\t\t}\n\t\t\telse if(width > 900 && width <= 950)\n\t\t\t{\n\t\t\t\treturn '/crm/company/requisite/0/../../../..'\n\t\t\t}\n\t\t\telse if(width <= 900)\n\t\t\t{\n\t\t\t\treturn '/workgroups/group/0/card/../../../..'\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// 1640 /////\n\t\t\t\treturn '/crm/deal/../..'\n\t\t\t}\n\t\t\t// endregion ////\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn '/crm/deal/../..'\n\t\t}\n\t}\n\t\n\t/**\n\t * Opens the specified path inside the portal in the slider.\n\t * @param {URL} url\n\t * @param {number} width - Number in the range from 1640 to 1200, from 1200 to 950, from 950 to 900, from 900 ...\n\t * @return {Promise<StatusClose>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-open-path.html\n\t * @memo /^\\/(crm\\/(deal|lead|contact|company|type)|marketplace|company\\/personal\\/user\\/[0-9]+|workgroups\\/group\\/[0-9]+)\\//\n\t */\n\tasync openPath(\n\t\turl: URL,\n\t\twidth: number = 1640\n\t): Promise<StatusClose>\n\t{\n\t\tconst openSliderUrl = new URL(url)\n\t\topenSliderUrl.searchParams.set('IFRAME', 'Y')\n\t\topenSliderUrl.searchParams.set('IFRAME_TYPE', 'SIDE_SLIDER')\n\t\t\n\t\t/**\n\t\t * We are trying to open the slider\n\t\t */\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.openPath,\n\t\t\t{\n\t\t\t\tpath: [this.#getBaseUrlByWidth(width), openSliderUrl.pathname, openSliderUrl.search].join('')\n\t\t\t}\n\t\t)\n\t\t.then((response) => {\n\t\t\t/**\n\t\t\t * Error handling\n\t\t\t */\n\t\t\tif(response?.result === 'error')\n\t\t\t{\n\t\t\t\t/**\n\t\t\t\t * If the error is related to using a mobile device, we will open it in a new tab\n\t\t\t\t * Let's wait 5 minutes - and return the promise to open and not close\n\t\t\t\t */\n\t\t\t\tif(response?.errorCode === 'METHOD_NOT_SUPPORTED_ON_DEVICE')\n\t\t\t\t{\n\t\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\t\tconst windowObjectReference = window.open(url, '_blank')\n\t\t\t\t\t\tif(!windowObjectReference)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treject(new Error('Error open window'))\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet iterator = 0\n\t\t\t\t\t\t// 5 min ////\n\t\t\t\t\t\tlet iteratorMax = 1_000 * 60 * 5\n\t\t\t\t\t\tlet waitCloseWindow = window.setInterval(() => {\n\t\t\t\t\t\t\titerator = iterator + 1\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(windowObjectReference.closed)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclearInterval(waitCloseWindow)\n\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\tisOpenAtNewWindow: true,\n\t\t\t\t\t\t\t\t\tisClose: true,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if(iterator > iteratorMax)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclearInterval(waitCloseWindow)\n\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\tisOpenAtNewWindow: true,\n\t\t\t\t\t\t\t\t\tisClose: false,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 1_000)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t/**\n\t\t\t\t\t * If the error is different, we will return it.\n\t\t\t\t\t */\n\t\t\t\t\treturn Promise.reject(new Error(\n\t\t\t\t\t\tresponse?.errorCode\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\t}\n\t\t\t/**\n\t\t\t * Processing a successful close\n\t\t\t */\n\t\t\telse if(response?.result === 'close')\n\t\t\t{\n\t\t\t\treturn Promise.resolve({\n\t\t\t\t\tisOpenAtNewWindow: false,\n\t\t\t\t\tisClose: true,\n\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t\treturn Promise.resolve({\n\t\t\t\tisOpenAtNewWindow: false,\n\t\t\t\tisClose: false,\n\t\t\t})\n\t\t})\n\t}\n\t\n\t/**\n\t * @deprecated\n\t * @param params\n\t */\n\tasync showAppForm(params: any): Promise<void>\n\t{\n\t\tconsole.warn(`@deprecated showAppForm`)\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.showAppForm,\n\t\t\t{\n\t\t\t\tparams: params,\n\t\t\t\tisSafely: true\n\t\t\t}\n\t\t)\n\t}\n}","import type { MessageInitData } from \"../types/auth\";\n\n/**\n * Placement Manager\n *\n * @see https://apidocs.bitrix24.com/api-reference/widgets/ui-interaction/index.html\n * @see https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=99&CHAPTER_ID=02535&LESSON_PATH=8771.5380.2535\n */\nexport class PlacementManager\n{\n\t#title: string = ''\n\t#options: object = {}\n\t\n\tconstructor()\n\t{\n\t\n\t}\n\t\n\t/**\n\t * Initializes the data received from the parent window message.\n\t * @param data\n\t */\n\tinitData(data: MessageInitData): PlacementManager\n\t{\n\t\tthis.#title = data.PLACEMENT || 'DEFAULT';\n\t\tconst options = data.PLACEMENT_OPTIONS;\n\t\t\n\t\tthis.#options = Object.freeze(options);\n\t\t\n\t\treturn this;\n\t}\n\t\n\tget title(): string\n\t{\n\t\treturn this.#title;\n\t}\n\t\n\tget isDefault(): boolean\n\t{\n\t\treturn this.title === 'DEFAULT';\n\t}\n\t\n\tget options(): any\n\t{\n\t\treturn this.#options;\n\t}\n\t\n\tget isSliderMode(): boolean\n\t{\n\t\treturn this.options?.IFRAME === 'Y'\n\t}\n}","import { LoggerBrowser } from '../logger/browser'\nimport { AbstractB24 } from '../core/abstract-b24'\nimport Http from '../core/http/controller'\nimport { AppFrame } from './frame'\nimport { MessageManager, MessageCommands } from './message'\nimport { B24LangList } from '../core/language/list'\nimport { AuthManager } from './auth'\nimport { ParentManager } from './parent'\nimport { OptionsManager } from './options'\nimport { DialogManager } from './dialog';\nimport { SliderManager } from './slider'\nimport { PlacementManager } from './placement'\nimport type { TypeB24 } from '../types/b24'\nimport type { AuthActions } from '../types/auth'\n\nimport type {\n\tMessageInitData,\n\tB24FrameQueryParams\n} from '../types/auth'\n/**\n * B24 Manager. Replacement api.bitrix24.com\n *\n * @link https://api.bitrix24.com/api/v1/\n * @see /bitrix/js/rest/applayout.js\n */\nexport class B24Frame\n\textends AbstractB24\n\timplements TypeB24\n{\n\t#isInstallMode: boolean = false\n\t#isFirstRun: boolean = false\n\t\n\treadonly #appFrame: AppFrame\n\treadonly #messageManager: MessageManager\n\treadonly #authManager: AuthManager\n\treadonly #parentManager: ParentManager\n\treadonly #optionsManager: OptionsManager\n\treadonly #dialogManager: DialogManager\n\treadonly #sliderManager: SliderManager\n\treadonly #placementManager: PlacementManager\n\t\n\t// region Init ////\n\tconstructor(\n\t\tqueryParams: B24FrameQueryParams,\n\t)\n\t{\n\t\tsuper()\n\t\t\n\t\tthis.#appFrame = new AppFrame(queryParams)\n\t\t\n\t\tthis.#messageManager = new MessageManager(this.#appFrame)\n\t\tthis.#messageManager.subscribe()\n\t\t\n\t\tthis.#authManager = new AuthManager( this.#appFrame, this.#messageManager )\n\t\tthis.#parentManager = new ParentManager( this.#messageManager )\n\t\tthis.#optionsManager = new OptionsManager( this.#messageManager )\n\t\tthis.#dialogManager = new DialogManager( this.#messageManager )\n\t\tthis.#sliderManager = new SliderManager( this.#appFrame, this.#messageManager )\n\t\tthis.#placementManager = new PlacementManager()\n\t\t\n\t\tthis._isInit = false\n\t}\n\t\n\tpublic override setLogger(logger: LoggerBrowser): void\n\t{\n\t\tsuper.setLogger(logger)\n\t\tthis.#messageManager.setLogger(this.getLogger())\n\t}\n\t\n\tget isFirstRun(): boolean\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#isFirstRun\n\t}\n\t\n\tget isInstallMode(): boolean\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#isInstallMode\n\t}\n\t\n\tget parent(): ParentManager\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#parentManager\n\t}\n\t\n\toverride get auth(): AuthActions\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#authManager\n\t}\n\t\n\tget slider(): SliderManager\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#sliderManager\n\t}\n\t\n\tget placement(): PlacementManager\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#placementManager\n\t}\n\t\n\tget options(): OptionsManager\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#optionsManager\n\t}\n\t\n\tget dialog(): DialogManager\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#dialogManager\n\t}\n\t\n\toverride async init(): Promise<void>\n\t{\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.getInitData,\n\t\t\t{}\n\t\t)\n\t\t\t.then((data: MessageInitData) => {\n\t\t\t\t\n\t\t\t\tthis.getLogger().log('init data:', data)\n\t\t\t\t\n\t\t\t\tthis.#appFrame.initData(data)\n\t\t\t\tthis.#authManager.initData(data)\n\t\t\t\tthis.#placementManager.initData(data)\n\t\t\t\tthis.#optionsManager.initData(data)\n\t\t\t\t\n\t\t\t\tthis.#isInstallMode = data.INSTALL\n\t\t\t\tthis.#isFirstRun = data.FIRST_RUN\n\t\t\t\t\n\t\t\t\tthis._http = new Http(\n\t\t\t\t\tthis.#appFrame.getTargetOriginWithPath(),\n\t\t\t\t\tthis.#authManager,\n\t\t\t\t\tthis._getHttpOptions(),\n\t\t\t\t)\n\t\t\t\t\n\t\t\t\tthis._isInit = true\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * @memo Writes the fact of the 1st launch to `app_options`\n\t\t\t\t */\n\t\t\t\tif(this.#isFirstRun)\n\t\t\t\t{\n\t\t\t\t\treturn this.#messageManager.send(\n\t\t\t\t\t\tMessageCommands.setInstall,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinstall: true\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn Promise.resolve()\n\t\t\t})\n\t}\n\t\n\t/**\n\t * Destructor.\n\t * Removes an event subscription\n\t */\n\toverride destroy()\n\t{\n\t\tthis.#messageManager.unsubscribe()\n\t\tsuper.destroy()\n\t}\n\t// endregion ////\n\t\n\t// region Core ////\n\t/**\n\t * Signals that the installer or application setup has finished running.\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-functions/bx24-install-finish.html\n\t */\n\tasync installFinish(): Promise<any>\n\t{\n\t\tif(!this.isInstallMode)\n\t\t{\n\t\t\treturn Promise.reject(new Error('Application was previously installed. You cannot call installFinish'))\n\t\t}\n\t\t\n\t\treturn this.#messageManager.send(\n\t\t\tMessageCommands.setInstallFinish,\n\t\t\t{}\n\t\t)\n\t}\n\t// endregion ////\n\t\n\t// region Get ////\n\t/**\n\t * Get the account address BX24 ( https://name.bitrix24.com )\n\t */\n\toverride getTargetOrigin(): string\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#appFrame.getTargetOrigin()\n\t}\n\t\n\t/**\n\t * Get the account address BX24 with Path ( https://name.bitrix24.com/rest )\n\t */\n\toverride getTargetOriginWithPath(): string\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#appFrame.getTargetOriginWithPath()\n\t}\n\t\n\t/**\n\t * Returns the sid of the application relative to the parent window like this `9c33468728e1d2c8c97562475edfd96`\n\t */\n\tgetAppSid(): string\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#appFrame.getAppSid()\n\t}\n\t\n\t/**\n\t * Returns the localization of the B24 interface\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-get-lang.html\n\t */\n\tgetLang(): B24LangList\n\t{\n\t\tthis._ensureInitialized()\n\t\treturn this.#appFrame.getLang()\n\t}\n\t// endregion ////\n}\n","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport type { TypeB24 } from '../types/b24'\n\nexport class UnhandledMatchError\n\textends Error\n{\n\tconstructor(value: string, ...args: any[])\n\t{\n\t\tsuper(...args);\n\t\tthis.name = 'UnhandledMatchError';\n\t\tthis.message = `Unhandled match value of type ${value}`;\n\t\tthis.stack = new Error().stack;\n\t}\n}\n\nexport abstract class AbstractHelper\n{\n\tprotected _b24: TypeB24\n\tprotected _logger: null|LoggerBrowser = null\n\tprotected _data: any = null\n\t\n\t// region Init ////\n\tconstructor(b24: TypeB24)\n\t{\n\t\tthis._b24 = b24\n\t}\n\t\n\tsetLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t}\n\t\n\tgetLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(\n\t\t\t\t`NullLogger`\n\t\t\t)\n\t\t\t\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._logger\n\t}\n\t// endregion ////\n\t\n\t/**\n\t * Initializes the data received\n\t * @param data\n\t */\n\tasync initData(data: any): Promise<void>\n\t{\n\t\tthis.getLogger().log(data)\n\t\treturn Promise.reject(new Error('Rewrite this function'))\n\t}\n\t\n\tabstract get data(): any\n}","import { AbstractHelper } from './abstractHelper'\nimport type { TypeUser } from '../types/b24-helper'\n\nexport class ProfileManager\n\textends AbstractHelper\n{\n\tprotected override _data: null|TypeUser = null\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: TypeUser): Promise<void>\n\t{\n\t\tthis._data = data\n\t}\n\t\n\tget data(): TypeUser\n\t{\n\t\tif(null === this._data)\n\t\t{\n\t\t\tthrow new Error('ProfileManager.data not initialized')\n\t\t}\n\t\t\n\t\treturn this._data\n\t}\n}","import { AbstractHelper } from './abstractHelper'\nimport { StatusDescriptions, type TypeApp } from '../types/b24-helper'\n\nexport class AppManager\n\textends AbstractHelper\n{\n\tprotected override _data: null|TypeApp = null\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: TypeApp): Promise<void>\n\t{\n\t\tthis._data = data\n\t}\n\t\n\tget data(): TypeApp\n\t{\n\t\tif(null === this._data)\n\t\t{\n\t\t\tthrow new Error('AppManager.data not initialized')\n\t\t}\n\t\t\n\t\treturn this._data\n\t}\n\t\n\tget statusCode(): string\n\t{\n\t\treturn StatusDescriptions[this.data.status as keyof typeof StatusDescriptions] || 'Unknown status'\n\t}\n}","import { AbstractHelper } from './abstractHelper'\nimport type { TypePayment } from '../types/b24-helper'\n\nexport class PaymentManager\n\textends AbstractHelper\n{\n\tprotected override _data: null|TypePayment = null\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: TypePayment): Promise<void>\n\t{\n\t\tthis._data = data\n\t}\n\t\n\tget data(): TypePayment\n\t{\n\t\tif(null === this._data)\n\t\t{\n\t\t\tthrow new Error('PaymentManager.data not initialized')\n\t\t}\n\t\t\n\t\treturn this._data\n\t}\n}","import { AbstractHelper } from './abstractHelper'\nimport type { TypeLicense } from '../types/b24-helper'\nimport { RestrictionManagerParamsForEnterprise } from '../types/http'\n\nexport class LicenseManager\n\textends AbstractHelper\n{\n\tprotected override _data: null|TypeLicense = null\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: TypeLicense): Promise<void>\n\t{\n\t\tthis._data = data\n\t\t\n\t\tthis.makeRestrictionManagerParams()\n\t}\n\t\n\tget data(): TypeLicense\n\t{\n\t\tif(null === this._data)\n\t\t{\n\t\t\tthrow new Error('LicenseManager.data not initialized')\n\t\t}\n\t\t\n\t\treturn this._data\n\t}\n\t\n\t/**\n\t * Set RestrictionManager params by license\n\t * @link https://apidocs.bitrix24.com/api-reference/common/system/app-info.html\n\t */\n\tmakeRestrictionManagerParams(): void\n\t{\n\t\tif(!this.data?.license)\n\t\t{\n\t\t\treturn\n\t\t}\n\t\t\n\t\tif(this.data.license.includes('ent'))\n\t\t{\n\t\t\tthis.getLogger().log(\n\t\t\t\t`LICENSE ${this.data.license} => up restriction manager params`, RestrictionManagerParamsForEnterprise\n\t\t\t)\n\t\t\t\n\t\t\tthis._b24.getHttpClient().setRestrictionManagerParams(\n\t\t\t\tRestrictionManagerParamsForEnterprise\n\t\t\t)\n\t\t}\n\t}\n}","import { AbstractHelper, UnhandledMatchError } from './abstractHelper'\nimport type { BoolString, ISODate, NumberString } from \"../types/common\"\nimport type { Currency, CurrencyFormat } from '../types/b24-helper'\nimport Type from '../tools/type'\nimport Text from '../tools/text'\n\ntype CurrencyFormatInit = {\n\tDECIMALS: NumberString\n\tDEC_POINT: string\n\tFORMAT_STRING: string\n\tFULL_NAME: string\n\tHIDE_ZERO: BoolString\n\tTHOUSANDS_SEP?: string\n\tTHOUSANDS_VARIANT: string\n}\n\ntype CurrencyInit = {\n\tAMOUNT: NumberString\n\tAMOUNT_CNT: NumberString\n\tBASE: BoolString\n\tCURRENCY: string\n\tDATE_UPDATE: ISODate\n\tDECIMALS: NumberString\n\tDEC_POINT: string\n\tFORMAT_STRING: string\n\tFULL_NAME: string\n\tLID: string\n\tSORT: NumberString\n\tTHOUSANDS_SEP?: string,\n\tLANG?: Record<string, CurrencyFormatInit>\n}\n\ntype CurrencyInitData = {\n\tcurrencyBase: string,\n\tcurrencyList: CurrencyInit[],\n}\n\ntype CurrencyData = {\n\tcurrencyBase: string,\n\tcurrencyList: Map<string, Currency>,\n}\n\nexport class CurrencyManager\n\textends AbstractHelper\n{\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: CurrencyInitData): Promise<void>\n\t{\n\t\tthis._data = {\n\t\t\tcurrencyBase: '?',\n\t\t\tcurrencyList: new Map(),\n\t\t} as CurrencyData\n\t\t\n\t\tthis.setBaseCurrency(data.currencyBase)\n\t\tthis.setCurrencyList(data.currencyList)\n\t\t\n\t\ttry\n\t\t{\n\t\t\tawait this.loadData()\n\t\t}\n\t\tcatch(error)\n\t\t{\n\t\t\tif(error instanceof Error)\n\t\t\t{\n\t\t\t\tthrow error\n\t\t\t}\n\t\t\t\n\t\t\tconsole.error(error)\n\t\t\tthrow new Error('Failed to load data')\n\t\t}\n\t}\n\t\n\tasync loadData(): Promise<void>\n\t{\n\t\tconst batchRequest: {\n\t\t\tmethod: string,\n\t\t\tparams: {id: string}\n\t\t}[] = this.currencyList.map((currencyCode) => {\n\t\t\treturn {\n\t\t\t\tmethod: 'crm.currency.get',\n\t\t\t\tparams: {\n\t\t\t\t\tid: currencyCode\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\t\n\t\tif(batchRequest.length < 1)\n\t\t{\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\t\n\t\ttry\n\t\t{\n\t\t\tconst response = await this._b24.callBatchByChunk(batchRequest, true)\n\t\t\tconst data = response.getData()\n\t\t\t\n\t\t\tdata.forEach((row: CurrencyInit) => {\n\t\t\t\tif(typeof row.LANG === 'undefined')\n\t\t\t\t{\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst currencyCode = row.CURRENCY\n\t\t\t\tconst currency = this.data.currencyList.get(currencyCode)\n\t\t\t\tif(typeof currency === 'undefined')\n\t\t\t\t{\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tObject.entries(row.LANG).forEach(([langCode, formatData]) => {\n\t\t\t\t\tcurrency.lang[langCode] = {\n\t\t\t\t\t\tdecimals: parseInt(formatData.DECIMALS),\n\t\t\t\t\t\tdecPoint: formatData.DEC_POINT,\n\t\t\t\t\t\tformatString: formatData.FORMAT_STRING,\n\t\t\t\t\t\tfullName: formatData.FULL_NAME,\n\t\t\t\t\t\tisHideZero: formatData.HIDE_ZERO === 'Y',\n\t\t\t\t\t\tthousandsSep: formatData.THOUSANDS_SEP,\n\t\t\t\t\t\tthousandsVariant: formatData.THOUSANDS_VARIANT,\n\t\t\t\t\t} as CurrencyFormat\n\t\t\t\t\t\n\t\t\t\t\tswitch(currency.lang[langCode].thousandsVariant)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase 'N':\n\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = ''\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'D':\n\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = '.'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'C':\n\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = ','\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'S':\n\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = ' '\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'B':\n\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = ' '\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'OWN':\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(!Type.isStringFilled(currency.lang[langCode].thousandsSep))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = ' '\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})\n\t\t}\n\t\tcatch(error)\n\t\t{\n\t\t\tconsole.error(error)\n\t\t}\n\t}\n\t\n\tget data(): CurrencyData\n\t{\n\t\tif(null === this._data)\n\t\t{\n\t\t\tthrow new Error('CurrencyManager.data not initialized')\n\t\t}\n\t\t\n\t\treturn this._data\n\t}\n\t\n\t// region BaseCurrency ////\n\tsetBaseCurrency(currencyBase: string)\n\t{\n\t\tthis._data.currencyBase = currencyBase\n\t}\n\t\n\tget baseCurrency(): string\n\t{\n\t\treturn this.data.currencyBase\n\t}\n\t// endregion ////\n\t\n\t// region CurrencyList ////\n\tsetCurrencyList(list: CurrencyInit[] = [])\n\t{\n\t\tthis.data.currencyList.clear()\n\t\t\n\t\tlist.forEach((row) => {\n\t\t\tthis.data.currencyList.set(\n\t\t\t\trow.CURRENCY,\n\t\t\t\t{\n\t\t\t\t\tamount: parseFloat(row.CURRENCY),\n\t\t\t\t\tamountCnt: parseInt(row.AMOUNT_CNT),\n\t\t\t\t\tisBase: row.BASE === 'Y',\n\t\t\t\t\tcurrencyCode: row.CURRENCY,\n\t\t\t\t\tdateUpdate: Text.toDateTime(row.DATE_UPDATE),\n\t\t\t\t\tdecimals: parseInt(row.DECIMALS),\n\t\t\t\t\tdecPoint: row.DEC_POINT,\n\t\t\t\t\tformatString: row.FORMAT_STRING,\n\t\t\t\t\tfullName: row.FULL_NAME,\n\t\t\t\t\tlid: row.LID,\n\t\t\t\t\tsort: parseInt(row.SORT),\n\t\t\t\t\tthousandsSep: row?.THOUSANDS_SEP || null,\n\t\t\t\t\tlang: {}\n\t\t\t\t} as Currency\n\t\t\t)\n\t\t})\n\t}\n\t// endregion ////\n\t\n\t// region Info ////\n\tgetCurrencyFullName(\n\t\tcurrencyCode: string,\n\t\tlangCode: string\n\t): string\n\t{\n\t\tconst currency = this.data.currencyList.get(currencyCode)\n\t\tif(typeof currency === 'undefined')\n\t\t{\n\t\t\tthrow new UnhandledMatchError(currencyCode)\n\t\t}\n\t\t\n\t\tlet fullName = currency.fullName\n\t\t\n\t\tif(!(typeof langCode === 'undefined'))\n\t\t{\n\t\t\tconst langFormatter = currency.lang[langCode]\n\t\t\tif(!Type.isUndefined(langFormatter))\n\t\t\t{\n\t\t\t\tfullName = langFormatter.fullName\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn fullName\n\t}\n\t\n\tgetCurrencyLiteral(\n\t\tcurrencyCode: string,\n\t\tlangCode?: string\n\t): string\n\t{\n\t\tconst currency = this.data.currencyList.get(currencyCode)\n\t\tif(typeof currency === 'undefined')\n\t\t{\n\t\t\tthrow new UnhandledMatchError(currencyCode)\n\t\t}\n\t\t\n\t\tlet formatString = currency.formatString\n\t\t\n\t\tif(!(typeof langCode === 'undefined'))\n\t\t{\n\t\t\tconst langFormatter = currency.lang[langCode]\n\t\t\tif(!Type.isUndefined(langFormatter))\n\t\t\t{\n\t\t\t\tformatString = langFormatter.formatString\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn formatString\n\t\t\t.replaceAll('&#', '&%')\n\t\t\t.replaceAll('#', '')\n\t\t\t.replaceAll('&%', '&#')\n\t\t\t.trim()\n\t\t|| ''\n\t}\n\t\n\tget currencyList(): string[]\n\t{\n\t\treturn Array.from(this.data.currencyList.keys())\n\t}\n\t// endregion ////\n\t\n\t// region Format ////\n\tformat(\n\t\tvalue: number,\n\t\tcurrencyCode: string,\n\t\tlangCode: string\n\t): string\n\t{\n\t\tconst currency = this.data.currencyList.get(currencyCode)\n\t\tif(typeof currency === 'undefined')\n\t\t{\n\t\t\tthrow new UnhandledMatchError(currencyCode)\n\t\t}\n\t\t\n\t\tconst options = {\n\t\t\tformatString: currency.formatString,\n\t\t\tdecimals: currency.decimals,\n\t\t\tdecPoint: currency.decPoint,\n\t\t\tthousandsSep: currency.thousandsSep,\n\t\t}\n\t\tif(!Type.isStringFilled(options.thousandsSep))\n\t\t{\n\t\t\toptions.thousandsSep = ''\n\t\t}\n\t\t\n\t\tconst langFormatter = currency.lang[langCode]\n\t\tif(!Type.isUndefined(langFormatter))\n\t\t{\n\t\t\toptions.formatString = langFormatter.formatString\n\t\t\toptions.decimals = langFormatter.decimals\n\t\t\toptions.decPoint = langFormatter.decPoint\n\t\t\toptions.thousandsSep = langFormatter.thousandsSep\n\t\t}\n\t\t\n\t\treturn options.formatString\n\t\t\t.replaceAll('&#', '&%')\n\t\t\t.replace(\n\t\t\t\t'#',\n\t\t\t\tText.numberFormat(\n\t\t\t\t\tvalue,\n\t\t\t\t\toptions.decimals,\n\t\t\t\t\toptions.decPoint,\n\t\t\t\t\toptions.thousandsSep\n\t\t\t\t)\n\t\t\t)\n\t\t\t.replaceAll('&%', '&#')\n\t\t|| ''\n\t}\n\t// endregion ////\n}","import { DateTime } from 'luxon'\nimport { AbstractHelper } from './abstractHelper'\nimport type { TypeB24 } from '../types/b24'\nimport { Result } from '../core/result'\nimport { TypeOption } from '../types/b24-helper'\nimport Type from '../tools/type'\nimport Text from '../tools/text'\n\nexport class OptionsManager\n\textends AbstractHelper\n{\n\tprotected override _data: Map<string, any>\n\tprotected _type: 'app'|'user'\n\t\n\t// region static ////\n\tstatic getSupportTypes(): TypeOption[]\n\t{\n\t\treturn [\n\t\t\tTypeOption.NotSet,\n\t\t\tTypeOption.JsonArray,\n\t\t\tTypeOption.JsonObject,\n\t\t\tTypeOption.FloatVal,\n\t\t\tTypeOption.IntegerVal,\n\t\t\tTypeOption.BoolYN,\n\t\t\tTypeOption.StringVal\n\t\t]\n\t}\n\t\n\tstatic prepareArrayList(list: any): any[]\n\t{\n\t\tif(Type.isArray(list))\n\t\t{\n\t\t\treturn list\n\t\t}\n\t\t\n\t\tif(Type.isObject(list))\n\t\t{\n\t\t\treturn Array.from(Object.values(list))\n\t\t}\n\t\t\n\t\treturn []\n\t}\n\t\n\t// endregion ////\n\t\n\t// region Init ////\n\tconstructor(\n\t\tb24: TypeB24,\n\t\ttype: 'app'|'user'\n\t)\n\t{\n\t\tsuper(b24)\n\t\tthis._type = type\n\t\tthis._data = new Map()\n\t}\n\t\n\tget data(): Map<string, any>\n\t{\n\t\treturn this._data\n\t}\n\t\n\treset()\n\t{\n\t\tthis.data.clear()\n\t}\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: any): Promise<void>\n\t{\n\t\tthis.reset()\n\t\t\n\t\tif(Type.isObject(data))\n\t\t{\n\t\t\tObject.entries(data).forEach(([key, value]) =>\n\t\t\t{\n\t\t\t\tthis.data.set(\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue\n\t\t\t\t)\n\t\t\t})\n\t\t}\n\t}\n\t\n\t// endregion ////\n\t\n\t// region Get ////\n\tgetJsonArray(key: string, defValue: any[] = []): any[]\n\t{\n\t\tif(!this.data.has(key))\n\t\t{\n\t\t\treturn defValue\n\t\t}\n\t\t\n\t\tlet data = this.data.get(key)\n\t\t\n\t\ttry\n\t\t{\n\t\t\tdata = JSON.parse(data)\n\t\t\t\n\t\t\tif(\n\t\t\t\t!Type.isArray(data)\n\t\t\t\t&& !Type.isObject(data)\n\t\t\t)\n\t\t\t{\n\t\t\t\tdata = defValue\n\t\t\t}\n\t\t}\n\t\tcatch( error )\n\t\t{\n\t\t\tthis.getLogger().error(error)\n\t\t\tdata = defValue\n\t\t}\n\t\t\n\t\treturn OptionsManager.prepareArrayList(data)\n\t}\n\t\n\tgetJsonObject(key: string, defValue: Object = {}): Object\n\t{\n\t\tif(!this.data.has(key))\n\t\t{\n\t\t\treturn defValue\n\t\t}\n\t\t\n\t\tlet data = this.data.get(key)\n\t\t\n\t\ttry\n\t\t{\n\t\t\tdata = JSON.parse(data)\n\t\t}\n\t\tcatch( error )\n\t\t{\n\t\t\tthis.getLogger().error(error)\n\t\t\tdata = defValue\n\t\t}\n\t\t\n\t\tif(!Type.isObject(data))\n\t\t{\n\t\t\tdata = defValue\n\t\t}\n\t\t\n\t\treturn data\n\t}\n\t\n\tgetFloat(key: string, defValue: number = 0.0): number\n\t{\n\t\tif(!this.data.has(key))\n\t\t{\n\t\t\treturn defValue\n\t\t}\n\t\t\n\t\treturn Text.toNumber(this.data.get(key))\n\t}\n\t\n\tgetInteger(key: string, defValue: number = 0): number\n\t{\n\t\tif(!this.data.has(key))\n\t\t{\n\t\t\treturn defValue\n\t\t}\n\t\t\n\t\treturn Text.toInteger(this.data.get(key))\n\t}\n\t\n\tgetBoolYN(key: string, defValue: boolean = true): boolean\n\t{\n\t\tif(!this.data.has(key))\n\t\t{\n\t\t\treturn defValue\n\t\t}\n\t\t\n\t\treturn Text.toBoolean(this.data.get(key))\n\t}\n\t\n\tgetBoolNY(key: string, defValue: boolean = false): boolean\n\t{\n\t\tif(!this.data.has(key))\n\t\t{\n\t\t\treturn defValue\n\t\t}\n\t\t\n\t\treturn Text.toBoolean(this.data.get(key))\n\t}\n\t\n\tgetString(key: string, defValue: string = ''): string\n\t{\n\t\tif(!this.data.has(key))\n\t\t{\n\t\t\treturn defValue\n\t\t}\n\t\t\n\t\treturn this.data.get(key).toString()\n\t}\n\t\n\t\n\tgetDate(\n\t\tkey: string,\n\t\tdefValue: null|DateTime = null\n\t): null|DateTime\n\t{\n\t\tif(!this.data.has(key))\n\t\t{\n\t\t\treturn defValue\n\t\t}\n\t\t\n\t\ttry\n\t\t{\n\t\t\tlet result = Text.toDateTime(\n\t\t\t\tthis.data.get(key).toString()\n\t\t\t)\n\t\t\tif(result.isValid)\n\t\t\t{\n\t\t\t\treturn result\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn defValue\n\t\t\t}\n\t\t}\n\t\tcatch( error )\n\t\t{\n\t\t\treturn defValue\n\t\t}\n\t}\n\t\n\t// endregion ////\n\t\n\t// region Tools ////\n\tencode(value: any): string\n\t{\n\t\treturn JSON.stringify(value)\n\t}\n\t\n\tdecode(\n\t\tdata: string,\n\t\tdefaultValue: any\n\t): any\n\t{\n\t\ttry\n\t\t{\n\t\t\tif(data.length > 0)\n\t\t\t{\n\t\t\t\treturn JSON.parse(data)\n\t\t\t}\n\t\t\t\n\t\t\treturn defaultValue\n\t\t}\n\t\tcatch( error )\n\t\t{\n\t\t\tthis.getLogger().warn(error, data)\n\t\t}\n\t\t\n\t\treturn defaultValue\n\t}\n\t\n\t// endregion ////\n\t\n\t// region Save ////\n\tprotected getMethodSave(): string\n\t{\n\t\tswitch( this._type )\n\t\t{\n\t\t\tcase 'app':\n\t\t\t\treturn 'app.option.set'\n\t\t\tcase 'user':\n\t\t\t\treturn 'user.option.set'\n\t\t}\n\t}\n\t\n\tpublic async save(\n\t\toptions: any,\n\t\toptionsPull?: {\n\t\t\tmoduleId: string,\n\t\t\tcommand: string,\n\t\t\tparams: any,\n\t\t}\n\t): Promise<Result>\n\t{\n\t\tconst commands = []\n\t\tcommands.push({\n\t\t\tmethod: this.getMethodSave(),\n\t\t\tparams: {\n\t\t\t\toptions\n\t\t\t}\n\t\t})\n\t\t\n\t\tif(Type.isObject(optionsPull))\n\t\t{\n\t\t\tcommands.push({\n\t\t\t\tmethod: 'pull.application.event.add',\n\t\t\t\tparams: {\n\t\t\t\t\tCOMMAND: optionsPull?.command,\n\t\t\t\t\tPARAMS: optionsPull?.params,\n\t\t\t\t\tMODULE_ID: optionsPull?.moduleId\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._b24.callBatch(commands, true)\n\t}\n\t\n\t// endregion ////\n}","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport Text from '../tools/text'\nimport type { StorageManagerParams, TypeStorageManager } from '../types/pull'\n\nexport class StorageManager\n\timplements TypeStorageManager\n{\n\tprivate _logger: null|LoggerBrowser = null\n\t\n\tprivate readonly userId: number\n\tprivate readonly siteId: string\n\t\n\tconstructor(params: StorageManagerParams = {})\n\t{\n\t\tthis.userId = params.userId ? Text.toInteger(params.userId) : 0\n\t\tthis.siteId = params.siteId ?? 'none'\n\t}\n\t\n\tsetLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t}\n\t\n\tgetLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(\n\t\t\t\t`NullLogger`\n\t\t\t)\n\t\t\t\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._logger\n\t}\n\t\n\tset(\n\t\tname: string,\n\t\tvalue: any\n\t): void\n\t{\n\t\tif (typeof window.localStorage === 'undefined')\n\t\t{\n\t\t\tthis.getLogger().error(new Error('undefined window.localStorage'))\n\t\t\treturn\n\t\t}\n\t\t\n\t\tif(\n\t\t\ttypeof value !== 'string'\n\t\t\t&& value\n\t\t)\n\t\t{\n\t\t\tvalue = JSON.stringify(value)\n\t\t}\n\t\t\n\t\twindow.localStorage.setItem(\n\t\t\tthis._getKey(name),\n\t\t\tvalue\n\t\t)\n\t}\n\t\n\tget(\n\t\tname: string,\n\t\tdefaultValue: any\n\t): any\n\t{\n\t\tif(typeof window.localStorage === 'undefined')\n\t\t{\n\t\t\treturn defaultValue || null\n\t\t}\n\t\t\n\t\tconst result = window.localStorage.getItem(this._getKey(name))\n\t\tif(result === null)\n\t\t{\n\t\t\treturn defaultValue || null\n\t\t}\n\t\t\n\t\treturn JSON.parse(result)\n\t}\n\t\n\tremove(name: string): void\n\t{\n\t\tif(typeof window.localStorage === 'undefined')\n\t\t{\n\t\t\tthis.getLogger().error(new Error('undefined window.localStorage'))\n\t\t\treturn\n\t\t}\n\t\t\n\t\treturn window.localStorage.removeItem(\n\t\t\tthis._getKey(name)\n\t\t)\n\t}\n\t\n\tprivate _getKey(name: string): string\n\t{\n\t\treturn `@bitrix24/b24jssdk-pull-${this.userId}-${this.siteId}-${name}`\n\t}\n\t\n\tcompareKey(\n\t\teventKey: string,\n\t\tuserKey: string\n\t): boolean\n\t{\n\t\treturn eventKey === this._getKey(userKey)\n\t}\n}","export class ErrorNotConnected extends Error\n{\n\tconstructor(message: string)\n\t{\n\t\tsuper(message)\n\t\tthis.name = 'ErrorNotConnected'\n\t}\n}\n\nexport class ErrorTimeout extends Error\n{\n\tconstructor(message: string)\n\t{\n\t\tsuper(message)\n\t\tthis.name = 'ErrorTimeout'\n\t}\n}\n","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport { ErrorNotConnected, ErrorTimeout } from './errors'\nimport Type from '../tools/type'\nimport Text from '../tools/text'\nimport {\n\ttype JsonRpcRequest,\n\tListRpcError,\n\ttype RpcRequest,\n\ttype TypeConnector,\n\ttype TypeJsonRpcConfig, type TypePullClientMessageBatch\n} from '../types/pull'\nimport type { RpcCommand, RpcCommandResult, TypeRpcResponseAwaiters } from '../types/pull'\n\nconst JSON_RPC_VERSION = '2.0'\n\nexport class JsonRpc\n{\n\tprivate _logger: null|LoggerBrowser = null\n\t\n\tprivate _connector: TypeConnector\n\tprivate _idCounter: number = 0\n\t\n\tprivate _handlers: Record<string, (params: any) => RpcCommandResult> = {}\n\t\n\tprivate _rpcResponseAwaiters: Map<number, TypeRpcResponseAwaiters> = new Map()\n\t\n\tconstructor(options: TypeJsonRpcConfig)\n\t{\n\t\tthis._connector = options.connector\n\t\t\n\t\tif(Type.isPlainObject(options.handlers))\n\t\t{\n\t\t\tfor(const method in options.handlers)\n\t\t\t{\n\t\t\t\tthis.handle(method, options.handlers[method]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tsetLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t}\n\t\n\tgetLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(\n\t\t\t\t`NullLogger`\n\t\t\t)\n\t\t\t\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._logger\n\t}\n\t\n\t/**\n\t * @param {string} method\n\t * @param {function} handler\n\t */\n\thandle(\n\t\tmethod: string,\n\t\thandler: (params: any) => RpcCommandResult\n\t)\n\t{\n\t\tthis._handlers[method] = handler;\n\t}\n\t\n\t/**\n\t * Sends RPC command to the server.\n\t *\n\t * @param {string} method Method name\n\t * @param {object} params\n\t * @param {int} timeout\n\t * @returns {Promise}\n\t */\n\tasync executeOutgoingRpcCommand(\n\t\tmethod: string,\n\t\tparams: object,\n\t\ttimeout: number = 5\n\t): Promise<any>\n\t{\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst request = this.createRequest(\n\t\t\t\tmethod,\n\t\t\t\tparams\n\t\t\t)\n\t\t\t\n\t\t\tif(!this._connector.send(\n\t\t\t\tJSON.stringify(request)\n\t\t\t))\n\t\t\t{\n\t\t\t\treject(new ErrorNotConnected('websocket is not connected'))\n\t\t\t}\n\t\t\t\n\t\t\tconst timeoutHandler = setTimeout(\n\t\t\t\t() => {\n\t\t\t\t\tthis._rpcResponseAwaiters.delete(request.id)\n\t\t\t\t\treject(new ErrorTimeout('no response'))\n\t\t\t\t},\n\t\t\t\ttimeout * 1_000\n\t\t\t)\n\t\t\t\n\t\t\tthis._rpcResponseAwaiters.set(\n\t\t\t\trequest.id,\n\t\t\t\t{\n\t\t\t\t\tresolve,\n\t\t\t\t\treject,\n\t\t\t\t\ttimeout: timeoutHandler\n\t\t\t\t} as TypeRpcResponseAwaiters\n\t\t\t)\n\t\t})\n\t}\n\t\n\t/**\n\t * Executes array or rpc commands.\n\t * Returns array of promises, each promise will be resolved individually.\n\t *\n\t * @param {JsonRpcRequest[]} batch\n\t * @returns {Promise[]}\n\t */\n\tprivate executeOutgoingRpcBatch(batch: JsonRpcRequest[]): Promise<any>[]\n\t{\n\t\tconst requests: RpcRequest[] = []\n\t\tconst promises: Promise<any>[] = []\n\n\t\t// eslint-disable-next-line\n\t\tbatch.forEach(({ method, params, id }) => {\n\t\t\tconst request = this.createRequest(\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t\tid\n\t\t\t)\n\t\t\trequests.push(request)\n\t\t\tpromises.push(new Promise((resolve, reject) => this._rpcResponseAwaiters.set(\n\t\t\t\trequest.id,\n\t\t\t\t{\n\t\t\t\t\tresolve,\n\t\t\t\t\treject\n\t\t\t\t} as TypeRpcResponseAwaiters\n\t\t\t)))\n\t\t})\n\t\t\n\t\tthis._connector.send(JSON.stringify(requests));\n\t\treturn promises\n\t}\n\t\n\tprivate processRpcResponse(response: RpcCommandResult): void\n\t{\n\t\tif (\n\t\t\t'id' in response\n\t\t\t&& this._rpcResponseAwaiters.has(Number(response.id))\n\t\t)\n\t\t{\n\t\t\tconst awaiter = this._rpcResponseAwaiters.get(Number(response.id))\n\t\t\tif(awaiter)\n\t\t\t{\n\t\t\t\tif('result' in response)\n\t\t\t\t{\n\t\t\t\t\tawaiter.resolve(response.result)\n\t\t\t\t}\n\t\t\t\telse if('error' in response)\n\t\t\t\t{\n\t\t\t\t\tawaiter.reject(response?.error || 'error')\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tawaiter.reject(\"wrong response structure\")\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tclearTimeout(awaiter.timeout)\n\t\t\t\tthis._rpcResponseAwaiters.delete(Number(response.id))\n\t\t\t}\n\t\t\t\n\t\t\treturn\n\t\t}\n\t\t\n\t\tthis.getLogger().error(\n\t\t\tnew Error(\n\t\t\t\t`${Text.getDateForLog()}: Pull: Received rpc response with unknown id`\n\t\t\t),\n\t\t\tresponse\n\t\t)\n\t}\n\t\n\tparseJsonRpcMessage(message: string): RpcCommandResult[]|RpcCommandResult|void\n\t{\n\t\tlet decoded\n\t\ttry\n\t\t{\n\t\t\tdecoded = JSON.parse(message);\n\t\t}\n\t\tcatch (error)\n\t\t{\n\t\t\tthis.getLogger().error(\n\t\t\t\tnew Error(\n\t\t\t\t\t`${Text.getDateForLog()}: Pull: Could not decode json rpc message`\n\t\t\t\t),\n\t\t\t\terror\n\t\t\t)\n\t\t\t\n\t\t\treturn\n\t\t}\n\t\t\n\t\tif(Type.isArray(decoded))\n\t\t{\n\t\t\treturn this.executeIncomingRpcBatch(decoded);\n\t\t}\n\t\telse if(Type.isJsonRpcRequest(decoded))\n\t\t{\n\t\t\treturn this.executeIncomingRpcCommand(decoded);\n\t\t}\n\t\telse if(Type.isJsonRpcResponse(decoded))\n\t\t{\n\t\t\treturn this.processRpcResponse(decoded);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.getLogger().error(\n\t\t\t\tnew Error(\n\t\t\t\t\t`${Text.getDateForLog()}: Pull: unknown rpc packet`\n\t\t\t\t),\n\t\t\t\tdecoded\n\t\t\t)\n\t\t}\n\t}\n\t\n\t/**\n\t * Executes RPC command, received from the server\n\t *\n\t * @param {string} method\n\t * @param {object} params\n\t * @returns {object}\n\t */\n\tprivate executeIncomingRpcCommand({ method, params }: RpcCommand): RpcCommandResult\n\t{\n\t\tif (method in this._handlers)\n\t\t{\n\t\t\treturn this._handlers[method].call(this, params || {})\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tjsonrpc: JSON_RPC_VERSION,\n\t\t\terror: ListRpcError.MethodNotFound\n\t\t} as RpcCommandResult\n\t}\n\t\n\tprivate executeIncomingRpcBatch(batch: RpcCommand[]): RpcCommandResult[]\n\t{\n\t\tconst result: RpcCommandResult[] = []\n\t\t\n\t\tfor (const command of batch)\n\t\t{\n\t\t\tif ('jsonrpc' in command)\n\t\t\t{\n\t\t\t\tif ('method' in command)\n\t\t\t\t{\n\t\t\t\t\tconst commandResult = this.executeIncomingRpcCommand(command)\n\t\t\t\t\tif (commandResult)\n\t\t\t\t\t{\n\t\t\t\t\t\tcommandResult['jsonrpc'] = JSON_RPC_VERSION;\n\t\t\t\t\t\tcommandResult['id'] = command[\"id\"];\n\t\t\t\t\t\t\n\t\t\t\t\t\tresult.push(commandResult)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.processRpcResponse(command)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.getLogger().error(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t`${Text.getDateForLog()}: Pull: unknown rpc command in batch`\n\t\t\t\t\t),\n\t\t\t\t\tcommand\n\t\t\t\t)\n\t\t\t\t\n\t\t\t\tresult.push({\n\t\t\t\t\tjsonrpc: JSON_RPC_VERSION,\n\t\t\t\t\terror: ListRpcError.InvalidRequest,\n\t\t\t\t} as RpcCommandResult)\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn result;\n\t}\n\t\n\tprivate nextId(): number\n\t{\n\t\treturn ++this._idCounter\n\t}\n\t\n\tpublic createPublishRequest(messageBatch: TypePullClientMessageBatch[]): RpcRequest[]\n\t{\n\t\treturn messageBatch.map(\n\t\t\tmessage => this.createRequest(\n\t\t\t\t'publish',\n\t\t\t\tmessage\n\t\t\t)\n\t\t)\n\t}\n\t\n\tprivate createRequest(\n\t\tmethod: string,\n\t\tparams: any,\n\t\tid?: number\n\t): RpcRequest\n\t{\n\t\tif(!id)\n\t\t{\n\t\t\tid = this.nextId()\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tjsonrpc: JSON_RPC_VERSION,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t\tid\n\t\t} as RpcRequest\n\t}\n}","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport Type from '../tools/type'\nimport Text from '../tools/text'\nimport { StorageManager } from './storage-manager'\nimport { LsKeys, type SharedConfigCallbacks, type SharedConfigParams, type TypeStorageManager} from '../types/pull'\n\nexport class SharedConfig\n{\n\tprivate _logger: null|LoggerBrowser = null\n\tprivate readonly _storage: TypeStorageManager\n\tprivate _ttl: number = 24 * 60 * 60\n\tprivate _callbacks: SharedConfigCallbacks\n\t\n\tconstructor(params: SharedConfigParams = {})\n\t{\n\t\tparams = params || {};\n\t\tthis._storage = params.storage || new StorageManager();\n\t\t\n\t\tthis._callbacks = {\n\t\t\tonWebSocketBlockChanged: Type.isFunction(params.onWebSocketBlockChanged)\n\t\t\t\t? params.onWebSocketBlockChanged\n\t\t\t\t: () => {}\n\t\t} as SharedConfigCallbacks\n\t\t\n\t\tif(this._storage)\n\t\t{\n\t\t\twindow.addEventListener(\n\t\t\t\t'storage',\n\t\t\t\tthis.onLocalStorageSet.bind(this)\n\t\t\t)\n\t\t}\n\t}\n\t\n\tsetLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t}\n\t\n\tgetLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(\n\t\t\t\t`NullLogger`\n\t\t\t)\n\t\t\t\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._logger\n\t}\n\t\n\tprivate onLocalStorageSet(params: StorageEvent): void\n\t{\n\t\tif (\n\t\t\t(this._storage as StorageManager).compareKey(\n\t\t\t\tparams.key || '',\n\t\t\t\tLsKeys.WebsocketBlocked\n\t\t\t)\n\t\t\t&& params.newValue !== params.oldValue\n\t\t)\n\t\t{\n\t\t\tthis._callbacks.onWebSocketBlockChanged({\n\t\t\t\tisWebSocketBlocked: this.isWebSocketBlocked()\n\t\t\t})\n\t\t}\n\t}\n\t\n\tisWebSocketBlocked(): boolean\n\t{\n\t\tif(!this._storage)\n\t\t{\n\t\t\treturn false\n\t\t}\n\t\t\n\t\treturn this._storage.get(LsKeys.WebsocketBlocked, 0) > Date.now()\n\t}\n\t\n\tsetWebSocketBlocked(isWebSocketBlocked: boolean): boolean\n\t{\n\t\tif(!this._storage)\n\t\t{\n\t\t\treturn false\n\t\t}\n\t\t\n\t\ttry\n\t\t{\n\t\t\tthis._storage.set(\n\t\t\t\tLsKeys.WebsocketBlocked,\n\t\t\t\t(isWebSocketBlocked ? Date.now() + this._ttl : 0)\n\t\t\t)\n\t\t}\n\t\tcatch(error)\n\t\t{\n\t\t\tthis.getLogger().error(new Error(\n\t\t\t\t`${Text.getDateForLog()}: Pull: Could not save WS_blocked flag in local storage. Error: `\n\t\t\t), error)\n\t\t\t\n\t\t\treturn false\n\t\t}\n\t\t\n\t\treturn true\n\t}\n\t\n\tisLongPollingBlocked(): boolean\n\t{\n\t\tif(!this._storage)\n\t\t{\n\t\t\treturn false\n\t\t}\n\t\t\n\t\treturn this._storage.get(LsKeys.LongPollingBlocked, 0) > Date.now()\n\t}\n\t\n\tsetLongPollingBlocked(isLongPollingBlocked: boolean)\n\t{\n\t\tif(!this._storage)\n\t\t{\n\t\t\treturn false\n\t\t}\n\t\t\n\t\ttry\n\t\t{\n\t\t\tthis._storage.set(\n\t\t\t\tLsKeys.LongPollingBlocked,\n\t\t\t\t(isLongPollingBlocked ? Date.now() + this._ttl : 0)\n\t\t\t)\n\t\t}\n\t\tcatch(error)\n\t\t{\n\t\t\tthis.getLogger().error(\n\t\t\t\tnew Error(\n\t\t\t\t\t`${Text.getDateForLog()}: Pull: Could not save LP_blocked flag in local storage. Error: `\n\t\t\t\t),\n\t\t\t\terror\n\t\t\t)\n\t\t\t\n\t\t\treturn false\n\t\t}\n\t\t\n\t\treturn true\n\t}\n\t\n\tisLoggingEnabled(): boolean\n\t{\n\t\tif (!this._storage)\n\t\t{\n\t\t\treturn false\n\t\t}\n\t\t\n\t\treturn this._storage.get(LsKeys.LoggingEnabled, 0) > this.getTimestamp()\n\t}\n\t\n\tsetLoggingEnabled(isLoggingEnabled: boolean): boolean\n\t{\n\t\tif(!this._storage)\n\t\t{\n\t\t\treturn false\n\t\t}\n\t\t\n\t\ttry\n\t\t{\n\t\t\tthis._storage.set(\n\t\t\t\tLsKeys.LoggingEnabled,\n\t\t\t\t(isLoggingEnabled ? this.getTimestamp() + this._ttl : 0)\n\t\t\t)\n\t\t}\n\t\tcatch(error)\n\t\t{\n\t\t\tthis.getLogger().error(new Error(\n\t\t\t\t`${Text.getDateForLog()}: LocalStorage error: `\n\t\t\t), error)\n\t\t\t\n\t\t\treturn false\n\t\t}\n\t\t\n\t\treturn true\n\t}\n\t\n\t// region Tools ////\n\tgetTimestamp(): number\n\t{\n\t\treturn Date.now()\n\t}\n\t// endregion ////\n}","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport { AjaxResult } from '../core/http/ajaxResult'\nimport type { TypeChanel, TypeChannelManagerParams, TypePublicIdDescriptor } from '../types/pull'\nimport type { TypeB24 } from '../types/b24'\nimport type { Payload } from '../types/payloads'\n\nexport class ChannelManager\n{\n\tprivate _logger: null|LoggerBrowser = null\n\tprivate _publicIds: Map<number, TypeChanel>\n\tprivate _restClient: TypeB24\n\tprivate _getPublicListMethod: string\n\t\n\tconstructor(params: TypeChannelManagerParams)\n\t{\n\t\tthis._publicIds = new Map()\n\t\t\n\t\tthis._restClient = params.b24\n\t\tthis._getPublicListMethod = params.getPublicListMethod\n\t}\n\t\n\tsetLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t}\n\t\n\tgetLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(\n\t\t\t\t`NullLogger`\n\t\t\t)\n\t\t\t\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._logger\n\t}\n\t\n\t/**\n\t * @param {Array} users Array of user ids.\n\t * @return {Promise}\n\t */\n\tasync getPublicIds(users: number[]): Promise<Record<number, TypeChanel>>\n\t{\n\t\tconst now = new Date()\n\t\t\n\t\tlet result: Record<number, TypeChanel> = {}\n\t\tlet unknownUsers: number[] = []\n\t\t\n\t\tusers.forEach((userId) => {\n\t\t\tconst chanel = this._publicIds.get(userId)\n\t\t\t\n\t\t\tif(\n\t\t\t\tchanel\n\t\t\t\t&& chanel.end > now\n\t\t\t)\n\t\t\t{\n\t\t\t\tresult[chanel.userId] = chanel\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tunknownUsers.push(userId)\n\t\t\t}\n\t\t})\n\t\t\n\t\tif(unknownUsers.length === 0)\n\t\t{\n\t\t\treturn Promise.resolve(result)\n\t\t}\n\t\t\n\t\t/**\n\t\t * @memo we not use Promise.reject()\n\t\t */\n\t\treturn new Promise((resolve) => {\n\t\t\tthis._restClient.callMethod(\n\t\t\t\tthis._getPublicListMethod,\n\t\t\t\t{\n\t\t\t\t\tusers: unknownUsers\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then((response: AjaxResult) => {\n\t\t\t\tconst data = (response.getData() as Payload<TypePublicIdDescriptor>).result\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * @memo test this\n\t\t\t\t */\n\t\t\t\tthis.setPublicIds(Object.values(data))\n\t\t\t\t\n\t\t\t\tunknownUsers.forEach((userId) => {\n\t\t\t\t\tconst chanel = this._publicIds.get(userId)\n\t\t\t\t\tif(chanel)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult[chanel.userId] = chanel\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\t.catch((error: Error|string) => {\n\t\t\t\tthis.getLogger().error(error)\n\t\t\t\treturn resolve({})\n\t\t\t})\n\t\t})\n\t}\n\t\n\t/**\n\t * @param {TypePublicIdDescriptor[]} publicIds\n\t */\n\tpublic setPublicIds(publicIds: TypePublicIdDescriptor[]): void\n\t{\n\t\tpublicIds.forEach((publicIdDescriptor: TypePublicIdDescriptor) => {\n\t\t\tconst userId = Number(publicIdDescriptor.user_id)\n\t\t\tthis._publicIds.set(\n\t\t\t\tuserId,\n\t\t\t\t{\n\t\t\t\t\tuserId: userId,\n\t\t\t\t\tpublicId: publicIdDescriptor.public_id,\n\t\t\t\t\tsignature: publicIdDescriptor.signature,\n\t\t\t\t\tstart: new Date(publicIdDescriptor.start),\n\t\t\t\t\tend: new Date(publicIdDescriptor.end)\n\t\t\t\t} as TypeChanel\n\t\t\t)\n\t\t})\n\t}\n}","import $protobuf from 'protobufjs'\n\n/*eslint-disable block-scoped-var, no-redeclare, no-control-regex, no-prototype-builtins*/\n//\"use strict\";\n\n// Common aliases\nlet $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nexport const $root = $protobuf.roots[\"push-server\"] || ($protobuf.roots[\"push-server\"] = {});\n\n$root.RequestBatch = (function()\n{\n\t\n\t/**\n\t * Properties of a RequestBatch.\n\t * @exports IRequestBatch\n\t * @interface IRequestBatch\n\t * @property {Array.<Request>|null} [requests] RequestBatch requests\n\t */\n\t\n\t/**\n\t * Constructs a new RequestBatch.\n\t * @exports RequestBatch\n\t * @classdesc Represents a RequestBatch.\n\t * @implements IRequestBatch\n\t * @constructor\n\t * @param {IRequestBatch=} [properties] Properties to set\n\t */\n\tfunction RequestBatch(properties)\n\t{\n\t\tthis.requests = [];\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * RequestBatch requests.\n\t * @member {Array.<Request>} requests\n\t * @memberof RequestBatch\n\t * @instance\n\t */\n\tRequestBatch.prototype.requests = $util.emptyArray;\n\t\n\t/**\n\t * Creates a new RequestBatch instance using the specified properties.\n\t * @function create\n\t * @memberof RequestBatch\n\t * @static\n\t * @param {IRequestBatch=} [properties] Properties to set\n\t * @returns {RequestBatch} RequestBatch instance\n\t */\n\tRequestBatch.create = function create(properties)\n\t{\n\t\treturn new RequestBatch(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified RequestBatch message. Does not implicitly {@link RequestBatch.verify|verify} messages.\n\t * @function encode\n\t * @memberof RequestBatch\n\t * @static\n\t * @param {RequestBatch} message RequestBatch message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tRequestBatch.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.requests != null && message.requests.length)\n\t\t{\n\t\t\tfor(var i = 0; i < message.requests.length; ++i)\n\t\t\t\t$root.Request.encode(message.requests[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a RequestBatch message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof RequestBatch\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {RequestBatch} RequestBatch\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tRequestBatch.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.RequestBatch();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tif(!(message.requests && message.requests.length))\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage.requests = [];\n\t\t\t\t\t}\n\t\t\t\t\tmessage.requests.push($root.Request.decode(reader, reader.uint32()));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn RequestBatch;\n})();\n\n$root.Request = (function()\n{\n\t\n\t/**\n\t * Properties of a Request.\n\t * @exports IRequest\n\t * @interface IRequest\n\t * @property {IncomingMessagesRequest|null} [incomingMessages] Request incomingMessages\n\t * @property {ChannelStatsRequest|null} [channelStats] Request channelStats\n\t * @property {ServerStatsRequest|null} [serverStats] Request serverStats\n\t */\n\t\n\t/**\n\t * Constructs a new Request.\n\t * @exports Request\n\t * @classdesc Represents a Request.\n\t * @implements IRequest\n\t * @constructor\n\t * @param {IRequest=} [properties] Properties to set\n\t */\n\tfunction Request(properties)\n\t{\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Request incomingMessages.\n\t * @member {IncomingMessagesRequest|null|undefined} incomingMessages\n\t * @memberof Request\n\t * @instance\n\t */\n\tRequest.prototype.incomingMessages = null;\n\t\n\t/**\n\t * Request channelStats.\n\t * @member {ChannelStatsRequest|null|undefined} channelStats\n\t * @memberof Request\n\t * @instance\n\t */\n\tRequest.prototype.channelStats = null;\n\t\n\t/**\n\t * Request serverStats.\n\t * @member {ServerStatsRequest|null|undefined} serverStats\n\t * @memberof Request\n\t * @instance\n\t */\n\tRequest.prototype.serverStats = null;\n\t\n\t// OneOf field names bound to virtual getters and setters\n\tvar $oneOfFields;\n\t\n\t/**\n\t * Request command.\n\t * @member {\"incomingMessages\"|\"channelStats\"|\"serverStats\"|undefined} command\n\t * @memberof Request\n\t * @instance\n\t */\n\tObject.defineProperty(Request.prototype, \"command\", {\n\t\tget: $util.oneOfGetter($oneOfFields = [\n\t\t\t\"incomingMessages\",\n\t\t\t\"channelStats\",\n\t\t\t\"serverStats\"\n\t\t]),\n\t\tset: $util.oneOfSetter($oneOfFields)\n\t});\n\t\n\t/**\n\t * Creates a new Request instance using the specified properties.\n\t * @function create\n\t * @memberof Request\n\t * @static\n\t * @param {IRequest=} [properties] Properties to set\n\t * @returns {Request} Request instance\n\t */\n\tRequest.create = function create(properties)\n\t{\n\t\treturn new Request(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified Request message. Does not implicitly {@link Request.verify|verify} messages.\n\t * @function encode\n\t * @memberof Request\n\t * @static\n\t * @param {Request} message Request message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tRequest.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.incomingMessages != null && message.hasOwnProperty(\"incomingMessages\"))\n\t\t{\n\t\t\t$root.IncomingMessagesRequest.encode(message.incomingMessages, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n\t\t}\n\t\tif(message.channelStats != null && message.hasOwnProperty(\"channelStats\"))\n\t\t{\n\t\t\t$root.ChannelStatsRequest.encode(message.channelStats, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n\t\t}\n\t\tif(message.serverStats != null && message.hasOwnProperty(\"serverStats\"))\n\t\t{\n\t\t\t$root.ServerStatsRequest.encode(message.serverStats, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a Request message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof Request\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {Request} Request\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tRequest.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.Request();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.incomingMessages = $root.IncomingMessagesRequest.decode(reader, reader.uint32());\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.channelStats = $root.ChannelStatsRequest.decode(reader, reader.uint32());\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.serverStats = $root.ServerStatsRequest.decode(reader, reader.uint32());\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn Request;\n})();\n\n$root.IncomingMessagesRequest = (function()\n{\n\t\n\t/**\n\t * Properties of an IncomingMessagesRequest.\n\t * @exports IIncomingMessagesRequest\n\t * @interface IIncomingMessagesRequest\n\t * @property {Array.<IncomingMessage>|null} [messages] IncomingMessagesRequest messages\n\t */\n\t\n\t/**\n\t * Constructs a new IncomingMessagesRequest.\n\t * @exports IncomingMessagesRequest\n\t * @classdesc Represents an IncomingMessagesRequest.\n\t * @implements IIncomingMessagesRequest\n\t * @constructor\n\t * @param {IIncomingMessagesRequest=} [properties] Properties to set\n\t */\n\tfunction IncomingMessagesRequest(properties)\n\t{\n\t\tthis.messages = [];\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * IncomingMessagesRequest messages.\n\t * @member {Array.<IncomingMessage>} messages\n\t * @memberof IncomingMessagesRequest\n\t * @instance\n\t */\n\tIncomingMessagesRequest.prototype.messages = $util.emptyArray;\n\t\n\t/**\n\t * Creates a new IncomingMessagesRequest instance using the specified properties.\n\t * @function create\n\t * @memberof IncomingMessagesRequest\n\t * @static\n\t * @param {IIncomingMessagesRequest=} [properties] Properties to set\n\t * @returns {IncomingMessagesRequest} IncomingMessagesRequest instance\n\t */\n\tIncomingMessagesRequest.create = function create(properties)\n\t{\n\t\treturn new IncomingMessagesRequest(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified IncomingMessagesRequest message. Does not implicitly {@link IncomingMessagesRequest.verify|verify} messages.\n\t * @function encode\n\t * @memberof IncomingMessagesRequest\n\t * @static\n\t * @param {IncomingMessagesRequest} message IncomingMessagesRequest message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tIncomingMessagesRequest.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.messages != null && message.messages.length)\n\t\t{\n\t\t\tfor(var i = 0; i < message.messages.length; ++i)\n\t\t\t\t$root.IncomingMessage.encode(message.messages[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes an IncomingMessagesRequest message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof IncomingMessagesRequest\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {IncomingMessagesRequest} IncomingMessagesRequest\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tIncomingMessagesRequest.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.IncomingMessagesRequest();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tif(!(message.messages && message.messages.length))\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage.messages = [];\n\t\t\t\t\t}\n\t\t\t\t\tmessage.messages.push($root.IncomingMessage.decode(reader, reader.uint32()));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn IncomingMessagesRequest;\n})();\n\n$root.IncomingMessage = (function()\n{\n\t\n\t/**\n\t * Properties of an IncomingMessage.\n\t * @exports IIncomingMessage\n\t * @interface IIncomingMessage\n\t * @property {Array.<Receiver>|null} [receivers] IncomingMessage receivers\n\t * @property {Sender|null} [sender] IncomingMessage sender\n\t * @property {string|null} [body] IncomingMessage body\n\t * @property {number|null} [expiry] IncomingMessage expiry\n\t * @property {string|null} [type] IncomingMessage type\n\t */\n\t\n\t/**\n\t * Constructs a new IncomingMessage.\n\t * @exports IncomingMessage\n\t * @classdesc Represents an IncomingMessage.\n\t * @implements IIncomingMessage\n\t * @constructor\n\t * @param {IIncomingMessage=} [properties] Properties to set\n\t */\n\tfunction IncomingMessage(properties)\n\t{\n\t\tthis.receivers = [];\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * IncomingMessage receivers.\n\t * @member {Array.<Receiver>} receivers\n\t * @memberof IncomingMessage\n\t * @instance\n\t */\n\tIncomingMessage.prototype.receivers = $util.emptyArray;\n\t\n\t/**\n\t * IncomingMessage sender.\n\t * @member {Sender|null|undefined} sender\n\t * @memberof IncomingMessage\n\t * @instance\n\t */\n\tIncomingMessage.prototype.sender = null;\n\t\n\t/**\n\t * IncomingMessage body.\n\t * @member {string} body\n\t * @memberof IncomingMessage\n\t * @instance\n\t */\n\tIncomingMessage.prototype.body = \"\";\n\t\n\t/**\n\t * IncomingMessage expiry.\n\t * @member {number} expiry\n\t * @memberof IncomingMessage\n\t * @instance\n\t */\n\tIncomingMessage.prototype.expiry = 0;\n\t\n\t/**\n\t * IncomingMessage type.\n\t * @member {string} type\n\t * @memberof IncomingMessage\n\t * @instance\n\t */\n\tIncomingMessage.prototype.type = \"\";\n\t\n\t/**\n\t * Creates a new IncomingMessage instance using the specified properties.\n\t * @function create\n\t * @memberof IncomingMessage\n\t * @static\n\t * @param {IIncomingMessage=} [properties] Properties to set\n\t * @returns {IncomingMessage} IncomingMessage instance\n\t */\n\tIncomingMessage.create = function create(properties)\n\t{\n\t\treturn new IncomingMessage(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified IncomingMessage message. Does not implicitly {@link IncomingMessage.verify|verify} messages.\n\t * @function encode\n\t * @memberof IncomingMessage\n\t * @static\n\t * @param {IncomingMessage} message IncomingMessage message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tIncomingMessage.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.receivers != null && message.receivers.length)\n\t\t{\n\t\t\tfor(var i = 0; i < message.receivers.length; ++i)\n\t\t\t\t$root.Receiver.encode(message.receivers[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n\t\t}\n\t\tif(message.sender != null && message.hasOwnProperty(\"sender\"))\n\t\t{\n\t\t\t$root.Sender.encode(message.sender, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n\t\t}\n\t\tif(message.body != null && message.hasOwnProperty(\"body\"))\n\t\t{\n\t\t\twriter.uint32(/* id 3, wireType 2 =*/26).string(message.body);\n\t\t}\n\t\tif(message.expiry != null && message.hasOwnProperty(\"expiry\"))\n\t\t{\n\t\t\twriter.uint32(/* id 4, wireType 0 =*/32).uint32(message.expiry);\n\t\t}\n\t\tif(message.type != null && message.hasOwnProperty(\"type\"))\n\t\t{\n\t\t\twriter.uint32(/* id 5, wireType 2 =*/42).string(message.type);\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes an IncomingMessage message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof IncomingMessage\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {IncomingMessage} IncomingMessage\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tIncomingMessage.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.IncomingMessage();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tif(!(message.receivers && message.receivers.length))\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage.receivers = [];\n\t\t\t\t\t}\n\t\t\t\t\tmessage.receivers.push($root.Receiver.decode(reader, reader.uint32()));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.sender = $root.Sender.decode(reader, reader.uint32());\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.body = reader.string();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tmessage.expiry = reader.uint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\t\tmessage.type = reader.string();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn IncomingMessage;\n})();\n\n$root.ChannelStatsRequest = (function()\n{\n\t\n\t/**\n\t * Properties of a ChannelStatsRequest.\n\t * @exports IChannelStatsRequest\n\t * @interface IChannelStatsRequest\n\t * @property {Array.<ChannelId>|null} [channels] ChannelStatsRequest channels\n\t */\n\t\n\t/**\n\t * Constructs a new ChannelStatsRequest.\n\t * @exports ChannelStatsRequest\n\t * @classdesc Represents a ChannelStatsRequest.\n\t * @implements IChannelStatsRequest\n\t * @constructor\n\t * @param {IChannelStatsRequest=} [properties] Properties to set\n\t */\n\tfunction ChannelStatsRequest(properties)\n\t{\n\t\tthis.channels = [];\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * ChannelStatsRequest channels.\n\t * @member {Array.<ChannelId>} channels\n\t * @memberof ChannelStatsRequest\n\t * @instance\n\t */\n\tChannelStatsRequest.prototype.channels = $util.emptyArray;\n\t\n\t/**\n\t * Creates a new ChannelStatsRequest instance using the specified properties.\n\t * @function create\n\t * @memberof ChannelStatsRequest\n\t * @static\n\t * @param {IChannelStatsRequest=} [properties] Properties to set\n\t * @returns {ChannelStatsRequest} ChannelStatsRequest instance\n\t */\n\tChannelStatsRequest.create = function create(properties)\n\t{\n\t\treturn new ChannelStatsRequest(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified ChannelStatsRequest message. Does not implicitly {@link ChannelStatsRequest.verify|verify} messages.\n\t * @function encode\n\t * @memberof ChannelStatsRequest\n\t * @static\n\t * @param {ChannelStatsRequest} message ChannelStatsRequest message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tChannelStatsRequest.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.channels != null && message.channels.length)\n\t\t{\n\t\t\tfor(var i = 0; i < message.channels.length; ++i)\n\t\t\t\t$root.ChannelId.encode(message.channels[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a ChannelStatsRequest message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ChannelStatsRequest\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ChannelStatsRequest} ChannelStatsRequest\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tChannelStatsRequest.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.ChannelStatsRequest();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tif(!(message.channels && message.channels.length))\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage.channels = [];\n\t\t\t\t\t}\n\t\t\t\t\tmessage.channels.push($root.ChannelId.decode(reader, reader.uint32()));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn ChannelStatsRequest;\n})();\n\n$root.ChannelId = (function()\n{\n\t\n\t/**\n\t * Properties of a ChannelId.\n\t * @exports IChannelId\n\t * @interface IChannelId\n\t * @property {Uint8Array|null} [id] ChannelId id\n\t * @property {boolean|null} [isPrivate] ChannelId isPrivate\n\t * @property {Uint8Array|null} [signature] ChannelId signature\n\t */\n\t\n\t/**\n\t * Constructs a new ChannelId.\n\t * @exports ChannelId\n\t * @classdesc Represents a ChannelId.\n\t * @implements IChannelId\n\t * @constructor\n\t * @param {IChannelId=} [properties] Properties to set\n\t */\n\tfunction ChannelId(properties)\n\t{\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * ChannelId id.\n\t * @member {Uint8Array} id\n\t * @memberof ChannelId\n\t * @instance\n\t */\n\tChannelId.prototype.id = $util.newBuffer([]);\n\t\n\t/**\n\t * ChannelId isPrivate.\n\t * @member {boolean} isPrivate\n\t * @memberof ChannelId\n\t * @instance\n\t */\n\tChannelId.prototype.isPrivate = false;\n\t\n\t/**\n\t * ChannelId signature.\n\t * @member {Uint8Array} signature\n\t * @memberof ChannelId\n\t * @instance\n\t */\n\tChannelId.prototype.signature = $util.newBuffer([]);\n\t\n\t/**\n\t * Creates a new ChannelId instance using the specified properties.\n\t * @function create\n\t * @memberof ChannelId\n\t * @static\n\t * @param {IChannelId=} [properties] Properties to set\n\t * @returns {ChannelId} ChannelId instance\n\t */\n\tChannelId.create = function create(properties)\n\t{\n\t\treturn new ChannelId(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified ChannelId message. Does not implicitly {@link ChannelId.verify|verify} messages.\n\t * @function encode\n\t * @memberof ChannelId\n\t * @static\n\t * @param {ChannelId} message ChannelId message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tChannelId.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.id != null && message.hasOwnProperty(\"id\"))\n\t\t{\n\t\t\twriter.uint32(/* id 1, wireType 2 =*/10).bytes(message.id);\n\t\t}\n\t\tif(message.isPrivate != null && message.hasOwnProperty(\"isPrivate\"))\n\t\t{\n\t\t\twriter.uint32(/* id 2, wireType 0 =*/16).bool(message.isPrivate);\n\t\t}\n\t\tif(message.signature != null && message.hasOwnProperty(\"signature\"))\n\t\t{\n\t\t\twriter.uint32(/* id 3, wireType 2 =*/26).bytes(message.signature);\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a ChannelId message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ChannelId\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ChannelId} ChannelId\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tChannelId.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.ChannelId();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.id = reader.bytes();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.isPrivate = reader.bool();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.signature = reader.bytes();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn ChannelId;\n})();\n\n$root.ServerStatsRequest = (function()\n{\n\t\n\t/**\n\t * Properties of a ServerStatsRequest.\n\t * @exports IServerStatsRequest\n\t * @interface IServerStatsRequest\n\t */\n\t\n\t/**\n\t * Constructs a new ServerStatsRequest.\n\t * @exports ServerStatsRequest\n\t * @classdesc Represents a ServerStatsRequest.\n\t * @implements IServerStatsRequest\n\t * @constructor\n\t * @param {IServerStatsRequest=} [properties] Properties to set\n\t */\n\tfunction ServerStatsRequest(properties)\n\t{\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Creates a new ServerStatsRequest instance using the specified properties.\n\t * @function create\n\t * @memberof ServerStatsRequest\n\t * @static\n\t * @param {IServerStatsRequest=} [properties] Properties to set\n\t * @returns {ServerStatsRequest} ServerStatsRequest instance\n\t */\n\tServerStatsRequest.create = function create(properties)\n\t{\n\t\treturn new ServerStatsRequest(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified ServerStatsRequest message. Does not implicitly {@link ServerStatsRequest.verify|verify} messages.\n\t * @function encode\n\t * @memberof ServerStatsRequest\n\t * @static\n\t * @param {ServerStatsRequest} message ServerStatsRequest message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tServerStatsRequest.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a ServerStatsRequest message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ServerStatsRequest\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ServerStatsRequest} ServerStatsRequest\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tServerStatsRequest.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.ServerStatsRequest();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn ServerStatsRequest;\n})();\n\n$root.Sender = (function()\n{\n\t\n\t/**\n\t * Properties of a Sender.\n\t * @exports ISender\n\t * @interface ISender\n\t * @property {SenderType|null} [type] Sender type\n\t * @property {Uint8Array|null} [id] Sender id\n\t */\n\t\n\t/**\n\t * Constructs a new Sender.\n\t * @exports Sender\n\t * @classdesc Represents a Sender.\n\t * @implements ISender\n\t * @constructor\n\t * @param {ISender=} [properties] Properties to set\n\t */\n\tfunction Sender(properties)\n\t{\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Sender type.\n\t * @member {SenderType} type\n\t * @memberof Sender\n\t * @instance\n\t */\n\tSender.prototype.type = 0;\n\t\n\t/**\n\t * Sender id.\n\t * @member {Uint8Array} id\n\t * @memberof Sender\n\t * @instance\n\t */\n\tSender.prototype.id = $util.newBuffer([]);\n\t\n\t/**\n\t * Creates a new Sender instance using the specified properties.\n\t * @function create\n\t * @memberof Sender\n\t * @static\n\t * @param {ISender=} [properties] Properties to set\n\t * @returns {Sender} Sender instance\n\t */\n\tSender.create = function create(properties)\n\t{\n\t\treturn new Sender(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified Sender message. Does not implicitly {@link Sender.verify|verify} messages.\n\t * @function encode\n\t * @memberof Sender\n\t * @static\n\t * @param {Sender} message Sender message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tSender.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.type != null && message.hasOwnProperty(\"type\"))\n\t\t{\n\t\t\twriter.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n\t\t}\n\t\tif(message.id != null && message.hasOwnProperty(\"id\"))\n\t\t{\n\t\t\twriter.uint32(/* id 2, wireType 2 =*/18).bytes(message.id);\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a Sender message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof Sender\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {Sender} Sender\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tSender.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.Sender();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.type = reader.int32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.id = reader.bytes();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn Sender;\n})();\n\n/**\n * SenderType enum.\n * @exports SenderType\n * @enum {string}\n * @property {number} UNKNOWN=0 UNKNOWN value\n * @property {number} CLIENT=1 CLIENT value\n * @property {number} BACKEND=2 BACKEND value\n */\n$root.SenderType = (function()\n{\n\tvar valuesById = {}, values = Object.create(valuesById);\n\tvalues[valuesById[0] = \"UNKNOWN\"] = 0;\n\tvalues[valuesById[1] = \"CLIENT\"] = 1;\n\tvalues[valuesById[2] = \"BACKEND\"] = 2;\n\treturn values;\n})();\n\n$root.Receiver = (function()\n{\n\t\n\t/**\n\t * Properties of a Receiver.\n\t * @exports IReceiver\n\t * @interface IReceiver\n\t * @property {Uint8Array|null} [id] Receiver id\n\t * @property {boolean|null} [isPrivate] Receiver isPrivate\n\t * @property {Uint8Array|null} [signature] Receiver signature\n\t */\n\t\n\t/**\n\t * Constructs a new Receiver.\n\t * @exports Receiver\n\t * @classdesc Represents a Receiver.\n\t * @implements IReceiver\n\t * @constructor\n\t * @param {IReceiver=} [properties] Properties to set\n\t */\n\tfunction Receiver(properties)\n\t{\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Receiver id.\n\t * @member {Uint8Array} id\n\t * @memberof Receiver\n\t * @instance\n\t */\n\tReceiver.prototype.id = $util.newBuffer([]);\n\t\n\t/**\n\t * Receiver isPrivate.\n\t * @member {boolean} isPrivate\n\t * @memberof Receiver\n\t * @instance\n\t */\n\tReceiver.prototype.isPrivate = false;\n\t\n\t/**\n\t * Receiver signature.\n\t * @member {Uint8Array} signature\n\t * @memberof Receiver\n\t * @instance\n\t */\n\tReceiver.prototype.signature = $util.newBuffer([]);\n\t\n\t/**\n\t * Creates a new Receiver instance using the specified properties.\n\t * @function create\n\t * @memberof Receiver\n\t * @static\n\t * @param {IReceiver=} [properties] Properties to set\n\t * @returns {Receiver} Receiver instance\n\t */\n\tReceiver.create = function create(properties)\n\t{\n\t\treturn new Receiver(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified Receiver message. Does not implicitly {@link Receiver.verify|verify} messages.\n\t * @function encode\n\t * @memberof Receiver\n\t * @static\n\t * @param {Receiver} message Receiver message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tReceiver.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.id != null && message.hasOwnProperty(\"id\"))\n\t\t{\n\t\t\twriter.uint32(/* id 1, wireType 2 =*/10).bytes(message.id);\n\t\t}\n\t\tif(message.isPrivate != null && message.hasOwnProperty(\"isPrivate\"))\n\t\t{\n\t\t\twriter.uint32(/* id 2, wireType 0 =*/16).bool(message.isPrivate);\n\t\t}\n\t\tif(message.signature != null && message.hasOwnProperty(\"signature\"))\n\t\t{\n\t\t\twriter.uint32(/* id 3, wireType 2 =*/26).bytes(message.signature);\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a Receiver message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof Receiver\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {Receiver} Receiver\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tReceiver.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.Receiver();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.id = reader.bytes();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.isPrivate = reader.bool();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.signature = reader.bytes();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn Receiver;\n})();\n\n$root.ResponseBatch = (function()\n{\n\t\n\t/**\n\t * Properties of a ResponseBatch.\n\t * @exports IResponseBatch\n\t * @interface IResponseBatch\n\t * @property {Array.<Response>|null} [responses] ResponseBatch responses\n\t */\n\t\n\t/**\n\t * Constructs a new ResponseBatch.\n\t * @exports ResponseBatch\n\t * @classdesc Represents a ResponseBatch.\n\t * @implements IResponseBatch\n\t * @constructor\n\t * @param {IResponseBatch=} [properties] Properties to set\n\t */\n\tfunction ResponseBatch(properties)\n\t{\n\t\tthis.responses = [];\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * ResponseBatch responses.\n\t * @member {Array.<Response>} responses\n\t * @memberof ResponseBatch\n\t * @instance\n\t */\n\tResponseBatch.prototype.responses = $util.emptyArray;\n\t\n\t/**\n\t * Creates a new ResponseBatch instance using the specified properties.\n\t * @function create\n\t * @memberof ResponseBatch\n\t * @static\n\t * @param {IResponseBatch=} [properties] Properties to set\n\t * @returns {ResponseBatch} ResponseBatch instance\n\t */\n\tResponseBatch.create = function create(properties)\n\t{\n\t\treturn new ResponseBatch(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified ResponseBatch message. Does not implicitly {@link ResponseBatch.verify|verify} messages.\n\t * @function encode\n\t * @memberof ResponseBatch\n\t * @static\n\t * @param {ResponseBatch} message ResponseBatch message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tResponseBatch.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.responses != null && message.responses.length)\n\t\t{\n\t\t\tfor(var i = 0; i < message.responses.length; ++i)\n\t\t\t\t$root.Response.encode(message.responses[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a ResponseBatch message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ResponseBatch\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ResponseBatch} ResponseBatch\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tResponseBatch.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.ResponseBatch();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tif(!(message.responses && message.responses.length))\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage.responses = [];\n\t\t\t\t\t}\n\t\t\t\t\tmessage.responses.push($root.Response.decode(reader, reader.uint32()));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn ResponseBatch;\n})();\n\n$root.Response = (function()\n{\n\t\n\t/**\n\t * Properties of a Response.\n\t * @exports IResponse\n\t * @interface IResponse\n\t * @property {OutgoingMessagesResponse|null} [outgoingMessages] Response outgoingMessages\n\t * @property {ChannelStatsResponse|null} [channelStats] Response channelStats\n\t * @property {JsonResponse|null} [serverStats] Response serverStats\n\t */\n\t\n\t/**\n\t * Constructs a new Response.\n\t * @exports Response\n\t * @classdesc Represents a Response.\n\t * @implements IResponse\n\t * @constructor\n\t * @param {IResponse=} [properties] Properties to set\n\t */\n\tfunction Response(properties)\n\t{\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Response outgoingMessages.\n\t * @member {OutgoingMessagesResponse|null|undefined} outgoingMessages\n\t * @memberof Response\n\t * @instance\n\t */\n\tResponse.prototype.outgoingMessages = null;\n\t\n\t/**\n\t * Response channelStats.\n\t * @member {ChannelStatsResponse|null|undefined} channelStats\n\t * @memberof Response\n\t * @instance\n\t */\n\tResponse.prototype.channelStats = null;\n\t\n\t/**\n\t * Response serverStats.\n\t * @member {JsonResponse|null|undefined} serverStats\n\t * @memberof Response\n\t * @instance\n\t */\n\tResponse.prototype.serverStats = null;\n\t\n\t// OneOf field names bound to virtual getters and setters\n\tvar $oneOfFields;\n\t\n\t/**\n\t * Response command.\n\t * @member {\"outgoingMessages\"|\"channelStats\"|\"serverStats\"|undefined} command\n\t * @memberof Response\n\t * @instance\n\t */\n\tObject.defineProperty(Response.prototype, \"command\", {\n\t\tget: $util.oneOfGetter($oneOfFields = [\n\t\t\t\"outgoingMessages\",\n\t\t\t\"channelStats\",\n\t\t\t\"serverStats\"\n\t\t]),\n\t\tset: $util.oneOfSetter($oneOfFields)\n\t});\n\t\n\t/**\n\t * Creates a new Response instance using the specified properties.\n\t * @function create\n\t * @memberof Response\n\t * @static\n\t * @param {IResponse=} [properties] Properties to set\n\t * @returns {Response} Response instance\n\t */\n\tResponse.create = function create(properties)\n\t{\n\t\treturn new Response(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified Response message. Does not implicitly {@link Response.verify|verify} messages.\n\t * @function encode\n\t * @memberof Response\n\t * @static\n\t * @param {Response} message Response message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tResponse.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.outgoingMessages != null && message.hasOwnProperty(\"outgoingMessages\"))\n\t\t{\n\t\t\t$root.OutgoingMessagesResponse.encode(message.outgoingMessages, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n\t\t}\n\t\tif(message.channelStats != null && message.hasOwnProperty(\"channelStats\"))\n\t\t{\n\t\t\t$root.ChannelStatsResponse.encode(message.channelStats, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n\t\t}\n\t\tif(message.serverStats != null && message.hasOwnProperty(\"serverStats\"))\n\t\t{\n\t\t\t$root.JsonResponse.encode(message.serverStats, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a Response message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof Response\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {Response} Response\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tResponse.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.Response();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.outgoingMessages = $root.OutgoingMessagesResponse.decode(reader, reader.uint32());\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.channelStats = $root.ChannelStatsResponse.decode(reader, reader.uint32());\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.serverStats = $root.JsonResponse.decode(reader, reader.uint32());\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn Response;\n})();\n\n$root.OutgoingMessagesResponse = (function()\n{\n\t\n\t/**\n\t * Properties of an OutgoingMessagesResponse.\n\t * @exports IOutgoingMessagesResponse\n\t * @interface IOutgoingMessagesResponse\n\t * @property {Array.<OutgoingMessage>|null} [messages] OutgoingMessagesResponse messages\n\t */\n\t\n\t/**\n\t * Constructs a new OutgoingMessagesResponse.\n\t * @exports OutgoingMessagesResponse\n\t * @classdesc Represents an OutgoingMessagesResponse.\n\t * @implements IOutgoingMessagesResponse\n\t * @constructor\n\t * @param {IOutgoingMessagesResponse=} [properties] Properties to set\n\t */\n\tfunction OutgoingMessagesResponse(properties)\n\t{\n\t\tthis.messages = [];\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * OutgoingMessagesResponse messages.\n\t * @member {Array.<OutgoingMessage>} messages\n\t * @memberof OutgoingMessagesResponse\n\t * @instance\n\t */\n\tOutgoingMessagesResponse.prototype.messages = $util.emptyArray;\n\t\n\t/**\n\t * Creates a new OutgoingMessagesResponse instance using the specified properties.\n\t * @function create\n\t * @memberof OutgoingMessagesResponse\n\t * @static\n\t * @param {IOutgoingMessagesResponse=} [properties] Properties to set\n\t * @returns {OutgoingMessagesResponse} OutgoingMessagesResponse instance\n\t */\n\tOutgoingMessagesResponse.create = function create(properties)\n\t{\n\t\treturn new OutgoingMessagesResponse(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified OutgoingMessagesResponse message. Does not implicitly {@link OutgoingMessagesResponse.verify|verify} messages.\n\t * @function encode\n\t * @memberof OutgoingMessagesResponse\n\t * @static\n\t * @param {OutgoingMessagesResponse} message OutgoingMessagesResponse message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tOutgoingMessagesResponse.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.messages != null && message.messages.length)\n\t\t{\n\t\t\tfor(var i = 0; i < message.messages.length; ++i)\n\t\t\t\t$root.OutgoingMessage.encode(message.messages[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes an OutgoingMessagesResponse message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof OutgoingMessagesResponse\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {OutgoingMessagesResponse} OutgoingMessagesResponse\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tOutgoingMessagesResponse.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.OutgoingMessagesResponse();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tif(!(message.messages && message.messages.length))\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage.messages = [];\n\t\t\t\t\t}\n\t\t\t\t\tmessage.messages.push($root.OutgoingMessage.decode(reader, reader.uint32()));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn OutgoingMessagesResponse;\n})();\n\n$root.OutgoingMessage = (function()\n{\n\t\n\t/**\n\t * Properties of an OutgoingMessage.\n\t * @exports IOutgoingMessage\n\t * @interface IOutgoingMessage\n\t * @property {Uint8Array|null} [id] OutgoingMessage id\n\t * @property {string|null} [body] OutgoingMessage body\n\t * @property {number|null} [expiry] OutgoingMessage expiry\n\t * @property {number|null} [created] OutgoingMessage created\n\t * @property {Sender|null} [sender] OutgoingMessage sender\n\t */\n\t\n\t/**\n\t * Constructs a new OutgoingMessage.\n\t * @exports OutgoingMessage\n\t * @classdesc Represents an OutgoingMessage.\n\t * @implements IOutgoingMessage\n\t * @constructor\n\t * @param {IOutgoingMessage=} [properties] Properties to set\n\t */\n\tfunction OutgoingMessage(properties)\n\t{\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * OutgoingMessage id.\n\t * @member {Uint8Array} id\n\t * @memberof OutgoingMessage\n\t * @instance\n\t */\n\tOutgoingMessage.prototype.id = $util.newBuffer([]);\n\t\n\t/**\n\t * OutgoingMessage body.\n\t * @member {string} body\n\t * @memberof OutgoingMessage\n\t * @instance\n\t */\n\tOutgoingMessage.prototype.body = \"\";\n\t\n\t/**\n\t * OutgoingMessage expiry.\n\t * @member {number} expiry\n\t * @memberof OutgoingMessage\n\t * @instance\n\t */\n\tOutgoingMessage.prototype.expiry = 0;\n\t\n\t/**\n\t * OutgoingMessage created.\n\t * @member {number} created\n\t * @memberof OutgoingMessage\n\t * @instance\n\t */\n\tOutgoingMessage.prototype.created = 0;\n\t\n\t/**\n\t * OutgoingMessage sender.\n\t * @member {Sender|null|undefined} sender\n\t * @memberof OutgoingMessage\n\t * @instance\n\t */\n\tOutgoingMessage.prototype.sender = null;\n\t\n\t/**\n\t * Creates a new OutgoingMessage instance using the specified properties.\n\t * @function create\n\t * @memberof OutgoingMessage\n\t * @static\n\t * @param {IOutgoingMessage=} [properties] Properties to set\n\t * @returns {OutgoingMessage} OutgoingMessage instance\n\t */\n\tOutgoingMessage.create = function create(properties)\n\t{\n\t\treturn new OutgoingMessage(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified OutgoingMessage message. Does not implicitly {@link OutgoingMessage.verify|verify} messages.\n\t * @function encode\n\t * @memberof OutgoingMessage\n\t * @static\n\t * @param {OutgoingMessage} message OutgoingMessage message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tOutgoingMessage.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.id != null && message.hasOwnProperty(\"id\"))\n\t\t{\n\t\t\twriter.uint32(/* id 1, wireType 2 =*/10).bytes(message.id);\n\t\t}\n\t\tif(message.body != null && message.hasOwnProperty(\"body\"))\n\t\t{\n\t\t\twriter.uint32(/* id 2, wireType 2 =*/18).string(message.body);\n\t\t}\n\t\tif(message.expiry != null && message.hasOwnProperty(\"expiry\"))\n\t\t{\n\t\t\twriter.uint32(/* id 3, wireType 0 =*/24).uint32(message.expiry);\n\t\t}\n\t\tif(message.created != null && message.hasOwnProperty(\"created\"))\n\t\t{\n\t\t\twriter.uint32(/* id 4, wireType 5 =*/37).fixed32(message.created);\n\t\t}\n\t\tif(message.sender != null && message.hasOwnProperty(\"sender\"))\n\t\t{\n\t\t\t$root.Sender.encode(message.sender, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes an OutgoingMessage message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof OutgoingMessage\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {OutgoingMessage} OutgoingMessage\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tOutgoingMessage.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.OutgoingMessage();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.id = reader.bytes();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.body = reader.string();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.expiry = reader.uint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tmessage.created = reader.fixed32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\t\tmessage.sender = $root.Sender.decode(reader, reader.uint32());\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn OutgoingMessage;\n})();\n\n$root.ChannelStatsResponse = (function()\n{\n\t\n\t/**\n\t * Properties of a ChannelStatsResponse.\n\t * @exports IChannelStatsResponse\n\t * @interface IChannelStatsResponse\n\t * @property {Array.<ChannelStats>|null} [channels] ChannelStatsResponse channels\n\t */\n\t\n\t/**\n\t * Constructs a new ChannelStatsResponse.\n\t * @exports ChannelStatsResponse\n\t * @classdesc Represents a ChannelStatsResponse.\n\t * @implements IChannelStatsResponse\n\t * @constructor\n\t * @param {IChannelStatsResponse=} [properties] Properties to set\n\t */\n\tfunction ChannelStatsResponse(properties)\n\t{\n\t\tthis.channels = [];\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * ChannelStatsResponse channels.\n\t * @member {Array.<ChannelStats>} channels\n\t * @memberof ChannelStatsResponse\n\t * @instance\n\t */\n\tChannelStatsResponse.prototype.channels = $util.emptyArray;\n\t\n\t/**\n\t * Creates a new ChannelStatsResponse instance using the specified properties.\n\t * @function create\n\t * @memberof ChannelStatsResponse\n\t * @static\n\t * @param {IChannelStatsResponse=} [properties] Properties to set\n\t * @returns {ChannelStatsResponse} ChannelStatsResponse instance\n\t */\n\tChannelStatsResponse.create = function create(properties)\n\t{\n\t\treturn new ChannelStatsResponse(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified ChannelStatsResponse message. Does not implicitly {@link ChannelStatsResponse.verify|verify} messages.\n\t * @function encode\n\t * @memberof ChannelStatsResponse\n\t * @static\n\t * @param {ChannelStatsResponse} message ChannelStatsResponse message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tChannelStatsResponse.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.channels != null && message.channels.length)\n\t\t{\n\t\t\tfor(var i = 0; i < message.channels.length; ++i)\n\t\t\t\t$root.ChannelStats.encode(message.channels[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a ChannelStatsResponse message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ChannelStatsResponse\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ChannelStatsResponse} ChannelStatsResponse\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tChannelStatsResponse.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.ChannelStatsResponse();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tif(!(message.channels && message.channels.length))\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage.channels = [];\n\t\t\t\t\t}\n\t\t\t\t\tmessage.channels.push($root.ChannelStats.decode(reader, reader.uint32()));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn ChannelStatsResponse;\n})();\n\n$root.ChannelStats = (function()\n{\n\t\n\t/**\n\t * Properties of a ChannelStats.\n\t * @exports IChannelStats\n\t * @interface IChannelStats\n\t * @property {Uint8Array|null} [id] ChannelStats id\n\t * @property {boolean|null} [isPrivate] ChannelStats isPrivate\n\t * @property {boolean|null} [isOnline] ChannelStats isOnline\n\t */\n\t\n\t/**\n\t * Constructs a new ChannelStats.\n\t * @exports ChannelStats\n\t * @classdesc Represents a ChannelStats.\n\t * @implements IChannelStats\n\t * @constructor\n\t * @param {IChannelStats=} [properties] Properties to set\n\t */\n\tfunction ChannelStats(properties)\n\t{\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * ChannelStats id.\n\t * @member {Uint8Array} id\n\t * @memberof ChannelStats\n\t * @instance\n\t */\n\tChannelStats.prototype.id = $util.newBuffer([]);\n\t\n\t/**\n\t * ChannelStats isPrivate.\n\t * @member {boolean} isPrivate\n\t * @memberof ChannelStats\n\t * @instance\n\t */\n\tChannelStats.prototype.isPrivate = false;\n\t\n\t/**\n\t * ChannelStats isOnline.\n\t * @member {boolean} isOnline\n\t * @memberof ChannelStats\n\t * @instance\n\t */\n\tChannelStats.prototype.isOnline = false;\n\t\n\t/**\n\t * Creates a new ChannelStats instance using the specified properties.\n\t * @function create\n\t * @memberof ChannelStats\n\t * @static\n\t * @param {IChannelStats=} [properties] Properties to set\n\t * @returns {ChannelStats} ChannelStats instance\n\t */\n\tChannelStats.create = function create(properties)\n\t{\n\t\treturn new ChannelStats(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified ChannelStats message. Does not implicitly {@link ChannelStats.verify|verify} messages.\n\t * @function encode\n\t * @memberof ChannelStats\n\t * @static\n\t * @param {ChannelStats} message ChannelStats message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tChannelStats.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.id != null && message.hasOwnProperty(\"id\"))\n\t\t{\n\t\t\twriter.uint32(/* id 1, wireType 2 =*/10).bytes(message.id);\n\t\t}\n\t\tif(message.isPrivate != null && message.hasOwnProperty(\"isPrivate\"))\n\t\t{\n\t\t\twriter.uint32(/* id 2, wireType 0 =*/16).bool(message.isPrivate);\n\t\t}\n\t\tif(message.isOnline != null && message.hasOwnProperty(\"isOnline\"))\n\t\t{\n\t\t\twriter.uint32(/* id 3, wireType 0 =*/24).bool(message.isOnline);\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a ChannelStats message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ChannelStats\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ChannelStats} ChannelStats\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tChannelStats.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.ChannelStats();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.id = reader.bytes();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.isPrivate = reader.bool();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.isOnline = reader.bool();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn ChannelStats;\n})();\n\n$root.JsonResponse = (function()\n{\n\t\n\t/**\n\t * Properties of a JsonResponse.\n\t * @exports IJsonResponse\n\t * @interface IJsonResponse\n\t * @property {string|null} [json] JsonResponse json\n\t */\n\t\n\t/**\n\t * Constructs a new JsonResponse.\n\t * @exports JsonResponse\n\t * @classdesc Represents a JsonResponse.\n\t * @implements IJsonResponse\n\t * @constructor\n\t * @param {IJsonResponse=} [properties] Properties to set\n\t */\n\tfunction JsonResponse(properties)\n\t{\n\t\tif(properties)\n\t\t{\n\t\t\tfor(var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif(properties[keys[i]] != null)\n\t\t\t\t{\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]];\n\t\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * JsonResponse json.\n\t * @member {string} json\n\t * @memberof JsonResponse\n\t * @instance\n\t */\n\tJsonResponse.prototype.json = \"\";\n\t\n\t/**\n\t * Creates a new JsonResponse instance using the specified properties.\n\t * @function create\n\t * @memberof JsonResponse\n\t * @static\n\t * @param {IJsonResponse=} [properties] Properties to set\n\t * @returns {JsonResponse} JsonResponse instance\n\t */\n\tJsonResponse.create = function create(properties)\n\t{\n\t\treturn new JsonResponse(properties);\n\t};\n\t\n\t/**\n\t * Encodes the specified JsonResponse message. Does not implicitly {@link JsonResponse.verify|verify} messages.\n\t * @function encode\n\t * @memberof JsonResponse\n\t * @static\n\t * @param {JsonResponse} message JsonResponse message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tJsonResponse.encode = function encode(message, writer)\n\t{\n\t\tif(!writer)\n\t\t{\n\t\t\twriter = $Writer.create();\n\t\t}\n\t\tif(message.json != null && message.hasOwnProperty(\"json\"))\n\t\t{\n\t\t\twriter.uint32(/* id 1, wireType 2 =*/10).string(message.json);\n\t\t}\n\t\treturn writer;\n\t};\n\t\n\t/**\n\t * Decodes a JsonResponse message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof JsonResponse\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {JsonResponse} JsonResponse\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tJsonResponse.decode = function decode(reader, length)\n\t{\n\t\tif(!(reader instanceof $Reader))\n\t\t{\n\t\t\treader = $Reader.create(reader);\n\t\t}\n\t\tvar end = length === undefined\n\t\t\t? reader.len\n\t\t\t: reader.pos + length, message = new $root.JsonResponse();\n\t\twhile( reader.pos < end )\n\t\t{\n\t\t\tvar tag = reader.uint32();\n\t\t\tswitch( tag >>> 3 )\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.json = reader.string();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn message;\n\t};\n\t\n\treturn JsonResponse;\n})();","import { $root } from './model'\n\n// Protobuf message models\n// @ts-ignore\nexport const Response = $root['Response']\n// @ts-ignore\nexport const ResponseBatch = $root['ResponseBatch']\n// @ts-ignore\nexport const Request = $root['Request']\n// @ts-ignore\nexport const RequestBatch = $root['RequestBatch']\n// @ts-ignore\nexport const IncomingMessagesRequest = $root['IncomingMessagesRequest']\n// @ts-ignore\nexport const IncomingMessage = $root['IncomingMessage']\n// @ts-ignore\nexport const Receiver = $root['Receiver']","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport Type from '../tools/type'\nimport {ConnectionType, type TypeConnector} from '../types/pull'\nimport type {\n\tConnectorParent,\n\tConnectorCallbacks,\n\tConnectorConfig\n} from '../types/pull'\n\nexport abstract class AbstractConnector\n\timplements TypeConnector\n{\n\tprivate _logger: null|LoggerBrowser = null\n\t\n\tprotected _connected: boolean = false\n\t\n\tprotected _connectionType: ConnectionType\n\t\n\tprotected _disconnectCode: number = 0\n\tprotected _disconnectReason: string = ''\n\t\n\tprotected _parent: ConnectorParent\n\t\n\tprotected _callbacks: ConnectorCallbacks\n\t\n\tprotected constructor(config: ConnectorConfig)\n\t{\n\t\tthis._parent = config.parent\n\t\tthis._connectionType = ConnectionType.Undefined\n\t\t\n\t\tthis._callbacks = {\n\t\t\tonOpen: Type.isFunction(config.onOpen)\n\t\t\t\t? config.onOpen\n\t\t\t\t: () => {},\n\t\t\tonDisconnect: Type.isFunction(config.onDisconnect)\n\t\t\t\t? config.onDisconnect\n\t\t\t\t: () => {},\n\t\t\tonError: Type.isFunction(config.onError)\n\t\t\t\t? config.onError\n\t\t\t\t: () => {},\n\t\t\tonMessage: Type.isFunction(config.onMessage)\n\t\t\t\t? config.onMessage\n\t\t\t\t: () => {}\n\t\t} as ConnectorCallbacks\n\t}\n\t\n\tsetLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t}\n\t\n\tgetLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(\n\t\t\t\t`NullLogger`\n\t\t\t)\n\t\t\t\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._logger\n\t}\n\t\n\tdestroy(): void\n\t{\n\t\n\t}\n\t\n\tget connected()\n\t{\n\t\treturn this._connected\n\t}\n\t\n\tset connected(value)\n\t{\n\t\tif(value == this._connected)\n\t\t{\n\t\t\treturn\n\t\t}\n\t\t\n\t\tthis._connected = value\n\t\t\n\t\tif(this._connected)\n\t\t{\n\t\t\tthis._callbacks.onOpen()\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._callbacks.onDisconnect({\n\t\t\t\tcode: this.disconnectCode,\n\t\t\t\treason: this.disconnectReason\n\t\t\t})\n\t\t}\n\t}\n\t\n\tget disconnectCode(): number\n\t{\n\t\treturn this._disconnectCode\n\t}\n\t\n\tget disconnectReason(): string\n\t{\n\t\treturn this._disconnectReason\n\t}\n\t\n\tget connectionPath(): string\n\t{\n\t\treturn this._parent.getConnectionPath(\n\t\t\tthis._connectionType\n\t\t)\n\t}\n\t\n\t/**\n\t * Make connect to the server\n\t */\n\tabstract connect(): void\n\t\n\t/**\n\t * Make disconnect from the server\n\t * @param code\n\t * @param reason\n\t */\n\tabstract disconnect(\n\t\tcode: number,\n\t\treason: string\n\t): void\n\t\n\t/**\n\t * Sends some data to the server\n\t * @param {ArrayBuffer|string} buffer Data to send.\n\t * @return {boolean}\n\t */\n\tabstract send(buffer: ArrayBuffer|string): boolean\n}","import Text from '../tools/text'\nimport { AbstractConnector } from './abstractConnector'\nimport { ConnectionType } from '../types/pull'\nimport type { ConnectorConfig } from '../types/pull'\n\nexport class WebSocketConnector\n\textends AbstractConnector\n{\n\tprivate _socket: null|WebSocket\n\t\n\tprivate readonly _onSocketOpenHandler: () => void\n\tprivate readonly _onSocketCloseHandler: (event: CloseEvent) => void\n\tprivate readonly _onSocketErrorHandler: (event: Event) => void\n\tprivate readonly _onSocketMessageHandler: (event: MessageEvent) => void\n\t\n\tconstructor(config: ConnectorConfig)\n\t{\n\t\tsuper(config)\n\t\t\n\t\tthis._connectionType = ConnectionType.WebSocket\n\t\tthis._socket = null\n\t\t\n\t\tthis._onSocketOpenHandler = this._onSocketOpen.bind(this)\n\t\tthis._onSocketCloseHandler = this._onSocketClose.bind(this)\n\t\tthis._onSocketErrorHandler = this._onSocketError.bind(this)\n\t\tthis._onSocketMessageHandler = this._onSocketMessage.bind(this)\n\t}\n\t\n\toverride destroy()\n\t{\n\t\tsuper.destroy()\n\t\t\n\t\tif(this._socket)\n\t\t{\n\t\t\tthis._socket.close()\n\t\t\tthis._socket = null\n\t\t}\n\t}\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\toverride connect(): void\n\t{\n\t\tif(this._socket)\n\t\t{\n\t\t\tif(this._socket.readyState === 1)\n\t\t\t{\n\t\t\t\t/**\n\t\t\t\t * @memo already connected\n\t\t\t\t */\n\t\t\t\treturn\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.clearEventListener()\n\t\t\t\t\n\t\t\t\tthis._socket.close()\n\t\t\t\tthis._socket = null\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis._createSocket()\n\t}\n\t\n\tget socket(): null|WebSocket\n\t{\n\t\treturn this._socket\n\t}\n\t\n\t/**\n\t * @inheritDoc\n\t * @param code\n\t * @param reason\n\t */\n\toverride disconnect(\n\t\tcode: number,\n\t\treason: string\n\t): void\n\t{\n\t\tif(this._socket !== null)\n\t\t{\n\t\t\tthis.clearEventListener()\n\t\t\t\n\t\t\tthis._socket.close(\n\t\t\t\tcode,\n\t\t\t\treason\n\t\t\t)\n\t\t}\n\t\tthis._socket = null\n\t\tthis._disconnectCode = code\n\t\tthis._disconnectReason = reason\n\t\tthis.connected = false\n\t}\n\t\n\t/**\n\t * Via websocket connection\n\t * @inheritDoc\n\t */\n\toverride send(\n\t\tbuffer: ArrayBuffer|string\n\t): boolean\n\t{\n\t\tif(\n\t\t\t!this._socket\n\t\t\t|| this._socket.readyState !== 1\n\t\t)\n\t\t{\n\t\t\tthis.getLogger().error(new Error(\n\t\t\t\t`${Text.getDateForLog()}: Pull: WebSocket is not connected`\n\t\t\t))\n\t\t\t\n\t\t\treturn false\n\t\t}\n\t\t\n\t\tthis._socket.send(buffer)\n\t\treturn true\n\t}\n\t\n\t// region Event Handlers ////\n\tprivate _onSocketOpen(): void\n\t{\n\t\tthis.connected = true\n\t}\n\t\n\tprivate _onSocketClose(event: CloseEvent)\n\t{\n\t\tthis._socket = null\n\t\tthis._disconnectCode = Number(event.code)\n\t\tthis._disconnectReason = event.reason\n\t\tthis.connected = false\n\t}\n\t\n\tprivate _onSocketError(event: Event): void\n\t{\n\t\tthis._callbacks.onError(new Error(\n\t\t\t`Socket error: ${event}`\n\t\t))\n\t}\n\t\n\tprivate _onSocketMessage(event: MessageEvent): void\n\t{\n\t\tthis._callbacks.onMessage(\n\t\t\tevent.data\n\t\t)\n\t}\n\t// endregion ////\n\t\n\t// region Tools ////\n\tprivate clearEventListener(): void\n\t{\n\t\tif(this._socket)\n\t\t{\n\t\t\tthis._socket.removeEventListener(\n\t\t\t\t'open',\n\t\t\t\tthis._onSocketOpenHandler\n\t\t\t)\n\t\t\t\n\t\t\tthis._socket.removeEventListener(\n\t\t\t\t'close',\n\t\t\t\tthis._onSocketCloseHandler\n\t\t\t)\n\t\t\t\n\t\t\tthis._socket.removeEventListener(\n\t\t\t\t'error',\n\t\t\t\tthis._onSocketErrorHandler\n\t\t\t)\n\t\t\t\n\t\t\tthis._socket.removeEventListener(\n\t\t\t\t'message',\n\t\t\t\tthis._onSocketMessageHandler\n\t\t\t)\n\t\t}\n\t}\n\t\n\tprivate _createSocket(): void\n\t{\n\t\tif(this._socket)\n\t\t{\n\t\t\tthrow new Error('Socket already exists')\n\t\t}\n\t\t\n\t\tif(!this.connectionPath)\n\t\t{\n\t\t\tthrow new Error('Websocket connection path is not defined')\n\t\t}\n\t\t\n\t\tthis._socket = new WebSocket(this.connectionPath)\n\t\tthis._socket.binaryType = 'arraybuffer'\n\t\t\n\t\tthis._socket.addEventListener(\n\t\t\t'open',\n\t\t\tthis._onSocketOpenHandler\n\t\t)\n\t\t\n\t\tthis._socket.addEventListener(\n\t\t\t'close',\n\t\t\tthis._onSocketCloseHandler\n\t\t)\n\t\t\n\t\tthis._socket.addEventListener(\n\t\t\t'error',\n\t\t\tthis._onSocketErrorHandler\n\t\t)\n\t\t\n\t\tthis._socket.addEventListener(\n\t\t\t'message',\n\t\t\tthis._onSocketMessageHandler\n\t\t)\n\t}\n\t// endregion ////\n}","import Type from '../tools/type'\nimport Text from '../tools/text'\nimport { AbstractConnector } from './abstractConnector'\nimport { ConnectionType } from '../types/pull'\nimport type { ConnectorConfig } from '../types/pull'\n\nconst LONG_POLLING_TIMEOUT = 60\n\nexport class LongPollingConnector\n\textends AbstractConnector\n{\n\tprivate _active: boolean\n\t\n\tprivate _requestTimeout: null|number\n\tprivate _failureTimeout: null|number\n\tprivate readonly _xhr: XMLHttpRequest\n\tprivate _requestAborted: boolean\n\t\n\tconstructor(config: ConnectorConfig)\n\t{\n\t\tsuper(config)\n\t\t\n\t\tthis._active = false\n\t\tthis._connectionType = ConnectionType.LongPolling\n\t\t\n\t\tthis._requestTimeout = null\n\t\tthis._failureTimeout = null\n\t\tthis._xhr = this.createXhr()\n\t\tthis._requestAborted = false\n\t}\n\t\n\t/**\n\t * @inheritDoc\n\t */\n\toverride connect(): void\n\t{\n\t\tthis._active = true\n\t\tthis.performRequest()\n\t}\n\t\n\t/**\n\t * @inheritDoc\n\t * @param code\n\t * @param reason\n\t */\n\toverride disconnect(\n\t\tcode: number,\n\t\treason: string\n\t): void\n\t{\n\t\tthis._active = false\n\t\t\n\t\tthis.clearTimeOut()\n\t\t\n\t\tif(this._xhr)\n\t\t{\n\t\t\tthis._requestAborted = true\n\t\t\tthis._xhr.abort()\n\t\t}\n\t\t\n\t\tthis._disconnectCode = code\n\t\tthis._disconnectReason = reason\n\t\tthis.connected = false\n\t}\n\t\n\tprivate performRequest(): void\n\t{\n\t\tif(!this._active)\n\t\t{\n\t\t\treturn\n\t\t}\n\t\t\n\t\tif(!this.connectionPath)\n\t\t{\n\t\t\tthrow new Error('Long polling connection path is not defined')\n\t\t}\n\t\t\n\t\tif(\n\t\t\tthis._xhr.readyState !== 0\n\t\t\t&& this._xhr.readyState !== 4\n\t\t)\n\t\t{\n\t\t\treturn\n\t\t}\n\t\t\n\t\tthis.clearTimeOut()\n\t\t\n\t\tthis._failureTimeout = setTimeout(\n\t\t\t() => {\n\t\t\t\tthis.connected = true\n\t\t\t},\n\t\t\t5_000\n\t\t)\n\t\t\n\t\tthis._requestTimeout = setTimeout(\n\t\t\tthis.onRequestTimeout.bind(this),\n\t\t\tLONG_POLLING_TIMEOUT * 1_000\n\t\t)\n\t\t\n\t\tthis._xhr.open('GET', this.connectionPath)\n\t\tthis._xhr.send()\n\t}\n\t\n\tprivate onRequestTimeout()\n\t{\n\t\tthis._requestAborted = true\n\t\tthis._xhr.abort()\n\t\tthis.performRequest()\n\t}\n\t\n\tprivate onXhrReadyStateChange(): void\n\t{\n\t\tif(this._xhr.readyState === 4)\n\t\t{\n\t\t\tif(\n\t\t\t\t!this._requestAborted\n\t\t\t\t|| this._xhr.status == 200\n\t\t\t)\n\t\t\t{\n\t\t\t\tthis.onResponse(this._xhr.response)\n\t\t\t}\n\t\t\t\n\t\t\tthis._requestAborted = false\n\t\t}\n\t}\n\t\n\t/**\n\t * Via http request\n\t * @inheritDoc\n\t */\n\toverride send(\n\t\tbuffer: ArrayBuffer|string\n\t): boolean\n\t{\n\t\tconst path = this._parent.getPublicationPath()\n\t\tif(!path)\n\t\t{\n\t\t\tthis.getLogger().error(new Error(\n\t\t\t\t`${Text.getDateForLog()}: Pull: publication path is empty`\n\t\t\t))\n\t\t\treturn false\n\t\t}\n\t\t\n\t\tconst xhr = new XMLHttpRequest()\n\t\txhr.open('POST', path)\n\t\txhr.send(buffer)\n\t\t\n\t\treturn true\n\t}\n\t\n\tprivate onResponse(response: any): void\n\t{\n\t\tthis.clearTimeOut()\n\t\t\n\t\tif(this._xhr.status === 200)\n\t\t{\n\t\t\tthis.connected = true\n\t\t\tif(\n\t\t\t\tType.isStringFilled(response)\n\t\t\t\t|| (response instanceof ArrayBuffer)\n\t\t\t)\n\t\t\t{\n\t\t\t\tthis._callbacks.onMessage(response)\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis._parent.session.mid = null\n\t\t\t}\n\t\t\tthis.performRequest()\n\t\t}\n\t\telse if(this._xhr.status === 304)\n\t\t{\n\t\t\tthis.connected = true\n\t\t\tif(this._xhr.getResponseHeader('Expires') === 'Thu, 01 Jan 1973 11:11:01 GMT')\n\t\t\t{\n\t\t\t\tconst lastMessageId = this._xhr.getResponseHeader('Last-Message-Id')\n\t\t\t\tif(Type.isStringFilled(lastMessageId))\n\t\t\t\t{\n\t\t\t\t\tthis._parent.setLastMessageId(lastMessageId || '')\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.performRequest()\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._callbacks.onError(new Error(\n\t\t\t\t'Could not connect to the server'\n\t\t\t))\n\t\t\t\n\t\t\tthis.connected = false\n\t\t}\n\t}\n\t\n\t// region Tools ////\n\tprivate clearTimeOut(): void\n\t{\n\t\tif(this._failureTimeout)\n\t\t{\n\t\t\tclearTimeout(this._failureTimeout)\n\t\t\tthis._failureTimeout = null\n\t\t}\n\t\t\n\t\tif(this._requestTimeout)\n\t\t{\n\t\t\tclearTimeout(this._requestTimeout)\n\t\t\tthis._requestTimeout = null\n\t\t}\n\t}\n\t\n\tprivate createXhr(): XMLHttpRequest\n\t{\n\t\tconst result = new XMLHttpRequest()\n\t\t\n\t\tif(\n\t\t\tthis._parent.isProtobufSupported()\n\t\t\t&& !this._parent.isJsonRpc()\n\t\t)\n\t\t{\n\t\t\tresult.responseType = 'arraybuffer'\n\t\t}\n\t\t\n\t\tresult.addEventListener(\n\t\t\t'readystatechange',\n\t\t\tthis.onXhrReadyStateChange.bind(this)\n\t\t)\n\t\t\n\t\treturn result\n\t}\n\t// endregion ////\n}","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport Type from '../tools/type'\nimport Text from '../tools/text'\nimport Browser from '../tools/browser'\nimport { StorageManager } from './storage-manager'\nimport { JsonRpc } from './json-rpc'\nimport { SharedConfig } from './shared-config'\nimport { ChannelManager } from './channelManager'\nimport {\n\t//Response,\n\tResponseBatch,\n\t//Request,\n\tRequestBatch,\n\t//IncomingMessagesRequest,\n\tIncomingMessage,\n\tReceiver,\n} from './protobuf'\nimport type { TypeB24 } from '../types/b24'\nimport {\n\tCloseReasons,\n\tConnectionType,\n\tPullStatus,\n\tRpcMethod,\n\tSenderType,\n\tServerMode,\n\tSubscriptionType,\n\tSystemCommands,\n\tLsKeys,\n\ttype StorageManagerParams,\n\ttype TypePullClientParams,\n\ttype TypePullClientSession,\n\ttype TypeStorageManager,\n\ttype SharedConfigParams,\n\ttype TypeChannelManagerParams,\n\ttype TypeConnector,\n\ttype RpcError,\n\ttype TypePullClientConfig,\n\ttype TypePullMessage,\n\ttype TypeSubscriptionOptions,\n\ttype TypeSubscriptionCommandHandler,\n\ttype TypePullClientEmitConfig,\n\ttype CommandHandlerFunctionV1,\n\ttype CommandHandlerFunctionV2,\n\ttype ConnectorParent,\n\ttype UserStatusCallback,\n\ttype TypePublicIdDescriptor,\n\ttype TypePullClientMessageBatch,\n\ttype TypeChanel,\n\ttype TypeSessionEvent, type TypePullClientMessageBody\n} from '../types/pull'\nimport type {AjaxResult} from '../core/http/ajaxResult'\nimport type {Payload} from '../types/payloads'\nimport type {NumberString} from '../types/common'\nimport {WebSocketConnector} from './web-socket-connector'\nimport { LongPollingConnector } from './long-polling-connector'\nimport type {AjaxError} from '../core/http/ajaxError'\n\n/**\n * @memo api revision - check module/pull/include.php\n */\nconst REVISION = 19\nconst RESTORE_WEBSOCKET_TIMEOUT = 30 * 60\nconst OFFLINE_STATUS_DELAY = 5_000\nconst CONFIG_CHECK_INTERVAL = 60 * 1000\nconst MAX_IDS_TO_STORE = 10\nconst PING_TIMEOUT = 10\nconst JSON_RPC_PING = 'ping'\nconst JSON_RPC_PONG = 'pong'\nconst LS_SESSION = 'bx-pull-session'\nconst LS_SESSION_CACHE_TIME = 20\n\nconst EmptyConfig = {\n\tapi: {},\n\tchannels: {},\n\tpublicChannels: {},\n\tserver: {timeShift: 0},\n\tclientId: null,\n\tjwt: null,\n\texp: 0\n} as TypePullClientConfig\n\n/**\n * @todo fix logic for _loggingEnabled\n */\nexport class PullClient\n\timplements ConnectorParent\n{\n\t// region Params ////\n\tprivate _logger: null|LoggerBrowser = null\n\tprivate _restClient: TypeB24\n\tprivate _status: PullStatus\n\tprivate _context: string\n\tprivate readonly _guestMode: boolean\n\tprivate readonly _guestUserId: number\n\tprivate _userId: number\n\t\n\tprivate _configGetMethod: string\n\tprivate _getPublicListMethod: string\n\t\n\tprivate _siteId: string\n\tprivate _enabled: boolean\n\t\n\tprivate _unloading: boolean = false\n\tprivate _starting: boolean = false\n\tprivate _debug: boolean = false\n\tprivate _connectionAttempt: number = 0\n\tprivate _connectionType: ConnectionType = ConnectionType.WebSocket\n\tprivate _reconnectTimeout: null|number = null\n\tprivate _restartTimeout: null|number = null\n\tprivate _restoreWebSocketTimeout: null|number = null\n\t\n\tprivate _skipStorageInit: boolean\n\tprivate _skipCheckRevision: boolean\n\t\n\tprivate _subscribers: Record<string, any> = {}\n\tprivate _watchTagsQueue: Map<string, boolean> = new Map()\n\tprivate _watchUpdateInterval: number = 1_740_000\n\tprivate _watchForceUpdateInterval: number = 5_000\n\tprivate _configTimestamp: number = 0\n\tprivate _session: TypePullClientSession = {\n\t\tmid: null,\n\t\ttag: null,\n\t\ttime: null,\n\t\thistory: {},\n\t\tlastMessageIds: [],\n\t\tmessageCount: 0\n\t}\n\t\n\tprivate _connectors: Record<ConnectionType, null|TypeConnector> = {\n\t\t[ConnectionType.Undefined]: null,\n\t\t[ConnectionType.WebSocket]: null,\n\t\t[ConnectionType.LongPolling]: null\n\t}\n\t\n\tprivate _isSecure: boolean\n\t\n\tprivate _config: null|TypePullClientConfig = null\n\t\n\tprivate _storage: null|TypeStorageManager = null\n\tprivate _sharedConfig: SharedConfig\n\tprivate _channelManager: ChannelManager\n\tprivate _jsonRpcAdapter: null|JsonRpc = null\n\t\n\t/**\n\t * @depricate\n\t * @private\n\t */\n\t// private _notificationPopup: null = null\n\t\n\t// timers ////\n\tprivate _checkInterval: null|number = null\n\tprivate _offlineTimeout: null|number = null\n\tprivate _watchUpdateTimeout: null|number = null\n\t\n\tprivate _pingWaitTimeout: null|number = null\n\t\n\t// manual stop workaround ////\n\tprivate _isManualDisconnect: boolean = false\n\t\n\tprivate _loggingEnabled: boolean = false\n\t\n\t// bound event handlers ////\n\tprivate _onPingTimeoutHandler: () => void\n\t\n\t// [userId] => array of callbacks\n\tprivate _userStatusCallbacks: Record<number, UserStatusCallback[]> = {}\n\t\n\tprivate _connectPromise: null|{\n\t\tresolve: (response: any) => void,\n\t\treject: (error: string|RpcError|Error) => void,\n\t} = null\n\t\n\tprivate _startingPromise: null|Promise<boolean> = null\n\t// endregion ////\n\t\n\t// region Init ////\n\t/**\n\t * @done\n\t * @param params\n\t */\n\tconstructor(params: TypePullClientParams)\n\t{\n\t\tthis._restClient = params.b24\n\t\tthis._status = PullStatus.Offline\n\t\tthis._context = 'master'\n\t\t\n\t\t// region RestApplication ////\n\t\tif(params.restApplication)\n\t\t{\n\t\t\tif(typeof params.configGetMethod === 'undefined')\n\t\t\t{\n\t\t\t\tparams.configGetMethod = 'pull.application.config.get'\n\t\t\t}\n\t\t\t\n\t\t\tif (typeof params.skipCheckRevision === 'undefined')\n\t\t\t{\n\t\t\t\tparams.skipCheckRevision = true\n\t\t\t}\n\t\t\t\n\t\t\tif(Type.isStringFilled(params.restApplication))\n\t\t\t{\n\t\t\t\tparams.siteId = params.restApplication\n\t\t\t}\n\t\t\t\n\t\t\tparams.serverEnabled = true\n\t\t}\n\t\t// endregion ////\n\t\t\n\t\t// region Params ////\n\t\tthis._guestMode = params.guestMode\n\t\t\t? Text.toBoolean(params.guestMode)\n\t\t\t: false\n\t\t\n\t\tthis._guestUserId = params.guestUserId ?\n\t\t\tText.toInteger(params.guestUserId)\n\t\t\t: 0\n\t\t\n\t\tif(\n\t\t\tthis._guestMode\n\t\t\t&& this._guestUserId > 0\n\t\t)\n\t\t{\n\t\t\tthis._userId = this._guestUserId;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._guestMode = false\n\t\t\tthis._userId = params.userId\n\t\t\t\t? Text.toInteger(params.userId)\n\t\t\t\t: 0\n\t\t}\n\n\t\tthis._siteId = params.siteId ?? 'none'\n\n\t\t// eslint-disable-next-line\n\t\tthis._enabled = !Type.isUndefined(params.serverEnabled)\n\t\t\t? (params.serverEnabled === true)\n\t\t\t: true\n\n\t\t// eslint-disable-next-line\n\t\tthis._configGetMethod = !Type.isStringFilled(params.configGetMethod)\n\t\t\t? 'pull.config.get'\n\t\t\t: params.configGetMethod || ''\n\n\t\t// eslint-disable-next-line\n\t\tthis._getPublicListMethod = !Type.isStringFilled(params.getPublicListMethod)\n\t\t\t? 'pull.channel.public.list'\n\t\t\t: params.getPublicListMethod || ''\n\n\t\tthis._skipStorageInit = params.skipStorageInit === true\n\t\tthis._skipCheckRevision = params.skipCheckRevision === true;\n\n\t\tif(!Type.isUndefined(params.configTimestamp))\n\t\t{\n\t\t\tthis._configTimestamp = Text.toInteger(params.configTimestamp);\n\t\t}\n\t\t// endregion ////\n\n\t\tthis._isSecure = document?.location.href.indexOf('https') === 0\n\n\t\tif(\n\t\t\tthis._userId\n\t\t\t&& !this._skipStorageInit\n\t\t)\n\t\t{\n\t\t\tthis._storage = new StorageManager({\n\t\t\t\tuserId: this._userId,\n\t\t\t\tsiteId: this._siteId\n\t\t\t} as StorageManagerParams);\n\t\t}\n\n\t\tthis._sharedConfig = new SharedConfig({\n\t\t\tonWebSocketBlockChanged: this.onWebSocketBlockChanged.bind(this),\n\t\t\tstorage: this._storage\n\t\t} as SharedConfigParams)\n\n\t\tthis._channelManager = new ChannelManager({\n\t\t\tb24: this._restClient,\n\t\t\tgetPublicListMethod: this._getPublicListMethod\n\t\t} as TypeChannelManagerParams)\n\n\t\tthis._loggingEnabled = this._sharedConfig.isLoggingEnabled()\n\n\t\t// bound event handlers ////\n\t\tthis._onPingTimeoutHandler = this.onPingTimeout.bind(this)\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t\tthis._jsonRpcAdapter?.setLogger(this.getLogger())\n\t\tthis._storage?.setLogger(this.getLogger())\n\t\tthis._sharedConfig.setLogger(this.getLogger())\n\t\tthis._channelManager.setLogger(this.getLogger())\n\n\t\tthis._connectors.webSocket?.setLogger(this.getLogger())\n\t\tthis._connectors.longPolling?.setLogger(this.getLogger())\n\t}\n\n\tgetLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(\n\t\t\t\t`NullLogger`\n\t\t\t)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\n\tdestroy(): void\n\t{\n\t\tthis.stop(\n\t\t\tCloseReasons.NORMAL_CLOSURE,\n\t\t\t'manual stop'\n\t\t)\n\n\t\tthis.onBeforeUnload()\n\t}\n\n\t/**\n\t * @done\n\t * @private\n\t */\n\tprivate init(): void\n\t{\n\t\tthis._connectors.webSocket = new WebSocketConnector({\n\t\t\tparent: this,\n\t\t\tonOpen: this.onWebSocketOpen.bind(this),\n\t\t\tonMessage: this.onIncomingMessage.bind(this),\n\t\t\tonDisconnect: this.onWebSocketDisconnect.bind(this),\n\t\t\tonError: this.onWebSocketError.bind(this)\n\t\t})\n\n\t\tthis._connectors.longPolling = new LongPollingConnector({\n\t\t\tparent: this,\n\t\t\tonOpen: this.onLongPollingOpen.bind(this),\n\t\t\tonMessage: this.onIncomingMessage.bind(this),\n\t\t\tonDisconnect: this.onLongPollingDisconnect.bind(this),\n\t\t\tonError: this.onLongPollingError.bind(this)\n\t\t})\n\n\t\tthis._connectionType = this.isWebSocketAllowed()\n\t\t\t? ConnectionType.WebSocket\n\t\t\t: ConnectionType.LongPolling\n\n\t\twindow.addEventListener('beforeunload', this.onBeforeUnload.bind(this))\n\t\twindow.addEventListener('offline', this.onOffline.bind(this))\n\t\twindow.addEventListener('online', this.onOnline.bind(this))\n\n\t\t/**\n\t\t * @memo Not use under Node.js\n\t\t */\n\t\t/*/\n\t\tif (BX && BX.addCustomEvent)\n\t\t{\n\t\t\tBX.addCustomEvent('BXLinkOpened', this.connect.bind(this))\n\t\t}\n\n\t\tif (BX && BX.desktop)\n\t\t{\n\t\t\tBX.addCustomEvent('onDesktopReload', () => {\n\t\t\t\tthis._session.mid = null\n\t\t\t\tthis._session.tag = null\n\t\t\t\tthis._session.time = null\n\t\t\t})\n\n\t\t\tBX.desktop.addCustomEvent('BXLoginSuccess', () => this.restart(1_000, 'desktop login'))\n\t\t}\n\t\t//*/\n\n\t\tthis._jsonRpcAdapter = new JsonRpc({\n\t\t\tconnector: this._connectors.webSocket,\n\t\t\thandlers: {\n\t\t\t\t'incoming.message': this.handleRpcIncomingMessage.bind(this)\n\t\t\t}\n\t\t});\n\t}\n\t// endregion ////\n\n\t// region Get-Set ////\n\t/**\n\t * @done\n\t */\n\tget connector(): null|TypeConnector\n\t{\n\t\treturn this._connectors[this._connectionType];\n\t}\n\n\t/**\n\t * @done\n\t */\n\tget status(): PullStatus\n\t{\n\t\treturn this._status;\n\t}\n\n\t/**\n\t * @done\n\t * @param status\n\t */\n\tset status(status: PullStatus)\n\t{\n\t\tif(this._status === status)\n\t\t{\n\t\t\treturn\n\t\t}\n\n\t\tthis._status = status;\n\t\tif(this._offlineTimeout)\n\t\t{\n\t\t\tclearTimeout(this._offlineTimeout)\n\t\t\tthis._offlineTimeout = null\n\t\t}\n\n\t\tif(status === PullStatus.Offline)\n\t\t{\n\t\t\tthis.sendPullStatusDelayed(status, OFFLINE_STATUS_DELAY)\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.sendPullStatus(status)\n\t\t}\n\t}\n\n\tget session(): TypePullClientSession\n\t{\n\t\treturn this._session\n\t}\n\t// endregion ////\n\n\t// region Public /////\n\t/**\n\t * @done\n\t * Creates a subscription to incoming messages.\n\t *\n\t * @param {TypeSubscriptionOptions | TypeSubscriptionCommandHandler} params\n\t * @returns {Function} - Unsubscribe callback function\n\t */\n\tpublic subscribe(params: TypeSubscriptionOptions|TypeSubscriptionCommandHandler): Function\n\t{\n\t\tif (!Type.isPlainObject(params))\n\t\t{\n\t\t\treturn this.attachCommandHandler(params as TypeSubscriptionCommandHandler)\n\t\t}\n\n\t\tparams = params as TypeSubscriptionOptions\n\n\t\tparams.type = params.type || SubscriptionType.Server\n\t\tparams.command = params.command || null\n\n\t\tif(\n\t\t\tparams.type == SubscriptionType.Server\n\t\t\t|| params.type == SubscriptionType.Client\n\t\t)\n\t\t{\n\t\t\tif((typeof params.moduleId === 'undefined'))\n\t\t\t{\n\t\t\t\tthrow new Error(`${Text.getDateForLog()}: Pull.subscribe: parameter moduleId is not specified`)\n\t\t\t}\n\n\t\t\tif(typeof (this._subscribers[params.type]) === 'undefined')\n\t\t\t{\n\t\t\t\tthis._subscribers[params.type] = {}\n\t\t\t}\n\n\t\t\tif(typeof (this._subscribers[params.type][params.moduleId]) === 'undefined')\n\t\t\t{\n\t\t\t\tthis._subscribers[params.type][params.moduleId] = {\n\t\t\t\t\tcallbacks: [],\n\t\t\t\t\tcommands: {}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(params.command)\n\t\t\t{\n\t\t\t\tif (typeof (this._subscribers[params.type][params.moduleId]['commands'][params.command]) === 'undefined')\n\t\t\t\t{\n\t\t\t\t\tthis._subscribers[params.type][params.moduleId]['commands'][params.command] = []\n\t\t\t\t}\n\n\t\t\t\tthis._subscribers[params.type][params.moduleId]['commands'][params.command].push(params.callback);\n\n\t\t\t\treturn () => {\n\t\t\t\t\tif(\n\t\t\t\t\t\ttypeof params.type === 'undefined'\n\t\t\t\t\t\t|| typeof params.moduleId === 'undefined'\n\t\t\t\t\t\t|| typeof params.command === 'undefined'\n\t\t\t\t\t\t|| null === params.command\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._subscribers[params.type][params.moduleId]['commands'][params.command] =\n\t\t\t\t\t\tthis._subscribers[params.type][params.moduleId]['commands'][params.command].filter((element: any) => {\n\t\t\t\t\t\treturn element !== params.callback\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis._subscribers[params.type][params.moduleId]['callbacks'].push(params.callback);\n\n\t\t\t\treturn () => {\n\t\t\t\t\tif(\n\t\t\t\t\t\ttypeof params.type === 'undefined'\n\t\t\t\t\t\t|| typeof params.moduleId === 'undefined'\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._subscribers[params.type][params.moduleId]['callbacks'] =\n\t\t\t\t\t\tthis._subscribers[params.type][params.moduleId]['callbacks'].filter((element: any) => {\n\t\t\t\t\t\treturn element !== params.callback\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(typeof (this._subscribers[params.type]) === 'undefined')\n\t\t\t{\n\t\t\t\tthis._subscribers[params.type] = []\n\t\t\t}\n\n\t\t\tthis._subscribers[params.type].push(params.callback)\n\n\t\t\treturn () => {\n\t\t\t\tif(\n\t\t\t\t\ttypeof params.type === 'undefined'\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tthis._subscribers[params.type] =\n\t\t\t\t\tthis._subscribers[params.type].filter((element: any) => {\n\t\t\t\t\treturn element !== params.callback\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t * @param {TypeSubscriptionCommandHandler} handler\n\t * @returns {Function} - Unsubscribe callback function\n\t */\n\tprivate attachCommandHandler(handler: TypeSubscriptionCommandHandler): Function\n\t{\n\t\tif (\n\t\t\ttypeof handler.getModuleId !== 'function'\n\t\t\t|| typeof handler.getModuleId() !== 'string'\n\t\t)\n\t\t{\n\t\t\tthis.getLogger().error(`${Text.getDateForLog()}: Pull.attachCommandHandler: result of handler.getModuleId() is not a string.`)\n\t\t\treturn () => {}\n\t\t}\n\n\t\tlet type = SubscriptionType.Server;\n\t\tif (typeof handler.getSubscriptionType === 'function')\n\t\t{\n\t\t\ttype = handler.getSubscriptionType()\n\t\t}\n\n\t\treturn this.subscribe({\n\t\t\ttype: type,\n\t\t\tmoduleId: handler.getModuleId(),\n\t\t\tcallback: (data: TypePullMessage) => {\n\t\t\t\tlet method = null\n\n\t\t\t\tif (typeof handler.getMap === 'function')\n\t\t\t\t{\n\t\t\t\t\tconst mapping = handler.getMap()\n\t\t\t\t\tif(\n\t\t\t\t\t\tmapping\n\t\t\t\t\t\t&& typeof mapping === 'object'\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst rowMapping = mapping[data.command]\n\t\t\t\t\t\tif(\n\t\t\t\t\t\t\ttypeof rowMapping === 'function'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod = rowMapping.bind(handler)\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(\n\t\t\t\t\t\t\ttypeof rowMapping === 'string'\n\t\t\t\t\t\t\t&& typeof handler[rowMapping] === 'function'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod = handler[rowMapping].bind(handler);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * handler.handleSomeCommandName: CommandHandlerFunction\n\t\t\t\t */\n\t\t\t\tif(!method)\n\t\t\t\t{\n\t\t\t\t\tconst methodName = `handle${Text.capitalize(data.command)}`\n\t\t\t\t\tif(typeof handler[methodName] === 'function')\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod = handler[methodName].bind(handler);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(method)\n\t\t\t\t{\n\t\t\t\t\tif(\n\t\t\t\t\t\tthis._debug\n\t\t\t\t\t\t&& this._context !== 'master'\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getLogger().warn(\n\t\t\t\t\t\t\t`${Text.getDateForLog()}: Pull.attachCommandHandler: result of handler.getModuleId() is not a string`,\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tmethod(\n\t\t\t\t\t\tdata.params,\n\t\t\t\t\t\tdata.extra,\n\t\t\t\t\t\tdata.command\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\n\t/**\n\t * @done\n\t * @param config\n\t */\n\tpublic async start(\n\t\tconfig: null|TypePullClientConfig & {\n\t\t\tskipReconnectToLastSession?: boolean\n\t\t} = null\n\t): Promise<boolean>\n\t{\n\t\tlet allowConfigCaching = true\n\n\t\tif(this.isConnected())\n\t\t{\n\t\t\treturn Promise.resolve(true)\n\t\t}\n\n\t\tif(\n\t\t\tthis._starting\n\t\t\t&& this._startingPromise\n\t\t)\n\t\t{\n\t\t\treturn this._startingPromise\n\t\t}\n\n\t\tif(!this._userId)\n\t\t{\n\t\t\tthrow new Error('Not set userId')\n\t\t}\n\n\t\tif(this._siteId === 'none')\n\t\t{\n\t\t\tthrow new Error('Not set siteId')\n\t\t}\n\n\t\tlet skipReconnectToLastSession = false\n\t\tif(!!config && Type.isPlainObject(config))\n\t\t{\n\t\t\tif(typeof config?.skipReconnectToLastSession !== 'undefined')\n\t\t\t{\n\t\t\t\tskipReconnectToLastSession = config.skipReconnectToLastSession\n\t\t\t\tdelete config.skipReconnectToLastSession\n\t\t\t}\n\n\t\t\tthis._config = config\n\t\t\tallowConfigCaching = false\n\t\t}\n\n\t\tif(!this._enabled)\n\t\t{\n\t\t\treturn Promise.reject({\n\t\t\t\tex: {\n\t\t\t\t\terror: 'PULL_DISABLED',\n\t\t\t\t\terror_description: 'Push & Pull server is disabled'\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tconst now = (new Date()).getTime()\n\t\tlet oldSession\n\t\tif(\n\t\t\t!skipReconnectToLastSession\n\t\t\t&& this._storage\n\t\t)\n\t\t{\n\t\t\toldSession = this._storage.get(LS_SESSION, null)\n\t\t}\n\n\t\tif(\n\t\t\tType.isPlainObject(oldSession)\n\t\t\t&& oldSession.hasOwnProperty('ttl')\n\t\t\t&& oldSession.ttl >= now\n\t\t)\n\t\t{\n\t\t\tthis._session.mid = oldSession.mid\n\t\t}\n\n\t\tthis._starting = true\n\t\treturn this._startingPromise = new Promise((resolve, reject) => {\n\t\t\tthis.loadConfig('client_start')\n\t\t\t\t.then((config) => {\n\t\t\t\t\tthis.setConfig(\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\tallowConfigCaching\n\t\t\t\t\t)\n\t\t\t\t\tthis.init()\n\t\t\t\t\tthis.updateWatch(true)\n\t\t\t\t\tthis.startCheckConfig()\n\n\t\t\t\t\tthis.connect()\n\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\t() => resolve(true),\n\t\t\t\t\t\t\t(error) => reject(error)\n\t\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis._starting = false\n\t\t\t\t\tthis.status = PullStatus.Offline\n\t\t\t\t\tthis.stopCheckConfig()\n\t\t\t\t\tthis.getLogger().error(`${Text.getDateForLog()}: Pull: could not read push-server config `, error)\n\t\t\t\t\treject(error)\n\t\t\t\t})\n\t\t})\n\t}\n\n\n\t/**\n\t * @done\n\t * @param disconnectCode\n\t * @param disconnectReason\n\t */\n\tpublic restart(\n\t\tdisconnectCode:number|CloseReasons = CloseReasons.NORMAL_CLOSURE,\n\t\tdisconnectReason: string = 'manual restart'\n\t): void\n\t{\n\t\tif(this._restartTimeout)\n\t\t{\n\t\t\tclearTimeout(this._restartTimeout)\n\t\t\tthis._restartTimeout = null\n\t\t}\n\n\t\tthis.getLogger().log(`${Text.getDateForLog()}: Pull: restarting with code ${disconnectCode}`)\n\n\t\tthis.disconnect(\n\t\t\tdisconnectCode,\n\t\t\tdisconnectReason\n\t\t)\n\n\t\tif(this._storage)\n\t\t{\n\t\t\tthis._storage.remove(LsKeys.PullConfig)\n\t\t}\n\n\t\tthis._config = null\n\n\t\tconst loadConfigReason = `${disconnectCode}_${disconnectReason.replaceAll(' ', '_')}`\n\t\tthis.loadConfig(loadConfigReason)\n\t\t\t.then(\n\t\t\t\t(config) => {\n\t\t\t\t\tthis.setConfig(config, true)\n\t\t\t\t\tthis.updateWatch()\n\t\t\t\t\tthis.startCheckConfig()\n\t\t\t\t\tthis.connect()\n\t\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\t\tthis.getLogger().error(error)\n\t\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\t(error) => {\n\t\t\t\t\tthis.getLogger().error(`${Text.getDateForLog()}: Pull: could not read push-server config `, error)\n\n\t\t\t\t\tthis.status = PullStatus.Offline\n\t\t\t\t\tif(this._reconnectTimeout)\n\t\t\t\t\t{\n\t\t\t\t\t\tclearTimeout(this._reconnectTimeout)\n\t\t\t\t\t\tthis._reconnectTimeout = null\n\t\t\t\t\t}\n\n\t\t\t\t\tif(\n\t\t\t\t\t\terror?.status == 401\n\t\t\t\t\t\t|| error?.status == 403\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.stopCheckConfig()\n\t\t\t\t\t\tthis.onCustomEvent('onPullError', ['AUTHORIZE_ERROR'])\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t}\n\n\n\t/**\n\t * @done\n\t */\n\tpublic stop(\n\t\tdisconnectCode: number|CloseReasons = CloseReasons.NORMAL_CLOSURE,\n\t\tdisconnectReason: string = 'manual stop'\n\t): void\n\t{\n\t\tthis.disconnect(\n\t\t\tdisconnectCode,\n\t\t\tdisconnectReason\n\t\t)\n\n\t\tthis.stopCheckConfig()\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic reconnect(\n\t\tdisconnectCode: number|CloseReasons,\n\t\tdisconnectReason: string,\n\t\tdelay: number = 1\n\t): void\n\t{\n\t\tthis.disconnect(\n\t\t\tdisconnectCode,\n\t\t\tdisconnectReason\n\t\t)\n\n\t\tthis.scheduleReconnect(\n\t\t\tdelay\n\t\t)\n\t}\n\n\t/**\n\t * @done\n\t * @param lastMessageId\n\t */\n\tpublic setLastMessageId(lastMessageId: string): void\n\t{\n\t\tthis._session.mid = lastMessageId;\n\t}\n\n\t/**\n\t * @done\n\t *\n\t * Send single message to the specified users.\n\t *\n\t * @param users User ids of the message receivers.\n\t * @param moduleId Name of the module to receive message,\n\t * @param command Command name.\n\t * @param {object} params Command parameters.\n\t * @param [expiry] Message expiry time in seconds.\n\t * @return {Promise}\n\t */\n\tpublic async sendMessage(\n\t\tusers: number[],\n\t\tmoduleId: string,\n\t\tcommand: string,\n\t\tparams: any,\n\t\texpiry?: number\n\t): Promise<any>\n\t{\n\t\tconst message = {\n\t\t\tuserList: users,\n\t\t\tbody: {\n\t\t\t\tmodule_id: moduleId,\n\t\t\t\tcommand: command,\n\t\t\t\tparams: params,\n\t\t\t},\n\t\t\texpiry: expiry\n\t\t}\n\n\t\tif(this.isJsonRpc())\n\t\t{\n\t\t\treturn this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\t\tRpcMethod.Publish,\n\t\t\t\tmessage\n\t\t\t)\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn this.sendMessageBatch([message])\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t * Send single message to the specified public channels.\n\t *\n\t * @param publicChannels Public ids of the channels to receive message.\n\t * @param moduleId Name of the module to receive message,\n\t * @param command Command name.\n\t * @param {object} params Command parameters.\n\t * @param [expiry] Message expiry time in seconds.\n\t * @return {Promise}\n\t */\n\tpublic async sendMessageToChannels(\n\t\tpublicChannels: string[],\n\t\tmoduleId: string,\n\t\tcommand: string,\n\t\tparams: any,\n\t\texpiry?: number\n\t): Promise<any>\n\t{\n\t\tconst message = {\n\t\t\tchannelList: publicChannels,\n\t\t\tbody: {\n\t\t\t\tmodule_id: moduleId,\n\t\t\t\tcommand: command,\n\t\t\t\tparams: params,\n\t\t\t},\n\t\t\texpiry: expiry\n\t\t}\n\n\t\tif (this.isJsonRpc())\n\t\t{\n\t\t\treturn this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\t\tRpcMethod.Publish,\n\t\t\t\tmessage\n\t\t\t)\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn this.sendMessageBatch([message])\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t * @param debugFlag\n\t */\n\tpublic capturePullEvent(debugFlag: boolean = true): void\n\t{\n\t\tthis._debug = debugFlag;\n\t}\n\n\t/**\n\t * @done\n\t * @param loggingFlag\n\t */\n\tpublic enableLogging(loggingFlag: boolean = true): void\n\t{\n\t\tthis._sharedConfig.setLoggingEnabled(loggingFlag)\n\t\tthis._loggingEnabled = loggingFlag\n\t}\n\n\t/**\n\t * Returns list channels that the connection is subscribed to.\n\t *\n\t * @returns {Promise}\n\t */\n\tpublic async listChannels(): Promise<any>\n\t{\n\t\treturn this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\tRpcMethod.ListChannels, {}\n\t\t) || Promise.reject(new Error('jsonRpcAdapter not init'))\n\t}\n\n\t/**\n\t * @done\n\t * Returns \"last seen\" time in seconds for the users. Result format: Object{userId: int}\n\t * If the user is currently connected - will return 0.\n\t * If the user if offline - will return diff between current timestamp and last seen timestamp in seconds.\n\t * If the user was never online - the record for user will be missing from the result object.\n\t *\n\t * @param {integer[]} userList List of user ids.\n\t * @returns {Promise}\n\t */\n\tpublic async getUsersLastSeen(userList: number[]): Promise<Record<number, number>>\n\t{\n\t\tif(\n\t\t\t!Type.isArray(userList)\n\t\t\t|| !userList.every(item => typeof (item) === 'number')\n\t\t)\n\t\t{\n\t\t\tthrow new Error('userList must be an array of numbers')\n\t\t}\n\n\t\tlet result: Record<number, number> = {}\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\t\tRpcMethod.GetUsersLastSeen,\n\t\t\t\t{\n\t\t\t\t\tuserList: userList\n\t\t\t\t}\n\t\t\t)\n\t\t\t\t.then((response: any) => {\n\t\t\t\t\t/**\n\t\t\t\t\t * @memo fix this\n\t\t\t\t\t */\n\t\t\t\t\tlet unresolved = []\n\t\t\t\t\tfor(let i = 0; i < userList.length; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!response.hasOwnProperty(userList[i]))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tunresolved.push(userList[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(unresolved.length === 0)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn resolve(result)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst params = {\n\t\t\t\t\t\tuserIds: unresolved,\n\t\t\t\t\t\tsendToQueueSever: true\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._restClient.callMethod(\n\t\t\t\t\t\t'pull.api.user.getLastSeen',\n\t\t\t\t\t\tparams\n\t\t\t\t\t)\n\t\t\t\t\t\t.then((response: AjaxResult) => {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @memo fix this\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tlet data = (response.getData() as Payload<Record<NumberString, NumberString>>).result\n\t\t\t\t\t\t\tfor (let userId in data)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tresult[Number(userId)] = Number(data[userId])\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn resolve(result)\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\t\tthis.getLogger().error(error)\n\t\t\t\t\t\t\treject(error)\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tthis.getLogger().error(error)\n\t\t\t\t\treject(error)\n\t\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * @done\n\t * Pings server. In case of success promise will be resolved, otherwise - rejected.\n\t *\n\t * @param {number} timeout Request timeout in seconds\n\t * @returns {Promise}\n\t */\n\tpublic async ping(timeout: number = 5): Promise<void>\n\t{\n\t\treturn this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\tRpcMethod.Ping,\n\t\t\t{},\n\t\t\ttimeout\n\t\t)\n\t}\n\n\t/**\n\t * @done\n\t * @param userId {number}\n\t * @param callback {UserStatusCallback}\n\t * @returns {Promise}\n\t */\n\tpublic async subscribeUserStatusChange(\n\t\tuserId: number,\n\t\tcallback: UserStatusCallback\n\t): Promise<void>\n\t{\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\t\tRpcMethod.SubscribeStatusChange,\n\t\t\t\t{\n\t\t\t\t\tuserId\n\t\t\t\t}\n\t\t\t)\n\t\t\t\t.then(() => {\n\t\t\t\t\tif(!this._userStatusCallbacks[userId])\n\t\t\t\t\t{\n\t\t\t\t\t\tthis._userStatusCallbacks[userId] = []\n\t\t\t\t\t}\n\n\t\t\t\t\tif(Type.isFunction(callback))\n\t\t\t\t\t{\n\t\t\t\t\t\tthis._userStatusCallbacks[userId].push(callback)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn resolve()\n\t\t\t\t})\n\t\t\t\t.catch(err => reject(err))\n\t\t})\n\t}\n\n\t/**\n\t * @done\n\t * @param {number} userId\n\t * @param {UserStatusCallback} callback\n\t * @returns {Promise}\n\t */\n\tpublic async unsubscribeUserStatusChange(\n\t\tuserId: number,\n\t\tcallback: UserStatusCallback\n\t): Promise<void>\n\t{\n\t\tif(this._userStatusCallbacks[userId])\n\t\t{\n\t\t\tthis._userStatusCallbacks[userId] = this._userStatusCallbacks[userId].filter(\n\t\t\t\tcb => cb !== callback\n\t\t\t)\n\n\t\t\tif(this._userStatusCallbacks[userId].length === 0)\n\t\t\t{\n\t\t\t\treturn this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\t\t\tRpcMethod.UnsubscribeStatusChange,\n\t\t\t\t\t{\n\t\t\t\t\t\tuserId\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn Promise.resolve()\n\t}\n\t// endregion ////\n\n\t// region Get ////\n\t/**\n\t * @done\n\t */\n\tpublic getRevision(): number|null\n\t{\n\t\treturn (this._config && this._config.api) ? this._config.api.revision_web : null\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic getServerVersion(): number\n\t{\n\t\treturn (this._config && this._config.server) ? this._config.server.version : 0\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic getServerMode(): string|null\n\t{\n\t\treturn (this._config && this._config.server) ? this._config.server.mode : null;\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic getConfig(): null|TypePullClientConfig\n\t{\n\t\treturn this._config;\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic getDebugInfo(): any\n\t{\n\t\tif(!JSON || !JSON.stringify)\n\t\t{\n\t\t\treturn {}\n\t\t}\n\n\t\tlet configDump\n\t\tif(this._config && this._config.channels)\n\t\t{\n\t\t\tconfigDump = {\n\t\t\t\tChannelID: this._config.channels.private?.id || \"n/a\",\n\t\t\t\tChannelDie: this._config.channels.private?.end || \"n/a\",\n\t\t\t\tChannelDieShared: this._config.channels.shared?.end || \"n/a\"\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconfigDump = {\n\t\t\t\tConfigError: 'config is not loaded'\n\t\t\t}\n\t\t}\n\n\t\tlet websocketMode = '-'\n\t\tif(\n\t\t\tthis._connectors.webSocket\n\t\t\t&& (this._connectors.webSocket as WebSocketConnector)?.socket\n\t\t)\n\t\t{\n\t\t\tif(this.isJsonRpc())\n\t\t\t{\n\t\t\t\twebsocketMode = 'json-rpc'\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\twebsocketMode = (\n\t\t\t\t\t(this._connectors.webSocket as WebSocketConnector)?.socket?.url.search('binaryMode=true') != -1\n\t\t\t\t\t\t? 'protobuf'\n\t\t\t\t\t\t: 'text'\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t\"UserId\": this._userId + (this._userId > 0 ? '' : '(guest)'),\n\t\t\t\"Guest userId\": (this._guestMode && this._guestUserId !== 0 ? this._guestUserId : \"-\"),\n\t\t\t\"Browser online\": (navigator.onLine ? 'Y' : 'N'),\n\t\t\t\"Connect\": (this.isConnected() ? 'Y' : 'N'),\n\t\t\t\"Server type\": (this.isSharedMode() ? 'cloud' : 'local'),\n\t\t\t\"WebSocket supported\": (this.isWebSocketSupported() ? 'Y' : 'N'),\n\t\t\t\"WebSocket connected\": (this._connectors.webSocket && this._connectors.webSocket.connected ? 'Y' : 'N'),\n\t\t\t\"WebSocket mode\": websocketMode,\n\n\t\t\t\"Try connect\": (this._reconnectTimeout ? 'Y' : 'N'),\n\t\t\t\"Try number\": (this._connectionAttempt),\n\n\t\t\t\"Path\": (this.connector?.connectionPath || '-'),\n\t\t\t...configDump,\n\n\t\t\t\"Last message\": (this._session.mid ? this._session.mid : '-'),\n\t\t\t\"Session history\": this._session.history,\n\t\t\t\"Watch tags\": this._watchTagsQueue.entries(),\n\t\t}\n\t}\n\n\t/**\n\t * @process\n\t * @param connectionType\n\t */\n\tpublic getConnectionPath(connectionType: ConnectionType): string\n\t{\n\t\tlet path\n\t\tlet params: any = {}\n\n\t\tswitch(connectionType)\n\t\t{\n\t\t\tcase ConnectionType.WebSocket:\n\t\t\t\tpath = this._isSecure\n\t\t\t\t\t? this._config?.server.websocket_secure\n\t\t\t\t\t: this._config?.server.websocket\n\t\t\t\tbreak;\n\t\t\tcase ConnectionType.LongPolling:\n\t\t\t\tpath = this._isSecure\n\t\t\t\t\t? this._config?.server.long_pooling_secure\n\t\t\t\t\t: this._config?.server.long_polling\n\t\t\t\tbreak\n\t\t\tdefault: throw new Error(`Unknown connection type ${connectionType}`)\n\t\t}\n\n\t\tif(!Type.isStringFilled(path))\n\t\t{\n\t\t\tthrow new Error(`Empty path`)\n\t\t}\n\n\t\tif(\n\t\t\ttypeof (this._config?.jwt) === 'string'\n\t\t\t&& this._config?.jwt !== ''\n\t\t)\n\t\t{\n\t\t\tparams['token'] = this._config?.jwt\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlet channels: string[] = []\n\n\t\t\tif(this._config?.channels?.private)\n\t\t\t{\n\t\t\t\tchannels.push(this._config.channels.private?.id || '')\n\t\t\t}\n\n\t\t\tif(this._config?.channels.private?.id)\n\t\t\t{\n\t\t\t\tchannels.push(this._config.channels.private.id)\n\t\t\t}\n\n\t\t\tif(this._config?.channels.shared?.id)\n\t\t\t{\n\t\t\t\tchannels.push(this._config.channels.shared.id)\n\t\t\t}\n\n\t\t\tif(channels.length === 0)\n\t\t\t{\n\t\t\t\tthrow new Error(`Empty channels`)\n\t\t\t}\n\n\t\t\tparams['CHANNEL_ID'] = channels.join('/')\n\t\t}\n\n\t\tif(this.isJsonRpc())\n\t\t{\n\t\t\tparams.jsonRpc = 'true'\n\t\t}\n\t\telse if(this.isProtobufSupported())\n\t\t{\n\t\t\tparams.binaryMode = 'true'\n\t\t}\n\n\t\tif(this.isSharedMode())\n\t\t{\n\t\t\tif(!this._config?.clientId)\n\t\t\t{\n\t\t\t\tthrow new Error('Push-server is in shared mode, but clientId is not set')\n\t\t\t}\n\n\t\t\tparams.clientId = this._config.clientId\n\t\t}\n\t\tif(this._session.mid)\n\t\t{\n\t\t\tparams.mid = this._session.mid\n\t\t}\n\t\tif(this._session.tag)\n\t\t{\n\t\t\tparams.tag = this._session.tag\n\t\t}\n\t\tif(this._session.time)\n\t\t{\n\t\t\tparams.time = this._session.time\n\t\t}\n\t\tparams.revision = REVISION\n\n\t\treturn `${path}?${Text.buildQueryString(params)}`\n\t}\n\n\t/**\n\t * @process\n\t */\n\tpublic getPublicationPath(): string\n\t{\n\t\tconst path = this._isSecure\n\t\t\t? this._config?.server.publish_secure\n\t\t\t: this._config?.server.publish\n\n\t\tif(!path)\n\t\t{\n\t\t\treturn ''\n\t\t}\n\n\t\tlet channels: string[] = []\n\n\t\tif(this._config?.channels.private?.id)\n\t\t{\n\t\t\tchannels.push(this._config.channels.private.id)\n\t\t}\n\n\t\tif(this._config?.channels.shared?.id)\n\t\t{\n\t\t\tchannels.push(this._config.channels.shared.id)\n\t\t}\n\n\t\tconst params = {\n\t\t\tCHANNEL_ID: channels.join('/')\n\t\t}\n\n\t\treturn path + '?' + Text.buildQueryString(params)\n\t}\n\t// endregion ////\n\n\t// region Is* ////\n\t/**\n\t * @done\n\t */\n\tpublic isConnected(): boolean\n\t{\n\t\treturn this.connector ? this.connector.connected : false\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic isWebSocketSupported(): boolean\n\t{\n\t\treturn typeof (window.WebSocket) !== 'undefined'\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic isWebSocketAllowed(): boolean\n\t{\n\t\tif(this._sharedConfig.isWebSocketBlocked())\n\t\t{\n\t\t\treturn false\n\t\t}\n\n\t\treturn this.isWebSocketEnabled()\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic isWebSocketEnabled(): boolean\n\t{\n\t\tif(!this.isWebSocketSupported())\n\t\t{\n\t\t\treturn false\n\t\t}\n\n\t\tif(!this._config)\n\t\t{\n\t\t\treturn false\n\t\t}\n\n\t\tif(!this._config.server)\n\t\t{\n\t\t\treturn false\n\t\t}\n\n\t\treturn this._config.server.websocket_enabled\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic isPublishingSupported(): boolean\n\t{\n\t\treturn this.getServerVersion() > 3\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic isPublishingEnabled(): boolean\n\t{\n\t\tif(!this.isPublishingSupported())\n\t\t{\n\t\t\treturn false\n\t\t}\n\n\t\treturn this._config?.server.publish_enabled === true\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic isProtobufSupported(): boolean\n\t{\n\t\treturn (\n\t\t\tthis.getServerVersion() == 4\n\t\t\t&& !Browser.isIE()\n\t\t)\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic isJsonRpc(): boolean\n\t{\n\t\treturn (this.getServerVersion() >= 5)\n\t}\n\n\t/**\n\t * @done\n\t */\n\tpublic isSharedMode(): boolean\n\t{\n\t\treturn (this.getServerMode() === ServerMode.Shared)\n\t}\n\t// endregion ////\n\n\t// region Events ////\n\t/**\n\t * @dones\n\t * @param {TypePullClientEmitConfig} params\n\t * @returns {boolean}\n\t */\n\tprivate emit(params: TypePullClientEmitConfig): boolean\n\t{\n\t\tif(\n\t\t\tparams.type == SubscriptionType.Server\n\t\t\t|| params.type == SubscriptionType.Client\n\t\t)\n\t\t{\n\t\t\tif(typeof (this._subscribers[params.type]) === 'undefined')\n\t\t\t{\n\t\t\t\tthis._subscribers[params.type] = {}\n\t\t\t}\n\n\t\t\tif((typeof params.moduleId === 'undefined'))\n\t\t\t{\n\t\t\t\tthrow new Error(`${Text.getDateForLog()}: Pull.emit: parameter moduleId is not specified`)\n\t\t\t}\n\n\t\t\tif(typeof (this._subscribers[params.type][params.moduleId]) === 'undefined')\n\t\t\t{\n\t\t\t\tthis._subscribers[params.type][params.moduleId] = {\n\t\t\t\t\tcallbacks: [],\n\t\t\t\t\tcommands: {}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this._subscribers[params.type][params.moduleId]['callbacks'].length > 0)\n\t\t\t{\n\t\t\t\tthis._subscribers[params.type][params.moduleId]['callbacks'].forEach((callback: CommandHandlerFunctionV1) => {\n\t\t\t\t\tcallback(\n\t\t\t\t\t\tparams.data as Record<string, any>,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: params.type,\n\t\t\t\t\t\t\tmoduleId: params.moduleId\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!(typeof (params.data) === 'undefined')\n\t\t\t\t&& !(typeof (params.data['command']) === 'undefined')\n\t\t\t\t&& this._subscribers[params.type][params.moduleId]['commands'][params.data['command']]\n\t\t\t\t&& this._subscribers[params.type][params.moduleId]['commands'][params.data['command']].length > 0)\n\t\t\t{\n\t\t\t\tthis._subscribers[params.type][params.moduleId]['commands'][params.data['command']].forEach((callback: CommandHandlerFunctionV2) => {\n\t\t\t\t\tif((typeof (params.data) === 'undefined'))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback(\n\t\t\t\t\t\tparams.data['params'],\n\t\t\t\t\t\tparams.data['extra'],\n\t\t\t\t\t\tparams.data['command'],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: params.type,\n\t\t\t\t\t\t\tmoduleId: params.moduleId as string\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn true\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(typeof (this._subscribers[params.type]) === 'undefined')\n\t\t\t{\n\t\t\t\tthis._subscribers[params.type] = []\n\t\t\t}\n\n\t\t\tif(this._subscribers[params.type].length <= 0)\n\t\t\t{\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tthis._subscribers[params.type].forEach((callback: CommandHandlerFunctionV1) => {\n\t\t\t\tcallback(\n\t\t\t\t\tparams.data as Record<string, any>,\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: params.type\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t})\n\n\t\t\treturn true\n\t\t}\n\t}\n\n\t/**\n\t * @process\n\t *\n\t * @param message\n\t * @private\n\t */\n\tprivate broadcastMessage(message: TypePullClientMessageBody): void\n\t{\n\t\tconst moduleId = message.module_id = message.module_id.toLowerCase()\n\t\tconst command = message.command\n\n\t\tif(!message.extra)\n\t\t{\n\t\t\tmessage.extra = {}\n\t\t}\n\n\t\tif(message.extra.server_time_unix)\n\t\t{\n\t\t\tmessage.extra.server_time_ago = (((new Date()).getTime() - (message.extra.server_time_unix * 1000)) / 1000) - (this._config?.server.timeShift\n\t\t\t\t? this._config?.server.timeShift : 0)\n\t\t\tmessage.extra.server_time_ago = message.extra.server_time_ago > 0\n\t\t\t\t? message.extra.server_time_ago\n\t\t\t\t: 0\n\t\t}\n\n\t\tthis.logMessage(message)\n\t\ttry\n\t\t{\n\t\t\tif(\n\t\t\t\tmessage.extra.sender\n\t\t\t\t&& message.extra.sender.type === SenderType.Client\n\t\t\t)\n\t\t\t{\n\t\t\t\tthis.onCustomEvent('onPullClientEvent-' + moduleId, [command, message.params, message.extra], true)\n\t\t\t\tthis.onCustomEvent('onPullClientEvent', [moduleId, command, message.params, message.extra], true)\n\n\t\t\t\tthis.emit({\n\t\t\t\t\ttype: SubscriptionType.Client,\n\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcommand: command,\n\t\t\t\t\t\tparams: Type.clone(message.params),\n\t\t\t\t\t\textra: Type.clone(message.extra)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\telse if(moduleId === 'pull')\n\t\t\t{\n\t\t\t\tthis.handleInternalPullEvent(command, message);\n\t\t\t}\n\t\t\telse if(moduleId == 'online')\n\t\t\t{\n\t\t\t\tif((message?.extra?.server_time_ago || 0) < 240)\n\t\t\t\t{\n\t\t\t\t\tthis.onCustomEvent('onPullOnlineEvent', [command, message.params, message.extra], true)\n\n\t\t\t\t\tthis.emit({\n\t\t\t\t\t\ttype: SubscriptionType.Online,\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tcommand: command,\n\t\t\t\t\t\t\tparams: Type.clone(message.params),\n\t\t\t\t\t\t\textra: Type.clone(message.extra)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tif(command === 'userStatusChange')\n\t\t\t\t{\n\t\t\t\t\tthis.emitUserStatusChange(\n\t\t\t\t\t\tmessage.params.user_id,\n\t\t\t\t\t\tmessage.params.online\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.onCustomEvent('onPullEvent-' + moduleId, [command, message.params, message.extra], true)\n\t\t\t\tthis.onCustomEvent('onPullEvent', [moduleId, command, message.params, message.extra], true)\n\n\t\t\t\tthis.emit({\n\t\t\t\t\ttype: SubscriptionType.Server,\n\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcommand: command,\n\t\t\t\t\t\tparams: Type.clone(message.params),\n\t\t\t\t\t\textra: Type.clone(message.extra)\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tcatch(event)\n\t\t{\n\t\t\tthis.getLogger().warn(\n\t\t\t\t\"\\n========= PULL ERROR ===========\\n\" +\n\t\t\t\t\"Error type: broadcastMessages execute error\\n\" +\n\t\t\t\t\"Error event: \", event, \"\\n\" +\n\t\t\t\t\"Message: \", message, \"\\n\" +\n\t\t\t\t\"================================\\n\"\n\t\t\t)\n\t\t}\n\n\t\tif(\n\t\t\tmessage.extra\n\t\t\t&& message.extra.revision_web\n\t\t)\n\t\t{\n\t\t\tthis.checkRevision(Text.toInteger(message.extra.revision_web))\n\t\t}\n\t}\n\n\n\t/**\n\t * @process\n\t *\n\t * @param messages\n\t * @private\n\t */\n\tprivate broadcastMessages(messages: TypePullClientMessageBody[]): void\n\t{\n\t\tmessages.forEach(message => this.broadcastMessage(message))\n\t}\n\n\t// endregion ////\n\n\t// region sendMessage ////\n\t/**\n\t * @done\n\t * Sends batch of messages to the multiple public channels.\n\t *\n\t * @param messageBatchList Array of messages to send.\n\t * @return void\n\t */\n\tprivate async sendMessageBatch(\n\t\tmessageBatchList: TypePullClientMessageBatch[]\n\t): Promise<any>\n\t{\n\t\tif(!this.isPublishingEnabled())\n\t\t{\n\t\t\tthis.getLogger().error(`Client publishing is not supported or is disabled`)\n\t\t\treturn Promise.reject(new Error(`Client publishing is not supported or is disabled`))\n\t\t}\n\n\t\tif (this.isJsonRpc())\n\t\t{\n\t\t\tlet rpcRequest = this._jsonRpcAdapter?.createPublishRequest(messageBatchList)\n\t\t\tthis.connector?.send(JSON.stringify(rpcRequest))\n\n\t\t\treturn Promise.resolve(true)\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlet userIds: Record<number, number> = {}\n\t\t\tfor (let i = 0; i < messageBatchList.length; i++)\n\t\t\t{\n\t\t\t\tconst messageBatch = messageBatchList[i]\n\n\t\t\t\tif(typeof (messageBatch.userList) !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\tconst cnt = messageBatch.userList.length\n\n\t\t\t\t\tfor(let j = 0; j < cnt; j++)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst userId = Number(messageBatch.userList[j])\n\n\t\t\t\t\t\tuserIds[userId] = userId\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._channelManager?.getPublicIds(Object.values(userIds))\n\t\t\t.then((publicIds) => {\n\t\t\t\tconst response = this.connector?.send(\n\t\t\t\t\tthis.encodeMessageBatch(\n\t\t\t\t\t\tmessageBatchList,\n\t\t\t\t\t\tpublicIds\n\t\t\t\t\t)\n\t\t\t\t)\n\n\t\t\t\treturn Promise.resolve(response)\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t * @param messageBatchList\n\t * @param publicIds\n\t */\n\tprivate encodeMessageBatch(\n\t\tmessageBatchList: TypePullClientMessageBatch[],\n\t\tpublicIds: Record<number, TypeChanel>\n\t): ArrayBuffer|string\n\t{\n\t\tlet messages: any[] = []\n\t\tmessageBatchList.forEach((messageFields) => {\n\n\t\t\tconst messageBody = messageFields.body\n\n\t\t\tlet receivers: any[] = []\n\t\t\tif(messageFields.userList)\n\t\t\t{\n\t\t\t\treceivers = this.createMessageReceivers(\n\t\t\t\t\tmessageFields.userList,\n\t\t\t\t\tpublicIds\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif(messageFields.channelList)\n\t\t\t{\n\t\t\t\tif(!Type.isArray(messageFields.channelList))\n\t\t\t\t{\n\t\t\t\t\tthrow new Error('messageFields.publicChannels must be an array')\n\t\t\t\t}\n\n\t\t\t\tmessageFields.channelList.forEach((publicChannel) => {\n\t\t\t\t\tlet publicId\n\t\t\t\t\tlet signature\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof (publicChannel) === 'string'\n\t\t\t\t\t\t&& publicChannel.includes('.'))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst fields = publicChannel.toString().split('.')\n\t\t\t\t\t\tpublicId = fields[0]\n\t\t\t\t\t\tsignature = fields[1]\n\t\t\t\t\t}\n\t\t\t\t\telse if(\n\t\t\t\t\t\ttypeof (publicChannel) === 'object'\n\t\t\t\t\t\t&& ('publicId' in publicChannel)\n\t\t\t\t\t\t&& ('signature' in publicChannel)\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tpublicId = publicChannel?.publicId\n\t\t\t\t\t\tsignature = publicChannel?.signature\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthrow new Error('Public channel MUST be either a string, formatted like \"{publicId}.{signature}\" or an object with fields \\'publicId\\' and \\'signature\\'')\n\t\t\t\t\t}\n\n\t\t\t\t\treceivers.push(Receiver.create({\n\t\t\t\t\t\tid: this.encodeId(publicId),\n\t\t\t\t\t\tsignature: this.encodeId(signature)\n\t\t\t\t\t}))\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst message = IncomingMessage.create({\n\t\t\t\treceivers: receivers,\n\t\t\t\tbody: JSON.stringify(messageBody),\n\t\t\t\texpiry: messageFields.expiry || 0\n\t\t\t})\n\t\t\tmessages.push(message)\n\t\t})\n\n\t\tconst requestBatch = RequestBatch.create({\n\t\t\trequests: [{\n\t\t\t\tincomingMessages: {\n\t\t\t\t\tmessages: messages\n\t\t\t\t}\n\t\t\t}]\n\t\t})\n\n\t\treturn RequestBatch.encode(requestBatch).finish()\n\t}\n\n\t/**\n\t * @done\n\t * @memo fix return type\n\t * @param users\n\t * @param publicIds\n\t */\n\tprivate createMessageReceivers(\n\t\tusers: number[],\n\t\tpublicIds: Record<number, TypeChanel>\n\t): any[]\n\t{\n\t\tlet result = []\n\t\tfor(let i = 0; i < users.length; i++)\n\t\t{\n\t\t\tlet userId = users[i]\n\t\t\tif(\n\t\t\t\t!publicIds[userId]\n\t\t\t\t|| !publicIds[userId].publicId\n\t\t\t)\n\t\t\t{\n\t\t\t\tthrow new Error(`Could not determine public id for user ${userId}`)\n\t\t\t}\n\n\t\t\tresult.push(Receiver.create({\n\t\t\t\tid: this.encodeId(publicIds[userId].publicId),\n\t\t\t\tsignature: this.encodeId(publicIds[userId].signature)\n\t\t\t}))\n\t\t}\n\n\t\treturn result\n\t}\n\t// endregion ////\n\n\t// region _userStatusCallbacks ////\n\t/**\n\t * @done\n\t * @param userId\n\t * @param isOnline\n\t * @private\n\t */\n\tprivate emitUserStatusChange(\n\t\tuserId: number,\n\t\tisOnline: boolean\n\t): void\n\t{\n\t\tif(this._userStatusCallbacks[userId])\n\t\t{\n\t\t\tthis._userStatusCallbacks[userId].forEach(callback=> callback({\n\t\t\t\tuserId,\n\t\t\t\tisOnline\n\t\t\t}))\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t * @private\n\t */\n\tprivate restoreUserStatusSubscription(): void\n\t{\n\t\tfor(const userId in this._userStatusCallbacks)\n\t\t{\n\t\t\tif(\n\t\t\t\tthis._userStatusCallbacks.hasOwnProperty(userId)\n\t\t\t\t&& this._userStatusCallbacks[userId].length > 0\n\t\t\t)\n\t\t\t{\n\t\t\t\tthis._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\t\t\tRpcMethod.SubscribeStatusChange,\n\t\t\t\t\t{\n\t\t\t\t\t\tuserId: userId\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\t// endregion ////\n\n\t// region Config ////\n\t/**\n\t * @done\n\t *\n\t * @param logTag\n\t * @private\n\t */\n\tprivate async loadConfig(logTag?: string): Promise<TypePullClientConfig>\n\t{\n\t\tif(!this._config)\n\t\t{\n\t\t\tthis._config = Object.assign({}, EmptyConfig)\n\n\t\t\tlet config: any\n\t\t\tif(this._storage)\n\t\t\t{\n\t\t\t\tconfig = this._storage.get(LsKeys.PullConfig, null)\n\t\t\t}\n\n\t\t\tif(\n\t\t\t\tthis.isConfigActual(config)\n\t\t\t\t&& this.checkRevision(config.api.revision_web)\n\t\t\t)\n\t\t\t{\n\t\t\t\treturn Promise.resolve(config)\n\t\t\t}\n\t\t\telse if(this._storage)\n\t\t\t{\n\t\t\t\tthis._storage.remove(LsKeys.PullConfig)\n\t\t\t}\n\t\t}\n\t\telse if(\n\t\t\tthis.isConfigActual(this._config)\n\t\t\t&& this.checkRevision(this._config.api.revision_web)\n\t\t)\n\t\t{\n\t\t\treturn Promise.resolve(this._config);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._config = Object.assign({}, EmptyConfig)\n\t\t}\n\n\t\treturn new Promise((resolve, reject) => {\n\n\t\t\tthis._restClient.getHttpClient().setLogTag(logTag)\n\n\t\t\tthis._restClient.callMethod(\n\t\t\t\tthis._configGetMethod,\n\t\t\t\t{\n\t\t\t\t\tCACHE: 'N'\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then((response) => {\n\t\t\t\tconst data = response.getData().result\n\n\t\t\t\tlet timeShift\n\t\t\t\ttimeShift = Math.floor(((new Date()).getTime() - new Date(data.serverTime).getTime()) / 1000)\n\n\t\t\t\tdelete data.serverTime\n\n\t\t\t\tlet config = Object.assign({}, data);\n\t\t\t\tconfig.server.timeShift = timeShift\n\n\t\t\t\tresolve(config)\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif(\n\t\t\t\t\terror?.answerError?.error === 'AUTHORIZE_ERROR'\n\t\t\t\t\t|| error?.answerError?.error === 'WRONG_AUTH_TYPE'\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\t(error as AjaxError).status = 403;\n\t\t\t\t}\n\n\t\t\t\treject(error)\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis._restClient.getHttpClient().clearLogTag()\n\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * @done\n\t * @param config\n\t */\n\tprivate isConfigActual(config: any): boolean\n\t{\n\t\tif(!Type.isPlainObject(config))\n\t\t{\n\t\t\treturn false\n\t\t}\n\n\t\tif(Number(config.server.config_timestamp) !== this._configTimestamp)\n\t\t{\n\t\t\treturn false\n\t\t}\n\n\t\tconst now = new Date()\n\n\t\tif(\n\t\t\tType.isNumber(config.exp)\n\t\t\t&& config.exp > 0\n\t\t\t&& config.exp < (now.getTime() / 1000)\n\t\t)\n\t\t{\n\t\t\treturn false\n\t\t}\n\n\t\tconst channelCount = Object.keys(config.channels).length\n\t\tif(channelCount === 0)\n\t\t{\n\t\t\treturn false\n\t\t}\n\n\t\tfor(let channelType in config.channels)\n\t\t{\n\t\t\tif(!config.channels.hasOwnProperty(channelType))\n\t\t\t{\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst channel = config.channels[channelType]\n\t\t\tconst channelEnd = new Date(channel.end)\n\n\t\t\tif(channelEnd < now)\n\t\t\t{\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\n\t/**\n\t * @done\n\t * @private\n\t */\n\tprivate startCheckConfig(): void\n\t{\n\t\tif(this._checkInterval)\n\t\t{\n\t\t\tclearInterval(this._checkInterval)\n\t\t\tthis._checkInterval = null\n\t\t}\n\n\t\tthis._checkInterval = setInterval(\n\t\t\tthis.checkConfig.bind(this),\n\t\t\tCONFIG_CHECK_INTERVAL\n\t\t)\n\t}\n\n\t/**\n\t * @done\n\t */\n\tprivate stopCheckConfig(): void\n\t{\n\t\tif(this._checkInterval)\n\t\t{\n\t\t\tclearInterval(this._checkInterval)\n\t\t}\n\t\tthis._checkInterval = null\n\t}\n\n\t/**\n\t * @done\n\t * @private\n\t */\n\tprivate checkConfig(): boolean\n\t{\n\t\tif (this.isConfigActual(this._config))\n\t\t{\n\t\t\tif(!this.checkRevision(Text.toInteger(this._config?.api.revision_web)))\n\t\t\t{\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.logToConsole('Stale config detected. Restarting')\n\t\t\tthis.restart(\n\t\t\t\tCloseReasons.CONFIG_EXPIRED,\n\t\t\t\t'config expired'\n\t\t\t)\n\t\t}\n\n\t\treturn true\n\t}\n\n\t/**\n\t * @done\n\t *\n\t * @param config\n\t * @param allowCaching\n\t * @private\n\t */\n\tprivate setConfig(\n\t\tconfig: TypePullClientConfig,\n\t\tallowCaching: boolean\n\t): void\n\t{\n\t\tfor(let key in config)\n\t\t{\n\t\t\tif(\n\t\t\t\tconfig.hasOwnProperty(key)\n\t\t\t\t&& this._config?.hasOwnProperty(key)\n\t\t\t)\n\t\t\t{\n\t\t\t\t// @ts-ignore\n\t\t\t\tthis._config[key] = config[key];\n\t\t\t}\n\t\t}\n\n\t\tif(config.publicChannels)\n\t\t{\n\t\t\tthis.setPublicIds(\n\t\t\t\tArray.from(Object.values(config.publicChannels))\n\t\t\t)\n\t\t}\n\n\t\tthis._configTimestamp = Number(config.server.config_timestamp)\n\n\t\tif(\n\t\t\tthis._storage\n\t\t\t&& allowCaching\n\t\t)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tthis._storage.set(\n\t\t\t\t\tLsKeys.PullConfig,\n\t\t\t\t\tconfig\n\t\t\t\t)\n\t\t\t}\n\t\t\tcatch(error)\n\t\t\t{\n\t\t\t\t/**\n\t\t\t\t * @memotry to delete the key \"history\"\n\t\t\t\t * (landing site change history, see http://jabber.bx/view.php?id=136492)\n\t\t\t\t */\n\t\t\t\tif(\n\t\t\t\t\tlocalStorage\n\t\t\t\t\t&& localStorage.removeItem\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tlocalStorage.removeItem('history')\n\t\t\t\t}\n\t\t\t\tthis.getLogger().error(`${Text.getDateForLog()}: Pull: Could not cache config in local storage. Error: `, error)\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t */\n\tprivate setPublicIds(publicIds: TypePublicIdDescriptor[]): void\n\t{\n\t\tthis._channelManager.setPublicIds(publicIds)\n\t}\n\n\t/**\n\t * @done\n\t * @param serverRevision\n\t * @private\n\t */\n\tprivate checkRevision(serverRevision: number): boolean\n\t{\n\t\tif(this._skipCheckRevision)\n\t\t{\n\t\t\treturn true\n\t\t}\n\n\t\tif(\n\t\t\tserverRevision > 0\n\t\t\t&& serverRevision !== REVISION\n\t\t)\n\t\t{\n\t\t\tthis._enabled = false\n\t\t\tthis.showNotification('PULL_OLD_REVISION')\n\t\t\tthis.disconnect(\n\t\t\t\tCloseReasons.NORMAL_CLOSURE,\n\t\t\t\t'check_revision'\n\t\t\t)\n\n\t\t\tthis.onCustomEvent('onPullRevisionUp', [serverRevision, REVISION])\n\n\t\t\tthis.emit({\n\t\t\t\ttype: SubscriptionType.Revision,\n\t\t\t\tdata: {\n\t\t\t\t\tserver: serverRevision,\n\t\t\t\t\tclient: REVISION\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis.logToConsole(`Pull revision changed from ${REVISION} to ${serverRevision}. Reload required`)\n\n\t\t\treturn false\n\t\t}\n\n\t\treturn true\n\t}\n\t// endregion ////\n\n\t// region Connect|ReConnect|DisConnect ////\n\t/**\n\t * @done\n\t */\n\tprivate disconnect(\n\t\tdisconnectCode: number,\n\t\tdisconnectReason: string\n\t): void\n\t{\n\t\tif(this.connector)\n\t\t{\n\t\t\tthis._isManualDisconnect = true\n\t\t\tthis.connector.disconnect(\n\t\t\t\tdisconnectCode,\n\t\t\t\tdisconnectReason\n\t\t\t)\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t */\n\tprivate restoreWebSocketConnection(): void\n\t{\n\t\tif(this._connectionType === ConnectionType.WebSocket)\n\t\t{\n\t\t\treturn\n\t\t}\n\n\t\tthis._connectors.webSocket?.connect()\n\t}\n\n\t/**\n\t * @done\n\t * @param connectionDelay\n\t * @private\n\t */\n\tprivate scheduleReconnect(connectionDelay: number = 0): void\n\t{\n\t\tif(!this._enabled)\n\t\t{\n\t\t\treturn\n\t\t}\n\n\t\tif(!connectionDelay)\n\t\t{\n\t\t\t/**\n\t\t\t * never fallback to long polling\n\t\t\t * @memo remove long polling support later\n\t\t\t */\n\t\t\t/*/\n\t\t\tif(\n\t\t\t\tthis._connectionAttempt > 3\n\t\t\t\t&& this._connectionType === ConnectionType.WebSocket\n\t\t\t\t&& !this._sharedConfig.isLongPollingBlocked()\n\t\t\t)\n\t\t\t{\n\t\t\t\t// Websocket seems to be closed by network filter. Trying to fall back to long polling ////\n\t\t\t\tthis._sharedConfig.setWebSocketBlocked(true)\n\t\t\t\tthis._connectionType = ConnectionType.LongPolling\n\t\t\t\tthis._connectionAttempt = 1\n\t\t\t\tconnectionDelay = 1\n\t\t\t}\n\t\t\telse\n\t\t\t//*/\n\t\t\t{\n\t\t\t\tconnectionDelay = this.getConnectionAttemptDelay(this._connectionAttempt)\n\t\t\t}\n\t\t}\n\t\tif(this._reconnectTimeout)\n\t\t{\n\t\t\tclearTimeout(this._reconnectTimeout)\n\t\t\tthis._reconnectTimeout = null\n\t\t}\n\n\t\tthis.logToConsole(\n\t\t\t`Pull: scheduling reconnection in ${ connectionDelay } seconds; attempt # ${ this._connectionAttempt }`\n\t\t);\n\n\t\tthis._reconnectTimeout = setTimeout(\n\t\t\t() => {\n\t\t\t\tthis.connect()\n\t\t\t\t.catch(error => {\n\t\t\t\t\tthis.getLogger().error(error)\n\t\t\t\t})\n\t\t\t},\n\t\t\tconnectionDelay * 1_000\n\t\t)\n\t}\n\n\t/**\n\t * @done\n\t * @private\n\t */\n\tprivate scheduleRestoreWebSocketConnection(): void\n\t{\n\t\tthis.logToConsole(\n\t\t\t`Pull: scheduling restoration of websocket connection in ${RESTORE_WEBSOCKET_TIMEOUT} seconds`\n\t\t);\n\n\t\tif(this._restoreWebSocketTimeout)\n\t\t{\n\t\t\treturn\n\t\t}\n\n\t\tthis._restoreWebSocketTimeout = setTimeout(() =>\n\t\t\t{\n\t\t\t\tthis._restoreWebSocketTimeout = 0\n\t\t\t\tthis.restoreWebSocketConnection()\n\t\t\t},\n\t\t\tRESTORE_WEBSOCKET_TIMEOUT * 1_000\n\t\t)\n\t}\n\n\t/**\n\t * @done\n\t * @returns {Promise}\n\t */\n\tprivate async connect(): Promise<void>\n\t{\n\t\tif(!this._enabled)\n\t\t{\n\t\t\treturn Promise.reject()\n\t\t}\n\t\tif(this.connector?.connected)\n\t\t{\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\tif(this._reconnectTimeout)\n\t\t{\n\t\t\tclearTimeout(this._reconnectTimeout)\n\t\t\tthis._reconnectTimeout = null\n\t\t}\n\n\t\tthis.status = PullStatus.Connecting\n\t\tthis._connectionAttempt++\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis._connectPromise = {\n\t\t\t\tresolve,\n\t\t\t\treject\n\t\t\t}\n\t\t\tthis.connector?.connect()\n\t\t})\n\t}\n\n\t/**\n\t * @done\n\t * @param disconnectCode\n\t * @param disconnectReason\n\t * @param restartDelay\n\t * @private\n\t */\n\tprivate scheduleRestart(\n\t\tdisconnectCode: number,\n\t\tdisconnectReason: string,\n\t\trestartDelay: number = 0\n\t): void\n\t{\n\t\tif(this._restartTimeout)\n\t\t{\n\t\t\tclearTimeout(this._restartTimeout)\n\t\t\tthis._restartTimeout = null\n\t\t}\n\n\t\tif(restartDelay < 1)\n\t\t{\n\t\t\trestartDelay = Math.ceil(Math.random() * 30) + 5\n\t\t}\n\n\t\tthis._restartTimeout = setTimeout(\n\t\t\t() => this.restart(disconnectCode, disconnectReason),\n\t\t\trestartDelay * 1_000\n\t\t)\n\t}\n\t// endregion ////\n\n\t// region Handlers ////\n\t/**\n\t * @done\n\t *\n\t * @param messageFields\n\t * @private\n\t */\n\tprivate handleRpcIncomingMessage(messageFields: any): {}\n\t{\n\t\tthis._session.mid = messageFields.mid\n\t\tlet body = messageFields.body\n\n\t\tif(!messageFields.body.extra)\n\t\t{\n\t\t\tbody.extra = {}\n\t\t}\n\t\tbody.extra.sender = messageFields.sender\n\n\t\tif(\n\t\t\t\"user_params\" in messageFields\n\t\t\t&& Type.isPlainObject(messageFields.user_params)\n\t\t)\n\t\t{\n\t\t\tObject.assign(body.params, messageFields.user_params)\n\t\t}\n\n\t\tif(\n\t\t\t\"dictionary\" in messageFields\n\t\t\t&& Type.isPlainObject(messageFields.dictionary)\n\t\t)\n\t\t{\n\t\t\tObject.assign(body.params, messageFields.dictionary)\n\t\t}\n\n\t\tif(this.checkDuplicate(messageFields.mid))\n\t\t{\n\t\t\tthis.addMessageToStat(body)\n\t\t\tthis.trimDuplicates()\n\t\t\tthis.broadcastMessage(body)\n\t\t}\n\n\t\tthis.connector?.send(`mack:${messageFields.mid}`)\n\n\t\treturn {}\n\t}\n\n\t/**\n\t * @done\n\t * @param events\n\t * @private\n\t */\n\tprivate handleIncomingEvents(events: TypeSessionEvent[]): void\n\t{\n\t\tlet messages: TypePullClientMessageBody[] = []\n\t\tif(events.length === 0)\n\t\t{\n\t\t\tthis._session.mid = null\n\t\t\treturn\n\t\t}\n\n\t\tfor(let i = 0; i < events.length; i++)\n\t\t{\n\t\t\tlet event = events[i]\n\t\t\tthis.updateSessionFromEvent(event)\n\n\t\t\tif(\n\t\t\t\tevent.mid\n\t\t\t\t&& !this.checkDuplicate(event.mid)\n\t\t\t)\n\t\t\t{\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tthis.addMessageToStat(\n\t\t\t\tevent.text as { module_id: string, command: string }\n\t\t\t)\n\t\t\tmessages.push(event.text as TypePullClientMessageBody);\n\t\t}\n\t\tthis.trimDuplicates()\n\t\tthis.broadcastMessages(messages)\n\t}\n\n\t/**\n\t * @done\n\t * @param event\n\t * @private\n\t */\n\tprivate updateSessionFromEvent(\n\t\tevent: TypeSessionEvent\n\t): void\n\t{\n\t\tthis._session.mid = event.mid || null\n\t\tthis._session.tag = event.tag || null\n\t\tthis._session.time = event.time || null\n\t}\n\n\t/**\n\t * @process\n\t *\n\t * @param command\n\t * @param message\n\t * @private\n\t */\n\tprivate handleInternalPullEvent(\n\t\tcommand: string,\n\t\tmessage: TypePullClientMessageBody\n\t): void\n\t{\n\t\tswitch(command.toUpperCase())\n\t\t{\n\t\t\tcase SystemCommands.CHANNEL_EXPIRE:\n\t\t\t{\n\t\t\t\tif(message.params.action === 'reconnect')\n\t\t\t\t{\n\t\t\t\t\tconst typeChanel = (message.params?.channel.type as string)\n\t\t\t\t\tif(\n\t\t\t\t\t\ttypeChanel === 'private'\n\t\t\t\t\t\t&& this._config?.channels?.private\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis._config.channels.private = message.params.new_channel\n\t\t\t\t\t\tthis.logToConsole(`Pull: new config for ${message.params.channel.type} channel set: ${this._config.channels.private}`)\n\t\t\t\t\t}\n\t\t\t\t\tif(\n\t\t\t\t\t\ttypeChanel === 'shared'\n\t\t\t\t\t\t&& this._config?.channels?.shared\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis._config.channels.shared = message.params.new_channel\n\t\t\t\t\t\tthis.logToConsole(`Pull: new config for ${message.params.channel.type} channel set: ${this._config.channels.shared}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.reconnect(\n\t\t\t\t\t\tCloseReasons.CONFIG_REPLACED,\n\t\t\t\t\t\t'config was replaced'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.restart(\n\t\t\t\t\t\tCloseReasons.CHANNEL_EXPIRED,\n\t\t\t\t\t\t'channel expired received'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase SystemCommands.CONFIG_EXPIRE:\n\t\t\t{\n\t\t\t\tthis.restart(\n\t\t\t\t\tCloseReasons.CONFIG_EXPIRED,\n\t\t\t\t\t'config expired received'\n\t\t\t\t)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase SystemCommands.SERVER_RESTART:\n\t\t\t{\n\t\t\t\tthis.reconnect(\n\t\t\t\t\tCloseReasons.SERVER_RESTARTED,\n\t\t\t\t\t'server was restarted',\n\t\t\t\t\t15\n\t\t\t\t)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault:\n\t\t}\n\t}\n\n\t// region Handlers For Message ////\n\t/**\n\t * @done\n\t * @param response\n\t * @private\n\t */\n\tprivate onIncomingMessage(response: string|ArrayBuffer): void\n\t{\n\t\tif(this.isJsonRpc())\n\t\t{\n\t\t\t(response === JSON_RPC_PING)\n\t\t\t\t? this.onJsonRpcPing()\n\t\t\t\t: this._jsonRpcAdapter?.parseJsonRpcMessage(\n\t\t\t\t\tresponse as string\n\t\t\t\t)\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst events = this.extractMessages(response)\n\t\t\tthis.handleIncomingEvents(events)\n\t\t}\n\t}\n\n\t// region onLongPolling ////\n\t/**\n\t * @done\n\t */\n\tprivate onLongPollingOpen(): void\n\t{\n\t\tthis._unloading = false\n\t\tthis._starting = false\n\t\tthis._connectionAttempt = 0\n\t\tthis._isManualDisconnect = false\n\t\tthis.status = PullStatus.Online\n\n\t\tthis.logToConsole('Pull: Long polling connection with push-server opened')\n\t\tif(this.isWebSocketEnabled())\n\t\t{\n\t\t\tthis.scheduleRestoreWebSocketConnection()\n\t\t}\n\t\tif(this._connectPromise)\n\t\t{\n\t\t\tthis._connectPromise.resolve({})\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t * @param response\n\t * @private\n\t */\n\tprivate onLongPollingDisconnect(response: {code: number, reason: string}): void\n\t{\n\t\tif(this._connectionType === ConnectionType.LongPolling)\n\t\t{\n\t\t\tthis.status = PullStatus.Offline\n\t\t}\n\n\t\tthis.logToConsole(`Pull: Long polling connection with push-server closed. Code: ${response.code}, reason: ${response.reason}`)\n\t\tif(!this._isManualDisconnect)\n\t\t{\n\t\t\tthis.scheduleReconnect()\n\t\t}\n\t\tthis._isManualDisconnect = false\n\t\tthis.clearPingWaitTimeout()\n\t}\n\n\t/**\n\t * @done\n\t * @param error\n\t */\n\tprivate onLongPollingError(error: Error): void\n\t{\n\t\tthis._starting = false;\n\t\tif(this._connectionType === ConnectionType.LongPolling)\n\t\t{\n\t\t\tthis.status = PullStatus.Offline\n\t\t}\n\n\t\tthis.getLogger().error(`${Text.getDateForLog()}: Pull: Long polling connection error `, error)\n\n\t\tthis.scheduleReconnect()\n\t\tif(this._connectPromise)\n\t\t{\n\t\t\tthis._connectPromise.reject(error)\n\t\t}\n\n\t\tthis.clearPingWaitTimeout()\n\t}\n\t// endregion ////\n\n\t// region onWebSocket ////\n\t/**\n\t * @done\n\t * @param response\n\t * @private\n\t */\n\tprivate onWebSocketBlockChanged(response: {\n\t\tisWebSocketBlocked: boolean,\n\t}): void\n\t{\n\t\tconst isWebSocketBlocked = response.isWebSocketBlocked\n\n\t\tif(\n\t\t\tisWebSocketBlocked\n\t\t\t&& this._connectionType === ConnectionType.WebSocket\n\t\t\t&& !this.isConnected()\n\t\t)\n\t\t{\n\t\t\tif(this._reconnectTimeout)\n\t\t\t{\n\t\t\t\tclearTimeout(this._reconnectTimeout)\n\t\t\t\tthis._reconnectTimeout = null\n\t\t\t}\n\n\t\t\tthis._connectionAttempt = 0\n\t\t\tthis._connectionType = ConnectionType.LongPolling\n\t\t\tthis.scheduleReconnect(1)\n\t\t}\n\t\telse if(\n\t\t\t!isWebSocketBlocked\n\t\t\t&& this._connectionType === ConnectionType.LongPolling\n\t\t)\n\t\t{\n\t\t\tif(this._reconnectTimeout)\n\t\t\t{\n\t\t\t\tclearTimeout(this._reconnectTimeout)\n\t\t\t\tthis._reconnectTimeout = null\n\t\t\t}\n\t\t\tif(this._restoreWebSocketTimeout)\n\t\t\t{\n\t\t\t\tclearTimeout(this._restoreWebSocketTimeout)\n\t\t\t\tthis._restoreWebSocketTimeout = null\n\t\t\t}\n\n\t\t\tthis._connectionAttempt = 0;\n\t\t\tthis._connectionType = ConnectionType.WebSocket\n\t\t\tthis.scheduleReconnect(1)\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t */\n\tprivate onWebSocketOpen(): void\n\t{\n\t\tthis._unloading = false\n\t\tthis._starting = false\n\t\tthis._connectionAttempt = 0\n\t\tthis._isManualDisconnect = false\n\t\tthis.status = PullStatus.Online\n\t\tthis._sharedConfig.setWebSocketBlocked(false)\n\n\t\t// to prevent fallback to long polling in case of networking problems\n\t\tthis._sharedConfig.setLongPollingBlocked(true)\n\n\t\tif(this._connectionType == ConnectionType.LongPolling)\n\t\t{\n\t\t\tthis._connectionType = ConnectionType.WebSocket\n\t\t\tthis._connectors.longPolling?.disconnect(\n\t\t\t\tCloseReasons.CONFIG_REPLACED,\n\t\t\t\t'Fire at onWebSocketOpen'\n\t\t\t)\n\t\t}\n\n\t\tif(this._restoreWebSocketTimeout)\n\t\t{\n\t\t\tclearTimeout(this._restoreWebSocketTimeout)\n\t\t\tthis._restoreWebSocketTimeout = null\n\t\t}\n\t\tthis.logToConsole('Pull: Websocket connection with push-server opened')\n\t\tif(this._connectPromise)\n\t\t{\n\t\t\tthis._connectPromise.resolve({})\n\t\t}\n\n\t\tthis.restoreUserStatusSubscription()\n\t}\n\n\t/**\n\t * @done\n\t * @param response\n\t * @private\n\t */\n\tprivate onWebSocketDisconnect(response: {code: number, reason: string}): void\n\t{\n\t\tif(this._connectionType === ConnectionType.WebSocket)\n\t\t{\n\t\t\tthis.status = PullStatus.Offline;\n\t\t}\n\n\t\tthis.logToConsole(`Pull: Websocket connection with push-server closed. Code: ${response.code}, reason: ${response.reason}`, true)\n\t\tif(!this._isManualDisconnect)\n\t\t{\n\t\t\tif(response.code == CloseReasons.WRONG_CHANNEL_ID)\n\t\t\t{\n\t\t\t\tthis.scheduleRestart(\n\t\t\t\t\tCloseReasons.WRONG_CHANNEL_ID,\n\t\t\t\t\t'wrong channel signature'\n\t\t\t\t)\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.scheduleReconnect()\n\t\t\t}\n\t\t}\n\n\t\t// to prevent fallback to long polling in case of networking problems\n\t\tthis._sharedConfig.setLongPollingBlocked(true)\n\t\tthis._isManualDisconnect = false\n\n\t\tthis.clearPingWaitTimeout()\n\t}\n\n\t/**\n\t * @done\n\t * @param error\n\t */\n\tprivate onWebSocketError(error: Error): void\n\t{\n\t\tthis._starting = false\n\t\tif(this._connectionType === ConnectionType.WebSocket)\n\t\t{\n\t\t\tthis.status = PullStatus.Offline\n\t\t}\n\n\t\tthis.getLogger().error(`${Text.getDateForLog()}: Pull: WebSocket connection error `, error)\n\t\tthis.scheduleReconnect()\n\t\tif(this._connectPromise)\n\t\t{\n\t\t\tthis._connectPromise.reject(error)\n\t\t}\n\n\t\tthis.clearPingWaitTimeout()\n\t}\n\t// endregion ////\n\t// endregion ////\n\n\t// endregion ////\n\n\t// region extractMessages ////\n\t/**\n\t * @done\n\t * @param pullEvent\n\t * @private\n\t */\n\tprivate extractMessages(pullEvent: string|ArrayBuffer): TypeSessionEvent[]\n\t{\n\t\tif(pullEvent instanceof ArrayBuffer)\n\t\t{\n\t\t\treturn this.extractProtobufMessages(pullEvent)\n\t\t}\n\t\telse if(Type.isStringFilled(pullEvent))\n\t\t{\n\t\t\treturn this.extractPlainTextMessages(pullEvent)\n\t\t}\n\n\t\tthrow new Error('Error pullEvent type')\n\t}\n\n\t/**\n\t * @done\n\t * @param pullEvent\n\t * @private\n\t */\n\tprivate extractProtobufMessages(pullEvent: ArrayBuffer): TypeSessionEvent[]\n\t{\n\t\tlet result = []\n\n\t\ttry\n\t\t{\n\t\t\tlet responseBatch = ResponseBatch.decode(new Uint8Array(pullEvent))\n\t\t\tfor(let i = 0; i < responseBatch.responses.length; i++)\n\t\t\t{\n\t\t\t\tlet response = responseBatch.responses[i]\n\t\t\t\tif(response.command !== 'outgoingMessages')\n\t\t\t\t{\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tlet messages = response.outgoingMessages.messages\n\t\t\t\tfor(let m = 0; m < messages.length; m++)\n\t\t\t\t{\n\t\t\t\t\tconst message = messages[m]\n\t\t\t\t\tlet messageFields\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tmessageFields = JSON.parse(message.body)\n\t\t\t\t\t}\n\t\t\t\t\tcatch (error)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.getLogger().error(`${Text.getDateForLog()}: Pull: Could not parse message body `, error)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tif(!messageFields.extra)\n\t\t\t\t\t{\n\t\t\t\t\t\tmessageFields.extra = {}\n\t\t\t\t\t}\n\t\t\t\t\tmessageFields.extra.sender = {\n\t\t\t\t\t\ttype: message.sender.type\n\t\t\t\t\t}\n\n\t\t\t\t\tif(message.sender.id instanceof Uint8Array)\n\t\t\t\t\t{\n\t\t\t\t\t\tmessageFields.extra.sender.id = this.decodeId(message.sender.id)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst compatibleMessage = {\n\t\t\t\t\t\tmid: this.decodeId(message.id),\n\t\t\t\t\t\ttext: messageFields\n\t\t\t\t\t}\n\n\t\t\t\t\tresult.push(compatibleMessage)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (error)\n\t\t{\n\t\t\tthis.getLogger().error(`${Text.getDateForLog()}: Pull: Could not parse message `, error)\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * @done\n\t * @param pullEvent\n\t * @private\n\t */\n\tprivate extractPlainTextMessages(pullEvent: string): TypeSessionEvent[]\n\t{\n\t\tlet result = []\n\n\t\tconst dataArray = pullEvent.match(/#!NGINXNMS!#(.*?)#!NGINXNME!#/gm)\n\t\tif(dataArray === null)\n\t\t{\n\t\t\tconst text = \"\\n========= PULL ERROR ===========\\n\" +\n\t\t\t\t\"Error type: parseResponse error parsing message\\n\" +\n\t\t\t\t\"\\n\" +\n\t\t\t\t`Data string: ${pullEvent}` + \"\\n\" +\n\t\t\t\t\"================================\\n\\n\";\n\t\t\tthis.getLogger().warn(text)\n\n\t\t\treturn []\n\t\t}\n\t\tfor(let i = 0; i < dataArray.length; i++)\n\t\t{\n\t\t\tdataArray[i] = dataArray[i].substring(12, dataArray[i].length - 12)\n\t\t\tif(dataArray[i].length <= 0)\n\t\t\t{\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tlet data\n\t\t\ttry\n\t\t\t{\n\t\t\t\tdata = JSON.parse(dataArray[i])\n\t\t\t}\n\t\t\tcatch (error)\n\t\t\t{\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tresult.push(data as TypeSessionEvent)\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * @done\n\t * Converts message id from byte[] to string\n\t * @param {Uint8Array} encodedId\n\t * @return {string}\n\t */\n\tprivate decodeId(encodedId: Uint8Array): string\n\t{\n\t\tlet result = ''\n\t\tfor(let i = 0; i < encodedId.length; i++)\n\t\t{\n\t\t\tconst hexByte = encodedId[i].toString(16)\n\t\t\tif(hexByte.length === 1)\n\t\t\t{\n\t\t\t\tresult += '0'\n\t\t\t}\n\t\t\tresult += hexByte\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * @done\n\t * Converts message id from hex-encoded string to byte[]\n\t * @param {string} id Hex-encoded string.\n\t * @return {Uint8Array}\n\t */\n\tprivate encodeId(id: string): Uint8Array\n\t{\n\t\tif(!id)\n\t\t{\n\t\t\treturn new Uint8Array()\n\t\t}\n\n\t\tlet result = [];\n\t\tfor (let i = 0; i < id.length; i += 2)\n\t\t{\n\t\t\tresult.push(parseInt(id.substring(i, 2), 16))\n\t\t}\n\n\t\treturn new Uint8Array(result)\n\t}\n\t// endregion ////\n\n\t// region Events.Status /////\n\t/**\n\t * @done\n\t */\n\tprivate onOffline(): void\n\t{\n\t\tthis.disconnect(\n\t\t\tCloseReasons.NORMAL_CLOSURE,\n\t\t\t'offline'\n\t\t)\n\t}\n\n\t/**\n\t * @done\n\t */\n\tprivate onOnline(): void\n\t{\n\t\tthis.connect()\n\t\t.catch(error => {\n\t\t\tthis.getLogger().error(error)\n\t\t})\n\t}\n\n\t/**\n\t * @done\n\t * @private\n\t */\n\tprivate onBeforeUnload(): void\n\t{\n\t\tthis._unloading = true\n\n\t\tconst session = Type.clone(this.session)\n\t\tsession.ttl = (new Date()).getTime() + LS_SESSION_CACHE_TIME * 1000;\n\t\tif(this._storage)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tthis._storage.set(\n\t\t\t\t\tLS_SESSION,\n\t\t\t\t\tJSON.stringify(session),\n\t\t\t\t\t//LS_SESSION_CACHE_TIME\n\t\t\t\t)\n\t\t\t}\n\t\t\tcatch(error)\n\t\t\t{\n\t\t\t\tthis.getLogger().error(`${Text.getDateForLog()}: Pull: Could not save session info in local storage. Error: `, error)\n\t\t\t}\n\t\t}\n\n\t\tthis.scheduleReconnect(15)\n\t}\n\t// endregion ////\n\n\t// region PullStatus ////\n\t/**\n\t * @done\n\t * @param status\n\t * @param delay\n\t * @private\n\t */\n\tprivate sendPullStatusDelayed(\n\t\tstatus: PullStatus,\n\t\tdelay: number\n\t): void\n\t{\n\t\tif(this._offlineTimeout)\n\t\t{\n\t\t\tclearTimeout(this._offlineTimeout)\n\t\t\tthis._offlineTimeout = null\n\t\t}\n\n\t\tthis._offlineTimeout = setTimeout(\n\t\t\t() => {\n\t\t\t\tthis._offlineTimeout = null\n\t\t\t\tthis.sendPullStatus(status)\n\t\t\t},\n\t\t\tdelay\n\t\t)\n\t}\n\n\t/**\n\t * @done\n\t * @param status\n\t * @private\n\t */\n\tprivate sendPullStatus(\n\t\tstatus: PullStatus\n\t): void\n\t{\n\t\tif(this._unloading)\n\t\t{\n\t\t\treturn\n\t\t}\n\n\t\tthis.onCustomEvent('onPullStatus', [status])\n\n\t\tthis.emit({\n\t\t\ttype: SubscriptionType.Status,\n\t\t\tdata: {\n\t\t\t\tstatus: status\n\t\t\t}\n\t\t})\n\t}\n\t// endregion ////\n\n\t// region _watchTagsQueue ////\n\t/**\n\t * @done\n\t * @memo if private ?\n\t * @param tagId\n\t * @param force\n\t */\n\tprivate extendWatch(\n\t\ttagId: string,\n\t\tforce: boolean = false\n\t): void\n\t{\n\t\tif(this._watchTagsQueue.get(tagId))\n\t\t{\n\t\t\treturn\n\t\t}\n\n\t\tthis._watchTagsQueue.set(tagId, true)\n\t\tif(force)\n\t\t{\n\t\t\tthis.updateWatch(force)\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t * @param force\n\t * @private\n\t */\n\tprivate updateWatch(force: boolean = false): void\n\t{\n\t\tif(this._watchUpdateTimeout)\n\t\t{\n\t\t\tclearTimeout(this._watchUpdateTimeout)\n\t\t\tthis._watchUpdateTimeout = null\n\t\t}\n\n\t\tthis._watchUpdateTimeout = setTimeout(\n\t\t\t() => {\n\t\t\t\t/**\n\t\t\t\t * @memo test this\n\t\t\t\t */\n\t\t\t\tconst watchTags = Array.from(this._watchTagsQueue.keys())\n\n\t\t\t\tif(watchTags.length > 0)\n\t\t\t\t{\n\t\t\t\t\tthis._restClient.callMethod(\n\t\t\t\t\t\t'pull.watch.extend',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttags: watchTags\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t\t.then((response: AjaxResult) => {\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * @memo test this\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst updatedTags: NumberString[] = (response.getData() as Payload<NumberString[]>).result\n\n\t\t\t\t\t\tupdatedTags.forEach((tagId: NumberString) => this.clearWatch(tagId))\n\n\t\t\t\t\t\tthis.updateWatch()\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\tthis.updateWatch()\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.updateWatch()\n\t\t\t\t}\n\t\t\t},\n\t\t\tforce\n\t\t\t\t? this._watchForceUpdateInterval\n\t\t\t\t: this._watchUpdateInterval\n\t\t)\n\t}\n\n\t/**\n\t * @done\n\t * @param tagId\n\t * @private\n\t */\n\tprivate clearWatch(tagId: string): void\n\t{\n\t\tthis._watchTagsQueue.delete(tagId)\n\t}\n\t// endregion ////\n\n\t// region Ping ////\n\t/**\n\t * @done\n\t * @private\n\t */\n\tprivate onJsonRpcPing(): void\n\t{\n\t\tthis.updatePingWaitTimeout()\n\t\tthis.connector?.send(\n\t\t\tJSON_RPC_PONG\n\t\t)\n\t}\n\n\t/**\n\t * @done\n\t * @private\n\t */\n\tprivate updatePingWaitTimeout(): void\n\t{\n\t\tif(this._pingWaitTimeout)\n\t\t{\n\t\t\tclearTimeout(this._pingWaitTimeout);\n\t\t\tthis._pingWaitTimeout = null\n\t\t}\n\n\t\tthis._pingWaitTimeout = setTimeout(\n\t\t\tthis._onPingTimeoutHandler,\n\t\t\tPING_TIMEOUT * 2 * 1_000\n\t\t)\n\t}\n\n\t/**\n\t * @done\n\t * @private\n\t */\n\tprivate clearPingWaitTimeout(): void\n\t{\n\t\tif(this._pingWaitTimeout)\n\t\t{\n\t\t\tclearTimeout(this._pingWaitTimeout)\n\t\t}\n\n\t\tthis._pingWaitTimeout = null\n\t}\n\n\t/**\n\t * @done\n\t * @private\n\t */\n\tprivate onPingTimeout(): void\n\t{\n\t\tthis._pingWaitTimeout = null\n\t\tif(\n\t\t\t!this._enabled\n\t\t\t|| !this.isConnected()\n\t\t)\n\t\t{\n\t\t\treturn\n\t\t}\n\n\t\tthis.getLogger().warn(`No pings are received in ${PING_TIMEOUT * 2} seconds. Reconnecting`)\n\t\tthis.disconnect(\n\t\t\tCloseReasons.STUCK,\n\t\t\t'connection stuck'\n\t\t)\n\n\t\tthis.scheduleReconnect()\n\t}\n\t// endregion ////\n\n\t// region Time ////\n\t/**\n\t * @done\n\t * Returns reconnect delay in seconds\n\t *\n\t * @param attemptNumber\n\t * @return {number}\n\t */\n\tprivate getConnectionAttemptDelay(attemptNumber: number): number\n\t{\n\t\tlet result;\n\t\tif (attemptNumber < 1)\n\t\t{\n\t\t\tresult = 0.5;\n\t\t}\n\t\telse if(attemptNumber < 3)\n\t\t{\n\t\t\tresult = 15;\n\t\t}\n\t\telse if(attemptNumber < 5)\n\t\t{\n\t\t\tresult = 45;\n\t\t}\n\t\telse if(attemptNumber < 10)\n\t\t{\n\t\t\tresult = 600;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = 3_600;\n\t\t}\n\n\t\treturn result + (result * Math.random() * 0.2);\n\t}\n\t// endregion ////\n\n\t// region Tools ////\n\t/**\n\t * @done\n\t * @param mid\n\t */\n\tprivate checkDuplicate(mid: string): boolean\n\t{\n\t\tif(this._session.lastMessageIds.includes(mid))\n\t\t{\n\t\t\tthis.getLogger().warn(`Duplicate message ${mid} skipped`)\n\t\t\treturn false\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._session.lastMessageIds.push(mid);\n\t\t\treturn true\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t */\n\tprivate trimDuplicates(): void\n\t{\n\t\tif(this._session.lastMessageIds.length > MAX_IDS_TO_STORE)\n\t\t{\n\t\t\tthis._session.lastMessageIds = this._session.lastMessageIds.slice(-MAX_IDS_TO_STORE)\n\t\t}\n\t}\n\t// endregion ////\n\n\t// region Logging ////\n\t/**\n\t * @done\n\t * @param message\n\t * @private\n\t */\n\tprivate logMessage(message: TypePullClientMessageBody): void\n\t{\n\t\tif(!this._debug)\n\t\t{\n\t\t\treturn\n\t\t}\n\n\t\tif(message.extra?.sender && message.extra.sender.type === SenderType.Client)\n\t\t{\n\t\t\tthis.getLogger().info(`onPullClientEvent-${message.module_id}`, message.command, message.params, message.extra)\n\t\t}\n\t\telse if(message.module_id == 'online')\n\t\t{\n\t\t\tthis.getLogger().info(`onPullOnlineEvent`, message.command, message.params, message.extra)\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.getLogger().info(`onPullEvent`, message.module_id, message.command, message.params, message.extra)\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t * @param message\n\t * @param force\n\t * @private\n\t */\n\tprivate logToConsole(\n\t\tmessage: string,\n\t\tforce: boolean = false\n\t): void\n\t{\n\t\tif(\n\t\t\tthis._loggingEnabled\n\t\t\t|| force\n\t\t)\n\t\t{\n\t\t\tthis.getLogger().log(`${Text.getDateForLog()}: ${message}`)\n\t\t}\n\t}\n\n\t/**\n\t * @done\n\t * @param message\n\t * @private\n\t */\n\tprivate addMessageToStat(message: {\n\t\tmodule_id: string,\n\t\tcommand: string\n\t}): void\n\t{\n\t\tif(!this._session.history[message.module_id])\n\t\t{\n\t\t\tthis._session.history[message.module_id] = {}\n\t\t}\n\t\tif(!this._session.history[message.module_id][message.command])\n\t\t{\n\t\t\tthis.session.history[message.module_id][message.command] = 0\n\t\t}\n\n\t\tthis._session.history[message.module_id][message.command]++\n\n\t\tthis._session.messageCount++\n\t}\n\n\t/**\n\t * @done\n\t *\n\t * @param text\n\t */\n\tprivate showNotification(text: string): void\n\t{\n\t\tthis.getLogger().warn(text)\n\n\t\t/*/\n\t\tif(this._notificationPopup || typeof BX.PopupWindow === 'undefined')\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notificationPopup = new BX.PopupWindow('bx-notifier-popup-confirm', null, {\n\t\t\tzIndex: 200,\n\t\t\tautoHide: false,\n\t\t\tcloseByEsc: false,\n\t\t\toverlay: true,\n\t\t\tcontent: BX.create(\"div\", {\n\t\t\t\tprops: {className: \"bx-messenger-confirm\"},\n\t\t\t\thtml: text\n\t\t\t}),\n\t\t\tbuttons: [\n\t\t\t\tnew BX.PopupWindowButton({\n\t\t\t\t\ttext: BX.message('JS_CORE_WINDOW_CLOSE'),\n\t\t\t\t\tclassName: \"popup-window-button-decline\",\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tclick: () => this._notificationPopup.close(),\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t],\n\t\t\tevents: {\n\t\t\t\tonPopupClose: () => this._notificationPopup.destroy(),\n\t\t\t\tonPopupDestroy: () => this._notificationPopup = null,\n\t\t\t}\n\t\t});\n\t\tthis._notificationPopup.show();\n\t\t//*/\n\t}\n\t// endregion ////\n\n\t// region onCustomEvent ////\n\t/**\n\t * @done\n\t * @memo may be need use onCustomEvent\n\t * @memo wtf ? force\n\t */\n\tprivate onCustomEvent(\n\t\teventName: string,\n\t\tdata: any,\n\t\tforce: boolean = false\n\t): void\n\t{\n\t\tif(eventName || data || force)\n\t\t{\n\n\t\t}\n\t\t/*/\n\t\tif (BX && BX.onCustomEvent)\n\t\t{\n\t\t\tBX.onCustomEvent(window, eventName, data, force)\n\t\t}\n\t\t//*/\n\t}\n\t// endregion ////\n\t\n\t// region deprecated /////\n\t/**\n\t * @deprecated\n\t */\n\t/*/\n\tgetRestClientOptions()\n\t{\n\t\tlet result = {};\n\n\t\tif (this.guestMode && this.guestUserId !== 0)\n\t\t{\n\t\t\tresult.queryParams = {\n\t\t\t\tpull_guest_id: this.guestUserId\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\t//*/\n\t// endregion ////\n}","import {LoggerBrowser, LoggerType} from '../logger/browser'\nimport type { TypeB24 } from '../types/b24'\nimport { ProfileManager } from './profileManager'\nimport { AppManager } from './appManager'\nimport { PaymentManager } from './paymentManager'\nimport { LicenseManager } from './licenseManager'\nimport { CurrencyManager } from './currencyManager'\nimport { OptionsManager } from './optionsManager'\nimport { B24PullClientManager } from '../pullClient'\nimport Text from '../tools/text'\nimport { LoadDataType, TypeSpecificUrl } from '../types/b24-helper'\nimport type {\n\tTypeApp,\n\tTypeB24Form,\n\tTypeEnumAppStatus,\n\tTypeLicense,\n\tTypePayment,\n\tTypeUser\n} from '../types/b24-helper'\nimport type { GenderString } from '../types/common'\nimport type { TypePullMessage } from '../types/pull'\n\n/**\n * A universal class that is used to manage the initial application data\n */\nexport class B24HelperManager\n{\n\tprivate readonly _b24: TypeB24\n\tprotected _logger: null|LoggerBrowser = null\n\tprivate _isInit: boolean = false\n\t\n\tprivate _profile: ProfileManager|null = null\n\t\n\tprivate _app: AppManager|null = null\n\tprivate _payment: PaymentManager|null = null\n\tprivate _license: LicenseManager|null = null\n\t\n\tprivate _currency: CurrencyManager|null = null\n\tprivate _appOptions: OptionsManager|null = null\n\tprivate _userOptions: OptionsManager|null = null\n\t\n\tprivate _b24PullClient: B24PullClientManager|null = null\n\tprivate _pullClientUnSubscribe: Function[] = []\n\tprivate _pullClientModuleId: string = ''\n\t\n\tconstructor(b24: TypeB24)\n\t{\n\t\tthis._b24 = b24\n\t\tthis.setLogger(this._b24.getLogger())\n\t}\n\t\n\tsetLogger(logger: LoggerBrowser): void\n\t{\n\t\tthis._logger = logger\n\t\tif(null !== this._profile)\n\t\t{\n\t\t\tthis._profile.setLogger(this.getLogger())\n\t\t}\n\t\t\n\t\tif(null !== this._app)\n\t\t{\n\t\t\tthis._app.setLogger(this.getLogger())\n\t\t}\n\t\t\n\t\tif(null !== this._payment)\n\t\t{\n\t\t\tthis._payment.setLogger(this.getLogger())\n\t\t}\n\t\t\n\t\tif(null !== this._license)\n\t\t{\n\t\t\tthis._license.setLogger(this.getLogger())\n\t\t}\n\t\t\n\t\tif(null !== this._currency)\n\t\t{\n\t\t\tthis._currency.setLogger(this.getLogger())\n\t\t}\n\t\t\n\t\tif(null !== this._appOptions)\n\t\t{\n\t\t\tthis._appOptions.setLogger(this.getLogger())\n\t\t}\n\t\t\n\t\tif(null !== this._userOptions)\n\t\t{\n\t\t\tthis._userOptions.setLogger(this.getLogger())\n\t\t}\n\t}\n\t\n\tgetLogger(): LoggerBrowser\n\t{\n\t\tif(null === this._logger)\n\t\t{\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\t\t\n\t\treturn this._logger\n\t}\n\t\n\tdestroy(): void\n\t{\n\t\tthis._destroyPullClient()\n\t}\n\t\n\t// region loadData ////\n\tasync loadData(\n\t\tdataTypes: LoadDataType[] = [\n\t\t\tLoadDataType.App,\n\t\t\tLoadDataType.Profile\n\t\t]\n\t): Promise<void>\n\t{\n\t\tconst batchMethods: Record<string, {method: string}|{method: string}[]> = {\n\t\t\t[LoadDataType.App]: {method: 'app.info'},\n\t\t\t[LoadDataType.Profile]: {method: 'profile'},\n\t\t\t[LoadDataType.Currency]: [{method: 'crm.currency.base.get'}, {method: 'crm.currency.list'}],\n\t\t\t[LoadDataType.AppOptions]: {method: 'app.option.get'},\n\t\t\t[LoadDataType.UserOptions]: {method: 'user.option.get'},\n\t\t}\n\t\t\n\t\tconst batchRequest = dataTypes.reduce((acc, type) =>\n\t\t{\n\t\t\tif(batchMethods[type])\n\t\t\t{\n\t\t\t\tif(Array.isArray(batchMethods[type]))\n\t\t\t\t{\n\t\t\t\t\tbatchMethods[type].forEach((row, index) => {\n\t\t\t\t\t\tacc[`get_${type}_${index}`] = row\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tacc[`get_${type}`] = batchMethods[type]\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn acc\n\t\t\t\n\t\t}, {} as Record<string, {method: string}>)\n\t\t\n\t\ttry\n\t\t{\n\t\t\tconst response = await this._b24.callBatch(batchRequest)\n\t\t\tconst data = response.getData()\n\t\t\t\n\t\t\tif(data[`get_${LoadDataType.App}`])\n\t\t\t{\n\t\t\t\tthis._app = await this.parseAppData(data[`get_${LoadDataType.App}`])\n\t\t\t\tthis._payment = await this.parsePaymentData(data[`get_${LoadDataType.App}`])\n\t\t\t\tthis._license = await this.parseLicenseData(data[`get_${LoadDataType.App}`])\n\t\t\t}\n\t\t\t\n\t\t\tif(data[`get_${LoadDataType.Profile}`])\n\t\t\t{\n\t\t\t\tthis._profile = await this.parseUserData(data[`get_${LoadDataType.Profile}`])\n\t\t\t}\n\t\t\t\n\t\t\tif(\n\t\t\t\tdata[`get_${LoadDataType.Currency}_0`]\n\t\t\t\t&& data[`get_${LoadDataType.Currency}_1`]\n\t\t\t)\n\t\t\t{\n\t\t\t\tthis._currency = await this.parseCurrencyData({\n\t\t\t\t\tcurrencyBase: data[`get_${LoadDataType.Currency}_0`],\n\t\t\t\t\tcurrencyList: data[`get_${LoadDataType.Currency}_1`]\n\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t\tif(data[`get_${LoadDataType.AppOptions}`])\n\t\t\t{\n\t\t\t\tthis._appOptions = await this.parseOptionsData('app', data[`get_${LoadDataType.AppOptions}`])\n\t\t\t}\n\t\t\t\n\t\t\tif(data[`get_${LoadDataType.UserOptions}`])\n\t\t\t{\n\t\t\t\tthis._userOptions = await this.parseOptionsData('user', data[`get_${LoadDataType.UserOptions}`])\n\t\t\t}\n\t\t\t\n\t\t\tthis._isInit = true\n\t\t}\n\t\tcatch(error)\n\t\t{\n\t\t\tif(error instanceof Error)\n\t\t\t{\n\t\t\t\tthrow error\n\t\t\t}\n\t\t\t\n\t\t\tconsole.error('Error loading data:', error)\n\t\t\tthrow new Error('Failed to load data')\n\t\t}\n\t}\n\t\n\tprivate async parseUserData(profileData: any): Promise<ProfileManager>\n\t{\n\t\tconst manager = new ProfileManager(this._b24)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager.initData({\n\t\t\tid: Number(profileData.ID),\n\t\t\tisAdmin: profileData.ADMIN === true,\n\t\t\tlastName: profileData?.LAST_NAME || '',\n\t\t\tname: profileData?.NAME || '',\n\t\t\tgender: (profileData?.PERSONAL_GENDER || '') as GenderString,\n\t\t\tphoto: profileData?.PERSONAL_PHOTO || '',\n\t\t\tTimeZone: profileData?.TIME_ZONE || '',\n\t\t\tTimeZoneOffset: profileData?.TIME_ZONE_OFFSET,\n\t\t} as TypeUser)\n\t\t.then(() => {\n\t\t\treturn manager\n\t\t})\n\t}\n\t\n\tprivate async parseAppData(appData: any): Promise<AppManager>\n\t{\n\t\tconst manager = new AppManager(this._b24)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager.initData({\n\t\t\tid: parseInt(appData.ID),\n\t\t\tcode: appData.CODE,\n\t\t\tversion: parseInt(appData.VERSION),\n\t\t\tstatus: appData.STATUS as TypeEnumAppStatus,\n\t\t\tisInstalled: appData.INSTALLED as boolean,\n\t\t} as TypeApp)\n\t\t.then(() => {\n\t\t\treturn manager\n\t\t})\n\t}\n\t\n\tprivate async parsePaymentData(appData: any): Promise<PaymentManager>\n\t{\n\t\tconst manager = new PaymentManager(this._b24)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager.initData({\n\t\t\tisExpired: appData.PAYMENT_EXPIRED === 'Y',\n\t\t\tdays: parseInt(appData.DAYS || '0'),\n\t\t} as TypePayment)\n\t\t.then(() => {\n\t\t\treturn manager\n\t\t})\n\t}\n\t\n\tprivate async parseLicenseData(appData: any): Promise<LicenseManager>\n\t{\n\t\tconst manager = new LicenseManager(this._b24)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager.initData({\n\t\t\tlanguageId: appData.LANGUAGE_ID,\n\t\t\tlicense: appData.LICENSE,\n\t\t\tlicensePrevious: appData.LICENSE_PREVIOUS,\n\t\t\tlicenseType: appData.LICENSE_TYPE,\n\t\t\tlicenseFamily: appData.LICENSE_FAMILY,\n\t\t\tisSelfHosted: appData.LICENSE.includes('selfhosted')\n\t\t} as TypeLicense)\n\t\t.then(() => {\n\t\t\treturn manager\n\t\t})\n\t}\n\t\n\tprivate async parseCurrencyData(currencyData: any): Promise<CurrencyManager>\n\t{\n\t\tconst manager = new CurrencyManager(this._b24)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager.initData(currencyData)\n\t\t.then(() => {\n\t\t\treturn manager\n\t\t})\n\t}\n\t\n\tprivate async parseOptionsData(type: 'app'|'user', optionsData: any): Promise<OptionsManager>\n\t{\n\t\tconst manager = new OptionsManager(this._b24, type)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager.initData(optionsData)\n\t\t.then(() => {\n\t\t\treturn manager\n\t\t})\n\t}\n\t// endregion ////\n\t\n\t// region Get ////\n\tget isInit(): boolean\n\t{\n\t\treturn this._isInit;\n\t}\n\t\n\tget forB24Form(): TypeB24Form\n\t{\n\t\tthis.ensureInitialized()\n\t\t\n\t\tif(null === this._profile)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager.profileInfo not initialized')\n\t\t}\n\t\t\n\t\tif(null === this._app)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager.appInfo not initialized')\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tapp_code: this.appInfo.data.code,\n\t\t\tapp_status: this.appInfo.data.status as string,\n\t\t\tpayment_expired: this.paymentInfo.data.isExpired ? 'Y' : 'N',\n\t\t\tdays: this.paymentInfo.data.days,\n\t\t\tb24_plan: this.licenseInfo.data.license,\n\t\t\tc_name: this.profileInfo.data.name,\n\t\t\tc_last_name: this.profileInfo.data.lastName,\n\t\t\thostname: this.hostName,\n\t\t} as TypeB24Form\n\t}\n\t\n\t/**\n\t * Get the account address BX24 ( https://name.bitrix24.com )\n\t */\n\tget hostName(): string\n\t{\n\t\treturn this._b24.getTargetOrigin()\n\t}\n\t\n\tget profileInfo(): ProfileManager\n\t{\n\t\tthis.ensureInitialized()\n\t\t\n\t\tif(null === this._profile)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager.profileInfo not initialized')\n\t\t}\n\t\t\n\t\treturn this._profile\n\t}\n\t\n\tget appInfo(): AppManager\n\t{\n\t\tthis.ensureInitialized()\n\t\t\n\t\tif(null === this._app)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager.appInfo not initialized')\n\t\t}\n\t\t\n\t\treturn this._app\n\t}\n\t\n\tget paymentInfo(): PaymentManager\n\t{\n\t\tthis.ensureInitialized()\n\t\t\n\t\tif(null === this._payment)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager.paymentInfo not initialized')\n\t\t}\n\t\t\n\t\treturn this._payment\n\t}\n\t\n\tget licenseInfo(): LicenseManager\n\t{\n\t\tthis.ensureInitialized()\n\t\t\n\t\tif(null === this._license)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager.licenseInfo not initialized')\n\t\t}\n\t\t\n\t\treturn this._license\n\t}\n\t\n\tget currency(): CurrencyManager\n\t{\n\t\tthis.ensureInitialized()\n\t\t\n\t\tif(null === this._currency)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager.currency not initialized')\n\t\t}\n\t\t\n\t\treturn this._currency\n\t}\n\t\n\tget appOptions(): OptionsManager\n\t{\n\t\tthis.ensureInitialized()\n\t\t\n\t\tif(null === this._appOptions)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager.appOptions not initialized')\n\t\t}\n\t\t\n\t\treturn this._appOptions\n\t}\n\t\n\tget userOptions(): OptionsManager\n\t{\n\t\tthis.ensureInitialized()\n\t\t\n\t\tif(null === this._userOptions)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager.userOptions not initialized')\n\t\t}\n\t\t\n\t\treturn this._userOptions\n\t}\n\t// endregion ////\n\t\n\t// region Custom SelfHosted && Cloud ////\n\tget isSelfHosted(): boolean\n\t{\n\t\treturn this.licenseInfo.data.isSelfHosted\n\t}\n\t\n\t/**\n\t * Returns the increment step of fields of type ID\n\t * @memo in cloud step = 2 in box step = 1\n\t *\n\t * @returns {number}\n\t */\n\tget primaryKeyIncrementValue(): number\n\t{\n\t\tif(this.isSelfHosted)\n\t\t{\n\t\t\treturn 1\n\t\t}\n\t\t\n\t\treturn 2\n\t}\n\t\n\t/**\n\t * Defines specific URLs for a Bitrix24 box or cloud\n\t */\n\tget b24SpecificUrl(): Record<keyof typeof TypeSpecificUrl, string>\n\t{\n\t\tif(this.isSelfHosted)\n\t\t{\n\t\t\treturn {\n\t\t\t\t[TypeSpecificUrl.MainSettings]: '/configs/',\n\t\t\t\t[TypeSpecificUrl.UfList]: '/configs/userfield_list.php',\n\t\t\t\t[TypeSpecificUrl.UfPage]: '/configs/userfield.php'\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn {\n\t\t\t[TypeSpecificUrl.MainSettings]: '/settings/configs/',\n\t\t\t[TypeSpecificUrl.UfList]: '/settings/configs/userfield_list.php',\n\t\t\t[TypeSpecificUrl.UfPage]: '/settings/configs/userfield.php'\n\t\t}\n\t}\n\t// endregion ////\n\t\n\t// region Pull.Client ////\n\tpublic usePullClient(\n\t\tprefix: string = 'prefix',\n\t\tuserId?: number,\n\t): B24HelperManager\n\t{\n\t\tif(this._b24PullClient)\n\t\t{\n\t\t\treturn this\n\t\t}\n\t\t\n\t\tthis.initializePullClient(\n\t\t\ttypeof userId === 'undefined'\n\t\t\t\t? this.profileInfo.data.id || 0\n\t\t\t\t: userId,\n\t\t\tprefix\n\t\t)\n\t\t\n\t\treturn this\n\t}\n\t\n\tprivate initializePullClient(\n\t\tuserId: number,\n\t\tprefix: string = 'prefix'\n\t): void\n\t{\n\t\tthis._b24PullClient = new B24PullClientManager({\n\t\t\tb24: this._b24,\n\t\t\trestApplication: this._b24.auth.getUniq(prefix),\n\t\t\tuserId\n\t\t})\n\t}\n\t\n\tpublic subscribePullClient(\n\t\tcallback: (message: TypePullMessage) => void,\n\t\tmoduleId: string = 'application',\n\t): B24HelperManager\n\t{\n\t\tif(!this._b24PullClient)\n\t\t{\n\t\t\tthrow new Error('PullClient not init')\n\t\t}\n\t\t\n\t\tthis._pullClientModuleId = moduleId\n\t\t\n\t\tthis._pullClientUnSubscribe.push(\n\t\t\tthis._b24PullClient.subscribe({\n\t\t\t\tmoduleId: this._pullClientModuleId,\n\t\t\t\tcallback\n\t\t\t})\n\t\t)\n\t\t\n\t\treturn this\n\t}\n\t\n\tpublic startPullClient(): void\n\t{\n\t\tif(!this._b24PullClient)\n\t\t{\n\t\t\tthrow new Error('PullClient not init')\n\t\t}\n\t\t\n\t\tthis._b24PullClient.start()\n\t\t.catch((error) => {\n\t\t\tthis.getLogger().error(`${Text.getDateForLog()}: Pull not running`, error)\n\t\t})\n\t}\n\t\n\tpublic getModuleIdPullClient(): string\n\t{\n\t\tif(!this._b24PullClient)\n\t\t{\n\t\t\tthrow new Error('PullClient not init')\n\t\t}\n\t\t\n\t\treturn this._pullClientModuleId\n\t}\n\t\n\tprivate _destroyPullClient(): void\n\t{\n\t\tthis._pullClientUnSubscribe.forEach(\n\t\t\tunsubscribeCallback => unsubscribeCallback()\n\t\t)\n\t\t\n\t\tthis._b24PullClient?.destroy()\n\t\tthis._b24PullClient = null\n\t}\n\t// endregion ////\n\t\n\t// region Tools ////\n\tprivate ensureInitialized(): void\n\t{\n\t\tif(!this._isInit)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager not initialized')\n\t\t}\n\t}\n\t// endregion ////\n}","import { B24HelperManager } from './helperManager'\nimport { LoadDataType } from '../types/b24-helper'\nimport type { TypeB24 } from '../types/b24'\nimport type { TypePullMessage } from \"../types/pull\";\n\nexport const useB24Helper = () => {\n\t\n\tlet $isInitB24Helper = false\n\tlet $isInitPullClient = false\n\t\n\tlet $b24Helper: null | B24HelperManager = null\n\t\n\tconst initB24Helper = async (\n\t\t$b24: TypeB24,\n\t\tdataTypes: LoadDataType[] = [\n\t\t\tLoadDataType.App,\n\t\t\tLoadDataType.Profile\n\t\t],\n\t): Promise<B24HelperManager> => {\n\t\t\n\t\tif(null === $b24Helper)\n\t\t{\n\t\t\t$b24Helper = new B24HelperManager($b24)\n\t\t}\n\t\t\n\t\tif($isInitB24Helper)\n\t\t{\n\t\t\treturn $b24Helper as B24HelperManager\n\t\t}\n\t\t\n\t\treturn $b24Helper.loadData(dataTypes)\n\t\t.then(() => {\n\t\t\t$isInitB24Helper = true\n\t\t\treturn $b24Helper as B24HelperManager\n\t\t})\n\t}\n\t\n\tconst destroyB24Helper = () => {\n\t\t$b24Helper?.destroy()\n\t\t$b24Helper = null\n\t\t$isInitB24Helper = false\n\t\t$isInitPullClient = false\n\t}\n\t\n\tconst isInitB24Helper = () => {\n\t\treturn $isInitB24Helper\n\t}\n\t\n\tconst getB24Helper = (): B24HelperManager => {\n\t\tif(null === $b24Helper)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager is not initialized. You need to call initB24Helper first.')\n\t\t}\n\t\t\n\t\treturn $b24Helper\n\t}\n\t\n\tconst usePullClient = () => {\n\t\tif(null === $b24Helper)\n\t\t{\n\t\t\tthrow new Error('B24HelperManager is not initialized. You need to call initB24Helper first.')\n\t\t}\n\t\t\n\t\t$b24Helper.usePullClient()\n\t\t$isInitPullClient = true\n\t}\n\t\n\tconst useSubscribePullClient = (\n\t\tcallback: (message: TypePullMessage) => void,\n\t\tmoduleId: string = 'application',\n\t) => {\n\t\tif(!$isInitPullClient)\n\t\t{\n\t\t\tthrow new Error('PullClient is not initialized. You need to call usePullClient first.')\n\t\t}\n\t\t\n\t\t$b24Helper?.subscribePullClient(callback, moduleId)\n\t}\n\t\n\tconst startPullClient = () => {\n\t\tif(!$isInitPullClient)\n\t\t{\n\t\t\tthrow new Error('PullClient is not initialized. You need to call usePullClient first.')\n\t\t}\n\t\t\n\t\t$b24Helper?.startPullClient()\n\t}\n\t\n\treturn {\n\t\tinitB24Helper,\n\t\tisInitB24Helper,\n\t\tdestroyB24Helper,\n\t\tgetB24Helper,\n\t\tusePullClient,\n\t\tuseSubscribePullClient,\n\t\tstartPullClient\n\t}\n}","import { B24Frame } from './frame'\nimport type { B24FrameQueryParams } from './types/auth'\n\ntype whileB24InitCallback = {\n\tresolve: (b24Frame: B24Frame) => void,\n\treject: (error: any) => void\n}\n\nconst delay = 50\n\nlet $b24Frame: null|B24Frame = null\nlet isInit = false\nlet connectError: null|Error = null\nlet isMakeFirstCall = false\n\nlet listCallBack: whileB24InitCallback[] = []\nlet isStartWatch = false\n\n// region Watch ////\nfunction startWatch()\n{\n\twindow.setTimeout(() => {\n\t\tif(!isInit || $b24Frame === null){ startWatch(); return }\n\t\t\n\t\tprocessResult()\n\t\tlistCallBack = []\n\t}, delay)\n}\n\nfunction processResult(): void\n{\n\tif(null !== connectError)\n\t{\n\t\tlistCallBack.forEach((callBack) => {\n\t\t\tcallBack.reject(connectError)\n\t\t})\n\t}\n\t\n\tif(!isInit || $b24Frame === null){ return }\n\t\n\tlistCallBack.forEach((callBack) => {\n\t\tcallBack.resolve($b24Frame as B24Frame)\n\t})\n}\n// endregion ////\n\nexport async function initializeB24Frame():Promise<B24Frame>\n{\n\t// region isInit ////\n\tif(\n\t\tisInit\n\t\t&& null !== $b24Frame\n\t)\n\t{\n\t\treturn Promise.resolve($b24Frame)\n\t}\n\t// endregion ////\n\t\n\t// region Not First Call ///\n\tif(isMakeFirstCall)\n\t{\n\t\t// region startWatch ///\n\t\tif(!isStartWatch)\n\t\t{\n\t\t\tisStartWatch = true\n\t\t\tstartWatch()\n\t\t}\n\t\t// endregion ////\n\t\t\n\t\treturn new Promise((resolve, reject) =>\n\t\t{\n\t\t\tlistCallBack.push({\n\t\t\t\tresolve: resolve,\n\t\t\t\treject: reject,\n\t\t\t})\n\t\t})\n\t}\n\t// endregion ////\n\t\n\t// region First Call ///\n\tisMakeFirstCall = true\n\t\n\treturn new Promise((resolve, reject) =>\n\t{\n\t\tconst queryParams: B24FrameQueryParams = {\n\t\t\tDOMAIN: null,\n\t\t\tPROTOCOL: false,\n\t\t\tAPP_SID: null,\n\t\t\tLANG: null\n\t\t}\n\t\t\n\t\tif(!!window.name)\n\t\t{\n\t\t\tconst [domain, protocol, appSid] = window.name.split('|')\n\t\t\tqueryParams.DOMAIN = domain\n\t\t\tqueryParams.PROTOCOL = parseInt(protocol) === 1\n\t\t\tqueryParams.APP_SID = appSid\n\t\t\tqueryParams.LANG = null\n\t\t}\n\t\t\n\t\tif(!queryParams.DOMAIN || !queryParams.APP_SID)\n\t\t{\n\t\t\tconnectError = new Error('Unable to initialize Bitrix24Frame library!')\n\t\t\treject(connectError)\n\t\t}\n\t\t\n\t\t$b24Frame = new B24Frame(queryParams)\n\t\t\n\t\t$b24Frame.init()\n\t\t.then(() =>\n\t\t{\n\t\t\tisInit = true\n\t\t\tresolve($b24Frame as B24Frame)\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconnectError = error\n\t\t\treject(connectError)\n\t\t})\n\t})\n\t// endregion ////\n}"],"names":["LoggerType","DataType","n","fractionDigits","DateTime","EnumCrmEntityType","EnumCrmEntityTypeId","LoadDataType","TypeOption","ConnectionType","LsKeys","PullStatus","SenderType","SubscriptionType","CloseReasons","SystemCommands","ServerMode","RpcMethod","RequestIdGenerator","result","AxiosError","problem","answerError","problemError","resultData","B24LangList","MessageCommands","OptionsManager","config","response","B24PullClientManager"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/logger/browser.ts","../../src/types/common.ts","../../src/tools/type.ts","../../src/tools/uuidv7.ts","../../src/tools/text.ts","../../src/tools/browser.ts","../../src/types/http.ts","../../src/types/crm/entity-type.ts","../../src/types/b24-helper.ts","../../src/types/pull.ts","../../src/core/result.ts","../../src/core/http/ajax-error.ts","../../src/core/http/ajax-result.ts","../../src/core/http/restriction-manager.ts","../../src/core/http/request-id-generator.ts","../../src/core/http/controller.ts","../../src/core/abstract-b24.ts","../../src/core/language/list.ts","../../src/tools/scroll-size.ts","../../src/tools/formatters/numbers.ts","../../src/tools/formatters/iban.ts","../../src/tools/use-formatters.ts","../../src/hook/auth.ts","../../src/hook/controller.ts","../../src/frame/message/commands.ts","../../src/frame/message/controller.ts","../../src/frame/frame.ts","../../src/frame/auth.ts","../../src/frame/parent.ts","../../src/frame/options.ts","../../src/frame/dialog.ts","../../src/frame/slider.ts","../../src/frame/placement.ts","../../src/frame/controller.ts","../../src/helper/abstract-helper.ts","../../src/helper/profile-manager.ts","../../src/helper/app-manager.ts","../../src/helper/payment-manager.ts","../../src/helper/license-manager.ts","../../src/helper/currency-manager.ts","../../src/helper/options-manager.ts","../../src/pullClient/storage-manager.ts","../../src/pullClient/errors.ts","../../src/pullClient/json-rpc.ts","../../src/pullClient/shared-config.ts","../../src/pullClient/channel-manager.ts","../../src/pullClient/protobuf/model.js","../../src/pullClient/protobuf/index.ts","../../src/pullClient/abstract-connector.ts","../../src/pullClient/web-socket-connector.ts","../../src/pullClient/long-polling-connector.ts","../../src/pullClient/client.ts","../../src/helper/helper-manager.ts","../../src/helper/use-b24-helper.ts","../../src/loader-b24frame.ts"],"sourcesContent":["export enum LoggerType {\n\tdesktop = 'desktop',\n\tlog = 'log',\n\tinfo = 'info',\n\twarn = 'warn',\n\terror = 'error',\n\ttrace = 'trace',\n}\n\ninterface LoggerTypes {\n\tdesktop: boolean\n\tlog: boolean\n\tinfo: boolean\n\twarn: boolean\n\terror: boolean\n\ttrace: boolean\n}\n\n// region StyleCollection ////\nconst styleCollection: Map<string, string[]> = new Map()\n\nstyleCollection.set('title', [\n\t'%c#title#',\n\t'color: #959ca4; font-style: italic; padding: 0 6px; border-top: 1px solid #ccc; border-left: 1px solid #ccc; border-bottom: 1px solid #ccc',\n])\n\nstyleCollection.set(LoggerType.desktop, [\n\t`%cDESKTOP`,\n\t'color: white; font-style: italic; background-color: #29619b; padding: 0 6px; border: 1px solid #29619b',\n])\n\nstyleCollection.set(LoggerType.log, [\n\t`%cLOG`,\n\t'color: #2a323b; font-style: italic; background-color: #ccc; padding: 0 6px; border: 1px solid #ccc',\n])\n\nstyleCollection.set(LoggerType.info, [\n\t`%cINFO`,\n\t'color: #fff; font-style: italic; background-color: #6b7f96; padding: 0 6px; border: 1px solid #6b7f96',\n])\n\nstyleCollection.set(LoggerType.warn, [\n\t`%cWARNING`,\n\t'color: #f0a74f; font-style: italic; padding: 0 6px; border: 1px solid #f0a74f',\n])\n\nstyleCollection.set(LoggerType.error, [\n\t`%cERROR`,\n\t'color: white; font-style: italic; background-color: #8a3232; padding: 0 6px; border: 1px solid #8a3232',\n])\n\nstyleCollection.set(LoggerType.trace, [\n\t`%cTRACE`,\n\t'color: #2a323b; font-style: italic; background-color: #ccc; padding: 0 6px; border: 1px solid #ccc',\n])\n// endregion ////\n\nexport class LoggerBrowser {\n\treadonly #title: string\n\t#types: LoggerTypes = {\n\t\tdesktop: true,\n\t\tlog: false,\n\t\tinfo: false,\n\t\twarn: false,\n\t\terror: true,\n\t\ttrace: true,\n\t}\n\n\tstatic build(title: string, isDevelopment: boolean = false): LoggerBrowser {\n\t\tconst logger = new LoggerBrowser(title)\n\n\t\tif (isDevelopment) {\n\t\t\tlogger.enable(LoggerType.log)\n\t\t\tlogger.enable(LoggerType.info)\n\t\t\tlogger.enable(LoggerType.warn)\n\t\t}\n\n\t\treturn logger\n\t}\n\n\tprivate constructor(title: string) {\n\t\tthis.#title = title\n\t}\n\n\t// region Styles ////\n\t#getStyle(type: LoggerType): string[] {\n\t\tconst resultText: string[] = []\n\t\tconst resultStyle: string[] = []\n\n\t\tif (styleCollection.has('title')) {\n\t\t\tconst styleTitle = styleCollection.get('title') as string[]\n\t\t\tif (styleTitle[0]) {\n\t\t\t\tresultText.push(styleTitle[0].replace('#title#', this.#title))\n\t\t\t\tresultStyle.push(styleTitle[1] || '')\n\t\t\t}\n\t\t}\n\n\t\tif (styleCollection.has(type)) {\n\t\t\tconst styleBadge = styleCollection.get(type) as string[]\n\t\t\tif (styleBadge[0]) {\n\t\t\t\tresultText.push(styleBadge[0])\n\t\t\t\tresultStyle.push(styleBadge[1] || '')\n\t\t\t}\n\t\t}\n\n\t\treturn [resultText.join(''), ...resultStyle]\n\t}\n\t// endregion ////\n\n\t// region Config ////\n\tsetConfig(types: Record<string | LoggerType, boolean>): void {\n\t\tfor (const type in types) {\n\t\t\tthis.#types[type as LoggerType] = types[type] as boolean\n\t\t}\n\t}\n\n\tenable(type: LoggerType): boolean {\n\t\tif (typeof this.#types[type] === 'undefined') {\n\t\t\treturn false\n\t\t}\n\n\t\tthis.#types[type] = true\n\n\t\treturn true\n\t}\n\n\tdisable(type: LoggerType): boolean {\n\t\tif (typeof this.#types[type] === 'undefined') {\n\t\t\treturn false\n\t\t}\n\n\t\tthis.#types[type] = false\n\n\t\treturn true\n\t}\n\n\tisEnabled(type: LoggerType): boolean {\n\t\treturn this.#types[type]\n\t}\n\t// endregion ////\n\n\t// region Functions ////\n\tdesktop(...params: any[]): void {\n\t\tif (this.isEnabled(LoggerType.desktop)) {\n\t\t\tconsole.log(...this.#getStyle(LoggerType.desktop), ...params)\n\t\t}\n\t}\n\n\tlog(...params: any[]): void {\n\t\tif (this.isEnabled(LoggerType.log)) {\n\t\t\tconsole.log(...this.#getStyle(LoggerType.log), ...params)\n\t\t}\n\t}\n\n\tinfo(...params: any[]): void {\n\t\tif (this.isEnabled(LoggerType.info)) {\n\t\t\tconsole.info(...this.#getStyle(LoggerType.info), ...params)\n\t\t}\n\t}\n\n\twarn(...params: any[]): void {\n\t\tif (this.isEnabled(LoggerType.warn)) {\n\t\t\tconsole.warn(...this.#getStyle(LoggerType.warn), ...params)\n\t\t}\n\t}\n\n\terror(...params: any[]): void {\n\t\tif (this.isEnabled(LoggerType.error)) {\n\t\t\tconsole.error(...this.#getStyle(LoggerType.error), ...params)\n\t\t}\n\t}\n\n\ttrace(...params: any[]): void {\n\t\tif (this.isEnabled(LoggerType.trace)) {\n\t\t\tconsole.trace(...this.#getStyle(LoggerType.trace), ...params)\n\t\t}\n\t}\n\t// endregion ////\n}\n","/**\n * String which is actually a number, like `'20.23'`\n */\nexport type NumberString = string\n\n/**\n * Like `'2018-06-07T03:00:00+03:00'`\n */\nexport type ISODate = string\nexport type BoolString = 'Y' | 'N'\nexport type GenderString = 'M' | 'F' | ''\n\nexport type PlacementViewMode = 'view' | 'edit'\n\nexport type Fields = {\n\treadonly [key: string]: {\n\t\treadonly type: string\n\t\treadonly isRequired: boolean\n\t\treadonly isReadOnly: boolean\n\t\treadonly isImmutable: boolean\n\t\treadonly isMultiple: boolean\n\t\treadonly isDynamic: boolean\n\t\treadonly title: string\n\t\treadonly upperName?: string\n\t}\n}\n\nexport type MultiField = {\n\treadonly ID: NumberString\n\treadonly VALUE_TYPE: string\n\treadonly VALUE: string\n\treadonly TYPE_ID: string\n}\n\nexport type MultiFieldArray = ReadonlyArray<\n\tPick<MultiField, 'VALUE' | 'VALUE_TYPE'>\n>\n\n/**\n * Describes the inline settings in UF\n */\nexport type UserFieldType = {\n\tUSER_TYPE_ID: string\n\tHANDLER: string\n\tTITLE: string\n\tDESCRIPTION: string\n\tOPTIONS?: {\n\t\theight: number\n\t}\n}\n\n/**\n * Data types\n * @link https://apidocs.bitrix24.ru/api-reference/data-types.html\n * @link https://dev.1c-bitrix.ru/rest_help/crm/dynamic/methodscrmitem/crm_item_fields.php\n */\nexport enum DataType {\n\tundefined = 'undefined',\n\tany = 'any',\n\tinteger = 'integer',\n\tboolean = 'boolean',\n\tdouble = 'double',\n\tdate = 'date',\n\tdatetime = 'datetime',\n\tstring = 'string',\n\ttext = 'text',\n\tfile = 'file',\n\tarray = 'array',\n\tobject = 'object',\n\tuser = 'user',\n\tlocation = 'location',\n\tcrmCategory = 'crm_category',\n\tcrmStatus = 'crm_status',\n\tcrmCurrency = 'crm_currency',\n}\n","const objectCtorString = Function.prototype.toString.call(Object)\n\n/**\n * The `Type` class is designed to check and determine data types\n *\n * @see bitrix/js/main/core/src/lib/type.js\n */\nclass TypeManager {\n\tgetTag(value: any): string {\n\t\treturn Object.prototype.toString.call(value)\n\t}\n\n\t/**\n\t * Checks that value is string\n\t * @param value\n\t * @return {boolean}\n\t *\n\t * @memo get from pull.client.Utils\n\t */\n\tisString(value: any): boolean {\n\t\treturn value === ''\n\t\t\t? true\n\t\t\t: // eslint-disable-next-line unicorn/no-nested-ternary\n\t\t\t\tvalue\n\t\t\t\t? typeof value === 'string' || value instanceof String\n\t\t\t\t: false\n\t}\n\n\t/**\n\t * Returns true if a value is not an empty string\n\t * @param value\n\t * @returns {boolean}\n\t */\n\tisStringFilled(value: any): boolean {\n\t\treturn this.isString(value) && value !== ''\n\t}\n\n\t/**\n\t * Checks that value is function\n\t * @param value\n\t * @return {boolean}\n\t *\n\t * @memo get from pull.client.Utils\n\t */\n\tisFunction(value: any): boolean {\n\t\treturn value === null\n\t\t\t? false\n\t\t\t: typeof value === 'function' || value instanceof Function\n\t}\n\n\t/**\n\t * Checks that value is an object\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisObject(value: any): boolean {\n\t\treturn !!value && (typeof value === 'object' || typeof value === 'function')\n\t}\n\n\t/**\n\t * Checks that value is object like\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisObjectLike(value: any): boolean {\n\t\treturn !!value && typeof value === 'object'\n\t}\n\n\t/**\n\t * Checks that value is plain object\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisPlainObject(value: any): boolean {\n\t\tif (!this.isObjectLike(value) || this.getTag(value) !== '[object Object]') {\n\t\t\treturn false\n\t\t}\n\n\t\tconst proto = Object.getPrototypeOf(value)\n\t\tif (proto === null) {\n\t\t\treturn true\n\t\t}\n\n\t\tconst ctor = proto.hasOwnProperty('constructor') && proto.constructor\n\n\t\treturn (\n\t\t\ttypeof ctor === 'function' &&\n\t\t\tFunction.prototype.toString.call(ctor) === objectCtorString\n\t\t)\n\t}\n\n\tisJsonRpcRequest(value: any): boolean {\n\t\treturn (\n\t\t\ttypeof value === 'object' &&\n\t\t\tvalue &&\n\t\t\t'jsonrpc' in value &&\n\t\t\tthis.isStringFilled(value.jsonrpc) &&\n\t\t\t'method' in value &&\n\t\t\tthis.isStringFilled(value.method)\n\t\t)\n\t}\n\n\tisJsonRpcResponse(value: any): boolean {\n\t\treturn (\n\t\t\ttypeof value === 'object' &&\n\t\t\tvalue &&\n\t\t\t'jsonrpc' in value &&\n\t\t\tthis.isStringFilled(value.jsonrpc) &&\n\t\t\t'id' in value &&\n\t\t\t('result' in value || 'error' in value)\n\t\t)\n\t}\n\n\t/**\n\t * Checks that value is boolean\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisBoolean(value: any): boolean {\n\t\treturn value === true || value === false\n\t}\n\n\t/**\n\t * Checks that value is number\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisNumber(value: any): boolean {\n\t\treturn !Number.isNaN(value) && typeof value === 'number'\n\t}\n\n\t/**\n\t * Checks that value is integer\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisInteger(value: any): boolean {\n\t\treturn this.isNumber(value) && value % 1 === 0\n\t}\n\n\t/**\n\t * Checks that value is float\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisFloat(value: any): boolean {\n\t\treturn this.isNumber(value) && !this.isInteger(value)\n\t}\n\n\t/**\n\t * Checks that value is nil\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisNil(value: any): boolean {\n\t\treturn value === null || value === undefined\n\t}\n\n\t/**\n\t * Checks that value is an array\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisArray(value: any): boolean {\n\t\treturn !this.isNil(value) && Array.isArray(value)\n\t}\n\n\t/**\n\t * Returns true if a value is an array, and it has at least one element\n\t * @param value\n\t * @returns {boolean}\n\t */\n\tisArrayFilled(value: any): boolean {\n\t\treturn this.isArray(value) && value.length > 0\n\t}\n\n\t/**\n\t * Checks that value is array like\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisArrayLike(value: any): boolean {\n\t\treturn (\n\t\t\t!this.isNil(value) &&\n\t\t\t!this.isFunction(value) &&\n\t\t\tvalue.length > -1 &&\n\t\t\tvalue.length <= Number.MAX_SAFE_INTEGER\n\t\t)\n\t}\n\n\t/**\n\t * Checks that value is Date\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisDate(value: any): boolean {\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object Date]'\n\t}\n\n\t/**\n\t * Checks that is a DOM node\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisDomNode(value: any): boolean {\n\t\treturn (\n\t\t\tthis.isObjectLike(value) &&\n\t\t\t!this.isPlainObject(value) &&\n\t\t\t'nodeType' in value\n\t\t)\n\t}\n\n\t/**\n\t * Checks that value is element node\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisElementNode(value: any): boolean {\n\t\treturn this.isDomNode(value) && value.nodeType === Node.ELEMENT_NODE\n\t}\n\n\t/**\n\t * Checks that value is a text node\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisTextNode(value: any): boolean {\n\t\treturn this.isDomNode(value) && value.nodeType === Node.TEXT_NODE\n\t}\n\n\t/**\n\t * Checks that value is Map\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisMap(value: any): boolean {\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object Map]'\n\t}\n\n\t/**\n\t * Checks that value is Set\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisSet(value: any): boolean {\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object Set]'\n\t}\n\n\t/**\n\t * Checks that value is WeakMap\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisWeakMap(value: any): boolean {\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object WeakMap]'\n\t}\n\n\t/**\n\t * Checks that value is WeakSet\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisWeakSet(value: any): boolean {\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object WeakSet]'\n\t}\n\n\t/**\n\t * Checks that value is prototype\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisPrototype(value: any): boolean {\n\t\treturn (\n\t\t\t((typeof (value && value.constructor) === 'function' &&\n\t\t\t\tvalue.constructor.prototype) ||\n\t\t\t\tObject.prototype) === value\n\t\t)\n\t}\n\n\t/**\n\t * Checks that value is regexp\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisRegExp(value: any): boolean {\n\t\treturn this.isObjectLike(value) && this.getTag(value) === '[object RegExp]'\n\t}\n\n\t/**\n\t * Checks that value is null\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisNull(value: any): boolean {\n\t\treturn value === null\n\t}\n\n\t/**\n\t * Checks that value is undefined\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisUndefined(value: any): boolean {\n\t\treturn typeof value === 'undefined'\n\t}\n\n\t/**\n\t * Checks that value is ArrayBuffer\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisArrayBuffer(value: any): boolean {\n\t\treturn (\n\t\t\tthis.isObjectLike(value) && this.getTag(value) === '[object ArrayBuffer]'\n\t\t)\n\t}\n\n\t/**\n\t * Checks that value is typed array\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisTypedArray(value: any): boolean {\n\t\tconst regExpTypedTag =\n\t\t\t/^\\[object (?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)]$/\n\t\treturn this.isObjectLike(value) && regExpTypedTag.test(this.getTag(value))\n\t}\n\n\t/**\n\t * Checks that value is Blob\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisBlob(value: any): boolean {\n\t\treturn (\n\t\t\tthis.isObjectLike(value) &&\n\t\t\tthis.isNumber(value.size) &&\n\t\t\tthis.isString(value.type) &&\n\t\t\tthis.isFunction(value.slice)\n\t\t)\n\t}\n\n\t/**\n\t * Checks that value is File\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisFile(value: any): boolean {\n\t\treturn (\n\t\t\tthis.isBlob(value) &&\n\t\t\tthis.isString(value.name) &&\n\t\t\t(this.isNumber(value.lastModified) ||\n\t\t\t\tthis.isObjectLike(value.lastModifiedDate))\n\t\t)\n\t}\n\n\t/**\n\t * Checks that value is FormData\n\t * @param value\n\t * @return {boolean}\n\t */\n\tisFormData(value: any): boolean {\n\t\treturn value instanceof FormData\n\t}\n\n\tclone(obj: any, bCopyObj: boolean = true): any {\n\t\tlet _obj, i, l\n\n\t\tif (obj === null) {\n\t\t\treturn null\n\t\t}\n\n\t\tif (this.isDomNode(obj)) {\n\t\t\t_obj = obj.cloneNode(bCopyObj)\n\t\t} else if (typeof obj == 'object') {\n\t\t\tif (this.isArray(obj)) {\n\t\t\t\t_obj = []\n\t\t\t\tfor (i = 0, l = obj.length; i < l; i++) {\n\t\t\t\t\tif (typeof obj[i] == 'object' && bCopyObj) {\n\t\t\t\t\t\t_obj[i] = this.clone(obj[i], bCopyObj)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_obj[i] = obj[i]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t_obj = {}\n\t\t\t\tif (obj.constructor) {\n\t\t\t\t\tif (this.isDate(obj)) {\n\t\t\t\t\t\t_obj = new Date(obj)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_obj = new obj.constructor()\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (!obj.hasOwnProperty(i)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof obj[i] === 'object' && bCopyObj) {\n\t\t\t\t\t\t_obj[i] = this.clone(obj[i], bCopyObj)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_obj[i] = obj[i]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t_obj = obj\n\t\t}\n\n\t\treturn _obj\n\t}\n}\n\nconst Type = new TypeManager()\n\nexport default Type\n","/**\n * uuid v7\n *\n * @link https://github.com/uuidjs/uuid\n */\n\ntype V7State = {\n\t// time, milliseconds\n\tmsecs?: number\n\t// sequence number (32-bits)\n\tseq?: number\n}\n\nconst _state: V7State = {}\n\nlet getRandomValues: typeof crypto.getRandomValues | undefined\nconst randoms8 = new Uint8Array(16)\n\nconst byteToHex: string[] = []\nfor (let i = 0; i < 256; ++i) {\n\tbyteToHex.push((i + 0x100).toString(16).slice(1))\n}\n\nfunction updateV7State(state: V7State, now: number, randoms: Uint8Array) {\n\tstate.msecs ??= -Infinity\n\tstate.seq ??= 0\n\n\tif (now > state.msecs) {\n\t\t// Time has moved on! Pick a new random sequence number\n\t\tstate.seq =\n\t\t\t(randoms[6] << 23) | (randoms[7] << 16) | (randoms[8] << 8) | randoms[9]\n\t\tstate.msecs = now\n\t} else {\n\t\t// Bump sequence counter w/ 32-bit rollover\n\t\tstate.seq = Math.trunc(state.seq + 1)\n\n\t\t// In case of rollover, bump timestamp to preserve monotonicity. This is\n\t\t// allowed by the RFC and should self-correct as the system clock catches\n\t\t// up. See https://www.rfc-editor.org/rfc/rfc9562.html#section-6.2-9.4\n\t\tif (state.seq === 0) {\n\t\t\tstate.msecs++\n\t\t}\n\t}\n\n\treturn state\n}\n\nfunction v7Bytes(\n\trandoms: Uint8Array,\n\tmsecs?: number,\n\tseq?: number,\n\tbuf?: Uint8Array,\n\toffset = 0\n) {\n\tif (!buf) {\n\t\tbuf = new Uint8Array(16)\n\t\toffset = 0\n\t}\n\n\t// Defaults\n\tmsecs ??= Date.now()\n\tseq ??=\n\t\t((randoms[6] * 0x7f) << 24) |\n\t\t(randoms[7] << 16) |\n\t\t(randoms[8] << 8) |\n\t\trandoms[9]\n\n\t// byte 0-5: timestamp (48 bits)\n\tbuf[offset++] = (msecs / 0x10000000000) & 0xff\n\tbuf[offset++] = (msecs / 0x100000000) & 0xff\n\tbuf[offset++] = (msecs / 0x1000000) & 0xff\n\tbuf[offset++] = (msecs / 0x10000) & 0xff\n\tbuf[offset++] = (msecs / 0x100) & 0xff\n\tbuf[offset++] = msecs & 0xff\n\n\t// byte 6: `version` (4 bits) | sequence bits 28-31 (4 bits)\n\tbuf[offset++] = 0x70 | ((seq >>> 28) & 0x0f)\n\n\t// byte 7: sequence bits 20-27 (8 bits)\n\tbuf[offset++] = (seq >>> 20) & 0xff\n\n\t// byte 8: `variant` (2 bits) | sequence bits 14-19 (6 bits)\n\tbuf[offset++] = 0x80 | ((seq >>> 14) & 0x3f)\n\n\t// byte 9: sequence bits 6-13 (8 bits)\n\tbuf[offset++] = (seq >>> 6) & 0xff\n\n\t// byte 10: sequence bits 0-5 (6 bits) | random (2 bits)\n\tbuf[offset++] = ((seq << 2) & 0xff) | (randoms[10] & 0x03)\n\n\t// bytes 11-15: random (40 bits)\n\tbuf[offset++] = randoms[11]\n\tbuf[offset++] = randoms[12]\n\tbuf[offset++] = randoms[13]\n\tbuf[offset++] = randoms[14]\n\tbuf[offset++] = randoms[15]\n\n\treturn buf\n}\n\nfunction unsafeStringify(arr: Uint8Array, offset = 0): string {\n\t// Note: Be careful editing this code! It's been tuned for performance\n\t// and works in ways you may not expect.\n\t//\n\t// Note to future-self: No, you can't remove the `toLowerCase()` call.\n\treturn (\n\t\tbyteToHex[arr[offset]] +\n\t\tbyteToHex[arr[offset + 1]] +\n\t\tbyteToHex[arr[offset + 2]] +\n\t\tbyteToHex[arr[offset + 3]] +\n\t\t'-' +\n\t\tbyteToHex[arr[offset + 4]] +\n\t\tbyteToHex[arr[offset + 5]] +\n\t\t'-' +\n\t\tbyteToHex[arr[offset + 6]] +\n\t\tbyteToHex[arr[offset + 7]] +\n\t\t'-' +\n\t\tbyteToHex[arr[offset + 8]] +\n\t\tbyteToHex[arr[offset + 9]] +\n\t\t'-' +\n\t\tbyteToHex[arr[offset + 10]] +\n\t\tbyteToHex[arr[offset + 11]] +\n\t\tbyteToHex[arr[offset + 12]] +\n\t\tbyteToHex[arr[offset + 13]] +\n\t\tbyteToHex[arr[offset + 14]] +\n\t\tbyteToHex[arr[offset + 15]]\n\t).toLowerCase()\n}\n\nexport default function uuidv7(): string {\n\tconst buf = undefined\n\tconst offset = undefined\n\n\tconst now = Date.now()\n\n\tif (!getRandomValues) {\n\t\tif (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n\t\t\tthrow new Error('crypto.getRandomValues() not supported.')\n\t\t}\n\n\t\tgetRandomValues = crypto.getRandomValues.bind(crypto)\n\t}\n\n\tconst randoms = getRandomValues(randoms8)\n\n\tupdateV7State(_state, now, randoms)\n\n\tconst bytes: Uint8Array = v7Bytes(\n\t\trandoms,\n\t\t_state.msecs,\n\t\t_state.seq,\n\t\tbuf,\n\t\toffset\n\t)\n\n\treturn unsafeStringify(bytes)\n}\n","import { DateTime, type DateTimeOptions } from 'luxon'\nimport uuidv7 from '../tools/uuidv7'\nimport Type from './type'\n\n// eslint-disable-next-line\nconst reEscape = /[&<>'\"]/g\nconst reUnescape = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34)/g\n\nconst escapeEntities: Record<string, string> = {\n\t'&': '&',\n\t'<': '<',\n\t'>': '>',\n\t\"'\": ''',\n\t'\"': '"',\n}\n\nconst unescapeEntities: Record<string, string> = {\n\t'&': '&',\n\t'&': '&',\n\t'<': '<',\n\t'<': '<',\n\t'>': '>',\n\t'>': '>',\n\t'&apos': \"'\",\n\t''': \"'\",\n\t'"': '\"',\n\t'"': '\"',\n}\n\n/**\n * The `Text` class provides a set of utility methods for working with text data.\n * It includes functions for encoding and decoding HTML entities, generating random strings,\n * converting values to different data types, and changing the case and format of strings\n *\n * @see bitrix/js/main/core/src/lib/text.js\n */\nclass TextManager {\n\tgetRandom(length = 8): string {\n\t\t// eslint-disable-next-line\n\t\treturn [...Array(length)]\n\t\t\t.map(() => Math.trunc(Math.random() * 36).toString(36))\n\t\t\t.join('')\n\t}\n\n\t/**\n\t * Generates UUID\n\t */\n\tgetUniqId(): string {\n\t\treturn 'xxxxxxxx-xlsx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n\t\t\tconst r = Math.trunc(Math.random() * 16)\n\t\t\tconst v = c === 'x' ? r : (r & 0x3) | 0x8\n\t\t\treturn v.toString(16)\n\t\t})\n\t}\n\n\t/**\n\t * Generate uuid v7\n\t * @return {string}\n\t */\n\tgetUuidRfc4122(): string {\n\t\treturn uuidv7()\n\t}\n\n\t/**\n\t * Encodes all unsafe entities\n\t * @param {string} value\n\t * @return {string}\n\t */\n\tencode(value: string): string {\n\t\tif (Type.isString(value)) {\n\t\t\treturn value.replace(reEscape, (item) => escapeEntities[item])\n\t\t}\n\n\t\treturn value\n\t}\n\n\t/**\n\t * Decodes all encoded entities\n\t * @param {string} value\n\t * @return {string}\n\t */\n\tdecode(value: string): string {\n\t\tif (Type.isString(value)) {\n\t\t\treturn value.replace(reUnescape, (item) => unescapeEntities[item])\n\t\t}\n\n\t\treturn value\n\t}\n\n\ttoNumber(value: any): number {\n\t\tconst parsedValue = Number.parseFloat(value)\n\n\t\tif (Type.isNumber(parsedValue)) {\n\t\t\treturn parsedValue\n\t\t}\n\n\t\treturn 0.0\n\t}\n\n\ttoInteger(value: any): number {\n\t\treturn this.toNumber(Number.parseInt(value, 10))\n\t}\n\n\ttoBoolean(value: any, trueValues: string[] = []): boolean {\n\t\tconst transformedValue = Type.isString(value) ? value.toLowerCase() : value\n\t\treturn ['true', 'y', '1', 1, true, ...trueValues].includes(transformedValue)\n\t}\n\n\ttoCamelCase(str: string): string {\n\t\tif (!Type.isStringFilled(str)) {\n\t\t\treturn str\n\t\t}\n\n\t\t// eslint-disable-next-line\n\t\tconst regex = /[-_\\s]+(.)?/g\n\t\tif (!regex.test(str)) {\n\t\t\t// eslint-disable-next-line\n\t\t\treturn str.match(/^[A-Z]+$/)\n\t\t\t\t? str.toLowerCase()\n\t\t\t\t: str[0].toLowerCase() + str.slice(1)\n\t\t}\n\n\t\tstr = str.toLowerCase()\n\t\tstr = str.replace(regex, (_match: string, letter) =>\n\t\t\tletter ? letter.toUpperCase() : ''\n\t\t)\n\n\t\t// eslint-disable-next-line\n\t\treturn str[0].toLowerCase() + str.substring(1)\n\t}\n\n\ttoPascalCase(str: string): string {\n\t\tif (!Type.isStringFilled(str)) {\n\t\t\treturn str\n\t\t}\n\n\t\treturn this.capitalize(this.toCamelCase(str))\n\t}\n\n\ttoKebabCase(str: string): string {\n\t\tif (!Type.isStringFilled(str)) {\n\t\t\treturn str\n\t\t}\n\n\t\tconst matches = str.match(\n\t\t\t// eslint-disable-next-line\n\t\t\t/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g\n\t\t)\n\t\tif (!matches) {\n\t\t\treturn str\n\t\t}\n\n\t\treturn matches.map((x) => x.toLowerCase()).join('-')\n\t}\n\n\tcapitalize(str: string): string {\n\t\tif (!Type.isStringFilled(str)) {\n\t\t\treturn str\n\t\t}\n\n\t\t// eslint-disable-next-line\n\t\treturn str[0].toUpperCase() + str.substring(1)\n\t}\n\n\tnumberFormat(\n\t\tnumber: number,\n\t\tdecimals: number = 0,\n\t\tdecPoint: string = '.',\n\t\tthousandsSep: string = ','\n\t): string {\n\t\t// eslint-disable-next-line\n\t\tconst n = !Number.isFinite(number) ? 0 : number\n\t\t// eslint-disable-next-line\n\t\tconst fractionDigits = !Number.isFinite(decimals) ? 0 : Math.abs(decimals)\n\n\t\tconst toFixedFix = (n: number, fractionDigits: number): number => {\n\t\t\tconst k = Math.pow(10, fractionDigits)\n\t\t\treturn Math.round(n * k) / k\n\t\t}\n\n\t\tconst s = (fractionDigits ? toFixedFix(n, fractionDigits) : Math.round(n))\n\t\t\t.toString()\n\t\t\t.split('.')\n\n\t\tif (s[0].length > 3) {\n\t\t\ts[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, thousandsSep)\n\t\t}\n\n\t\tif ((s[1] || '').length < fractionDigits) {\n\t\t\ts[1] = s[1] || ''\n\t\t\t// eslint-disable-next-line\n\t\t\ts[1] += new Array(fractionDigits - s[1].length + 1).join('0')\n\t\t}\n\n\t\treturn s.join(decPoint)\n\t}\n\n\t/**\n\t * Convert string to DateTime from ISO 8601 or self template\n\t *\n\t * @param {string} dateString\n\t * @param {string} template\n\t * @param opts\n\t * @returns {DateTime}\n\t *\n\t * @link https://moment.github.io/luxon/#/parsing?id=parsing-technical-formats\n\t */\n\ttoDateTime(\n\t\tdateString: string,\n\t\ttemplate?: string,\n\t\topts?: DateTimeOptions\n\t): DateTime {\n\t\tif (!(typeof template === 'undefined') && Type.isStringFilled(template)) {\n\t\t\treturn DateTime.fromFormat(dateString, template, opts)\n\t\t}\n\n\t\treturn DateTime.fromISO(dateString, opts)\n\t}\n\n\tgetDateForLog(): string {\n\t\tconst now = DateTime.now()\n\t\treturn now.toFormat('y-MM-dd HH:mm:ss')\n\t}\n\n\tbuildQueryString(params: any): string {\n\t\tlet result = ''\n\t\tfor (const key in params) {\n\t\t\tif (!params.hasOwnProperty(key)) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst value = params[key]\n\t\t\tif (Type.isArray(value)) {\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\tvalue.forEach((valueElement: any, index: any) => {\n\t\t\t\t\tresult +=\n\t\t\t\t\t\tencodeURIComponent(key + '[' + index + ']') +\n\t\t\t\t\t\t'=' +\n\t\t\t\t\t\tencodeURIComponent(valueElement) +\n\t\t\t\t\t\t'&'\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tresult +=\n\t\t\t\t\tencodeURIComponent(key) + '=' + encodeURIComponent(value) + '&'\n\t\t\t}\n\t\t}\n\n\t\tif (result.length > 0) {\n\t\t\t// eslint-disable-next-line\n\t\t\tresult = result.substring(0, result.length - 1)\n\t\t}\n\n\t\treturn result\n\t}\n}\n\nconst Text = new TextManager()\n\nexport default Text\n","import Type from './type'\n\nlet UA: string = ''\ntry {\n\tUA = navigator?.userAgent.toLowerCase()\n} catch {\n\tUA = '?'\n}\n\n/**\n * @see bitrix/js/main/core/src/lib/browser.js\n */\nclass BrowserManager {\n\tisOpera(): boolean {\n\t\treturn UA.includes('opera')\n\t}\n\n\tisIE(): boolean {\n\t\treturn 'attachEvent' in document && !this.isOpera()\n\t}\n\n\tisIE6(): boolean {\n\t\treturn UA.includes('msie 6')\n\t}\n\n\tisIE7(): boolean {\n\t\treturn UA.includes('msie 7')\n\t}\n\n\tisIE8(): boolean {\n\t\treturn UA.includes('msie 8')\n\t}\n\n\tisIE9(): boolean {\n\t\t// @ts-ignore ////\n\t\treturn 'documentMode' in document && document.documentMode >= 9\n\t}\n\n\tisIE10(): boolean {\n\t\t// @ts-ignore ////\n\t\treturn 'documentMode' in document && document.documentMode >= 10\n\t}\n\n\tisSafari(): boolean {\n\t\treturn UA.includes('safari') && !UA.includes('chrome')\n\t}\n\n\tisFirefox() {\n\t\treturn UA.includes('firefox')\n\t}\n\n\tisChrome() {\n\t\treturn UA.includes('chrome')\n\t}\n\n\tdetectIEVersion() {\n\t\tif (\n\t\t\tthis.isOpera() ||\n\t\t\tthis.isSafari() ||\n\t\t\tthis.isFirefox() ||\n\t\t\tthis.isChrome()\n\t\t) {\n\t\t\treturn -1\n\t\t}\n\n\t\tlet rv = -1\n\n\t\tif (\n\t\t\t// @ts-ignore ////\n\t\t\t!!window.MSStream &&\n\t\t\t// @ts-ignore ////\n\t\t\t!window.ActiveXObject &&\n\t\t\t'ActiveXObject' in window\n\t\t) {\n\t\t\trv = 11\n\t\t} else if (this.isIE10()) {\n\t\t\trv = 10\n\t\t} else if (this.isIE9()) {\n\t\t\trv = 9\n\t\t} else if (this.isIE()) {\n\t\t\trv = 8\n\t\t}\n\n\t\tif (rv === -1 || rv === 8) {\n\t\t\t// @ts-ignore ////\n\t\t\tif (navigator.appName === 'Microsoft Internet Explorer') {\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\tconst re = new RegExp('MSIE ([0-9]+[.0-9]*)')\n\t\t\t\tconst res = navigator.userAgent.match(re)\n\n\t\t\t\t// @ts-ignore ////\n\t\t\t\tif (Type.isArrayLike(res) && res.length > 0) {\n\t\t\t\t\t// @ts-ignore ////\n\t\t\t\t\trv = Number.parseFloat(res[1])\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// @ts-ignore ////\n\t\t\tif (navigator.appName === 'Netscape') {\n\t\t\t\t// Alternative check for IE 11\n\t\t\t\trv = 11\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\tconst re = new RegExp('Trident/.*rv:([0-9]+[.0-9]*)')\n\n\t\t\t\tif (re.exec(navigator.userAgent) != null) {\n\t\t\t\t\tconst res = navigator.userAgent.match(re)\n\n\t\t\t\t\t// @ts-ignore ////\n\t\t\t\t\tif (Type.isArrayLike(res) && res.length > 0) {\n\t\t\t\t\t\t// @ts-ignore ////\n\t\t\t\t\t\trv = Number.parseFloat(res[1])\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn rv\n\t}\n\n\tisIE11(): boolean {\n\t\treturn this.detectIEVersion() >= 11\n\t}\n\n\tisMac(): boolean {\n\t\treturn UA.includes('macintosh')\n\t}\n\n\tisWin(): boolean {\n\t\treturn UA.includes('windows')\n\t}\n\n\tisLinux(): boolean {\n\t\treturn UA.includes('linux') && !this.isAndroid()\n\t}\n\n\tisAndroid(): boolean {\n\t\treturn UA.includes('android')\n\t}\n\n\tisIPad(): boolean {\n\t\treturn UA.includes('ipad;') || (this.isMac() && this.isTouchDevice())\n\t}\n\n\tisIPhone(): boolean {\n\t\treturn UA.includes('iphone;')\n\t}\n\n\tisIOS(): boolean {\n\t\treturn this.isIPad() || this.isIPhone()\n\t}\n\n\tisMobile(): boolean {\n\t\treturn (\n\t\t\tthis.isIPhone() ||\n\t\t\tthis.isIPad() ||\n\t\t\tthis.isAndroid() ||\n\t\t\tUA.includes('mobile') ||\n\t\t\tUA.includes('touch')\n\t\t)\n\t}\n\n\tisRetina(): boolean {\n\t\treturn (window.devicePixelRatio && window.devicePixelRatio >= 2) === true\n\t}\n\n\tisTouchDevice(): boolean {\n\t\treturn (\n\t\t\t'ontouchstart' in window ||\n\t\t\tnavigator.maxTouchPoints > 0 ||\n\t\t\t// @ts-ignore ////\n\t\t\tnavigator.msMaxTouchPoints > 0\n\t\t)\n\t}\n\n\tisDoctype(target: any): boolean {\n\t\tconst doc = target || document\n\n\t\tif (doc.compatMode) {\n\t\t\treturn doc.compatMode === 'CSS1Compat'\n\t\t}\n\n\t\treturn doc.documentElement && doc.documentElement.clientHeight\n\t}\n\n\tisLocalStorageSupported(): boolean {\n\t\ttry {\n\t\t\tlocalStorage.setItem('test', 'test')\n\t\t\tlocalStorage.removeItem('test')\n\t\t\treturn true\n\t\t} catch {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tdetectAndroidVersion(): number {\n\t\t// eslint-disable-next-line\n\t\tconst re = new RegExp('Android ([0-9]+[.0-9]*)')\n\n\t\tif (re.exec(navigator.userAgent) != null) {\n\t\t\tconst res = navigator.userAgent.match(re)\n\n\t\t\t// @ts-ignore ////\n\t\t\tif (Type.isArrayLike(res) && res.length > 0) {\n\t\t\t\t// @ts-ignore ////\n\t\t\t\treturn Number.parseFloat(res[1])\n\t\t\t}\n\t\t}\n\n\t\treturn 0\n\t}\n}\n\nconst Browser = new BrowserManager()\n\nexport default Browser\n","import { LoggerBrowser } from '../logger/browser'\nimport { Result } from '../core/result'\nimport { AjaxResult } from '../core/http/ajax-result'\n\nexport type TypeHttp = {\n\tsetLogger(logger: LoggerBrowser): void\n\tgetLogger(): LoggerBrowser\n\n\tbatch(calls: any[] | object, isHaltOnError: boolean): Promise<Result>\n\n\tcall(method: string, params: object, start: number): Promise<AjaxResult>\n\n\tsetRestrictionManagerParams(params: TypeRestrictionManagerParams): void\n\n\tgetRestrictionManagerParams(): TypeRestrictionManagerParams\n\n\tsetLogTag(logTag?: string): void\n\tclearLogTag(): void\n}\n\nexport interface IRequestIdGenerator {\n\tgetRequestId(): string\n\tgetHeaderFieldName(): string\n\tgetQueryStringParameterName(): string\n\tgetQueryStringSdkParameterName(): string\n}\n\nexport type TypeRestrictionManagerParams = {\n\tsleep: number\n\tspeed: number\n\tamount: number\n}\n\nexport const RestrictionManagerParamsBase = {\n\tsleep: 1_000,\n\tspeed: 0.001,\n\tamount: 30,\n} as TypeRestrictionManagerParams\n\n/**\n * @todo Need test\n */\nexport const RestrictionManagerParamsForEnterprise = {\n\tsleep: 600,\n\tspeed: 0.01,\n\tamount: 30 * 5,\n} as TypeRestrictionManagerParams\n","/**\n * CRM Entity Types\n * @link https://dev.1c-bitrix.ru/rest_help/crm/constants.php\n */\nexport enum EnumCrmEntityType {\n\tundefined = 'UNDEFINED',\n\tlead = 'CRM_LEAD',\n\tdeal = 'CRM_DEAL',\n\tcontact = 'CRM_CONTACT',\n\tcompany = 'CRM_COMPANY',\n\toldInvoice = 'CRM_INVOICE',\n\tinvoice = 'CRM_SMART_INVOICE',\n\tquote = 'CRM_QUOTE',\n\trequisite = 'CRM_REQUISITE',\n}\n\nexport enum EnumCrmEntityTypeId {\n\tundefined = 0,\n\tlead = 1,\n\tdeal = 2,\n\tcontact = 3,\n\tcompany = 4,\n\toldInvoice = 5,\n\tinvoice = 31,\n\tquote = 7,\n\trequisite = 8,\n}\n","import { DateTime } from 'luxon'\n\nimport type { BoolString, GenderString } from './common'\n\nexport enum LoadDataType {\n\tApp = 'app',\n\tProfile = 'profile',\n\tCurrency = 'currency',\n\tAppOptions = 'appOptions',\n\tUserOptions = 'userOptions',\n}\n\nexport type TypeUser = {\n\treadonly isAdmin: boolean\n\n\treadonly id: null | number\n\treadonly lastName: null | string\n\treadonly name: null | string\n\n\treadonly gender: GenderString\n\n\treadonly photo: null | string\n\n\treadonly TimeZone: null | string\n\treadonly TimeZoneOffset: null | number\n}\n\nexport const EnumAppStatus = {\n\t// free ////\n\tFree: 'F',\n\n\t// demo version ////\n\tDemo: 'D',\n\n\t// trial version (limited time) ////\n\tTrial: 'T',\n\n\t// paid application ////\n\tPaid: 'P',\n\n\t// local application ////\n\tLocal: 'L',\n\n\t// subscription application ////\n\tSubscription: 'S',\n} as const\n\nexport const StatusDescriptions: Record<\n\t(typeof EnumAppStatus)[keyof typeof EnumAppStatus],\n\tstring\n> = {\n\t[EnumAppStatus.Free]: 'Free',\n\t[EnumAppStatus.Demo]: 'Demo',\n\t[EnumAppStatus.Trial]: 'Trial',\n\t[EnumAppStatus.Paid]: 'Paid',\n\t[EnumAppStatus.Local]: 'Local',\n\t[EnumAppStatus.Subscription]: 'Subscription',\n}\n\nexport type TypeEnumAppStatus = keyof typeof EnumAppStatus\n\n/**\n * @link https://dev.1c-bitrix.ru/rest_help/general/app_info.php\n */\nexport type TypeApp = {\n\t/**\n\t * Local application identifier on the portal\n\t */\n\treadonly id: number\n\n\t/**\n\t * application code\n\t */\n\treadonly code: string\n\n\t/**\n\t * installed version of the application\n\t */\n\treadonly version: number\n\n\t/**\n\t * application status\n\t */\n\treadonly status: TypeEnumAppStatus\n\n\t/**\n\t * application installed flag\n\t */\n\treadonly isInstalled: boolean\n}\n\n/**\n * @link https://dev.1c-bitrix.ru/rest_help/general/app_info.php\n */\nexport type TypePayment = {\n\t/**\n\t * flag indicating whether the paid period or trial period has expired\n\t */\n\treadonly isExpired: boolean\n\n\t/**\n\t * number of days remaining until the end of the paid period or trial period\n\t */\n\treadonly days: number\n}\n\n/**\n * @link https://dev.1c-bitrix.ru/rest_help/general/app_info.php\n */\nexport type TypeLicense = {\n\t/**\n\t * language code designation\n\t */\n\treadonly languageId: null | string\n\t/**\n\t * tariff designation with indication of the region as a prefix\n\t */\n\treadonly license: null | string\n\n\t/**\n\t * internal tariff designation without indication of region\n\t */\n\treadonly licenseType: null | string\n\n\t/**\n\t * past meaning of license\n\t */\n\treadonly licensePrevious: null | string\n\n\t/**\n\t * Tariff designation without specifying the region.\n\t */\n\treadonly licenseFamily: null | string\n\n\t/**\n\t * flag indicating whether it is a box (true) or a cloud (false)\n\t */\n\treadonly isSelfHosted: boolean\n}\n\nexport const TypeSpecificUrl = {\n\tMainSettings: 'MainSettings',\n\tUfList: 'UfList',\n\tUfPage: 'UfPage',\n} as const\n\nexport type TypeB24Form = {\n\treadonly app_code: string\n\treadonly app_status: string\n\n\treadonly payment_expired: BoolString\n\treadonly days: number\n\n\t/**\n\t * B24 tariff plan identifier (if cloud)\n\t */\n\treadonly b24_plan: string\n\n\treadonly c_name: string\n\treadonly c_last_name: string\n\n\treadonly hostname: string\n}\n\nexport type CurrencyFormat = {\n\tdecimals: number\n\tdecPoint: string\n\tformatString: string\n\tfullName: string\n\tisHideZero: boolean\n\tthousandsSep?: string\n\tthousandsVariant?: 'N' | 'D' | 'C' | 'S' | 'B' | 'OWN' | string\n}\n\nexport type Currency = {\n\tamount: number\n\tamountCnt: number\n\tisBase: boolean\n\tcurrencyCode: string\n\tdateUpdate: DateTime\n\tdecimals: number\n\tdecPoint: string\n\tformatString: string\n\tfullName: string\n\tlid: string\n\tsort: number\n\tthousandsSep?: string\n\tlang: Record<string, CurrencyFormat>\n}\n\nexport enum TypeOption {\n\tNotSet = 'notSet',\n\tJsonArray = 'jsonArray',\n\tJsonObject = 'jsonObject',\n\tFloatVal = 'float',\n\tIntegerVal = 'integer',\n\tBoolYN = 'boolYN',\n\tStringVal = 'string',\n}\n","import { LoggerBrowser } from '../logger/browser'\nimport type { TypeB24 } from './b24'\nimport type { ISODate, NumberString } from './common'\n\nexport type TypePullMessage = {\n\tcommand: string\n\tparams: Record<string, any>\n\textra: Record<string, any>\n}\n\nexport type TypePullClientMessageBody = {\n\tmodule_id: string\n\tcommand: string\n\tparams: any\n\textra?: {\n\t\trevision_web?: number\n\t\tsender?: {\n\t\t\ttype: SenderType\n\t\t}\n\t\tserver_time_unix?: number\n\t\tserver_time_ago?: number\n\t}\n}\n\nexport enum ConnectionType {\n\tUndefined = 'undefined',\n\tWebSocket = 'webSocket',\n\tLongPolling = 'longPolling',\n}\n\nexport type TypeConnector = {\n\tsetLogger(logger: LoggerBrowser): void\n\tdestroy(): void\n\tconnect(): void\n\tdisconnect(code: number, reason: string): void\n\tsend(buffer: ArrayBuffer | string): boolean\n\tconnected: boolean\n\tconnectionPath: string\n}\n\nexport type ConnectorParent = {\n\tsession: TypePullClientSession\n\tgetConnectionPath(connectionType: ConnectionType): string\n\tgetPublicationPath(): string\n\tsetLastMessageId(lastMessageId: string): void\n\tisProtobufSupported(): boolean\n\tisJsonRpc(): boolean\n}\n\nexport type ConnectorCallbacks = {\n\tonOpen: () => void\n\tonDisconnect: (response: { code: number; reason: string }) => void\n\tonError: (error: Error) => void\n\tonMessage: (response: string | ArrayBuffer) => void\n}\n\nexport type ConnectorConfig = {\n\tparent: ConnectorParent\n\tonOpen?: () => void\n\tonDisconnect?: (response: { code: number; reason: string }) => void\n\tonError?: (error: Error) => void\n\tonMessage?: (response: string | ArrayBuffer) => void\n}\n\nexport type StorageManagerParams = {\n\tuserId?: number\n\tsiteId?: string\n}\n\nexport type TypeStorageManager = {\n\tsetLogger(logger: LoggerBrowser): void\n\tgetLogger(): LoggerBrowser\n\n\tset(name: string, value: any): void\n\tget(name: string, defaultValue: any): any\n\tremove(name: string): void\n\tcompareKey(eventKey: string, userKey: string): boolean\n}\n\nexport enum LsKeys {\n\tPullConfig = 'bx-pull-config',\n\tWebsocketBlocked = 'bx-pull-websocket-blocked',\n\tLongPollingBlocked = 'bx-pull-longpolling-blocked',\n\tLoggingEnabled = 'bx-pull-logging-enabled',\n}\n\nexport type SharedConfigCallbacks = {\n\tonWebSocketBlockChanged: (response: { isWebSocketBlocked: boolean }) => void\n}\n\nexport type SharedConfigParams = {\n\tstorage?: TypeStorageManager\n\tonWebSocketBlockChanged?: (response: { isWebSocketBlocked: boolean }) => void\n}\n\nexport enum PullStatus {\n\tOnline = 'online',\n\tOffline = 'offline',\n\tConnecting = 'connect',\n}\n\nexport enum SenderType {\n\tUnknown = 0,\n\tClient = 1,\n\tBackend = 2,\n}\n\nexport enum SubscriptionType {\n\tServer = 'server',\n\tClient = 'client',\n\tOnline = 'online',\n\tStatus = 'status',\n\tRevision = 'revision',\n}\n\nexport type TypeSubscriptionOptions = {\n\t/**\n\t * Subscription type\n\t */\n\ttype?: SubscriptionType\n\n\t/**\n\t * Name of the module\n\t */\n\tmoduleId?: string\n\n\t/**\n\t * Name of the command\n\t */\n\tcommand?: null | string\n\n\t/**\n\t * Function, that will be called for incoming messages\n\t */\n\t// eslint-disable-next-line\n\tcallback: Function\n}\n\nexport interface UserStatusCallback {\n\t(params: { userId: number; isOnline: boolean }): void\n}\n\nexport interface CommandHandlerFunctionV1 {\n\t(\n\t\tdata: Record<string, any>,\n\t\tinfo?: {\n\t\t\ttype: SubscriptionType\n\t\t\tmoduleId?: string\n\t\t}\n\t): void\n}\n\nexport interface CommandHandlerFunctionV2 {\n\t(\n\t\tparams: Record<string, any>,\n\t\textra: Record<string, any>,\n\t\tcommand: string,\n\t\tinfo?: {\n\t\t\ttype: SubscriptionType\n\t\t\tmoduleId: string\n\t\t}\n\t): void\n}\n\nexport interface TypeSubscriptionCommandHandler {\n\tgetModuleId: () => string\n\tgetSubscriptionType?: () => SubscriptionType\n\tgetMap?: () => Record<string, CommandHandlerFunctionV2>\n\t[key: string]: CommandHandlerFunctionV2 | undefined\n}\n\nexport type TypePullClientEmitConfig = {\n\ttype: SubscriptionType\n\tmoduleId?: string\n\tdata?: Record<string, any>\n}\n\nexport enum CloseReasons {\n\tNORMAL_CLOSURE = 1000,\n\tSERVER_DIE = 1001,\n\tCONFIG_REPLACED = 3000,\n\tCHANNEL_EXPIRED = 3001,\n\tSERVER_RESTARTED = 3002,\n\tCONFIG_EXPIRED = 3003,\n\tMANUAL = 3004,\n\tSTUCK = 3005,\n\tWRONG_CHANNEL_ID = 4010,\n}\n\nexport enum SystemCommands {\n\tCHANNEL_EXPIRE = 'CHANNEL_EXPIRE',\n\tCONFIG_EXPIRE = 'CONFIG_EXPIRE',\n\tSERVER_RESTART = 'SERVER_RESTART',\n}\n\nexport enum ServerMode {\n\tShared = 'shared',\n\tPersonal = 'personal',\n}\n\nexport type RpcError = {\n\tcode: number\n\tmessage: string\n}\n\nexport const ListRpcError = {\n\tParse: { code: -32700, message: 'Parse error' } as RpcError,\n\tInvalidRequest: { code: -32600, message: 'Invalid Request' } as RpcError,\n\tMethodNotFound: { code: -32601, message: 'Method not found' } as RpcError,\n\tInvalidParams: { code: -32602, message: 'Invalid params' } as RpcError,\n\tInternal: { code: -32603, message: 'Internal error' } as RpcError,\n} as const\n\nexport type JsonRpcRequest = {\n\tmethod: string\n\tparams: any\n\tid: number\n}\n\nexport type RpcCommand = {\n\tjsonrpc: string\n\tmethod: string\n\tparams: any\n\tid: number\n}\n\nexport type RpcRequest = RpcCommand & {}\n\nexport type RpcCommandResult = {\n\tjsonrpc?: string\n\tid?: number\n\t/**\n\t * @fix this TypeRpcResponseAwaiters.resolve(response)\n\t */\n\tresult?: any\n\terror?: RpcError\n}\n\nexport enum RpcMethod {\n\tPublish = 'publish',\n\tGetUsersLastSeen = 'getUsersLastSeen',\n\tPing = 'ping',\n\tListChannels = 'listChannels',\n\tSubscribeStatusChange = 'subscribeStatusChange',\n\tUnsubscribeStatusChange = 'unsubscribeStatusChange',\n}\n\nexport type TypeRpcResponseAwaiters = {\n\t/**\n\t * @fix this RpcCommandResult.result\n\t */\n\tresolve: (response: any) => void\n\treject: (error: string | RpcError) => void\n\ttimeout: number\n}\n\nexport type TypeJsonRpcConfig = {\n\tconnector: TypeConnector\n\thandlers: Record<string, (params: any) => RpcCommandResult>\n}\n\nexport type TypePublicIdDescriptor = {\n\tid?: string\n\tuser_id?: NumberString\n\tpublic_id?: string\n\tsignature?: string\n\tstart: ISODate\n\tend: ISODate\n\ttype?: string\n}\n\nexport type TypeChanel = {\n\tuserId: number\n\tpublicId: string\n\tsignature: string\n\tstart: Date\n\tend: Date\n}\n\nexport type TypeChannelManagerParams = {\n\tb24: TypeB24\n\tgetPublicListMethod: string\n}\n\nexport type TypePullClientSession = {\n\tmid: null | string\n\ttag: null | string\n\ttime: null | number\n\thistory: any\n\tlastMessageIds: string[]\n\tmessageCount: number\n}\n\nexport type TypeSessionEvent = {\n\tmid: string\n\ttag?: string\n\ttime?: number\n\ttext: Record<string, any> | TypePullClientMessageBody\n}\n\nexport type TypePullClientParams = {\n\tb24: TypeB24\n\tskipCheckRevision?: boolean\n\trestApplication?: string\n\tsiteId?: string\n\n\tguestMode?: boolean\n\tguestUserId?: number\n\n\tuserId?: number\n\n\tserverEnabled?: boolean\n\tconfigGetMethod?: string\n\tgetPublicListMethod?: string\n\tskipStorageInit?: boolean\n\tconfigTimestamp?: number\n}\n\nexport type TypePullClientConfig = {\n\t/**\n\t * @fix this\n\t */\n\tclientId: null\n\tapi: {\n\t\trevision_mobile: number\n\t\trevision_web: number\n\t}\n\tchannels: {\n\t\tprivate?: TypePublicIdDescriptor\n\t\tshared?: TypePublicIdDescriptor\n\t}\n\tpublicChannels: Record<string, TypePublicIdDescriptor>\n\tserver: {\n\t\ttimeShift: number\n\t\tconfig_timestamp: number\n\t\tlong_polling: string\n\t\tlong_pooling_secure: string\n\t\tmode: string\n\t\tpublish: string\n\t\tpublish_enabled: boolean\n\t\tpublish_secure: string\n\t\tserver_enabled: boolean\n\t\tversion: number\n\t\twebsocket: string\n\t\twebsocket_enabled: boolean\n\t\twebsocket_secure: string\n\t}\n\tjwt: null | string\n\texp: number\n}\n\nexport type TypePullClientMessageBatch = {\n\tuserList?: number[]\n\tchannelList?: (\n\t\t| string\n\t\t| {\n\t\t\t\tpublicId: string\n\t\t\t\tsignature: string\n\t\t }\n\t)[]\n\tbody: TypePullClientMessageBody\n\texpiry?: number\n}\n","/**\n * Interface defining the structure and methods of a Result object.\n */\nexport interface IResult {\n\t/**\n\t * Indicates whether the operation resulted in success (no errors).\n\t */\n\tisSuccess: boolean\n\n\t/**\n\t * Sets the data associated with the result.\n\t *\n\t * @param data The data to be stored in the result.\n\t * @returns The current Result object for chaining methods.\n\t */\n\tsetData: (data: any) => IResult\n\n\t/**\n\t * Retrieves the data associated with the result.\n\t *\n\t * @returns The data stored in the result, if any.\n\t */\n\tgetData: () => any\n\n\t/**\n\t * Adds an error message or Error object to the result.\n\t *\n\t * @param error The error message or Error object to be added.\n\t * @returns The current Result object for chaining methods.\n\t */\n\taddError: (error: Error | string) => IResult\n\n\t/**\n\t * Adds multiple errors to the result in a single call.\n\t *\n\t * @param errors An array of errors or strings that will be converted to errors.\n\t * @returns The current Result object for chaining methods.\n\t */\n\taddErrors: (errors: (Error | string)[]) => IResult\n\n\t/**\n\t * Retrieves an iterator for the errors collected in the result.\n\t *\n\t * @returns An iterator over the stored Error objects.\n\t */\n\tgetErrors: () => IterableIterator<Error>\n\n\t/**\n\t * Retrieves an array of error messages from the collected errors.\n\t *\n\t * @returns An array of strings representing the error messages.\n\t */\n\tgetErrorMessages: () => string[]\n\n\t/**\n\t * Converts the Result object to a string.\n\t *\n\t * @returns {string} Returns a string representation of the result operation\n\t */\n\ttoString: () => string\n}\n\n/**\n * A class representing an operation result with success/failure status, data, and errors.\n * Similar to \\Bitrix\\Main\\Result from Bitrix Framework.\n * @link https://dev.1c-bitrix.ru/api_d7/bitrix/main/result/index.php\n */\nexport class Result implements IResult {\n\tprivate _errorCollection: Set<Error>\n\tprotected _data: any\n\n\tconstructor() {\n\t\tthis._errorCollection = new Set()\n\t\tthis._data = null\n\t}\n\n\t/**\n\t * Getter for the `isSuccess` property.\n\t * Checks if the `_errorCollection` is empty to determine success.\n\t *\n\t * @returns Whether the operation resulted in success (no errors).\n\t */\n\tget isSuccess(): boolean {\n\t\treturn this._errorCollection.size === 0\n\t}\n\n\t/**\n\t * Sets the data associated with the result.\n\t *\n\t * @param data The data to be stored in the result.\n\t * @returns The current Result object for chaining methods.\n\t */\n\tsetData(data: any): Result {\n\t\tthis._data = data\n\n\t\treturn this\n\t}\n\n\t/**\n\t * Retrieves the data associated with the result.\n\t *\n\t * @returns The data stored in the result, if any.\n\t */\n\tgetData(): any {\n\t\treturn this._data\n\t}\n\n\t/**\n\t * Adds an error message or Error object to the result.\n\t *\n\t * @param error The error message or Error object to be added.\n\t * @returns The current Result object for chaining methods.\n\t */\n\taddError(error: Error | string): Result {\n\t\tif (error instanceof Error) {\n\t\t\tthis._errorCollection.add(error)\n\t\t} else {\n\t\t\tthis._errorCollection.add(new Error(error.toString()))\n\t\t}\n\n\t\treturn this\n\t}\n\n\t/**\n\t * Adds multiple errors to the result in a single call.\n\t *\n\t * @param errors An array of errors or strings that will be converted to errors.\n\t * @returns The current Result object for chaining methods.\n\t */\n\taddErrors(errors: (Error | string)[]): Result {\n\t\tfor (const error of errors) {\n\t\t\tif (error instanceof Error) {\n\t\t\t\tthis._errorCollection.add(error)\n\t\t\t} else {\n\t\t\t\tthis._errorCollection.add(new Error(error.toString()))\n\t\t\t}\n\t\t}\n\n\t\treturn this\n\t}\n\n\t/**\n\t * Retrieves an iterator for the errors collected in the result.\n\t * @returns An iterator over the stored Error objects.\n\t */\n\tgetErrors(): IterableIterator<Error> {\n\t\treturn this._errorCollection.values()\n\t}\n\n\t/**\n\t * Retrieves an array of error messages from the collected errors.\n\t *\n\t * @returns An array of strings representing the error messages. Each string\n\t * contains the message of a corresponding error object.\n\t */\n\tgetErrorMessages(): string[] {\n\t\treturn [...this.getErrors()].map((error: Error) => error.message)\n\t}\n\n\t/**\n\t * Converts the Result object to a string.\n\t *\n\t * @returns {string} Returns a string representation of the result operation\n\t */\n\ttoString(): string {\n\t\tif (this.isSuccess) {\n\t\t\treturn `Result (success): data: ${JSON.stringify(this._data)}`\n\t\t}\n\n\t\treturn `Result (failure): errors: ${this.getErrorMessages().join(', ')}`\n\t}\n}\n","export type AnswerError = {\n\terror: string\n\terrorDescription: string\n}\n\nexport type AjaxErrorParams = {\n\tstatus: number\n\tanswerError: AnswerError\n\tcause?: Error\n}\n\n/**\n * Error requesting RestApi\n */\nexport class AjaxError extends Error {\n\toverride cause: null | Error\n\tprivate _status: number\n\tprivate _answerError: AnswerError\n\n\tconstructor(params: AjaxErrorParams) {\n\t\tconst message = `${params.answerError.error}${\n\t\t\tparams.answerError.errorDescription\n\t\t\t\t? ': ' + params.answerError.errorDescription\n\t\t\t\t: ''\n\t\t}`\n\n\t\tsuper(message)\n\t\tthis.cause = params.cause || null\n\t\tthis.name = this.constructor.name\n\n\t\tthis._status = params.status\n\t\tthis._answerError = params.answerError\n\t}\n\n\tget answerError(): AnswerError {\n\t\treturn this._answerError\n\t}\n\n\tget status(): number {\n\t\treturn this._status\n\t}\n\n\tset status(status: number) {\n\t\tthis._status = status\n\t}\n\n\toverride toString(): string {\n\t\treturn `${this.answerError.error}${\n\t\t\tthis.answerError.errorDescription\n\t\t\t\t? ': ' + this.answerError.errorDescription\n\t\t\t\t: ''\n\t\t} (${this.status})`\n\t}\n}\n","import Type from '../../tools/type'\nimport Text from '../../tools/text'\nimport { Result, type IResult } from '../result'\nimport { AjaxError } from './ajax-error'\nimport type { NumberString } from '../../types/common'\nimport type { GetPayload, Payload } from '../../types/payloads'\nimport type { TypeHttp } from '../../types/http'\n\nexport type AjaxQuery = {\n\tmethod: string\n\tparams: object\n\tstart: number\n}\n\nexport type AjaxResultParams = {\n\terror?: string | { error: string; error_description: string }\n\terror_description?: string\n\tresult: any\n\tnext?: NumberString\n\ttotal?: NumberString\n}\n\n/**\n * Result of request to Rest Api\n */\nexport class AjaxResult extends Result implements IResult {\n\tprivate readonly _status: number\n\tprivate readonly _query: AjaxQuery\n\tprotected override _data: AjaxResultParams\n\n\tconstructor(answer: AjaxResultParams, query: AjaxQuery, status: number) {\n\t\tsuper()\n\n\t\tthis._data = answer\n\t\tthis._query = structuredClone(query)\n\t\tthis._status = status\n\n\t\tif (typeof this._data.error !== 'undefined') {\n\t\t\tconst error =\n\t\t\t\ttypeof this._data.error === 'string' ? this._data : this._data.error\n\n\t\t\tthis.addError(\n\t\t\t\tnew AjaxError({\n\t\t\t\t\tstatus: this._status,\n\t\t\t\t\tanswerError: {\n\t\t\t\t\t\terror: (error.error as string) || '',\n\t\t\t\t\t\terrorDescription: error.error_description || '',\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\t}\n\n\t// @ts-ignore\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\toverride setData(data: any): Result {\n\t\tthrow new Error('AjaxResult not support setData()')\n\t}\n\n\toverride getData(): Payload<unknown> {\n\t\treturn this._data as GetPayload<unknown>\n\t}\n\n\tisMore(): boolean {\n\t\treturn Type.isNumber(this._data?.next as any)\n\t}\n\n\tgetTotal(): number {\n\t\treturn Text.toInteger(this._data?.total as any)\n\t}\n\n\tgetStatus(): number {\n\t\treturn this._status\n\t}\n\n\tgetQuery(): AjaxQuery {\n\t\treturn this._query\n\t}\n\n\tasync getNext(http: TypeHttp): Promise<false | AjaxResult> {\n\t\tif (this.isMore() && this.isSuccess) {\n\t\t\tthis._query.start = Number.parseInt(this._data?.next as any)\n\n\t\t\treturn http.call(\n\t\t\t\tthis._query.method,\n\t\t\t\tthis._query.params,\n\t\t\t\tthis._query.start\n\t\t\t)\n\t\t}\n\n\t\treturn Promise.resolve(false)\n\t}\n}\n","import { LoggerBrowser, LoggerType } from '../../logger/browser'\nimport {\n\tRestrictionManagerParamsBase,\n\ttype TypeRestrictionManagerParams,\n} from '../../types/http'\n\n/**\n * @link https://apidocs.bitrix24.com/limits.html\n *\n * It is important to know that the intensity is tracked separately for each Bitrix24 account.\n * In other words, if your application uses REST too intensively on one account and hits the limits, it will not affect the application's operation on another account.\n * This means that users on different accounts can use your solutions with varying intensity, allowing you to make the application logic quite flexible.\n *\n * On the other hand, Bitrix24 only considers the IP address from which the REST request is made.\n * In other words, if your server hosts several applications that all work with the same Bitrix24, the request intensity limit will be shared among all applications.\n * Keep this feature in mind when designing.\n */\nexport default class RestrictionManager {\n\t#params: TypeRestrictionManagerParams\n\t#lastDecrement: number\n\t#currentAmount: number\n\n\tprivate _logger: null | LoggerBrowser = null\n\n\tconstructor() {\n\t\tthis.#params = RestrictionManagerParamsBase\n\n\t\tthis.#currentAmount = 0\n\t\tthis.#lastDecrement = 0\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t}\n\n\tgetLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\n\tget params(): TypeRestrictionManagerParams {\n\t\treturn { ...this.#params }\n\t}\n\n\tset params(params: TypeRestrictionManagerParams) {\n\t\tthis.#params = params\n\n\t\tthis.getLogger().log(`new restriction manager params`, params)\n\t}\n\n\tcheck(hash: string = ''): Promise<null> {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.#decrementStorage()\n\n\t\t\tif (this.#checkStorage()) {\n\t\t\t\tthis.getLogger().log(\n\t\t\t\t\t`>> no sleep >>> ${hash}`,\n\t\t\t\t\tthis.#getStorageStatus()\n\t\t\t\t)\n\t\t\t\tthis.#incrementStorage()\n\n\t\t\t\treturn resolve(null)\n\t\t\t} else {\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\tconst sleep = (callback: Function) => {\n\t\t\t\t\tthis.getLogger().info(\n\t\t\t\t\t\t`>> go sleep >>> ${hash}`,\n\t\t\t\t\t\tthis.#getStorageStatus()\n\t\t\t\t\t)\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}, this.#params.sleep)\n\t\t\t\t}\n\n\t\t\t\tconst wait = () => {\n\t\t\t\t\tthis.#decrementStorage()\n\t\t\t\t\tif (this.#checkStorage()) {\n\t\t\t\t\t\tthis.getLogger().info(\n\t\t\t\t\t\t\t`<< stop sleep <<< ${hash}`,\n\t\t\t\t\t\t\tthis.#getStorageStatus()\n\t\t\t\t\t\t)\n\t\t\t\t\t\tthis.#incrementStorage()\n\t\t\t\t\t\treturn resolve(null)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsleep(wait)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsleep(wait)\n\t\t\t}\n\t\t})\n\t}\n\n\t#getStorageStatus() {\n\t\treturn `${this.#currentAmount.toFixed(4)} from ${this.#params.amount}`\n\t}\n\n\t#decrementStorage(): void {\n\t\tif (this.#lastDecrement > 0) {\n\t\t\tthis.#currentAmount -=\n\t\t\t\t(Date.now() - this.#lastDecrement) * this.#params.speed\n\n\t\t\tif (this.#currentAmount < 0) {\n\t\t\t\tthis.#currentAmount = 0\n\t\t\t}\n\t\t}\n\n\t\tthis.#lastDecrement = Date.now()\n\t}\n\n\t#incrementStorage(): void {\n\t\tthis.#currentAmount++\n\t}\n\n\t#checkStorage(): boolean {\n\t\treturn this.#currentAmount < this.#params.amount\n\t}\n}\n","import { type IRequestIdGenerator } from '../../types/http'\nimport Text from '../../tools/text'\n\nconst DEFAULT_REQUEST_ID_HEADER_FIELD_NAME = 'X-Request-ID'\nconst DEFAULT_QUERY_STRING_PARAMETER_NAME = 'bx24_request_id'\nconst DEFAULT_QUERY_STRING_SDK_PARAMETER_NAME = 'bx24_sdk_ver'\n\nexport default class DefaultRequestIdGenerator implements IRequestIdGenerator {\n\tpublic getQueryStringParameterName(): string {\n\t\treturn DEFAULT_QUERY_STRING_PARAMETER_NAME\n\t}\n\n\tpublic getQueryStringSdkParameterName(): string {\n\t\treturn DEFAULT_QUERY_STRING_SDK_PARAMETER_NAME\n\t}\n\n\tprivate generate(): string {\n\t\treturn Text.getUuidRfc4122()\n\t}\n\n\tpublic getRequestId(): string {\n\t\treturn this.generate()\n\t}\n\n\tpublic getHeaderFieldName(): string {\n\t\treturn DEFAULT_REQUEST_ID_HEADER_FIELD_NAME\n\t}\n}\n","import { LoggerBrowser, LoggerType } from '../../logger/browser'\nimport type { TypeHttp, TypeRestrictionManagerParams } from '../../types/http'\nimport { default as RestrictionManager } from './restriction-manager'\nimport { default as RequestIdGenerator } from './request-id-generator'\nimport { Result } from '../result'\nimport { AjaxError, type AjaxErrorParams } from './ajax-error'\nimport { AjaxResult } from './ajax-result'\nimport Type from '../../tools/type'\nimport type { AjaxQuery, AjaxResultParams } from './ajax-result'\nimport type {\n\tAuthActions,\n\tAuthData,\n\tTypeDescriptionError,\n} from '../../types/auth'\nimport type { BatchPayload } from '../../types/payloads'\n\nimport axios, { type AxiosInstance, AxiosError } from 'axios'\nimport qs from 'qs'\n\ntype AjaxResponse = {\n\tstatus: number\n\tpayload: AjaxResultParams\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst BITRIX24_OAUTH_SERVER_URL = 'https://oauth.bitrix.info'\n\n/**\n * Class for working with RestApi requests via http\n *\n * @link https://dev.1c-bitrix.ru/rest_help/\n */\nexport default class Http implements TypeHttp {\n\t#clientAxios: AxiosInstance\n\t#authActions: AuthActions\n\t#restrictionManager: RestrictionManager\n\t#requestIdGenerator: RequestIdGenerator\n\tprivate _logger: null | LoggerBrowser = null\n\n\t#logTag: string = ''\n\n\tconstructor(\n\t\tbaseURL: string,\n\t\tauthActions: AuthActions,\n\t\toptions?: null | object\n\t) {\n\t\t/**\n\t\t * @memo can be added on the server side\n\t\t */\n\t\t/*/\n\t\t\theaders: {\n\t\t\t\t'User-Agent': '__SDK_USER_AGENT__-v-__SDK_VERSION__',\n\t\t\t\t'X-BITRIX24-JS-SDK-VERSION': '__SDK_VERSION__',\n\t\t\t},\n\t\t//*/\n\t\tthis.#clientAxios = axios.create({\n\t\t\tbaseURL: baseURL,\n\t\t\t...options,\n\t\t})\n\n\t\tthis.#authActions = authActions\n\t\tthis.#restrictionManager = new RestrictionManager()\n\t\tthis.#requestIdGenerator = new RequestIdGenerator()\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t\tthis.#restrictionManager.setLogger(this.getLogger())\n\t}\n\n\tgetLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\n\tsetRestrictionManagerParams(params: TypeRestrictionManagerParams): void {\n\t\tthis.#restrictionManager.params = params\n\t}\n\n\tgetRestrictionManagerParams(): TypeRestrictionManagerParams {\n\t\treturn this.#restrictionManager.params\n\t}\n\n\tsetLogTag(logTag: string): void {\n\t\tthis.#logTag = logTag\n\t}\n\n\tclearLogTag(): void {\n\t\tthis.#logTag = ''\n\t}\n\n\tasync batch(\n\t\tcalls: any[] | object,\n\t\tisHaltOnError: boolean = true\n\t): Promise<Result> {\n\t\tconst isArrayMode = Array.isArray(calls)\n\t\tconst cmd: any = isArrayMode ? [] : {}\n\t\tlet cnt = 0\n\n\t\tconst processRow = (row: any, index: string | number) => {\n\t\t\tlet method = null\n\t\t\tlet params = null\n\n\t\t\tif (Array.isArray(row)) {\n\t\t\t\tmethod = row[0]\n\t\t\t\tparams = row[1]\n\t\t\t} else if (row.method) {\n\t\t\t\tmethod = row.method\n\t\t\t\tparams = row.params\n\t\t\t}\n\n\t\t\tif (method) {\n\t\t\t\tcnt++\n\n\t\t\t\tconst data = method + '?' + qs.stringify(params)\n\t\t\t\tif (isArrayMode || Array.isArray(cmd)) {\n\t\t\t\t\tcmd.push(data)\n\t\t\t\t} else {\n\t\t\t\t\tcmd[index] = data\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isArrayMode) {\n\t\t\tfor (const [index, item] of calls.entries()) processRow(item, index)\n\t\t} else {\n\t\t\tfor (const [index, item] of Object.entries(calls)) processRow(item, index)\n\t\t}\n\n\t\tif (cnt < 1) {\n\t\t\treturn Promise.resolve(new Result())\n\t\t}\n\n\t\treturn this.call('batch', {\n\t\t\thalt: isHaltOnError ? 1 : 0,\n\t\t\tcmd: cmd,\n\t\t}).then((response: AjaxResult) => {\n\t\t\tconst responseResult = (response.getData() as BatchPayload<unknown>)\n\t\t\t\t.result\n\t\t\tconst results: any = isArrayMode ? [] : {}\n\n\t\t\tconst processResponse = (row: string, index: string | number) => {\n\t\t\t\tif (\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\ttypeof responseResult.result[index] !== 'undefined' ||\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\ttypeof responseResult.result_error[index] !== 'undefined'\n\t\t\t\t) {\n\t\t\t\t\tconst q = row.split('?')\n\n\t\t\t\t\tconst data = new AjaxResult(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tresult: Type.isUndefined(responseResult.result[index])\n\t\t\t\t\t\t\t\t? // @ts-ignore\n\t\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t\t: // @ts-ignore\n\t\t\t\t\t\t\t\t\tresponseResult.result[index],\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\terror: responseResult?.result_error[index] || undefined,\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\ttotal: responseResult.result_total[index],\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tnext: responseResult.result_next[index],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: q[0] || '',\n\t\t\t\t\t\t\tparams: qs.parse(q[1] || ''),\n\t\t\t\t\t\t\tstart: 0,\n\t\t\t\t\t\t} as AjaxQuery,\n\t\t\t\t\t\tresponse.getStatus()\n\t\t\t\t\t)\n\n\t\t\t\t\tif (isArrayMode || Array.isArray(results)) {\n\t\t\t\t\t\tresults.push(data)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresults[index] = data\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (Array.isArray(cmd)) {\n\t\t\t\tfor (const [index, item] of cmd.entries()) processResponse(item, index)\n\t\t\t} else {\n\t\t\t\tfor (const [index, item] of Object.entries(cmd))\n\t\t\t\t\tprocessResponse(item as string, index)\n\t\t\t}\n\n\t\t\tlet dataResult\n\n\t\t\tconst initError = (result: AjaxResult): AjaxError => {\n\t\t\t\treturn new AjaxError({\n\t\t\t\t\tstatus: 0,\n\t\t\t\t\tanswerError: {\n\t\t\t\t\t\terror: result.getErrorMessages().join('; '),\n\t\t\t\t\t\terrorDescription: `batch ${result.getQuery().method}: ${qs.stringify(result.getQuery().params, { encode: false })}`,\n\t\t\t\t\t},\n\t\t\t\t\tcause: result.getErrors().next().value,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst result = new Result()\n\n\t\t\tif (isArrayMode || Array.isArray(results)) {\n\t\t\t\tdataResult = []\n\n\t\t\t\tfor (const data of results as AjaxResult[]) {\n\t\t\t\t\tif (data.getStatus() !== 200 || !data.isSuccess) {\n\t\t\t\t\t\tconst error = initError(data)\n\n\t\t\t\t\t\tif (!isHaltOnError && !data.isSuccess) {\n\t\t\t\t\t\t\tresult.addError(error)\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn Promise.reject(error)\n\t\t\t\t\t}\n\n\t\t\t\t\tdataResult.push(data.getData().result)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataResult = {}\n\n\t\t\t\tfor (const key of Object.keys(results)) {\n\t\t\t\t\tconst data: AjaxResult = results[key]\n\n\t\t\t\t\tif (data.getStatus() !== 200 || !data.isSuccess) {\n\t\t\t\t\t\tconst error = initError(data)\n\n\t\t\t\t\t\tif (!isHaltOnError && !data.isSuccess) {\n\t\t\t\t\t\t\tresult.addError(error)\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn Promise.reject(error)\n\t\t\t\t\t}\n\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tdataResult[key] = data.getData().result\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresult.setData(dataResult)\n\n\t\t\treturn Promise.resolve(result)\n\t\t})\n\t}\n\n\t/**\n\t * Calling the RestApi function\n\t *\n\t * If we get a problem with authorization, we make one attempt to update the access token\n\t *\n\t * @param method\n\t * @param params\n\t * @param start\n\t */\n\tasync call(\n\t\tmethod: string,\n\t\tparams: object,\n\t\tstart: number = 0\n\t): Promise<AjaxResult> {\n\t\tlet authData = this.#authActions.getAuthData()\n\t\tif (authData === false) {\n\t\t\tauthData = await this.#authActions.refreshAuth()\n\t\t}\n\n\t\tawait this.#restrictionManager.check()\n\n\t\treturn this.#clientAxios\n\t\t\t.post(\n\t\t\t\tthis.#prepareMethod(method),\n\t\t\t\tthis.#prepareParams(authData, params, start)\n\t\t\t)\n\t\t\t.then(\n\t\t\t\t(response: {\n\t\t\t\t\tdata: AjaxResultParams\n\t\t\t\t\tstatus: any\n\t\t\t\t}): Promise<AjaxResponse> => {\n\t\t\t\t\tconst payload = response.data as AjaxResultParams\n\t\t\t\t\treturn Promise.resolve({\n\t\t\t\t\t\tstatus: response.status,\n\t\t\t\t\t\tpayload: payload,\n\t\t\t\t\t} as AjaxResponse)\n\t\t\t\t},\n\t\t\t\tasync (error_: AxiosError) => {\n\t\t\t\t\tlet answerError = {\n\t\t\t\t\t\terror: error_?.code || 0,\n\t\t\t\t\t\terrorDescription: error_?.message || '',\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\terror_ instanceof AxiosError &&\n\t\t\t\t\t\terror_.response &&\n\t\t\t\t\t\terror_.response.data\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst response = error_.response.data as {\n\t\t\t\t\t\t\terror: string\n\t\t\t\t\t\t\terror_description: string\n\t\t\t\t\t\t} as TypeDescriptionError\n\n\t\t\t\t\t\tanswerError = {\n\t\t\t\t\t\t\terror: response.error,\n\t\t\t\t\t\t\terrorDescription: response.error_description,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst problemError: AjaxError = new AjaxError({\n\t\t\t\t\t\tstatus: error_.response?.status || 0,\n\t\t\t\t\t\tanswerError,\n\t\t\t\t\t\tcause: error_,\n\t\t\t\t\t} as AjaxErrorParams)\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Is response status === 401 -> refresh Auth?\n\t\t\t\t\t */\n\t\t\t\t\tif (\n\t\t\t\t\t\tproblemError.status === 401 &&\n\t\t\t\t\t\t['expired_token', 'invalid_token'].includes(\n\t\t\t\t\t\t\tproblemError.answerError.error\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.getLogger().info(\n\t\t\t\t\t\t\t`refreshAuth >> ${problemError.answerError.error} >>>`\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tauthData = await this.#authActions.refreshAuth()\n\t\t\t\t\t\tawait this.#restrictionManager.check()\n\n\t\t\t\t\t\treturn this.#clientAxios\n\t\t\t\t\t\t\t.post(\n\t\t\t\t\t\t\t\tthis.#prepareMethod(method),\n\t\t\t\t\t\t\t\tthis.#prepareParams(authData, params, start)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\t\tasync (response: {\n\t\t\t\t\t\t\t\t\tdata: AjaxResultParams\n\t\t\t\t\t\t\t\t\tstatus: any\n\t\t\t\t\t\t\t\t}): Promise<AjaxResponse> => {\n\t\t\t\t\t\t\t\t\tconst payload = response.data as AjaxResultParams\n\t\t\t\t\t\t\t\t\treturn Promise.resolve({\n\t\t\t\t\t\t\t\t\t\tstatus: response.status,\n\t\t\t\t\t\t\t\t\t\tpayload: payload,\n\t\t\t\t\t\t\t\t\t} as AjaxResponse)\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tasync (error__: AxiosError) => {\n\t\t\t\t\t\t\t\t\tlet answerError = {\n\t\t\t\t\t\t\t\t\t\terror: error__?.code || 0,\n\t\t\t\t\t\t\t\t\t\terrorDescription: error__?.message || '',\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\terror__ instanceof AxiosError &&\n\t\t\t\t\t\t\t\t\t\terror__.response &&\n\t\t\t\t\t\t\t\t\t\terror__.response.data\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tconst response = error__.response.data as {\n\t\t\t\t\t\t\t\t\t\t\terror: string\n\t\t\t\t\t\t\t\t\t\t\terror_description: string\n\t\t\t\t\t\t\t\t\t\t} as TypeDescriptionError\n\n\t\t\t\t\t\t\t\t\t\tanswerError = {\n\t\t\t\t\t\t\t\t\t\t\terror: response.error,\n\t\t\t\t\t\t\t\t\t\t\terrorDescription: response.error_description,\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst problemError: AjaxError = new AjaxError({\n\t\t\t\t\t\t\t\t\t\tstatus: error__.response?.status || 0,\n\t\t\t\t\t\t\t\t\t\tanswerError,\n\t\t\t\t\t\t\t\t\t\tcause: error__,\n\t\t\t\t\t\t\t\t\t} as AjaxErrorParams)\n\n\t\t\t\t\t\t\t\t\treturn Promise.reject(problemError)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.reject(problemError)\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then((response: AjaxResponse): Promise<AjaxResult> => {\n\t\t\t\tconst result = new AjaxResult(\n\t\t\t\t\tresponse.payload,\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\tstart,\n\t\t\t\t\t} as AjaxQuery,\n\t\t\t\t\tresponse.status\n\t\t\t\t)\n\n\t\t\t\treturn Promise.resolve(result)\n\t\t\t})\n\t}\n\n\t/**\n\t * Processes function parameters and adds authorization\n\t *\n\t * @param authData\n\t * @param params\n\t * @param start\n\t *\n\t * @private\n\t */\n\t#prepareParams(authData: AuthData, params: any, start: number = 0): object {\n\t\tconst result = Object.assign({}, params)\n\n\t\tif (this.#logTag.length > 0) {\n\t\t\tresult.logTag = this.#logTag\n\t\t}\n\n\t\tresult[this.#requestIdGenerator.getQueryStringParameterName()] =\n\t\t\tthis.#requestIdGenerator.getRequestId()\n\t\tresult[this.#requestIdGenerator.getQueryStringSdkParameterName()] =\n\t\t\t'__SDK_VERSION__'\n\n\t\tif (!!result.data && !!result.data.start) {\n\t\t\tdelete result.data.start\n\t\t}\n\n\t\t/**\n\t\t * @memo we skip auth for hook\n\t\t */\n\t\tif (authData.refresh_token !== 'hook') {\n\t\t\tresult.auth = authData.access_token\n\t\t}\n\n\t\tresult.start = start\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Makes the function name safe and adds JSON format\n\t *\n\t * @param method\n\t * @private\n\t */\n\t#prepareMethod(method: string): string {\n\t\treturn `${encodeURIComponent(method)}.json`\n\t}\n}\n","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport { Result } from './result'\nimport { AjaxResult } from './http/ajax-result'\nimport Type from './../tools/type'\nimport type { TypeB24 } from '../types/b24'\nimport type { TypeHttp } from '../types/http'\nimport type { ListPayload } from '../types/payloads'\nimport type { AuthActions } from '../types/auth'\n\nexport abstract class AbstractB24 implements TypeB24 {\n\tstatic readonly batchSize = 50\n\n\tprotected _isInit: boolean = false\n\tprotected _http: null | TypeHttp = null\n\tprotected _logger: null | LoggerBrowser = null\n\n\t// region Init ////\n\tprotected constructor() {\n\t\tthis._isInit = false\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tget isInit(): boolean {\n\t\treturn this._isInit\n\t}\n\n\tasync init(): Promise<void> {\n\t\tthis._isInit = true\n\t\treturn\n\t}\n\n\tdestroy(): void {}\n\n\tpublic setLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t\tthis.getHttpClient().setLogger(this.getLogger())\n\t}\n\n\tpublic getLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\t// endregion ////\n\n\t// region Core ////\n\tabstract get auth(): AuthActions\n\n\t/**\n\t * @inheritDoc\n\t */\n\tabstract getTargetOrigin(): string\n\n\t/**\n\t * @inheritDoc\n\t */\n\tabstract getTargetOriginWithPath(): string\n\n\t/**\n\t * @inheritDoc\n\t */\n\tcallMethod(\n\t\tmethod: string,\n\t\tparams?: object,\n\t\tstart?: number\n\t): Promise<AjaxResult> {\n\t\treturn this.getHttpClient().call(method, params || {}, start || 0)\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tasync callListMethod(\n\t\tmethod: string,\n\t\tparams: object = {},\n\t\tprogress: null | ((progress: number) => void) = null,\n\t\tcustomKeyForResult: null | string = null\n\t): Promise<Result> {\n\t\tconst result = new Result()\n\n\t\tif (Type.isFunction(progress) && null !== progress) {\n\t\t\tprogress(0)\n\t\t}\n\n\t\treturn this.callMethod(method, params, 0).then(async (response) => {\n\t\t\tlet list: any[] = []\n\n\t\t\tlet resultData\n\t\t\tif (null === customKeyForResult) {\n\t\t\t\tresultData = (response.getData() as ListPayload<any>).result as []\n\t\t\t} else {\n\t\t\t\tresultData = (response.getData() as ListPayload<any>).result[\n\t\t\t\t\tcustomKeyForResult\n\t\t\t\t] as []\n\t\t\t}\n\n\t\t\tlist = [...list, ...resultData]\n\t\t\tif (response.isMore()) {\n\t\t\t\tlet responseLoop: false | AjaxResult = response\n\t\t\t\twhile (true) {\n\t\t\t\t\tresponseLoop = await responseLoop.getNext(this.getHttpClient())\n\n\t\t\t\t\tif (responseLoop === false) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tlet resultData = undefined\n\t\t\t\t\tif (null === customKeyForResult) {\n\t\t\t\t\t\tresultData = (responseLoop.getData() as ListPayload<any>)\n\t\t\t\t\t\t\t.result as []\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresultData = (responseLoop.getData() as ListPayload<any>).result[\n\t\t\t\t\t\t\tcustomKeyForResult\n\t\t\t\t\t\t] as []\n\t\t\t\t\t}\n\n\t\t\t\t\tlist = [...list, ...resultData]\n\n\t\t\t\t\tif (progress) {\n\t\t\t\t\t\tconst total = responseLoop.getTotal()\n\t\t\t\t\t\tprogress(total > 0 ? Math.round((100 * list.length) / total) : 100)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresult.setData(list)\n\t\t\tif (progress) {\n\t\t\t\tprogress(100)\n\t\t\t}\n\n\t\t\treturn result\n\t\t})\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tasync *fetchListMethod(\n\t\tmethod: string,\n\t\tparams: any = {},\n\t\tidKey: string = 'ID',\n\t\tcustomKeyForResult: null | string = null\n\t): AsyncGenerator<any[]> {\n\t\tparams.order = params.order || {}\n\t\tparams.filter = params.filter || {}\n\t\tparams.start = -1\n\n\t\tconst moreIdKey = `>${idKey}`\n\n\t\tparams.order[idKey] = 'ASC'\n\t\tparams.filter[moreIdKey] = 0\n\n\t\tdo {\n\t\t\tconst result = await this.callMethod(method, params, params.start)\n\t\t\tlet data = undefined\n\t\t\tif (Type.isNull(customKeyForResult) && null !== customKeyForResult) {\n\t\t\t\tdata = result.getData().result[customKeyForResult] as []\n\t\t\t} else {\n\t\t\t\tdata = result.getData().result as []\n\t\t\t}\n\n\t\t\tif (data.length === 0) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tyield data\n\n\t\t\tif (data.length < AbstractB24.batchSize) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tconst value = data.at(-1)\n\t\t\tif (value && idKey in value) {\n\t\t\t\tparams.filter[moreIdKey] = value[idKey]\n\t\t\t}\n\t\t} while (true)\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tasync callBatch(\n\t\tcalls: Array<any> | object,\n\t\tisHaltOnError: boolean = true\n\t): Promise<Result> {\n\t\treturn this.getHttpClient().batch(calls, isHaltOnError)\n\t}\n\n\tchunkArray<T>(array: T[], chunkSize: number = 50): T[][] {\n\t\tconst result: T[][] = []\n\t\tfor (let i = 0; i < array.length; i += chunkSize) {\n\t\t\tconst chunk = array.slice(i, i + chunkSize)\n\t\t\tresult.push(chunk)\n\t\t}\n\t\treturn result\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tasync callBatchByChunk(\n\t\tcalls: Array<any>,\n\t\tisHaltOnError: boolean = true\n\t): Promise<Result> {\n\t\tconst result = new Result()\n\n\t\tconst data = []\n\t\tconst chunks = this.chunkArray(calls, AbstractB24.batchSize)\n\n\t\tfor (const chunkRequest of chunks) {\n\t\t\tconst response = await this.callBatch(chunkRequest, isHaltOnError)\n\t\t\tdata.push(...response.getData())\n\t\t}\n\n\t\treturn result.setData(data)\n\t}\n\t// endregion ////\n\n\t// region Tools ////\n\t/**\n\t * @inheritDoc\n\t */\n\tgetHttpClient(): TypeHttp {\n\t\tif (!this.isInit || null === this._http) {\n\t\t\tthrow new Error(`Http not init`)\n\t\t}\n\n\t\treturn this._http\n\t}\n\n\t/**\n\t * Returns settings for http connection\n\t * @protected\n\t */\n\tprotected _getHttpOptions(): null | object {\n\t\treturn null\n\t}\n\n\t/**\n\t * Generates an object not initialized error\n\t * @protected\n\t */\n\tprotected _ensureInitialized(): void {\n\t\tif (!this._isInit) {\n\t\t\tthrow new Error('B24 not initialized')\n\t\t}\n\t}\n\t// endregion ////\n}\n","/**\n * List of supported languages in B24.Cloud\n *\n * It is worth remembering that there will be 1-2 languages for the B24.Box\n */\nexport enum B24LangList {\n\ten = 'en',\n\tde = 'de',\n\tla = 'la',\n\n\tbr = 'br',\n\tfr = 'fr',\n\tit = 'it',\n\n\tpl = 'pl',\n\tru = 'ru',\n\tua = 'ua',\n\n\ttr = 'tr',\n\tsc = 'sc',\n\ttc = 'tc',\n\n\tja = 'ja',\n\tvn = 'vn',\n\tid = 'id',\n\n\tms = 'ms',\n\tth = 'th',\n\tar = 'ar',\n}\n","/**\n * Returns scroll info\n */\nconst useScrollSize = (): { scrollWidth: number; scrollHeight: number } => {\n\treturn {\n\t\tscrollWidth: Math.max(\n\t\t\tdocument.documentElement.scrollWidth,\n\t\t\tdocument.documentElement.offsetWidth\n\t\t),\n\t\tscrollHeight: Math.max(\n\t\t\tdocument.documentElement.scrollHeight,\n\t\t\tdocument.documentElement.offsetHeight\n\t\t),\n\t}\n}\n\nexport default useScrollSize\n","import Type from '../type'\n\nexport default class FormatterNumbers {\n\tprivate static isInternalConstructing: boolean = false\n\tprivate static instance: FormatterNumbers | null = null\n\tprivate _defLocale: null | string = null\n\tprivate constructor() {\n\t\tif (!FormatterNumbers.isInternalConstructing) {\n\t\t\tthrow new TypeError('FormatterNumber is not constructable')\n\t\t}\n\t\tFormatterNumbers.isInternalConstructing = false\n\t}\n\n\t/**\n\t * @return FormatterNumbers\n\t */\n\tstatic getInstance(): FormatterNumbers {\n\t\tif (!FormatterNumbers.instance) {\n\t\t\tFormatterNumbers.isInternalConstructing = true\n\t\t\tFormatterNumbers.instance = new FormatterNumbers()\n\t\t}\n\t\treturn FormatterNumbers.instance\n\t}\n\n\tsetDefLocale(locale: string) {\n\t\tthis._defLocale = locale\n\t}\n\n\tformat(value: number, locale?: string): string {\n\t\tlet formatter\n\t\tif (typeof locale === 'undefined' || !Type.isStringFilled(locale)) {\n\t\t\tlocale = Type.isStringFilled(this._defLocale)\n\t\t\t\t? this._defLocale || 'en'\n\t\t\t\t: navigator?.language\n\t\t}\n\n\t\tif (Number.isInteger(value)) {\n\t\t\tformatter = new Intl.NumberFormat(locale, {\n\t\t\t\tminimumFractionDigits: 0,\n\t\t\t\tmaximumFractionDigits: 0,\n\t\t\t})\n\t\t} else {\n\t\t\tformatter = new Intl.NumberFormat(locale, {\n\t\t\t\tminimumFractionDigits: 2,\n\t\t\t\tmaximumFractionDigits: 2,\n\t\t\t})\n\t\t}\n\n\t\tlet result = formatter.format(value)\n\t\tif (locale.includes('ru')) {\n\t\t\tresult = result.replace(',', '.')\n\t\t}\n\n\t\treturn result\n\t}\n}\n","export class IbanSpecification {\n\t/**\n\t * the code of the country\n\t */\n\treadonly countryCode: string\n\n\t/**\n\t * the length of the IBAN\n\t */\n\treadonly length: number\n\n\t/**\n\t * the structure of the underlying BBAN (for validation and formatting)\n\t */\n\treadonly structure: string\n\n\t/**\n\t * an example valid IBAN\n\t */\n\treadonly example: string\n\n\tprivate _cachedRegex: null | RegExp = null\n\n\tconstructor(\n\t\tcountryCode: string,\n\t\tlength: number,\n\t\tstructure: string,\n\t\texample: string\n\t) {\n\t\tthis.countryCode = countryCode\n\t\tthis.length = length\n\t\tthis.structure = structure\n\t\tthis.example = example\n\t}\n\n\t/**\n\t * Check if the passed iban is valid, according to this specification.\n\t *\n\t * @param {String} iban the iban to validate\n\t * @returns {boolean} true if valid, false otherwise\n\t */\n\tisValid(iban: string): boolean {\n\t\treturn (\n\t\t\tthis.length === iban.length &&\n\t\t\tthis.countryCode === iban.slice(0, 2) &&\n\t\t\tthis._regex().test(iban.slice(4)) &&\n\t\t\tthis._iso7064Mod9710(this._iso13616Prepare(iban)) == 1\n\t\t)\n\t}\n\n\t/**\n\t * Convert the passed IBAN to a country-specific BBAN.\n\t *\n\t * @param iban the IBAN to convert\n\t * @param separator the separator to use between BBAN blocks\n\t * @returns {string} the BBAN\n\t */\n\ttoBBAN(iban: string, separator: string): string {\n\t\treturn (this._regex().exec(iban.slice(4) || '') || [])\n\t\t\t.slice(1)\n\t\t\t.join(separator)\n\t}\n\n\t/**\n\t * Convert the passed BBAN to an IBAN for this country specification.\n\t * Please note that <i>\"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account\"</i>.\n\t * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits\n\t *\n\t * @param bban the BBAN to convert to IBAN\n\t * @returns {string} the IBAN\n\t */\n\tfromBBAN(bban: string): string {\n\t\tif (!this.isValidBBAN(bban)) {\n\t\t\tthrow new Error('Invalid BBAN')\n\t\t}\n\n\t\tconst remainder = this._iso7064Mod9710(\n\t\t\tthis._iso13616Prepare(this.countryCode + '00' + bban)\n\t\t)\n\n\t\tconst checkDigit = ('0' + (98 - remainder)).slice(-2)\n\n\t\treturn this.countryCode + checkDigit + bban\n\t}\n\n\t/**\n\t * Check of the passed BBAN is valid.\n\t * This function only checks the format of the BBAN (length and compliance with alphanumeric specifications) but does not\n\t * verify the check digit.\n\t *\n\t * @param bban the BBAN to validate\n\t * @returns {boolean} true if the passed bban is a valid BBAN, according to this specification, false otherwise\n\t */\n\tisValidBBAN(bban: string): boolean {\n\t\treturn this.length - 4 === bban.length && this._regex().test(bban)\n\t}\n\n\t/**\n\t * Lazy-loaded regex (parse the structure and construct the regular expression the first time we need it for validation)\n\t */\n\tprivate _regex(): RegExp {\n\t\tif (null === this._cachedRegex) {\n\t\t\tthis._cachedRegex = this._parseStructure(this.structure)\n\t\t}\n\n\t\treturn this._cachedRegex\n\t}\n\n\t/**\n\t * Parse the BBAN structure used to configure each IBAN Specification and returns a matching regular expression.\n\t * A structure is composed of blocks of three characters (one letter and two digits).\n\t * Each block represents\n\t * a logical group in the typical representation of the BBAN.\n\t * For each group, the letter indicates which characters\n\t * are allowed in this group, and the following 2-digits number tells the length of the group.\n\t *\n\t * @param {string} structure the structure to parse\n\t * @returns {RegExp}\n\t */\n\tprivate _parseStructure(structure: string): RegExp {\n\t\t// split in blocks of 3 chars\n\t\tconst regex = (structure.match(/(.{3})/g) || []).map(\n\t\t\t(block: string): string => {\n\t\t\t\t// parse each structure block (1-char + 2-digits)\n\t\t\t\tlet format\n\t\t\t\tconst pattern = block.slice(0, 1)\n\t\t\t\tconst repeats = Number.parseInt(block.slice(1), 10)\n\n\t\t\t\tswitch (pattern) {\n\t\t\t\t\tcase 'A':\n\t\t\t\t\t\tformat = '0-9A-Za-z'\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'B':\n\t\t\t\t\t\tformat = '0-9A-Z'\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'C':\n\t\t\t\t\t\tformat = 'A-Za-z'\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'F':\n\t\t\t\t\t\tformat = '0-9'\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'L':\n\t\t\t\t\t\tformat = 'a-z'\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'U':\n\t\t\t\t\t\tformat = 'A-Z'\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'W':\n\t\t\t\t\t\tformat = '0-9a-z'\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\treturn '([' + format + ']{' + repeats + '})'\n\t\t\t}\n\t\t)\n\n\t\treturn new RegExp('^' + regex.join('') + '$')\n\t}\n\n\t/**\n\t * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to\n\t * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.\n\t *\n\t * @param {string} iban the IBAN\n\t * @returns {string} the prepared IBAN\n\t */\n\tprivate _iso13616Prepare(iban: string): string {\n\t\t// eslint-disable-next-line\n\t\tconst A = 'A'.charCodeAt(0)\n\t\t// eslint-disable-next-line\n\t\tconst Z = 'Z'.charCodeAt(0)\n\n\t\tiban = iban.toUpperCase()\n\t\t// eslint-disable-next-line\n\t\tiban = iban.substring(4) + iban.substring(0, 4)\n\t\treturn (\n\t\t\tiban\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\t.split('')\n\t\t\t\t.map((n: string): string => {\n\t\t\t\t\t// eslint-disable-next-line\n\t\t\t\t\tconst code = n.charCodeAt(0)\n\t\t\t\t\tif (code >= A && code <= Z) {\n\t\t\t\t\t\t// A = 10, B = 11, ... Z = 35\n\t\t\t\t\t\treturn (code - A + 10).toString()\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn n\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t)\n\t}\n\n\t/**\n\t * Calculates MOD 97 10 of the passed IBAN as specified in ISO7064.\n\t *\n\t * @param iban\n\t * @returns {number}\n\t */\n\tprivate _iso7064Mod9710(iban: string): number {\n\t\tlet remainder = iban\n\t\tlet block\n\n\t\twhile (remainder.length > 2) {\n\t\t\tblock = remainder.slice(0, 9)\n\t\t\tremainder =\n\t\t\t\t(Number.parseInt(block, 10) % 97) + remainder.slice(block.length)\n\t\t}\n\n\t\treturn Number.parseInt(remainder, 10) % 97\n\t}\n}\n\nexport class FormatterIban {\n\tprivate static isInternalConstructing: boolean = false\n\tprivate static instance: FormatterIban | null = null\n\n\tprivate _countries: Map<string, IbanSpecification>\n\n\t// region Init ////\n\tprivate constructor() {\n\t\tif (!FormatterIban.isInternalConstructing) {\n\t\t\tthrow new TypeError('FormatterIban is not constructable')\n\t\t}\n\t\tFormatterIban.isInternalConstructing = false\n\n\t\tthis._countries = new Map()\n\t}\n\n\t/**\n\t * @return FormatterIban\n\t */\n\tstatic getInstance(): FormatterIban {\n\t\tif (!FormatterIban.instance) {\n\t\t\tFormatterIban.isInternalConstructing = true\n\t\t\tFormatterIban.instance = new FormatterIban()\n\t\t}\n\n\t\treturn FormatterIban.instance\n\t}\n\n\taddSpecification(IBAN: IbanSpecification): void {\n\t\tthis._countries.set(IBAN.countryCode, IBAN)\n\t}\n\t// endregion ////\n\n\t// region IBAN ////\n\t/**\n\t * Check if an IBAN is valid.\n\t *\n\t * @param {String} iban the IBAN to validate.\n\t * @returns {boolean} true if the passed IBAN is valid, false otherwise\n\t */\n\tisValid(iban: string): boolean {\n\t\tif (!this._isString(iban)) {\n\t\t\treturn false\n\t\t}\n\n\t\tiban = this.electronicFormat(iban)\n\t\tconst countryCode = iban.slice(0, 2)\n\n\t\tif (!this._countries.has(countryCode)) {\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\n\t\tconst countryStructure = this._countries.get(countryCode)\n\n\t\treturn !!countryStructure && countryStructure.isValid(iban)\n\t}\n\n\tprintFormat(iban: string, separator?: string): string {\n\t\tif (typeof separator == 'undefined') {\n\t\t\tseparator = ' '\n\t\t}\n\n\t\tconst EVERY_FOUR_CHARS = /(.{4})(?!$)/g\n\n\t\treturn this.electronicFormat(iban).replace(\n\t\t\tEVERY_FOUR_CHARS,\n\t\t\t'$1' + separator\n\t\t)\n\t}\n\n\telectronicFormat(iban: string): string {\n\t\t// eslint-disable-next-line\n\t\tconst NON_ALPHANUM = /[^a-zA-Z0-9]/g\n\n\t\treturn iban.replace(NON_ALPHANUM, '').toUpperCase()\n\t}\n\t// endregion ////\n\n\t// region BBAN ////\n\t/**\n\t * Convert an IBAN to a BBAN.\n\t *\n\t * @param iban\n\t * @param {String} [separator] the separator to use between the blocks of the BBAN, defaults to ' '\n\t * @returns {string|*}\n\t */\n\ttoBBAN(iban: string, separator?: string): string {\n\t\tif (typeof separator == 'undefined') {\n\t\t\tseparator = ' '\n\t\t}\n\n\t\tiban = this.electronicFormat(iban)\n\n\t\tconst countryCode = iban.slice(0, 2)\n\t\tif (!this._countries.has(countryCode)) {\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\n\t\tconst countryStructure = this._countries.get(countryCode)\n\n\t\tif (!countryStructure) {\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\n\t\treturn countryStructure.toBBAN(iban, separator)\n\t}\n\n\t/**\n\t * Convert the passed BBAN to an IBAN for this country specification.\n\t * Please note that <i>\"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account\"</i>.\n\t * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits\n\t *\n\t * @param countryCode the country of the BBAN\n\t * @param bban the BBAN to convert to IBAN\n\t * @returns {string} the IBAN\n\t */\n\tfromBBAN(countryCode: string, bban: string): string {\n\t\tif (!this._countries.has(countryCode)) {\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\n\t\tconst countryStructure = this._countries.get(countryCode)\n\n\t\tif (!countryStructure) {\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\n\t\treturn countryStructure.fromBBAN(this.electronicFormat(bban))\n\t}\n\n\t/**\n\t * Check the validity of the passed BBAN.\n\t *\n\t * @param countryCode the country of the BBAN\n\t * @param bban the BBAN to check the validity of\n\t */\n\tisValidBBAN(countryCode: string, bban: string): boolean {\n\t\tif (!this._isString(bban)) {\n\t\t\treturn false\n\t\t}\n\n\t\tif (!this._countries.has(countryCode)) {\n\t\t\tthrow new Error(`No country with code ${countryCode}`)\n\t\t}\n\n\t\tconst countryStructure = this._countries.get(countryCode)\n\n\t\treturn (\n\t\t\t!!countryStructure &&\n\t\t\tcountryStructure.isValidBBAN(this.electronicFormat(bban))\n\t\t)\n\t}\n\t// endregion ////\n\n\t// region Tools ////\n\tprivate _isString(value: any): boolean {\n\t\treturn typeof value == 'string' || value instanceof String\n\t}\n\t// endregion ////\n}\n","import FormatterNumbers from './formatters/numbers'\nimport { IbanSpecification, FormatterIban } from './formatters/iban'\n\nexport const useFormatter = () => {\n\tconst formatterNumber = FormatterNumbers.getInstance()\n\n\t// region Iban ////\n\tconst formatterIban = FormatterIban.getInstance()\n\n\t// region addSpecification ////\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('AD', 24, 'F04F04A12', 'AD1200012030200359100100')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('AE', 23, 'F03F16', 'AE070331234567890123456')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('AL', 28, 'F08A16', 'AL47212110090000000235698741')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('AT', 20, 'F05F11', 'AT611904300234573201')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('AZ', 28, 'U04A20', 'AZ21NABZ00000000137010001944')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('BA', 20, 'F03F03F08F02', 'BA391290079401028494')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('BE', 16, 'F03F07F02', 'BE68539007547034')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('BG', 22, 'U04F04F02A08', 'BG80BNBG96611020345678')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('BH', 22, 'U04A14', 'BH67BMAG00001299123456')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'BR',\n\t\t\t29,\n\t\t\t'F08F05F10U01A01',\n\t\t\t'BR9700360305000010009795493P1'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('BY', 28, 'A04F04A16', 'BY13NBRB3600900000002Z00AB00')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('CH', 21, 'F05A12', 'CH9300762011623852957')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('CR', 22, 'F04F14', 'CR72012300000171549015')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('CY', 28, 'F03F05A16', 'CY17002001280000001200527600')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('CZ', 24, 'F04F06F10', 'CZ6508000000192000145399')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('DE', 22, 'F08F10', 'DE89370400440532013000')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('DK', 18, 'F04F09F01', 'DK5000400440116243')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('DO', 28, 'U04F20', 'DO28BAGR00000001212453611324')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('EE', 20, 'F02F02F11F01', 'EE382200221020145685')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'EG',\n\t\t\t29,\n\t\t\t'F04F04F17',\n\t\t\t'EG800002000156789012345180002'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'ES',\n\t\t\t24,\n\t\t\t'F04F04F01F01F10',\n\t\t\t'ES9121000418450200051332'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('FI', 18, 'F06F07F01', 'FI2112345600000785')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('FO', 18, 'F04F09F01', 'FO6264600001631634')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'FR',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'FR1420041010050500013M02606'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('GB', 22, 'U04F06F08', 'GB29NWBK60161331926819')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('GE', 22, 'U02F16', 'GE29NB0000000101904917')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('GI', 23, 'U04A15', 'GI75NWBK000000007099453')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('GL', 18, 'F04F09F01', 'GL8964710001000206')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('GR', 27, 'F03F04A16', 'GR1601101250000000012300695')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('GT', 28, 'A04A20', 'GT82TRAJ01020000001210029690')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('HR', 21, 'F07F10', 'HR1210010051863000160')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'HU',\n\t\t\t28,\n\t\t\t'F03F04F01F15F01',\n\t\t\t'HU42117730161111101800000000'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('IE', 22, 'U04F06F08', 'IE29AIBK93115212345678')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('IL', 23, 'F03F03F13', 'IL620108000000099999999')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'IS',\n\t\t\t26,\n\t\t\t'F04F02F06F10',\n\t\t\t'IS140159260076545510730339'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'IT',\n\t\t\t27,\n\t\t\t'U01F05F05A12',\n\t\t\t'IT60X0542811101000000123456'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('IQ', 23, 'U04F03A12', 'IQ98NBIQ850123456789012')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('JO', 30, 'A04F22', 'JO15AAAA1234567890123456789012')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('KW', 30, 'U04A22', 'KW81CBKU0000000000001234560101')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('KZ', 20, 'F03A13', 'KZ86125KZT5004100100')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('LB', 28, 'F04A20', 'LB62099900000001001901229114')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'LC',\n\t\t\t32,\n\t\t\t'U04F24',\n\t\t\t'LC07HEMM000100010012001200013015'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('LI', 21, 'F05A12', 'LI21088100002324013AA')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('LT', 20, 'F05F11', 'LT121000011101001000')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('LU', 20, 'F03A13', 'LU280019400644750000')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('LV', 21, 'U04A13', 'LV80BANK0000435195001')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'MC',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'MC5811222000010123456789030'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('MD', 24, 'U02A18', 'MD24AG000225100013104168')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('ME', 22, 'F03F13F02', 'ME25505000012345678951')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('MK', 19, 'F03A10F02', 'MK07250120000058984')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'MR',\n\t\t\t27,\n\t\t\t'F05F05F11F02',\n\t\t\t'MR1300020001010000123456753'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'MT',\n\t\t\t31,\n\t\t\t'U04F05A18',\n\t\t\t'MT84MALT011000012345MTLCAST001S'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'MU',\n\t\t\t30,\n\t\t\t'U04F02F02F12F03U03',\n\t\t\t'MU17BOMM0101101030300200000MUR'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('NL', 18, 'U04F10', 'NL91ABNA0417164300')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('NO', 15, 'F04F06F01', 'NO9386011117947')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('PK', 24, 'U04A16', 'PK36SCBL0000001123456702')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('PL', 28, 'F08F16', 'PL61109010140000071219812874')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('PS', 29, 'U04A21', 'PS92PALS000000000400123456702')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('PT', 25, 'F04F04F11F02', 'PT50000201231234567890154')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('QA', 29, 'U04A21', 'QA30AAAA123456789012345678901')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('RO', 24, 'U04A16', 'RO49AAAA1B31007593840000')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('RS', 22, 'F03F13F02', 'RS35260005601001611379')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('SA', 24, 'F02A18', 'SA0380000000608010167519')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'SC',\n\t\t\t31,\n\t\t\t'U04F04F16U03',\n\t\t\t'SC18SSCB11010000000000001497USD'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('SE', 24, 'F03F16F01', 'SE4550000000058398257466')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('SI', 19, 'F05F08F02', 'SI56263300012039086')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('SK', 24, 'F04F06F10', 'SK3112000000198742637541')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'SM',\n\t\t\t27,\n\t\t\t'U01F05F05A12',\n\t\t\t'SM86U0322509800000000270100'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('ST', 25, 'F08F11F02', 'ST68000100010051845310112')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('SV', 28, 'U04F20', 'SV62CENR00000000000000700025')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('TL', 23, 'F03F14F02', 'TL380080012345678910157')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('TN', 24, 'F02F03F13F02', 'TN5910006035183598478831')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('TR', 26, 'F05F01A16', 'TR330006100519786457841326')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('UA', 29, 'F25', 'UA511234567890123456789012345')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('VA', 22, 'F18', 'VA59001123000012345678')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('VG', 24, 'U04F16', 'VG96VPVG0000012345678901')\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('XK', 20, 'F04F10F02', 'XK051212012345678906')\n\t)\n\n\t// The following countries are not included in the official IBAN registry but use the IBAN specification\n\t// Angola\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('AO', 25, 'F21', 'AO69123456789012345678901')\n\t)\n\t// Burkina\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('BF', 27, 'F23', 'BF2312345678901234567890123')\n\t)\n\t// Burundi\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('BI', 16, 'F12', 'BI41123456789012')\n\t)\n\t// Benin\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('BJ', 28, 'F24', 'BJ39123456789012345678901234')\n\t)\n\t// Ivory\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('CI', 28, 'U02F22', 'CI70CI1234567890123456789012')\n\t)\n\t// Cameron\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('CM', 27, 'F23', 'CM9012345678901234567890123')\n\t)\n\t// Cape Verde\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('CV', 25, 'F21', 'CV30123456789012345678901')\n\t)\n\t// Algeria\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('DZ', 24, 'F20', 'DZ8612345678901234567890')\n\t)\n\t// Iran\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('IR', 26, 'F22', 'IR861234568790123456789012')\n\t)\n\t// Madagascar\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('MG', 27, 'F23', 'MG1812345678901234567890123')\n\t)\n\t// Mali\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('ML', 28, 'U01F23', 'ML15A12345678901234567890123')\n\t)\n\t// Mozambique\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('MZ', 25, 'F21', 'MZ25123456789012345678901')\n\t)\n\t// Senegal\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification('SN', 28, 'U01F23', 'SN52A12345678901234567890123')\n\t)\n\n\t// The following are regional and administrative French Republic subdivision IBAN specification (same structure as FR, only country code vary)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'GF',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'GF121234512345123456789AB13'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'GP',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'GP791234512345123456789AB13'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'MQ',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'MQ221234512345123456789AB13'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'RE',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'RE131234512345123456789AB13'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'PF',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'PF281234512345123456789AB13'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'TF',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'TF891234512345123456789AB13'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'YT',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'YT021234512345123456789AB13'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'NC',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'NC551234512345123456789AB13'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'BL',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'BL391234512345123456789AB13'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'MF',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'MF551234512345123456789AB13'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'PM',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'PM071234512345123456789AB13'\n\t\t)\n\t)\n\tformatterIban.addSpecification(\n\t\tnew IbanSpecification(\n\t\t\t'WF',\n\t\t\t27,\n\t\t\t'F05F05A11F02',\n\t\t\t'WF621234512345123456789AB13'\n\t\t)\n\t)\n\t// endregion ////\n\t// endregion ////\n\n\treturn {\n\t\tformatterNumber,\n\t\tformatterIban,\n\t}\n}\n","import type { AuthActions, AuthData, B24HookParams } from '../types/auth'\n\n/**\n * Authorization Manager\n */\nexport class AuthHookManager implements AuthActions {\n\t#b24HookParams: B24HookParams\n\n\tconstructor(b24HookParams: B24HookParams) {\n\t\tthis.#b24HookParams = Object.freeze(Object.assign({}, b24HookParams))\n\t}\n\n\t/**\n\t * @see Http.#prepareParams\n\t */\n\tgetAuthData(): false | AuthData {\n\t\tconst domain = this.#b24HookParams.b24Url\n\t\t\t.replaceAll('https://', '')\n\t\t\t.replaceAll('http://', '')\n\t\t\t.replace(/:(80|443)$/, '')\n\n\t\treturn {\n\t\t\taccess_token: this.#b24HookParams.secret,\n\t\t\trefresh_token: 'hook',\n\t\t\texpires_in: 0,\n\t\t\tdomain: domain,\n\t\t\tmember_id: domain,\n\t\t}\n\t}\n\n\trefreshAuth(): Promise<AuthData> {\n\t\treturn Promise.resolve(this.getAuthData() as AuthData)\n\t}\n\n\tgetUniq(prefix: string): string {\n\t\tconst authData = this.getAuthData()\n\t\tif (authData === false) {\n\t\t\tthrow new Error('AuthData not init')\n\t\t}\n\t\treturn [prefix, authData.member_id].join('_')\n\t}\n\n\t/**\n\t * Get the account address BX24 ( https://name.bitrix24.com )\n\t */\n\tgetTargetOrigin(): string {\n\t\treturn `${this.#b24HookParams.b24Url}`\n\t}\n\n\t/**\n\t * Get the account address BX24 with Path ( https://name.bitrix24.com/rest/1/xxxxx )\n\t */\n\tgetTargetOriginWithPath(): string {\n\t\treturn `${this.#b24HookParams.b24Url}/rest/${this.#b24HookParams.userId}/${this.#b24HookParams.secret}`\n\t}\n\n\t/**\n\t * We believe that hooks are created only by the admin\n\t */\n\tget isAdmin(): boolean {\n\t\treturn true\n\t}\n}\n","import { LoggerBrowser } from '../logger/browser'\nimport { AbstractB24 } from '../core/abstract-b24'\nimport type { TypeB24 } from '../types/b24'\nimport Http from '../core/http/controller'\nimport { AuthHookManager } from './auth'\nimport type { AuthActions, B24HookParams } from '../types/auth'\n\n/**\n * B24.Hook Manager.\n *\n * @link https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=99&LESSON_ID=8581&LESSON_PATH=8771.8583.8581\n */\nexport class B24Hook extends AbstractB24 implements TypeB24 {\n\treadonly #authHookManager: AuthHookManager\n\n\t// region Init ////\n\tconstructor(b24HookParams: B24HookParams) {\n\t\tsuper()\n\n\t\tthis.#authHookManager = new AuthHookManager(b24HookParams)\n\n\t\tthis._http = new Http(\n\t\t\tthis.#authHookManager.getTargetOriginWithPath(),\n\t\t\tthis.#authHookManager,\n\t\t\tthis._getHttpOptions()\n\t\t)\n\n\t\tthis._isInit = true\n\t}\n\n\tpublic override setLogger(logger: LoggerBrowser): void {\n\t\tsuper.setLogger(logger)\n\t}\n\t// endregion ////\n\n\toverride get auth(): AuthActions {\n\t\treturn this.#authHookManager\n\t}\n\n\t// region Core ////\n\t// endregion ////\n\n\t// region Get ////\n\t/**\n\t * Get the account address BX24 ( https://name.bitrix24.com )\n\t */\n\toverride getTargetOrigin(): string {\n\t\tthis._ensureInitialized()\n\t\treturn this.#authHookManager.getTargetOrigin()\n\t}\n\n\t/**\n\t * Get the account address BX24 with Path ( https://name.bitrix24.com/rest/1/xxxxx )\n\t */\n\toverride getTargetOriginWithPath(): string {\n\t\tthis._ensureInitialized()\n\t\treturn this.#authHookManager.getTargetOriginWithPath()\n\t}\n\t// endregion ////\n\n\t// region Tools ////\n\t// endregion ////\n}\n","/**\n * List of commands for the B24 parent window\n */\nexport enum MessageCommands {\n\tgetInitData = 'getInitData',\n\tsetInstallFinish = 'setInstallFinish',\n\tsetInstall = 'setInstall',\n\trefreshAuth = 'refreshAuth',\n\tsetAppOption = 'setAppOption',\n\tsetUserOption = 'setUserOption',\n\tresizeWindow = 'resizeWindow',\n\treloadWindow = 'reloadWindow',\n\tsetTitle = 'setTitle',\n\tsetScroll = 'setScroll',\n\topenApplication = 'openApplication',\n\tcloseApplication = 'closeApplication',\n\topenPath = 'openPath',\n\timCallTo = 'imCallTo',\n\timPhoneTo = 'imPhoneTo',\n\timOpenMessenger = 'imOpenMessenger',\n\timOpenHistory = 'imOpenHistory',\n\tselectUser = 'selectUser',\n\tselectAccess = 'selectAccess',\n\tselectCRM = 'selectCRM',\n\tshowAppForm = 'showAppForm',\n}\n","import { LoggerBrowser, LoggerType } from '../../logger/browser'\n\nimport { MessageCommands } from './commands'\nimport { AppFrame } from '../frame'\n\nimport Text from '../../tools/text'\n\ninterface PromiseHandlers {\n\tresolve: (value: any) => void\n\treject: (reason?: any) => void\n\ttimeoutId: any\n}\n\n/**\n * Parent Window Request Parameters\n * @prop isSafely auto completion mode Promise.resolve()\n * @prop safelyTime after what time (900 ms) should it be automatically resolved Promise\n */\nexport interface SendParams {\n\t[index: string]: any\n\n\tisSafely?: boolean\n\tsafelyTime?: number\n}\n\n/**\n * Parent Window Communication Manager at B24\n */\nexport class MessageManager {\n\t#appFrame: AppFrame\n\t#callbackPromises: Map<string, PromiseHandlers>\n\tprotected _logger: null | LoggerBrowser = null\n\tprivate runCallbackHandler: OmitThisParameter<(event: MessageEvent) => void>\n\n\tconstructor(appFrame: AppFrame) {\n\t\tthis.#appFrame = appFrame\n\n\t\tthis.#callbackPromises = new Map()\n\n\t\tthis.runCallbackHandler = this._runCallback.bind(this)\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t}\n\n\tgetLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\n\t// region Events ////\n\t/**\n\t * Subscribe to the onMessage event of the parent window\n\t */\n\tsubscribe() {\n\t\twindow.addEventListener('message', this.runCallbackHandler)\n\t}\n\n\t/**\n\t * Unsubscribe from the onMessage event of the parent window\n\t */\n\tunsubscribe(): void {\n\t\twindow.removeEventListener('message', this.runCallbackHandler)\n\t}\n\t// endregion ////\n\n\t/**\n\t * Send message to parent window\n\t * The answer (if) we will get in _runCallback\n\t *\n\t * @param command\n\t * @param params\n\t */\n\tasync send(\n\t\tcommand: string | MessageCommands,\n\t\tparams: null | SendParams = null\n\t): Promise<any> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet cmd: string | object\n\t\t\tconst promiseHandler: PromiseHandlers = {\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t\ttimeoutId: null,\n\t\t\t}\n\n\t\t\tconst keyPromise = this.#setCallbackPromise(promiseHandler)\n\n\t\t\tif (command.toString().includes(':')) {\n\t\t\t\tcmd = {\n\t\t\t\t\tmethod: command.toString(),\n\t\t\t\t\tparams: params ?? '',\n\t\t\t\t\tcallback: keyPromise,\n\t\t\t\t\tappSid: this.#appFrame.getAppSid(),\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/**\n\t\t\t\t * @memo: delete it after rest 22.0.0\n\t\t\t\t */\n\t\t\t\tcmd = command.toString()\n\t\t\t\tconst listParams = [\n\t\t\t\t\tparams ? JSON.stringify(params) : null,\n\t\t\t\t\tkeyPromise,\n\t\t\t\t\tthis.#appFrame.getAppSid(),\n\t\t\t\t]\n\n\t\t\t\tcmd += ':' + listParams.filter(Boolean).join(':')\n\t\t\t}\n\n\t\t\tthis.getLogger().log(`send to ${this.#appFrame.getTargetOrigin()}`, {\n\t\t\t\tcmd,\n\t\t\t})\n\n\t\t\tparent.postMessage(cmd, this.#appFrame.getTargetOrigin())\n\n\t\t\tif (params?.isSafely) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tthis.#callbackPromises.get(keyPromise).timeoutId = window.setTimeout(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tif (this.#callbackPromises.has(keyPromise)) {\n\t\t\t\t\t\t\tthis.getLogger().warn(\n\t\t\t\t\t\t\t\t`Action ${command.toString()} stop by timeout`\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tthis.#callbackPromises.delete(keyPromise)\n\t\t\t\t\t\t\tresolve({ isSafely: true })\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tNumber.parseInt(String(params?.safelyTime || 900))\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Fulfilling a promise based on messages from the parent window\n\t *\n\t * @param event\n\t * @private\n\t */\n\tpublic _runCallback(event: MessageEvent): void {\n\t\tif (event.origin !== this.#appFrame.getTargetOrigin()) {\n\t\t\treturn\n\t\t}\n\n\t\tif (event.data) {\n\t\t\tthis.getLogger().log(`get from ${event.origin}`, {\n\t\t\t\tdata: event.data,\n\t\t\t})\n\n\t\t\tconst tmp = event.data.split(':')\n\n\t\t\tconst cmd: { id: string; args: any } = {\n\t\t\t\tid: tmp[0],\n\t\t\t\targs: tmp.slice(1).join(':'),\n\t\t\t}\n\n\t\t\tif (cmd.args) {\n\t\t\t\tcmd.args = JSON.parse(cmd.args)\n\t\t\t}\n\n\t\t\tif (this.#callbackPromises.has(cmd.id)) {\n\t\t\t\tconst promise = this.#callbackPromises.get(cmd.id) as PromiseHandlers\n\t\t\t\tif (promise.timeoutId) {\n\t\t\t\t\tclearTimeout(promise.timeoutId)\n\t\t\t\t}\n\n\t\t\t\tthis.#callbackPromises.delete(cmd.id)\n\n\t\t\t\tpromise.resolve(cmd.args)\n\t\t\t\t// promise.reject(cmd.args) ////\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Storing a promise for a message from the parent window\n\t *\n\t * @param promiseHandler\n\t * @private\n\t *\n\t * @memo We don't use Symbol here, because we need to pass it to the parent and then find and restore it.\n\t */\n\t#setCallbackPromise(promiseHandler: PromiseHandlers): string {\n\t\tconst key = Text.getUniqId()\n\t\tthis.#callbackPromises.set(key, promiseHandler)\n\t\treturn key\n\t}\n}\n","import { B24LangList } from '../core/language/list'\nimport type { B24FrameQueryParams, MessageInitData } from '../types/auth'\n\n/**\n * Application Frame Data Manager\n */\nexport class AppFrame {\n\t#domain: string = ''\n\t#protocol: boolean = true\n\t#appSid: null | string = null\n\t#path: null | string = null\n\t#lang: null | string = null\n\n\tconstructor(queryParams: B24FrameQueryParams) {\n\t\tif (queryParams.DOMAIN) {\n\t\t\tthis.#domain = queryParams.DOMAIN\n\t\t\tthis.#domain = this.#domain.replace(/:(80|443)$/, '')\n\t\t}\n\n\t\tthis.#protocol = queryParams.PROTOCOL === true\n\n\t\tif (queryParams.LANG) {\n\t\t\tthis.#lang = queryParams.LANG\n\t\t}\n\n\t\tif (queryParams.APP_SID) {\n\t\t\tthis.#appSid = queryParams.APP_SID\n\t\t}\n\t}\n\n\t/**\n\t * Initializes the data received from the parent window message.\n\t * @param data\n\t */\n\tinitData(data: MessageInitData): AppFrame {\n\t\tif (!this.#domain) {\n\t\t\tthis.#domain = data.DOMAIN\n\t\t}\n\n\t\tif (!this.#path) {\n\t\t\tthis.#path = data.PATH\n\t\t}\n\n\t\tif (!this.#lang) {\n\t\t\tthis.#lang = data.LANG\n\t\t}\n\n\t\tthis.#protocol = Number.parseInt(data.PROTOCOL) === 1\n\t\tthis.#domain = this.#domain.replace(/:(80|443)$/, '')\n\n\t\treturn this\n\t}\n\n\t/**\n\t * Returns the sid of the application relative to the parent window like this `9c33468728e1d2c8c97562475edfd96`\n\t */\n\tgetAppSid(): string {\n\t\tif (null === this.#appSid) {\n\t\t\tthrow new Error(`Not init appSid`)\n\t\t}\n\n\t\treturn this.#appSid\n\t}\n\n\t/**\n\t * Get the account address BX24 (https://name.bitrix24.com)\n\t */\n\tgetTargetOrigin(): string {\n\t\treturn `${this.#protocol ? 'https' : 'http'}://${this.#domain}`\n\t}\n\n\t/**\n\t * Get the account address BX24 with Path (https://name.bitrix24.com/rest)\n\t */\n\tgetTargetOriginWithPath(): string {\n\t\treturn this.getTargetOrigin() + (this.#path ?? '')\n\t}\n\n\t/**\n\t * Returns the localization of the B24 interface\n\t * @return {B24LangList} - default B24LangList.en\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-get-lang.html\n\t */\n\tgetLang(): B24LangList {\n\t\treturn (this.#lang as B24LangList) || B24LangList.en\n\t}\n}\n","import { AppFrame } from './frame'\nimport { MessageManager, MessageCommands } from './message'\nimport type {\n\tAuthActions,\n\tAuthData,\n\tRefreshAuthData,\n\tMessageInitData,\n} from '../types/auth'\n\n/**\n * Authorization Manager\n */\nexport class AuthManager implements AuthActions {\n\t#accessToken: null | string = null\n\t#refreshId: null | string = null\n\t#authExpires: number = 0\n\t#memberId: null | string = null\n\n\t#isAdmin: boolean = false\n\n\t#appFrame: AppFrame\n\t#messageManager: MessageManager\n\n\tconstructor(appFrame: AppFrame, messageManager: MessageManager) {\n\t\tthis.#appFrame = appFrame\n\t\tthis.#messageManager = messageManager\n\t}\n\n\t/**\n\t * Initializes the data received from the parent window message.\n\t * @param data\n\t */\n\tinitData(data: MessageInitData): AuthManager {\n\t\tif (data.AUTH_ID) {\n\t\t\tthis.#accessToken = data.AUTH_ID\n\t\t\tthis.#refreshId = data.REFRESH_ID\n\t\t\tthis.#authExpires =\n\t\t\t\tDate.now() + Number.parseInt(data.AUTH_EXPIRES) * 1_000\n\n\t\t\tthis.#isAdmin = data.IS_ADMIN\n\t\t\tthis.#memberId = data.MEMBER_ID || ''\n\t\t}\n\n\t\treturn this\n\t}\n\n\t/**\n\t * Returns authorization data\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-functions/bx24-get-auth.html\n\t */\n\tgetAuthData(): false | AuthData {\n\t\treturn this.#authExpires > Date.now()\n\t\t\t? ({\n\t\t\t\t\taccess_token: this.#accessToken,\n\t\t\t\t\trefresh_token: this.#refreshId,\n\t\t\t\t\texpires_in: this.#authExpires,\n\t\t\t\t\tdomain: this.#appFrame.getTargetOrigin(),\n\t\t\t\t\tmember_id: this.#memberId,\n\t\t\t\t} as AuthData)\n\t\t\t: false\n\t}\n\n\t/**\n\t * Updates authorization data through the parent window\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-functions/bx24-refresh-auth.html\n\t */\n\tasync refreshAuth(): Promise<AuthData> {\n\t\treturn this.#messageManager\n\t\t\t.send(MessageCommands.refreshAuth, {})\n\t\t\t.then((data: RefreshAuthData) => {\n\t\t\t\tthis.#accessToken = data.AUTH_ID\n\t\t\t\tthis.#refreshId = data.REFRESH_ID\n\t\t\t\tthis.#authExpires =\n\t\t\t\t\tDate.now() + Number.parseInt(data.AUTH_EXPIRES) * 1_000\n\n\t\t\t\treturn Promise.resolve(this.getAuthData() as AuthData)\n\t\t\t})\n\t}\n\n\tgetUniq(prefix: string): string {\n\t\treturn [prefix, this.#memberId || ''].join('_')\n\t}\n\n\t/**\n\t * Determines whether the current user has administrator rights\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-is-admin.html\n\t */\n\tget isAdmin(): boolean {\n\t\treturn this.#isAdmin\n\t}\n}\n","import { MessageManager, MessageCommands } from './message'\nimport useScrollSize from '../tools/scroll-size'\n\n/**\n * Parent window manager\n *\n * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/\n */\nexport class ParentManager {\n\t#messageManager: MessageManager\n\n\tconstructor(messageManager: MessageManager) {\n\t\tthis.#messageManager = messageManager\n\t}\n\n\t/**\n\t * The method closes the open modal window with the application\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-close-application.html\n\t */\n\tasync closeApplication(): Promise<void> {\n\t\treturn this.#messageManager.send(MessageCommands.closeApplication, {\n\t\t\t/**\n\t\t\t * @memo There is no point - everything will be closed, and timeout will not be able to do anything\n\t\t\t */\n\t\t\tisSafely: false,\n\t\t})\n\t}\n\n\t/**\n\t * Sets the size of the frame containing the application to the size of the frame's content.\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-fit-window.html\n\t *\n\t * @memo in certain situations it may not be executed (placement of the main window after installing the application), in this case isSafely mode will work\n\t */\n\tasync fitWindow(): Promise<any> {\n\t\tconst width = '100%'\n\t\tconst height = this.getScrollSize().scrollHeight\n\n\t\treturn this.#messageManager.send(MessageCommands.resizeWindow, {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tisSafely: true,\n\t\t})\n\t}\n\n\t/**\n\t * Sets the size of the frame containing the application to the size of the frame's content.\n\t *\n\t * @param {number} width\n\t * @param {number} height\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-resize-window.html\n\t *\n\t * @memo in certain situations it may not be executed, in this case isSafely mode will be triggered\n\t */\n\tasync resizeWindow(width: number, height: number): Promise<void> {\n\t\tif (width > 0 && height > 0) {\n\t\t\treturn this.#messageManager.send(MessageCommands.resizeWindow, {\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tisSafely: true,\n\t\t\t})\n\t\t}\n\n\t\treturn Promise.reject(\n\t\t\tnew Error(`Wrong width:number = ${width} or height:number = ${height}`)\n\t\t)\n\t}\n\n\t/**\n\t * Automatically resize `document.body` of frame with application according to frame content dimensions\n\t * If you pass appNode, the height will be calculated relative to it\n\t *\n\t * @param {HTMLElement|null} appNode\n\t * @param {number} minHeight\n\t * @param {number} minWidth\n\t *\n\t * @return {Promise<void>}\n\t */\n\tasync resizeWindowAuto(\n\t\tappNode: null | HTMLElement = null,\n\t\tminHeight: number = 0,\n\t\tminWidth: number = 0\n\t): Promise<void> {\n\t\tconst body = document.body\n\t\t//const html = document.documentElement\n\n\t\tlet width = Math.max(\n\t\t\tbody.scrollWidth,\n\t\t\tbody.offsetWidth\n\n\t\t\t//html.clientWidth,\n\t\t\t//html.scrollWidth,\n\t\t\t//html.offsetWidth\n\t\t)\n\n\t\tif (minWidth > 0) {\n\t\t\twidth = Math.max(minWidth, width)\n\t\t}\n\n\t\tlet height = Math.max(\n\t\t\tbody.scrollHeight,\n\t\t\tbody.offsetHeight\n\n\t\t\t//html.clientHeight,\n\t\t\t//html.scrollHeight,\n\t\t\t//html.offsetHeight\n\t\t)\n\n\t\tif (appNode) {\n\t\t\theight = Math.max(appNode.scrollHeight, appNode.offsetHeight)\n\t\t}\n\n\t\tif (minHeight > 0) {\n\t\t\theight = Math.max(minHeight, height)\n\t\t}\n\n\t\treturn this.resizeWindow(width, height)\n\t}\n\n\t/**\n\t * This function returns the inner dimensions of the application frame\n\t *\n\t * @return {Promise<{scrollWidth: number; scrollHeight: number}>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-get-scroll-size.html\n\t */\n\tgetScrollSize(): {\n\t\tscrollWidth: number\n\t\tscrollHeight: number\n\t} {\n\t\treturn useScrollSize()\n\t}\n\n\t/**\n\t * Scrolls the parent window\n\t *\n\t * @param {number} scroll should specify the vertical scrollbar position (0 - scroll to the very top)\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-scroll-parent-window.html\n\t */\n\tasync scrollParentWindow(scroll: number): Promise<void> {\n\t\tif (!Number.isInteger(scroll)) {\n\t\t\treturn Promise.reject(new Error('Wrong scroll number'))\n\t\t}\n\n\t\tif (scroll < 0) {\n\t\t\tscroll = 0\n\t\t}\n\n\t\treturn this.#messageManager.send(MessageCommands.setScroll, {\n\t\t\tscroll,\n\t\t\tisSafely: true,\n\t\t})\n\t}\n\n\t/**\n\t * Reload the page with the application (the whole page, not just the frame).\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-reload-window.html\n\t */\n\tasync reloadWindow(): Promise<void> {\n\t\treturn this.#messageManager.send(MessageCommands.reloadWindow, {\n\t\t\tisSafely: true,\n\t\t})\n\t}\n\n\t/**\n\t * Set Page Title\n\t *\n\t * @param {string} title\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-set-title.html\n\t */\n\tasync setTitle(title: string): Promise<void> {\n\t\treturn this.#messageManager.send(MessageCommands.setTitle, {\n\t\t\ttitle: title.toString(),\n\t\t\tisSafely: true,\n\t\t})\n\t}\n\n\t/**\n\t * Initiates a call via internal communication\n\t *\n\t * @param {number} userId The identifier of the account user\n\t * @param {boolean} isVideo true - video call, false - audio call. Optional parameter.\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-im-call-to.html\n\t */\n\tasync imCallTo(userId: number, isVideo: boolean = true): Promise<void> {\n\t\treturn this.#messageManager.send(MessageCommands.imCallTo, {\n\t\t\tuserId,\n\t\t\tvideo: isVideo,\n\t\t\tisSafely: true,\n\t\t})\n\t}\n\n\t/**\n\t * Makes a call to the phone number\n\t *\n\t * @param {string} phone Phone number. The number can be in the format: `+44 20 1234 5678` or `x (xxx) xxx-xx-xx`\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-im-phone-to.html\n\t */\n\tasync imPhoneTo(phone: string): Promise<void> {\n\t\treturn this.#messageManager.send(MessageCommands.imPhoneTo, {\n\t\t\tphone,\n\t\t\tisSafely: true,\n\t\t})\n\t}\n\n\t/**\n\t * Opens the messenger window\n\t * userId or chatXXX - chat, where XXX is the chat identifier, which can simply be a number.\n\t * sgXXX - group chat, where XXX is the social network group number (the chat must be enabled in this group).\n\t *\n\t * XXXX** - open line, where XXX is the code obtained via the Rest method imopenlines.network.join.\n\t *\n\t * If nothing is passed, the chat interface will open with the last opened dialog.\n\t *\n\t * @param {number|`chat${number}`|`sg${number}`|`imol|${number}`|undefined} dialogId\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-im-open-messenger.html\n\t * @link https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=93&LESSON_ID=20152&LESSON_PATH=7657.7883.8025.20150.20152\n\t *\n\t */\n\tasync imOpenMessenger(\n\t\tdialogId:\n\t\t\t| number\n\t\t\t| `chat${number}`\n\t\t\t| `sg${number}`\n\t\t\t| `imol|${number}`\n\t\t\t| undefined\n\t): Promise<void> {\n\t\treturn this.#messageManager.send(MessageCommands.imOpenMessenger, {\n\t\t\tdialogId: dialogId,\n\t\t\tisSafely: true,\n\t\t})\n\t}\n\n\t/**\n\t * Opens the history window\n\t * Identifier of the dialog:\n\t *\n\t * userId or chatXXX - chat, where XXX is the chat identifier, which can simply be a number.\n\t * imol|XXXX - open line, where XXX is the session number of the open line.\n\t *\n\t * @param {number|`chat${number}`|`imol|${number}`} dialogId\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-im-open-history.html\n\t */\n\tasync imOpenHistory(\n\t\tdialogId: number | `chat${number}` | `imol|${number}`\n\t): Promise<void> {\n\t\treturn this.#messageManager.send(MessageCommands.imOpenHistory, {\n\t\t\tdialogId: dialogId,\n\t\t\tisSafely: true,\n\t\t})\n\t}\n}\n","import { MessageManager, MessageCommands } from './message'\nimport type { MessageInitData } from '../types/auth'\n\n/**\n * Manager for working with application settings via communication with the parent window\n *\n * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/options/index.html\n */\nexport class OptionsManager {\n\t#messageManager: MessageManager\n\t#appOptions: null | Record<string, any> = null\n\t#userOptions: null | Record<string, any> = null\n\n\tconstructor(messageManager: MessageManager) {\n\t\tthis.#messageManager = messageManager\n\t}\n\n\t/**\n\t * Initializes the data received from the parent window message.\n\t * @param data\n\t */\n\tinitData(data: MessageInitData): OptionsManager {\n\t\tif (data.APP_OPTIONS) {\n\t\t\tthis.#appOptions = data.APP_OPTIONS as Record<string, any>\n\t\t}\n\n\t\tif (data.USER_OPTIONS) {\n\t\t\tthis.#userOptions = data.USER_OPTIONS as Record<string, any>\n\t\t}\n\n\t\treturn this\n\t}\n\n\t/**\n\t * Getting application option\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/options/bx24-app-option-get.html\n\t */\n\tappGet(option: string): any {\n\t\tif (this.#appOptions && !!this.#appOptions[option]) {\n\t\t\treturn this.#appOptions[option]\n\t\t}\n\n\t\tthrow new Error(`app.option.${option} not set`)\n\t}\n\n\t/**\n\t * Updates application data through the parent window\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/options/bx24-app-option-set.html\n\t */\n\tasync appSet(option: string, value: any): Promise<void> {\n\t\tif (!this.#appOptions) {\n\t\t\tthis.#appOptions = []\n\t\t}\n\n\t\tthis.#appOptions[option] = value\n\n\t\treturn this.#sendParentMessage(\n\t\t\tMessageCommands.setAppOption,\n\t\t\toption,\n\t\t\tthis.#appOptions[option]\n\t\t)\n\t}\n\n\t/**\n\t * Getting user option\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/options/bx24-user-option-get.html\n\t */\n\tuserGet(option: string): any {\n\t\tif (this.#userOptions && !!this.#userOptions[option]) {\n\t\t\treturn this.#userOptions[option]\n\t\t}\n\n\t\tthrow new Error(`user.option.${option} not set`)\n\t}\n\n\t/**\n\t * Updates user data through the parent window\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/options/bx24-user-option-set.html\n\t */\n\tasync userSet(option: string, value: any): Promise<void> {\n\t\tif (!this.#appOptions) {\n\t\t\tthis.#appOptions = []\n\t\t}\n\n\t\tif (!this.#appOptions[option]) {\n\t\t\tthis.#appOptions[option] = null\n\t\t}\n\n\t\t// @ts-ignore\n\t\tthis.#userOptions[option] = value\n\n\t\treturn this.#sendParentMessage(\n\t\t\tMessageCommands.setUserOption,\n\t\t\toption,\n\t\t\t// @ts-ignore\n\t\t\tthis.#userOptions[option]\n\t\t)\n\t}\n\n\tasync #sendParentMessage(\n\t\tcommand: string,\n\t\toption: string,\n\t\tvalue: any\n\t): Promise<void> {\n\t\treturn this.#messageManager\n\t\t\t.send(command, {\n\t\t\t\tname: option,\n\t\t\t\tvalue: value,\n\t\t\t\tisSafely: true,\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\treturn Promise.resolve()\n\t\t\t})\n\t}\n}\n","import { MessageManager, MessageCommands } from './message'\nimport type { NumberString } from '../types/common'\n\nexport type SelectedUser = {\n\t/**\n\t * user identifier\n\t */\n\tid: NumberString\n\n\t/**\n\t * formatted username\n\t */\n\tname: string\n\n\tphoto: string\n\n\tposition: string\n\n\turl: string\n\n\t/**\n\t * The flag indicates that the selected user is a subordinate of the current user\n\t */\n\tsub: boolean\n\n\t/**\n\t * The flag indicates that the selected user is the manager of the current user\n\t */\n\tsup: boolean\n}\n\nexport type SelectedAccess = {\n\t/**\n\t * access permission identifier. Examples of identifiers:\n\t * - U1 — user with identifier 1\n\t * - IU1 — employees with identifier 1\n\t * - DR2 — all department and subdepartment employees with identifier 2\n\t * - D6 — all department employees with identifier 6\n\t * - G2 — group with identifier 2 (all visitors)\n\t * - SG4 — social network group with identifier 4\n\t * - AU — all authorized users\n\t * - CR — current user\n\t */\n\tid:\n\t\t| `AU`\n\t\t| `CR`\n\t\t| `U${number}`\n\t\t| `IU${number}`\n\t\t| `DR${number}`\n\t\t| `D${number}`\n\t\t| `G${number}`\n\t\t| `SG${number}`\n\n\t/**\n\t * name of the access permission\n\t */\n\tname: string\n}\n\nexport type SelectCRMParamsEntityType =\n\t| 'lead'\n\t| 'contact'\n\t| 'company'\n\t| 'deal'\n\t| 'quote'\n\nexport type SelectCRMParamsValue = {\n\tlead?: number[]\n\tcontact?: number[]\n\tcompany?: number[]\n\tdeal?: number[]\n\tquote?: number[]\n}\n\nexport type SelectCRMParams = {\n\t/**\n\t * Which types of objects to display in the dialog. Possible values:\n\t * - lead — Leads\n\t * - contact — Contacts\n\t * - company — Companies\n\t * - deal — Deals\n\t * - quote — Estimates\n\t */\n\tentityType: SelectCRMParamsEntityType[]\n\n\t/**\n\t * Whether multiple objects can be selected. Default is `false`\n\t */\n\tmultiple: boolean\n\n\t/**\n\t * Which objects to initially add to the selected in the dialog. Works only if `multiple = true`\n\t */\n\tvalue?: SelectCRMParamsValue\n}\n\nexport type SelectedCRMEntity = {\n\tid: string\n\ttype: SelectCRMParamsEntityType\n\tplace: string\n\ttitle: string\n\tdesc: string\n\turl: string\n}\n\nexport type SelectedCRM = {\n\tlead?: (SelectedCRMEntity & { id: `L_${number}` })[]\n\tcontact?: (SelectedCRMEntity & { id: `C_${number}`; image: string })[]\n\tcompany?: (SelectedCRMEntity & { id: `CO_${number}`; image: string })[]\n\tdeal?: (SelectedCRMEntity & { id: `D_${number}` })[]\n\tquote?: (SelectedCRMEntity & { id: `Q_${number}` })[]\n}\n\n/**\n * Select dialog manager\n *\n * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-dialogues/index.html\n */\nexport class DialogManager {\n\t#messageManager: MessageManager\n\n\tconstructor(messageManager: MessageManager) {\n\t\tthis.#messageManager = messageManager\n\t}\n\n\t/**\n\t * Method displays the standard single user selection dialog\n\t * It only shows company employees\n\t *\n\t * @return {Promise<null|SelectedUser>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-dialogues/bx24-select-user.html\n\t */\n\tasync selectUser(): Promise<null | SelectedUser> {\n\t\treturn this.#messageManager.send(MessageCommands.selectUser, {\n\t\t\tmult: false,\n\t\t})\n\t}\n\n\t/**\n\t * Method displays the standard multiple user selection dialog\n\t * It only shows company employees\n\t *\n\t * @return {Promise<SelectedUser[]>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-dialogues/bx24-select-users.html\n\t */\n\tasync selectUsers(): Promise<SelectedUser[]> {\n\t\treturn this.#messageManager.send(MessageCommands.selectUser, {\n\t\t\tmult: true,\n\t\t})\n\t}\n\n\t/**\n\t * @deprecated\n\t * Method displays a standard access permission selection dialog\n\t *\n\t * @param {string[]} blockedAccessPermissions\n\t * @return {Promise<SelectedAccess[]>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-dialogues/bx24-select-access.html\n\t */\n\tasync selectAccess(\n\t\tblockedAccessPermissions: string[] = []\n\t): Promise<SelectedAccess[]> {\n\t\tconsole.warn(`@deprecated selectAccess`)\n\t\treturn this.#messageManager.send(MessageCommands.selectAccess, {\n\t\t\tvalue: blockedAccessPermissions,\n\t\t})\n\t}\n\n\t/**\n\t * @deprecated\n\t * Method invokes the system dialog for selecting a CRM entity\n\t *\n\t * @param {SelectCRMParams} params\n\t * @return {Promise<SelectedCRM>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-dialogues/bx24-select-crm.html\n\t */\n\tasync selectCRM(params?: SelectCRMParams): Promise<SelectedCRM> {\n\t\tconsole.warn(`@deprecated selectCRM`)\n\t\treturn this.#messageManager.send(MessageCommands.selectCRM, {\n\t\t\tentityType: params?.entityType,\n\t\t\tmultiple: params?.multiple,\n\t\t\tvalue: params?.value,\n\t\t})\n\t}\n}\n","import { AppFrame } from './frame'\nimport { MessageManager, MessageCommands } from './message'\nimport type { StatusClose } from '../types/slider'\n\n/**\n * Sliders Manager\n */\nexport class SliderManager {\n\t#appFrame: AppFrame\n\t#messageManager: MessageManager\n\n\tconstructor(appFrame: AppFrame, messageManager: MessageManager) {\n\t\tthis.#appFrame = appFrame\n\t\tthis.#messageManager = messageManager\n\t}\n\n\t/**\n\t * Returns the URL relative to the domain name and path\n\t */\n\tgetUrl(path: string = '/'): URL {\n\t\treturn new URL(path, this.#appFrame.getTargetOrigin())\n\t}\n\n\t/**\n\t * Get the account address BX24\n\t */\n\tgetTargetOrigin(): string {\n\t\treturn this.#appFrame.getTargetOrigin()\n\t}\n\n\t/**\n\t * When the method is called, a pop-up window with the application frame will be opened.\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-open-application.html\n\t */\n\tasync openSliderAppPage(params: any = {}): Promise<any> {\n\t\treturn this.#messageManager.send(MessageCommands.openApplication, params)\n\t}\n\n\t/**\n\t * The method closes the open modal window with the application\n\t *\n\t * @return {Promise<void>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-close-application.html\n\t */\n\tasync closeSliderAppPage(): Promise<void> {\n\t\treturn this.#messageManager.send(MessageCommands.closeApplication, {\n\t\t\t/**\n\t\t\t * @memo There is no point - everything will be closed, and timeout will not be able to do anything\n\t\t\t */\n\t\t\tisSafely: false,\n\t\t})\n\t}\n\n\t/**\n\t * Defines the base path for width sampling.\n\t *\n\t * @param width\n\t * @private\n\t */\n\t#getBaseUrlByWidth(width: number = 1640): string {\n\t\tif (width > 0) {\n\t\t\t// region Init baseUrl by Width ////\n\t\t\tif (width > 1200 && width <= 1640) {\n\t\t\t\treturn '/crm/type/0/details/0/../../../../..'\n\t\t\t} else if (width > 950 && width <= 1200) {\n\t\t\t\treturn '/company/personal/user/0/groups/create/../../../../../..'\n\t\t\t} else if (width > 900 && width <= 950) {\n\t\t\t\treturn '/crm/company/requisite/0/../../../..'\n\t\t\t} else if (width <= 900) {\n\t\t\t\treturn '/workgroups/group/0/card/../../../..'\n\t\t\t} else {\n\t\t\t\t// 1640 /////\n\t\t\t\treturn '/crm/deal/../..'\n\t\t\t}\n\t\t\t// endregion ////\n\t\t} else {\n\t\t\treturn '/crm/deal/../..'\n\t\t}\n\t}\n\n\t/**\n\t * Opens the specified path inside the portal in the slider.\n\t * @param {URL} url\n\t * @param {number} width - Number in the range from 1640 to 1200, from 1200 to 950, from 950 to 900, from 900 ...\n\t * @return {Promise<StatusClose>}\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-open-path.html\n\t * @memo /^\\/(crm\\/(deal|lead|contact|company|type)|marketplace|company\\/personal\\/user\\/[0-9]+|workgroups\\/group\\/[0-9]+)\\//\n\t */\n\tasync openPath(url: URL, width: number = 1640): Promise<StatusClose> {\n\t\tconst openSliderUrl = new URL(url)\n\t\topenSliderUrl.searchParams.set('IFRAME', 'Y')\n\t\topenSliderUrl.searchParams.set('IFRAME_TYPE', 'SIDE_SLIDER')\n\n\t\t/**\n\t\t * We are trying to open the slider\n\t\t */\n\t\treturn this.#messageManager\n\t\t\t.send(MessageCommands.openPath, {\n\t\t\t\tpath: [\n\t\t\t\t\tthis.#getBaseUrlByWidth(width),\n\t\t\t\t\topenSliderUrl.pathname,\n\t\t\t\t\topenSliderUrl.search,\n\t\t\t\t].join(''),\n\t\t\t})\n\t\t\t.then((response) => {\n\t\t\t\t/**\n\t\t\t\t * Error handling\n\t\t\t\t */\n\t\t\t\tif (response?.result === 'error') {\n\t\t\t\t\t/**\n\t\t\t\t\t * If the error is related to using a mobile device, we will open it in a new tab\n\t\t\t\t\t * Let's wait 5 minutes - and return the promise to open and not close\n\t\t\t\t\t */\n\t\t\t\t\tif (response?.errorCode === 'METHOD_NOT_SUPPORTED_ON_DEVICE') {\n\t\t\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\t\t\tconst windowObjectReference = window.open(url, '_blank')\n\t\t\t\t\t\t\tif (!windowObjectReference) {\n\t\t\t\t\t\t\t\treject(new Error('Error open window'))\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet iterator = 0\n\t\t\t\t\t\t\t// 5 min ////\n\t\t\t\t\t\t\tconst iteratorMax = 1_000 * 60 * 5\n\t\t\t\t\t\t\tconst waitCloseWindow = window.setInterval(() => {\n\t\t\t\t\t\t\t\titerator = iterator + 1\n\n\t\t\t\t\t\t\t\tif (windowObjectReference.closed) {\n\t\t\t\t\t\t\t\t\tclearInterval(waitCloseWindow)\n\t\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\t\tisOpenAtNewWindow: true,\n\t\t\t\t\t\t\t\t\t\tisClose: true,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t} else if (iterator > iteratorMax) {\n\t\t\t\t\t\t\t\t\tclearInterval(waitCloseWindow)\n\t\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\t\tisOpenAtNewWindow: true,\n\t\t\t\t\t\t\t\t\t\tisClose: false,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 1_000)\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * If the error is different, we will return it.\n\t\t\t\t\t\t */\n\t\t\t\t\t\treturn Promise.reject(new Error(response?.errorCode))\n\t\t\t\t\t}\n\t\t\t\t} else if (response?.result === 'close') {\n\t\t\t\t\t/**\n\t\t\t\t\t * Processing a successful close\n\t\t\t\t\t */\n\t\t\t\t\treturn Promise.resolve({\n\t\t\t\t\t\tisOpenAtNewWindow: false,\n\t\t\t\t\t\tisClose: true,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\treturn Promise.resolve({\n\t\t\t\t\tisOpenAtNewWindow: false,\n\t\t\t\t\tisClose: false,\n\t\t\t\t})\n\t\t\t})\n\t}\n\n\t/**\n\t * @deprecated\n\t * @param params\n\t */\n\tasync showAppForm(params: any): Promise<void> {\n\t\tconsole.warn(`@deprecated showAppForm`)\n\t\treturn this.#messageManager.send(MessageCommands.showAppForm, {\n\t\t\tparams: params,\n\t\t\tisSafely: true,\n\t\t})\n\t}\n}\n","import type { MessageInitData } from '../types/auth'\n\n/**\n * Placement Manager\n *\n * @see https://apidocs.bitrix24.com/api-reference/widgets/ui-interaction/index.html\n * @see https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=99&CHAPTER_ID=02535&LESSON_PATH=8771.5380.2535\n */\nexport class PlacementManager {\n\t#title: string = ''\n\t#options: object = {}\n\n\tconstructor() {}\n\n\t/**\n\t * Initializes the data received from the parent window message.\n\t * @param data\n\t */\n\tinitData(data: MessageInitData): PlacementManager {\n\t\tthis.#title = data.PLACEMENT || 'DEFAULT'\n\t\tconst options = data.PLACEMENT_OPTIONS\n\n\t\tthis.#options = Object.freeze(options)\n\n\t\treturn this\n\t}\n\n\tget title(): string {\n\t\treturn this.#title\n\t}\n\n\tget isDefault(): boolean {\n\t\treturn this.title === 'DEFAULT'\n\t}\n\n\tget options(): any {\n\t\treturn this.#options\n\t}\n\n\tget isSliderMode(): boolean {\n\t\treturn this.options?.IFRAME === 'Y'\n\t}\n}\n","import { LoggerBrowser } from '../logger/browser'\nimport { AbstractB24 } from '../core/abstract-b24'\nimport Http from '../core/http/controller'\nimport { AppFrame } from './frame'\nimport { MessageManager, MessageCommands } from './message'\nimport { B24LangList } from '../core/language/list'\nimport { AuthManager } from './auth'\nimport { ParentManager } from './parent'\nimport { OptionsManager } from './options'\nimport { DialogManager } from './dialog'\nimport { SliderManager } from './slider'\nimport { PlacementManager } from './placement'\nimport type { TypeB24 } from '../types/b24'\nimport type { AuthActions } from '../types/auth'\n\nimport type { MessageInitData, B24FrameQueryParams } from '../types/auth'\n/**\n * B24 Manager. Replacement api.bitrix24.com\n *\n * @link https://api.bitrix24.com/api/v1/\n * @see /bitrix/js/rest/applayout.js\n */\nexport class B24Frame extends AbstractB24 implements TypeB24 {\n\t#isInstallMode: boolean = false\n\t#isFirstRun: boolean = false\n\n\treadonly #appFrame: AppFrame\n\treadonly #messageManager: MessageManager\n\treadonly #authManager: AuthManager\n\treadonly #parentManager: ParentManager\n\treadonly #optionsManager: OptionsManager\n\treadonly #dialogManager: DialogManager\n\treadonly #sliderManager: SliderManager\n\treadonly #placementManager: PlacementManager\n\n\t// region Init ////\n\tconstructor(queryParams: B24FrameQueryParams) {\n\t\tsuper()\n\n\t\tthis.#appFrame = new AppFrame(queryParams)\n\n\t\tthis.#messageManager = new MessageManager(this.#appFrame)\n\t\tthis.#messageManager.subscribe()\n\n\t\tthis.#authManager = new AuthManager(this.#appFrame, this.#messageManager)\n\t\tthis.#parentManager = new ParentManager(this.#messageManager)\n\t\tthis.#optionsManager = new OptionsManager(this.#messageManager)\n\t\tthis.#dialogManager = new DialogManager(this.#messageManager)\n\t\tthis.#sliderManager = new SliderManager(\n\t\t\tthis.#appFrame,\n\t\t\tthis.#messageManager\n\t\t)\n\t\tthis.#placementManager = new PlacementManager()\n\n\t\tthis._isInit = false\n\t}\n\n\tpublic override setLogger(logger: LoggerBrowser): void {\n\t\tsuper.setLogger(logger)\n\t\tthis.#messageManager.setLogger(this.getLogger())\n\t}\n\n\tget isFirstRun(): boolean {\n\t\tthis._ensureInitialized()\n\t\treturn this.#isFirstRun\n\t}\n\n\tget isInstallMode(): boolean {\n\t\tthis._ensureInitialized()\n\t\treturn this.#isInstallMode\n\t}\n\n\tget parent(): ParentManager {\n\t\tthis._ensureInitialized()\n\t\treturn this.#parentManager\n\t}\n\n\toverride get auth(): AuthActions {\n\t\tthis._ensureInitialized()\n\t\treturn this.#authManager\n\t}\n\n\tget slider(): SliderManager {\n\t\tthis._ensureInitialized()\n\t\treturn this.#sliderManager\n\t}\n\n\tget placement(): PlacementManager {\n\t\tthis._ensureInitialized()\n\t\treturn this.#placementManager\n\t}\n\n\tget options(): OptionsManager {\n\t\tthis._ensureInitialized()\n\t\treturn this.#optionsManager\n\t}\n\n\tget dialog(): DialogManager {\n\t\tthis._ensureInitialized()\n\t\treturn this.#dialogManager\n\t}\n\n\toverride async init(): Promise<void> {\n\t\treturn this.#messageManager\n\t\t\t.send(MessageCommands.getInitData, {})\n\t\t\t.then((data: MessageInitData) => {\n\t\t\t\tthis.getLogger().log('init data:', data)\n\n\t\t\t\tthis.#appFrame.initData(data)\n\t\t\t\tthis.#authManager.initData(data)\n\t\t\t\tthis.#placementManager.initData(data)\n\t\t\t\tthis.#optionsManager.initData(data)\n\n\t\t\t\tthis.#isInstallMode = data.INSTALL\n\t\t\t\tthis.#isFirstRun = data.FIRST_RUN\n\n\t\t\t\tthis._http = new Http(\n\t\t\t\t\tthis.#appFrame.getTargetOriginWithPath(),\n\t\t\t\t\tthis.#authManager,\n\t\t\t\t\tthis._getHttpOptions()\n\t\t\t\t)\n\n\t\t\t\tthis._isInit = true\n\n\t\t\t\t/**\n\t\t\t\t * @memo Writes the fact of the 1st launch to `app_options`\n\t\t\t\t */\n\t\t\t\tif (this.#isFirstRun) {\n\t\t\t\t\treturn this.#messageManager.send(MessageCommands.setInstall, {\n\t\t\t\t\t\tinstall: true,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\treturn Promise.resolve()\n\t\t\t})\n\t}\n\n\t/**\n\t * Destructor.\n\t * Removes an event subscription\n\t */\n\toverride destroy() {\n\t\tthis.#messageManager.unsubscribe()\n\t\tsuper.destroy()\n\t}\n\t// endregion ////\n\n\t// region Core ////\n\t/**\n\t * Signals that the installer or application setup has finished running.\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/system-functions/bx24-install-finish.html\n\t */\n\tasync installFinish(): Promise<any> {\n\t\tif (!this.isInstallMode) {\n\t\t\treturn Promise.reject(\n\t\t\t\tnew Error(\n\t\t\t\t\t'Application was previously installed. You cannot call installFinish'\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\treturn this.#messageManager.send(MessageCommands.setInstallFinish, {})\n\t}\n\t// endregion ////\n\n\t// region Get ////\n\t/**\n\t * Get the account address BX24 ( https://name.bitrix24.com )\n\t */\n\toverride getTargetOrigin(): string {\n\t\tthis._ensureInitialized()\n\t\treturn this.#appFrame.getTargetOrigin()\n\t}\n\n\t/**\n\t * Get the account address BX24 with Path ( https://name.bitrix24.com/rest )\n\t */\n\toverride getTargetOriginWithPath(): string {\n\t\tthis._ensureInitialized()\n\t\treturn this.#appFrame.getTargetOriginWithPath()\n\t}\n\n\t/**\n\t * Returns the sid of the application relative to the parent window like this `9c33468728e1d2c8c97562475edfd96`\n\t */\n\tgetAppSid(): string {\n\t\tthis._ensureInitialized()\n\t\treturn this.#appFrame.getAppSid()\n\t}\n\n\t/**\n\t * Returns the localization of the B24 interface\n\t *\n\t * @link https://apidocs.bitrix24.com/api-reference/bx24-js-sdk/additional-functions/bx24-get-lang.html\n\t */\n\tgetLang(): B24LangList {\n\t\tthis._ensureInitialized()\n\t\treturn this.#appFrame.getLang()\n\t}\n\t// endregion ////\n}\n","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport type { TypeB24 } from '../types/b24'\n\nexport class UnhandledMatchError extends Error {\n\tconstructor(value: string, ...args: any[]) {\n\t\tsuper(...args)\n\t\tthis.name = 'UnhandledMatchError'\n\t\tthis.message = `Unhandled match value of type ${value}`\n\t\tthis.stack = new Error('for stack').stack\n\t}\n}\n\nexport abstract class AbstractHelper {\n\tprotected _b24: TypeB24\n\tprotected _logger: null | LoggerBrowser = null\n\tprotected _data: any = null\n\n\t// region Init ////\n\tconstructor(b24: TypeB24) {\n\t\tthis._b24 = b24\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t}\n\n\tgetLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\t// endregion ////\n\n\t/**\n\t * Initializes the data received\n\t * @param data\n\t */\n\tasync initData(data: any): Promise<void> {\n\t\tthis.getLogger().log(data)\n\t\treturn Promise.reject(new Error('Rewrite this function'))\n\t}\n\n\tabstract get data(): any\n}\n","import { AbstractHelper } from './abstract-helper'\nimport type { TypeUser } from '../types/b24-helper'\n\nexport class ProfileManager extends AbstractHelper {\n\tprotected override _data: null | TypeUser = null\n\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: TypeUser): Promise<void> {\n\t\tthis._data = data\n\t}\n\n\tget data(): TypeUser {\n\t\tif (null === this._data) {\n\t\t\tthrow new Error('ProfileManager.data not initialized')\n\t\t}\n\n\t\treturn this._data\n\t}\n}\n","import { AbstractHelper } from './abstract-helper'\nimport { StatusDescriptions, type TypeApp } from '../types/b24-helper'\n\nexport class AppManager extends AbstractHelper {\n\tprotected override _data: null | TypeApp = null\n\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: TypeApp): Promise<void> {\n\t\tthis._data = data\n\t}\n\n\tget data(): TypeApp {\n\t\tif (null === this._data) {\n\t\t\tthrow new Error('AppManager.data not initialized')\n\t\t}\n\n\t\treturn this._data\n\t}\n\n\tget statusCode(): string {\n\t\treturn (\n\t\t\tStatusDescriptions[this.data.status as keyof typeof StatusDescriptions] ||\n\t\t\t'Unknown status'\n\t\t)\n\t}\n}\n","import { AbstractHelper } from './abstract-helper'\nimport type { TypePayment } from '../types/b24-helper'\n\nexport class PaymentManager extends AbstractHelper {\n\tprotected override _data: null | TypePayment = null\n\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: TypePayment): Promise<void> {\n\t\tthis._data = data\n\t}\n\n\tget data(): TypePayment {\n\t\tif (null === this._data) {\n\t\t\tthrow new Error('PaymentManager.data not initialized')\n\t\t}\n\n\t\treturn this._data\n\t}\n}\n","import { AbstractHelper } from './abstract-helper'\nimport type { TypeLicense } from '../types/b24-helper'\nimport { RestrictionManagerParamsForEnterprise } from '../types/http'\n\nexport class LicenseManager extends AbstractHelper {\n\tprotected override _data: null | TypeLicense = null\n\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: TypeLicense): Promise<void> {\n\t\tthis._data = data\n\n\t\tthis.makeRestrictionManagerParams()\n\t}\n\n\tget data(): TypeLicense {\n\t\tif (null === this._data) {\n\t\t\tthrow new Error('LicenseManager.data not initialized')\n\t\t}\n\n\t\treturn this._data\n\t}\n\n\t/**\n\t * Set RestrictionManager params by license\n\t * @link https://apidocs.bitrix24.com/api-reference/common/system/app-info.html\n\t */\n\tmakeRestrictionManagerParams(): void {\n\t\tif (!this.data?.license) {\n\t\t\treturn\n\t\t}\n\n\t\tif (this.data.license.includes('ent')) {\n\t\t\tthis.getLogger().log(\n\t\t\t\t`LICENSE ${this.data.license} => up restriction manager params`,\n\t\t\t\tRestrictionManagerParamsForEnterprise\n\t\t\t)\n\n\t\t\tthis._b24\n\t\t\t\t.getHttpClient()\n\t\t\t\t.setRestrictionManagerParams(RestrictionManagerParamsForEnterprise)\n\t\t}\n\t}\n}\n","import { AbstractHelper, UnhandledMatchError } from './abstract-helper'\nimport type { BoolString, ISODate, NumberString } from '../types/common'\nimport type { Currency, CurrencyFormat } from '../types/b24-helper'\nimport Type from '../tools/type'\nimport Text from '../tools/text'\n\ntype CurrencyFormatInit = {\n\tDECIMALS: NumberString\n\tDEC_POINT: string\n\tFORMAT_STRING: string\n\tFULL_NAME: string\n\tHIDE_ZERO: BoolString\n\tTHOUSANDS_SEP?: string\n\tTHOUSANDS_VARIANT: string\n}\n\ntype CurrencyInit = {\n\tAMOUNT: NumberString\n\tAMOUNT_CNT: NumberString\n\tBASE: BoolString\n\tCURRENCY: string\n\tDATE_UPDATE: ISODate\n\tDECIMALS: NumberString\n\tDEC_POINT: string\n\tFORMAT_STRING: string\n\tFULL_NAME: string\n\tLID: string\n\tSORT: NumberString\n\tTHOUSANDS_SEP?: string\n\tLANG?: Record<string, CurrencyFormatInit>\n}\n\ntype CurrencyInitData = {\n\tcurrencyBase: string\n\tcurrencyList: CurrencyInit[]\n}\n\ntype CurrencyData = {\n\tcurrencyBase: string\n\tcurrencyList: Map<string, Currency>\n}\n\nexport class CurrencyManager extends AbstractHelper {\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: CurrencyInitData): Promise<void> {\n\t\tthis._data = {\n\t\t\tcurrencyBase: '?',\n\t\t\tcurrencyList: new Map(),\n\t\t} as CurrencyData\n\n\t\tthis.setBaseCurrency(data.currencyBase)\n\t\tthis.setCurrencyList(data.currencyList)\n\n\t\ttry {\n\t\t\tawait this.loadData()\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error) {\n\t\t\t\tthrow error\n\t\t\t}\n\n\t\t\tconsole.error(error)\n\t\t\tthrow new Error('Failed to load data')\n\t\t}\n\t}\n\n\tasync loadData(): Promise<void> {\n\t\tconst batchRequest: {\n\t\t\tmethod: string\n\t\t\tparams: { id: string }\n\t\t}[] = this.currencyList.map((currencyCode) => {\n\t\t\treturn {\n\t\t\t\tmethod: 'crm.currency.get',\n\t\t\t\tparams: {\n\t\t\t\t\tid: currencyCode,\n\t\t\t\t},\n\t\t\t}\n\t\t})\n\n\t\tif (batchRequest.length === 0) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await this._b24.callBatchByChunk(batchRequest, true)\n\t\t\tconst data = response.getData()\n\n\t\t\t// eslint-disable-next-line unicorn/no-array-for-each\n\t\t\tdata.forEach((row: CurrencyInit) => {\n\t\t\t\tif (typeof row.LANG === 'undefined') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst currencyCode = row.CURRENCY\n\t\t\t\tconst currency = this.data.currencyList.get(currencyCode)\n\t\t\t\tif (typeof currency === 'undefined') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tfor (const [langCode, formatData] of Object.entries(row.LANG)) {\n\t\t\t\t\tcurrency.lang[langCode] = {\n\t\t\t\t\t\tdecimals: Number.parseInt(formatData.DECIMALS),\n\t\t\t\t\t\tdecPoint: formatData.DEC_POINT,\n\t\t\t\t\t\tformatString: formatData.FORMAT_STRING,\n\t\t\t\t\t\tfullName: formatData.FULL_NAME,\n\t\t\t\t\t\tisHideZero: formatData.HIDE_ZERO === 'Y',\n\t\t\t\t\t\tthousandsSep: formatData.THOUSANDS_SEP,\n\t\t\t\t\t\tthousandsVariant: formatData.THOUSANDS_VARIANT,\n\t\t\t\t\t} as CurrencyFormat\n\n\t\t\t\t\tswitch (currency.lang[langCode].thousandsVariant) {\n\t\t\t\t\t\tcase 'N':\n\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = ''\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'D':\n\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = '.'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'C':\n\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = ','\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'S':\n\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = ' '\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'B':\n\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = ' '\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t// case 'OWN': ////\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (!Type.isStringFilled(currency.lang[langCode].thousandsSep)) {\n\t\t\t\t\t\t\t\tcurrency.lang[langCode].thousandsSep = ' '\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t} catch (error) {\n\t\t\tconsole.error(error)\n\t\t}\n\t}\n\n\tget data(): CurrencyData {\n\t\tif (null === this._data) {\n\t\t\tthrow new Error('CurrencyManager.data not initialized')\n\t\t}\n\n\t\treturn this._data\n\t}\n\n\t// region BaseCurrency ////\n\tsetBaseCurrency(currencyBase: string) {\n\t\tthis._data.currencyBase = currencyBase\n\t}\n\n\tget baseCurrency(): string {\n\t\treturn this.data.currencyBase\n\t}\n\t// endregion ////\n\n\t// region CurrencyList ////\n\tsetCurrencyList(list: CurrencyInit[] = []) {\n\t\tthis.data.currencyList.clear()\n\n\t\tfor (const row of list) {\n\t\t\tthis.data.currencyList.set(row.CURRENCY, {\n\t\t\t\tamount: Number.parseFloat(row.CURRENCY),\n\t\t\t\tamountCnt: Number.parseInt(row.AMOUNT_CNT),\n\t\t\t\tisBase: row.BASE === 'Y',\n\t\t\t\tcurrencyCode: row.CURRENCY,\n\t\t\t\tdateUpdate: Text.toDateTime(row.DATE_UPDATE),\n\t\t\t\tdecimals: Number.parseInt(row.DECIMALS),\n\t\t\t\tdecPoint: row.DEC_POINT,\n\t\t\t\tformatString: row.FORMAT_STRING,\n\t\t\t\tfullName: row.FULL_NAME,\n\t\t\t\tlid: row.LID,\n\t\t\t\tsort: Number.parseInt(row.SORT),\n\t\t\t\tthousandsSep: row?.THOUSANDS_SEP || null,\n\t\t\t\tlang: {},\n\t\t\t} as Currency)\n\t\t}\n\t}\n\t// endregion ////\n\n\t// region Info ////\n\tgetCurrencyFullName(currencyCode: string, langCode: string): string {\n\t\tconst currency = this.data.currencyList.get(currencyCode)\n\t\tif (typeof currency === 'undefined') {\n\t\t\tthrow new UnhandledMatchError(currencyCode)\n\t\t}\n\n\t\tlet fullName = currency.fullName\n\n\t\tif (!(typeof langCode === 'undefined')) {\n\t\t\tconst langFormatter = currency.lang[langCode]\n\t\t\tif (!Type.isUndefined(langFormatter)) {\n\t\t\t\tfullName = langFormatter.fullName\n\t\t\t}\n\t\t}\n\n\t\treturn fullName\n\t}\n\n\tgetCurrencyLiteral(currencyCode: string, langCode?: string): string {\n\t\tconst currency = this.data.currencyList.get(currencyCode)\n\t\tif (typeof currency === 'undefined') {\n\t\t\tthrow new UnhandledMatchError(currencyCode)\n\t\t}\n\n\t\tlet formatString = currency.formatString\n\n\t\tif (!(typeof langCode === 'undefined')) {\n\t\t\tconst langFormatter = currency.lang[langCode]\n\t\t\tif (!Type.isUndefined(langFormatter)) {\n\t\t\t\tformatString = langFormatter.formatString\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\tformatString\n\t\t\t\t.replaceAll('&#', '&%')\n\t\t\t\t.replaceAll('#', '')\n\t\t\t\t.replaceAll('&%', '&#')\n\t\t\t\t.trim() || ''\n\t\t)\n\t}\n\n\tget currencyList(): string[] {\n\t\treturn [...this.data.currencyList.keys()]\n\t}\n\t// endregion ////\n\n\t// region Format ////\n\tformat(value: number, currencyCode: string, langCode: string): string {\n\t\tconst currency = this.data.currencyList.get(currencyCode)\n\t\tif (typeof currency === 'undefined') {\n\t\t\tthrow new UnhandledMatchError(currencyCode)\n\t\t}\n\n\t\tconst options = {\n\t\t\tformatString: currency.formatString,\n\t\t\tdecimals: currency.decimals,\n\t\t\tdecPoint: currency.decPoint,\n\t\t\tthousandsSep: currency.thousandsSep,\n\t\t}\n\t\tif (!Type.isStringFilled(options.thousandsSep)) {\n\t\t\toptions.thousandsSep = ''\n\t\t}\n\n\t\tconst langFormatter = currency.lang[langCode]\n\t\tif (!Type.isUndefined(langFormatter)) {\n\t\t\toptions.formatString = langFormatter.formatString\n\t\t\toptions.decimals = langFormatter.decimals\n\t\t\toptions.decPoint = langFormatter.decPoint\n\t\t\toptions.thousandsSep = langFormatter.thousandsSep\n\t\t}\n\n\t\treturn (\n\t\t\toptions.formatString\n\t\t\t\t.replaceAll('&#', '&%')\n\t\t\t\t.replace(\n\t\t\t\t\t'#',\n\t\t\t\t\tText.numberFormat(\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\toptions.decimals,\n\t\t\t\t\t\toptions.decPoint,\n\t\t\t\t\t\toptions.thousandsSep\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.replaceAll('&%', '&#') || ''\n\t\t)\n\t}\n\t// endregion ////\n}\n","import { DateTime } from 'luxon'\nimport { AbstractHelper } from './abstract-helper'\nimport type { TypeB24 } from '../types/b24'\nimport { Result } from '../core/result'\nimport { TypeOption } from '../types/b24-helper'\nimport Type from '../tools/type'\nimport Text from '../tools/text'\n\nexport class OptionsManager extends AbstractHelper {\n\tprotected override _data: Map<string, any>\n\tprotected _type: 'app' | 'user'\n\n\t// region static ////\n\tstatic getSupportTypes(): TypeOption[] {\n\t\treturn [\n\t\t\tTypeOption.NotSet,\n\t\t\tTypeOption.JsonArray,\n\t\t\tTypeOption.JsonObject,\n\t\t\tTypeOption.FloatVal,\n\t\t\tTypeOption.IntegerVal,\n\t\t\tTypeOption.BoolYN,\n\t\t\tTypeOption.StringVal,\n\t\t]\n\t}\n\n\tstatic prepareArrayList(list: any): any[] {\n\t\tif (Type.isArray(list)) {\n\t\t\treturn list\n\t\t}\n\n\t\tif (Type.isObject(list)) {\n\t\t\treturn Object.values(list)\n\t\t}\n\n\t\treturn []\n\t}\n\n\t// endregion ////\n\n\t// region Init ////\n\tconstructor(b24: TypeB24, type: 'app' | 'user') {\n\t\tsuper(b24)\n\t\tthis._type = type\n\t\tthis._data = new Map()\n\t}\n\n\tget data(): Map<string, any> {\n\t\treturn this._data\n\t}\n\n\treset() {\n\t\tthis.data.clear()\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\toverride async initData(data: any): Promise<void> {\n\t\tthis.reset()\n\n\t\tif (Type.isObject(data)) {\n\t\t\tfor (const [key, value] of Object.entries(data)) {\n\t\t\t\tthis.data.set(key, value)\n\t\t\t}\n\t\t}\n\t}\n\n\t// endregion ////\n\n\t// region Get ////\n\tgetJsonArray(key: string, defValue: any[] = []): any[] {\n\t\tif (!this.data.has(key)) {\n\t\t\treturn defValue\n\t\t}\n\n\t\tlet data = this.data.get(key)\n\n\t\ttry {\n\t\t\tdata = JSON.parse(data)\n\n\t\t\tif (!Type.isArray(data) && !Type.isObject(data)) {\n\t\t\t\tdata = defValue\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.getLogger().error(error)\n\t\t\tdata = defValue\n\t\t}\n\n\t\treturn OptionsManager.prepareArrayList(data)\n\t}\n\n\tgetJsonObject(key: string, defValue: object = {}): object {\n\t\tif (!this.data.has(key)) {\n\t\t\treturn defValue\n\t\t}\n\n\t\tlet data = this.data.get(key)\n\n\t\ttry {\n\t\t\tdata = JSON.parse(data)\n\t\t} catch (error) {\n\t\t\tthis.getLogger().error(error)\n\t\t\tdata = defValue\n\t\t}\n\n\t\tif (!Type.isObject(data)) {\n\t\t\tdata = defValue\n\t\t}\n\n\t\treturn data\n\t}\n\n\tgetFloat(key: string, defValue: number = 0.0): number {\n\t\tif (!this.data.has(key)) {\n\t\t\treturn defValue\n\t\t}\n\n\t\treturn Text.toNumber(this.data.get(key))\n\t}\n\n\tgetInteger(key: string, defValue: number = 0): number {\n\t\tif (!this.data.has(key)) {\n\t\t\treturn defValue\n\t\t}\n\n\t\treturn Text.toInteger(this.data.get(key))\n\t}\n\n\tgetBoolYN(key: string, defValue: boolean = true): boolean {\n\t\tif (!this.data.has(key)) {\n\t\t\treturn defValue\n\t\t}\n\n\t\treturn Text.toBoolean(this.data.get(key))\n\t}\n\n\tgetBoolNY(key: string, defValue: boolean = false): boolean {\n\t\tif (!this.data.has(key)) {\n\t\t\treturn defValue\n\t\t}\n\n\t\treturn Text.toBoolean(this.data.get(key))\n\t}\n\n\tgetString(key: string, defValue: string = ''): string {\n\t\tif (!this.data.has(key)) {\n\t\t\treturn defValue\n\t\t}\n\n\t\treturn this.data.get(key).toString()\n\t}\n\n\tgetDate(key: string, defValue: null | DateTime = null): null | DateTime {\n\t\tif (!this.data.has(key)) {\n\t\t\treturn defValue\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = Text.toDateTime(this.data.get(key).toString())\n\t\t\tif (result.isValid) {\n\t\t\t\treturn result\n\t\t\t} else {\n\t\t\t\treturn defValue\n\t\t\t}\n\t\t} catch {\n\t\t\treturn defValue\n\t\t}\n\t}\n\n\t// endregion ////\n\n\t// region Tools ////\n\tencode(value: any): string {\n\t\treturn JSON.stringify(value)\n\t}\n\n\tdecode(data: string, defaultValue: any): any {\n\t\ttry {\n\t\t\tif (data.length > 0) {\n\t\t\t\treturn JSON.parse(data)\n\t\t\t}\n\n\t\t\treturn defaultValue\n\t\t} catch (error) {\n\t\t\tthis.getLogger().warn(error, data)\n\t\t}\n\n\t\treturn defaultValue\n\t}\n\n\t// endregion ////\n\n\t// region Save ////\n\tprotected getMethodSave(): string {\n\t\tswitch (this._type) {\n\t\t\tcase 'app':\n\t\t\t\treturn 'app.option.set'\n\t\t\tcase 'user':\n\t\t\t\treturn 'user.option.set'\n\t\t}\n\t}\n\n\tpublic async save(\n\t\toptions: any,\n\t\toptionsPull?: {\n\t\t\tmoduleId: string\n\t\t\tcommand: string\n\t\t\tparams: any\n\t\t}\n\t): Promise<Result> {\n\t\tconst commands = []\n\t\tcommands.push({\n\t\t\tmethod: this.getMethodSave(),\n\t\t\tparams: {\n\t\t\t\toptions,\n\t\t\t},\n\t\t})\n\n\t\tif (Type.isObject(optionsPull)) {\n\t\t\tcommands.push({\n\t\t\t\tmethod: 'pull.application.event.add',\n\t\t\t\tparams: {\n\t\t\t\t\tCOMMAND: optionsPull?.command,\n\t\t\t\t\tPARAMS: optionsPull?.params,\n\t\t\t\t\tMODULE_ID: optionsPull?.moduleId,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\treturn this._b24.callBatch(commands, true)\n\t}\n\n\t// endregion ////\n}\n","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport Text from '../tools/text'\nimport type { StorageManagerParams, TypeStorageManager } from '../types/pull'\n\nexport class StorageManager implements TypeStorageManager {\n\tprivate _logger: null | LoggerBrowser = null\n\n\tprivate readonly userId: number\n\tprivate readonly siteId: string\n\n\tconstructor(params: StorageManagerParams = {}) {\n\t\tthis.userId = params.userId ? Text.toInteger(params.userId) : 0\n\t\tthis.siteId = params.siteId ?? 'none'\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t}\n\n\tgetLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\n\tset(name: string, value: any): void {\n\t\tif (typeof window.localStorage === 'undefined') {\n\t\t\tthis.getLogger().error(new Error('undefined window.localStorage'))\n\t\t\treturn\n\t\t}\n\n\t\tif (typeof value !== 'string' && value) {\n\t\t\tvalue = JSON.stringify(value)\n\t\t}\n\n\t\twindow.localStorage.setItem(this._getKey(name), value)\n\t}\n\n\tget(name: string, defaultValue: any): any {\n\t\tif (typeof window.localStorage === 'undefined') {\n\t\t\treturn defaultValue || null\n\t\t}\n\n\t\tconst result = window.localStorage.getItem(this._getKey(name))\n\t\tif (result === null) {\n\t\t\treturn defaultValue || null\n\t\t}\n\n\t\treturn JSON.parse(result)\n\t}\n\n\tremove(name: string): void {\n\t\tif (typeof window.localStorage === 'undefined') {\n\t\t\tthis.getLogger().error(new Error('undefined window.localStorage'))\n\t\t\treturn\n\t\t}\n\n\t\treturn window.localStorage.removeItem(this._getKey(name))\n\t}\n\n\tprivate _getKey(name: string): string {\n\t\treturn `@bitrix24/b24jssdk-pull-${this.userId}-${this.siteId}-${name}`\n\t}\n\n\tcompareKey(eventKey: string, userKey: string): boolean {\n\t\treturn eventKey === this._getKey(userKey)\n\t}\n}\n","export class ErrorNotConnected extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t\tthis.name = 'ErrorNotConnected'\n\t}\n}\n\nexport class ErrorTimeout extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message)\n\t\tthis.name = 'ErrorTimeout'\n\t}\n}\n","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport { ErrorNotConnected, ErrorTimeout } from './errors'\nimport Type from '../tools/type'\nimport Text from '../tools/text'\nimport {\n\ttype JsonRpcRequest,\n\tListRpcError,\n\ttype RpcRequest,\n\ttype TypeConnector,\n\ttype TypeJsonRpcConfig,\n\ttype TypePullClientMessageBatch,\n} from '../types/pull'\nimport type {\n\tRpcCommand,\n\tRpcCommandResult,\n\tTypeRpcResponseAwaiters,\n} from '../types/pull'\n\nconst JSON_RPC_VERSION = '2.0'\n\nexport class JsonRpc {\n\tprivate _logger: null | LoggerBrowser = null\n\n\tprivate _connector: TypeConnector\n\tprivate _idCounter: number = 0\n\n\tprivate _handlers: Record<string, (params: any) => RpcCommandResult> = {}\n\n\tprivate _rpcResponseAwaiters: Map<number, TypeRpcResponseAwaiters> = new Map()\n\n\tconstructor(options: TypeJsonRpcConfig) {\n\t\tthis._connector = options.connector\n\n\t\tif (Type.isPlainObject(options.handlers)) {\n\t\t\tfor (const method in options.handlers) {\n\t\t\t\tthis.handle(method, options.handlers[method])\n\t\t\t}\n\t\t}\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t}\n\n\tgetLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\n\t/**\n\t * @param {string} method\n\t * @param {function} handler\n\t */\n\thandle(method: string, handler: (params: any) => RpcCommandResult) {\n\t\tthis._handlers[method] = handler\n\t}\n\n\t/**\n\t * Sends RPC command to the server.\n\t *\n\t * @param {string} method Method name\n\t * @param {object} params\n\t * @param {int} timeout\n\t * @returns {Promise}\n\t */\n\tasync executeOutgoingRpcCommand(\n\t\tmethod: string,\n\t\tparams: object,\n\t\ttimeout: number = 5\n\t): Promise<any> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst request = this.createRequest(method, params)\n\n\t\t\tif (!this._connector.send(JSON.stringify(request))) {\n\t\t\t\treject(new ErrorNotConnected('websocket is not connected'))\n\t\t\t}\n\n\t\t\tconst timeoutHandler = setTimeout(() => {\n\t\t\t\tthis._rpcResponseAwaiters.delete(request.id)\n\t\t\t\treject(new ErrorTimeout('no response'))\n\t\t\t}, timeout * 1_000)\n\n\t\t\tthis._rpcResponseAwaiters.set(request.id, {\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t\ttimeout: timeoutHandler,\n\t\t\t} as TypeRpcResponseAwaiters)\n\t\t})\n\t}\n\n\t/**\n\t * Executes array or rpc commands.\n\t * Returns an array of promises, each promise will be resolved individually.\n\t *\n\t * @param {JsonRpcRequest[]} batch\n\t * @returns {Promise[]}\n\t */\n\tprivate executeOutgoingRpcBatch(batch: JsonRpcRequest[]): Promise<any>[] {\n\t\tconst requests: RpcRequest[] = []\n\t\tconst promises: Promise<any>[] = []\n\n\t\t// eslint-disable-next-line\n\t\tbatch.forEach(({ method, params, id }) => {\n\t\t\tconst request = this.createRequest(method, params, id)\n\t\t\trequests.push(request)\n\t\t\tpromises.push(\n\t\t\t\tnew Promise((resolve, reject) =>\n\t\t\t\t\tthis._rpcResponseAwaiters.set(request.id, {\n\t\t\t\t\t\tresolve,\n\t\t\t\t\t\treject,\n\t\t\t\t\t} as TypeRpcResponseAwaiters)\n\t\t\t\t)\n\t\t\t)\n\t\t})\n\n\t\tthis._connector.send(JSON.stringify(requests))\n\t\treturn promises\n\t}\n\n\tprivate processRpcResponse(response: RpcCommandResult): void {\n\t\tif (\n\t\t\t'id' in response &&\n\t\t\tthis._rpcResponseAwaiters.has(Number(response.id))\n\t\t) {\n\t\t\tconst awaiter = this._rpcResponseAwaiters.get(Number(response.id))\n\t\t\tif (awaiter) {\n\t\t\t\tif ('result' in response) {\n\t\t\t\t\tawaiter.resolve(response.result)\n\t\t\t\t} else if ('error' in response) {\n\t\t\t\t\tawaiter.reject(response?.error || 'error')\n\t\t\t\t} else {\n\t\t\t\t\tawaiter.reject('wrong response structure')\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(awaiter.timeout)\n\t\t\t\tthis._rpcResponseAwaiters.delete(Number(response.id))\n\t\t\t}\n\n\t\t\treturn\n\t\t}\n\n\t\tthis.getLogger().error(\n\t\t\tnew Error(\n\t\t\t\t`${Text.getDateForLog()}: Pull: Received rpc response with unknown id`\n\t\t\t),\n\t\t\tresponse\n\t\t)\n\t}\n\n\tparseJsonRpcMessage(\n\t\tmessage: string\n\t): RpcCommandResult[] | RpcCommandResult | void {\n\t\tlet decoded\n\t\ttry {\n\t\t\tdecoded = JSON.parse(message)\n\t\t} catch (error) {\n\t\t\tthis.getLogger().error(\n\t\t\t\tnew Error(\n\t\t\t\t\t`${Text.getDateForLog()}: Pull: Could not decode json rpc message`\n\t\t\t\t),\n\t\t\t\terror\n\t\t\t)\n\n\t\t\treturn\n\t\t}\n\n\t\tif (Type.isArray(decoded)) {\n\t\t\treturn this.executeIncomingRpcBatch(decoded)\n\t\t} else if (Type.isJsonRpcRequest(decoded)) {\n\t\t\treturn this.executeIncomingRpcCommand(decoded)\n\t\t} else if (Type.isJsonRpcResponse(decoded)) {\n\t\t\treturn this.processRpcResponse(decoded)\n\t\t} else {\n\t\t\tthis.getLogger().error(\n\t\t\t\tnew Error(`${Text.getDateForLog()}: Pull: unknown rpc packet`),\n\t\t\t\tdecoded\n\t\t\t)\n\t\t}\n\t}\n\n\t/**\n\t * Executes RPC command, received from the server\n\t *\n\t * @param {string} method\n\t * @param {object} params\n\t * @returns {object}\n\t */\n\tprivate executeIncomingRpcCommand({\n\t\tmethod,\n\t\tparams,\n\t}: RpcCommand): RpcCommandResult {\n\t\tif (method in this._handlers) {\n\t\t\treturn this._handlers[method].call(this, params || {})\n\t\t}\n\n\t\treturn {\n\t\t\tjsonrpc: JSON_RPC_VERSION,\n\t\t\terror: ListRpcError.MethodNotFound,\n\t\t} as RpcCommandResult\n\t}\n\n\tprivate executeIncomingRpcBatch(batch: RpcCommand[]): RpcCommandResult[] {\n\t\tconst result: RpcCommandResult[] = []\n\n\t\tfor (const command of batch) {\n\t\t\tif ('jsonrpc' in command) {\n\t\t\t\tif ('method' in command) {\n\t\t\t\t\tconst commandResult = this.executeIncomingRpcCommand(command)\n\t\t\t\t\tif (commandResult) {\n\t\t\t\t\t\tcommandResult['jsonrpc'] = JSON_RPC_VERSION\n\t\t\t\t\t\tcommandResult['id'] = command['id']\n\n\t\t\t\t\t\tresult.push(commandResult)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.processRpcResponse(command)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.getLogger().error(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t`${Text.getDateForLog()}: Pull: unknown rpc command in batch`\n\t\t\t\t\t),\n\t\t\t\t\tcommand\n\t\t\t\t)\n\n\t\t\t\tresult.push({\n\t\t\t\t\tjsonrpc: JSON_RPC_VERSION,\n\t\t\t\t\terror: ListRpcError.InvalidRequest,\n\t\t\t\t} as RpcCommandResult)\n\t\t\t}\n\t\t}\n\n\t\treturn result\n\t}\n\n\tprivate nextId(): number {\n\t\treturn ++this._idCounter\n\t}\n\n\tpublic createPublishRequest(\n\t\tmessageBatch: TypePullClientMessageBatch[]\n\t): RpcRequest[] {\n\t\treturn messageBatch.map((message) => this.createRequest('publish', message))\n\t}\n\n\tprivate createRequest(method: string, params: any, id?: number): RpcRequest {\n\t\tif (!id) {\n\t\t\tid = this.nextId()\n\t\t}\n\n\t\treturn {\n\t\t\tjsonrpc: JSON_RPC_VERSION,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t\tid,\n\t\t} as RpcRequest\n\t}\n}\n","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport Type from '../tools/type'\nimport Text from '../tools/text'\nimport { StorageManager } from './storage-manager'\nimport {\n\tLsKeys,\n\ttype SharedConfigCallbacks,\n\ttype SharedConfigParams,\n\ttype TypeStorageManager,\n} from '../types/pull'\n\nexport class SharedConfig {\n\tprivate _logger: null | LoggerBrowser = null\n\tprivate readonly _storage: TypeStorageManager\n\tprivate _ttl: number = 24 * 60 * 60\n\tprivate _callbacks: SharedConfigCallbacks\n\n\tconstructor(params: SharedConfigParams = {}) {\n\t\tparams = params || {}\n\t\tthis._storage = params.storage || new StorageManager()\n\n\t\tthis._callbacks = {\n\t\t\tonWebSocketBlockChanged: Type.isFunction(params.onWebSocketBlockChanged)\n\t\t\t\t? params.onWebSocketBlockChanged\n\t\t\t\t: () => {},\n\t\t} as SharedConfigCallbacks\n\n\t\tif (this._storage) {\n\t\t\twindow.addEventListener('storage', this.onLocalStorageSet.bind(this))\n\t\t}\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t}\n\n\tgetLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\n\tprivate onLocalStorageSet(params: StorageEvent): void {\n\t\tif (\n\t\t\t(this._storage as StorageManager).compareKey(\n\t\t\t\tparams.key || '',\n\t\t\t\tLsKeys.WebsocketBlocked\n\t\t\t) &&\n\t\t\tparams.newValue !== params.oldValue\n\t\t) {\n\t\t\tthis._callbacks.onWebSocketBlockChanged({\n\t\t\t\tisWebSocketBlocked: this.isWebSocketBlocked(),\n\t\t\t})\n\t\t}\n\t}\n\n\tisWebSocketBlocked(): boolean {\n\t\tif (!this._storage) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn this._storage.get(LsKeys.WebsocketBlocked, 0) > Date.now()\n\t}\n\n\tsetWebSocketBlocked(isWebSocketBlocked: boolean): boolean {\n\t\tif (!this._storage) {\n\t\t\treturn false\n\t\t}\n\n\t\ttry {\n\t\t\tthis._storage.set(\n\t\t\t\tLsKeys.WebsocketBlocked,\n\t\t\t\tisWebSocketBlocked ? Date.now() + this._ttl : 0\n\t\t\t)\n\t\t} catch (error) {\n\t\t\tthis.getLogger().error(\n\t\t\t\tnew Error(\n\t\t\t\t\t`${Text.getDateForLog()}: Pull: Could not save WS_blocked flag in local storage. Error: `\n\t\t\t\t),\n\t\t\t\terror\n\t\t\t)\n\n\t\t\treturn false\n\t\t}\n\n\t\treturn true\n\t}\n\n\tisLongPollingBlocked(): boolean {\n\t\tif (!this._storage) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn this._storage.get(LsKeys.LongPollingBlocked, 0) > Date.now()\n\t}\n\n\tsetLongPollingBlocked(isLongPollingBlocked: boolean) {\n\t\tif (!this._storage) {\n\t\t\treturn false\n\t\t}\n\n\t\ttry {\n\t\t\tthis._storage.set(\n\t\t\t\tLsKeys.LongPollingBlocked,\n\t\t\t\tisLongPollingBlocked ? Date.now() + this._ttl : 0\n\t\t\t)\n\t\t} catch (error) {\n\t\t\tthis.getLogger().error(\n\t\t\t\tnew Error(\n\t\t\t\t\t`${Text.getDateForLog()}: Pull: Could not save LP_blocked flag in local storage. Error: `\n\t\t\t\t),\n\t\t\t\terror\n\t\t\t)\n\n\t\t\treturn false\n\t\t}\n\n\t\treturn true\n\t}\n\n\tisLoggingEnabled(): boolean {\n\t\tif (!this._storage) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn this._storage.get(LsKeys.LoggingEnabled, 0) > this.getTimestamp()\n\t}\n\n\tsetLoggingEnabled(isLoggingEnabled: boolean): boolean {\n\t\tif (!this._storage) {\n\t\t\treturn false\n\t\t}\n\n\t\ttry {\n\t\t\tthis._storage.set(\n\t\t\t\tLsKeys.LoggingEnabled,\n\t\t\t\tisLoggingEnabled ? this.getTimestamp() + this._ttl : 0\n\t\t\t)\n\t\t} catch (error) {\n\t\t\tthis.getLogger().error(\n\t\t\t\tnew Error(`${Text.getDateForLog()}: LocalStorage error: `),\n\t\t\t\terror\n\t\t\t)\n\n\t\t\treturn false\n\t\t}\n\n\t\treturn true\n\t}\n\n\t// region Tools ////\n\tgetTimestamp(): number {\n\t\treturn Date.now()\n\t}\n\t// endregion ////\n}\n","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport { AjaxResult } from '../core/http/ajax-result'\nimport type {\n\tTypeChanel,\n\tTypeChannelManagerParams,\n\tTypePublicIdDescriptor,\n} from '../types/pull'\nimport type { TypeB24 } from '../types/b24'\nimport type { Payload } from '../types/payloads'\n\nexport class ChannelManager {\n\tprivate _logger: null | LoggerBrowser = null\n\tprivate _publicIds: Map<number, TypeChanel>\n\tprivate _restClient: TypeB24\n\tprivate _getPublicListMethod: string\n\n\tconstructor(params: TypeChannelManagerParams) {\n\t\tthis._publicIds = new Map()\n\n\t\tthis._restClient = params.b24\n\t\tthis._getPublicListMethod = params.getPublicListMethod\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t}\n\n\tgetLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\n\t/**\n\t * @param {Array} users Array of user ids.\n\t * @return {Promise}\n\t */\n\tasync getPublicIds(users: number[]): Promise<Record<number, TypeChanel>> {\n\t\tconst now = new Date()\n\n\t\tconst result: Record<number, TypeChanel> = {}\n\t\tconst unknownUsers: number[] = []\n\n\t\tfor (const userId of users) {\n\t\t\tconst chanel = this._publicIds.get(userId)\n\n\t\t\tif (chanel && chanel.end > now) {\n\t\t\t\tresult[chanel.userId] = chanel\n\t\t\t} else {\n\t\t\t\tunknownUsers.push(userId)\n\t\t\t}\n\t\t}\n\n\t\tif (unknownUsers.length === 0) {\n\t\t\treturn Promise.resolve(result)\n\t\t}\n\n\t\t/**\n\t\t * @memo we not use Promise.reject()\n\t\t */\n\t\treturn new Promise((resolve) => {\n\t\t\tthis._restClient\n\t\t\t\t.callMethod(this._getPublicListMethod, {\n\t\t\t\t\tusers: unknownUsers,\n\t\t\t\t})\n\t\t\t\t.then((response: AjaxResult) => {\n\t\t\t\t\tconst data = (response.getData() as Payload<TypePublicIdDescriptor>)\n\t\t\t\t\t\t.result\n\n\t\t\t\t\t/**\n\t\t\t\t\t * @memo test this\n\t\t\t\t\t */\n\t\t\t\t\tthis.setPublicIds(Object.values(data))\n\n\t\t\t\t\tfor (const userId of unknownUsers) {\n\t\t\t\t\t\tconst chanel = this._publicIds.get(userId)\n\t\t\t\t\t\tif (chanel) {\n\t\t\t\t\t\t\tresult[chanel.userId] = chanel\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(result)\n\t\t\t\t})\n\t\t\t\t.catch((error: Error | string) => {\n\t\t\t\t\tthis.getLogger().error(error)\n\t\t\t\t\treturn resolve({})\n\t\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * @param {TypePublicIdDescriptor[]} publicIds\n\t */\n\tpublic setPublicIds(publicIds: TypePublicIdDescriptor[]): void {\n\t\t// eslint-disable-next-line unicorn/no-array-for-each\n\t\tpublicIds.forEach((publicIdDescriptor: TypePublicIdDescriptor) => {\n\t\t\tconst userId = Number(publicIdDescriptor.user_id)\n\t\t\tthis._publicIds.set(userId, {\n\t\t\t\tuserId: userId,\n\t\t\t\tpublicId: publicIdDescriptor.public_id,\n\t\t\t\tsignature: publicIdDescriptor.signature,\n\t\t\t\tstart: new Date(publicIdDescriptor.start),\n\t\t\t\tend: new Date(publicIdDescriptor.end),\n\t\t\t} as TypeChanel)\n\t\t})\n\t}\n}\n","import $protobuf from 'protobufjs'\n\n/*eslint-disable block-scoped-var, no-redeclare, no-control-regex, no-prototype-builtins*/\n//\"use strict\";\n\n// Common aliases\nlet $Reader = $protobuf.Reader,\n\t$Writer = $protobuf.Writer,\n\t$util = $protobuf.util\n\n// Exported root namespace\nexport const $root =\n\t$protobuf.roots['push-server'] || ($protobuf.roots['push-server'] = {})\n\n$root.RequestBatch = (function () {\n\t/**\n\t * Properties of a RequestBatch.\n\t * @exports IRequestBatch\n\t * @interface IRequestBatch\n\t * @property {Array.<Request>|null} [requests] RequestBatch requests\n\t */\n\n\t/**\n\t * Constructs a new RequestBatch.\n\t * @exports RequestBatch\n\t * @classdesc Represents a RequestBatch.\n\t * @implements IRequestBatch\n\t * @constructor\n\t * @param {IRequestBatch=} [properties] Properties to set\n\t */\n\tfunction RequestBatch(properties) {\n\t\tthis.requests = []\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * RequestBatch requests.\n\t * @member {Array.<Request>} requests\n\t * @memberof RequestBatch\n\t * @instance\n\t */\n\tRequestBatch.prototype.requests = $util.emptyArray\n\n\t/**\n\t * Creates a new RequestBatch instance using the specified properties.\n\t * @function create\n\t * @memberof RequestBatch\n\t * @static\n\t * @param {IRequestBatch=} [properties] Properties to set\n\t * @returns {RequestBatch} RequestBatch instance\n\t */\n\tRequestBatch.create = function create(properties) {\n\t\treturn new RequestBatch(properties)\n\t}\n\n\t/**\n\t * Encodes the specified RequestBatch message. Does not implicitly {@link RequestBatch.verify|verify} messages.\n\t * @function encode\n\t * @memberof RequestBatch\n\t * @static\n\t * @param {RequestBatch} message RequestBatch message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tRequestBatch.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.requests != null && message.requests.length) {\n\t\t\tfor (var i = 0; i < message.requests.length; ++i)\n\t\t\t\t$root.Request.encode(\n\t\t\t\t\tmessage.requests[i],\n\t\t\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).fork()\n\t\t\t\t).ldelim()\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a RequestBatch message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof RequestBatch\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {RequestBatch} RequestBatch\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tRequestBatch.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.RequestBatch()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tif (!(message.requests && message.requests.length)) {\n\t\t\t\t\t\tmessage.requests = []\n\t\t\t\t\t}\n\t\t\t\t\tmessage.requests.push($root.Request.decode(reader, reader.uint32()))\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn RequestBatch\n})()\n\n$root.Request = (function () {\n\t/**\n\t * Properties of a Request.\n\t * @exports IRequest\n\t * @interface IRequest\n\t * @property {IncomingMessagesRequest|null} [incomingMessages] Request incomingMessages\n\t * @property {ChannelStatsRequest|null} [channelStats] Request channelStats\n\t * @property {ServerStatsRequest|null} [serverStats] Request serverStats\n\t */\n\n\t/**\n\t * Constructs a new Request.\n\t * @exports Request\n\t * @classdesc Represents a Request.\n\t * @implements IRequest\n\t * @constructor\n\t * @param {IRequest=} [properties] Properties to set\n\t */\n\tfunction Request(properties) {\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Request incomingMessages.\n\t * @member {IncomingMessagesRequest|null|undefined} incomingMessages\n\t * @memberof Request\n\t * @instance\n\t */\n\tRequest.prototype.incomingMessages = null\n\n\t/**\n\t * Request channelStats.\n\t * @member {ChannelStatsRequest|null|undefined} channelStats\n\t * @memberof Request\n\t * @instance\n\t */\n\tRequest.prototype.channelStats = null\n\n\t/**\n\t * Request serverStats.\n\t * @member {ServerStatsRequest|null|undefined} serverStats\n\t * @memberof Request\n\t * @instance\n\t */\n\tRequest.prototype.serverStats = null\n\n\t// OneOf field names bound to virtual getters and setters\n\tvar $oneOfFields\n\n\t/**\n\t * Request command.\n\t * @member {\"incomingMessages\"|\"channelStats\"|\"serverStats\"|undefined} command\n\t * @memberof Request\n\t * @instance\n\t */\n\tObject.defineProperty(Request.prototype, 'command', {\n\t\tget: $util.oneOfGetter(\n\t\t\t($oneOfFields = ['incomingMessages', 'channelStats', 'serverStats'])\n\t\t),\n\t\tset: $util.oneOfSetter($oneOfFields),\n\t})\n\n\t/**\n\t * Creates a new Request instance using the specified properties.\n\t * @function create\n\t * @memberof Request\n\t * @static\n\t * @param {IRequest=} [properties] Properties to set\n\t * @returns {Request} Request instance\n\t */\n\tRequest.create = function create(properties) {\n\t\treturn new Request(properties)\n\t}\n\n\t/**\n\t * Encodes the specified Request message. Does not implicitly {@link Request.verify|verify} messages.\n\t * @function encode\n\t * @memberof Request\n\t * @static\n\t * @param {Request} message Request message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tRequest.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (\n\t\t\tmessage.incomingMessages != null &&\n\t\t\tmessage.hasOwnProperty('incomingMessages')\n\t\t) {\n\t\t\t$root.IncomingMessagesRequest.encode(\n\t\t\t\tmessage.incomingMessages,\n\t\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).fork()\n\t\t\t).ldelim()\n\t\t}\n\t\tif (\n\t\t\tmessage.channelStats != null &&\n\t\t\tmessage.hasOwnProperty('channelStats')\n\t\t) {\n\t\t\t$root.ChannelStatsRequest.encode(\n\t\t\t\tmessage.channelStats,\n\t\t\t\twriter.uint32(/* id 2, wireType 2 =*/ 18).fork()\n\t\t\t).ldelim()\n\t\t}\n\t\tif (message.serverStats != null && message.hasOwnProperty('serverStats')) {\n\t\t\t$root.ServerStatsRequest.encode(\n\t\t\t\tmessage.serverStats,\n\t\t\t\twriter.uint32(/* id 3, wireType 2 =*/ 26).fork()\n\t\t\t).ldelim()\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a Request message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof Request\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {Request} Request\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tRequest.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.Request()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.incomingMessages = $root.IncomingMessagesRequest.decode(\n\t\t\t\t\t\treader,\n\t\t\t\t\t\treader.uint32()\n\t\t\t\t\t)\n\t\t\t\t\tbreak\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.channelStats = $root.ChannelStatsRequest.decode(\n\t\t\t\t\t\treader,\n\t\t\t\t\t\treader.uint32()\n\t\t\t\t\t)\n\t\t\t\t\tbreak\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.serverStats = $root.ServerStatsRequest.decode(\n\t\t\t\t\t\treader,\n\t\t\t\t\t\treader.uint32()\n\t\t\t\t\t)\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn Request\n})()\n\n$root.IncomingMessagesRequest = (function () {\n\t/**\n\t * Properties of an IncomingMessagesRequest.\n\t * @exports IIncomingMessagesRequest\n\t * @interface IIncomingMessagesRequest\n\t * @property {Array.<IncomingMessage>|null} [messages] IncomingMessagesRequest messages\n\t */\n\n\t/**\n\t * Constructs a new IncomingMessagesRequest.\n\t * @exports IncomingMessagesRequest\n\t * @classdesc Represents an IncomingMessagesRequest.\n\t * @implements IIncomingMessagesRequest\n\t * @constructor\n\t * @param {IIncomingMessagesRequest=} [properties] Properties to set\n\t */\n\tfunction IncomingMessagesRequest(properties) {\n\t\tthis.messages = []\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * IncomingMessagesRequest messages.\n\t * @member {Array.<IncomingMessage>} messages\n\t * @memberof IncomingMessagesRequest\n\t * @instance\n\t */\n\tIncomingMessagesRequest.prototype.messages = $util.emptyArray\n\n\t/**\n\t * Creates a new IncomingMessagesRequest instance using the specified properties.\n\t * @function create\n\t * @memberof IncomingMessagesRequest\n\t * @static\n\t * @param {IIncomingMessagesRequest=} [properties] Properties to set\n\t * @returns {IncomingMessagesRequest} IncomingMessagesRequest instance\n\t */\n\tIncomingMessagesRequest.create = function create(properties) {\n\t\treturn new IncomingMessagesRequest(properties)\n\t}\n\n\t/**\n\t * Encodes the specified IncomingMessagesRequest message. Does not implicitly {@link IncomingMessagesRequest.verify|verify} messages.\n\t * @function encode\n\t * @memberof IncomingMessagesRequest\n\t * @static\n\t * @param {IncomingMessagesRequest} message IncomingMessagesRequest message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tIncomingMessagesRequest.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.messages != null && message.messages.length) {\n\t\t\tfor (var i = 0; i < message.messages.length; ++i)\n\t\t\t\t$root.IncomingMessage.encode(\n\t\t\t\t\tmessage.messages[i],\n\t\t\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).fork()\n\t\t\t\t).ldelim()\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes an IncomingMessagesRequest message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof IncomingMessagesRequest\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {IncomingMessagesRequest} IncomingMessagesRequest\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tIncomingMessagesRequest.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.IncomingMessagesRequest()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tif (!(message.messages && message.messages.length)) {\n\t\t\t\t\t\tmessage.messages = []\n\t\t\t\t\t}\n\t\t\t\t\tmessage.messages.push(\n\t\t\t\t\t\t$root.IncomingMessage.decode(reader, reader.uint32())\n\t\t\t\t\t)\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn IncomingMessagesRequest\n})()\n\n$root.IncomingMessage = (function () {\n\t/**\n\t * Properties of an IncomingMessage.\n\t * @exports IIncomingMessage\n\t * @interface IIncomingMessage\n\t * @property {Array.<Receiver>|null} [receivers] IncomingMessage receivers\n\t * @property {Sender|null} [sender] IncomingMessage sender\n\t * @property {string|null} [body] IncomingMessage body\n\t * @property {number|null} [expiry] IncomingMessage expiry\n\t * @property {string|null} [type] IncomingMessage type\n\t */\n\n\t/**\n\t * Constructs a new IncomingMessage.\n\t * @exports IncomingMessage\n\t * @classdesc Represents an IncomingMessage.\n\t * @implements IIncomingMessage\n\t * @constructor\n\t * @param {IIncomingMessage=} [properties] Properties to set\n\t */\n\tfunction IncomingMessage(properties) {\n\t\tthis.receivers = []\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * IncomingMessage receivers.\n\t * @member {Array.<Receiver>} receivers\n\t * @memberof IncomingMessage\n\t * @instance\n\t */\n\tIncomingMessage.prototype.receivers = $util.emptyArray\n\n\t/**\n\t * IncomingMessage sender.\n\t * @member {Sender|null|undefined} sender\n\t * @memberof IncomingMessage\n\t * @instance\n\t */\n\tIncomingMessage.prototype.sender = null\n\n\t/**\n\t * IncomingMessage body.\n\t * @member {string} body\n\t * @memberof IncomingMessage\n\t * @instance\n\t */\n\tIncomingMessage.prototype.body = ''\n\n\t/**\n\t * IncomingMessage expiry.\n\t * @member {number} expiry\n\t * @memberof IncomingMessage\n\t * @instance\n\t */\n\tIncomingMessage.prototype.expiry = 0\n\n\t/**\n\t * IncomingMessage type.\n\t * @member {string} type\n\t * @memberof IncomingMessage\n\t * @instance\n\t */\n\tIncomingMessage.prototype.type = ''\n\n\t/**\n\t * Creates a new IncomingMessage instance using the specified properties.\n\t * @function create\n\t * @memberof IncomingMessage\n\t * @static\n\t * @param {IIncomingMessage=} [properties] Properties to set\n\t * @returns {IncomingMessage} IncomingMessage instance\n\t */\n\tIncomingMessage.create = function create(properties) {\n\t\treturn new IncomingMessage(properties)\n\t}\n\n\t/**\n\t * Encodes the specified IncomingMessage message. Does not implicitly {@link IncomingMessage.verify|verify} messages.\n\t * @function encode\n\t * @memberof IncomingMessage\n\t * @static\n\t * @param {IncomingMessage} message IncomingMessage message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tIncomingMessage.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.receivers != null && message.receivers.length) {\n\t\t\tfor (var i = 0; i < message.receivers.length; ++i)\n\t\t\t\t$root.Receiver.encode(\n\t\t\t\t\tmessage.receivers[i],\n\t\t\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).fork()\n\t\t\t\t).ldelim()\n\t\t}\n\t\tif (message.sender != null && message.hasOwnProperty('sender')) {\n\t\t\t$root.Sender.encode(\n\t\t\t\tmessage.sender,\n\t\t\t\twriter.uint32(/* id 2, wireType 2 =*/ 18).fork()\n\t\t\t).ldelim()\n\t\t}\n\t\tif (message.body != null && message.hasOwnProperty('body')) {\n\t\t\twriter.uint32(/* id 3, wireType 2 =*/ 26).string(message.body)\n\t\t}\n\t\tif (message.expiry != null && message.hasOwnProperty('expiry')) {\n\t\t\twriter.uint32(/* id 4, wireType 0 =*/ 32).uint32(message.expiry)\n\t\t}\n\t\tif (message.type != null && message.hasOwnProperty('type')) {\n\t\t\twriter.uint32(/* id 5, wireType 2 =*/ 42).string(message.type)\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes an IncomingMessage message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof IncomingMessage\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {IncomingMessage} IncomingMessage\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tIncomingMessage.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.IncomingMessage()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tif (!(message.receivers && message.receivers.length)) {\n\t\t\t\t\t\tmessage.receivers = []\n\t\t\t\t\t}\n\t\t\t\t\tmessage.receivers.push($root.Receiver.decode(reader, reader.uint32()))\n\t\t\t\t\tbreak\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.sender = $root.Sender.decode(reader, reader.uint32())\n\t\t\t\t\tbreak\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.body = reader.string()\n\t\t\t\t\tbreak\n\t\t\t\tcase 4:\n\t\t\t\t\tmessage.expiry = reader.uint32()\n\t\t\t\t\tbreak\n\t\t\t\tcase 5:\n\t\t\t\t\tmessage.type = reader.string()\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn IncomingMessage\n})()\n\n$root.ChannelStatsRequest = (function () {\n\t/**\n\t * Properties of a ChannelStatsRequest.\n\t * @exports IChannelStatsRequest\n\t * @interface IChannelStatsRequest\n\t * @property {Array.<ChannelId>|null} [channels] ChannelStatsRequest channels\n\t */\n\n\t/**\n\t * Constructs a new ChannelStatsRequest.\n\t * @exports ChannelStatsRequest\n\t * @classdesc Represents a ChannelStatsRequest.\n\t * @implements IChannelStatsRequest\n\t * @constructor\n\t * @param {IChannelStatsRequest=} [properties] Properties to set\n\t */\n\tfunction ChannelStatsRequest(properties) {\n\t\tthis.channels = []\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * ChannelStatsRequest channels.\n\t * @member {Array.<ChannelId>} channels\n\t * @memberof ChannelStatsRequest\n\t * @instance\n\t */\n\tChannelStatsRequest.prototype.channels = $util.emptyArray\n\n\t/**\n\t * Creates a new ChannelStatsRequest instance using the specified properties.\n\t * @function create\n\t * @memberof ChannelStatsRequest\n\t * @static\n\t * @param {IChannelStatsRequest=} [properties] Properties to set\n\t * @returns {ChannelStatsRequest} ChannelStatsRequest instance\n\t */\n\tChannelStatsRequest.create = function create(properties) {\n\t\treturn new ChannelStatsRequest(properties)\n\t}\n\n\t/**\n\t * Encodes the specified ChannelStatsRequest message. Does not implicitly {@link ChannelStatsRequest.verify|verify} messages.\n\t * @function encode\n\t * @memberof ChannelStatsRequest\n\t * @static\n\t * @param {ChannelStatsRequest} message ChannelStatsRequest message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tChannelStatsRequest.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.channels != null && message.channels.length) {\n\t\t\tfor (var i = 0; i < message.channels.length; ++i)\n\t\t\t\t$root.ChannelId.encode(\n\t\t\t\t\tmessage.channels[i],\n\t\t\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).fork()\n\t\t\t\t).ldelim()\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a ChannelStatsRequest message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ChannelStatsRequest\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ChannelStatsRequest} ChannelStatsRequest\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tChannelStatsRequest.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.ChannelStatsRequest()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tif (!(message.channels && message.channels.length)) {\n\t\t\t\t\t\tmessage.channels = []\n\t\t\t\t\t}\n\t\t\t\t\tmessage.channels.push($root.ChannelId.decode(reader, reader.uint32()))\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn ChannelStatsRequest\n})()\n\n$root.ChannelId = (function () {\n\t/**\n\t * Properties of a ChannelId.\n\t * @exports IChannelId\n\t * @interface IChannelId\n\t * @property {Uint8Array|null} [id] ChannelId id\n\t * @property {boolean|null} [isPrivate] ChannelId isPrivate\n\t * @property {Uint8Array|null} [signature] ChannelId signature\n\t */\n\n\t/**\n\t * Constructs a new ChannelId.\n\t * @exports ChannelId\n\t * @classdesc Represents a ChannelId.\n\t * @implements IChannelId\n\t * @constructor\n\t * @param {IChannelId=} [properties] Properties to set\n\t */\n\tfunction ChannelId(properties) {\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * ChannelId id.\n\t * @member {Uint8Array} id\n\t * @memberof ChannelId\n\t * @instance\n\t */\n\tChannelId.prototype.id = $util.newBuffer([])\n\n\t/**\n\t * ChannelId isPrivate.\n\t * @member {boolean} isPrivate\n\t * @memberof ChannelId\n\t * @instance\n\t */\n\tChannelId.prototype.isPrivate = false\n\n\t/**\n\t * ChannelId signature.\n\t * @member {Uint8Array} signature\n\t * @memberof ChannelId\n\t * @instance\n\t */\n\tChannelId.prototype.signature = $util.newBuffer([])\n\n\t/**\n\t * Creates a new ChannelId instance using the specified properties.\n\t * @function create\n\t * @memberof ChannelId\n\t * @static\n\t * @param {IChannelId=} [properties] Properties to set\n\t * @returns {ChannelId} ChannelId instance\n\t */\n\tChannelId.create = function create(properties) {\n\t\treturn new ChannelId(properties)\n\t}\n\n\t/**\n\t * Encodes the specified ChannelId message. Does not implicitly {@link ChannelId.verify|verify} messages.\n\t * @function encode\n\t * @memberof ChannelId\n\t * @static\n\t * @param {ChannelId} message ChannelId message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tChannelId.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.id != null && message.hasOwnProperty('id')) {\n\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).bytes(message.id)\n\t\t}\n\t\tif (message.isPrivate != null && message.hasOwnProperty('isPrivate')) {\n\t\t\twriter.uint32(/* id 2, wireType 0 =*/ 16).bool(message.isPrivate)\n\t\t}\n\t\tif (message.signature != null && message.hasOwnProperty('signature')) {\n\t\t\twriter.uint32(/* id 3, wireType 2 =*/ 26).bytes(message.signature)\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a ChannelId message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ChannelId\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ChannelId} ChannelId\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tChannelId.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.ChannelId()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.id = reader.bytes()\n\t\t\t\t\tbreak\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.isPrivate = reader.bool()\n\t\t\t\t\tbreak\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.signature = reader.bytes()\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn ChannelId\n})()\n\n$root.ServerStatsRequest = (function () {\n\t/**\n\t * Properties of a ServerStatsRequest.\n\t * @exports IServerStatsRequest\n\t * @interface IServerStatsRequest\n\t */\n\n\t/**\n\t * Constructs a new ServerStatsRequest.\n\t * @exports ServerStatsRequest\n\t * @classdesc Represents a ServerStatsRequest.\n\t * @implements IServerStatsRequest\n\t * @constructor\n\t * @param {IServerStatsRequest=} [properties] Properties to set\n\t */\n\tfunction ServerStatsRequest(properties) {\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Creates a new ServerStatsRequest instance using the specified properties.\n\t * @function create\n\t * @memberof ServerStatsRequest\n\t * @static\n\t * @param {IServerStatsRequest=} [properties] Properties to set\n\t * @returns {ServerStatsRequest} ServerStatsRequest instance\n\t */\n\tServerStatsRequest.create = function create(properties) {\n\t\treturn new ServerStatsRequest(properties)\n\t}\n\n\t/**\n\t * Encodes the specified ServerStatsRequest message. Does not implicitly {@link ServerStatsRequest.verify|verify} messages.\n\t * @function encode\n\t * @memberof ServerStatsRequest\n\t * @static\n\t * @param {ServerStatsRequest} message ServerStatsRequest message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tServerStatsRequest.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a ServerStatsRequest message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ServerStatsRequest\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ServerStatsRequest} ServerStatsRequest\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tServerStatsRequest.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.ServerStatsRequest()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn ServerStatsRequest\n})()\n\n$root.Sender = (function () {\n\t/**\n\t * Properties of a Sender.\n\t * @exports ISender\n\t * @interface ISender\n\t * @property {SenderType|null} [type] Sender type\n\t * @property {Uint8Array|null} [id] Sender id\n\t */\n\n\t/**\n\t * Constructs a new Sender.\n\t * @exports Sender\n\t * @classdesc Represents a Sender.\n\t * @implements ISender\n\t * @constructor\n\t * @param {ISender=} [properties] Properties to set\n\t */\n\tfunction Sender(properties) {\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Sender type.\n\t * @member {SenderType} type\n\t * @memberof Sender\n\t * @instance\n\t */\n\tSender.prototype.type = 0\n\n\t/**\n\t * Sender id.\n\t * @member {Uint8Array} id\n\t * @memberof Sender\n\t * @instance\n\t */\n\tSender.prototype.id = $util.newBuffer([])\n\n\t/**\n\t * Creates a new Sender instance using the specified properties.\n\t * @function create\n\t * @memberof Sender\n\t * @static\n\t * @param {ISender=} [properties] Properties to set\n\t * @returns {Sender} Sender instance\n\t */\n\tSender.create = function create(properties) {\n\t\treturn new Sender(properties)\n\t}\n\n\t/**\n\t * Encodes the specified Sender message. Does not implicitly {@link Sender.verify|verify} messages.\n\t * @function encode\n\t * @memberof Sender\n\t * @static\n\t * @param {Sender} message Sender message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tSender.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.type != null && message.hasOwnProperty('type')) {\n\t\t\twriter.uint32(/* id 1, wireType 0 =*/ 8).int32(message.type)\n\t\t}\n\t\tif (message.id != null && message.hasOwnProperty('id')) {\n\t\t\twriter.uint32(/* id 2, wireType 2 =*/ 18).bytes(message.id)\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a Sender message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof Sender\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {Sender} Sender\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tSender.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.Sender()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.type = reader.int32()\n\t\t\t\t\tbreak\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.id = reader.bytes()\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn Sender\n})()\n\n/**\n * SenderType enum.\n * @exports SenderType\n * @enum {string}\n * @property {number} UNKNOWN=0 UNKNOWN value\n * @property {number} CLIENT=1 CLIENT value\n * @property {number} BACKEND=2 BACKEND value\n */\n$root.SenderType = (function () {\n\tvar valuesById = {},\n\t\tvalues = Object.create(valuesById)\n\tvalues[(valuesById[0] = 'UNKNOWN')] = 0\n\tvalues[(valuesById[1] = 'CLIENT')] = 1\n\tvalues[(valuesById[2] = 'BACKEND')] = 2\n\treturn values\n})()\n\n$root.Receiver = (function () {\n\t/**\n\t * Properties of a Receiver.\n\t * @exports IReceiver\n\t * @interface IReceiver\n\t * @property {Uint8Array|null} [id] Receiver id\n\t * @property {boolean|null} [isPrivate] Receiver isPrivate\n\t * @property {Uint8Array|null} [signature] Receiver signature\n\t */\n\n\t/**\n\t * Constructs a new Receiver.\n\t * @exports Receiver\n\t * @classdesc Represents a Receiver.\n\t * @implements IReceiver\n\t * @constructor\n\t * @param {IReceiver=} [properties] Properties to set\n\t */\n\tfunction Receiver(properties) {\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Receiver id.\n\t * @member {Uint8Array} id\n\t * @memberof Receiver\n\t * @instance\n\t */\n\tReceiver.prototype.id = $util.newBuffer([])\n\n\t/**\n\t * Receiver isPrivate.\n\t * @member {boolean} isPrivate\n\t * @memberof Receiver\n\t * @instance\n\t */\n\tReceiver.prototype.isPrivate = false\n\n\t/**\n\t * Receiver signature.\n\t * @member {Uint8Array} signature\n\t * @memberof Receiver\n\t * @instance\n\t */\n\tReceiver.prototype.signature = $util.newBuffer([])\n\n\t/**\n\t * Creates a new Receiver instance using the specified properties.\n\t * @function create\n\t * @memberof Receiver\n\t * @static\n\t * @param {IReceiver=} [properties] Properties to set\n\t * @returns {Receiver} Receiver instance\n\t */\n\tReceiver.create = function create(properties) {\n\t\treturn new Receiver(properties)\n\t}\n\n\t/**\n\t * Encodes the specified Receiver message. Does not implicitly {@link Receiver.verify|verify} messages.\n\t * @function encode\n\t * @memberof Receiver\n\t * @static\n\t * @param {Receiver} message Receiver message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tReceiver.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.id != null && message.hasOwnProperty('id')) {\n\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).bytes(message.id)\n\t\t}\n\t\tif (message.isPrivate != null && message.hasOwnProperty('isPrivate')) {\n\t\t\twriter.uint32(/* id 2, wireType 0 =*/ 16).bool(message.isPrivate)\n\t\t}\n\t\tif (message.signature != null && message.hasOwnProperty('signature')) {\n\t\t\twriter.uint32(/* id 3, wireType 2 =*/ 26).bytes(message.signature)\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a Receiver message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof Receiver\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {Receiver} Receiver\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tReceiver.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.Receiver()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.id = reader.bytes()\n\t\t\t\t\tbreak\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.isPrivate = reader.bool()\n\t\t\t\t\tbreak\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.signature = reader.bytes()\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn Receiver\n})()\n\n$root.ResponseBatch = (function () {\n\t/**\n\t * Properties of a ResponseBatch.\n\t * @exports IResponseBatch\n\t * @interface IResponseBatch\n\t * @property {Array.<Response>|null} [responses] ResponseBatch responses\n\t */\n\n\t/**\n\t * Constructs a new ResponseBatch.\n\t * @exports ResponseBatch\n\t * @classdesc Represents a ResponseBatch.\n\t * @implements IResponseBatch\n\t * @constructor\n\t * @param {IResponseBatch=} [properties] Properties to set\n\t */\n\tfunction ResponseBatch(properties) {\n\t\tthis.responses = []\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * ResponseBatch responses.\n\t * @member {Array.<Response>} responses\n\t * @memberof ResponseBatch\n\t * @instance\n\t */\n\tResponseBatch.prototype.responses = $util.emptyArray\n\n\t/**\n\t * Creates a new ResponseBatch instance using the specified properties.\n\t * @function create\n\t * @memberof ResponseBatch\n\t * @static\n\t * @param {IResponseBatch=} [properties] Properties to set\n\t * @returns {ResponseBatch} ResponseBatch instance\n\t */\n\tResponseBatch.create = function create(properties) {\n\t\treturn new ResponseBatch(properties)\n\t}\n\n\t/**\n\t * Encodes the specified ResponseBatch message. Does not implicitly {@link ResponseBatch.verify|verify} messages.\n\t * @function encode\n\t * @memberof ResponseBatch\n\t * @static\n\t * @param {ResponseBatch} message ResponseBatch message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tResponseBatch.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.responses != null && message.responses.length) {\n\t\t\tfor (var i = 0; i < message.responses.length; ++i)\n\t\t\t\t$root.Response.encode(\n\t\t\t\t\tmessage.responses[i],\n\t\t\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).fork()\n\t\t\t\t).ldelim()\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a ResponseBatch message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ResponseBatch\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ResponseBatch} ResponseBatch\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tResponseBatch.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.ResponseBatch()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tif (!(message.responses && message.responses.length)) {\n\t\t\t\t\t\tmessage.responses = []\n\t\t\t\t\t}\n\t\t\t\t\tmessage.responses.push($root.Response.decode(reader, reader.uint32()))\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn ResponseBatch\n})()\n\n$root.Response = (function () {\n\t/**\n\t * Properties of a Response.\n\t * @exports IResponse\n\t * @interface IResponse\n\t * @property {OutgoingMessagesResponse|null} [outgoingMessages] Response outgoingMessages\n\t * @property {ChannelStatsResponse|null} [channelStats] Response channelStats\n\t * @property {JsonResponse|null} [serverStats] Response serverStats\n\t */\n\n\t/**\n\t * Constructs a new Response.\n\t * @exports Response\n\t * @classdesc Represents a Response.\n\t * @implements IResponse\n\t * @constructor\n\t * @param {IResponse=} [properties] Properties to set\n\t */\n\tfunction Response(properties) {\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Response outgoingMessages.\n\t * @member {OutgoingMessagesResponse|null|undefined} outgoingMessages\n\t * @memberof Response\n\t * @instance\n\t */\n\tResponse.prototype.outgoingMessages = null\n\n\t/**\n\t * Response channelStats.\n\t * @member {ChannelStatsResponse|null|undefined} channelStats\n\t * @memberof Response\n\t * @instance\n\t */\n\tResponse.prototype.channelStats = null\n\n\t/**\n\t * Response serverStats.\n\t * @member {JsonResponse|null|undefined} serverStats\n\t * @memberof Response\n\t * @instance\n\t */\n\tResponse.prototype.serverStats = null\n\n\t// OneOf field names bound to virtual getters and setters\n\tvar $oneOfFields\n\n\t/**\n\t * Response command.\n\t * @member {\"outgoingMessages\"|\"channelStats\"|\"serverStats\"|undefined} command\n\t * @memberof Response\n\t * @instance\n\t */\n\tObject.defineProperty(Response.prototype, 'command', {\n\t\tget: $util.oneOfGetter(\n\t\t\t($oneOfFields = ['outgoingMessages', 'channelStats', 'serverStats'])\n\t\t),\n\t\tset: $util.oneOfSetter($oneOfFields),\n\t})\n\n\t/**\n\t * Creates a new Response instance using the specified properties.\n\t * @function create\n\t * @memberof Response\n\t * @static\n\t * @param {IResponse=} [properties] Properties to set\n\t * @returns {Response} Response instance\n\t */\n\tResponse.create = function create(properties) {\n\t\treturn new Response(properties)\n\t}\n\n\t/**\n\t * Encodes the specified Response message. Does not implicitly {@link Response.verify|verify} messages.\n\t * @function encode\n\t * @memberof Response\n\t * @static\n\t * @param {Response} message Response message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tResponse.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (\n\t\t\tmessage.outgoingMessages != null &&\n\t\t\tmessage.hasOwnProperty('outgoingMessages')\n\t\t) {\n\t\t\t$root.OutgoingMessagesResponse.encode(\n\t\t\t\tmessage.outgoingMessages,\n\t\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).fork()\n\t\t\t).ldelim()\n\t\t}\n\t\tif (\n\t\t\tmessage.channelStats != null &&\n\t\t\tmessage.hasOwnProperty('channelStats')\n\t\t) {\n\t\t\t$root.ChannelStatsResponse.encode(\n\t\t\t\tmessage.channelStats,\n\t\t\t\twriter.uint32(/* id 2, wireType 2 =*/ 18).fork()\n\t\t\t).ldelim()\n\t\t}\n\t\tif (message.serverStats != null && message.hasOwnProperty('serverStats')) {\n\t\t\t$root.JsonResponse.encode(\n\t\t\t\tmessage.serverStats,\n\t\t\t\twriter.uint32(/* id 3, wireType 2 =*/ 26).fork()\n\t\t\t).ldelim()\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a Response message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof Response\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {Response} Response\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tResponse.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.Response()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.outgoingMessages = $root.OutgoingMessagesResponse.decode(\n\t\t\t\t\t\treader,\n\t\t\t\t\t\treader.uint32()\n\t\t\t\t\t)\n\t\t\t\t\tbreak\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.channelStats = $root.ChannelStatsResponse.decode(\n\t\t\t\t\t\treader,\n\t\t\t\t\t\treader.uint32()\n\t\t\t\t\t)\n\t\t\t\t\tbreak\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.serverStats = $root.JsonResponse.decode(\n\t\t\t\t\t\treader,\n\t\t\t\t\t\treader.uint32()\n\t\t\t\t\t)\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn Response\n})()\n\n$root.OutgoingMessagesResponse = (function () {\n\t/**\n\t * Properties of an OutgoingMessagesResponse.\n\t * @exports IOutgoingMessagesResponse\n\t * @interface IOutgoingMessagesResponse\n\t * @property {Array.<OutgoingMessage>|null} [messages] OutgoingMessagesResponse messages\n\t */\n\n\t/**\n\t * Constructs a new OutgoingMessagesResponse.\n\t * @exports OutgoingMessagesResponse\n\t * @classdesc Represents an OutgoingMessagesResponse.\n\t * @implements IOutgoingMessagesResponse\n\t * @constructor\n\t * @param {IOutgoingMessagesResponse=} [properties] Properties to set\n\t */\n\tfunction OutgoingMessagesResponse(properties) {\n\t\tthis.messages = []\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * OutgoingMessagesResponse messages.\n\t * @member {Array.<OutgoingMessage>} messages\n\t * @memberof OutgoingMessagesResponse\n\t * @instance\n\t */\n\tOutgoingMessagesResponse.prototype.messages = $util.emptyArray\n\n\t/**\n\t * Creates a new OutgoingMessagesResponse instance using the specified properties.\n\t * @function create\n\t * @memberof OutgoingMessagesResponse\n\t * @static\n\t * @param {IOutgoingMessagesResponse=} [properties] Properties to set\n\t * @returns {OutgoingMessagesResponse} OutgoingMessagesResponse instance\n\t */\n\tOutgoingMessagesResponse.create = function create(properties) {\n\t\treturn new OutgoingMessagesResponse(properties)\n\t}\n\n\t/**\n\t * Encodes the specified OutgoingMessagesResponse message. Does not implicitly {@link OutgoingMessagesResponse.verify|verify} messages.\n\t * @function encode\n\t * @memberof OutgoingMessagesResponse\n\t * @static\n\t * @param {OutgoingMessagesResponse} message OutgoingMessagesResponse message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tOutgoingMessagesResponse.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.messages != null && message.messages.length) {\n\t\t\tfor (var i = 0; i < message.messages.length; ++i)\n\t\t\t\t$root.OutgoingMessage.encode(\n\t\t\t\t\tmessage.messages[i],\n\t\t\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).fork()\n\t\t\t\t).ldelim()\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes an OutgoingMessagesResponse message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof OutgoingMessagesResponse\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {OutgoingMessagesResponse} OutgoingMessagesResponse\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tOutgoingMessagesResponse.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.OutgoingMessagesResponse()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tif (!(message.messages && message.messages.length)) {\n\t\t\t\t\t\tmessage.messages = []\n\t\t\t\t\t}\n\t\t\t\t\tmessage.messages.push(\n\t\t\t\t\t\t$root.OutgoingMessage.decode(reader, reader.uint32())\n\t\t\t\t\t)\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn OutgoingMessagesResponse\n})()\n\n$root.OutgoingMessage = (function () {\n\t/**\n\t * Properties of an OutgoingMessage.\n\t * @exports IOutgoingMessage\n\t * @interface IOutgoingMessage\n\t * @property {Uint8Array|null} [id] OutgoingMessage id\n\t * @property {string|null} [body] OutgoingMessage body\n\t * @property {number|null} [expiry] OutgoingMessage expiry\n\t * @property {number|null} [created] OutgoingMessage created\n\t * @property {Sender|null} [sender] OutgoingMessage sender\n\t */\n\n\t/**\n\t * Constructs a new OutgoingMessage.\n\t * @exports OutgoingMessage\n\t * @classdesc Represents an OutgoingMessage.\n\t * @implements IOutgoingMessage\n\t * @constructor\n\t * @param {IOutgoingMessage=} [properties] Properties to set\n\t */\n\tfunction OutgoingMessage(properties) {\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * OutgoingMessage id.\n\t * @member {Uint8Array} id\n\t * @memberof OutgoingMessage\n\t * @instance\n\t */\n\tOutgoingMessage.prototype.id = $util.newBuffer([])\n\n\t/**\n\t * OutgoingMessage body.\n\t * @member {string} body\n\t * @memberof OutgoingMessage\n\t * @instance\n\t */\n\tOutgoingMessage.prototype.body = ''\n\n\t/**\n\t * OutgoingMessage expiry.\n\t * @member {number} expiry\n\t * @memberof OutgoingMessage\n\t * @instance\n\t */\n\tOutgoingMessage.prototype.expiry = 0\n\n\t/**\n\t * OutgoingMessage created.\n\t * @member {number} created\n\t * @memberof OutgoingMessage\n\t * @instance\n\t */\n\tOutgoingMessage.prototype.created = 0\n\n\t/**\n\t * OutgoingMessage sender.\n\t * @member {Sender|null|undefined} sender\n\t * @memberof OutgoingMessage\n\t * @instance\n\t */\n\tOutgoingMessage.prototype.sender = null\n\n\t/**\n\t * Creates a new OutgoingMessage instance using the specified properties.\n\t * @function create\n\t * @memberof OutgoingMessage\n\t * @static\n\t * @param {IOutgoingMessage=} [properties] Properties to set\n\t * @returns {OutgoingMessage} OutgoingMessage instance\n\t */\n\tOutgoingMessage.create = function create(properties) {\n\t\treturn new OutgoingMessage(properties)\n\t}\n\n\t/**\n\t * Encodes the specified OutgoingMessage message. Does not implicitly {@link OutgoingMessage.verify|verify} messages.\n\t * @function encode\n\t * @memberof OutgoingMessage\n\t * @static\n\t * @param {OutgoingMessage} message OutgoingMessage message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tOutgoingMessage.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.id != null && message.hasOwnProperty('id')) {\n\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).bytes(message.id)\n\t\t}\n\t\tif (message.body != null && message.hasOwnProperty('body')) {\n\t\t\twriter.uint32(/* id 2, wireType 2 =*/ 18).string(message.body)\n\t\t}\n\t\tif (message.expiry != null && message.hasOwnProperty('expiry')) {\n\t\t\twriter.uint32(/* id 3, wireType 0 =*/ 24).uint32(message.expiry)\n\t\t}\n\t\tif (message.created != null && message.hasOwnProperty('created')) {\n\t\t\twriter.uint32(/* id 4, wireType 5 =*/ 37).fixed32(message.created)\n\t\t}\n\t\tif (message.sender != null && message.hasOwnProperty('sender')) {\n\t\t\t$root.Sender.encode(\n\t\t\t\tmessage.sender,\n\t\t\t\twriter.uint32(/* id 5, wireType 2 =*/ 42).fork()\n\t\t\t).ldelim()\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes an OutgoingMessage message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof OutgoingMessage\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {OutgoingMessage} OutgoingMessage\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tOutgoingMessage.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.OutgoingMessage()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.id = reader.bytes()\n\t\t\t\t\tbreak\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.body = reader.string()\n\t\t\t\t\tbreak\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.expiry = reader.uint32()\n\t\t\t\t\tbreak\n\t\t\t\tcase 4:\n\t\t\t\t\tmessage.created = reader.fixed32()\n\t\t\t\t\tbreak\n\t\t\t\tcase 5:\n\t\t\t\t\tmessage.sender = $root.Sender.decode(reader, reader.uint32())\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn OutgoingMessage\n})()\n\n$root.ChannelStatsResponse = (function () {\n\t/**\n\t * Properties of a ChannelStatsResponse.\n\t * @exports IChannelStatsResponse\n\t * @interface IChannelStatsResponse\n\t * @property {Array.<ChannelStats>|null} [channels] ChannelStatsResponse channels\n\t */\n\n\t/**\n\t * Constructs a new ChannelStatsResponse.\n\t * @exports ChannelStatsResponse\n\t * @classdesc Represents a ChannelStatsResponse.\n\t * @implements IChannelStatsResponse\n\t * @constructor\n\t * @param {IChannelStatsResponse=} [properties] Properties to set\n\t */\n\tfunction ChannelStatsResponse(properties) {\n\t\tthis.channels = []\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * ChannelStatsResponse channels.\n\t * @member {Array.<ChannelStats>} channels\n\t * @memberof ChannelStatsResponse\n\t * @instance\n\t */\n\tChannelStatsResponse.prototype.channels = $util.emptyArray\n\n\t/**\n\t * Creates a new ChannelStatsResponse instance using the specified properties.\n\t * @function create\n\t * @memberof ChannelStatsResponse\n\t * @static\n\t * @param {IChannelStatsResponse=} [properties] Properties to set\n\t * @returns {ChannelStatsResponse} ChannelStatsResponse instance\n\t */\n\tChannelStatsResponse.create = function create(properties) {\n\t\treturn new ChannelStatsResponse(properties)\n\t}\n\n\t/**\n\t * Encodes the specified ChannelStatsResponse message. Does not implicitly {@link ChannelStatsResponse.verify|verify} messages.\n\t * @function encode\n\t * @memberof ChannelStatsResponse\n\t * @static\n\t * @param {ChannelStatsResponse} message ChannelStatsResponse message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tChannelStatsResponse.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.channels != null && message.channels.length) {\n\t\t\tfor (var i = 0; i < message.channels.length; ++i)\n\t\t\t\t$root.ChannelStats.encode(\n\t\t\t\t\tmessage.channels[i],\n\t\t\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).fork()\n\t\t\t\t).ldelim()\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a ChannelStatsResponse message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ChannelStatsResponse\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ChannelStatsResponse} ChannelStatsResponse\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tChannelStatsResponse.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.ChannelStatsResponse()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tif (!(message.channels && message.channels.length)) {\n\t\t\t\t\t\tmessage.channels = []\n\t\t\t\t\t}\n\t\t\t\t\tmessage.channels.push(\n\t\t\t\t\t\t$root.ChannelStats.decode(reader, reader.uint32())\n\t\t\t\t\t)\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn ChannelStatsResponse\n})()\n\n$root.ChannelStats = (function () {\n\t/**\n\t * Properties of a ChannelStats.\n\t * @exports IChannelStats\n\t * @interface IChannelStats\n\t * @property {Uint8Array|null} [id] ChannelStats id\n\t * @property {boolean|null} [isPrivate] ChannelStats isPrivate\n\t * @property {boolean|null} [isOnline] ChannelStats isOnline\n\t */\n\n\t/**\n\t * Constructs a new ChannelStats.\n\t * @exports ChannelStats\n\t * @classdesc Represents a ChannelStats.\n\t * @implements IChannelStats\n\t * @constructor\n\t * @param {IChannelStats=} [properties] Properties to set\n\t */\n\tfunction ChannelStats(properties) {\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * ChannelStats id.\n\t * @member {Uint8Array} id\n\t * @memberof ChannelStats\n\t * @instance\n\t */\n\tChannelStats.prototype.id = $util.newBuffer([])\n\n\t/**\n\t * ChannelStats isPrivate.\n\t * @member {boolean} isPrivate\n\t * @memberof ChannelStats\n\t * @instance\n\t */\n\tChannelStats.prototype.isPrivate = false\n\n\t/**\n\t * ChannelStats isOnline.\n\t * @member {boolean} isOnline\n\t * @memberof ChannelStats\n\t * @instance\n\t */\n\tChannelStats.prototype.isOnline = false\n\n\t/**\n\t * Creates a new ChannelStats instance using the specified properties.\n\t * @function create\n\t * @memberof ChannelStats\n\t * @static\n\t * @param {IChannelStats=} [properties] Properties to set\n\t * @returns {ChannelStats} ChannelStats instance\n\t */\n\tChannelStats.create = function create(properties) {\n\t\treturn new ChannelStats(properties)\n\t}\n\n\t/**\n\t * Encodes the specified ChannelStats message. Does not implicitly {@link ChannelStats.verify|verify} messages.\n\t * @function encode\n\t * @memberof ChannelStats\n\t * @static\n\t * @param {ChannelStats} message ChannelStats message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tChannelStats.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.id != null && message.hasOwnProperty('id')) {\n\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).bytes(message.id)\n\t\t}\n\t\tif (message.isPrivate != null && message.hasOwnProperty('isPrivate')) {\n\t\t\twriter.uint32(/* id 2, wireType 0 =*/ 16).bool(message.isPrivate)\n\t\t}\n\t\tif (message.isOnline != null && message.hasOwnProperty('isOnline')) {\n\t\t\twriter.uint32(/* id 3, wireType 0 =*/ 24).bool(message.isOnline)\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a ChannelStats message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof ChannelStats\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {ChannelStats} ChannelStats\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tChannelStats.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.ChannelStats()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.id = reader.bytes()\n\t\t\t\t\tbreak\n\t\t\t\tcase 2:\n\t\t\t\t\tmessage.isPrivate = reader.bool()\n\t\t\t\t\tbreak\n\t\t\t\tcase 3:\n\t\t\t\t\tmessage.isOnline = reader.bool()\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn ChannelStats\n})()\n\n$root.JsonResponse = (function () {\n\t/**\n\t * Properties of a JsonResponse.\n\t * @exports IJsonResponse\n\t * @interface IJsonResponse\n\t * @property {string|null} [json] JsonResponse json\n\t */\n\n\t/**\n\t * Constructs a new JsonResponse.\n\t * @exports JsonResponse\n\t * @classdesc Represents a JsonResponse.\n\t * @implements IJsonResponse\n\t * @constructor\n\t * @param {IJsonResponse=} [properties] Properties to set\n\t */\n\tfunction JsonResponse(properties) {\n\t\tif (properties) {\n\t\t\tfor (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n\t\t\t\tif (properties[keys[i]] != null) {\n\t\t\t\t\tthis[keys[i]] = properties[keys[i]]\n\t\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * JsonResponse json.\n\t * @member {string} json\n\t * @memberof JsonResponse\n\t * @instance\n\t */\n\tJsonResponse.prototype.json = ''\n\n\t/**\n\t * Creates a new JsonResponse instance using the specified properties.\n\t * @function create\n\t * @memberof JsonResponse\n\t * @static\n\t * @param {IJsonResponse=} [properties] Properties to set\n\t * @returns {JsonResponse} JsonResponse instance\n\t */\n\tJsonResponse.create = function create(properties) {\n\t\treturn new JsonResponse(properties)\n\t}\n\n\t/**\n\t * Encodes the specified JsonResponse message. Does not implicitly {@link JsonResponse.verify|verify} messages.\n\t * @function encode\n\t * @memberof JsonResponse\n\t * @static\n\t * @param {JsonResponse} message JsonResponse message or plain object to encode\n\t * @param {$protobuf.Writer} [writer] Writer to encode to\n\t * @returns {$protobuf.Writer} Writer\n\t */\n\tJsonResponse.encode = function encode(message, writer) {\n\t\tif (!writer) {\n\t\t\twriter = $Writer.create()\n\t\t}\n\t\tif (message.json != null && message.hasOwnProperty('json')) {\n\t\t\twriter.uint32(/* id 1, wireType 2 =*/ 10).string(message.json)\n\t\t}\n\t\treturn writer\n\t}\n\n\t/**\n\t * Decodes a JsonResponse message from the specified reader or buffer.\n\t * @function decode\n\t * @memberof JsonResponse\n\t * @static\n\t * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n\t * @param {number} [length] Message length if known beforehand\n\t * @returns {JsonResponse} JsonResponse\n\t * @throws {Error} If the payload is not a reader or valid buffer\n\t * @throws {$protobuf.util.ProtocolError} If required fields are missing\n\t */\n\tJsonResponse.decode = function decode(reader, length) {\n\t\tif (!(reader instanceof $Reader)) {\n\t\t\treader = $Reader.create(reader)\n\t\t}\n\t\tvar end = length === undefined ? reader.len : reader.pos + length,\n\t\t\tmessage = new $root.JsonResponse()\n\t\twhile (reader.pos < end) {\n\t\t\tvar tag = reader.uint32()\n\t\t\tswitch (tag >>> 3) {\n\t\t\t\tcase 1:\n\t\t\t\t\tmessage.json = reader.string()\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treader.skipType(tag & 7)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn message\n\t}\n\n\treturn JsonResponse\n})()\n","import { $root } from './model'\n\n// Protobuf message models\n// @ts-ignore\nexport const Response = $root['Response']\n// @ts-ignore\nexport const ResponseBatch = $root['ResponseBatch']\n// @ts-ignore\nexport const Request = $root['Request']\n// @ts-ignore\nexport const RequestBatch = $root['RequestBatch']\n// @ts-ignore\nexport const IncomingMessagesRequest = $root['IncomingMessagesRequest']\n// @ts-ignore\nexport const IncomingMessage = $root['IncomingMessage']\n// @ts-ignore\nexport const Receiver = $root['Receiver']\n","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport Type from '../tools/type'\nimport { ConnectionType, type TypeConnector } from '../types/pull'\nimport type {\n\tConnectorParent,\n\tConnectorCallbacks,\n\tConnectorConfig,\n} from '../types/pull'\n\nexport abstract class AbstractConnector implements TypeConnector {\n\tprivate _logger: null | LoggerBrowser = null\n\n\tprotected _connected: boolean = false\n\n\tprotected _connectionType: ConnectionType\n\n\tprotected _disconnectCode: number = 0\n\tprotected _disconnectReason: string = ''\n\n\tprotected _parent: ConnectorParent\n\n\tprotected _callbacks: ConnectorCallbacks\n\n\tprotected constructor(config: ConnectorConfig) {\n\t\tthis._parent = config.parent\n\t\tthis._connectionType = ConnectionType.Undefined\n\n\t\tthis._callbacks = {\n\t\t\tonOpen: Type.isFunction(config.onOpen) ? config.onOpen : () => {},\n\t\t\tonDisconnect: Type.isFunction(config.onDisconnect)\n\t\t\t\t? config.onDisconnect\n\t\t\t\t: () => {},\n\t\t\tonError: Type.isFunction(config.onError) ? config.onError : () => {},\n\t\t\tonMessage: Type.isFunction(config.onMessage)\n\t\t\t\t? config.onMessage\n\t\t\t\t: () => {},\n\t\t} as ConnectorCallbacks\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t}\n\n\tgetLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\n\tdestroy(): void {}\n\n\tget connected() {\n\t\treturn this._connected\n\t}\n\n\tset connected(value) {\n\t\tif (value == this._connected) {\n\t\t\treturn\n\t\t}\n\n\t\tthis._connected = value\n\n\t\tif (this._connected) {\n\t\t\tthis._callbacks.onOpen()\n\t\t} else {\n\t\t\tthis._callbacks.onDisconnect({\n\t\t\t\tcode: this.disconnectCode,\n\t\t\t\treason: this.disconnectReason,\n\t\t\t})\n\t\t}\n\t}\n\n\tget disconnectCode(): number {\n\t\treturn this._disconnectCode\n\t}\n\n\tget disconnectReason(): string {\n\t\treturn this._disconnectReason\n\t}\n\n\tget connectionPath(): string {\n\t\treturn this._parent.getConnectionPath(this._connectionType)\n\t}\n\n\t/**\n\t * Make connect to the server\n\t */\n\tabstract connect(): void\n\n\t/**\n\t * Make disconnect from the server\n\t * @param code\n\t * @param reason\n\t */\n\tabstract disconnect(code: number, reason: string): void\n\n\t/**\n\t * Sends some data to the server\n\t * @param {ArrayBuffer|string} buffer Data to send.\n\t * @return {boolean}\n\t */\n\tabstract send(buffer: ArrayBuffer | string): boolean\n}\n","import Text from '../tools/text'\nimport { AbstractConnector } from './abstract-connector'\nimport { ConnectionType } from '../types/pull'\nimport type { ConnectorConfig } from '../types/pull'\n\nexport class WebSocketConnector extends AbstractConnector {\n\tprivate _socket: null | WebSocket\n\n\tprivate readonly _onSocketOpenHandler: () => void\n\tprivate readonly _onSocketCloseHandler: (event: CloseEvent) => void\n\tprivate readonly _onSocketErrorHandler: (event: Event) => void\n\tprivate readonly _onSocketMessageHandler: (event: MessageEvent) => void\n\n\tconstructor(config: ConnectorConfig) {\n\t\tsuper(config)\n\n\t\tthis._connectionType = ConnectionType.WebSocket\n\t\tthis._socket = null\n\n\t\tthis._onSocketOpenHandler = this._onSocketOpen.bind(this)\n\t\tthis._onSocketCloseHandler = this._onSocketClose.bind(this)\n\t\tthis._onSocketErrorHandler = this._onSocketError.bind(this)\n\t\tthis._onSocketMessageHandler = this._onSocketMessage.bind(this)\n\t}\n\n\toverride destroy() {\n\t\tsuper.destroy()\n\n\t\tif (this._socket) {\n\t\t\tthis._socket.close()\n\t\t\tthis._socket = null\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\toverride connect(): void {\n\t\tif (this._socket) {\n\t\t\tif (this._socket.readyState === 1) {\n\t\t\t\t/**\n\t\t\t\t * @memo already connected\n\t\t\t\t */\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\tthis.clearEventListener()\n\n\t\t\t\tthis._socket.close()\n\t\t\t\tthis._socket = null\n\t\t\t}\n\t\t}\n\n\t\tthis._createSocket()\n\t}\n\n\tget socket(): null | WebSocket {\n\t\treturn this._socket\n\t}\n\n\t/**\n\t * @inheritDoc\n\t * @param code\n\t * @param reason\n\t */\n\toverride disconnect(code: number, reason: string): void {\n\t\tif (this._socket !== null) {\n\t\t\tthis.clearEventListener()\n\n\t\t\tthis._socket.close(code, reason)\n\t\t}\n\t\tthis._socket = null\n\t\tthis._disconnectCode = code\n\t\tthis._disconnectReason = reason\n\t\tthis.connected = false\n\t}\n\n\t/**\n\t * Via websocket connection\n\t * @inheritDoc\n\t */\n\toverride send(buffer: ArrayBuffer | string): boolean {\n\t\tif (!this._socket || this._socket.readyState !== 1) {\n\t\t\tthis.getLogger().error(\n\t\t\t\tnew Error(`${Text.getDateForLog()}: Pull: WebSocket is not connected`)\n\t\t\t)\n\n\t\t\treturn false\n\t\t}\n\n\t\tthis._socket.send(buffer)\n\t\treturn true\n\t}\n\n\t// region Event Handlers ////\n\tprivate _onSocketOpen(): void {\n\t\tthis.connected = true\n\t}\n\n\tprivate _onSocketClose(event: CloseEvent) {\n\t\tthis._socket = null\n\t\tthis._disconnectCode = Number(event.code)\n\t\tthis._disconnectReason = event.reason\n\t\tthis.connected = false\n\t}\n\n\tprivate _onSocketError(event: Event): void {\n\t\tthis._callbacks.onError(new Error(`Socket error: ${event}`))\n\t}\n\n\tprivate _onSocketMessage(event: MessageEvent): void {\n\t\tthis._callbacks.onMessage(event.data)\n\t}\n\t// endregion ////\n\n\t// region Tools ////\n\tprivate clearEventListener(): void {\n\t\tif (this._socket) {\n\t\t\tthis._socket.removeEventListener('open', this._onSocketOpenHandler)\n\n\t\t\tthis._socket.removeEventListener('close', this._onSocketCloseHandler)\n\n\t\t\tthis._socket.removeEventListener('error', this._onSocketErrorHandler)\n\n\t\t\tthis._socket.removeEventListener('message', this._onSocketMessageHandler)\n\t\t}\n\t}\n\n\tprivate _createSocket(): void {\n\t\tif (this._socket) {\n\t\t\tthrow new Error('Socket already exists')\n\t\t}\n\n\t\tif (!this.connectionPath) {\n\t\t\tthrow new Error('Websocket connection path is not defined')\n\t\t}\n\n\t\tthis._socket = new WebSocket(this.connectionPath)\n\t\tthis._socket.binaryType = 'arraybuffer'\n\n\t\tthis._socket.addEventListener('open', this._onSocketOpenHandler)\n\n\t\tthis._socket.addEventListener('close', this._onSocketCloseHandler)\n\n\t\tthis._socket.addEventListener('error', this._onSocketErrorHandler)\n\n\t\tthis._socket.addEventListener('message', this._onSocketMessageHandler)\n\t}\n\t// endregion ////\n}\n","import Type from '../tools/type'\nimport Text from '../tools/text'\nimport { AbstractConnector } from './abstract-connector'\nimport { ConnectionType } from '../types/pull'\nimport type { ConnectorConfig } from '../types/pull'\n\nconst LONG_POLLING_TIMEOUT = 60\n\nexport class LongPollingConnector extends AbstractConnector {\n\tprivate _active: boolean\n\n\tprivate _requestTimeout: null | number\n\tprivate _failureTimeout: null | number\n\tprivate readonly _xhr: XMLHttpRequest\n\tprivate _requestAborted: boolean\n\n\tconstructor(config: ConnectorConfig) {\n\t\tsuper(config)\n\n\t\tthis._active = false\n\t\tthis._connectionType = ConnectionType.LongPolling\n\n\t\tthis._requestTimeout = null\n\t\tthis._failureTimeout = null\n\t\tthis._xhr = this.createXhr()\n\t\tthis._requestAborted = false\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\toverride connect(): void {\n\t\tthis._active = true\n\t\tthis.performRequest()\n\t}\n\n\t/**\n\t * @inheritDoc\n\t * @param code\n\t * @param reason\n\t */\n\toverride disconnect(code: number, reason: string): void {\n\t\tthis._active = false\n\n\t\tthis.clearTimeOut()\n\n\t\tif (this._xhr) {\n\t\t\tthis._requestAborted = true\n\t\t\tthis._xhr.abort()\n\t\t}\n\n\t\tthis._disconnectCode = code\n\t\tthis._disconnectReason = reason\n\t\tthis.connected = false\n\t}\n\n\tprivate performRequest(): void {\n\t\tif (!this._active) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!this.connectionPath) {\n\t\t\tthrow new Error('Long polling connection path is not defined')\n\t\t}\n\n\t\tif (this._xhr.readyState !== 0 && this._xhr.readyState !== 4) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.clearTimeOut()\n\n\t\tthis._failureTimeout = setTimeout(() => {\n\t\t\tthis.connected = true\n\t\t}, 5_000)\n\n\t\tthis._requestTimeout = setTimeout(\n\t\t\tthis.onRequestTimeout.bind(this),\n\t\t\tLONG_POLLING_TIMEOUT * 1_000\n\t\t)\n\n\t\tthis._xhr.open('GET', this.connectionPath)\n\t\tthis._xhr.send()\n\t}\n\n\tprivate onRequestTimeout() {\n\t\tthis._requestAborted = true\n\t\tthis._xhr.abort()\n\t\tthis.performRequest()\n\t}\n\n\tprivate onXhrReadyStateChange(): void {\n\t\tif (this._xhr.readyState === 4) {\n\t\t\tif (!this._requestAborted || this._xhr.status == 200) {\n\t\t\t\tthis.onResponse(this._xhr.response)\n\t\t\t}\n\n\t\t\tthis._requestAborted = false\n\t\t}\n\t}\n\n\t/**\n\t * Via http request\n\t * @inheritDoc\n\t */\n\toverride send(buffer: ArrayBuffer | string): boolean {\n\t\tconst path = this._parent.getPublicationPath()\n\t\tif (!path) {\n\t\t\tthis.getLogger().error(\n\t\t\t\tnew Error(`${Text.getDateForLog()}: Pull: publication path is empty`)\n\t\t\t)\n\t\t\treturn false\n\t\t}\n\n\t\tconst xhr = new XMLHttpRequest()\n\t\txhr.open('POST', path)\n\t\txhr.send(buffer)\n\n\t\treturn true\n\t}\n\n\tprivate onResponse(response: any): void {\n\t\tthis.clearTimeOut()\n\n\t\tif (this._xhr.status === 200) {\n\t\t\tthis.connected = true\n\t\t\tif (Type.isStringFilled(response) || response instanceof ArrayBuffer) {\n\t\t\t\tthis._callbacks.onMessage(response)\n\t\t\t} else {\n\t\t\t\tthis._parent.session.mid = null\n\t\t\t}\n\t\t\tthis.performRequest()\n\t\t} else if (this._xhr.status === 304) {\n\t\t\tthis.connected = true\n\t\t\tif (\n\t\t\t\tthis._xhr.getResponseHeader('Expires') ===\n\t\t\t\t'Thu, 01 Jan 1973 11:11:01 GMT'\n\t\t\t) {\n\t\t\t\tconst lastMessageId = this._xhr.getResponseHeader('Last-Message-Id')\n\t\t\t\tif (Type.isStringFilled(lastMessageId)) {\n\t\t\t\t\tthis._parent.setLastMessageId(lastMessageId || '')\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.performRequest()\n\t\t} else {\n\t\t\tthis._callbacks.onError(new Error('Could not connect to the server'))\n\n\t\t\tthis.connected = false\n\t\t}\n\t}\n\n\t// region Tools ////\n\tprivate clearTimeOut(): void {\n\t\tif (this._failureTimeout) {\n\t\t\tclearTimeout(this._failureTimeout)\n\t\t\tthis._failureTimeout = null\n\t\t}\n\n\t\tif (this._requestTimeout) {\n\t\t\tclearTimeout(this._requestTimeout)\n\t\t\tthis._requestTimeout = null\n\t\t}\n\t}\n\n\tprivate createXhr(): XMLHttpRequest {\n\t\tconst result = new XMLHttpRequest()\n\n\t\tif (this._parent.isProtobufSupported() && !this._parent.isJsonRpc()) {\n\t\t\tresult.responseType = 'arraybuffer'\n\t\t}\n\n\t\tresult.addEventListener(\n\t\t\t'readystatechange',\n\t\t\tthis.onXhrReadyStateChange.bind(this)\n\t\t)\n\n\t\treturn result\n\t}\n\t// endregion ////\n}\n","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport Type from '../tools/type'\nimport Text from '../tools/text'\nimport Browser from '../tools/browser'\nimport { StorageManager } from './storage-manager'\nimport { JsonRpc } from './json-rpc'\nimport { SharedConfig } from './shared-config'\nimport { ChannelManager } from './channel-manager'\nimport {\n\t//Response,\n\tResponseBatch,\n\t//Request,\n\tRequestBatch,\n\t//IncomingMessagesRequest,\n\tIncomingMessage,\n\tReceiver,\n} from './protobuf'\nimport type { TypeB24 } from '../types/b24'\nimport {\n\tCloseReasons,\n\tConnectionType,\n\tPullStatus,\n\tRpcMethod,\n\tSenderType,\n\tServerMode,\n\tSubscriptionType,\n\tSystemCommands,\n\tLsKeys,\n\ttype StorageManagerParams,\n\ttype TypePullClientParams,\n\ttype TypePullClientSession,\n\ttype TypeStorageManager,\n\ttype SharedConfigParams,\n\ttype TypeChannelManagerParams,\n\ttype TypeConnector,\n\ttype RpcError,\n\ttype TypePullClientConfig,\n\ttype TypePullMessage,\n\ttype TypeSubscriptionOptions,\n\ttype TypeSubscriptionCommandHandler,\n\ttype TypePullClientEmitConfig,\n\ttype CommandHandlerFunctionV1,\n\ttype CommandHandlerFunctionV2,\n\ttype ConnectorParent,\n\ttype UserStatusCallback,\n\ttype TypePublicIdDescriptor,\n\ttype TypePullClientMessageBatch,\n\ttype TypeChanel,\n\ttype TypeSessionEvent,\n\ttype TypePullClientMessageBody,\n} from '../types/pull'\nimport type { AjaxResult } from '../core/http/ajax-result'\nimport type { Payload } from '../types/payloads'\nimport type { NumberString } from '../types/common'\nimport { WebSocketConnector } from './web-socket-connector'\nimport { LongPollingConnector } from './long-polling-connector'\nimport type { AjaxError } from '../core/http/ajax-error'\n\n/**\n * @memo api revision - check module/pull/include.php\n */\nconst REVISION = 19\nconst RESTORE_WEBSOCKET_TIMEOUT = 30 * 60\nconst OFFLINE_STATUS_DELAY = 5_000\nconst CONFIG_CHECK_INTERVAL = 60 * 1000\nconst MAX_IDS_TO_STORE = 10\nconst PING_TIMEOUT = 10\nconst JSON_RPC_PING = 'ping'\nconst JSON_RPC_PONG = 'pong'\nconst LS_SESSION = 'bx-pull-session'\nconst LS_SESSION_CACHE_TIME = 20\n\nconst EmptyConfig = {\n\tapi: {},\n\tchannels: {},\n\tpublicChannels: {},\n\tserver: { timeShift: 0 },\n\tclientId: null,\n\tjwt: null,\n\texp: 0,\n} as TypePullClientConfig\n\n/**\n * @todo fix logic for _loggingEnabled\n */\nexport class PullClient implements ConnectorParent {\n\t// region Params ////\n\tprivate _logger: null | LoggerBrowser = null\n\tprivate _restClient: TypeB24\n\tprivate _status: PullStatus\n\tprivate _context: string\n\tprivate readonly _guestMode: boolean\n\tprivate readonly _guestUserId: number\n\tprivate _userId: number\n\n\tprivate _configGetMethod: string\n\tprivate _getPublicListMethod: string\n\n\tprivate _siteId: string\n\tprivate _enabled: boolean\n\n\tprivate _unloading: boolean = false\n\tprivate _starting: boolean = false\n\tprivate _debug: boolean = false\n\tprivate _connectionAttempt: number = 0\n\tprivate _connectionType: ConnectionType = ConnectionType.WebSocket\n\tprivate _reconnectTimeout: null | number = null\n\tprivate _restartTimeout: null | number = null\n\tprivate _restoreWebSocketTimeout: null | number = null\n\n\tprivate _skipStorageInit: boolean\n\tprivate _skipCheckRevision: boolean\n\n\tprivate _subscribers: Record<string, any> = {}\n\tprivate _watchTagsQueue: Map<string, boolean> = new Map()\n\tprivate _watchUpdateInterval: number = 1_740_000\n\tprivate _watchForceUpdateInterval: number = 5_000\n\tprivate _configTimestamp: number = 0\n\tprivate _session: TypePullClientSession = {\n\t\tmid: null,\n\t\ttag: null,\n\t\ttime: null,\n\t\thistory: {},\n\t\tlastMessageIds: [],\n\t\tmessageCount: 0,\n\t}\n\n\tprivate _connectors: Record<ConnectionType, null | TypeConnector> = {\n\t\t[ConnectionType.Undefined]: null,\n\t\t[ConnectionType.WebSocket]: null,\n\t\t[ConnectionType.LongPolling]: null,\n\t}\n\n\tprivate _isSecure: boolean\n\n\tprivate _config: null | TypePullClientConfig = null\n\n\tprivate _storage: null | TypeStorageManager = null\n\tprivate _sharedConfig: SharedConfig\n\tprivate _channelManager: ChannelManager\n\tprivate _jsonRpcAdapter: null | JsonRpc = null\n\n\t/**\n\t * @depricate\n\t */\n\t// private _notificationPopup: null = null\n\n\t// timers ////\n\tprivate _checkInterval: null | number = null\n\tprivate _offlineTimeout: null | number = null\n\tprivate _watchUpdateTimeout: null | number = null\n\n\tprivate _pingWaitTimeout: null | number = null\n\n\t// manual stop workaround ////\n\tprivate _isManualDisconnect: boolean = false\n\n\tprivate _loggingEnabled: boolean = false\n\n\t// bound event handlers ////\n\tprivate _onPingTimeoutHandler: () => void\n\n\t// [userId] => array of callbacks\n\tprivate _userStatusCallbacks: Record<number, UserStatusCallback[]> = {}\n\n\tprivate _connectPromise: null | {\n\t\tresolve: (response: any) => void\n\t\treject: (error: string | RpcError | Error) => void\n\t} = null\n\n\tprivate _startingPromise: null | Promise<boolean> = null\n\t// endregion ////\n\n\t// region Init ////\n\t/**\n\t * @param params\n\t */\n\tconstructor(params: TypePullClientParams) {\n\t\tthis._restClient = params.b24\n\t\tthis._status = PullStatus.Offline\n\t\tthis._context = 'master'\n\n\t\t// region RestApplication ////\n\t\tif (params.restApplication) {\n\t\t\tif (typeof params.configGetMethod === 'undefined') {\n\t\t\t\tparams.configGetMethod = 'pull.application.config.get'\n\t\t\t}\n\n\t\t\tif (typeof params.skipCheckRevision === 'undefined') {\n\t\t\t\tparams.skipCheckRevision = true\n\t\t\t}\n\n\t\t\tif (Type.isStringFilled(params.restApplication)) {\n\t\t\t\tparams.siteId = params.restApplication\n\t\t\t}\n\n\t\t\tparams.serverEnabled = true\n\t\t}\n\t\t// endregion ////\n\n\t\t// region Params ////\n\t\tthis._guestMode = params.guestMode\n\t\t\t? Text.toBoolean(params.guestMode)\n\t\t\t: false\n\n\t\tthis._guestUserId = params.guestUserId\n\t\t\t? Text.toInteger(params.guestUserId)\n\t\t\t: 0\n\n\t\tif (this._guestMode && this._guestUserId > 0) {\n\t\t\tthis._userId = this._guestUserId\n\t\t} else {\n\t\t\tthis._guestMode = false\n\t\t\tthis._userId = params.userId ? Text.toInteger(params.userId) : 0\n\t\t}\n\n\t\tthis._siteId = params.siteId ?? 'none'\n\n\t\t// eslint-disable-next-line\n\t\tthis._enabled = !Type.isUndefined(params.serverEnabled)\n\t\t\t? params.serverEnabled === true\n\t\t\t: true\n\n\t\t// eslint-disable-next-line\n\t\tthis._configGetMethod = !Type.isStringFilled(params.configGetMethod)\n\t\t\t? 'pull.config.get'\n\t\t\t: params.configGetMethod || ''\n\n\t\t// eslint-disable-next-line\n\t\tthis._getPublicListMethod = !Type.isStringFilled(params.getPublicListMethod)\n\t\t\t? 'pull.channel.public.list'\n\t\t\t: params.getPublicListMethod || ''\n\n\t\tthis._skipStorageInit = params.skipStorageInit === true\n\t\tthis._skipCheckRevision = params.skipCheckRevision === true\n\n\t\tif (!Type.isUndefined(params.configTimestamp)) {\n\t\t\tthis._configTimestamp = Text.toInteger(params.configTimestamp)\n\t\t}\n\t\t// endregion ////\n\n\t\tthis._isSecure = document?.location.href.indexOf('https') === 0\n\n\t\tif (this._userId && !this._skipStorageInit) {\n\t\t\tthis._storage = new StorageManager({\n\t\t\t\tuserId: this._userId,\n\t\t\t\tsiteId: this._siteId,\n\t\t\t} as StorageManagerParams)\n\t\t}\n\n\t\tthis._sharedConfig = new SharedConfig({\n\t\t\tonWebSocketBlockChanged: this.onWebSocketBlockChanged.bind(this),\n\t\t\tstorage: this._storage,\n\t\t} as SharedConfigParams)\n\n\t\tthis._channelManager = new ChannelManager({\n\t\t\tb24: this._restClient,\n\t\t\tgetPublicListMethod: this._getPublicListMethod,\n\t\t} as TypeChannelManagerParams)\n\n\t\tthis._loggingEnabled = this._sharedConfig.isLoggingEnabled()\n\n\t\t// bound event handlers ////\n\t\tthis._onPingTimeoutHandler = this.onPingTimeout.bind(this)\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t\tthis._jsonRpcAdapter?.setLogger(this.getLogger())\n\t\tthis._storage?.setLogger(this.getLogger())\n\t\tthis._sharedConfig.setLogger(this.getLogger())\n\t\tthis._channelManager.setLogger(this.getLogger())\n\n\t\tthis._connectors.webSocket?.setLogger(this.getLogger())\n\t\tthis._connectors.longPolling?.setLogger(this.getLogger())\n\t}\n\n\tgetLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\n\tdestroy(): void {\n\t\tthis.stop(CloseReasons.NORMAL_CLOSURE, 'manual stop')\n\n\t\tthis.onBeforeUnload()\n\t}\n\n\tprivate init(): void {\n\t\tthis._connectors.webSocket = new WebSocketConnector({\n\t\t\tparent: this,\n\t\t\tonOpen: this.onWebSocketOpen.bind(this),\n\t\t\tonMessage: this.onIncomingMessage.bind(this),\n\t\t\tonDisconnect: this.onWebSocketDisconnect.bind(this),\n\t\t\tonError: this.onWebSocketError.bind(this),\n\t\t})\n\n\t\tthis._connectors.longPolling = new LongPollingConnector({\n\t\t\tparent: this,\n\t\t\tonOpen: this.onLongPollingOpen.bind(this),\n\t\t\tonMessage: this.onIncomingMessage.bind(this),\n\t\t\tonDisconnect: this.onLongPollingDisconnect.bind(this),\n\t\t\tonError: this.onLongPollingError.bind(this),\n\t\t})\n\n\t\tthis._connectionType = this.isWebSocketAllowed()\n\t\t\t? ConnectionType.WebSocket\n\t\t\t: ConnectionType.LongPolling\n\n\t\twindow.addEventListener('beforeunload', this.onBeforeUnload.bind(this))\n\t\twindow.addEventListener('offline', this.onOffline.bind(this))\n\t\twindow.addEventListener('online', this.onOnline.bind(this))\n\n\t\t/**\n\t\t * @memo Not use under Node.js\n\t\t */\n\t\t/*/\n\t\tif (BX && BX.addCustomEvent)\n\t\t{\n\t\t\tBX.addCustomEvent('BXLinkOpened', this.connect.bind(this))\n\t\t}\n\n\t\tif (BX && BX.desktop)\n\t\t{\n\t\t\tBX.addCustomEvent('onDesktopReload', () => {\n\t\t\t\tthis._session.mid = null\n\t\t\t\tthis._session.tag = null\n\t\t\t\tthis._session.time = null\n\t\t\t})\n\n\t\t\tBX.desktop.addCustomEvent('BXLoginSuccess', () => this.restart(1_000, 'desktop login'))\n\t\t}\n\t\t//*/\n\n\t\tthis._jsonRpcAdapter = new JsonRpc({\n\t\t\tconnector: this._connectors.webSocket,\n\t\t\thandlers: {\n\t\t\t\t'incoming.message': this.handleRpcIncomingMessage.bind(this),\n\t\t\t},\n\t\t})\n\t}\n\t// endregion ////\n\n\t// region Get-Set ////\n\tget connector(): null | TypeConnector {\n\t\treturn this._connectors[this._connectionType]\n\t}\n\n\tget status(): PullStatus {\n\t\treturn this._status\n\t}\n\n\t/**\n\t * @param status\n\t */\n\tset status(status: PullStatus) {\n\t\tif (this._status === status) {\n\t\t\treturn\n\t\t}\n\n\t\tthis._status = status\n\t\tif (this._offlineTimeout) {\n\t\t\tclearTimeout(this._offlineTimeout)\n\t\t\tthis._offlineTimeout = null\n\t\t}\n\n\t\tif (status === PullStatus.Offline) {\n\t\t\tthis.sendPullStatusDelayed(status, OFFLINE_STATUS_DELAY)\n\t\t} else {\n\t\t\tthis.sendPullStatus(status)\n\t\t}\n\t}\n\n\tget session(): TypePullClientSession {\n\t\treturn this._session\n\t}\n\t// endregion ////\n\n\t// region Public /////\n\t/**\n\t * Creates a subscription to incoming messages.\n\t *\n\t * @param {TypeSubscriptionOptions | TypeSubscriptionCommandHandler} params\n\t * @returns { () => void } - Unsubscribe callback function\n\t */\n\tpublic subscribe(\n\t\tparams: TypeSubscriptionOptions | TypeSubscriptionCommandHandler\n\t): () => void {\n\t\tif (!Type.isPlainObject(params)) {\n\t\t\treturn this.attachCommandHandler(params as TypeSubscriptionCommandHandler)\n\t\t}\n\n\t\tparams = params as TypeSubscriptionOptions\n\n\t\tparams.type = params.type || SubscriptionType.Server\n\t\tparams.command = params.command || null\n\n\t\tif (\n\t\t\tparams.type == SubscriptionType.Server ||\n\t\t\tparams.type == SubscriptionType.Client\n\t\t) {\n\t\t\tif (typeof params.moduleId === 'undefined') {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`${Text.getDateForLog()}: Pull.subscribe: parameter moduleId is not specified`\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (typeof this._subscribers[params.type] === 'undefined') {\n\t\t\t\tthis._subscribers[params.type] = {}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttypeof this._subscribers[params.type][params.moduleId] === 'undefined'\n\t\t\t) {\n\t\t\t\tthis._subscribers[params.type][params.moduleId] = {\n\t\t\t\t\tcallbacks: [],\n\t\t\t\t\tcommands: {},\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (params.command) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof this._subscribers[params.type][params.moduleId]['commands'][\n\t\t\t\t\t\tparams.command\n\t\t\t\t\t] === 'undefined'\n\t\t\t\t) {\n\t\t\t\t\tthis._subscribers[params.type][params.moduleId]['commands'][\n\t\t\t\t\t\tparams.command\n\t\t\t\t\t] = []\n\t\t\t\t}\n\n\t\t\t\tthis._subscribers[params.type][params.moduleId]['commands'][\n\t\t\t\t\tparams.command\n\t\t\t\t].push(params.callback)\n\n\t\t\t\treturn () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof params.type === 'undefined' ||\n\t\t\t\t\t\ttypeof params.moduleId === 'undefined' ||\n\t\t\t\t\t\ttypeof params.command === 'undefined' ||\n\t\t\t\t\t\tnull === params.command\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._subscribers[params.type][params.moduleId]['commands'][\n\t\t\t\t\t\tparams.command\n\t\t\t\t\t] = this._subscribers[params.type][params.moduleId]['commands'][\n\t\t\t\t\t\tparams.command\n\t\t\t\t\t].filter((element: any) => {\n\t\t\t\t\t\treturn element !== params.callback\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._subscribers[params.type][params.moduleId]['callbacks'].push(\n\t\t\t\t\tparams.callback\n\t\t\t\t)\n\n\t\t\t\treturn () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof params.type === 'undefined' ||\n\t\t\t\t\t\ttypeof params.moduleId === 'undefined'\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._subscribers[params.type][params.moduleId]['callbacks'] =\n\t\t\t\t\t\tthis._subscribers[params.type][params.moduleId]['callbacks'].filter(\n\t\t\t\t\t\t\t(element: any) => {\n\t\t\t\t\t\t\t\treturn element !== params.callback\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof this._subscribers[params.type] === 'undefined') {\n\t\t\t\tthis._subscribers[params.type] = []\n\t\t\t}\n\n\t\t\tthis._subscribers[params.type].push(params.callback)\n\n\t\t\treturn () => {\n\t\t\t\tif (typeof params.type === 'undefined') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tthis._subscribers[params.type] = this._subscribers[params.type].filter(\n\t\t\t\t\t(element: any) => {\n\t\t\t\t\t\treturn element !== params.callback\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {TypeSubscriptionCommandHandler} handler\n\t * @returns {() => void} - Unsubscribe callback function\n\t */\n\tprivate attachCommandHandler(\n\t\thandler: TypeSubscriptionCommandHandler\n\t): () => void {\n\t\tif (\n\t\t\ttypeof handler.getModuleId !== 'function' ||\n\t\t\ttypeof handler.getModuleId() !== 'string'\n\t\t) {\n\t\t\tthis.getLogger().error(\n\t\t\t\t`${Text.getDateForLog()}: Pull.attachCommandHandler: result of handler.getModuleId() is not a string.`\n\t\t\t)\n\t\t\treturn () => {}\n\t\t}\n\n\t\tlet type = SubscriptionType.Server\n\t\tif (typeof handler.getSubscriptionType === 'function') {\n\t\t\ttype = handler.getSubscriptionType()\n\t\t}\n\n\t\treturn this.subscribe({\n\t\t\ttype: type,\n\t\t\tmoduleId: handler.getModuleId(),\n\t\t\tcallback: (data: TypePullMessage) => {\n\t\t\t\tlet method = null\n\n\t\t\t\tif (typeof handler.getMap === 'function') {\n\t\t\t\t\tconst mapping = handler.getMap()\n\t\t\t\t\tif (mapping && typeof mapping === 'object') {\n\t\t\t\t\t\tconst rowMapping = mapping[data.command]\n\t\t\t\t\t\tif (typeof rowMapping === 'function') {\n\t\t\t\t\t\t\tmethod = rowMapping.bind(handler)\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof rowMapping === 'string' &&\n\t\t\t\t\t\t\ttypeof handler[rowMapping] === 'function'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tmethod = handler[rowMapping].bind(handler)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * handler.handleSomeCommandName: CommandHandlerFunction\n\t\t\t\t */\n\t\t\t\tif (!method) {\n\t\t\t\t\tconst methodName = `handle${Text.capitalize(data.command)}`\n\t\t\t\t\tif (typeof handler[methodName] === 'function') {\n\t\t\t\t\t\tmethod = handler[methodName].bind(handler)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (method) {\n\t\t\t\t\tif (this._debug && this._context !== 'master') {\n\t\t\t\t\t\tthis.getLogger().warn(\n\t\t\t\t\t\t\t`${Text.getDateForLog()}: Pull.attachCommandHandler: result of handler.getModuleId() is not a string`,\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tmethod(data.params, data.extra, data.command)\n\t\t\t\t}\n\t\t\t},\n\t\t})\n\t}\n\n\t/**\n\t * @param config\n\t */\n\tpublic async start(\n\t\tconfig:\n\t\t\t| null\n\t\t\t| (TypePullClientConfig & {\n\t\t\t\t\tskipReconnectToLastSession?: boolean\n\t\t\t }) = null\n\t): Promise<boolean> {\n\t\tlet allowConfigCaching = true\n\n\t\tif (this.isConnected()) {\n\t\t\treturn Promise.resolve(true)\n\t\t}\n\n\t\tif (this._starting && this._startingPromise) {\n\t\t\treturn this._startingPromise\n\t\t}\n\n\t\tif (!this._userId) {\n\t\t\tthrow new Error('Not set userId')\n\t\t}\n\n\t\tif (this._siteId === 'none') {\n\t\t\tthrow new Error('Not set siteId')\n\t\t}\n\n\t\tlet skipReconnectToLastSession = false\n\t\tif (!!config && Type.isPlainObject(config)) {\n\t\t\tif (typeof config?.skipReconnectToLastSession !== 'undefined') {\n\t\t\t\tskipReconnectToLastSession = config.skipReconnectToLastSession\n\t\t\t\tdelete config.skipReconnectToLastSession\n\t\t\t}\n\n\t\t\tthis._config = config\n\t\t\tallowConfigCaching = false\n\t\t}\n\n\t\tif (!this._enabled) {\n\t\t\treturn Promise.reject({\n\t\t\t\tex: {\n\t\t\t\t\terror: 'PULL_DISABLED',\n\t\t\t\t\terror_description: 'Push & Pull server is disabled',\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tconst now = Date.now()\n\t\tlet oldSession\n\t\tif (!skipReconnectToLastSession && this._storage) {\n\t\t\toldSession = this._storage.get(LS_SESSION, null)\n\t\t}\n\n\t\tif (\n\t\t\tType.isPlainObject(oldSession) &&\n\t\t\toldSession.hasOwnProperty('ttl') &&\n\t\t\toldSession.ttl >= now\n\t\t) {\n\t\t\tthis._session.mid = oldSession.mid\n\t\t}\n\n\t\tthis._starting = true\n\t\treturn (this._startingPromise = new Promise((resolve, reject) => {\n\t\t\tthis.loadConfig('client_start')\n\t\t\t\t.then((config) => {\n\t\t\t\t\tthis.setConfig(config, allowConfigCaching)\n\t\t\t\t\tthis.init()\n\t\t\t\t\tthis.updateWatch(true)\n\t\t\t\t\tthis.startCheckConfig()\n\n\t\t\t\t\tthis.connect().then(\n\t\t\t\t\t\t() => resolve(true),\n\t\t\t\t\t\t(error) => reject(error)\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis._starting = false\n\t\t\t\t\tthis.status = PullStatus.Offline\n\t\t\t\t\tthis.stopCheckConfig()\n\t\t\t\t\tthis.getLogger().error(\n\t\t\t\t\t\t`${Text.getDateForLog()}: Pull: could not read push-server config `,\n\t\t\t\t\t\terror\n\t\t\t\t\t)\n\t\t\t\t\treject(error)\n\t\t\t\t})\n\t\t}))\n\t}\n\n\t/**\n\t * @param disconnectCode\n\t * @param disconnectReason\n\t */\n\tpublic restart(\n\t\tdisconnectCode: number | CloseReasons = CloseReasons.NORMAL_CLOSURE,\n\t\tdisconnectReason: string = 'manual restart'\n\t): void {\n\t\tif (this._restartTimeout) {\n\t\t\tclearTimeout(this._restartTimeout)\n\t\t\tthis._restartTimeout = null\n\t\t}\n\n\t\tthis.getLogger().log(\n\t\t\t`${Text.getDateForLog()}: Pull: restarting with code ${disconnectCode}`\n\t\t)\n\n\t\tthis.disconnect(disconnectCode, disconnectReason)\n\n\t\tif (this._storage) {\n\t\t\tthis._storage.remove(LsKeys.PullConfig)\n\t\t}\n\n\t\tthis._config = null\n\n\t\tconst loadConfigReason = `${disconnectCode}_${disconnectReason.replaceAll(' ', '_')}`\n\t\tthis.loadConfig(loadConfigReason).then(\n\t\t\t(config) => {\n\t\t\t\tthis.setConfig(config, true)\n\t\t\t\tthis.updateWatch()\n\t\t\t\tthis.startCheckConfig()\n\t\t\t\tthis.connect().catch((error) => {\n\t\t\t\t\tthis.getLogger().error(error)\n\t\t\t\t})\n\t\t\t},\n\t\t\t(error) => {\n\t\t\t\tthis.getLogger().error(\n\t\t\t\t\t`${Text.getDateForLog()}: Pull: could not read push-server config `,\n\t\t\t\t\terror\n\t\t\t\t)\n\n\t\t\t\tthis.status = PullStatus.Offline\n\t\t\t\tif (this._reconnectTimeout) {\n\t\t\t\t\tclearTimeout(this._reconnectTimeout)\n\t\t\t\t\tthis._reconnectTimeout = null\n\t\t\t\t}\n\n\t\t\t\tif (error?.status == 401 || error?.status == 403) {\n\t\t\t\t\tthis.stopCheckConfig()\n\t\t\t\t\tthis.onCustomEvent('onPullError', ['AUTHORIZE_ERROR'])\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t}\n\n\tpublic stop(\n\t\tdisconnectCode: number | CloseReasons = CloseReasons.NORMAL_CLOSURE,\n\t\tdisconnectReason: string = 'manual stop'\n\t): void {\n\t\tthis.disconnect(disconnectCode, disconnectReason)\n\n\t\tthis.stopCheckConfig()\n\t}\n\n\tpublic reconnect(\n\t\tdisconnectCode: number | CloseReasons,\n\t\tdisconnectReason: string,\n\t\tdelay: number = 1\n\t): void {\n\t\tthis.disconnect(disconnectCode, disconnectReason)\n\n\t\tthis.scheduleReconnect(delay)\n\t}\n\n\t/**\n\t * @param lastMessageId\n\t */\n\tpublic setLastMessageId(lastMessageId: string): void {\n\t\tthis._session.mid = lastMessageId\n\t}\n\n\t/**\n\t * Send a single message to the specified users.\n\t *\n\t * @param users User ids of the message receivers.\n\t * @param moduleId Name of the module to receive a message,\n\t * @param command Command name.\n\t * @param {object} params Command parameters.\n\t * @param [expiry] Message expiry time in seconds.\n\t * @return {Promise}\n\t */\n\tpublic async sendMessage(\n\t\tusers: number[],\n\t\tmoduleId: string,\n\t\tcommand: string,\n\t\tparams: any,\n\t\texpiry?: number\n\t): Promise<any> {\n\t\tconst message = {\n\t\t\tuserList: users,\n\t\t\tbody: {\n\t\t\t\tmodule_id: moduleId,\n\t\t\t\tcommand: command,\n\t\t\t\tparams: params,\n\t\t\t},\n\t\t\texpiry: expiry,\n\t\t}\n\n\t\tif (this.isJsonRpc()) {\n\t\t\treturn this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\t\tRpcMethod.Publish,\n\t\t\t\tmessage\n\t\t\t)\n\t\t} else {\n\t\t\treturn this.sendMessageBatch([message])\n\t\t}\n\t}\n\n\t/**\n\t * Send a single message to the specified public channels.\n\t *\n\t * @param publicChannels Public ids of the channels to receive a message.\n\t * @param moduleId Name of the module to receive a message,\n\t * @param command Command name.\n\t * @param {object} params Command parameters.\n\t * @param [expiry] Message expiry time in seconds.\n\t * @return {Promise}\n\t */\n\tpublic async sendMessageToChannels(\n\t\tpublicChannels: string[],\n\t\tmoduleId: string,\n\t\tcommand: string,\n\t\tparams: any,\n\t\texpiry?: number\n\t): Promise<any> {\n\t\tconst message = {\n\t\t\tchannelList: publicChannels,\n\t\t\tbody: {\n\t\t\t\tmodule_id: moduleId,\n\t\t\t\tcommand: command,\n\t\t\t\tparams: params,\n\t\t\t},\n\t\t\texpiry: expiry,\n\t\t}\n\n\t\tif (this.isJsonRpc()) {\n\t\t\treturn this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\t\tRpcMethod.Publish,\n\t\t\t\tmessage\n\t\t\t)\n\t\t} else {\n\t\t\treturn this.sendMessageBatch([message])\n\t\t}\n\t}\n\n\t/**\n\t * @param debugFlag\n\t */\n\tpublic capturePullEvent(debugFlag: boolean = true): void {\n\t\tthis._debug = debugFlag\n\t}\n\n\t/**\n\t * @param loggingFlag\n\t */\n\tpublic enableLogging(loggingFlag: boolean = true): void {\n\t\tthis._sharedConfig.setLoggingEnabled(loggingFlag)\n\t\tthis._loggingEnabled = loggingFlag\n\t}\n\n\t/**\n\t * Returns list channels that the connection is subscribed to.\n\t *\n\t * @returns {Promise}\n\t */\n\tpublic async listChannels(): Promise<any> {\n\t\treturn (\n\t\t\tthis._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\t\tRpcMethod.ListChannels,\n\t\t\t\t{}\n\t\t\t) || Promise.reject(new Error('jsonRpcAdapter not init'))\n\t\t)\n\t}\n\n\t/**\n\t * Returns \"last seen\" time in seconds for the users.\n\t * Result format: Object{userId: int}\n\t * If the user is currently connected - will return 0.\n\t * If the user is offline - will return the diff between the current timestamp and the last seen timestamp in seconds.\n\t * If the user was never online - the record for the user will be missing from the result object.\n\t *\n\t * @param {integer[]} userList List of user ids.\n\t * @returns {Promise}\n\t */\n\tpublic async getUsersLastSeen(\n\t\tuserList: number[]\n\t): Promise<Record<number, number>> {\n\t\tif (\n\t\t\t!Type.isArray(userList) ||\n\t\t\t!userList.every((item) => typeof item === 'number')\n\t\t) {\n\t\t\tthrow new Error('userList must be an array of numbers')\n\t\t}\n\n\t\tconst result: Record<number, number> = {}\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis._jsonRpcAdapter\n\t\t\t\t?.executeOutgoingRpcCommand(RpcMethod.GetUsersLastSeen, {\n\t\t\t\t\tuserList: userList,\n\t\t\t\t})\n\t\t\t\t.then((response: any) => {\n\t\t\t\t\tconst unresolved = []\n\t\t\t\t\t// eslint-disable-next-line unicorn/no-for-loop\n\t\t\t\t\tfor (let i = 0; i < userList.length; i++) {\n\t\t\t\t\t\tif (!response.hasOwnProperty(userList[i])) {\n\t\t\t\t\t\t\tunresolved.push(userList[i])\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (unresolved.length === 0) {\n\t\t\t\t\t\treturn resolve(result)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst params = {\n\t\t\t\t\t\tuserIds: unresolved,\n\t\t\t\t\t\tsendToQueueSever: true,\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._restClient\n\t\t\t\t\t\t.callMethod('pull.api.user.getLastSeen', params)\n\t\t\t\t\t\t.then((response: AjaxResult) => {\n\t\t\t\t\t\t\tconst data = (\n\t\t\t\t\t\t\t\tresponse.getData() as Payload<\n\t\t\t\t\t\t\t\t\tRecord<NumberString, NumberString>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t).result\n\t\t\t\t\t\t\tfor (const userId in data) {\n\t\t\t\t\t\t\t\tresult[Number(userId)] = Number(data[userId])\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn resolve(result)\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\t\tthis.getLogger().error(error)\n\t\t\t\t\t\t\treject(error)\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.getLogger().error(error)\n\t\t\t\t\treject(error)\n\t\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * Pings server.\n\t * In case of success promise will be resolved, otherwise - rejected.\n\t *\n\t * @param {number} timeout Request timeout in seconds\n\t * @returns {Promise}\n\t */\n\tpublic async ping(timeout: number = 5): Promise<void> {\n\t\treturn this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\tRpcMethod.Ping,\n\t\t\t{},\n\t\t\ttimeout\n\t\t)\n\t}\n\n\t/**\n\t * @param userId {number}\n\t * @param callback {UserStatusCallback}\n\t * @returns {Promise}\n\t */\n\tpublic async subscribeUserStatusChange(\n\t\tuserId: number,\n\t\tcallback: UserStatusCallback\n\t): Promise<void> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis._jsonRpcAdapter\n\t\t\t\t?.executeOutgoingRpcCommand(RpcMethod.SubscribeStatusChange, {\n\t\t\t\t\tuserId,\n\t\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tif (!this._userStatusCallbacks[userId]) {\n\t\t\t\t\t\tthis._userStatusCallbacks[userId] = []\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Type.isFunction(callback)) {\n\t\t\t\t\t\tthis._userStatusCallbacks[userId].push(callback)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn resolve()\n\t\t\t\t})\n\t\t\t\t.catch((error) => reject(error))\n\t\t})\n\t}\n\n\t/**\n\t * @param {number} userId\n\t * @param {UserStatusCallback} callback\n\t * @returns {Promise}\n\t */\n\tpublic async unsubscribeUserStatusChange(\n\t\tuserId: number,\n\t\tcallback: UserStatusCallback\n\t): Promise<void> {\n\t\tif (this._userStatusCallbacks[userId]) {\n\t\t\tthis._userStatusCallbacks[userId] = this._userStatusCallbacks[\n\t\t\t\tuserId\n\t\t\t].filter((cb) => cb !== callback)\n\n\t\t\tif (this._userStatusCallbacks[userId].length === 0) {\n\t\t\t\treturn this._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\t\t\tRpcMethod.UnsubscribeStatusChange,\n\t\t\t\t\t{\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn Promise.resolve()\n\t}\n\t// endregion ////\n\n\t// region Get ////\n\tpublic getRevision(): number | null {\n\t\treturn this._config && this._config.api\n\t\t\t? this._config.api.revision_web\n\t\t\t: null\n\t}\n\n\tpublic getServerVersion(): number {\n\t\treturn this._config && this._config.server ? this._config.server.version : 0\n\t}\n\n\tpublic getServerMode(): string | null {\n\t\treturn this._config && this._config.server ? this._config.server.mode : null\n\t}\n\n\tpublic getConfig(): null | TypePullClientConfig {\n\t\treturn this._config\n\t}\n\n\tpublic getDebugInfo(): any {\n\t\tif (!JSON || !JSON.stringify) {\n\t\t\treturn {}\n\t\t}\n\n\t\tlet configDump\n\t\tif (this._config && this._config.channels) {\n\t\t\tconfigDump = {\n\t\t\t\tChannelID: this._config.channels.private?.id || 'n/a',\n\t\t\t\tChannelDie: this._config.channels.private?.end || 'n/a',\n\t\t\t\tChannelDieShared: this._config.channels.shared?.end || 'n/a',\n\t\t\t}\n\t\t} else {\n\t\t\tconfigDump = {\n\t\t\t\tConfigError: 'config is not loaded',\n\t\t\t}\n\t\t}\n\n\t\tlet websocketMode = '-'\n\t\tif (\n\t\t\tthis._connectors.webSocket &&\n\t\t\t(this._connectors.webSocket as WebSocketConnector)?.socket\n\t\t) {\n\t\t\tif (this.isJsonRpc()) {\n\t\t\t\twebsocketMode = 'json-rpc'\n\t\t\t} else {\n\t\t\t\twebsocketMode =\n\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t(\n\t\t\t\t\t\tthis._connectors.webSocket as WebSocketConnector\n\t\t\t\t\t)?.socket?.url.search('binaryMode=true') != -1\n\t\t\t\t\t\t? 'protobuf'\n\t\t\t\t\t\t: 'text'\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tUserId: this._userId + (this._userId > 0 ? '' : '(guest)'),\n\t\t\t'Guest userId':\n\t\t\t\tthis._guestMode && this._guestUserId !== 0 ? this._guestUserId : '-',\n\t\t\t'Browser online': navigator.onLine ? 'Y' : 'N',\n\t\t\tConnect: this.isConnected() ? 'Y' : 'N',\n\t\t\t'Server type': this.isSharedMode() ? 'cloud' : 'local',\n\t\t\t'WebSocket supported': this.isWebSocketSupported() ? 'Y' : 'N',\n\t\t\t'WebSocket connected':\n\t\t\t\tthis._connectors.webSocket && this._connectors.webSocket.connected\n\t\t\t\t\t? 'Y'\n\t\t\t\t\t: 'N',\n\t\t\t'WebSocket mode': websocketMode,\n\n\t\t\t'Try connect': this._reconnectTimeout ? 'Y' : 'N',\n\t\t\t'Try number': this._connectionAttempt,\n\n\t\t\tPath: this.connector?.connectionPath || '-',\n\t\t\t...configDump,\n\n\t\t\t'Last message': this._session.mid || '-',\n\t\t\t'Session history': this._session.history,\n\t\t\t'Watch tags': this._watchTagsQueue.entries(),\n\t\t}\n\t}\n\n\t/**\n\t * @process\n\t * @param connectionType\n\t */\n\tpublic getConnectionPath(connectionType: ConnectionType): string {\n\t\tlet path\n\t\tconst params: any = {}\n\n\t\tswitch (connectionType) {\n\t\t\tcase ConnectionType.WebSocket:\n\t\t\t\tpath = this._isSecure\n\t\t\t\t\t? this._config?.server.websocket_secure\n\t\t\t\t\t: this._config?.server.websocket\n\t\t\t\tbreak\n\t\t\tcase ConnectionType.LongPolling:\n\t\t\t\tpath = this._isSecure\n\t\t\t\t\t? this._config?.server.long_pooling_secure\n\t\t\t\t\t: this._config?.server.long_polling\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unknown connection type ${connectionType}`)\n\t\t}\n\n\t\tif (!Type.isStringFilled(path)) {\n\t\t\tthrow new Error(`Empty path`)\n\t\t}\n\n\t\tif (typeof this._config?.jwt === 'string' && this._config?.jwt !== '') {\n\t\t\tparams['token'] = this._config?.jwt\n\t\t} else {\n\t\t\tconst channels: string[] = []\n\n\t\t\tif (this._config?.channels?.private) {\n\t\t\t\tchannels.push(this._config.channels.private?.id || '')\n\t\t\t}\n\n\t\t\tif (this._config?.channels.private?.id) {\n\t\t\t\tchannels.push(this._config.channels.private.id)\n\t\t\t}\n\n\t\t\tif (this._config?.channels.shared?.id) {\n\t\t\t\tchannels.push(this._config.channels.shared.id)\n\t\t\t}\n\n\t\t\tif (channels.length === 0) {\n\t\t\t\tthrow new Error(`Empty channels`)\n\t\t\t}\n\n\t\t\tparams['CHANNEL_ID'] = channels.join('/')\n\t\t}\n\n\t\tif (this.isJsonRpc()) {\n\t\t\tparams.jsonRpc = 'true'\n\t\t} else if (this.isProtobufSupported()) {\n\t\t\tparams.binaryMode = 'true'\n\t\t}\n\n\t\tif (this.isSharedMode()) {\n\t\t\tif (!this._config?.clientId) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Push-server is in shared mode, but clientId is not set'\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tparams.clientId = this._config.clientId\n\t\t}\n\t\tif (this._session.mid) {\n\t\t\tparams.mid = this._session.mid\n\t\t}\n\t\tif (this._session.tag) {\n\t\t\tparams.tag = this._session.tag\n\t\t}\n\t\tif (this._session.time) {\n\t\t\tparams.time = this._session.time\n\t\t}\n\t\tparams.revision = REVISION\n\n\t\treturn `${path}?${Text.buildQueryString(params)}`\n\t}\n\n\t/**\n\t * @process\n\t */\n\tpublic getPublicationPath(): string {\n\t\tconst path = this._isSecure\n\t\t\t? this._config?.server.publish_secure\n\t\t\t: this._config?.server.publish\n\n\t\tif (!path) {\n\t\t\treturn ''\n\t\t}\n\n\t\tconst channels: string[] = []\n\n\t\tif (this._config?.channels.private?.id) {\n\t\t\tchannels.push(this._config.channels.private.id)\n\t\t}\n\n\t\tif (this._config?.channels.shared?.id) {\n\t\t\tchannels.push(this._config.channels.shared.id)\n\t\t}\n\n\t\tconst params = {\n\t\t\tCHANNEL_ID: channels.join('/'),\n\t\t}\n\n\t\treturn path + '?' + Text.buildQueryString(params)\n\t}\n\t// endregion ////\n\n\t// region Is* ////\n\tpublic isConnected(): boolean {\n\t\treturn this.connector ? this.connector.connected : false\n\t}\n\n\tpublic isWebSocketSupported(): boolean {\n\t\treturn typeof window.WebSocket !== 'undefined'\n\t}\n\n\tpublic isWebSocketAllowed(): boolean {\n\t\tif (this._sharedConfig.isWebSocketBlocked()) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn this.isWebSocketEnabled()\n\t}\n\n\tpublic isWebSocketEnabled(): boolean {\n\t\tif (!this.isWebSocketSupported()) {\n\t\t\treturn false\n\t\t}\n\n\t\tif (!this._config) {\n\t\t\treturn false\n\t\t}\n\n\t\tif (!this._config.server) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn this._config.server.websocket_enabled\n\t}\n\n\tpublic isPublishingSupported(): boolean {\n\t\treturn this.getServerVersion() > 3\n\t}\n\n\tpublic isPublishingEnabled(): boolean {\n\t\tif (!this.isPublishingSupported()) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn this._config?.server.publish_enabled === true\n\t}\n\n\tpublic isProtobufSupported(): boolean {\n\t\treturn this.getServerVersion() == 4 && !Browser.isIE()\n\t}\n\n\tpublic isJsonRpc(): boolean {\n\t\treturn this.getServerVersion() >= 5\n\t}\n\n\tpublic isSharedMode(): boolean {\n\t\treturn this.getServerMode() === ServerMode.Shared\n\t}\n\t// endregion ////\n\n\t// region Events ////\n\t/**\n\t * @param {TypePullClientEmitConfig} params\n\t * @returns {boolean}\n\t */\n\tprivate emit(params: TypePullClientEmitConfig): boolean {\n\t\tif (\n\t\t\tparams.type == SubscriptionType.Server ||\n\t\t\tparams.type == SubscriptionType.Client\n\t\t) {\n\t\t\tif (typeof this._subscribers[params.type] === 'undefined') {\n\t\t\t\tthis._subscribers[params.type] = {}\n\t\t\t}\n\n\t\t\tif (typeof params.moduleId === 'undefined') {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`${Text.getDateForLog()}: Pull.emit: parameter moduleId is not specified`\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttypeof this._subscribers[params.type][params.moduleId] === 'undefined'\n\t\t\t) {\n\t\t\t\tthis._subscribers[params.type][params.moduleId] = {\n\t\t\t\t\tcallbacks: [],\n\t\t\t\t\tcommands: {},\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tthis._subscribers[params.type][params.moduleId]['callbacks'].length > 0\n\t\t\t) {\n\t\t\t\t// eslint-disable-next-line unicorn/no-array-for-each\n\t\t\t\tthis._subscribers[params.type][params.moduleId]['callbacks'].forEach(\n\t\t\t\t\t(callback: CommandHandlerFunctionV1) => {\n\t\t\t\t\t\tcallback(params.data as Record<string, any>, {\n\t\t\t\t\t\t\ttype: params.type,\n\t\t\t\t\t\t\tmoduleId: params.moduleId,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!(typeof params.data === 'undefined') &&\n\t\t\t\t!(typeof params.data['command'] === 'undefined') &&\n\t\t\t\tthis._subscribers[params.type][params.moduleId]['commands'][\n\t\t\t\t\tparams.data['command']\n\t\t\t\t] &&\n\t\t\t\tthis._subscribers[params.type][params.moduleId]['commands'][\n\t\t\t\t\tparams.data['command']\n\t\t\t\t].length > 0\n\t\t\t) {\n\t\t\t\tthis._subscribers[params.type][params.moduleId]['commands'][\n\t\t\t\t\tparams.data['command']\n\t\t\t\t\t// eslint-disable-next-line unicorn/no-array-for-each\n\t\t\t\t].forEach((callback: CommandHandlerFunctionV2) => {\n\t\t\t\t\tif (typeof params.data === 'undefined') {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback(\n\t\t\t\t\t\tparams.data['params'],\n\t\t\t\t\t\tparams.data['extra'],\n\t\t\t\t\t\tparams.data['command'],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: params.type,\n\t\t\t\t\t\t\tmoduleId: params.moduleId as string,\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn true\n\t\t} else {\n\t\t\tif (typeof this._subscribers[params.type] === 'undefined') {\n\t\t\t\tthis._subscribers[params.type] = []\n\t\t\t}\n\n\t\t\tif (this._subscribers[params.type].length <= 0) {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line unicorn/no-array-for-each\n\t\t\tthis._subscribers[params.type].forEach(\n\t\t\t\t(callback: CommandHandlerFunctionV1) => {\n\t\t\t\t\tcallback(params.data as Record<string, any>, {\n\t\t\t\t\t\ttype: params.type,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t)\n\n\t\t\treturn true\n\t\t}\n\t}\n\n\t/**\n\t * @process\n\t *\n\t * @param message\n\t */\n\tprivate broadcastMessage(message: TypePullClientMessageBody): void {\n\t\tconst moduleId = (message.module_id = message.module_id.toLowerCase())\n\t\tconst command = message.command\n\n\t\tif (!message.extra) {\n\t\t\tmessage.extra = {}\n\t\t}\n\n\t\tif (message.extra.server_time_unix) {\n\t\t\tmessage.extra.server_time_ago =\n\t\t\t\t(Date.now() - message.extra.server_time_unix * 1000) / 1000 -\n\t\t\t\t(this._config?.server.timeShift || 0)\n\t\t\tmessage.extra.server_time_ago =\n\t\t\t\tmessage.extra.server_time_ago > 0 ? message.extra.server_time_ago : 0\n\t\t}\n\n\t\tthis.logMessage(message)\n\t\ttry {\n\t\t\tif (\n\t\t\t\tmessage.extra.sender &&\n\t\t\t\tmessage.extra.sender.type === SenderType.Client\n\t\t\t) {\n\t\t\t\tthis.onCustomEvent(\n\t\t\t\t\t'onPullClientEvent-' + moduleId,\n\t\t\t\t\t[command, message.params, message.extra],\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t\tthis.onCustomEvent(\n\t\t\t\t\t'onPullClientEvent',\n\t\t\t\t\t[moduleId, command, message.params, message.extra],\n\t\t\t\t\ttrue\n\t\t\t\t)\n\n\t\t\t\tthis.emit({\n\t\t\t\t\ttype: SubscriptionType.Client,\n\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcommand: command,\n\t\t\t\t\t\tparams: Type.clone(message.params),\n\t\t\t\t\t\textra: Type.clone(message.extra),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} else if (moduleId === 'pull') {\n\t\t\t\tthis.handleInternalPullEvent(command, message)\n\t\t\t} else if (moduleId == 'online') {\n\t\t\t\tif ((message?.extra?.server_time_ago || 0) < 240) {\n\t\t\t\t\tthis.onCustomEvent(\n\t\t\t\t\t\t'onPullOnlineEvent',\n\t\t\t\t\t\t[command, message.params, message.extra],\n\t\t\t\t\t\ttrue\n\t\t\t\t\t)\n\n\t\t\t\t\tthis.emit({\n\t\t\t\t\t\ttype: SubscriptionType.Online,\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tcommand: command,\n\t\t\t\t\t\t\tparams: Type.clone(message.params),\n\t\t\t\t\t\t\textra: Type.clone(message.extra),\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tif (command === 'userStatusChange') {\n\t\t\t\t\tthis.emitUserStatusChange(\n\t\t\t\t\t\tmessage.params.user_id,\n\t\t\t\t\t\tmessage.params.online\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.onCustomEvent(\n\t\t\t\t\t'onPullEvent-' + moduleId,\n\t\t\t\t\t[command, message.params, message.extra],\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t\tthis.onCustomEvent(\n\t\t\t\t\t'onPullEvent',\n\t\t\t\t\t[moduleId, command, message.params, message.extra],\n\t\t\t\t\ttrue\n\t\t\t\t)\n\n\t\t\t\tthis.emit({\n\t\t\t\t\ttype: SubscriptionType.Server,\n\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcommand: command,\n\t\t\t\t\t\tparams: Type.clone(message.params),\n\t\t\t\t\t\textra: Type.clone(message.extra),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.getLogger().warn(\n\t\t\t\t'\\n========= PULL ERROR ===========\\n' +\n\t\t\t\t\t'Error type: broadcastMessages execute error\\n' +\n\t\t\t\t\t'Error event: ',\n\t\t\t\terror,\n\t\t\t\t'\\n' + 'Message: ',\n\t\t\t\tmessage,\n\t\t\t\t'\\n' + '================================\\n'\n\t\t\t)\n\t\t}\n\n\t\tif (message.extra && message.extra.revision_web) {\n\t\t\tthis.checkRevision(Text.toInteger(message.extra.revision_web))\n\t\t}\n\t}\n\n\t/**\n\t * @process\n\t *\n\t * @param messages\n\t */\n\tprivate broadcastMessages(messages: TypePullClientMessageBody[]): void {\n\t\tfor (const message of messages) {\n\t\t\tthis.broadcastMessage(message)\n\t\t}\n\t}\n\n\t// endregion ////\n\n\t// region sendMessage ////\n\t/**\n\t * Sends batch of messages to the multiple public channels.\n\t *\n\t * @param messageBatchList Array of messages to send.\n\t * @return void\n\t */\n\tprivate async sendMessageBatch(\n\t\tmessageBatchList: TypePullClientMessageBatch[]\n\t): Promise<any> {\n\t\tif (!this.isPublishingEnabled()) {\n\t\t\tthis.getLogger().error(\n\t\t\t\t`Client publishing is not supported or is disabled`\n\t\t\t)\n\t\t\treturn Promise.reject(\n\t\t\t\tnew Error(`Client publishing is not supported or is disabled`)\n\t\t\t)\n\t\t}\n\n\t\tif (this.isJsonRpc()) {\n\t\t\tconst rpcRequest =\n\t\t\t\tthis._jsonRpcAdapter?.createPublishRequest(messageBatchList)\n\t\t\tthis.connector?.send(JSON.stringify(rpcRequest))\n\n\t\t\treturn Promise.resolve(true)\n\t\t} else {\n\t\t\tconst userIds: Record<number, number> = {}\n\n\t\t\tfor (const messageBatch of messageBatchList) {\n\t\t\t\tif (typeof messageBatch.userList !== 'undefined') {\n\t\t\t\t\tfor (const user of messageBatch.userList) {\n\t\t\t\t\t\tconst userId = Number(user)\n\t\t\t\t\t\tuserIds[userId] = userId\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._channelManager\n\t\t\t\t?.getPublicIds(Object.values(userIds))\n\t\t\t\t.then((publicIds) => {\n\t\t\t\t\tconst response = this.connector?.send(\n\t\t\t\t\t\tthis.encodeMessageBatch(messageBatchList, publicIds)\n\t\t\t\t\t)\n\n\t\t\t\t\treturn Promise.resolve(response)\n\t\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * @param messageBatchList\n\t * @param publicIds\n\t */\n\tprivate encodeMessageBatch(\n\t\tmessageBatchList: TypePullClientMessageBatch[],\n\t\tpublicIds: Record<number, TypeChanel>\n\t): ArrayBuffer | string {\n\t\tconst messages: any[] = []\n\n\t\t// eslint-disable-next-line unicorn/no-array-for-each\n\t\tmessageBatchList.forEach((messageFields) => {\n\t\t\tconst messageBody = messageFields.body\n\n\t\t\tlet receivers: any[] = []\n\t\t\tif (messageFields.userList) {\n\t\t\t\treceivers = this.createMessageReceivers(\n\t\t\t\t\tmessageFields.userList,\n\t\t\t\t\tpublicIds\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (messageFields.channelList) {\n\t\t\t\tif (!Type.isArray(messageFields.channelList)) {\n\t\t\t\t\tthrow new TypeError('messageFields.publicChannels must be an array')\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line unicorn/no-array-for-each\n\t\t\t\tmessageFields.channelList.forEach((publicChannel) => {\n\t\t\t\t\tlet publicId\n\t\t\t\t\tlet signature\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof publicChannel === 'string' &&\n\t\t\t\t\t\tpublicChannel.includes('.')\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst fields = publicChannel.toString().split('.')\n\t\t\t\t\t\tpublicId = fields[0]\n\t\t\t\t\t\tsignature = fields[1]\n\t\t\t\t\t} else if (\n\t\t\t\t\t\ttypeof publicChannel === 'object' &&\n\t\t\t\t\t\t'publicId' in publicChannel &&\n\t\t\t\t\t\t'signature' in publicChannel\n\t\t\t\t\t) {\n\t\t\t\t\t\tpublicId = publicChannel?.publicId\n\t\t\t\t\t\tsignature = publicChannel?.signature\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\"Public channel MUST be either a string, formatted like \\\"{publicId}.{signature}\\\" or an object with fields 'publicId' and 'signature'\"\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\treceivers.push(\n\t\t\t\t\t\tReceiver.create({\n\t\t\t\t\t\t\tid: this.encodeId(publicId),\n\t\t\t\t\t\t\tsignature: this.encodeId(signature),\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst message = IncomingMessage.create({\n\t\t\t\treceivers: receivers,\n\t\t\t\tbody: JSON.stringify(messageBody),\n\t\t\t\texpiry: messageFields.expiry || 0,\n\t\t\t})\n\t\t\tmessages.push(message)\n\t\t})\n\n\t\tconst requestBatch = RequestBatch.create({\n\t\t\trequests: [\n\t\t\t\t{\n\t\t\t\t\tincomingMessages: {\n\t\t\t\t\t\tmessages: messages,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\n\t\treturn RequestBatch.encode(requestBatch).finish()\n\t}\n\n\t/**\n\t * @memo fix return type\n\t * @param users\n\t * @param publicIds\n\t */\n\tprivate createMessageReceivers(\n\t\tusers: number[],\n\t\tpublicIds: Record<number, TypeChanel>\n\t): any[] {\n\t\tconst result = []\n\n\t\tfor (const userId of users) {\n\t\t\tif (!publicIds[userId] || !publicIds[userId].publicId) {\n\t\t\t\tthrow new Error(`Could not determine public id for user ${userId}`)\n\t\t\t}\n\n\t\t\tresult.push(\n\t\t\t\tReceiver.create({\n\t\t\t\t\tid: this.encodeId(publicIds[userId].publicId),\n\t\t\t\t\tsignature: this.encodeId(publicIds[userId].signature),\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\n\t\treturn result\n\t}\n\t// endregion ////\n\n\t// region _userStatusCallbacks ////\n\t/**\n\t * @param userId\n\t * @param isOnline\n\t */\n\tprivate emitUserStatusChange(userId: number, isOnline: boolean): void {\n\t\tif (this._userStatusCallbacks[userId]) {\n\t\t\tfor (const callback of this._userStatusCallbacks[userId]) {\n\t\t\t\tcallback({\n\t\t\t\t\tuserId,\n\t\t\t\t\tisOnline,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate restoreUserStatusSubscription(): void {\n\t\tfor (const userId in this._userStatusCallbacks) {\n\t\t\tif (\n\t\t\t\tthis._userStatusCallbacks.hasOwnProperty(userId) &&\n\t\t\t\tthis._userStatusCallbacks[userId].length > 0\n\t\t\t) {\n\t\t\t\tthis._jsonRpcAdapter?.executeOutgoingRpcCommand(\n\t\t\t\t\tRpcMethod.SubscribeStatusChange,\n\t\t\t\t\t{\n\t\t\t\t\t\tuserId: userId,\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\t// endregion ////\n\n\t// region Config ////\n\t/**\n\t * @param logTag\n\t */\n\tprivate async loadConfig(logTag?: string): Promise<TypePullClientConfig> {\n\t\tif (!this._config) {\n\t\t\tthis._config = Object.assign({}, EmptyConfig)\n\n\t\t\tlet config: any\n\t\t\tif (this._storage) {\n\t\t\t\tconfig = this._storage.get(LsKeys.PullConfig, null)\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tthis.isConfigActual(config) &&\n\t\t\t\tthis.checkRevision(config.api.revision_web)\n\t\t\t) {\n\t\t\t\treturn Promise.resolve(config)\n\t\t\t} else if (this._storage) {\n\t\t\t\tthis._storage.remove(LsKeys.PullConfig)\n\t\t\t}\n\t\t} else if (\n\t\t\tthis.isConfigActual(this._config) &&\n\t\t\tthis.checkRevision(this._config.api.revision_web)\n\t\t) {\n\t\t\treturn Promise.resolve(this._config)\n\t\t} else {\n\t\t\tthis._config = Object.assign({}, EmptyConfig)\n\t\t}\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis._restClient.getHttpClient().setLogTag(logTag)\n\n\t\t\tthis._restClient\n\t\t\t\t.callMethod(this._configGetMethod, {\n\t\t\t\t\tCACHE: 'N',\n\t\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst data = response.getData().result\n\n\t\t\t\t\tconst timeShift = Math.floor(\n\t\t\t\t\t\t(Date.now() - new Date(data.serverTime).getTime()) / 1000\n\t\t\t\t\t)\n\n\t\t\t\t\tdelete data.serverTime\n\n\t\t\t\t\tconst config = Object.assign({}, data)\n\t\t\t\t\tconfig.server.timeShift = timeShift\n\n\t\t\t\t\tresolve(config)\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\terror?.answerError?.error === 'AUTHORIZE_ERROR' ||\n\t\t\t\t\t\terror?.answerError?.error === 'WRONG_AUTH_TYPE'\n\t\t\t\t\t) {\n\t\t\t\t\t\t;(error as AjaxError).status = 403\n\t\t\t\t\t}\n\n\t\t\t\t\treject(error)\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tthis._restClient.getHttpClient().clearLogTag()\n\t\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * @param config\n\t */\n\tprivate isConfigActual(config: any): boolean {\n\t\tif (!Type.isPlainObject(config)) {\n\t\t\treturn false\n\t\t}\n\n\t\tif (Number(config.server.config_timestamp) !== this._configTimestamp) {\n\t\t\treturn false\n\t\t}\n\n\t\tconst now = new Date()\n\n\t\tif (\n\t\t\tType.isNumber(config.exp) &&\n\t\t\tconfig.exp > 0 &&\n\t\t\tconfig.exp < now.getTime() / 1000\n\t\t) {\n\t\t\treturn false\n\t\t}\n\n\t\tconst channelCount = Object.keys(config.channels).length\n\t\tif (channelCount === 0) {\n\t\t\treturn false\n\t\t}\n\n\t\tfor (const channelType in config.channels) {\n\t\t\tif (!config.channels.hasOwnProperty(channelType)) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst channel = config.channels[channelType]\n\t\t\tconst channelEnd = new Date(channel.end)\n\n\t\t\tif (channelEnd < now) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\n\tprivate startCheckConfig(): void {\n\t\tif (this._checkInterval) {\n\t\t\tclearInterval(this._checkInterval)\n\t\t\tthis._checkInterval = null\n\t\t}\n\n\t\tthis._checkInterval = setInterval(\n\t\t\tthis.checkConfig.bind(this),\n\t\t\tCONFIG_CHECK_INTERVAL\n\t\t)\n\t}\n\n\tprivate stopCheckConfig(): void {\n\t\tif (this._checkInterval) {\n\t\t\tclearInterval(this._checkInterval)\n\t\t}\n\t\tthis._checkInterval = null\n\t}\n\n\tprivate checkConfig(): boolean {\n\t\tif (this.isConfigActual(this._config)) {\n\t\t\tif (!this.checkRevision(Text.toInteger(this._config?.api.revision_web))) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\tthis.logToConsole('Stale config detected. Restarting')\n\t\t\tthis.restart(CloseReasons.CONFIG_EXPIRED, 'config expired')\n\t\t}\n\n\t\treturn true\n\t}\n\n\t/**\n\t * @param config\n\t * @param allowCaching\n\t */\n\tprivate setConfig(config: TypePullClientConfig, allowCaching: boolean): void {\n\t\tfor (const key in config) {\n\t\t\tif (config.hasOwnProperty(key) && this._config?.hasOwnProperty(key)) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tthis._config[key] = config[key]\n\t\t\t}\n\t\t}\n\n\t\tif (config.publicChannels) {\n\t\t\tthis.setPublicIds(Object.values(config.publicChannels))\n\t\t}\n\n\t\tthis._configTimestamp = Number(config.server.config_timestamp)\n\n\t\tif (this._storage && allowCaching) {\n\t\t\ttry {\n\t\t\t\tthis._storage.set(LsKeys.PullConfig, config)\n\t\t\t} catch (error) {\n\t\t\t\t/**\n\t\t\t\t * @memotry to delete the key \"history\"\n\t\t\t\t * (landing site change history, see http://jabber.bx/view.php?id=136492)\n\t\t\t\t */\n\t\t\t\tif (localStorage && localStorage.removeItem) {\n\t\t\t\t\tlocalStorage.removeItem('history')\n\t\t\t\t}\n\t\t\t\tthis.getLogger().error(\n\t\t\t\t\t`${Text.getDateForLog()}: Pull: Could not cache config in local storage. Error: `,\n\t\t\t\t\terror\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate setPublicIds(publicIds: TypePublicIdDescriptor[]): void {\n\t\tthis._channelManager.setPublicIds(publicIds)\n\t}\n\n\t/**\n\t * @param serverRevision\n\t */\n\tprivate checkRevision(serverRevision: number): boolean {\n\t\tif (this._skipCheckRevision) {\n\t\t\treturn true\n\t\t}\n\n\t\tif (serverRevision > 0 && serverRevision !== REVISION) {\n\t\t\tthis._enabled = false\n\t\t\tthis.showNotification('PULL_OLD_REVISION')\n\t\t\tthis.disconnect(CloseReasons.NORMAL_CLOSURE, 'check_revision')\n\n\t\t\tthis.onCustomEvent('onPullRevisionUp', [serverRevision, REVISION])\n\n\t\t\tthis.emit({\n\t\t\t\ttype: SubscriptionType.Revision,\n\t\t\t\tdata: {\n\t\t\t\t\tserver: serverRevision,\n\t\t\t\t\tclient: REVISION,\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tthis.logToConsole(\n\t\t\t\t`Pull revision changed from ${REVISION} to ${serverRevision}. Reload required`\n\t\t\t)\n\n\t\t\treturn false\n\t\t}\n\n\t\treturn true\n\t}\n\t// endregion ////\n\n\t// region Connect|ReConnect|DisConnect ////\n\tprivate disconnect(disconnectCode: number, disconnectReason: string): void {\n\t\tif (this.connector) {\n\t\t\tthis._isManualDisconnect = true\n\t\t\tthis.connector.disconnect(disconnectCode, disconnectReason)\n\t\t}\n\t}\n\n\tprivate restoreWebSocketConnection(): void {\n\t\tif (this._connectionType === ConnectionType.WebSocket) {\n\t\t\treturn\n\t\t}\n\n\t\tthis._connectors.webSocket?.connect()\n\t}\n\n\t/**\n\t * @param connectionDelay\n\t */\n\tprivate scheduleReconnect(connectionDelay: number = 0): void {\n\t\tif (!this._enabled) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!connectionDelay) {\n\t\t\t/**\n\t\t\t * never fallback to long polling\n\t\t\t * @memo remove long polling support later\n\t\t\t */\n\t\t\t/*/\n\t\t\tif(\n\t\t\t\tthis._connectionAttempt > 3\n\t\t\t\t&& this._connectionType === ConnectionType.WebSocket\n\t\t\t\t&& !this._sharedConfig.isLongPollingBlocked()\n\t\t\t)\n\t\t\t{\n\t\t\t\t// Websocket seems to be closed by network filter. Trying to fall back to long polling ////\n\t\t\t\tthis._sharedConfig.setWebSocketBlocked(true)\n\t\t\t\tthis._connectionType = ConnectionType.LongPolling\n\t\t\t\tthis._connectionAttempt = 1\n\t\t\t\tconnectionDelay = 1\n\t\t\t}\n\t\t\telse\n\t\t\t//*/\n\t\t\t{\n\t\t\t\tconnectionDelay = this.getConnectionAttemptDelay(\n\t\t\t\t\tthis._connectionAttempt\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tif (this._reconnectTimeout) {\n\t\t\tclearTimeout(this._reconnectTimeout)\n\t\t\tthis._reconnectTimeout = null\n\t\t}\n\n\t\tthis.logToConsole(\n\t\t\t`Pull: scheduling reconnection in ${connectionDelay} seconds; attempt # ${this._connectionAttempt}`\n\t\t)\n\n\t\tthis._reconnectTimeout = setTimeout(() => {\n\t\t\tthis.connect().catch((error) => {\n\t\t\t\tthis.getLogger().error(error)\n\t\t\t})\n\t\t}, connectionDelay * 1_000)\n\t}\n\n\tprivate scheduleRestoreWebSocketConnection(): void {\n\t\tthis.logToConsole(\n\t\t\t`Pull: scheduling restoration of websocket connection in ${RESTORE_WEBSOCKET_TIMEOUT} seconds`\n\t\t)\n\n\t\tif (this._restoreWebSocketTimeout) {\n\t\t\treturn\n\t\t}\n\n\t\tthis._restoreWebSocketTimeout = setTimeout(() => {\n\t\t\tthis._restoreWebSocketTimeout = 0\n\t\t\tthis.restoreWebSocketConnection()\n\t\t}, RESTORE_WEBSOCKET_TIMEOUT * 1_000)\n\t}\n\n\t/**\n\t * @returns {Promise}\n\t */\n\tprivate async connect(): Promise<void> {\n\t\tif (!this._enabled) {\n\t\t\treturn Promise.reject()\n\t\t}\n\t\tif (this.connector?.connected) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\tif (this._reconnectTimeout) {\n\t\t\tclearTimeout(this._reconnectTimeout)\n\t\t\tthis._reconnectTimeout = null\n\t\t}\n\n\t\tthis.status = PullStatus.Connecting\n\t\tthis._connectionAttempt++\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis._connectPromise = {\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t}\n\t\t\tthis.connector?.connect()\n\t\t})\n\t}\n\n\t/**\n\t * @param disconnectCode\n\t * @param disconnectReason\n\t * @param restartDelay\n\t */\n\tprivate scheduleRestart(\n\t\tdisconnectCode: number,\n\t\tdisconnectReason: string,\n\t\trestartDelay: number = 0\n\t): void {\n\t\tif (this._restartTimeout) {\n\t\t\tclearTimeout(this._restartTimeout)\n\t\t\tthis._restartTimeout = null\n\t\t}\n\n\t\tif (restartDelay < 1) {\n\t\t\trestartDelay = Math.ceil(Math.random() * 30) + 5\n\t\t}\n\n\t\tthis._restartTimeout = setTimeout(\n\t\t\t() => this.restart(disconnectCode, disconnectReason),\n\t\t\trestartDelay * 1_000\n\t\t)\n\t}\n\t// endregion ////\n\n\t// region Handlers ////\n\t/**\n\t * @param messageFields\n\t */\n\tprivate handleRpcIncomingMessage(messageFields: any): object {\n\t\tthis._session.mid = messageFields.mid\n\t\tconst body = messageFields.body\n\n\t\tif (!messageFields.body.extra) {\n\t\t\tbody.extra = {}\n\t\t}\n\t\tbody.extra.sender = messageFields.sender\n\n\t\tif (\n\t\t\t'user_params' in messageFields &&\n\t\t\tType.isPlainObject(messageFields.user_params)\n\t\t) {\n\t\t\tObject.assign(body.params, messageFields.user_params)\n\t\t}\n\n\t\tif (\n\t\t\t'dictionary' in messageFields &&\n\t\t\tType.isPlainObject(messageFields.dictionary)\n\t\t) {\n\t\t\tObject.assign(body.params, messageFields.dictionary)\n\t\t}\n\n\t\tif (this.checkDuplicate(messageFields.mid)) {\n\t\t\tthis.addMessageToStat(body)\n\t\t\tthis.trimDuplicates()\n\t\t\tthis.broadcastMessage(body)\n\t\t}\n\n\t\tthis.connector?.send(`mack:${messageFields.mid}`)\n\n\t\treturn {}\n\t}\n\n\t/**\n\t * @param events\n\t */\n\tprivate handleIncomingEvents(events: TypeSessionEvent[]): void {\n\t\tconst messages: TypePullClientMessageBody[] = []\n\t\tif (events.length === 0) {\n\t\t\tthis._session.mid = null\n\t\t\treturn\n\t\t}\n\n\t\tfor (const event of events) {\n\t\t\tthis.updateSessionFromEvent(event)\n\n\t\t\tif (event.mid && !this.checkDuplicate(event.mid)) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tthis.addMessageToStat(\n\t\t\t\tevent.text as { module_id: string; command: string }\n\t\t\t)\n\t\t\tmessages.push(event.text as TypePullClientMessageBody)\n\t\t}\n\t\tthis.trimDuplicates()\n\t\tthis.broadcastMessages(messages)\n\t}\n\n\t/**\n\t * @param event\n\t */\n\tprivate updateSessionFromEvent(event: TypeSessionEvent): void {\n\t\tthis._session.mid = event.mid || null\n\t\tthis._session.tag = event.tag || null\n\t\tthis._session.time = event.time || null\n\t}\n\n\t/**\n\t * @process\n\t *\n\t * @param command\n\t * @param message\n\t */\n\tprivate handleInternalPullEvent(\n\t\tcommand: string,\n\t\tmessage: TypePullClientMessageBody\n\t): void {\n\t\tswitch (command.toUpperCase()) {\n\t\t\tcase SystemCommands.CHANNEL_EXPIRE: {\n\t\t\t\tif (message.params.action === 'reconnect') {\n\t\t\t\t\tconst typeChanel = message.params?.channel.type as string\n\t\t\t\t\tif (typeChanel === 'private' && this._config?.channels?.private) {\n\t\t\t\t\t\tthis._config.channels.private = message.params.new_channel\n\t\t\t\t\t\tthis.logToConsole(\n\t\t\t\t\t\t\t`Pull: new config for ${message.params.channel.type} channel set: ${this._config.channels.private}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\tif (typeChanel === 'shared' && this._config?.channels?.shared) {\n\t\t\t\t\t\tthis._config.channels.shared = message.params.new_channel\n\t\t\t\t\t\tthis.logToConsole(\n\t\t\t\t\t\t\t`Pull: new config for ${message.params.channel.type} channel set: ${this._config.channels.shared}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.reconnect(CloseReasons.CONFIG_REPLACED, 'config was replaced')\n\t\t\t\t} else {\n\t\t\t\t\tthis.restart(CloseReasons.CHANNEL_EXPIRED, 'channel expired received')\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase SystemCommands.CONFIG_EXPIRE: {\n\t\t\t\tthis.restart(CloseReasons.CONFIG_EXPIRED, 'config expired received')\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase SystemCommands.SERVER_RESTART: {\n\t\t\t\tthis.reconnect(\n\t\t\t\t\tCloseReasons.SERVER_RESTARTED,\n\t\t\t\t\t'server was restarted',\n\t\t\t\t\t15\n\t\t\t\t)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault:\n\t\t}\n\t}\n\n\t// region Handlers For Message ////\n\t/**\n\t * @param response\n\t */\n\tprivate onIncomingMessage(response: string | ArrayBuffer): void {\n\t\tif (this.isJsonRpc()) {\n\t\t\tif (response === JSON_RPC_PING) {\n\t\t\t\tthis.onJsonRpcPing()\n\t\t\t} else {\n\t\t\t\tthis._jsonRpcAdapter?.parseJsonRpcMessage(response as string)\n\t\t\t}\n\t\t} else {\n\t\t\tconst events = this.extractMessages(response)\n\t\t\tthis.handleIncomingEvents(events)\n\t\t}\n\t}\n\n\t// region onLongPolling ////\n\tprivate onLongPollingOpen(): void {\n\t\tthis._unloading = false\n\t\tthis._starting = false\n\t\tthis._connectionAttempt = 0\n\t\tthis._isManualDisconnect = false\n\t\tthis.status = PullStatus.Online\n\n\t\tthis.logToConsole('Pull: Long polling connection with push-server opened')\n\t\tif (this.isWebSocketEnabled()) {\n\t\t\tthis.scheduleRestoreWebSocketConnection()\n\t\t}\n\t\tif (this._connectPromise) {\n\t\t\tthis._connectPromise.resolve({})\n\t\t}\n\t}\n\n\t/**\n\t * @param response\n\t */\n\tprivate onLongPollingDisconnect(response: {\n\t\tcode: number\n\t\treason: string\n\t}): void {\n\t\tif (this._connectionType === ConnectionType.LongPolling) {\n\t\t\tthis.status = PullStatus.Offline\n\t\t}\n\n\t\tthis.logToConsole(\n\t\t\t`Pull: Long polling connection with push-server closed. Code: ${response.code}, reason: ${response.reason}`\n\t\t)\n\t\tif (!this._isManualDisconnect) {\n\t\t\tthis.scheduleReconnect()\n\t\t}\n\t\tthis._isManualDisconnect = false\n\t\tthis.clearPingWaitTimeout()\n\t}\n\n\t/**\n\t * @param error\n\t */\n\tprivate onLongPollingError(error: Error): void {\n\t\tthis._starting = false\n\t\tif (this._connectionType === ConnectionType.LongPolling) {\n\t\t\tthis.status = PullStatus.Offline\n\t\t}\n\n\t\tthis.getLogger().error(\n\t\t\t`${Text.getDateForLog()}: Pull: Long polling connection error `,\n\t\t\terror\n\t\t)\n\n\t\tthis.scheduleReconnect()\n\t\tif (this._connectPromise) {\n\t\t\tthis._connectPromise.reject(error)\n\t\t}\n\n\t\tthis.clearPingWaitTimeout()\n\t}\n\t// endregion ////\n\n\t// region onWebSocket ////\n\t/**\n\t * @param response\n\t */\n\tprivate onWebSocketBlockChanged(response: {\n\t\tisWebSocketBlocked: boolean\n\t}): void {\n\t\tconst isWebSocketBlocked = response.isWebSocketBlocked\n\n\t\tif (\n\t\t\tisWebSocketBlocked &&\n\t\t\tthis._connectionType === ConnectionType.WebSocket &&\n\t\t\t!this.isConnected()\n\t\t) {\n\t\t\tif (this._reconnectTimeout) {\n\t\t\t\tclearTimeout(this._reconnectTimeout)\n\t\t\t\tthis._reconnectTimeout = null\n\t\t\t}\n\n\t\t\tthis._connectionAttempt = 0\n\t\t\tthis._connectionType = ConnectionType.LongPolling\n\t\t\tthis.scheduleReconnect(1)\n\t\t} else if (\n\t\t\t!isWebSocketBlocked &&\n\t\t\tthis._connectionType === ConnectionType.LongPolling\n\t\t) {\n\t\t\tif (this._reconnectTimeout) {\n\t\t\t\tclearTimeout(this._reconnectTimeout)\n\t\t\t\tthis._reconnectTimeout = null\n\t\t\t}\n\t\t\tif (this._restoreWebSocketTimeout) {\n\t\t\t\tclearTimeout(this._restoreWebSocketTimeout)\n\t\t\t\tthis._restoreWebSocketTimeout = null\n\t\t\t}\n\n\t\t\tthis._connectionAttempt = 0\n\t\t\tthis._connectionType = ConnectionType.WebSocket\n\t\t\tthis.scheduleReconnect(1)\n\t\t}\n\t}\n\n\tprivate onWebSocketOpen(): void {\n\t\tthis._unloading = false\n\t\tthis._starting = false\n\t\tthis._connectionAttempt = 0\n\t\tthis._isManualDisconnect = false\n\t\tthis.status = PullStatus.Online\n\t\tthis._sharedConfig.setWebSocketBlocked(false)\n\n\t\t// to prevent fallback to long polling in case of networking problems\n\t\tthis._sharedConfig.setLongPollingBlocked(true)\n\n\t\tif (this._connectionType == ConnectionType.LongPolling) {\n\t\t\tthis._connectionType = ConnectionType.WebSocket\n\t\t\tthis._connectors.longPolling?.disconnect(\n\t\t\t\tCloseReasons.CONFIG_REPLACED,\n\t\t\t\t'Fire at onWebSocketOpen'\n\t\t\t)\n\t\t}\n\n\t\tif (this._restoreWebSocketTimeout) {\n\t\t\tclearTimeout(this._restoreWebSocketTimeout)\n\t\t\tthis._restoreWebSocketTimeout = null\n\t\t}\n\t\tthis.logToConsole('Pull: Websocket connection with push-server opened')\n\t\tif (this._connectPromise) {\n\t\t\tthis._connectPromise.resolve({})\n\t\t}\n\n\t\tthis.restoreUserStatusSubscription()\n\t}\n\n\t/**\n\t * @param response\n\t */\n\tprivate onWebSocketDisconnect(response: {\n\t\tcode: number\n\t\treason: string\n\t}): void {\n\t\tif (this._connectionType === ConnectionType.WebSocket) {\n\t\t\tthis.status = PullStatus.Offline\n\t\t}\n\n\t\tthis.logToConsole(\n\t\t\t`Pull: Websocket connection with push-server closed. Code: ${response.code}, reason: ${response.reason}`,\n\t\t\ttrue\n\t\t)\n\t\tif (!this._isManualDisconnect) {\n\t\t\tif (response.code == CloseReasons.WRONG_CHANNEL_ID) {\n\t\t\t\tthis.scheduleRestart(\n\t\t\t\t\tCloseReasons.WRONG_CHANNEL_ID,\n\t\t\t\t\t'wrong channel signature'\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tthis.scheduleReconnect()\n\t\t\t}\n\t\t}\n\n\t\t// to prevent fallback to long polling in case of networking problems\n\t\tthis._sharedConfig.setLongPollingBlocked(true)\n\t\tthis._isManualDisconnect = false\n\n\t\tthis.clearPingWaitTimeout()\n\t}\n\n\t/**\n\t * @param error\n\t */\n\tprivate onWebSocketError(error: Error): void {\n\t\tthis._starting = false\n\t\tif (this._connectionType === ConnectionType.WebSocket) {\n\t\t\tthis.status = PullStatus.Offline\n\t\t}\n\n\t\tthis.getLogger().error(\n\t\t\t`${Text.getDateForLog()}: Pull: WebSocket connection error `,\n\t\t\terror\n\t\t)\n\t\tthis.scheduleReconnect()\n\t\tif (this._connectPromise) {\n\t\t\tthis._connectPromise.reject(error)\n\t\t}\n\n\t\tthis.clearPingWaitTimeout()\n\t}\n\t// endregion ////\n\t// endregion ////\n\n\t// endregion ////\n\n\t// region extractMessages ////\n\t/**\n\t * @param pullEvent\n\t */\n\tprivate extractMessages(pullEvent: string | ArrayBuffer): TypeSessionEvent[] {\n\t\tif (pullEvent instanceof ArrayBuffer) {\n\t\t\treturn this.extractProtobufMessages(pullEvent)\n\t\t} else if (Type.isStringFilled(pullEvent)) {\n\t\t\treturn this.extractPlainTextMessages(pullEvent)\n\t\t}\n\n\t\tthrow new Error('Error pullEvent type')\n\t}\n\n\t/**\n\t * @param pullEvent\n\t */\n\tprivate extractProtobufMessages(pullEvent: ArrayBuffer): TypeSessionEvent[] {\n\t\tconst result = []\n\n\t\ttry {\n\t\t\tconst responseBatch = ResponseBatch.decode(new Uint8Array(pullEvent))\n\t\t\tfor (let i = 0; i < responseBatch.responses.length; i++) {\n\t\t\t\tconst response = responseBatch.responses[i]\n\t\t\t\tif (response.command !== 'outgoingMessages') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst messages = response.outgoingMessages.messages\n\t\t\t\tfor (const message of messages) {\n\t\t\t\t\tlet messageFields\n\t\t\t\t\ttry {\n\t\t\t\t\t\tmessageFields = JSON.parse(message.body)\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.getLogger().error(\n\t\t\t\t\t\t\t`${Text.getDateForLog()}: Pull: Could not parse message body `,\n\t\t\t\t\t\t\terror\n\t\t\t\t\t\t)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!messageFields.extra) {\n\t\t\t\t\t\tmessageFields.extra = {}\n\t\t\t\t\t}\n\t\t\t\t\tmessageFields.extra.sender = {\n\t\t\t\t\t\ttype: message.sender.type,\n\t\t\t\t\t}\n\n\t\t\t\t\tif (message.sender.id instanceof Uint8Array) {\n\t\t\t\t\t\tmessageFields.extra.sender.id = this.decodeId(message.sender.id)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst compatibleMessage = {\n\t\t\t\t\t\tmid: this.decodeId(message.id),\n\t\t\t\t\t\ttext: messageFields,\n\t\t\t\t\t}\n\n\t\t\t\t\tresult.push(compatibleMessage)\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.getLogger().error(\n\t\t\t\t`${Text.getDateForLog()}: Pull: Could not parse message `,\n\t\t\t\terror\n\t\t\t)\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * @param pullEvent\n\t */\n\tprivate extractPlainTextMessages(pullEvent: string): TypeSessionEvent[] {\n\t\tconst result = []\n\n\t\tconst dataArray = pullEvent.match(/#!NGINXNMS!#(.*?)#!NGINXNME!#/gm)\n\t\tif (dataArray === null) {\n\t\t\tconst text =\n\t\t\t\t'\\n========= PULL ERROR ===========\\n' +\n\t\t\t\t'Error type: parseResponse error parsing message\\n' +\n\t\t\t\t'\\n' +\n\t\t\t\t`Data string: ${pullEvent}` +\n\t\t\t\t'\\n' +\n\t\t\t\t'================================\\n\\n'\n\t\t\tthis.getLogger().warn(text)\n\n\t\t\treturn []\n\t\t}\n\t\tfor (let i = 0; i < dataArray.length; i++) {\n\t\t\t// eslint-disable-next-line unicorn/prefer-string-slice\n\t\t\tdataArray[i] = dataArray[i].substring(12, dataArray[i].length - 12)\n\t\t\tif (dataArray[i].length <= 0) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tlet data\n\t\t\ttry {\n\t\t\t\tdata = JSON.parse(dataArray[i])\n\t\t\t} catch {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tresult.push(data as TypeSessionEvent)\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Converts message id from byte[] to string\n\t * @param {Uint8Array} encodedId\n\t * @return {string}\n\t */\n\tprivate decodeId(encodedId: Uint8Array): string {\n\t\tlet result = ''\n\t\tfor (const element_ of encodedId) {\n\t\t\tconst hexByte = element_.toString(16)\n\t\t\tif (hexByte.length === 1) {\n\t\t\t\tresult += '0'\n\t\t\t}\n\t\t\tresult += hexByte\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Converts message id from hex-encoded string to byte[]\n\t * @param {string} id Hex-encoded string.\n\t * @return {Uint8Array}\n\t */\n\tprivate encodeId(id: string): Uint8Array {\n\t\tif (!id) {\n\t\t\treturn new Uint8Array()\n\t\t}\n\n\t\tconst result = []\n\t\tfor (let i = 0; i < id.length; i += 2) {\n\t\t\tresult.push(Number.parseInt(id.slice(i, i + 2), 16))\n\t\t}\n\n\t\treturn new Uint8Array(result)\n\t}\n\t// endregion ////\n\n\t// region Events.Status /////\n\tprivate onOffline(): void {\n\t\tthis.disconnect(CloseReasons.NORMAL_CLOSURE, 'offline')\n\t}\n\n\tprivate onOnline(): void {\n\t\tthis.connect().catch((error) => {\n\t\t\tthis.getLogger().error(error)\n\t\t})\n\t}\n\n\tprivate onBeforeUnload(): void {\n\t\tthis._unloading = true\n\n\t\tconst session = Type.clone(this.session)\n\t\tsession.ttl = Date.now() + LS_SESSION_CACHE_TIME * 1000\n\t\tif (this._storage) {\n\t\t\ttry {\n\t\t\t\tthis._storage.set(\n\t\t\t\t\tLS_SESSION,\n\t\t\t\t\tJSON.stringify(session)\n\t\t\t\t\t//LS_SESSION_CACHE_TIME\n\t\t\t\t)\n\t\t\t} catch (error) {\n\t\t\t\tthis.getLogger().error(\n\t\t\t\t\t`${Text.getDateForLog()}: Pull: Could not save session info in local storage. Error: `,\n\t\t\t\t\terror\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tthis.scheduleReconnect(15)\n\t}\n\t// endregion ////\n\n\t// region PullStatus ////\n\t/**\n\t * @param status\n\t * @param delay\n\t */\n\tprivate sendPullStatusDelayed(status: PullStatus, delay: number): void {\n\t\tif (this._offlineTimeout) {\n\t\t\tclearTimeout(this._offlineTimeout)\n\t\t\tthis._offlineTimeout = null\n\t\t}\n\n\t\tthis._offlineTimeout = setTimeout(() => {\n\t\t\tthis._offlineTimeout = null\n\t\t\tthis.sendPullStatus(status)\n\t\t}, delay)\n\t}\n\n\t/**\n\t * @param status\n\t */\n\tprivate sendPullStatus(status: PullStatus): void {\n\t\tif (this._unloading) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.onCustomEvent('onPullStatus', [status])\n\n\t\tthis.emit({\n\t\t\ttype: SubscriptionType.Status,\n\t\t\tdata: {\n\t\t\t\tstatus: status,\n\t\t\t},\n\t\t})\n\t}\n\t// endregion ////\n\n\t// region _watchTagsQueue ////\n\t/**\n\t * @memo if private?\n\t * @param tagId\n\t * @param force\n\t */\n\tprivate extendWatch(tagId: string, force: boolean = false): void {\n\t\tif (this._watchTagsQueue.get(tagId)) {\n\t\t\treturn\n\t\t}\n\n\t\tthis._watchTagsQueue.set(tagId, true)\n\t\tif (force) {\n\t\t\tthis.updateWatch(force)\n\t\t}\n\t}\n\n\t/**\n\t * @param force\n\t */\n\tprivate updateWatch(force: boolean = false): void {\n\t\tif (this._watchUpdateTimeout) {\n\t\t\tclearTimeout(this._watchUpdateTimeout)\n\t\t\tthis._watchUpdateTimeout = null\n\t\t}\n\n\t\tthis._watchUpdateTimeout = setTimeout(\n\t\t\t() => {\n\t\t\t\t/**\n\t\t\t\t * @memo test this\n\t\t\t\t */\n\t\t\t\tconst watchTags = [...this._watchTagsQueue.keys()]\n\n\t\t\t\tif (watchTags.length > 0) {\n\t\t\t\t\tthis._restClient\n\t\t\t\t\t\t.callMethod('pull.watch.extend', {\n\t\t\t\t\t\t\ttags: watchTags,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.then((response: AjaxResult) => {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @memo test this\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tconst updatedTags: NumberString[] = (\n\t\t\t\t\t\t\t\tresponse.getData() as Payload<NumberString[]>\n\t\t\t\t\t\t\t).result\n\n\t\t\t\t\t\t\tfor (const tagId of updatedTags) {\n\t\t\t\t\t\t\t\tthis.clearWatch(tagId)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.updateWatch()\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tthis.updateWatch()\n\t\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tthis.updateWatch()\n\t\t\t\t}\n\t\t\t},\n\t\t\tforce ? this._watchForceUpdateInterval : this._watchUpdateInterval\n\t\t)\n\t}\n\n\t/**\n\t * @param tagId\n\t */\n\tprivate clearWatch(tagId: string): void {\n\t\tthis._watchTagsQueue.delete(tagId)\n\t}\n\t// endregion ////\n\n\t// region Ping ////\n\tprivate onJsonRpcPing(): void {\n\t\tthis.updatePingWaitTimeout()\n\t\tthis.connector?.send(JSON_RPC_PONG)\n\t}\n\n\tprivate updatePingWaitTimeout(): void {\n\t\tif (this._pingWaitTimeout) {\n\t\t\tclearTimeout(this._pingWaitTimeout)\n\t\t\tthis._pingWaitTimeout = null\n\t\t}\n\n\t\tthis._pingWaitTimeout = setTimeout(\n\t\t\tthis._onPingTimeoutHandler,\n\t\t\tPING_TIMEOUT * 2 * 1_000\n\t\t)\n\t}\n\n\tprivate clearPingWaitTimeout(): void {\n\t\tif (this._pingWaitTimeout) {\n\t\t\tclearTimeout(this._pingWaitTimeout)\n\t\t}\n\n\t\tthis._pingWaitTimeout = null\n\t}\n\n\tprivate onPingTimeout(): void {\n\t\tthis._pingWaitTimeout = null\n\t\tif (!this._enabled || !this.isConnected()) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.getLogger().warn(\n\t\t\t`No pings are received in ${PING_TIMEOUT * 2} seconds. Reconnecting`\n\t\t)\n\t\tthis.disconnect(CloseReasons.STUCK, 'connection stuck')\n\n\t\tthis.scheduleReconnect()\n\t}\n\t// endregion ////\n\n\t// region Time ////\n\t/**\n\t * Returns reconnect delay in seconds\n\t *\n\t * @param attemptNumber\n\t * @return {number}\n\t */\n\tprivate getConnectionAttemptDelay(attemptNumber: number): number {\n\t\tlet result\n\t\tif (attemptNumber < 1) {\n\t\t\tresult = 0.5\n\t\t} else if (attemptNumber < 3) {\n\t\t\tresult = 15\n\t\t} else if (attemptNumber < 5) {\n\t\t\tresult = 45\n\t\t} else if (attemptNumber < 10) {\n\t\t\tresult = 600\n\t\t} else {\n\t\t\tresult = 3_600\n\t\t}\n\n\t\treturn result + result * Math.random() * 0.2\n\t}\n\t// endregion ////\n\n\t// region Tools ////\n\t/**\n\t * @param mid\n\t */\n\tprivate checkDuplicate(mid: string): boolean {\n\t\tif (this._session.lastMessageIds.includes(mid)) {\n\t\t\tthis.getLogger().warn(`Duplicate message ${mid} skipped`)\n\t\t\treturn false\n\t\t} else {\n\t\t\tthis._session.lastMessageIds.push(mid)\n\t\t\treturn true\n\t\t}\n\t}\n\n\tprivate trimDuplicates(): void {\n\t\tif (this._session.lastMessageIds.length > MAX_IDS_TO_STORE) {\n\t\t\tthis._session.lastMessageIds =\n\t\t\t\tthis._session.lastMessageIds.slice(-MAX_IDS_TO_STORE)\n\t\t}\n\t}\n\t// endregion ////\n\n\t// region Logging ////\n\t/**\n\t * @param message\n\t */\n\tprivate logMessage(message: TypePullClientMessageBody): void {\n\t\tif (!this._debug) {\n\t\t\treturn\n\t\t}\n\n\t\tif (\n\t\t\tmessage.extra?.sender &&\n\t\t\tmessage.extra.sender.type === SenderType.Client\n\t\t) {\n\t\t\tthis.getLogger().info(\n\t\t\t\t`onPullClientEvent-${message.module_id}`,\n\t\t\t\tmessage.command,\n\t\t\t\tmessage.params,\n\t\t\t\tmessage.extra\n\t\t\t)\n\t\t} else if (message.module_id == 'online') {\n\t\t\tthis.getLogger().info(\n\t\t\t\t`onPullOnlineEvent`,\n\t\t\t\tmessage.command,\n\t\t\t\tmessage.params,\n\t\t\t\tmessage.extra\n\t\t\t)\n\t\t} else {\n\t\t\tthis.getLogger().info(\n\t\t\t\t`onPullEvent`,\n\t\t\t\tmessage.module_id,\n\t\t\t\tmessage.command,\n\t\t\t\tmessage.params,\n\t\t\t\tmessage.extra\n\t\t\t)\n\t\t}\n\t}\n\n\t/**\n\t * @param message\n\t * @param force\n\t */\n\tprivate logToConsole(message: string, force: boolean = false): void {\n\t\tif (this._loggingEnabled || force) {\n\t\t\tthis.getLogger().log(`${Text.getDateForLog()}: ${message}`)\n\t\t}\n\t}\n\n\t/**\n\t * @param message\n\t */\n\tprivate addMessageToStat(message: {\n\t\tmodule_id: string\n\t\tcommand: string\n\t}): void {\n\t\tif (!this._session.history[message.module_id]) {\n\t\t\tthis._session.history[message.module_id] = {}\n\t\t}\n\t\tif (!this._session.history[message.module_id][message.command]) {\n\t\t\tthis.session.history[message.module_id][message.command] = 0\n\t\t}\n\n\t\tthis._session.history[message.module_id][message.command]++\n\n\t\tthis._session.messageCount++\n\t}\n\n\t/**\n\t * @param text\n\t */\n\tprivate showNotification(text: string): void {\n\t\tthis.getLogger().warn(text)\n\n\t\t/*/\n\t\tif(this._notificationPopup || typeof BX.PopupWindow === 'undefined')\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notificationPopup = new BX.PopupWindow('bx-notifier-popup-confirm', null, {\n\t\t\tzIndex: 200,\n\t\t\tautoHide: false,\n\t\t\tcloseByEsc: false,\n\t\t\toverlay: true,\n\t\t\tcontent: BX.create(\"div\", {\n\t\t\t\tprops: {className: \"bx-messenger-confirm\"},\n\t\t\t\thtml: text\n\t\t\t}),\n\t\t\tbuttons: [\n\t\t\t\tnew BX.PopupWindowButton({\n\t\t\t\t\ttext: BX.message('JS_CORE_WINDOW_CLOSE'),\n\t\t\t\t\tclassName: \"popup-window-button-decline\",\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tclick: () => this._notificationPopup.close(),\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t],\n\t\t\tevents: {\n\t\t\t\tonPopupClose: () => this._notificationPopup.destroy(),\n\t\t\t\tonPopupDestroy: () => this._notificationPopup = null,\n\t\t\t}\n\t\t});\n\t\tthis._notificationPopup.show();\n\t\t//*/\n\t}\n\t// endregion ////\n\n\t// region onCustomEvent ////\n\t/**\n\t * @memo may be need to use onCustomEvent\n\t * @memo ? force\n\t */\n\tprivate onCustomEvent(\n\t\teventName: string,\n\t\tdata: any,\n\t\tforce: boolean = false\n\t): void {\n\t\tif (eventName || data || force) {\n\t\t\t/* empty */\n\t\t}\n\n\t\t/*/\n\t\tif (BX && BX.onCustomEvent)\n\t\t{\n\t\t\tBX.onCustomEvent(window, eventName, data, force)\n\t\t}\n\t\t//*/\n\t}\n\t// endregion ////\n\n\t// region deprecated /////\n\t/**\n\t * @deprecated\n\t */\n\t/*/\n\tgetRestClientOptions()\n\t{\n\t\tlet result = {};\n\n\t\tif (this.guestMode && this.guestUserId !== 0)\n\t\t{\n\t\t\tresult.queryParams = {\n\t\t\t\tpull_guest_id: this.guestUserId\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\t//*/\n\t// endregion ////\n}\n","import { LoggerBrowser, LoggerType } from '../logger/browser'\nimport type { TypeB24 } from '../types/b24'\nimport { ProfileManager } from './profile-manager'\nimport { AppManager } from './app-manager'\nimport { PaymentManager } from './payment-manager'\nimport { LicenseManager } from './license-manager'\nimport { CurrencyManager } from './currency-manager'\nimport { OptionsManager } from './options-manager'\nimport { B24PullClientManager } from '../pullClient'\nimport Text from '../tools/text'\nimport { LoadDataType, TypeSpecificUrl } from '../types/b24-helper'\nimport type {\n\tTypeApp,\n\tTypeB24Form,\n\tTypeEnumAppStatus,\n\tTypeLicense,\n\tTypePayment,\n\tTypeUser,\n} from '../types/b24-helper'\nimport type { GenderString } from '../types/common'\nimport type { TypePullMessage } from '../types/pull'\n\n/**\n * A universal class that is used to manage the initial application data\n */\nexport class B24HelperManager {\n\tprivate readonly _b24: TypeB24\n\tprotected _logger: null | LoggerBrowser = null\n\tprivate _isInit: boolean = false\n\n\tprivate _profile: ProfileManager | null = null\n\n\tprivate _app: AppManager | null = null\n\tprivate _payment: PaymentManager | null = null\n\tprivate _license: LicenseManager | null = null\n\n\tprivate _currency: CurrencyManager | null = null\n\tprivate _appOptions: OptionsManager | null = null\n\tprivate _userOptions: OptionsManager | null = null\n\n\tprivate _b24PullClient: B24PullClientManager | null = null\n\tprivate _pullClientUnSubscribe: (() => void)[] = []\n\tprivate _pullClientModuleId: string = ''\n\n\tconstructor(b24: TypeB24) {\n\t\tthis._b24 = b24\n\t\tthis.setLogger(this._b24.getLogger())\n\t}\n\n\tsetLogger(logger: LoggerBrowser): void {\n\t\tthis._logger = logger\n\t\tif (null !== this._profile) {\n\t\t\tthis._profile.setLogger(this.getLogger())\n\t\t}\n\n\t\tif (null !== this._app) {\n\t\t\tthis._app.setLogger(this.getLogger())\n\t\t}\n\n\t\tif (null !== this._payment) {\n\t\t\tthis._payment.setLogger(this.getLogger())\n\t\t}\n\n\t\tif (null !== this._license) {\n\t\t\tthis._license.setLogger(this.getLogger())\n\t\t}\n\n\t\tif (null !== this._currency) {\n\t\t\tthis._currency.setLogger(this.getLogger())\n\t\t}\n\n\t\tif (null !== this._appOptions) {\n\t\t\tthis._appOptions.setLogger(this.getLogger())\n\t\t}\n\n\t\tif (null !== this._userOptions) {\n\t\t\tthis._userOptions.setLogger(this.getLogger())\n\t\t}\n\t}\n\n\tgetLogger(): LoggerBrowser {\n\t\tif (null === this._logger) {\n\t\t\tthis._logger = LoggerBrowser.build(`NullLogger`)\n\t\t\tthis._logger.setConfig({\n\t\t\t\t[LoggerType.desktop]: false,\n\t\t\t\t[LoggerType.log]: false,\n\t\t\t\t[LoggerType.info]: false,\n\t\t\t\t[LoggerType.warn]: false,\n\t\t\t\t[LoggerType.error]: true,\n\t\t\t\t[LoggerType.trace]: false,\n\t\t\t})\n\t\t}\n\n\t\treturn this._logger\n\t}\n\n\tdestroy(): void {\n\t\tthis._destroyPullClient()\n\t}\n\n\t// region loadData ////\n\tasync loadData(\n\t\tdataTypes: LoadDataType[] = [LoadDataType.App, LoadDataType.Profile]\n\t): Promise<void> {\n\t\tconst batchMethods: Record<\n\t\t\tstring,\n\t\t\t{ method: string } | { method: string }[]\n\t\t> = {\n\t\t\t[LoadDataType.App]: { method: 'app.info' },\n\t\t\t[LoadDataType.Profile]: { method: 'profile' },\n\t\t\t[LoadDataType.Currency]: [\n\t\t\t\t{ method: 'crm.currency.base.get' },\n\t\t\t\t{ method: 'crm.currency.list' },\n\t\t\t],\n\t\t\t[LoadDataType.AppOptions]: { method: 'app.option.get' },\n\t\t\t[LoadDataType.UserOptions]: { method: 'user.option.get' },\n\t\t}\n\n\t\t// eslint-disable-next-line unicorn/no-array-reduce\n\t\tconst batchRequest = dataTypes.reduce(\n\t\t\t(acc, type) => {\n\t\t\t\tif (batchMethods[type]) {\n\t\t\t\t\tif (Array.isArray(batchMethods[type])) {\n\t\t\t\t\t\tfor (const [index, row] of batchMethods[type].entries()) {\n\t\t\t\t\t\t\tacc[`get_${type}_${index}`] = row\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tacc[`get_${type}`] = batchMethods[type]\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn acc\n\t\t\t},\n\t\t\t{} as Record<string, { method: string }>\n\t\t)\n\n\t\ttry {\n\t\t\tconst response = await this._b24.callBatch(batchRequest)\n\t\t\tconst data = response.getData()\n\n\t\t\tif (data[`get_${LoadDataType.App}`]) {\n\t\t\t\tthis._app = await this.parseAppData(data[`get_${LoadDataType.App}`])\n\t\t\t\tthis._payment = await this.parsePaymentData(\n\t\t\t\t\tdata[`get_${LoadDataType.App}`]\n\t\t\t\t)\n\t\t\t\tthis._license = await this.parseLicenseData(\n\t\t\t\t\tdata[`get_${LoadDataType.App}`]\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (data[`get_${LoadDataType.Profile}`]) {\n\t\t\t\tthis._profile = await this.parseUserData(\n\t\t\t\t\tdata[`get_${LoadDataType.Profile}`]\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tdata[`get_${LoadDataType.Currency}_0`] &&\n\t\t\t\tdata[`get_${LoadDataType.Currency}_1`]\n\t\t\t) {\n\t\t\t\tthis._currency = await this.parseCurrencyData({\n\t\t\t\t\tcurrencyBase: data[`get_${LoadDataType.Currency}_0`],\n\t\t\t\t\tcurrencyList: data[`get_${LoadDataType.Currency}_1`],\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (data[`get_${LoadDataType.AppOptions}`]) {\n\t\t\t\tthis._appOptions = await this.parseOptionsData(\n\t\t\t\t\t'app',\n\t\t\t\t\tdata[`get_${LoadDataType.AppOptions}`]\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (data[`get_${LoadDataType.UserOptions}`]) {\n\t\t\t\tthis._userOptions = await this.parseOptionsData(\n\t\t\t\t\t'user',\n\t\t\t\t\tdata[`get_${LoadDataType.UserOptions}`]\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tthis._isInit = true\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error) {\n\t\t\t\tthrow error\n\t\t\t}\n\n\t\t\tconsole.error('Error loading data:', error)\n\t\t\tthrow new Error('Failed to load data')\n\t\t}\n\t}\n\n\tprivate async parseUserData(profileData: any): Promise<ProfileManager> {\n\t\tconst manager = new ProfileManager(this._b24)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager\n\t\t\t.initData({\n\t\t\t\tid: Number(profileData.ID),\n\t\t\t\tisAdmin: profileData.ADMIN === true,\n\t\t\t\tlastName: profileData?.LAST_NAME || '',\n\t\t\t\tname: profileData?.NAME || '',\n\t\t\t\tgender: (profileData?.PERSONAL_GENDER || '') as GenderString,\n\t\t\t\tphoto: profileData?.PERSONAL_PHOTO || '',\n\t\t\t\tTimeZone: profileData?.TIME_ZONE || '',\n\t\t\t\tTimeZoneOffset: profileData?.TIME_ZONE_OFFSET,\n\t\t\t} as TypeUser)\n\t\t\t.then(() => {\n\t\t\t\treturn manager\n\t\t\t})\n\t}\n\n\tprivate async parseAppData(appData: any): Promise<AppManager> {\n\t\tconst manager = new AppManager(this._b24)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager\n\t\t\t.initData({\n\t\t\t\tid: Number.parseInt(appData.ID),\n\t\t\t\tcode: appData.CODE,\n\t\t\t\tversion: Number.parseInt(appData.VERSION),\n\t\t\t\tstatus: appData.STATUS as TypeEnumAppStatus,\n\t\t\t\tisInstalled: appData.INSTALLED as boolean,\n\t\t\t} as TypeApp)\n\t\t\t.then(() => {\n\t\t\t\treturn manager\n\t\t\t})\n\t}\n\n\tprivate async parsePaymentData(appData: any): Promise<PaymentManager> {\n\t\tconst manager = new PaymentManager(this._b24)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager\n\t\t\t.initData({\n\t\t\t\tisExpired: appData.PAYMENT_EXPIRED === 'Y',\n\t\t\t\tdays: Number.parseInt(appData.DAYS || '0'),\n\t\t\t} as TypePayment)\n\t\t\t.then(() => {\n\t\t\t\treturn manager\n\t\t\t})\n\t}\n\n\tprivate async parseLicenseData(appData: any): Promise<LicenseManager> {\n\t\tconst manager = new LicenseManager(this._b24)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager\n\t\t\t.initData({\n\t\t\t\tlanguageId: appData.LANGUAGE_ID,\n\t\t\t\tlicense: appData.LICENSE,\n\t\t\t\tlicensePrevious: appData.LICENSE_PREVIOUS,\n\t\t\t\tlicenseType: appData.LICENSE_TYPE,\n\t\t\t\tlicenseFamily: appData.LICENSE_FAMILY,\n\t\t\t\tisSelfHosted: appData.LICENSE.includes('selfhosted'),\n\t\t\t} as TypeLicense)\n\t\t\t.then(() => {\n\t\t\t\treturn manager\n\t\t\t})\n\t}\n\n\tprivate async parseCurrencyData(currencyData: any): Promise<CurrencyManager> {\n\t\tconst manager = new CurrencyManager(this._b24)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager.initData(currencyData).then(() => {\n\t\t\treturn manager\n\t\t})\n\t}\n\n\tprivate async parseOptionsData(\n\t\ttype: 'app' | 'user',\n\t\toptionsData: any\n\t): Promise<OptionsManager> {\n\t\tconst manager = new OptionsManager(this._b24, type)\n\t\tmanager.setLogger(this.getLogger())\n\t\treturn manager.initData(optionsData).then(() => {\n\t\t\treturn manager\n\t\t})\n\t}\n\t// endregion ////\n\n\t// region Get ////\n\tget isInit(): boolean {\n\t\treturn this._isInit\n\t}\n\n\tget forB24Form(): TypeB24Form {\n\t\tthis.ensureInitialized()\n\n\t\tif (null === this._profile) {\n\t\t\tthrow new Error('B24HelperManager.profileInfo not initialized')\n\t\t}\n\n\t\tif (null === this._app) {\n\t\t\tthrow new Error('B24HelperManager.appInfo not initialized')\n\t\t}\n\n\t\treturn {\n\t\t\tapp_code: this.appInfo.data.code,\n\t\t\tapp_status: this.appInfo.data.status as string,\n\t\t\tpayment_expired: this.paymentInfo.data.isExpired ? 'Y' : 'N',\n\t\t\tdays: this.paymentInfo.data.days,\n\t\t\tb24_plan: this.licenseInfo.data.license,\n\t\t\tc_name: this.profileInfo.data.name,\n\t\t\tc_last_name: this.profileInfo.data.lastName,\n\t\t\thostname: this.hostName,\n\t\t} as TypeB24Form\n\t}\n\n\t/**\n\t * Get the account address BX24 (https://name.bitrix24.com)\n\t */\n\tget hostName(): string {\n\t\treturn this._b24.getTargetOrigin()\n\t}\n\n\tget profileInfo(): ProfileManager {\n\t\tthis.ensureInitialized()\n\n\t\tif (null === this._profile) {\n\t\t\tthrow new Error('B24HelperManager.profileInfo not initialized')\n\t\t}\n\n\t\treturn this._profile\n\t}\n\n\tget appInfo(): AppManager {\n\t\tthis.ensureInitialized()\n\n\t\tif (null === this._app) {\n\t\t\tthrow new Error('B24HelperManager.appInfo not initialized')\n\t\t}\n\n\t\treturn this._app\n\t}\n\n\tget paymentInfo(): PaymentManager {\n\t\tthis.ensureInitialized()\n\n\t\tif (null === this._payment) {\n\t\t\tthrow new Error('B24HelperManager.paymentInfo not initialized')\n\t\t}\n\n\t\treturn this._payment\n\t}\n\n\tget licenseInfo(): LicenseManager {\n\t\tthis.ensureInitialized()\n\n\t\tif (null === this._license) {\n\t\t\tthrow new Error('B24HelperManager.licenseInfo not initialized')\n\t\t}\n\n\t\treturn this._license\n\t}\n\n\tget currency(): CurrencyManager {\n\t\tthis.ensureInitialized()\n\n\t\tif (null === this._currency) {\n\t\t\tthrow new Error('B24HelperManager.currency not initialized')\n\t\t}\n\n\t\treturn this._currency\n\t}\n\n\tget appOptions(): OptionsManager {\n\t\tthis.ensureInitialized()\n\n\t\tif (null === this._appOptions) {\n\t\t\tthrow new Error('B24HelperManager.appOptions not initialized')\n\t\t}\n\n\t\treturn this._appOptions\n\t}\n\n\tget userOptions(): OptionsManager {\n\t\tthis.ensureInitialized()\n\n\t\tif (null === this._userOptions) {\n\t\t\tthrow new Error('B24HelperManager.userOptions not initialized')\n\t\t}\n\n\t\treturn this._userOptions\n\t}\n\t// endregion ////\n\n\t// region Custom SelfHosted && Cloud ////\n\tget isSelfHosted(): boolean {\n\t\treturn this.licenseInfo.data.isSelfHosted\n\t}\n\n\t/**\n\t * Returns the increment step of fields of type ID\n\t * @memo in a cloud step = 2 in box step = 1\n\t *\n\t * @returns {number}\n\t */\n\tget primaryKeyIncrementValue(): number {\n\t\tif (this.isSelfHosted) {\n\t\t\treturn 1\n\t\t}\n\n\t\treturn 2\n\t}\n\n\t/**\n\t * Defines specific URLs for a Bitrix24 box or cloud\n\t */\n\tget b24SpecificUrl(): Record<keyof typeof TypeSpecificUrl, string> {\n\t\tif (this.isSelfHosted) {\n\t\t\treturn {\n\t\t\t\t[TypeSpecificUrl.MainSettings]: '/configs/',\n\t\t\t\t[TypeSpecificUrl.UfList]: '/configs/userfield_list.php',\n\t\t\t\t[TypeSpecificUrl.UfPage]: '/configs/userfield.php',\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t[TypeSpecificUrl.MainSettings]: '/settings/configs/',\n\t\t\t[TypeSpecificUrl.UfList]: '/settings/configs/userfield_list.php',\n\t\t\t[TypeSpecificUrl.UfPage]: '/settings/configs/userfield.php',\n\t\t}\n\t}\n\t// endregion ////\n\n\t// region Pull.Client ////\n\tpublic usePullClient(\n\t\tprefix: string = 'prefix',\n\t\tuserId?: number\n\t): B24HelperManager {\n\t\tif (this._b24PullClient) {\n\t\t\treturn this\n\t\t}\n\n\t\tthis.initializePullClient(\n\t\t\ttypeof userId === 'undefined' ? this.profileInfo.data.id || 0 : userId,\n\t\t\tprefix\n\t\t)\n\n\t\treturn this\n\t}\n\n\tprivate initializePullClient(\n\t\tuserId: number,\n\t\tprefix: string = 'prefix'\n\t): void {\n\t\tthis._b24PullClient = new B24PullClientManager({\n\t\t\tb24: this._b24,\n\t\t\trestApplication: this._b24.auth.getUniq(prefix),\n\t\t\tuserId,\n\t\t})\n\t}\n\n\tpublic subscribePullClient(\n\t\tcallback: (message: TypePullMessage) => void,\n\t\tmoduleId: string = 'application'\n\t): B24HelperManager {\n\t\tif (!this._b24PullClient) {\n\t\t\tthrow new Error('PullClient not init')\n\t\t}\n\n\t\tthis._pullClientModuleId = moduleId\n\n\t\tthis._pullClientUnSubscribe.push(\n\t\t\tthis._b24PullClient.subscribe({\n\t\t\t\tmoduleId: this._pullClientModuleId,\n\t\t\t\tcallback,\n\t\t\t})\n\t\t)\n\n\t\treturn this\n\t}\n\n\tpublic startPullClient(): void {\n\t\tif (!this._b24PullClient) {\n\t\t\tthrow new Error('PullClient not init')\n\t\t}\n\n\t\tthis._b24PullClient.start().catch((error) => {\n\t\t\tthis.getLogger().error(`${Text.getDateForLog()}: Pull not running`, error)\n\t\t})\n\t}\n\n\tpublic getModuleIdPullClient(): string {\n\t\tif (!this._b24PullClient) {\n\t\t\tthrow new Error('PullClient not init')\n\t\t}\n\n\t\treturn this._pullClientModuleId\n\t}\n\n\tprivate _destroyPullClient(): void {\n\t\tfor (const unsubscribeCallback of this._pullClientUnSubscribe) {\n\t\t\tunsubscribeCallback()\n\t\t}\n\n\t\tthis._b24PullClient?.destroy()\n\t\tthis._b24PullClient = null\n\t}\n\t// endregion ////\n\n\t// region Tools ////\n\tprivate ensureInitialized(): void {\n\t\tif (!this._isInit) {\n\t\t\tthrow new Error('B24HelperManager not initialized')\n\t\t}\n\t}\n\t// endregion ////\n}\n","import { B24HelperManager } from './helper-manager'\nimport { LoadDataType } from '../types/b24-helper'\nimport type { TypeB24 } from '../types/b24'\nimport type { TypePullMessage } from '../types/pull'\n\nexport const useB24Helper = () => {\n\tlet $isInitB24Helper = false\n\tlet $isInitPullClient = false\n\n\tlet $b24Helper: null | B24HelperManager = null\n\n\tconst initB24Helper = async (\n\t\t$b24: TypeB24,\n\t\tdataTypes: LoadDataType[] = [LoadDataType.App, LoadDataType.Profile]\n\t): Promise<B24HelperManager> => {\n\t\tif (null === $b24Helper) {\n\t\t\t$b24Helper = new B24HelperManager($b24)\n\t\t}\n\n\t\tif ($isInitB24Helper) {\n\t\t\treturn $b24Helper as B24HelperManager\n\t\t}\n\n\t\treturn $b24Helper.loadData(dataTypes).then(() => {\n\t\t\t$isInitB24Helper = true\n\t\t\treturn $b24Helper as B24HelperManager\n\t\t})\n\t}\n\n\tconst destroyB24Helper = () => {\n\t\t$b24Helper?.destroy()\n\t\t$b24Helper = null\n\t\t$isInitB24Helper = false\n\t\t$isInitPullClient = false\n\t}\n\n\tconst isInitB24Helper = () => {\n\t\treturn $isInitB24Helper\n\t}\n\n\tconst getB24Helper = (): B24HelperManager => {\n\t\tif (null === $b24Helper) {\n\t\t\tthrow new Error(\n\t\t\t\t'B24HelperManager is not initialized. You need to call initB24Helper first.'\n\t\t\t)\n\t\t}\n\n\t\treturn $b24Helper\n\t}\n\n\tconst usePullClient = () => {\n\t\tif (null === $b24Helper) {\n\t\t\tthrow new Error(\n\t\t\t\t'B24HelperManager is not initialized. You need to call initB24Helper first.'\n\t\t\t)\n\t\t}\n\n\t\t$b24Helper.usePullClient()\n\t\t$isInitPullClient = true\n\t}\n\n\tconst useSubscribePullClient = (\n\t\tcallback: (message: TypePullMessage) => void,\n\t\tmoduleId: string = 'application'\n\t) => {\n\t\tif (!$isInitPullClient) {\n\t\t\tthrow new Error(\n\t\t\t\t'PullClient is not initialized. You need to call usePullClient first.'\n\t\t\t)\n\t\t}\n\n\t\t$b24Helper?.subscribePullClient(callback, moduleId)\n\t}\n\n\tconst startPullClient = () => {\n\t\tif (!$isInitPullClient) {\n\t\t\tthrow new Error(\n\t\t\t\t'PullClient is not initialized. You need to call usePullClient first.'\n\t\t\t)\n\t\t}\n\n\t\t$b24Helper?.startPullClient()\n\t}\n\n\treturn {\n\t\tinitB24Helper,\n\t\tisInitB24Helper,\n\t\tdestroyB24Helper,\n\t\tgetB24Helper,\n\t\tusePullClient,\n\t\tuseSubscribePullClient,\n\t\tstartPullClient,\n\t}\n}\n","import { B24Frame } from './frame'\nimport type { B24FrameQueryParams } from './types/auth'\n\ntype whileB24InitCallback = {\n\tresolve: (b24Frame: B24Frame) => void\n\treject: (error: any) => void\n}\n\nconst delay = 50\n\nlet $b24Frame: null | B24Frame = null\nlet isInit = false\nlet connectError: null | Error = null\nlet isMakeFirstCall = false\n\nlet listCallBack: whileB24InitCallback[] = []\nlet isStartWatch = false\n\n// region Watch ////\nfunction startWatch() {\n\twindow.setTimeout(() => {\n\t\tif (!isInit || $b24Frame === null) {\n\t\t\tstartWatch()\n\t\t\treturn\n\t\t}\n\n\t\tprocessResult()\n\t\tlistCallBack = []\n\t}, delay)\n}\n\nfunction processResult(): void {\n\tif (null !== connectError) {\n\t\tfor (const callBack of listCallBack) {\n\t\t\tcallBack.reject(connectError)\n\t\t}\n\t}\n\n\tif (!isInit || $b24Frame === null) {\n\t\treturn\n\t}\n\n\tfor (const callBack of listCallBack) {\n\t\tcallBack.resolve($b24Frame as B24Frame)\n\t}\n}\n// endregion ////\n\nexport async function initializeB24Frame(): Promise<B24Frame> {\n\t// region isInit ////\n\tif (isInit && null !== $b24Frame) {\n\t\treturn Promise.resolve($b24Frame)\n\t}\n\t// endregion ////\n\n\t// region Not First Call ///\n\tif (isMakeFirstCall) {\n\t\t// region startWatch ///\n\t\tif (!isStartWatch) {\n\t\t\tisStartWatch = true\n\t\t\tstartWatch()\n\t\t}\n\t\t// endregion ////\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlistCallBack.push({\n\t\t\t\tresolve: resolve,\n\t\t\t\treject: reject,\n\t\t\t})\n\t\t})\n\t}\n\t// endregion ////\n\n\t// region First Call ///\n\tisMakeFirstCall = true\n\n\treturn new Promise((resolve, reject) => {\n\t\tconst queryParams: B24FrameQueryParams = {\n\t\t\tDOMAIN: null,\n\t\t\tPROTOCOL: false,\n\t\t\tAPP_SID: null,\n\t\t\tLANG: null,\n\t\t}\n\n\t\tif (window.name) {\n\t\t\tconst [domain, protocol, appSid] = window.name.split('|')\n\t\t\tqueryParams.DOMAIN = domain\n\t\t\tqueryParams.PROTOCOL = Number.parseInt(protocol) === 1\n\t\t\tqueryParams.APP_SID = appSid\n\t\t\tqueryParams.LANG = null\n\t\t}\n\n\t\tif (!queryParams.DOMAIN || !queryParams.APP_SID) {\n\t\t\tconnectError = new Error('Unable to initialize Bitrix24Frame library!')\n\t\t\treject(connectError)\n\t\t}\n\n\t\t$b24Frame = new B24Frame(queryParams)\n\n\t\t$b24Frame\n\t\t\t.init()\n\t\t\t.then(() => {\n\t\t\t\tisInit = true\n\t\t\t\tresolve($b24Frame as B24Frame)\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconnectError = error\n\t\t\t\treject(connectError)\n\t\t\t})\n\t})\n\t// endregion ////\n}\n"],"names":["LoggerType","DataType","n","fractionDigits","DateTime","EnumCrmEntityType","EnumCrmEntityTypeId","LoadDataType","TypeOption","ConnectionType","LsKeys","PullStatus","SenderType","SubscriptionType","CloseReasons","SystemCommands","ServerMode","RpcMethod","RequestIdGenerator","result","AxiosError","answerError","problemError","resultData","B24LangList","MessageCommands","OptionsManager","config","response","B24PullClientManager"],"mappings":"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"}
|