{"version":3,"file":"options.mjs","sources":["../../../src/frame/options.ts"],"sourcesContent":["import type { MessageManager } from './message'\nimport { 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/sdk/bx24-js-sdk/options/index.html\n */\nexport class OptionsManager {\n  #messageManager: MessageManager\n  #appOptions: null | Record<string, any> = null\n  #userOptions: null | Record<string, any> = null\n\n  constructor(messageManager: MessageManager) {\n    this.#messageManager = messageManager\n  }\n\n  /**\n   * Initializes the data received from the parent window message.\n   * @param data\n   */\n  initData(data: MessageInitData): OptionsManager {\n    if (data.APP_OPTIONS) {\n      this.#appOptions = data.APP_OPTIONS as Record<string, any>\n    }\n\n    if (data.USER_OPTIONS) {\n      this.#userOptions = data.USER_OPTIONS as Record<string, any>\n    }\n\n    return this\n  }\n\n  /**\n   * Getting application option\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-app-option-get.html\n   */\n  appGet(option: string): any {\n    if (this.#appOptions && !!this.#appOptions[option]) {\n      return this.#appOptions[option]\n    }\n\n    throw new Error(`app.option.${option} not set`)\n  }\n\n  /**\n   * Updates application data through the parent window\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-app-option-set.html\n   */\n  async appSet(option: string, value: any): Promise<void> {\n    if (!this.#appOptions) {\n      this.#appOptions = []\n    }\n\n    this.#appOptions[option] = value\n\n    return this.#sendParentMessage(\n      MessageCommands.setAppOption,\n      option,\n      this.#appOptions[option]\n    )\n  }\n\n  /**\n   * Getting user option\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-user-option-get.html\n   */\n  userGet(option: string): any {\n    if (this.#userOptions && !!this.#userOptions[option]) {\n      return this.#userOptions[option]\n    }\n\n    throw new Error(`user.option.${option} not set`)\n  }\n\n  /**\n   * Updates user data through the parent window\n   *\n   * @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/options/bx24-user-option-set.html\n   */\n  async userSet(option: string, value: any): Promise<void> {\n    if (!this.#appOptions) {\n      this.#appOptions = []\n    }\n\n    if (!this.#appOptions[option]) {\n      this.#appOptions[option] = null\n    }\n\n    // @ts-expect-error this code work success\n    this.#userOptions[option] = value\n\n    return this.#sendParentMessage(\n      MessageCommands.setUserOption,\n      option,\n      // @ts-expect-error this code work success\n      this.#userOptions[option]\n    )\n  }\n\n  async #sendParentMessage(\n    command: string,\n    option: string,\n    value: any\n  ): Promise<void> {\n    return this.#messageManager\n      .send(command, {\n        name: option,\n        value: value,\n        isSafely: true\n      })\n      .then(() => {\n        return Promise.resolve()\n      })\n  }\n}\n"],"names":[],"mappings":"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"}