{"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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"}