{"version":3,"sources":["../src/profiles/device-info.ts"],"names":["decoder","DeviceInfoProfile","BaseProfile","info","tryRead","fn","key","characteristic","dv"],"mappings":"qCAEA,IAAMA,EAAU,IAAI,WAAA,CAqDPC,EAAN,cAAgCC,CAAY,CAA5C,WAAA,EAAA,CAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CACL,IAAA,CAAmB,OAAA,CAAU,qBAAA,CAE7B,MAAM,eAAA,EAAmC,CACvC,OAAO,IAAA,CAAK,UAAA,CAAW,qBAAqB,CAC9C,CAEA,MAAM,gBAAA,EAAoC,CACxC,OAAO,IAAA,CAAK,WAAW,sBAAsB,CAC/C,CAEA,MAAM,oBAAA,EAAwC,CAC5C,OAAO,KAAK,UAAA,CAAW,0BAA0B,CACnD,CAEA,MAAM,sBAAwC,CAC5C,OAAO,IAAA,CAAK,UAAA,CAAW,0BAA0B,CACnD,CAEA,MAAM,oBAAA,EAAwC,CAC5C,OAAO,IAAA,CAAK,UAAA,CAAW,0BAA0B,CACnD,CAEA,MAAM,oBAAA,EAAwC,CAC5C,OAAO,IAAA,CAAK,WAAW,0BAA0B,CACnD,CAEA,MAAM,cAAkC,CACtC,OAAO,KAAK,IAAA,CAAK,WAAW,CAC9B,CAGA,MAAM,OAAA,EAA+B,CACnC,IAAMC,CAAAA,CAAmB,GACnBC,CAAAA,CAAU,MAAOC,EAA4BC,CAAAA,GAA0B,CAC3E,GAAI,CAAGH,EAAiCG,CAAG,CAAA,CAAI,MAAMD,CAAAA,GAAM,MAAQ,CAA0C,CAC/G,CAAA,CACA,OAAA,MAAM,QAAQ,GAAA,CAAI,CAChBD,EAAQ,IAAM,IAAA,CAAK,iBAAgB,CAAG,aAAa,CAAA,CACnDA,CAAAA,CAAQ,IAAM,IAAA,CAAK,gBAAA,GAAoB,cAAc,CAAA,CACrDA,EAAQ,IAAM,IAAA,CAAK,oBAAA,EAAqB,CAAG,kBAAkB,CAAA,CAC7DA,CAAAA,CAAQ,IAAM,IAAA,CAAK,oBAAA,GAAwB,kBAAkB,CAAA,CAC7DA,CAAAA,CAAQ,IAAM,KAAK,oBAAA,EAAqB,CAAG,kBAAkB,CAAA,CAC7DA,CAAAA,CAAQ,IAAM,IAAA,CAAK,oBAAA,EAAqB,CAAG,kBAAkB,EAC7DA,CAAAA,CAAQ,IAAM,KAAK,YAAA,EAAa,CAAG,UAAU,CAC/C,CAAC,CAAA,CACMD,CACT,CAEA,MAAc,UAAA,CAAWI,EAAyC,CAChE,IAAMC,EAAK,MAAM,IAAA,CAAK,IAAA,CAAKD,CAAc,EACzC,OAAOP,CAAAA,CAAQ,OAAOQ,CAAAA,CAAG,MAAM,CACjC,CACF","file":"chunk-HBDTBK5K.mjs","sourcesContent":["import { BaseProfile } from './base';\n\nconst decoder = new TextDecoder();\n\n/**\n * Aggregated device information read from the Device Information Service.\n *\n * All fields are optional because a peripheral may not expose every\n * characteristic. Use {@link DeviceInfoProfile.readAll} to populate as\n * many fields as the device supports in a single call.\n */\nexport interface DeviceInfo {\n  /** Model number string (characteristic 0x2A24). */\n  modelNumber?: string;\n  /** Serial number string (characteristic 0x2A25). */\n  serialNumber?: string;\n  /** Firmware revision string (characteristic 0x2A26). */\n  firmwareRevision?: string;\n  /** Hardware revision string (characteristic 0x2A27). */\n  hardwareRevision?: string;\n  /** Software revision string (characteristic 0x2A28). */\n  softwareRevision?: string;\n  /** Manufacturer name string (characteristic 0x2A29). */\n  manufacturerName?: string;\n  /** Raw System ID value (characteristic 0x2A23) as a {@link DataView}. */\n  systemId?: DataView;\n}\n\n/**\n * BLE Device Information Service profile (UUID 0x180A).\n *\n * Reads standard device metadata characteristics such as model number,\n * manufacturer name, firmware revision, and more. String values are\n * decoded from raw bytes with {@link TextDecoder}.\n *\n * @example\n * ```ts\n * import { DeviceInfoProfile } from '@beacio/core/profiles';\n *\n * const info = new DeviceInfoProfile(device);\n * await info.connect();\n *\n * // Read individual fields\n * const manufacturer = await info.readManufacturerName();\n * const model = await info.readModelNumber();\n * console.log(`${manufacturer} ${model}`);\n *\n * // Or read all available fields at once\n * const all = await info.readAll();\n * console.log(all);\n * // { modelNumber: 'Sensor-v2', manufacturerName: 'Acme', ... }\n *\n * info.stop();\n * ```\n */\nexport class DeviceInfoProfile extends BaseProfile {\n  protected readonly service = 'device_information';\n\n  async readModelNumber(): Promise<string> {\n    return this.readString('model_number_string');\n  }\n\n  async readSerialNumber(): Promise<string> {\n    return this.readString('serial_number_string');\n  }\n\n  async readFirmwareRevision(): Promise<string> {\n    return this.readString('firmware_revision_string');\n  }\n\n  async readHardwareRevision(): Promise<string> {\n    return this.readString('hardware_revision_string');\n  }\n\n  async readSoftwareRevision(): Promise<string> {\n    return this.readString('software_revision_string');\n  }\n\n  async readManufacturerName(): Promise<string> {\n    return this.readString('manufacturer_name_string');\n  }\n\n  async readSystemId(): Promise<DataView> {\n    return this.read('system_id');\n  }\n\n  /** Read all available device info fields. Missing fields return undefined. */\n  async readAll(): Promise<DeviceInfo> {\n    const info: DeviceInfo = {};\n    const tryRead = async (fn: () => Promise<unknown>, key: keyof DeviceInfo) => {\n      try { (info as Record<string, unknown>)[key] = await fn(); } catch { /* optional—field may be unsupported */ }\n    };\n    await Promise.all([\n      tryRead(() => this.readModelNumber(), 'modelNumber'),\n      tryRead(() => this.readSerialNumber(), 'serialNumber'),\n      tryRead(() => this.readFirmwareRevision(), 'firmwareRevision'),\n      tryRead(() => this.readHardwareRevision(), 'hardwareRevision'),\n      tryRead(() => this.readSoftwareRevision(), 'softwareRevision'),\n      tryRead(() => this.readManufacturerName(), 'manufacturerName'),\n      tryRead(() => this.readSystemId(), 'systemId'),\n    ]);\n    return info;\n  }\n\n  private async readString(characteristic: string): Promise<string> {\n    const dv = await this.read(characteristic);\n    return decoder.decode(dv.buffer);\n  }\n}\n"]}