{"version":3,"file":"abstract-b24.cjs","sources":["../../../src/core/abstract-b24.ts"],"sourcesContent":["import type { LoggerInterface } from '../logger'\nimport type { TypeB24 } from '../types/b24'\nimport type { TypeHttp, TypeHttpOptions } from '../types/http'\nimport type { AuthActions } from '../types/auth'\nimport type { RestrictionParams } from '../types/limiters'\nimport { SdkError } from './sdk-error'\nimport { ApiVersion } from '../types/b24'\nimport { versionManager } from './version-manager'\nimport { LoggerFactory } from '../logger'\n// Internal diagnostic — imported from the module directly so it stays off the\n// package's public surface (`logger/index.ts` is re-exported from `src/index.ts`).\nimport { warnOnNonPromiseLogger } from '../logger/assert-logger-shape'\nimport { ActionsManager } from './actions/manager'\nimport { ToolsManager } from './tools/manager'\n\n/**\n * Abstract base class for all SDK entry points (B24Frame, B24Hook, etc.).\n * Owns the HTTP clients for REST API v2 and v3, the actions surface via {@link ActionsManager},\n * and built-in tools via {@link ToolsManager}.\n * Concrete subclasses must implement authentication and HTTP transport initialization.\n */\nexport abstract class AbstractB24 implements TypeB24 {\n  protected _isInit: boolean = false\n  protected _httpV2: null | TypeHttp = null\n  protected _httpV3: null | TypeHttp = null\n  protected _logger: LoggerInterface\n\n  protected _actionsManager: ActionsManager\n  protected _toolsManager: ToolsManager\n\n  // region Init ////\n  protected constructor() {\n    this._isInit = false\n    this._logger = LoggerFactory.createNullLogger()\n\n    this._actionsManager = new ActionsManager(this)\n    this._toolsManager = new ToolsManager(this)\n  }\n\n  /**\n   * @inheritDoc\n   */\n  get isInit(): boolean {\n    return this._isInit\n  }\n\n  public async init(): Promise<void> {\n    this._isInit = true\n    return\n  }\n\n  public destroy(): void {}\n  // endregion ////\n\n  // region Core ////\n  abstract get auth(): AuthActions\n\n  get actions(): ActionsManager {\n    this._ensureInitialized()\n    return this._actionsManager\n  }\n\n  get tools(): ToolsManager {\n    this._ensureInitialized()\n    return this._toolsManager\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public abstract getTargetOrigin(): string\n\n  /**\n   * @inheritDoc\n   */\n  public abstract getTargetOriginWithPath(): Map<ApiVersion, string>\n\n  // endregion ////\n\n  // region Tools ////\n  /**\n   * @inheritDoc\n   */\n  public getHttpClient(version: ApiVersion): TypeHttp {\n    this._ensureInitialized()\n\n    switch (version) {\n      case ApiVersion.v3:\n        if (null === this._httpV3) {\n          throw new SdkError({\n            code: 'JSSDK_CORE_B24_HTTP_V3_NOT_INIT',\n            description: `HttpV3 not init`,\n            status: 500\n          })\n        }\n        return this._httpV3\n      case ApiVersion.v2:\n        if (null === this._httpV2) {\n          throw new SdkError({\n            code: 'JSSDK_CORE_B24_HTTP_V2_NOT_INIT',\n            description: `HttpV2 not init`,\n            status: 500\n          })\n        }\n        return this._httpV2\n    }\n    throw new SdkError({\n      code: 'JSSDK_CORE_B24_API_WRONG',\n      description: `Wrong Api Version ${version}`,\n      status: 500\n    })\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setHttpClient(version: ApiVersion, client: TypeHttp): void {\n    switch (version) {\n      case ApiVersion.v3:\n        this._httpV3 = client\n        return\n      case ApiVersion.v2:\n        this._httpV2 = client\n        return\n    }\n    throw new SdkError({\n      code: 'JSSDK_CORE_B24_API_WRONG',\n      description: `Wrong Api Version ${version}`,\n      status: 500\n    })\n  }\n\n  public setLogger(logger: LoggerInterface): void {\n    // Checked here, at the entry point callers actually use, rather than in each\n    // of the internal `setLogger` methods below — those receive `this._logger`,\n    // which has already been through this. (#346)\n    warnOnNonPromiseLogger(logger, 'B24 client')\n    this._logger = logger\n\n    this._actionsManager.setLogger(this._logger)\n    this._toolsManager.setLogger(this._logger)\n\n    versionManager.getAllApiVersions().forEach((version) => {\n      this.getHttpClient(version).setLogger(this._logger)\n    })\n  }\n\n  public getLogger(): LoggerInterface {\n    return this._logger\n  }\n\n  /**\n   * @inheritDoc\n   */\n  /**\n   * Applies the parameters to every API version's client.\n   *\n   * `Promise.all`, not `allSettled`: a rejection here means the policy was not\n   * applied, and swallowing it made the call resolve while the client kept\n   * running the old configuration — or, when a malformed limiter block reached\n   * a sub-limiter, while it ran on nothing at all. A caller must be able to see\n   * that their policy did not take. (#479)\n   *\n   * All versions receive the same object, so a value read from one client is\n   * written to all of them.\n   */\n  public async setRestrictionManagerParams(params: RestrictionParams): Promise<void> {\n    const promises = versionManager.getAllApiVersions().map(version =>\n      this.getHttpClient(version).setRestrictionManagerParams(params)\n    )\n\n    await Promise.all(promises)\n  }\n\n  /**\n   * Axios config handed to both transports at construction.\n   *\n   * `null` by default: the transports already choose sensible defaults, and an\n   * entry point that takes no such option from its caller has nothing to add.\n   * The entry points that do accept one assign this before building the clients.\n   *\n   * Whatever lands here is filtered against the allowlist in `pickHttpOptions`\n   * and then spread **after** the transport's own defaults, so a caller wins on\n   * any key the allowlist accepts — including `adapter`, which is the reason\n   * this channel is open to callers at all. A key outside it is dropped at\n   * construction and its name logged.\n   */\n  protected _httpOptions: null | TypeHttpOptions = null\n\n  /**\n   * Settings for the http connection, read once per transport at construction.\n   *\n   * @protected\n   */\n  protected _getHttpOptions(): null | TypeHttpOptions {\n    return this._httpOptions\n  }\n\n  /**\n   * Generates an object not initialized error\n   * @protected\n   */\n  protected _ensureInitialized(): void {\n    if (!this._isInit) {\n      throw new SdkError({\n        code: 'JSSDK_CORE_B24_NOT_INIT',\n        description: `B24 not initialized`,\n        status: 500\n      })\n    }\n  }\n  // endregion ////\n}\n"],"names":["LoggerFactory","ActionsManager","ToolsManager","ApiVersion","SdkError","warnOnNonPromiseLogger","versionManager"],"mappings":"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"}