{"version":3,"file":"module.mjs","names":[],"sources":["../../package.json","../../src/nuxt/module.ts"],"sourcesContent":["","import {\n  addImports,\n  addPlugin,\n  addServerHandler,\n  addServerImports,\n  addServerPlugin,\n  createResolver,\n  defineNuxtModule,\n} from '@nuxt/kit'\nimport type { NitroConfig } from 'nitropack'\nimport type { EnvironmentContext, RouteConfig, SamplingConfig, TransportConfig } from '../types'\nimport { name, version } from '../../package.json'\n\ninterface ModuleAxiomBaseConfig {\n  /** Axiom dataset name */\n  dataset: string\n  /** Axiom API token */\n  token: string\n  /** Organization ID (required for Personal Access Tokens) */\n  orgId?: string\n  /** Request timeout in milliseconds. Default: 5000 */\n  timeout?: number\n}\n\ninterface ModuleAxiomEdgeConfig {\n  /**\n   * Edge URL for Axiom ingest/query endpoints.\n   * If no path is provided, uses /v1/ingest/{dataset}.\n   * If a custom path is provided, it is used as-is (trailing slash trimmed).\n   */\n  edgeUrl: string\n  /** Mutually exclusive with edgeUrl. */\n  baseUrl?: never\n}\n\ninterface ModuleAxiomEndpointConfig {\n  /** Base URL for Axiom API. Uses /v1/datasets/{dataset}/ingest. */\n  baseUrl?: string\n  /** Mutually exclusive with baseUrl. */\n  edgeUrl?: never\n}\n\ntype ModuleAxiomConfig = ModuleAxiomBaseConfig & (ModuleAxiomEdgeConfig | ModuleAxiomEndpointConfig)\n\nexport interface ModuleOptions {\n  /**\n   * Enable or disable all logging globally.\n   * When false, all emits, tagged logs, and request logger operations become no-ops.\n   * @default true\n   */\n  enabled?: boolean\n\n  /**\n   * Environment context overrides.\n   */\n  env?: Partial<EnvironmentContext>\n\n  /**\n   * Enable or disable browser console output.\n   * When false, client-side logs are suppressed in the browser DevTools console\n   * but still sent to the server via transport (if enabled).\n   * @default true\n   */\n  console?: boolean\n\n  /**\n   * Enable pretty printing.\n   * @default true in development, false in production\n   */\n  pretty?: boolean\n\n  /**\n   * Route patterns to include in logging.\n   * Supports glob patterns like '/api/**'.\n   * If not set, all routes are logged.\n   * @example ['/api/**', '/auth/**']\n   */\n  include?: string[]\n\n  /**\n   * Route patterns to exclude from logging.\n   * Supports glob patterns like '/api/_nuxt_icon/**'.\n   * Exclusions take precedence over inclusions.\n   * @example ['/api/_nuxt_icon/**', '/health']\n   */\n  exclude?: string[]\n\n  /**\n   * Route-specific service configuration.\n   * Allows setting different service names for different routes.\n   * Patterns are matched using glob syntax.\n   *\n   * @example\n   * ```ts\n   * routes: {\n   *   '/api/foo/**': { service: 'service1' },\n   *   '/api/bar/**': { service: 'service2' }\n   * }\n   * ```\n   */\n  routes?: Record<string, RouteConfig>\n\n  /**\n   * Sampling configuration for filtering logs.\n   * Allows configuring what percentage of logs to keep per level.\n   *\n   * @example\n   * ```ts\n   * sampling: {\n   *   rates: {\n   *     info: 10,    // Keep 10% of info logs\n   *     warn: 50,    // Keep 50% of warning logs\n   *     debug: 5,    // Keep 5% of debug logs\n   *     error: 100,  // Always keep errors (default)\n   *   }\n   * }\n   * ```\n   */\n  sampling?: SamplingConfig\n\n  /**\n   * Transport configuration for sending client logs to the server.\n   *\n   * @example\n   * ```ts\n   * transport: {\n   *   enabled: true,  // Send logs to server API\n   *   endpoint: '/api/_mxllog/ingest'  // Custom endpoint\n   * }\n   * ```\n   */\n  transport?: TransportConfig\n\n  /**\n   * Axiom adapter configuration.\n   * When configured, use `createAxiomDrain()` from `@safaricom-mxl/log/axiom` to send logs.\n   *\n   * @example\n   * ```ts\n   * axiom: {\n   *   dataset: 'my-app-logs',\n   *   token: process.env.AXIOM_TOKEN,\n   * }\n   * ```\n   */\n  axiom?: ModuleAxiomConfig\n\n  /**\n   * OTLP adapter configuration.\n   * When configured, use `createOTLPDrain()` from `@safaricom-mxl/log/otlp` to send logs.\n   *\n   * @example\n   * ```ts\n   * otlp: {\n   *   endpoint: 'http://localhost:4318',\n   *   headers: {\n   *     'Authorization': `Basic ${process.env.GRAFANA_TOKEN}`,\n   *   },\n   * }\n   * ```\n   */\n  otlp?: {\n    /** OTLP HTTP endpoint (e.g., http://localhost:4318) */\n    endpoint: string\n    /** Override service name (defaults to event.service) */\n    serviceName?: string\n    /** Additional resource attributes */\n    resourceAttributes?: Record<string, string | number | boolean>\n    /** Custom headers (e.g., for authentication) */\n    headers?: Record<string, string>\n    /** Request timeout in milliseconds. Default: 5000 */\n    timeout?: number\n  }\n\n  /**\n   * PostHog adapter configuration.\n   * When configured, use `createPostHogDrain()` from `@safaricom-mxl/log/posthog` to send logs\n   * via PostHog Logs (OTLP).\n   *\n   * @example\n   * ```ts\n   * posthog: {\n   *   apiKey: process.env.POSTHOG_API_KEY,\n   * }\n   * ```\n   */\n  posthog?: {\n    /** PostHog project API key */\n    apiKey: string\n    /** PostHog host URL. Default: https://us.i.posthog.com */\n    host?: string\n    /** Request timeout in milliseconds. Default: 5000 */\n    timeout?: number\n  }\n\n  /**\n   * Sentry adapter configuration.\n   * When configured, use `createSentryDrain()` from `@safaricom-mxl/log/sentry` to send logs.\n   *\n   * @example\n   * ```ts\n   * sentry: {\n   *   dsn: process.env.SENTRY_DSN,\n   * }\n   * ```\n   */\n  sentry?: {\n    /** Sentry DSN */\n    dsn: string\n    /** Environment override (defaults to event.environment) */\n    environment?: string\n    /** Release version override (defaults to event.version) */\n    release?: string\n    /** Additional tags to attach as attributes */\n    tags?: Record<string, string>\n    /** Request timeout in milliseconds. Default: 5000 */\n    timeout?: number\n  }\n\n  /**\n   * How long to retain events before cleanup (used by @safaricom-mxl/nuxthub).\n   * Supports \"30d\" (days), \"24h\" (hours), \"60m\" (minutes).\n   * @default '30d'\n   */\n  retention?: string\n}\n\nexport default defineNuxtModule<ModuleOptions>({\n  meta: {\n    name,\n    version,\n    configKey: name,\n    docs: 'https://mxllog.dev',\n  },\n  defaults: {},\n  setup(options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    const transportEnabled = options.transport?.enabled ?? false\n    const transportEndpoint = options.transport?.endpoint ?? '/api/_mxllog/ingest'\n\n    // Register custom error handler for proper MxllogError serialization\n    // Only set if not already configured to avoid overwriting user's custom handler\n    // @ts-expect-error nitro:config hook exists but is not in NuxtHooks type\n    nuxt.hook('nitro:config', (nitroConfig: NitroConfig) => {\n      nitroConfig.errorHandler = nitroConfig.errorHandler || resolver.resolve('../nitro/errorHandler')\n    })\n\n    nuxt.options.runtimeConfig.mxllog = options\n    nuxt.options.runtimeConfig.public.mxllog = {\n      enabled: options.enabled ?? true,\n      console: options.console,\n      pretty: options.pretty,\n      transport: {\n        enabled: transportEnabled,\n        endpoint: transportEndpoint,\n      },\n    }\n\n    if (transportEnabled) {\n      addServerHandler({\n        route: transportEndpoint,\n        method: 'post',\n        handler: resolver.resolve('../runtime/server/routes/_mxllog/ingest.post'),\n      })\n    }\n\n    addServerPlugin(resolver.resolve('../nitro/plugin'))\n\n    addPlugin({\n      src: resolver.resolve('../runtime/client/plugin'),\n      mode: 'client',\n    })\n\n    addImports([\n      {\n        name: 'log',\n        from: resolver.resolve('../runtime/client/log'),\n      },\n      {\n        name: 'setIdentity',\n        from: resolver.resolve('../runtime/client/log'),\n      },\n      {\n        name: 'clearIdentity',\n        from: resolver.resolve('../runtime/client/log'),\n      },\n      {\n        name: 'createMxllogError',\n        from: resolver.resolve('../error'),\n      },\n      {\n        name: 'parseError',\n        from: resolver.resolve('../runtime/utils/parseError'),\n      },\n    ])\n\n    addServerImports([\n      {\n        name: 'useLogger',\n        from: resolver.resolve('../runtime/server/useLogger'),\n      },\n      {\n        name: 'log',\n        from: resolver.resolve('../logger'),\n      },\n      {\n        name: 'createMxllogError',\n        from: resolver.resolve('../error'),\n      },\n    ])\n  },\n})\n"],"mappings":";;;;;ACmOA,IAAA,iBAAe,iBAAgC;CAC7C,MAAM;EACJ;EACA;EACA,WAAW;EACX,MAAM;EACP;CACD,UAAU,EAAE;CACZ,MAAM,SAAS,MAAM;EACnB,MAAM,WAAW,eAAe,OAAO,KAAK,IAAI;EAEhD,MAAM,mBAAmB,QAAQ,WAAW,WAAW;EACvD,MAAM,oBAAoB,QAAQ,WAAW,YAAY;AAKzD,OAAK,KAAK,iBAAiB,gBAA6B;AACtD,eAAY,eAAe,YAAY,gBAAgB,SAAS,QAAQ,wBAAwB;IAChG;AAEF,OAAK,QAAQ,cAAc,SAAS;AACpC,OAAK,QAAQ,cAAc,OAAO,SAAS;GACzC,SAAS,QAAQ,WAAW;GAC5B,SAAS,QAAQ;GACjB,QAAQ,QAAQ;GAChB,WAAW;IACT,SAAS;IACT,UAAU;IACX;GACF;AAED,MAAI,iBACF,kBAAiB;GACf,OAAO;GACP,QAAQ;GACR,SAAS,SAAS,QAAQ,+CAA+C;GAC1E,CAAC;AAGJ,kBAAgB,SAAS,QAAQ,kBAAkB,CAAC;AAEpD,YAAU;GACR,KAAK,SAAS,QAAQ,2BAA2B;GACjD,MAAM;GACP,CAAC;AAEF,aAAW;GACT;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,wBAAwB;IAChD;GACD;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,wBAAwB;IAChD;GACD;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,wBAAwB;IAChD;GACD;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,WAAW;IACnC;GACD;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,8BAA8B;IACtD;GACF,CAAC;AAEF,mBAAiB;GACf;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,8BAA8B;IACtD;GACD;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,YAAY;IACpC;GACD;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,WAAW;IACnC;GACF,CAAC;;CAEL,CAAC"}