{"version":3,"sources":["../src/index.ts","../src/VictoriaLogsTransport.ts"],"sourcesContent":["export type { VictoriaLogsTransportConfig } from \"./VictoriaLogsTransport.js\";\nexport { VictoriaLogsTransport } from \"./VictoriaLogsTransport.js\";\n","import type { HttpTransportConfig } from \"@loglayer/transport-http\";\nimport { HttpTransport } from \"@loglayer/transport-http\";\n\n/**\n * Configuration options for the VictoriaLogs transport.\n * This is essentially a wrapper around HttpTransport with VictoriaLogs specific defaults.\n */\nexport interface VictoriaLogsTransportConfig extends Omit<HttpTransportConfig, \"url\" | \"payloadTemplate\"> {\n  /**\n   * The VictoriaLogs host URL (e.g., http://localhost:9428)\n   * The /insert/jsonline path will be automatically appended\n   * @default \"http://localhost:9428\"\n   */\n  url?: string;\n  /**\n   * Function to transform log data into the payload format (optional, defaults to VictoriaLogs format)\n   */\n  payloadTemplate?: (data: { logLevel: string; message: string; data?: Record<string, any> }) => string;\n  /**\n   * Function to generate stream-level fields for VictoriaLogs\n   * The keys of the returned object will be used as the values for the _stream_fields parameter\n   * @default () => ({})\n   */\n  streamFields?: () => Record<string, string>;\n  /**\n   * Function to generate the timestamp for the _time field\n   * @default () => new Date().toISOString()\n   */\n  timestamp?: () => string;\n  /**\n   * Custom HTTP query parameters for VictoriaLogs ingestion\n   * @see https://docs.victoriametrics.com/victorialogs/data-ingestion/#http-parameters\n   */\n  httpParameters?: Record<string, string>;\n}\n\n/**\n * VictoriaLogs transport for LogLayer.\n *\n * This transport is a thin wrapper around the HttpTransport that provides\n * VictoriaLogs specific defaults and configuration. It uses the VictoriaLogs\n * JSON stream API to send logs.\n *\n * @see https://docs.victoriametrics.com/victorialogs/data-ingestion/#json-stream-api\n */\nexport class VictoriaLogsTransport extends HttpTransport {\n  constructor(config: VictoriaLogsTransportConfig = {}) {\n    const {\n      url = \"http://localhost:9428\",\n      method = \"POST\",\n      headers = {\n        \"Content-Type\": \"application/stream+json\",\n      },\n      contentType = \"application/stream+json\",\n      batchContentType = \"application/stream+json\",\n      streamFields = () => ({}),\n      timestamp = () => new Date().toISOString(),\n      httpParameters = {},\n      payloadTemplate = ({ logLevel, message, data }) => {\n        const streamFieldsData = streamFields();\n        const timeValue = timestamp();\n\n        // Determine field names based on HTTP parameters\n        const msgField = httpParameters._msg_field || \"_msg\";\n        const timeField = httpParameters._time_field || \"_time\";\n\n        return JSON.stringify({\n          [msgField]: message || \"(no message)\",\n          [timeField]: timeValue,\n          level: logLevel,\n          ...streamFieldsData,\n          ...data,\n        });\n      },\n      compression = false,\n      maxRetries = 3,\n      retryDelay = 1000,\n      respectRateLimit = true,\n      enableBatchSend = true,\n      batchSize = 100,\n      batchSendTimeout = 5000,\n      batchSendDelimiter = \"\\n\",\n      maxLogSize = 1048576, // 1MB\n      maxPayloadSize = 5242880, // 5MB\n      enableNextJsEdgeCompat = false,\n      onError,\n      onDebug,\n      ...restConfig\n    } = config;\n\n    // Get stream fields and use their keys as _stream_fields parameter\n    const streamFieldsData = streamFields();\n    const streamFieldsKeys = Object.keys(streamFieldsData);\n\n    // Merge HTTP parameters, adding _stream_fields if streamFields has keys\n    const finalHttpParameters = {\n      ...httpParameters,\n      ...(streamFieldsKeys.length > 0 && { _stream_fields: streamFieldsKeys.join(\",\") }),\n    };\n\n    // Construct the full URL with the VictoriaLogs JSON stream API endpoint and query parameters\n    const baseUrl = `${url.replace(/\\/$/, \"\")}/insert/jsonline`;\n    const queryParams = new URLSearchParams(finalHttpParameters);\n    const fullUrl = queryParams.toString() ? `${baseUrl}?${queryParams.toString()}` : baseUrl;\n\n    super({\n      url: fullUrl,\n      method,\n      headers,\n      contentType,\n      batchContentType,\n      payloadTemplate,\n      compression,\n      maxRetries,\n      retryDelay,\n      respectRateLimit,\n      enableBatchSend,\n      batchSize,\n      batchSendTimeout,\n      batchSendDelimiter,\n      maxLogSize,\n      maxPayloadSize,\n      enableNextJsEdgeCompat,\n      onError,\n      onDebug,\n      ...restConfig,\n    });\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,4BAA8B;AA4CvB,IAAM,wBAAN,cAAoC,oCAAc;AAAA,EACvD,YAAY,SAAsC,CAAC,GAAG;AACpD,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,QACR,gBAAgB;AAAA,MAClB;AAAA,MACA,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,eAAe,OAAO,CAAC;AAAA,MACvB,YAAY,OAAM,oBAAI,KAAK,GAAE,YAAY;AAAA,MACzC,iBAAiB,CAAC;AAAA,MAClB,kBAAkB,CAAC,EAAE,UAAU,SAAS,KAAK,MAAM;AACjD,cAAMA,oBAAmB,aAAa;AACtC,cAAM,YAAY,UAAU;AAG5B,cAAM,WAAW,eAAe,cAAc;AAC9C,cAAM,YAAY,eAAe,eAAe;AAEhD,eAAO,KAAK,UAAU;AAAA,UACpB,CAAC,QAAQ,GAAG,WAAW;AAAA,UACvB,CAAC,SAAS,GAAG;AAAA,UACb,OAAO;AAAA,UACP,GAAGA;AAAA,UACH,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,MACA,cAAc;AAAA,MACd,aAAa;AAAA,MACb,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,YAAY;AAAA,MACZ,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,MACrB,aAAa;AAAA;AAAA,MACb,iBAAiB;AAAA;AAAA,MACjB,yBAAyB;AAAA,MACzB;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AAGJ,UAAM,mBAAmB,aAAa;AACtC,UAAM,mBAAmB,OAAO,KAAK,gBAAgB;AAGrD,UAAM,sBAAsB;AAAA,MAC1B,GAAG;AAAA,MACH,GAAI,iBAAiB,SAAS,KAAK,EAAE,gBAAgB,iBAAiB,KAAK,GAAG,EAAE;AAAA,IAClF;AAGA,UAAM,UAAU,GAAG,IAAI,QAAQ,OAAO,EAAE,CAAC;AACzC,UAAM,cAAc,IAAI,gBAAgB,mBAAmB;AAC3D,UAAM,UAAU,YAAY,SAAS,IAAI,GAAG,OAAO,IAAI,YAAY,SAAS,CAAC,KAAK;AAElF,UAAM;AAAA,MACJ,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;","names":["streamFieldsData"]}