{"version":3,"file":"h3.mjs","names":[],"sources":["../../src/adapters/h3.ts"],"sourcesContent":["import { init, getConfig, type InitOptions } from \"../config/client\";\nimport { services } from \"../services/index\";\nimport { KAEnv } from \"../config/api\";\n\nexport { KAEnv };\n\n/**\n * Creates a Nitro/h3 server plugin that initializes the KiriminAja SDK.\n *\n * Accepts either a plain options object or a factory function — use the\n * factory form when you need to read Nuxt runtime config lazily (i.e. inside\n * the plugin callback where `useRuntimeConfig()` is available).\n *\n * @example Plain options (shared API key)\n * ```ts\n * // server/plugins/kiriminaja.ts\n * import { defineKiriminAjaPlugin, KAEnv } from 'kiriminaja/adapters/h3'\n *\n * export default defineKiriminAjaPlugin({\n *   apiKey: process.env.KIRIMINAJA_API_KEY,\n *   env: KAEnv.PRODUCTION,\n * })\n * ```\n *\n * @example With Nuxt runtime config\n * ```ts\n * // server/plugins/kiriminaja.ts\n * import { defineKiriminAjaPlugin, KAEnv } from 'kiriminaja/adapters/h3'\n * import { useRuntimeConfig } from '#imports'\n *\n * export default defineKiriminAjaPlugin(() => ({\n *   apiKey: useRuntimeConfig().kiriminajaApiKey,\n *   env: KAEnv.PRODUCTION,\n * }))\n * ```\n */\nexport const defineKiriminAjaPlugin = (\n    options: InitOptions | (() => InitOptions),\n) => {\n    return () => {\n        const resolved = typeof options === \"function\" ? options() : options;\n        init(resolved);\n    };\n};\n\nexport type UseKiriminAjaOptions = {\n    apiKey?: string;\n    env?: KAEnv;\n    baseUrl?: string;\n};\n\n/**\n * Returns the KiriminAja service methods for use inside Nitro/h3 event\n * handlers or Nuxt server routes.\n *\n * - **No arguments** — uses the config set via `defineKiriminAjaPlugin`.\n * - **`{ apiKey }`** — overrides the Authorization header for every service\n *   call made on the returned object.\n * - **`{ env }`** — switches between sandbox and production environments.\n * - **`{ baseUrl }`** — points all requests to a custom URL (e.g. an internal\n *   proxy or staging server).\n *\n * The SDK **must** have been initialized (via `defineKiriminAjaPlugin`) before\n * any service method is called.\n *\n * @example Shared API key (from plugin)\n * ```ts\n * // server/api/rates.post.ts\n * import { useKiriminAja } from 'kiriminaja/adapters/h3'\n *\n * export default defineEventHandler(async (event) => {\n *   const { coverageArea } = useKiriminAja()\n *   const body = await readBody(event)\n *   return coverageArea.pricingExpress(body)\n * })\n * ```\n *\n * @example Per-user API key\n * ```ts\n * // server/api/rates.post.ts\n * import { useKiriminAja } from 'kiriminaja/adapters/h3'\n *\n * export default defineEventHandler(async (event) => {\n *   const user = await requireAuthUser(event)\n *   const body = await readBody(event)\n *   const { coverageArea } = useKiriminAja({ apiKey: user.kiriminajaApiKey })\n *   return coverageArea.pricingExpress(body)\n * })\n * ```\n *\n * @example Custom base URL (internal proxy)\n * ```ts\n * import { useKiriminAja } from 'kiriminaja/adapters/h3'\n *\n * export default defineEventHandler(async (event) => {\n *   const { coverageArea } = useKiriminAja({ baseUrl: 'https://internal-proxy.local' })\n *   return coverageArea.pricingExpress(await readBody(event))\n * })\n * ```\n */\nexport const useKiriminAja = (options?: UseKiriminAjaOptions) => {\n    if (options?.apiKey || options?.env || options?.baseUrl) {\n        let current: Record<string, unknown> = {};\n        try {\n            current = { ...getConfig() };\n        } catch {\n            // No prior init — that's fine, we'll bootstrap from options alone.\n        }\n        const merged = { ...current, ...options };\n        // When env changes but no explicit baseUrl was given, clear baseUrl\n        // so init() derives it from the new env.\n        if (options.env && !options.baseUrl) {\n            delete merged.baseUrl;\n        }\n        init(merged as Parameters<typeof init>[0]);\n    } else {\n        // Ensure the SDK was initialized — will throw if not.\n        getConfig();\n    }\n    return services;\n};\n"],"mappings":";;AAoCA,IAAa,KACT,YAEa;AAET,GADiB,OAAO,KAAY,aAAa,GAAS,GAAG,EAC/C;GA2DT,KAAiB,MAAmC;AAC7D,KAAI,GAAS,UAAU,GAAS,OAAO,GAAS,SAAS;EACrD,IAAI,IAAmC,EAAE;AACzC,MAAI;AACA,OAAU,EAAE,GAAG,GAAW,EAAE;UACxB;EAGR,IAAM,IAAS;GAAE,GAAG;GAAS,GAAG;GAAS;AAMzC,EAHI,EAAQ,OAAO,CAAC,EAAQ,WACxB,OAAO,EAAO,SAElB,EAAK,EAAqC;OAG1C,IAAW;AAEf,QAAO"}