{"version":3,"file":"service-rpc-C1k9Kz4F.mjs","names":[],"sources":["../src/common/brookesia-host.ts","../src/common/service-rpc.ts"],"sourcesContent":["/* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD */\n/* SPDX-License-Identifier: Apache-2.0 */\n\n/** JSON envelope returned by `brookesia.call_function` for service RPC. */\nexport type BrookesiaServiceResult<T = unknown> = {\n  success: boolean;\n  data?: T;\n  error?: string;\n};\n\n/** Subset of the host-injected global used by service clients. */\nexport interface BrookesiaHost {\n  service_available(name: string): boolean;\n  start_service(name: string): number;\n  stop_service(handle: number): void;\n  call_function(handle: number, functionName: string, paramsJson: string): string;\n}\n\ndeclare global {\n  var brookesia: BrookesiaHost | undefined;\n}\n\nexport function getBrookesiaHost(): BrookesiaHost {\n  if (typeof globalThis.brookesia === 'undefined') {\n    throw new Error(\n      'global brookesia is not available — run inside ESP-Brookesia JS runtime (not Node without a mock)',\n    );\n  }\n  return globalThis.brookesia;\n}\n\nexport function parseServiceResult<T>(json: string): T {\n  const result = JSON.parse(json) as BrookesiaServiceResult<T>;\n  if (!result.success) {\n    throw new Error(result.error ?? 'Brookesia service call failed');\n  }\n  return result.data as T;\n}\n","/* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD */\n/* SPDX-License-Identifier: Apache-2.0 */\n\nimport { type BrookesiaHost, getBrookesiaHost, parseServiceResult } from './brookesia-host.ts';\n\nexport type ServiceHandle = number;\n\nexport type ServiceClientOptions = {\n  host?: BrookesiaHost;\n};\n\nexport function resolveHost(options?: ServiceClientOptions): BrookesiaHost {\n  return options?.host ?? getBrookesiaHost();\n}\n\nexport function isServiceAvailable(serviceName: string, options?: ServiceClientOptions): boolean {\n  return resolveHost(options).service_available(serviceName);\n}\n\nexport function openService(serviceName: string, options?: ServiceClientOptions): ServiceHandle {\n  const host = resolveHost(options);\n  if (!host.service_available(serviceName)) {\n    throw new Error(`Service is not available (expected name \"${serviceName}\")`);\n  }\n  return host.start_service(serviceName);\n}\n\nexport function closeService(handle: ServiceHandle, options?: ServiceClientOptions): void {\n  resolveHost(options).stop_service(handle);\n}\n\nexport function callServiceFunction<T>(\n  host: BrookesiaHost,\n  handle: ServiceHandle,\n  functionName: string,\n  params: Record<string, unknown>,\n): T {\n  return parseServiceResult<T>(host.call_function(handle, functionName, JSON.stringify(params)));\n}\n"],"mappings":";AAsBA,SAAgB,mBAAkC;CAChD,IAAI,OAAO,WAAW,cAAc,aAClC,MAAM,IAAI,MACR,mGACF;CAEF,OAAO,WAAW;AACpB;AAEA,SAAgB,mBAAsB,MAAiB;CACrD,MAAM,SAAS,KAAK,MAAM,IAAI;CAC9B,IAAI,CAAC,OAAO,SACV,MAAM,IAAI,MAAM,OAAO,SAAS,+BAA+B;CAEjE,OAAO,OAAO;AAChB;;;AC1BA,SAAgB,YAAY,SAA+C;CACzE,OAAO,SAAS,QAAQ,iBAAiB;AAC3C;AAEA,SAAgB,mBAAmB,aAAqB,SAAyC;CAC/F,OAAO,YAAY,OAAO,CAAC,CAAC,kBAAkB,WAAW;AAC3D;AAEA,SAAgB,YAAY,aAAqB,SAA+C;CAC9F,MAAM,OAAO,YAAY,OAAO;CAChC,IAAI,CAAC,KAAK,kBAAkB,WAAW,GACrC,MAAM,IAAI,MAAM,4CAA4C,YAAY,GAAG;CAE7E,OAAO,KAAK,cAAc,WAAW;AACvC;AAEA,SAAgB,aAAa,QAAuB,SAAsC;CACxF,YAAY,OAAO,CAAC,CAAC,aAAa,MAAM;AAC1C;AAEA,SAAgB,oBACd,MACA,QACA,cACA,QACG;CACH,OAAO,mBAAsB,KAAK,cAAc,QAAQ,cAAc,KAAK,UAAU,MAAM,CAAC,CAAC;AAC/F"}