@bitrix24/b24jssdk
Version:
Bitrix24 REST API JavaScript SDK
1 lines • 25.4 kB
Source Map (JSON)
{"version":3,"file":"helper-manager.mjs","sources":["../../../src/helper/helper-manager.ts"],"sourcesContent":["import type { LoggerInterface } from '../logger'\nimport { LoggerFactory } from '../logger'\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 { TypeApp, TypeB24Form, TypeEnumAppStatus, TypeLicense, TypePayment, TypeUser } from '../types/b24-helper'\nimport type { GenderString } from '../types/common'\nimport type { TypePullMessage } from '../types/pull'\nimport type { BatchNamedCommandsUniversal } from '../types/http'\n\n/**\n * A universal class that is used to manage the initial application data\n */\nexport class B24HelperManager {\n private readonly _b24: TypeB24\n private _isInit: boolean = false\n\n private _profile: ProfileManager | null = null\n\n private _app: AppManager | null = null\n private _payment: PaymentManager | null = null\n private _license: LicenseManager | null = null\n\n private _currency: CurrencyManager | null = null\n private _appOptions: OptionsManager | null = null\n private _userOptions: OptionsManager | null = null\n\n private _b24PullClient: B24PullClientManager | null = null\n private _pullClientUnSubscribe: (() => void)[] = []\n private _pullClientModuleId: string = ''\n\n protected _logger: LoggerInterface\n\n constructor(b24: TypeB24) {\n this._logger = LoggerFactory.createNullLogger()\n this._b24 = b24\n }\n\n setLogger(logger: LoggerInterface): void {\n this._logger = logger\n if (null !== this._profile) {\n this._profile.setLogger(this.getLogger())\n }\n\n if (null !== this._app) {\n this._app.setLogger(this.getLogger())\n }\n\n if (null !== this._payment) {\n this._payment.setLogger(this.getLogger())\n }\n\n if (null !== this._license) {\n this._license.setLogger(this.getLogger())\n }\n\n if (null !== this._currency) {\n this._currency.setLogger(this.getLogger())\n }\n\n if (null !== this._appOptions) {\n this._appOptions.setLogger(this.getLogger())\n }\n\n if (null !== this._userOptions) {\n this._userOptions.setLogger(this.getLogger())\n }\n }\n\n getLogger(): LoggerInterface {\n return this._logger\n }\n\n destroy(): void {\n this._destroyPullClient()\n }\n\n // region loadData ////\n async loadData(\n dataTypes: LoadDataType[] = [LoadDataType.App, LoadDataType.Profile],\n requestId: string = `helper-load-data`\n ): Promise<void> {\n const batchMethods: Record<string, { method: string } | { method: string }[]> = {\n [LoadDataType.App]: { method: 'app.info' },\n [LoadDataType.Profile]: { method: 'profile' },\n [LoadDataType.Currency]: [\n { method: 'crm.currency.base.get' },\n { method: 'crm.currency.list' }\n ],\n [LoadDataType.AppOptions]: { method: 'app.option.get' },\n [LoadDataType.UserOptions]: { method: 'user.option.get' }\n }\n\n const batchRequest = dataTypes.reduce(\n (acc, type) => {\n if (batchMethods[type]) {\n if (Array.isArray(batchMethods[type])) {\n for (const [index, row] of batchMethods[type].entries()) {\n acc[`get_${type}_${index}`] = row\n }\n } else {\n acc[`get_${type}`] = batchMethods[type]\n }\n }\n\n return acc\n },\n {} as BatchNamedCommandsUniversal\n )\n\n try {\n const response = await this._b24.actions.v2.batch.make({\n calls: batchRequest,\n options: {\n isHaltOnError: true,\n returnAjaxResult: false,\n requestId\n }\n })\n const data = response.getData()! as Record<string, any>\n\n if (data[`get_${LoadDataType.App}`]) {\n this._app = await this.parseAppData(data[`get_${LoadDataType.App}`])\n this._payment = await this.parsePaymentData(\n data[`get_${LoadDataType.App}`]\n )\n this._license = await this.parseLicenseData(\n data[`get_${LoadDataType.App}`]\n )\n }\n\n if (data[`get_${LoadDataType.Profile}`]) {\n this._profile = await this.parseUserData(\n data[`get_${LoadDataType.Profile}`]\n )\n }\n\n if (\n data[`get_${LoadDataType.Currency}_0`]\n && data[`get_${LoadDataType.Currency}_1`]\n ) {\n this._currency = await this.parseCurrencyData({\n currencyBase: data[`get_${LoadDataType.Currency}_0`],\n currencyList: data[`get_${LoadDataType.Currency}_1`]\n })\n }\n\n if (data[`get_${LoadDataType.AppOptions}`]) {\n this._appOptions = await this.parseOptionsData(\n 'app',\n data[`get_${LoadDataType.AppOptions}`]\n )\n }\n\n if (data[`get_${LoadDataType.UserOptions}`]) {\n this._userOptions = await this.parseOptionsData(\n 'user',\n data[`get_${LoadDataType.UserOptions}`]\n )\n }\n\n this._isInit = true\n } catch (error) {\n if (error instanceof Error) {\n throw error\n }\n\n this.getLogger().error('Failed to load data', { error })\n throw new Error('Failed to load data')\n }\n }\n\n private async parseUserData(profileData: any): Promise<ProfileManager> {\n const manager = new ProfileManager(this._b24)\n manager.setLogger(this.getLogger())\n return manager\n .initData({\n id: Number(profileData.ID),\n isAdmin: profileData.ADMIN === true,\n lastName: profileData?.LAST_NAME || '',\n name: profileData?.NAME || '',\n gender: (profileData?.PERSONAL_GENDER || '') as GenderString,\n photo: profileData?.PERSONAL_PHOTO || '',\n TimeZone: profileData?.TIME_ZONE || '',\n TimeZoneOffset: profileData?.TIME_ZONE_OFFSET\n } as TypeUser)\n .then(() => {\n return manager\n })\n }\n\n private async parseAppData(appData: any): Promise<AppManager> {\n const manager = new AppManager(this._b24)\n manager.setLogger(this.getLogger())\n return manager\n .initData({\n id: Number.parseInt(appData.ID),\n code: appData.CODE,\n version: Number.parseInt(appData.VERSION),\n status: appData.STATUS as TypeEnumAppStatus,\n isInstalled: appData.INSTALLED as boolean\n } as TypeApp)\n .then(() => {\n return manager\n })\n }\n\n private async parsePaymentData(appData: any): Promise<PaymentManager> {\n const manager = new PaymentManager(this._b24)\n manager.setLogger(this.getLogger())\n return manager\n .initData({\n isExpired: appData.PAYMENT_EXPIRED === 'Y',\n days: Number.parseInt(appData.DAYS || '0')\n } as TypePayment)\n .then(() => {\n return manager\n })\n }\n\n private async parseLicenseData(appData: any): Promise<LicenseManager> {\n const manager = new LicenseManager(this._b24)\n manager.setLogger(this.getLogger())\n return manager\n .initData({\n languageId: appData.LANGUAGE_ID,\n license: appData.LICENSE,\n licensePrevious: appData.LICENSE_PREVIOUS,\n licenseType: appData.LICENSE_TYPE,\n licenseFamily: appData.LICENSE_FAMILY,\n isSelfHosted: appData.LICENSE.includes('selfhosted')\n } as TypeLicense)\n .then(() => {\n return manager\n })\n }\n\n private async parseCurrencyData(currencyData: any): Promise<CurrencyManager> {\n const manager = new CurrencyManager(this._b24)\n manager.setLogger(this.getLogger())\n return manager.initData(currencyData).then(() => {\n return manager\n })\n }\n\n private async parseOptionsData(\n type: 'app' | 'user',\n optionsData: any\n ): Promise<OptionsManager> {\n const manager = new OptionsManager(this._b24, type)\n manager.setLogger(this.getLogger())\n return manager.initData(optionsData).then(() => {\n return manager\n })\n }\n // endregion ////\n\n // region Get ////\n get isInit(): boolean {\n return this._isInit\n }\n\n get forB24Form(): TypeB24Form {\n this.ensureInitialized()\n\n if (null === this._profile) {\n throw new Error('B24HelperManager.profileInfo not initialized')\n }\n\n if (null === this._app) {\n throw new Error('B24HelperManager.appInfo not initialized')\n }\n\n return {\n app_code: this.appInfo.data.code,\n app_status: this.appInfo.data.status as string,\n payment_expired: this.paymentInfo.data.isExpired ? 'Y' : 'N',\n days: this.paymentInfo.data.days,\n b24_plan: this.licenseInfo.data.license,\n c_name: this.profileInfo.data.name,\n c_last_name: this.profileInfo.data.lastName,\n hostname: this.hostName\n } as TypeB24Form\n }\n\n /**\n * Get the account address BX24 (https://your_domain.bitrix24.com)\n */\n get hostName(): string {\n return this._b24.getTargetOrigin()\n }\n\n get profileInfo(): ProfileManager {\n this.ensureInitialized()\n\n if (null === this._profile) {\n throw new Error('B24HelperManager.profileInfo not initialized')\n }\n\n return this._profile\n }\n\n get appInfo(): AppManager {\n this.ensureInitialized()\n\n if (null === this._app) {\n throw new Error('B24HelperManager.appInfo not initialized')\n }\n\n return this._app\n }\n\n get paymentInfo(): PaymentManager {\n this.ensureInitialized()\n\n if (null === this._payment) {\n throw new Error('B24HelperManager.paymentInfo not initialized')\n }\n\n return this._payment\n }\n\n get licenseInfo(): LicenseManager {\n this.ensureInitialized()\n\n if (null === this._license) {\n throw new Error('B24HelperManager.licenseInfo not initialized')\n }\n\n return this._license\n }\n\n get currency(): CurrencyManager {\n this.ensureInitialized()\n\n if (null === this._currency) {\n throw new Error('B24HelperManager.currency not initialized')\n }\n\n return this._currency\n }\n\n get appOptions(): OptionsManager {\n this.ensureInitialized()\n\n if (null === this._appOptions) {\n throw new Error('B24HelperManager.appOptions not initialized')\n }\n\n return this._appOptions\n }\n\n get userOptions(): OptionsManager {\n this.ensureInitialized()\n\n if (null === this._userOptions) {\n throw new Error('B24HelperManager.userOptions not initialized')\n }\n\n return this._userOptions\n }\n // endregion ////\n\n // region Custom SelfHosted && Cloud ////\n get isSelfHosted(): boolean {\n return this.licenseInfo.data.isSelfHosted\n }\n\n /**\n * Returns the increment step of fields of type ID\n * @memo in a cloud step = 2 in box step = 1\n *\n * @returns {number}\n */\n get primaryKeyIncrementValue(): number {\n if (this.isSelfHosted) {\n return 1\n }\n\n return 2\n }\n\n /**\n * Defines specific URLs for a Bitrix24 box or cloud\n */\n get b24SpecificUrl(): Record<keyof typeof TypeSpecificUrl, string> {\n if (this.isSelfHosted) {\n return {\n [TypeSpecificUrl.MainSettings]: '/configs/',\n [TypeSpecificUrl.UfList]: '/configs/userfield_list.php',\n [TypeSpecificUrl.UfPage]: '/configs/userfield.php'\n }\n }\n\n return {\n [TypeSpecificUrl.MainSettings]: '/settings/configs/',\n [TypeSpecificUrl.UfList]: '/settings/configs/userfield_list.php',\n [TypeSpecificUrl.UfPage]: '/settings/configs/userfield.php'\n }\n }\n // endregion ////\n\n // region Pull.Client ////\n public usePullClient(\n prefix: string = 'prefix',\n userId?: number\n ): B24HelperManager {\n if (this._b24PullClient) {\n return this\n }\n\n this.initializePullClient(\n typeof userId === 'undefined' ? this.profileInfo.data.id || 0 : userId,\n prefix\n )\n\n return this\n }\n\n private initializePullClient(\n userId: number,\n prefix: string = 'prefix'\n ): void {\n this._b24PullClient = new B24PullClientManager({\n b24: this._b24,\n restApplication: this._b24.auth.getUniq(prefix),\n userId\n })\n }\n\n public subscribePullClient(\n callback: (message: TypePullMessage) => void,\n moduleId: string = 'application'\n ): B24HelperManager {\n if (!this._b24PullClient) {\n throw new Error('PullClient not init')\n }\n\n this._pullClientModuleId = moduleId\n\n this._pullClientUnSubscribe.push(\n this._b24PullClient.subscribe({\n moduleId: this._pullClientModuleId,\n callback\n })\n )\n\n return this\n }\n\n public startPullClient(): void {\n if (!this._b24PullClient) {\n throw new Error('PullClient not init')\n }\n\n this._b24PullClient.start().catch((error) => {\n this.getLogger().error(`${Text.getDateForLog()}: Pull not running`, { error })\n })\n }\n\n public getModuleIdPullClient(): string {\n if (!this._b24PullClient) {\n throw new Error('PullClient not init')\n }\n\n return this._pullClientModuleId\n }\n\n private _destroyPullClient(): void {\n for (const unsubscribeCallback of this._pullClientUnSubscribe) {\n unsubscribeCallback()\n }\n\n this._b24PullClient?.destroy()\n this._b24PullClient = null\n }\n // endregion ////\n\n // region Tools ////\n private ensureInitialized(): void {\n if (!this._isInit) {\n throw new Error('B24HelperManager not initialized')\n }\n }\n // endregion ////\n}\n"],"names":["B24PullClientManager"],"mappings":"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"}