@blyp/core 0.1.21 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -522
- package/STABILITY.md +56 -0
- package/dist/ai/anthropic/index.d.ts +3 -0
- package/dist/ai/anthropic/normalize.d.ts +9 -0
- package/dist/ai/anthropic/stream.d.ts +3 -0
- package/dist/ai/anthropic/wrap.d.ts +13 -0
- package/dist/ai/anthropic.js +701 -0
- package/dist/ai/anthropic.mjs +701 -0
- package/dist/ai/better-agent/index.d.ts +3 -0
- package/dist/ai/better-agent/normalize.d.ts +18 -0
- package/dist/ai/better-agent/plugin.d.ts +3 -0
- package/dist/ai/better-agent/tracker.d.ts +35 -0
- package/dist/ai/better-agent.js +701 -0
- package/dist/ai/better-agent.mjs +701 -0
- package/dist/ai/fetch.js +701 -0
- package/dist/ai/fetch.mjs +701 -0
- package/dist/ai/openai/index.d.ts +3 -0
- package/dist/ai/openai/normalize.d.ts +10 -0
- package/dist/ai/openai/stream.d.ts +3 -0
- package/dist/ai/openai/wrap.d.ts +24 -0
- package/dist/ai/openai.js +701 -0
- package/dist/ai/openai.mjs +701 -0
- package/dist/ai/shared/fetch.d.ts +5 -0
- package/dist/ai/shared/index.d.ts +2 -0
- package/dist/ai/shared/normalize.d.ts +17 -0
- package/dist/ai/shared/redaction.d.ts +6 -0
- package/dist/ai/shared/stream.d.ts +7 -0
- package/dist/ai/shared/trace.d.ts +119 -0
- package/dist/ai/shared/types.d.ts +171 -0
- package/dist/ai/shared.js +701 -0
- package/dist/ai/shared.mjs +701 -0
- package/dist/ai/vercel/index.d.ts +3 -0
- package/dist/ai/vercel/middleware.d.ts +3 -0
- package/dist/ai/vercel/model.d.ts +3 -0
- package/dist/ai/vercel.js +701 -0
- package/dist/ai/vercel.mjs +701 -0
- package/dist/astro.js +618 -4519
- package/dist/astro.mjs +618 -4491
- package/dist/client.js +1 -1139
- package/dist/client.mjs +1 -1132
- package/dist/connectors/betterstack.js +9 -1532
- package/dist/connectors/betterstack.mjs +9 -1507
- package/dist/connectors/databuddy.js +9 -1456
- package/dist/connectors/databuddy.mjs +9 -1451
- package/dist/connectors/delivery/backoff.d.ts +2 -0
- package/dist/connectors/delivery/manager.d.ts +44 -0
- package/dist/connectors/delivery/queue-path.d.ts +1 -0
- package/dist/connectors/delivery/sqlite-adapter-bun.d.ts +1 -0
- package/dist/connectors/delivery/sqlite-adapter-node.d.ts +1 -0
- package/dist/connectors/delivery/sqlite-client.d.ts +37 -0
- package/dist/connectors/delivery/sqlite-worker.d.ts +1 -0
- package/dist/connectors/delivery/studio-queue.d.ts +12 -0
- package/dist/connectors/delivery/types.d.ts +98 -0
- package/dist/connectors/otlp/index.d.ts +1 -0
- package/dist/connectors/otlp.js +9 -1371
- package/dist/connectors/otlp.mjs +9 -1368
- package/dist/connectors/posthog/properties.d.ts +4 -0
- package/dist/connectors/posthog/sender.d.ts +0 -1
- package/dist/connectors/posthog.js +10 -1527
- package/dist/connectors/posthog.mjs +10 -1522
- package/dist/connectors/sentry.js +9 -1380
- package/dist/connectors/sentry.mjs +9 -1357
- package/dist/core/config.d.ts +7 -2
- package/dist/core/log-record.d.ts +5 -4
- package/dist/core/logger.d.ts +2 -0
- package/dist/core/optional-module.d.ts +1 -0
- package/dist/core/pino-pretty-loader.d.ts +4 -0
- package/dist/database.js +1 -24
- package/dist/database.mjs +1 -21
- package/dist/elysia.js +613 -4517
- package/dist/elysia.mjs +615 -4491
- package/dist/expo.js +1 -726
- package/dist/expo.mjs +1 -724
- package/dist/express.js +613 -4507
- package/dist/express.mjs +615 -4480
- package/dist/fastify.js +615 -4526
- package/dist/fastify.mjs +617 -4499
- package/dist/frameworks/elysia/index.d.ts +1 -1
- package/dist/frameworks/elysia/logger.d.ts +2 -35
- package/dist/frameworks/nestjs/helpers.d.ts +2 -0
- package/dist/frameworks/shared/http.d.ts +3 -2
- package/dist/frameworks/shared/index.d.ts +2 -1
- package/dist/frameworks/shared/logger.d.ts +2 -0
- package/dist/frameworks/shared/request-context.d.ts +2 -0
- package/dist/frameworks/shared/trace.d.ts +6 -0
- package/dist/hono.js +616 -4496
- package/dist/hono.mjs +618 -4470
- package/dist/index.d.ts +49 -19
- package/dist/index.js +615 -7557
- package/dist/index.mjs +618 -7465
- package/dist/nestjs.js +626 -4999
- package/dist/nestjs.mjs +621 -4966
- package/dist/nextjs.js +618 -4525
- package/dist/nextjs.mjs +620 -4499
- package/dist/nitro.js +617 -4642
- package/dist/nitro.mjs +619 -4616
- package/dist/nuxt.js +617 -4649
- package/dist/nuxt.mjs +619 -4623
- package/dist/react-router.js +616 -4559
- package/dist/react-router.mjs +618 -4533
- package/dist/shared/redaction.d.ts +17 -0
- package/dist/standalone.js +606 -3628
- package/dist/standalone.mjs +610 -3603
- package/dist/sveltekit.js +617 -4523
- package/dist/sveltekit.mjs +619 -4497
- package/dist/tanstack-start.js +616 -4522
- package/dist/tanstack-start.mjs +618 -4496
- package/dist/types/core/config.d.ts +57 -0
- package/dist/types/core/logger.d.ts +3 -0
- package/dist/types/core/structured-log.d.ts +2 -0
- package/dist/types/database.d.ts +1 -0
- package/dist/types/frameworks/astro.d.ts +1 -0
- package/dist/types/frameworks/client.d.ts +2 -0
- package/dist/types/frameworks/elysia.d.ts +2 -0
- package/dist/types/frameworks/express.d.ts +1 -0
- package/dist/types/frameworks/fastify.d.ts +1 -0
- package/dist/types/frameworks/hono.d.ts +1 -0
- package/dist/types/frameworks/http.d.ts +1 -0
- package/dist/types/frameworks/nestjs.d.ts +2 -0
- package/dist/types/frameworks/nextjs.d.ts +1 -0
- package/dist/types/frameworks/nitro.d.ts +1 -0
- package/dist/types/frameworks/react-router.d.ts +2 -0
- package/dist/types/frameworks/request-context.d.ts +1 -0
- package/dist/types/frameworks/shared.d.ts +4 -1
- package/dist/types/frameworks/standalone.d.ts +3 -2
- package/dist/types/frameworks/sveltekit.d.ts +1 -0
- package/dist/types/frameworks/tanstack-start.d.ts +9 -3
- package/dist/types/frameworks/workers.d.ts +3 -0
- package/dist/types/shared/client-log.d.ts +1 -0
- package/dist/workers.js +2 -626
- package/dist/workers.mjs +2 -623
- package/package.json +259 -173
- package/dist/astro.js.map +0 -1
- package/dist/astro.mjs.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/client.mjs.map +0 -1
- package/dist/connectors/betterstack.js.map +0 -1
- package/dist/connectors/betterstack.mjs.map +0 -1
- package/dist/connectors/databuddy.js.map +0 -1
- package/dist/connectors/databuddy.mjs.map +0 -1
- package/dist/connectors/otlp.js.map +0 -1
- package/dist/connectors/otlp.mjs.map +0 -1
- package/dist/connectors/posthog.js.map +0 -1
- package/dist/connectors/posthog.mjs.map +0 -1
- package/dist/connectors/sentry.js.map +0 -1
- package/dist/connectors/sentry.mjs.map +0 -1
- package/dist/database.js.map +0 -1
- package/dist/database.mjs.map +0 -1
- package/dist/elysia.js.map +0 -1
- package/dist/elysia.mjs.map +0 -1
- package/dist/expo.js.map +0 -1
- package/dist/expo.mjs.map +0 -1
- package/dist/express.js.map +0 -1
- package/dist/express.mjs.map +0 -1
- package/dist/fastify.js.map +0 -1
- package/dist/fastify.mjs.map +0 -1
- package/dist/hono.js.map +0 -1
- package/dist/hono.mjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/nestjs.js.map +0 -1
- package/dist/nestjs.mjs.map +0 -1
- package/dist/nextjs.js.map +0 -1
- package/dist/nextjs.mjs.map +0 -1
- package/dist/nitro.js.map +0 -1
- package/dist/nitro.mjs.map +0 -1
- package/dist/nuxt.js.map +0 -1
- package/dist/nuxt.mjs.map +0 -1
- package/dist/react-router.js.map +0 -1
- package/dist/react-router.mjs.map +0 -1
- package/dist/standalone.js.map +0 -1
- package/dist/standalone.mjs.map +0 -1
- package/dist/sveltekit.js.map +0 -1
- package/dist/sveltekit.mjs.map +0 -1
- package/dist/tanstack-start.js.map +0 -1
- package/dist/tanstack-start.mjs.map +0 -1
- package/dist/workers.js.map +0 -1
- package/dist/workers.mjs.map +0 -1
- package/exports/client.js +0 -3
- package/exports/client.mjs +0 -3
- package/exports/connectors/betterstack.js +0 -1
- package/exports/connectors/betterstack.mjs +0 -1
- package/exports/connectors/databuddy.js +0 -1
- package/exports/connectors/databuddy.mjs +0 -1
- package/exports/connectors/otlp.js +0 -1
- package/exports/connectors/otlp.mjs +0 -1
- package/exports/connectors/posthog.js +0 -1
- package/exports/connectors/posthog.mjs +0 -1
- package/exports/connectors/sentry.js +0 -1
- package/exports/connectors/sentry.mjs +0 -1
- package/exports/database.js +0 -1
- package/exports/database.mjs +0 -1
- package/exports/expo.js +0 -1
- package/exports/expo.mjs +0 -1
- package/exports/frameworks/astro.js +0 -1
- package/exports/frameworks/astro.mjs +0 -1
- package/exports/frameworks/elysia.js +0 -1
- package/exports/frameworks/elysia.mjs +0 -1
- package/exports/frameworks/express.js +0 -1
- package/exports/frameworks/express.mjs +0 -1
- package/exports/frameworks/fastify.js +0 -1
- package/exports/frameworks/fastify.mjs +0 -1
- package/exports/frameworks/hono.js +0 -1
- package/exports/frameworks/hono.mjs +0 -1
- package/exports/frameworks/nestjs.js +0 -1
- package/exports/frameworks/nestjs.mjs +0 -1
- package/exports/frameworks/nextjs.js +0 -1
- package/exports/frameworks/nextjs.mjs +0 -1
- package/exports/frameworks/nitro.js +0 -1
- package/exports/frameworks/nitro.mjs +0 -1
- package/exports/frameworks/nuxt.js +0 -1
- package/exports/frameworks/nuxt.mjs +0 -1
- package/exports/frameworks/react-router.js +0 -1
- package/exports/frameworks/react-router.mjs +0 -1
- package/exports/frameworks/standalone.js +0 -1
- package/exports/frameworks/standalone.mjs +0 -1
- package/exports/frameworks/sveltekit.js +0 -1
- package/exports/frameworks/sveltekit.mjs +0 -1
- package/exports/frameworks/tanstack-start.js +0 -1
- package/exports/frameworks/tanstack-start.mjs +0 -1
- package/exports/workers.js +0 -1
- package/exports/workers.mjs +0 -1
- package/types/client.d.ts +0 -34
- package/types/connectors/betterstack.d.ts +0 -1
- package/types/connectors/databuddy.d.ts +0 -1
- package/types/connectors/otlp.d.ts +0 -1
- package/types/connectors/posthog.d.ts +0 -1
- package/types/connectors/sentry.d.ts +0 -1
- package/types/database.d.ts +0 -1
- package/types/expo.d.ts +0 -17
- package/types/frameworks/astro.d.ts +0 -1
- package/types/frameworks/client.d.ts +0 -160
- package/types/frameworks/elysia.d.ts +0 -1
- package/types/frameworks/expo.d.ts +0 -50
- package/types/frameworks/express.d.ts +0 -1
- package/types/frameworks/fastify.d.ts +0 -1
- package/types/frameworks/hono.d.ts +0 -1
- package/types/frameworks/nestjs.d.ts +0 -1
- package/types/frameworks/nextjs.d.ts +0 -1
- package/types/frameworks/nitro.d.ts +0 -1
- package/types/frameworks/nuxt.d.ts +0 -1
- package/types/frameworks/react-router.d.ts +0 -1
- package/types/frameworks/standalone.d.ts +0 -1
- package/types/frameworks/sveltekit.d.ts +0 -1
- package/types/frameworks/tanstack-start.d.ts +0 -1
- package/types/frameworks/workers.d.ts +0 -115
- package/types/index.d.ts +0 -1
- package/types/workers.d.ts +0 -13
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/frameworks/shared/request-context.ts","../src/shared/log-value.ts","../src/shared/validation.ts","../src/shared/client-log.ts","../src/shared/once.ts","../src/core/config.ts","../src/core/log-record.ts","../src/core/file-logger.ts","../src/core/sinks/file-primary-sink.ts","../src/database/adapters/drizzle.ts","../src/database/adapters/prisma.ts","../src/database/helpers.ts","../src/core/sinks/database-primary-sink.ts","../src/core/primary-sink.ts","../src/connectors/shared.ts","../src/connectors/betterstack/sender.ts","../src/connectors/databuddy/sender.ts","../src/connectors/posthog/sender.ts","../src/connectors/sentry/sender.ts","../src/connectors/otlp/sender.ts","../src/core/runtime.ts","../src/core/structured-log.ts","../src/core/logger.ts","../src/frameworks/standalone/logger.ts","../src/shared/errors.ts","../src/core/errors.ts","../src/core/log-reader.ts","../src/core/helpers.ts","../src/core/colors.ts","../src/connectors/betterstack/index.ts","../src/connectors/databuddy/index.ts","../src/connectors/posthog/index.ts","../src/connectors/sentry/index.ts","../src/frameworks/shared/http.ts","../src/frameworks/shared/logger.ts","../src/frameworks/shared/request-logger.ts","../src/frameworks/elysia/logger.ts","../src/frameworks/hono/logger.ts","../src/frameworks/express/logger.ts","../src/frameworks/fastify/logger.ts","../src/frameworks/nextjs/logger.ts","../src/frameworks/react-router/logger.ts","../src/frameworks/tanstack-start/logger.ts","../src/frameworks/sveltekit/logger.ts","../src/frameworks/astro/logger.ts","../src/frameworks/shared/h3.ts","../src/frameworks/nitro/logger.ts","../src/frameworks/nuxt/logger.ts","../src/frameworks/nestjs/constants.ts","../src/frameworks/nestjs/logger.ts","../src/frameworks/nestjs/helpers.ts","../src/frameworks/nestjs/filter.ts","../src/frameworks/nestjs/interceptor.ts","../src/frameworks/nestjs/middleware.ts","../src/frameworks/nestjs/module.ts","../src/connectors/otlp/index.ts","../src/index.ts"],"names":["AsyncLocalStorage","logger","z","path","warnedKeys","resolve","existsSync","readFileSync","dirname","writeFileSync","appendFileSync","jiti","createJiti","gzipSync","fs","randomUUID","isPrismaAdapter","isDrizzleAdapter","warnOnce","Sentry","runtime","Logtail","testHooks","registerShutdownHooks","resolveConnectorConfig","createDefaultClient","Databuddy","normalizeExceptionInput","PREVIOUSLY_CAPTURED_ERROR_KEY","normalizeExceptionProperties","SeverityNumber","OTLPLogExporter","LoggerProvider","resourceFromAttributes","BatchLogRecordProcessor","PostHog","getSentryModule","normalizeScopeLevel","toExceptionCandidate","getClientOptions","resolveSeverity","createDefaultTransport","serializeMessage","normalizeError","pino","normalizeDetails","error","HTTP_CODES","httpCodeByStatus","getHttpCode","gunzipSync","normalizePath","prefix","colors","resolveSender","direct","Elysia","fp","createContext","BaseExceptionFilter","HttpException","Catch","tap","Injectable","Inject","BlypModule","APP_INTERCEPTOR","APP_FILTER","RequestMethod","Global","Module","createStructuredLog"],"mappings":"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","file":"index.js","sourcesContent":["import { AsyncLocalStorage } from 'async_hooks';\nimport type { BlypLogger } from '../../core/logger';\nimport type { BlypRequestContextStore } from '../../types/frameworks/request-context';\n\nexport type { BlypRequestContextStore } from '../../types/frameworks/request-context';\n\nconst requestContextStorage = new AsyncLocalStorage<BlypRequestContextStore>();\n\nfunction createStore(): BlypRequestContextStore {\n return {\n requestScopedLoggerActive: true,\n structuredCollectorActive: false,\n structuredLogEmitted: false,\n mixedLoggerWarningShown: false,\n };\n}\n\nexport function runWithRequestContext<T>(callback: () => T): T {\n return requestContextStorage.run(createStore(), callback);\n}\n\nexport function enterRequestContext(): BlypRequestContextStore {\n const store = createStore();\n requestContextStorage.enterWith(store);\n return store;\n}\n\nexport function getRequestContextStore(): BlypRequestContextStore | undefined {\n return requestContextStorage.getStore();\n}\n\nexport function setActiveRequestLogger(logger: BlypLogger): void {\n const store = getRequestContextStore();\n if (store) {\n store.activeLogger = logger;\n }\n}\n\nexport function getActiveRequestLogger(): BlypLogger | undefined {\n return getRequestContextStore()?.activeLogger;\n}\n\nexport function markStructuredCollectorActive(): void {\n const store = getRequestContextStore();\n if (store) {\n store.structuredCollectorActive = true;\n }\n}\n\nexport function markStructuredLogEmitted(): void {\n const store = getRequestContextStore();\n if (store) {\n store.structuredLogEmitted = true;\n }\n}\n\nexport function hasStructuredLogBeenEmitted(): boolean {\n return getRequestContextStore()?.structuredLogEmitted === true;\n}\n\nexport function shouldDropRootLogWrite(): boolean {\n const store = getRequestContextStore();\n if (!store || !store.requestScopedLoggerActive || !store.structuredCollectorActive) {\n return false;\n }\n\n if (!store.mixedLoggerWarningShown) {\n store.mixedLoggerWarningShown = true;\n console.warn(\n '[Blyp] Warning: Mixed logger usage detected for this request. ' +\n 'The root logger call was ignored because a request-scoped structured logger is active.'\n );\n }\n\n return true;\n}\n","export function normalizeError(error: Error): Record<string, unknown> {\n const normalized: Record<string, unknown> = {\n name: error.name,\n message: error.message,\n };\n\n if (error.stack) {\n normalized.stack = error.stack;\n }\n\n const errorWithCause = error as Error & { cause?: unknown };\n if (errorWithCause.cause !== undefined) {\n normalized.cause = normalizeLogValue(errorWithCause.cause);\n }\n\n return normalized;\n}\n\nexport function normalizeLogValue(\n value: unknown,\n seen: WeakSet<object> = new WeakSet()\n): unknown {\n if (value instanceof Error) {\n return normalizeError(value);\n }\n\n if (typeof value === 'function') {\n return `[Function: ${value.name || 'anonymous'}]`;\n }\n\n if (typeof value === 'symbol') {\n return value.toString();\n }\n\n if (value === undefined || value === null) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeLogValue(entry, seen));\n }\n\n if (typeof value === 'object') {\n if (seen.has(value)) {\n return '[Circular]';\n }\n\n seen.add(value);\n const normalized: Record<string, unknown> = {};\n\n for (const [key, entry] of Object.entries(value)) {\n normalized[key] = normalizeLogValue(entry, seen);\n }\n\n seen.delete(value);\n return normalized;\n }\n\n return value;\n}\n\nexport function serializeLogMessage(message: unknown): string {\n if (typeof message === 'string') {\n return message;\n }\n\n if (message instanceof Error) {\n return message.message || message.name;\n }\n\n const normalized = normalizeLogValue(message);\n if (typeof normalized === 'string') {\n return normalized;\n }\n\n try {\n const serialized = JSON.stringify(normalized, null, 2);\n return serialized ?? String(normalized);\n } catch {\n return String(normalized);\n }\n}\n","import { z } from 'zod';\n\nexport const absoluteHttpUrlSchema = z.string().url().refine((value) => {\n try {\n const url = new URL(value);\n return url.protocol === 'http:' || url.protocol === 'https:';\n } catch {\n return false;\n }\n}, {\n message: 'Expected an absolute http(s) URL',\n});\n\nexport const plainObjectSchema = z.custom<Record<string, unknown>>(\n (value): value is Record<string, unknown> => {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n },\n {\n message: 'Expected a plain object',\n }\n);\n\nexport const nonEmptyStringSchema = z.string().trim().min(1);\n\nexport function isAbsoluteHttpUrl(value: unknown): value is string {\n return absoluteHttpUrlSchema.safeParse(value).success;\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return plainObjectSchema.safeParse(value).success;\n}\n\nexport function hasNonEmptyString(value: unknown): value is string {\n return nonEmptyStringSchema.safeParse(value).success;\n}\n","/// <reference lib=\"dom\" />\n\nimport { z } from 'zod';\nimport {\n normalizeError,\n normalizeLogValue,\n serializeLogMessage,\n} from './log-value';\nimport {\n isPlainObject,\n nonEmptyStringSchema,\n plainObjectSchema,\n} from './validation';\nimport type {\n ClientConnectorRequest,\n ClientLogBrowserContext,\n ClientLogDeviceContext,\n ClientLogEvent,\n ClientLogLevel,\n ClientLogPageContext,\n ClientLogSessionContext,\n RemoteDeliveryConfig,\n RemoteDeliveryDropContext,\n RemoteDeliveryFailureContext,\n RemoteDeliveryFailureReason,\n RemoteDeliveryRetryContext,\n RemoteDeliveryRuntime,\n RemoteDeliverySuccessContext,\n RemoteDeliveryTransport,\n} from '../types/shared/client-log';\n\nexport type {\n ClientConnectorRequest,\n ClientLogBrowserContext,\n ClientLogDeviceContext,\n ClientLogEvent,\n ClientLogLevel,\n ClientLogPageContext,\n ClientLogSessionContext,\n RemoteDeliveryConfig,\n RemoteDeliveryDropContext,\n RemoteDeliveryFailureContext,\n RemoteDeliveryFailureReason,\n RemoteDeliveryRetryContext,\n RemoteDeliverySuccessContext,\n RemoteDeliveryTransport,\n} from '../types/shared/client-log';\n\nexport const DEFAULT_CLIENT_LOG_ENDPOINT = '/inngest';\nconst SESSION_STORAGE_KEY = 'blyp:session-id';\n\nconst CLIENT_LOG_LEVELS: ClientLogLevel[] = [\n 'debug',\n 'info',\n 'warning',\n 'error',\n 'critical',\n 'success',\n 'table',\n];\nconst clientConnectorRequestSchema = z.union([\n z.literal('betterstack'),\n z.literal('databuddy'),\n z.literal('posthog'),\n z.literal('sentry'),\n z.undefined(),\n z.object({\n type: z.literal('otlp'),\n name: nonEmptyStringSchema,\n }),\n]);\n\nfunction isClientLogLevel(value: unknown): value is ClientLogLevel {\n return typeof value === 'string' && CLIENT_LOG_LEVELS.includes(value as ClientLogLevel);\n}\n\nfunction isClientConnectorRequest(value: unknown): value is ClientConnectorRequest {\n return clientConnectorRequestSchema.safeParse(value).success;\n}\n\nfunction safeGet<T>(getter: () => T): T | undefined {\n try {\n return getter();\n } catch {\n return undefined;\n }\n}\n\nfunction randomSegment(): string {\n return Math.random().toString(36).slice(2, 10);\n}\n\nexport function createRandomId(): string {\n const maybeCrypto = safeGet(() => globalThis.crypto);\n const randomUUID = maybeCrypto && typeof maybeCrypto.randomUUID === 'function'\n ? maybeCrypto.randomUUID.bind(maybeCrypto)\n : undefined;\n\n if (randomUUID) {\n return randomUUID();\n }\n\n return `${Date.now().toString(36)}-${randomSegment()}`;\n}\n\nexport function normalizeClientLogLevel(level: ClientLogLevel | 'warn'): ClientLogLevel {\n return level === 'warn' ? 'warning' : level;\n}\n\nexport { normalizeError, normalizeLogValue, serializeLogMessage };\n\nexport function normalizeClientPayloadData(message: unknown, args: unknown[]): unknown {\n const normalizedArgs = args.map((entry) => normalizeLogValue(entry));\n const messageData = message instanceof Error ? normalizeError(message) : undefined;\n\n if (messageData !== undefined && normalizedArgs.length === 0) {\n return messageData;\n }\n\n const combined = messageData === undefined ? normalizedArgs : [messageData, ...normalizedArgs];\n\n if (combined.length === 0) {\n return undefined;\n }\n\n if (combined.length === 1) {\n return combined[0];\n }\n\n return combined;\n}\n\nexport function getBrowserPageContext(): ClientLogPageContext {\n const location = safeGet(() => globalThis.location);\n const document = safeGet(() => globalThis.document);\n\n return {\n url: location?.href,\n pathname: location?.pathname,\n search: location?.search,\n hash: location?.hash,\n title: document?.title,\n referrer: document?.referrer,\n };\n}\n\nexport function getBrowserContext(): ClientLogBrowserContext {\n const navigator = safeGet(() => globalThis.navigator);\n\n return {\n userAgent: navigator?.userAgent,\n language: navigator?.language,\n platform: navigator?.platform,\n };\n}\n\nexport function getClientSessionId(): string {\n const storage = safeGet(() => globalThis.sessionStorage);\n const existing = safeGet(() => storage?.getItem(SESSION_STORAGE_KEY));\n\n if (existing) {\n return existing;\n }\n\n const sessionId = createRandomId();\n safeGet(() => storage?.setItem(SESSION_STORAGE_KEY, sessionId));\n return sessionId;\n}\n\nexport function normalizeMetadata(\n metadata: Record<string, unknown> | (() => Record<string, unknown>) | undefined\n): Record<string, unknown> | undefined {\n if (metadata === undefined) {\n return undefined;\n }\n\n const resolved = typeof metadata === 'function' ? safeGet(metadata) : metadata;\n if (!isPlainObject(resolved)) {\n return undefined;\n }\n\n return normalizeLogValue(resolved) as Record<string, unknown>;\n}\n\nexport function isClientLogEvent(payload: unknown): payload is ClientLogEvent {\n if (!isPlainObject(payload)) {\n return false;\n }\n\n if (\n payload.type !== 'client_log' ||\n payload.source !== 'client' ||\n !isClientLogLevel(payload.level) ||\n typeof payload.id !== 'string' ||\n typeof payload.message !== 'string' ||\n typeof payload.clientTimestamp !== 'string'\n ) {\n return false;\n }\n\n const pageResult = plainObjectSchema.safeParse(payload.page);\n const browserResult = plainObjectSchema.safeParse(payload.browser);\n const sessionResult = plainObjectSchema.safeParse(payload.session);\n\n if (!pageResult.success || !browserResult.success || !sessionResult.success) {\n return false;\n }\n\n if (!isClientConnectorRequest(payload.connector)) {\n return false;\n }\n\n return (\n typeof sessionResult.data.pageId === 'string' &&\n typeof sessionResult.data.sessionId === 'string'\n );\n}\n\nexport function normalizeEndpointPath(path: string | undefined): string {\n if (!path) {\n return DEFAULT_CLIENT_LOG_ENDPOINT;\n }\n\n return path.startsWith('/') ? path : `/${path}`;\n}\n","import type { ConsoleMethod, ConsoleOnceLogger } from '../types/shared/once';\n\nexport type { ConsoleOnceLogger } from '../types/shared/once';\n\nfunction createConsoleOnceLogger(\n method: ConsoleMethod,\n warnedKeys: Set<string> = new Set<string>()\n): ConsoleOnceLogger {\n return (key, message, error) => {\n if (warnedKeys.has(key) || typeof console === 'undefined') {\n return;\n }\n\n const writer = console[method];\n if (typeof writer !== 'function') {\n return;\n }\n\n warnedKeys.add(key);\n if (error === undefined) {\n writer.call(console, message);\n return;\n }\n\n writer.call(console, message, error);\n };\n}\n\nexport function createWarnOnceLogger(warnedKeys?: Set<string>): ConsoleOnceLogger {\n return createConsoleOnceLogger('warn', warnedKeys);\n}\n\nexport function createErrorOnceLogger(warnedKeys?: Set<string>): ConsoleOnceLogger {\n return createConsoleOnceLogger('error', warnedKeys);\n}\n","import { appendFileSync, existsSync, readFileSync, writeFileSync } from 'fs';\nimport { createJiti } from 'jiti';\nimport { dirname, resolve } from 'path';\nimport { DEFAULT_CLIENT_LOG_ENDPOINT } from '../shared/client-log';\nimport { createWarnOnceLogger } from '../shared/once';\nimport { hasNonEmptyString, isAbsoluteHttpUrl } from '../shared/validation';\nimport type {\n BetterStackConnectorConfig,\n BetterStackErrorTrackingConfig,\n BlypDestination,\n BlypConfig,\n BlypConnectorsConfig,\n ClientLoggingConfig,\n ConfigFileMatch,\n DatabuddyConnectorConfig,\n DatabaseDeliveryConfig,\n DatabaseLoggerConfig,\n DatabaseRetryConfig,\n DrizzleDatabaseAdapterConfig,\n LogFileConfig,\n LogRotationConfig,\n OTLPConnectorConfig,\n PostHogConnectorConfig,\n PrismaDatabaseAdapterConfig,\n ResolvedBetterStackConnectorConfig,\n ResolvedBetterStackErrorTrackingConfig,\n ResolvedBlypConfig,\n ResolvedBlypConnectorsConfig,\n ResolvedDatabuddyConnectorConfig,\n ResolvedDatabaseLoggerConfig,\n ResolvedOTLPConnectorConfig,\n ResolvedPostHogConnectorConfig,\n ResolvedSentryConnectorConfig,\n SentryConnectorConfig\n} from '../types/core/config';\n\nexport type { ConnectorMode } from '../types/connectors/mode';\nexport type {\n BlypConfig,\n BetterStackConnectorConfig,\n BetterStackErrorTrackingConfig,\n BlypDestination,\n BlypConnectorsConfig,\n ClientLoggingConfig,\n DatabuddyConnectorConfig,\n DatabaseAdapterConfig,\n DatabaseAdapterKind,\n DatabaseDeliveryConfig,\n DatabaseDialect,\n DatabaseLoggerConfig,\n DatabaseRetryConfig,\n DrizzleDatabaseAdapterConfig,\n LogFileConfig,\n LogRotationConfig,\n OTLPConnectorConfig,\n PostHogConnectorConfig,\n PrismaDatabaseAdapterConfig,\n ResolvedBlypConfig,\n ResolvedBetterStackConnectorConfig,\n ResolvedBetterStackErrorTrackingConfig,\n ResolvedDatabuddyConnectorConfig,\n ResolvedDatabaseDeliveryConfig,\n ResolvedDatabaseLoggerConfig,\n PostHogErrorTrackingConfig,\n ResolvedOTLPConnectorConfig,\n ResolvedPostHogConnectorConfig,\n ResolvedDatabaseRetryConfig,\n ResolvedPostHogErrorTrackingConfig,\n ResolvedSentryConnectorConfig,\n SentryConnectorConfig\n} from '../types/core/config';\n\nconst PACKAGE_NAME = '@blyp/core';\nconst GITIGNORE_FILE_NAME = '.gitignore';\nconst CONFIG_FILE_NAMES = [\n 'blyp.config.ts',\n 'blyp.config.mts',\n 'blyp.config.cts',\n 'blyp.config.js',\n 'blyp.config.mjs',\n 'blyp.config.cjs',\n 'blyp.config.json',\n] as const;\nconst CONFIG_FILE_NAME = 'blyp.config.json';\nconst DEFAULT_POSTHOG_HOST = 'https://us.i.posthog.com';\nconst DEFAULT_CONNECTOR_SERVICE_NAME = 'blyp-app';\nconst DEFAULT_POSTHOG_SERVICE_NAME = DEFAULT_CONNECTOR_SERVICE_NAME;\nconst warnedKeys = new Set<string>();\nconst warnOnce = createWarnOnceLogger(warnedKeys);\n\nexport const DEFAULT_ROTATION_CONFIG: Required<LogRotationConfig> = {\n enabled: true,\n maxSizeBytes: 10 * 1024 * 1024,\n maxArchives: 5,\n compress: true,\n};\n\nexport const DEFAULT_FILE_CONFIG: Required<LogFileConfig> = {\n enabled: true,\n dir: '',\n archiveDir: '',\n format: 'ndjson',\n rotation: DEFAULT_ROTATION_CONFIG,\n};\n\nexport const DEFAULT_CLIENT_LOGGING_CONFIG: Required<ClientLoggingConfig> = {\n enabled: true,\n path: DEFAULT_CLIENT_LOG_ENDPOINT,\n};\n\nexport const DEFAULT_DATABASE_RETRY_CONFIG: Required<DatabaseRetryConfig> = {\n maxRetries: 1,\n backoffMs: 100,\n};\n\nexport const DEFAULT_DATABASE_DELIVERY_CONFIG: Required<Omit<DatabaseDeliveryConfig, 'retry'>> & {\n retry: Required<DatabaseRetryConfig>;\n} = {\n strategy: 'immediate',\n batchSize: 1,\n flushIntervalMs: 250,\n maxQueueSize: 1000,\n overflowStrategy: 'drop-oldest',\n flushTimeoutMs: 5000,\n retry: DEFAULT_DATABASE_RETRY_CONFIG,\n};\n\nexport const DEFAULT_CONFIG: BlypConfig = {\n pretty: true,\n level: 'info',\n destination: 'file',\n file: DEFAULT_FILE_CONFIG,\n clientLogging: DEFAULT_CLIENT_LOGGING_CONFIG,\n connectors: {},\n};\n\nlet cachedConfig: ResolvedBlypConfig | null = null;\n\nfunction findNearestPackageName(startDir: string): string | undefined {\n let currentDir = startDir;\n\n while (true) {\n const packageJsonPath = resolve(currentDir, 'package.json');\n if (existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as {\n name?: unknown;\n };\n if (hasNonEmptyString(packageJson.name)) {\n return packageJson.name;\n }\n } catch {}\n }\n\n const parentDir = dirname(currentDir);\n if (parentDir === currentDir) {\n return undefined;\n }\n\n currentDir = parentDir;\n }\n}\n\nfunction resolveDefaultConnectorServiceName(cwd: string = process.cwd()): string {\n return findNearestPackageName(cwd) ?? DEFAULT_POSTHOG_SERVICE_NAME;\n}\n\nfunction getBootstrapConfig(): BlypConfig {\n return {\n pretty: true,\n level: 'info',\n destination: 'file',\n file: {\n enabled: true,\n format: 'ndjson',\n rotation: {\n enabled: true,\n maxSizeBytes: 10 * 1024 * 1024,\n maxArchives: 5,\n compress: true,\n },\n },\n clientLogging: {\n enabled: true,\n path: DEFAULT_CLIENT_LOG_ENDPOINT,\n },\n connectors: {},\n };\n}\n\nfunction shouldBootstrapProjectFiles(cwd: string): boolean {\n const packageJsonPath = resolve(cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return true;\n }\n\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as { name?: string };\n return packageJson.name !== PACKAGE_NAME;\n } catch {\n return true;\n }\n}\n\nfunction ensureConfigFile(cwd: string): void {\n if (CONFIG_FILE_NAMES.some((fileName) => existsSync(resolve(cwd, fileName)))) {\n return;\n }\n\n const configPath = resolve(cwd, CONFIG_FILE_NAME);\n\n if (existsSync(configPath)) {\n return;\n }\n\n try {\n writeFileSync(configPath, `${JSON.stringify(getBootstrapConfig(), null, 2)}\\n`);\n } catch (error) {\n console.error('[Blyp] Warning: Failed to create blyp.config.json:', error);\n }\n}\n\nfunction ensureLogsIgnored(cwd: string): void {\n const gitignorePath = resolve(cwd, GITIGNORE_FILE_NAME);\n\n if (!existsSync(gitignorePath)) {\n try {\n writeFileSync(gitignorePath, 'logs\\n');\n } catch (error) {\n console.error('[Blyp] Warning: Failed to create .gitignore:', error);\n }\n return;\n }\n\n try {\n const currentContent = readFileSync(gitignorePath, 'utf-8');\n if (/^(?:\\/?logs\\/?)\\s*$/m.test(currentContent)) {\n return;\n }\n\n const separator = currentContent.endsWith('\\n') ? '' : '\\n';\n appendFileSync(gitignorePath, `${separator}logs\\n`);\n } catch (error) {\n console.error('[Blyp] Warning: Failed to update .gitignore:', error);\n }\n}\n\nfunction bootstrapProjectFiles(): void {\n const cwd = process.cwd();\n\n if (!shouldBootstrapProjectFiles(cwd)) {\n return;\n }\n\n ensureConfigFile(cwd);\n ensureLogsIgnored(cwd);\n}\n\nfunction findConfigFile(): ConfigFileMatch | null {\n const cwd = process.cwd();\n const matches = CONFIG_FILE_NAMES\n .map((fileName) => resolve(cwd, fileName))\n .filter((filePath) => existsSync(filePath));\n\n if (matches.length === 0) {\n return null;\n }\n\n if (matches.length > 1) {\n const preferred = matches[0]!;\n warnOnce(\n `config-multiple:${preferred}`,\n `[Blyp] Warning: Multiple config files found. Using ${preferred} and ignoring ${matches.slice(1).join(', ')}.`\n );\n }\n\n const selectedPath = matches[0]!;\n return {\n path: selectedPath,\n type: selectedPath.endsWith('.json') ? 'json' : 'jiti',\n };\n}\n\nfunction normalizeLoadedConfig(\n value: unknown,\n configPath: string\n): Partial<BlypConfig> {\n const normalized = (\n value &&\n typeof value === 'object' &&\n 'default' in value &&\n (value as { default?: unknown }).default !== undefined\n )\n ? (value as { default: unknown }).default\n : value;\n\n if (!normalized || typeof normalized !== 'object' || Array.isArray(normalized)) {\n warnOnce(\n `config-invalid:${configPath}`,\n `[Blyp] Warning: Config file ${configPath} did not export an object. Falling back to defaults.`\n );\n return {};\n }\n\n return normalized as Partial<BlypConfig>;\n}\n\nfunction parseJsonConfigFile(configPath: string): Partial<BlypConfig> {\n try {\n const content = readFileSync(configPath, 'utf-8');\n return normalizeLoadedConfig(JSON.parse(content), configPath);\n } catch (error) {\n console.error('[Blyp] Warning: Failed to parse blyp.config.json:', error);\n return {};\n }\n}\n\nfunction parseExecutableConfigFile(configPath: string): Partial<BlypConfig> {\n try {\n const jiti = createJiti(process.cwd(), {\n interopDefault: true,\n moduleCache: false,\n fsCache: false,\n });\n return normalizeLoadedConfig(jiti(configPath), configPath);\n } catch (error) {\n console.error(`[Blyp] Warning: Failed to load ${configPath}:`, error);\n return {};\n }\n}\n\nfunction parseConfigFile(config: ConfigFileMatch): Partial<BlypConfig> {\n return config.type === 'json'\n ? parseJsonConfigFile(config.path)\n : parseExecutableConfigFile(config.path);\n}\n\nfunction isPrismaAdapter(\n value: DatabaseLoggerConfig['adapter']\n): value is PrismaDatabaseAdapterConfig {\n return !!value && typeof value === 'object' && value.type === 'prisma';\n}\n\nfunction isDrizzleAdapter(\n value: DatabaseLoggerConfig['adapter']\n): value is DrizzleDatabaseAdapterConfig {\n return !!value && typeof value === 'object' && value.type === 'drizzle';\n}\n\nfunction mergeDatabaseRetryConfig(\n base: DatabaseRetryConfig | undefined,\n override: DatabaseRetryConfig | undefined\n): Required<DatabaseRetryConfig> {\n return {\n ...DEFAULT_DATABASE_RETRY_CONFIG,\n ...base,\n ...override,\n };\n}\n\nfunction mergeDatabaseDeliveryConfig(\n base: DatabaseDeliveryConfig | undefined,\n override: DatabaseDeliveryConfig | undefined\n): ResolvedDatabaseLoggerConfig['delivery'] {\n return {\n ...DEFAULT_DATABASE_DELIVERY_CONFIG,\n ...base,\n ...override,\n retry: mergeDatabaseRetryConfig(base?.retry, override?.retry),\n };\n}\n\nfunction hasPrismaDelegate(adapter: PrismaDatabaseAdapterConfig): boolean {\n const model = adapter.model ?? 'blypLog';\n const client = adapter.client as Record<string, unknown> | null | undefined;\n const delegate = client?.[model] as Record<string, unknown> | undefined;\n\n return !!delegate && typeof delegate.create === 'function';\n}\n\nfunction hasDrizzleAdapterShape(adapter: DrizzleDatabaseAdapterConfig): boolean {\n const db = adapter.db as { insert?: unknown } | null | undefined;\n return !!db && typeof db.insert === 'function' && adapter.table !== undefined;\n}\n\nfunction resolveDatabaseLoggerConfig(\n config: DatabaseLoggerConfig | undefined,\n sourceType?: ConfigFileMatch['type']\n): ResolvedDatabaseLoggerConfig | undefined {\n if (!config) {\n return undefined;\n }\n\n const adapter = config.adapter;\n let ready = false;\n\n if (sourceType === 'json') {\n warnOnce(\n 'database-json-config',\n '[Blyp] Warning: Database logging requires an executable blyp config file. Database destination remains disabled until you move this config to blyp.config.ts/js.'\n );\n } else if (config.dialect !== 'postgres' && config.dialect !== 'mysql') {\n warnOnce(\n `database-dialect:${String(config.dialect)}`,\n `[Blyp] Warning: Unsupported database dialect \"${String(config.dialect)}\". Database logging is disabled.`\n );\n } else if (!adapter) {\n warnOnce(\n 'database-adapter-missing',\n '[Blyp] Warning: Database logging is enabled without an adapter. Database logging is disabled.'\n );\n } else if (isPrismaAdapter(adapter)) {\n ready = hasPrismaDelegate({\n ...adapter,\n model: adapter.model ?? 'blypLog',\n });\n\n if (!ready) {\n warnOnce(\n 'database-prisma-missing',\n `[Blyp] Warning: Prisma database adapter is missing the \"${adapter.model ?? 'blypLog'}\" delegate or its create method. Database logging is disabled.`\n );\n }\n } else if (isDrizzleAdapter(adapter)) {\n ready = hasDrizzleAdapterShape(adapter);\n\n if (!ready) {\n warnOnce(\n 'database-drizzle-missing',\n '[Blyp] Warning: Drizzle database adapter is missing a db.insert function or table reference. Database logging is disabled.'\n );\n }\n }\n\n const normalizedAdapter = isPrismaAdapter(adapter)\n ? {\n ...adapter,\n model: adapter.model ?? 'blypLog',\n }\n : adapter;\n\n return {\n dialect: config.dialect,\n adapter: normalizedAdapter,\n delivery: mergeDatabaseDeliveryConfig(undefined, config.delivery),\n ready,\n status: ready ? 'enabled' : 'missing',\n };\n}\n\nfunction mergeRotationConfig(\n base: LogRotationConfig | undefined,\n override: LogRotationConfig | undefined\n): Required<LogRotationConfig> {\n return {\n ...DEFAULT_ROTATION_CONFIG,\n ...base,\n ...override,\n };\n}\n\nfunction mergeFileConfig(\n base: LogFileConfig | undefined,\n override: LogFileConfig | undefined\n): Required<LogFileConfig> {\n return {\n ...DEFAULT_FILE_CONFIG,\n ...base,\n ...override,\n rotation: mergeRotationConfig(base?.rotation, override?.rotation),\n };\n}\n\nfunction mergeClientLoggingConfig(\n base: ClientLoggingConfig | undefined,\n override: ClientLoggingConfig | undefined\n): Required<ClientLoggingConfig> {\n return {\n ...DEFAULT_CLIENT_LOGGING_CONFIG,\n ...base,\n ...override,\n path: override?.path ?? base?.path ?? DEFAULT_CLIENT_LOGGING_CONFIG.path,\n };\n}\n\nfunction mergeDatabaseLoggerConfig(\n base: DatabaseLoggerConfig | undefined,\n override: DatabaseLoggerConfig | undefined,\n sourceType?: ConfigFileMatch['type']\n): ResolvedDatabaseLoggerConfig | undefined {\n if (!base && !override) {\n return undefined;\n }\n\n return resolveDatabaseLoggerConfig(\n {\n dialect: override?.dialect ?? base?.dialect,\n adapter: override?.adapter ?? base?.adapter,\n delivery: {\n ...(base?.delivery ?? {}),\n ...(override?.delivery ?? {}),\n retry: {\n ...(base?.delivery?.retry ?? {}),\n ...(override?.delivery?.retry ?? {}),\n },\n },\n },\n sourceType\n );\n}\n\nfunction mergePostHogConnectorConfig(\n base: PostHogConnectorConfig | undefined,\n override: PostHogConnectorConfig | undefined\n): ResolvedPostHogConnectorConfig {\n const enabled = override?.enabled ?? base?.enabled ?? false;\n const projectKey = override?.projectKey ?? base?.projectKey;\n const baseErrorTracking = base?.enabled === true ? base?.errorTracking : undefined;\n const errorTrackingMode =\n override?.errorTracking?.mode ??\n baseErrorTracking?.mode ??\n 'auto';\n const errorTrackingEnabled =\n override?.errorTracking?.enabled ??\n baseErrorTracking?.enabled ??\n enabled;\n const errorTrackingReady =\n enabled &&\n errorTrackingEnabled &&\n typeof projectKey === 'string' &&\n projectKey.trim().length > 0;\n\n return {\n enabled,\n mode: override?.mode ?? base?.mode ?? 'auto',\n projectKey,\n host: override?.host ?? base?.host ?? DEFAULT_POSTHOG_HOST,\n serviceName:\n override?.serviceName ??\n base?.serviceName ??\n resolveDefaultConnectorServiceName(),\n errorTracking: {\n enabled: errorTrackingEnabled,\n mode: errorTrackingMode,\n enableExceptionAutocapture:\n override?.errorTracking?.enableExceptionAutocapture ??\n baseErrorTracking?.enableExceptionAutocapture ??\n (errorTrackingMode === 'auto'),\n ready: errorTrackingReady,\n status: errorTrackingReady ? 'enabled' : 'missing',\n },\n };\n}\n\nfunction mergeDatabuddyConnectorConfig(\n base: DatabuddyConnectorConfig | undefined,\n override: DatabuddyConnectorConfig | undefined\n): ResolvedDatabuddyConnectorConfig {\n const enabled = override?.enabled ?? base?.enabled ?? false;\n const apiKey = override?.apiKey ?? base?.apiKey;\n const websiteId = override?.websiteId ?? base?.websiteId;\n const ready = enabled && hasNonEmptyString(apiKey) && hasNonEmptyString(websiteId);\n\n return {\n enabled,\n mode: override?.mode ?? base?.mode ?? 'auto',\n apiKey,\n websiteId,\n namespace: override?.namespace ?? base?.namespace,\n source: override?.source ?? base?.source,\n apiUrl: override?.apiUrl ?? base?.apiUrl,\n debug: override?.debug ?? base?.debug ?? false,\n enableBatching: override?.enableBatching ?? base?.enableBatching ?? true,\n batchSize: override?.batchSize ?? base?.batchSize,\n batchTimeout: override?.batchTimeout ?? base?.batchTimeout,\n maxQueueSize: override?.maxQueueSize ?? base?.maxQueueSize,\n ready,\n status: ready ? 'enabled' : 'missing',\n };\n}\n\nfunction mergeBetterStackConnectorConfig(\n base: BetterStackConnectorConfig | undefined,\n override: BetterStackConnectorConfig | undefined\n): ResolvedBetterStackConnectorConfig {\n const sourceToken = override?.sourceToken ?? base?.sourceToken;\n const ingestingHost = override?.ingestingHost ?? base?.ingestingHost;\n const enabled = override?.enabled ?? base?.enabled ?? false;\n const baseErrorTracking = base?.enabled === true ? base?.errorTracking : undefined;\n const errorTracking = mergeBetterStackErrorTrackingConfig(\n enabled,\n baseErrorTracking,\n override?.errorTracking\n );\n const ready =\n enabled &&\n hasNonEmptyString(sourceToken) &&\n isAbsoluteHttpUrl(ingestingHost);\n\n return {\n enabled,\n mode: override?.mode ?? base?.mode ?? 'auto',\n sourceToken,\n ingestingHost,\n serviceName:\n override?.serviceName ??\n base?.serviceName ??\n resolveDefaultConnectorServiceName(),\n errorTracking,\n ready,\n status: ready ? 'enabled' : 'missing',\n };\n}\n\nfunction mergeBetterStackErrorTrackingConfig(\n connectorEnabled: boolean,\n base: BetterStackErrorTrackingConfig | undefined,\n override: BetterStackErrorTrackingConfig | undefined\n): ResolvedBetterStackErrorTrackingConfig {\n const dsn = override?.dsn ?? base?.dsn;\n const enabled = override?.enabled ?? base?.enabled ?? connectorEnabled;\n const ready = enabled && hasNonEmptyString(dsn);\n\n return {\n enabled,\n dsn,\n tracesSampleRate: override?.tracesSampleRate ?? base?.tracesSampleRate ?? 1.0,\n environment: override?.environment ?? base?.environment,\n release: override?.release ?? base?.release,\n ready,\n status: ready ? 'enabled' : 'missing',\n };\n}\n\nfunction mergeSentryConnectorConfig(\n base: SentryConnectorConfig | undefined,\n override: SentryConnectorConfig | undefined\n): ResolvedSentryConnectorConfig {\n const dsn = override?.dsn ?? base?.dsn;\n const enabled = override?.enabled ?? base?.enabled ?? false;\n const ready = enabled && typeof dsn === 'string' && dsn.trim().length > 0;\n\n return {\n enabled,\n mode: override?.mode ?? base?.mode ?? 'auto',\n dsn,\n environment: override?.environment ?? base?.environment,\n release: override?.release ?? base?.release,\n ready,\n status: ready ? 'enabled' : 'missing',\n };\n}\n\nfunction mergeOTLPConnectorConfig(\n base: OTLPConnectorConfig | undefined,\n override: OTLPConnectorConfig | undefined\n): ResolvedOTLPConnectorConfig {\n const endpoint = override?.endpoint ?? base?.endpoint;\n const enabled = override?.enabled ?? base?.enabled ?? false;\n const resolvedHeaders = {\n ...(base?.headers ?? {}),\n ...(override?.headers ?? {}),\n };\n const ready = enabled && isAbsoluteHttpUrl(endpoint);\n\n return {\n name: override?.name ?? base?.name ?? '',\n enabled,\n mode: override?.mode ?? base?.mode ?? 'auto',\n endpoint,\n headers: resolvedHeaders,\n auth: override?.auth ?? base?.auth,\n serviceName:\n override?.serviceName ??\n base?.serviceName ??\n resolveDefaultConnectorServiceName(),\n ready,\n status: ready ? 'enabled' : 'missing',\n };\n}\n\nfunction mergeOTLPConnectorsConfig(\n base: OTLPConnectorConfig[] | undefined,\n override: OTLPConnectorConfig[] | undefined\n): ResolvedOTLPConnectorConfig[] {\n const source = override ?? base ?? [];\n const deduped = new Map<string, ResolvedOTLPConnectorConfig>();\n\n for (const connector of source) {\n if (!connector || typeof connector.name !== 'string' || connector.name.length === 0) {\n continue;\n }\n\n if (deduped.has(connector.name)) {\n warnOnce(\n `otlp-duplicate:${connector.name}`,\n `[Blyp] Warning: Duplicate OTLP connector name \"${connector.name}\" found. Using the last definition.`\n );\n }\n\n deduped.set(connector.name, mergeOTLPConnectorConfig(undefined, connector));\n }\n\n return Array.from(deduped.values());\n}\n\nfunction mergeConnectorsConfig(\n base: BlypConnectorsConfig | undefined,\n override: BlypConnectorsConfig | undefined\n): ResolvedBlypConnectorsConfig {\n return {\n betterstack: mergeBetterStackConnectorConfig(base?.betterstack, override?.betterstack),\n databuddy: mergeDatabuddyConnectorConfig(base?.databuddy, override?.databuddy),\n posthog: mergePostHogConnectorConfig(base?.posthog, override?.posthog),\n sentry: mergeSentryConnectorConfig(base?.sentry, override?.sentry),\n otlp: mergeOTLPConnectorsConfig(base?.otlp, override?.otlp),\n };\n}\n\nexport function mergeBlypConfig(\n base: BlypConfig,\n override: Partial<BlypConfig> = {},\n options: { configFileType?: ConfigFileMatch['type'] } = {}\n): ResolvedBlypConfig {\n return {\n ...base,\n ...override,\n destination: override.destination ?? base.destination ?? 'file',\n file: mergeFileConfig(base.file, override.file),\n database: mergeDatabaseLoggerConfig(base.database, override.database, options.configFileType),\n clientLogging: mergeClientLoggingConfig(base.clientLogging, override.clientLogging),\n connectors: mergeConnectorsConfig(base.connectors, override.connectors),\n };\n}\n\nexport function loadConfig(): ResolvedBlypConfig {\n if (cachedConfig !== null) {\n return cachedConfig;\n }\n\n bootstrapProjectFiles();\n const configFile = findConfigFile();\n\n if (configFile) {\n const userConfig = parseConfigFile(configFile);\n cachedConfig = mergeBlypConfig(DEFAULT_CONFIG, userConfig, {\n configFileType: configFile.type,\n });\n } else {\n cachedConfig = mergeBlypConfig(DEFAULT_CONFIG);\n }\n\n return cachedConfig;\n}\n\nexport function resolveConfig(overrides: Partial<BlypConfig> = {}): ResolvedBlypConfig {\n return mergeBlypConfig(loadConfig(), overrides);\n}\n\nexport function getConfig(): ResolvedBlypConfig {\n return loadConfig();\n}\n\nexport function resetConfigCache(): void {\n cachedConfig = null;\n warnedKeys.clear();\n}\n","import type { LogRecord } from './file-logger';\nimport type { StructuredLogPayload } from './structured-log';\nimport {\n normalizeError,\n normalizeLogValue,\n serializeLogMessage,\n} from '../shared/log-value';\nimport type { LogMethodName } from '../types/core/log-record';\n\nexport type { LogMethodName } from '../types/core/log-record';\n\nconst RECORD_LEVELS: Record<LogMethodName, string> = {\n success: 'success',\n critical: 'critical',\n warning: 'warning',\n info: 'info',\n debug: 'debug',\n error: 'error',\n warn: 'warning',\n table: 'table',\n};\n\nfunction normalizePath(filePath: string): string {\n return filePath.replace(/\\\\/g, '/');\n}\n\nfunction isInternalLoggerFrame(filePath: string): boolean {\n const normalizedPath = normalizePath(filePath);\n\n return (\n normalizedPath.startsWith('node:') ||\n normalizedPath.includes('/node_modules/pino') ||\n normalizedPath.includes('/node_modules/pino-pretty') ||\n normalizedPath.includes('/node_modules/@blyp/core/') ||\n normalizedPath.includes('/blyp/src/core/') ||\n normalizedPath.includes('/blyp/src/frameworks/') ||\n normalizedPath.includes('/blyp/src/posthog/') ||\n normalizedPath.includes('/blyp/dist/')\n );\n}\n\nfunction formatCallerPath(filePath: string): string {\n const normalizedPath = normalizePath(filePath);\n const normalizedCwd = normalizePath(process.cwd());\n return normalizedPath.startsWith(`${normalizedCwd}/`)\n ? normalizedPath.slice(normalizedCwd.length + 1)\n : normalizedPath;\n}\n\nexport function getCallerLocation(): { file: string | null; line: number | null } {\n try {\n const stack = new Error().stack;\n if (!stack) {\n return { file: null, line: null };\n }\n\n const lines = stack.split('\\n');\n let fallback: { file: string; line: number | null } | null = null;\n\n for (let index = 2; index < lines.length; index += 1) {\n const line = lines[index];\n if (!line) {\n continue;\n }\n\n const match = line.match(/\\((.*):(\\d+):\\d+\\)/) || line.match(/at\\s+(.*):(\\d+):(\\d+)/);\n if (!match) {\n continue;\n }\n\n const fileName = match[1] || '';\n const lineNumber = parseInt(match[2] || '0', 10) || null;\n\n if (fileName && !fileName.includes('node_modules') && !isInternalLoggerFrame(fileName)) {\n const formattedPath = formatCallerPath(fileName);\n const normalizedFormattedPath = normalizePath(formattedPath);\n\n if (!normalizedFormattedPath.startsWith('dist/')) {\n return { file: formattedPath, line: lineNumber };\n }\n\n fallback ??= { file: formattedPath, line: lineNumber };\n }\n }\n\n if (fallback) {\n return fallback;\n }\n } catch {\n return { file: null, line: null };\n }\n\n return { file: null, line: null };\n}\n\nexport const serializeMessage = serializeLogMessage;\n\nexport function stripAnsi(value: string): string {\n return value.replace(/\\u001b\\[[0-9;]*m/g, '');\n}\n\nexport function buildRecord(\n level: LogMethodName,\n message: unknown,\n args: unknown[],\n bindings: Record<string, unknown>\n): LogRecord {\n const { file, line } = getCallerLocation();\n const serializedMessage = serializeMessage(message);\n const record: LogRecord = {\n timestamp: new Date().toISOString(),\n level: RECORD_LEVELS[level],\n message: stripAnsi(serializedMessage),\n };\n\n if (message instanceof Error) {\n record.error = normalizeError(message);\n }\n\n if (file) {\n record.caller = line !== null ? `${file}:${line}` : file;\n }\n\n if (args.length === 1) {\n record.data = normalizeLogValue(args[0]);\n } else if (args.length > 1) {\n record.data = normalizeLogValue(args);\n }\n\n if (Object.keys(bindings).length > 0) {\n record.bindings = normalizeLogValue(bindings) as Record<string, unknown>;\n }\n\n return record;\n}\n\nexport function buildStructuredRecord(\n level: LogMethodName,\n message: string,\n payload: StructuredLogPayload,\n bindings: Record<string, unknown>\n): LogRecord {\n const { file, line } = getCallerLocation();\n const normalizedPayload = normalizeLogValue(payload) as StructuredLogPayload;\n const record: LogRecord = {\n message: stripAnsi(message),\n ...normalizedPayload,\n };\n\n if (file) {\n record.caller = line !== null ? `${file}:${line}` : file;\n }\n\n if (Object.keys(bindings).length > 0) {\n record.bindings = normalizeLogValue(bindings) as Record<string, unknown>;\n }\n\n record.level =\n typeof normalizedPayload.level === 'string' && normalizedPayload.level.length > 0\n ? normalizedPayload.level\n : RECORD_LEVELS[level];\n record.timestamp =\n typeof normalizedPayload.timestamp === 'string' && normalizedPayload.timestamp.length > 0\n ? normalizedPayload.timestamp\n : new Date().toISOString();\n\n return record;\n}\n\nexport function resolveStructuredWriteLevel(level: StructuredLogPayload['level']): LogMethodName {\n switch (level) {\n case 'debug':\n return 'debug';\n case 'warning':\n return 'warning';\n case 'warn':\n return 'warn';\n case 'error':\n return 'error';\n case 'success':\n return 'success';\n case 'critical':\n return 'critical';\n case 'table':\n return 'table';\n case 'info':\n default:\n return 'info';\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport { gzipSync } from 'fflate';\nimport type { BlypConfig } from './config';\nimport type {\n FileLoggerDependencies,\n LogRecord,\n ResolvedFileLoggerConfig,\n StreamState,\n} from '../types/core/file-logger';\n\nexport type { LogRecord } from '../types/core/file-logger';\n\nfunction gzipBuffer(buf: Buffer): Buffer {\n return Buffer.from(gzipSync(buf));\n}\n\nfunction warnWithConsole(message: string, error?: unknown): void {\n console.warn(`[Blyp] Warning: ${message}`, error);\n}\n\nfunction ensureDirectory(dirPath: string): void {\n fs.mkdirSync(dirPath, { recursive: true });\n}\n\nfunction getFileSize(filePath: string): number {\n try {\n return fs.statSync(filePath).size;\n } catch {\n return 0;\n }\n}\n\nfunction formatArchiveTimestamp(timestamp: Date): string {\n const year = timestamp.getUTCFullYear();\n const month = String(timestamp.getUTCMonth() + 1).padStart(2, '0');\n const day = String(timestamp.getUTCDate()).padStart(2, '0');\n const hours = String(timestamp.getUTCHours()).padStart(2, '0');\n const minutes = String(timestamp.getUTCMinutes()).padStart(2, '0');\n const seconds = String(timestamp.getUTCSeconds()).padStart(2, '0');\n return `${year}${month}${day}T${hours}${minutes}${seconds}Z`;\n}\n\nfunction getUniqueArchivePath(basePath: string, extension: string): string {\n let candidate = `${basePath}${extension}`;\n let suffix = 1;\n\n while (fs.existsSync(candidate)) {\n candidate = `${basePath}-${suffix}${extension}`;\n suffix += 1;\n }\n\n return candidate;\n}\n\nfunction pruneArchives(\n archiveDir: string,\n archivePrefix: string,\n maxArchives: number,\n warn: (message: string, error?: unknown) => void\n): void {\n const prefix = `${archivePrefix}.`;\n\n try {\n const archivePaths = fs\n .readdirSync(archiveDir)\n .filter((name) =>\n name.startsWith(prefix) &&\n (name.endsWith('.ndjson') || name.endsWith('.ndjson.gz'))\n )\n .map((name) => path.join(archiveDir, name))\n .sort((left, right) => {\n return fs.statSync(left).mtimeMs - fs.statSync(right).mtimeMs;\n });\n\n const deleteCount = Math.max(archivePaths.length - maxArchives, 0);\n\n for (let index = 0; index < deleteCount; index += 1) {\n fs.rmSync(archivePaths[index]!);\n }\n } catch (error) {\n warn(`Failed to prune archives for ${archivePrefix}`, error);\n }\n}\n\nfunction createSafeReplacer() {\n const seen = new WeakSet<object>();\n\n return (_key: string, value: unknown) => {\n if (typeof value === 'function') {\n return `[Function: ${value.name || 'anonymous'}]`;\n }\n\n if (value === undefined) {\n return '[undefined]';\n }\n\n if (typeof value === 'symbol') {\n return value.toString();\n }\n\n if (value !== null && typeof value === 'object') {\n if (seen.has(value)) {\n return '[Circular]';\n }\n\n seen.add(value);\n }\n\n return value;\n };\n}\n\nexport function serializeLogRecord(record: LogRecord): string {\n return JSON.stringify(record, createSafeReplacer());\n}\n\nfunction resolveFileLoggerConfig(config: BlypConfig): ResolvedFileLoggerConfig {\n const fileConfig = config.file;\n const dir = fileConfig?.dir || config.logDir || path.join(process.cwd(), 'logs');\n const archiveDir = fileConfig?.archiveDir || path.join(dir, 'archive');\n const rotation = fileConfig?.rotation;\n\n return {\n enabled: fileConfig?.enabled ?? true,\n dir,\n archiveDir,\n rotationEnabled: rotation?.enabled ?? true,\n maxSizeBytes: rotation?.maxSizeBytes ?? 10 * 1024 * 1024,\n maxArchives: rotation?.maxArchives ?? 5,\n compress: rotation?.compress ?? true,\n };\n}\n\nexport class RotatingFileLogger {\n private readonly config: ResolvedFileLoggerConfig;\n private readonly gzip: (input: Buffer) => Buffer;\n private readonly warn: (message: string, error?: unknown) => void;\n private readonly combined: StreamState;\n private readonly error: StreamState;\n\n constructor(config: BlypConfig, dependencies: FileLoggerDependencies = {}) {\n this.config = resolveFileLoggerConfig(config);\n this.gzip = dependencies.gzip ?? gzipBuffer;\n this.warn = dependencies.warn ?? warnWithConsole;\n this.combined = {\n activePath: path.join(this.config.dir, 'log.ndjson'),\n archivePrefix: 'log',\n bytes: 0,\n queue: [],\n processing: false,\n };\n this.error = {\n activePath: path.join(this.config.dir, 'log.error.ndjson'),\n archivePrefix: 'log.error',\n bytes: 0,\n queue: [],\n processing: false,\n };\n\n if (!this.config.enabled) {\n return;\n }\n\n ensureDirectory(this.config.dir);\n ensureDirectory(this.config.archiveDir);\n this.seedStream(this.combined);\n this.seedStream(this.error);\n }\n\n write(record: LogRecord): void {\n if (!this.config.enabled) {\n return;\n }\n\n const line = `${serializeLogRecord(record)}\\n`;\n this.enqueue(this.combined, line);\n\n if (record.level === 'error' || record.level === 'critical') {\n this.enqueue(this.error, line);\n }\n }\n\n private enqueue(stream: StreamState, line: string): void {\n stream.queue.push(line);\n this.processQueue(stream);\n }\n\n private processQueue(stream: StreamState): void {\n if (stream.processing) {\n return;\n }\n\n stream.processing = true;\n\n try {\n while (stream.queue.length > 0) {\n const queuedLine = stream.queue.shift();\n if (queuedLine === undefined) {\n continue;\n }\n\n try {\n this.append(stream, queuedLine);\n } catch (error) {\n this.warn(`Failed writing log line for ${stream.archivePrefix}`, error);\n }\n }\n } finally {\n stream.processing = false;\n }\n }\n\n private seedStream(stream: StreamState): void {\n stream.bytes = getFileSize(stream.activePath);\n\n if (this.config.rotationEnabled && stream.bytes > this.config.maxSizeBytes && stream.bytes > 0) {\n this.rotate(stream);\n fs.closeSync(fs.openSync(stream.activePath, 'a'));\n stream.bytes = 0;\n }\n }\n\n private append(stream: StreamState, line: string): void {\n ensureDirectory(this.config.dir);\n const lineBytes = Buffer.byteLength(line, 'utf8');\n\n if (\n this.config.rotationEnabled &&\n stream.bytes > 0 &&\n stream.bytes + lineBytes > this.config.maxSizeBytes\n ) {\n this.rotate(stream);\n }\n\n fs.appendFileSync(stream.activePath, line, 'utf8');\n stream.bytes += lineBytes;\n }\n\n private rotate(stream: StreamState): void {\n ensureDirectory(this.config.archiveDir);\n if (!fs.existsSync(stream.activePath) || stream.bytes === 0) {\n stream.bytes = 0;\n return;\n }\n\n const archiveTimestamp = formatArchiveTimestamp(new Date());\n const archiveBasePath = path.join(\n this.config.archiveDir,\n `${stream.archivePrefix}.${archiveTimestamp}`\n );\n const archivePath = getUniqueArchivePath(archiveBasePath, '.ndjson');\n\n fs.renameSync(stream.activePath, archivePath);\n\n if (this.config.compress) {\n try {\n const compressedPath = `${archivePath}.gz`;\n const gzipped = this.gzip(fs.readFileSync(archivePath));\n fs.writeFileSync(compressedPath, gzipped);\n fs.rmSync(archivePath);\n } catch (error) {\n this.warn(`Failed to gzip archive ${archivePath}`, error);\n }\n }\n\n stream.bytes = 0;\n pruneArchives(this.config.archiveDir, stream.archivePrefix, this.config.maxArchives, this.warn);\n }\n}\n\nexport function createFileLogger(config: BlypConfig): RotatingFileLogger {\n return new RotatingFileLogger(config);\n}\n","import type { LogRecord } from '../file-logger';\nimport { createFileLogger, type RotatingFileLogger } from '../file-logger';\nimport type { BlypConfig } from '../config';\nimport type { BlypPrimarySink } from '../primary-sink';\n\nexport class FilePrimarySink implements BlypPrimarySink {\n readonly isAsync = false;\n\n readonly isReady = true;\n\n constructor(private readonly logger: RotatingFileLogger) {}\n\n write(record: LogRecord): void {\n this.logger.write(record);\n }\n\n async flush(): Promise<void> {}\n\n async shutdown(): Promise<void> {}\n}\n\nexport function createFilePrimarySink(config: BlypConfig): FilePrimarySink {\n return new FilePrimarySink(createFileLogger(config));\n}\n","import type { DatabaseLogRow, DrizzleDatabaseAdapterConfig } from '../../types/database';\nimport type { DatabaseRowWriter } from './prisma';\n\ninterface DrizzleInsertBuilder {\n values: (rows: DatabaseLogRow | DatabaseLogRow[]) => Promise<unknown>;\n}\n\ninterface DrizzleDatabaseLike {\n insert: (table: unknown) => DrizzleInsertBuilder;\n}\n\nexport function createDrizzleDatabaseAdapter(config: {\n db: unknown;\n table: unknown;\n}): DrizzleDatabaseAdapterConfig {\n return {\n type: 'drizzle',\n db: config.db,\n table: config.table,\n };\n}\n\nexport function createDrizzleRowWriter(\n adapter: DrizzleDatabaseAdapterConfig\n): DatabaseRowWriter {\n const db = adapter.db as DrizzleDatabaseLike;\n\n if (typeof db?.insert !== 'function' || adapter.table === undefined) {\n throw new Error(\n '[Blyp] Drizzle database adapter is missing a db.insert function or table reference.'\n );\n }\n\n return {\n async insert(rows: DatabaseLogRow[]): Promise<void> {\n if (rows.length === 0) {\n return;\n }\n\n await db.insert(adapter.table).values(rows);\n },\n };\n}\n","import type { DatabaseLogRow, PrismaDatabaseAdapterConfig } from '../../types/database';\n\ninterface PrismaDelegate {\n create: (args: { data: DatabaseLogRow }) => Promise<unknown>;\n createMany?: (args: { data: DatabaseLogRow[] }) => Promise<unknown>;\n}\n\ninterface PrismaClientLike {\n $transaction?: (operations: Array<Promise<unknown>>) => Promise<unknown>;\n [key: string]: unknown;\n}\n\nexport interface DatabaseRowWriter {\n insert: (rows: DatabaseLogRow[]) => Promise<void>;\n}\n\nfunction shouldFallbackFromCreateMany(error: unknown): boolean {\n const message = String(error ?? '');\n\n return (\n message.includes('createMany') ||\n message.includes('Unknown argument') ||\n message.includes('not supported') ||\n message.includes('is not a function')\n );\n}\n\nexport function createPrismaDatabaseAdapter(config: {\n client: unknown;\n model?: string;\n}): PrismaDatabaseAdapterConfig {\n return {\n type: 'prisma',\n client: config.client,\n model: config.model ?? 'blypLog',\n };\n}\n\nexport function createPrismaRowWriter(\n adapter: PrismaDatabaseAdapterConfig\n): DatabaseRowWriter {\n const client = adapter.client as PrismaClientLike;\n const model = adapter.model ?? 'blypLog';\n const delegateCandidate = client[model] as PrismaDelegate | undefined;\n\n if (!delegateCandidate || typeof delegateCandidate.create !== 'function') {\n throw new Error(\n `[Blyp] Prisma database adapter is missing the \"${model}\" delegate or its create method.`\n );\n }\n\n const delegate: PrismaDelegate = delegateCandidate;\n\n let useCreateMany = typeof delegate.createMany === 'function';\n\n async function fallbackInsert(rows: DatabaseLogRow[]): Promise<void> {\n if (typeof client.$transaction === 'function') {\n await client.$transaction(\n rows.map((row) => delegate.create({ data: row }))\n );\n return;\n }\n\n for (const row of rows) {\n await delegate.create({ data: row });\n }\n }\n\n return {\n async insert(rows: DatabaseLogRow[]): Promise<void> {\n if (rows.length === 0) {\n return;\n }\n\n if (rows.length === 1) {\n await delegate.create({ data: rows[0]! });\n return;\n }\n\n if (!useCreateMany || typeof delegate.createMany !== 'function') {\n await fallbackInsert(rows);\n return;\n }\n\n try {\n await delegate.createMany({ data: rows });\n } catch (error) {\n if (!shouldFallbackFromCreateMany(error)) {\n throw error;\n }\n\n useCreateMany = false;\n await fallbackInsert(rows);\n }\n },\n };\n}\n","import { randomUUID } from 'crypto';\nimport { normalizeLogValue } from '../shared/log-value';\nimport type {\n DatabaseAdapterConfig,\n DatabaseLogRow,\n PrismaDatabaseAdapterConfig,\n DrizzleDatabaseAdapterConfig,\n ResolvedDatabaseLoggerConfig,\n} from '../types/database';\nimport type { LogRecord } from '../core/file-logger';\nimport { createDrizzleRowWriter } from './adapters/drizzle';\nimport { createPrismaRowWriter, type DatabaseRowWriter } from './adapters/prisma';\n\nfunction normalizeNullableNumber(value: unknown): number | null {\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n}\n\nfunction normalizeNullableString(value: unknown): string | null {\n return typeof value === 'string' && value.length > 0 ? value : null;\n}\n\nfunction parseTimestamp(value: unknown): Date {\n if (typeof value === 'string') {\n const timestamp = new Date(value);\n if (!Number.isNaN(timestamp.getTime())) {\n return timestamp;\n }\n }\n\n return new Date();\n}\n\nexport function toDatabaseLogRow(record: LogRecord): DatabaseLogRow {\n const normalizedRecord = normalizeLogValue(record) as LogRecord;\n\n return {\n id: randomUUID(),\n timestamp: parseTimestamp(record.timestamp),\n level: record.level,\n message: record.message,\n caller: normalizeNullableString(record.caller),\n type: normalizeNullableString(record.type),\n groupId: normalizeNullableString(record.groupId),\n method: normalizeNullableString(record.method),\n path: normalizeNullableString(record.path),\n status: normalizeNullableNumber(record.status),\n duration: normalizeNullableNumber(record.duration),\n hasError: normalizedRecord.error != null,\n data: normalizedRecord.data ?? null,\n bindings: (normalizedRecord.bindings as Record<string, unknown> | undefined) ?? null,\n error: (normalizedRecord.error as Record<string, unknown> | undefined) ?? null,\n events: (normalizedRecord.events as unknown[] | undefined) ?? null,\n record: normalizedRecord,\n createdAt: new Date(),\n };\n}\n\nfunction isPrismaAdapter(\n adapter: DatabaseAdapterConfig | undefined\n): adapter is PrismaDatabaseAdapterConfig {\n return !!adapter && adapter.type === 'prisma';\n}\n\nfunction isDrizzleAdapter(\n adapter: DatabaseAdapterConfig | undefined\n): adapter is DrizzleDatabaseAdapterConfig {\n return !!adapter && adapter.type === 'drizzle';\n}\n\nexport function createDatabaseRowWriter(\n config: ResolvedDatabaseLoggerConfig\n): DatabaseRowWriter {\n if (isPrismaAdapter(config.adapter)) {\n return createPrismaRowWriter(config.adapter);\n }\n\n if (isDrizzleAdapter(config.adapter)) {\n return createDrizzleRowWriter(config.adapter);\n }\n\n throw new Error('[Blyp] Unsupported database adapter configuration.');\n}\n","import { createWarnOnceLogger } from '../../shared/once';\nimport type { LogRecord } from '../file-logger';\nimport type { BlypPrimarySink } from '../primary-sink';\nimport type { DatabaseLogRow, ResolvedDatabaseLoggerConfig } from '../../types/database';\nimport { createDatabaseRowWriter, toDatabaseLogRow } from '../../database/helpers';\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nexport class DatabasePrimarySink implements BlypPrimarySink {\n readonly isAsync = true;\n\n readonly isReady = true;\n\n private readonly warnOnce = createWarnOnceLogger(new Set<string>());\n\n private readonly queue: DatabaseLogRow[] = [];\n\n private readonly writer;\n\n private timer: ReturnType<typeof setTimeout> | null = null;\n\n private processing = false;\n\n private closed = false;\n\n private terminalError: Error | null = null;\n\n private activeDispatch: Promise<void> | null = null;\n\n constructor(private readonly config: ResolvedDatabaseLoggerConfig) {\n this.writer = createDatabaseRowWriter(config);\n }\n\n write(record: LogRecord): void {\n if (this.closed) {\n return;\n }\n\n this.enqueue(toDatabaseLogRow(record));\n this.scheduleDispatch();\n }\n\n async flush(): Promise<void> {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n const flushPromise = (async () => {\n await this.drain();\n if (this.terminalError) {\n throw this.terminalError;\n }\n })();\n\n let timeoutHandle: ReturnType<typeof setTimeout> | null = null;\n\n try {\n await Promise.race([\n flushPromise,\n new Promise<never>((_, reject) => {\n timeoutHandle = setTimeout(() => {\n this.warnOnce(\n 'database-flush-timeout',\n `[Blyp] Warning: Timed out flushing database logs after ${this.config.delivery.flushTimeoutMs}ms.`\n );\n reject(new Error('[Blyp] Timed out flushing database logs.'));\n }, this.config.delivery.flushTimeoutMs);\n }),\n ]);\n } finally {\n if (timeoutHandle) {\n clearTimeout(timeoutHandle);\n }\n }\n }\n\n async shutdown(): Promise<void> {\n this.closed = true;\n await this.flush();\n }\n\n private enqueue(row: DatabaseLogRow): void {\n this.queue.push(row);\n\n const overflow = this.queue.length - this.config.delivery.maxQueueSize;\n if (overflow <= 0) {\n return;\n }\n\n this.warnOnce(\n 'database-overflow',\n `[Blyp] Warning: Database log queue exceeded ${this.config.delivery.maxQueueSize} entries. Applying ${this.config.delivery.overflowStrategy} overflow handling.`\n );\n\n if (this.config.delivery.overflowStrategy === 'drop-new') {\n this.queue.splice(this.config.delivery.maxQueueSize);\n return;\n }\n\n this.queue.splice(0, overflow);\n }\n\n private scheduleDispatch(): void {\n if (this.processing) {\n return;\n }\n\n if (this.config.delivery.strategy === 'immediate') {\n void this.drain();\n return;\n }\n\n if (this.queue.length >= this.config.delivery.batchSize) {\n void this.drain();\n return;\n }\n\n if (this.timer) {\n return;\n }\n\n this.timer = setTimeout(() => {\n this.timer = null;\n void this.drain();\n }, this.config.delivery.flushIntervalMs);\n }\n\n private async drain(): Promise<void> {\n if (this.processing) {\n if (this.activeDispatch) {\n await this.activeDispatch;\n }\n return;\n }\n\n this.processing = true;\n this.activeDispatch = this.processQueue();\n\n try {\n await this.activeDispatch;\n } finally {\n this.processing = false;\n this.activeDispatch = null;\n }\n }\n\n private async processQueue(): Promise<void> {\n while (this.queue.length > 0) {\n const batchSize = this.config.delivery.strategy === 'batch'\n ? Math.max(1, this.config.delivery.batchSize)\n : 1;\n const batch = this.queue.splice(0, batchSize);\n\n try {\n await this.insertWithRetry(batch);\n } catch (error) {\n const failure = error instanceof Error\n ? error\n : new Error(String(error ?? 'Unknown database logging failure'));\n this.terminalError = failure;\n this.warnOnce(\n 'database-insert-failure',\n `[Blyp] Warning: Failed to persist logs to the ${this.config.dialect ?? 'database'} database.`,\n failure\n );\n throw failure;\n }\n }\n }\n\n private async insertWithRetry(batch: DatabaseLogRow[]): Promise<void> {\n const maxAttempts = Math.max(1, this.config.delivery.retry.maxRetries + 1);\n let attempt = 0;\n\n while (attempt < maxAttempts) {\n attempt += 1;\n\n try {\n await this.writer.insert(batch);\n return;\n } catch (error) {\n if (attempt >= maxAttempts) {\n throw error;\n }\n\n await delay(this.config.delivery.retry.backoffMs);\n }\n }\n }\n}\n","import { createWarnOnceLogger } from '../shared/once';\nimport type { BlypConfig } from './config';\nimport type { LogRecord } from './file-logger';\nimport type { ResolvedDatabaseLoggerConfig } from '../types/database';\nimport { createFilePrimarySink } from './sinks/file-primary-sink';\nimport { DatabasePrimarySink } from './sinks/database-primary-sink';\n\nexport interface BlypPrimarySink {\n write(record: LogRecord): void;\n flush(): Promise<void>;\n shutdown(): Promise<void>;\n readonly isAsync: boolean;\n readonly isReady: boolean;\n}\n\nclass NoopPrimarySink implements BlypPrimarySink {\n readonly isAsync = false;\n\n readonly isReady = false;\n\n write(_record: LogRecord): void {}\n\n async flush(): Promise<void> {}\n\n async shutdown(): Promise<void> {}\n}\n\nconst warnOnce = createWarnOnceLogger(new Set<string>());\n\nexport function createPrimarySink(config: BlypConfig): BlypPrimarySink {\n if (config.destination !== 'database') {\n return createFilePrimarySink(config);\n }\n\n const databaseConfig = config.database as ResolvedDatabaseLoggerConfig | undefined;\n if (!databaseConfig?.ready) {\n warnOnce(\n 'database-sink-disabled',\n '[Blyp] Warning: Database destination is configured but not ready. Falling back to a no-op primary sink.'\n );\n return new NoopPrimarySink();\n }\n\n return new DatabasePrimarySink(databaseConfig);\n}\n","import type { BlypConfig } from '../core/config';\nimport type { LogRecord } from '../core/file-logger';\nimport { isPlainObject } from '../shared/validation';\n\nexport function isBlypConfig(config: unknown): config is BlypConfig {\n return isPlainObject(config) && (\n 'connectors' in config ||\n 'pretty' in config ||\n 'level' in config\n );\n}\n\nexport function getPrimaryPayload(record: LogRecord): Record<string, unknown> {\n return isPlainObject(record.data) ? record.data : record;\n}\n\nexport function getField<T extends string | number>(\n record: LogRecord,\n key: string\n): T | undefined {\n if (key in record) {\n const direct = record[key];\n if (typeof direct === 'string' || typeof direct === 'number') {\n return direct as T;\n }\n }\n\n const payload = getPrimaryPayload(record);\n const nested = payload[key];\n if (typeof nested === 'string' || typeof nested === 'number') {\n return nested as T;\n }\n\n return undefined;\n}\n\nexport function getClientPageField(\n record: LogRecord,\n key: 'pathname' | 'url'\n): string | undefined {\n const payload = getPrimaryPayload(record);\n const page = isPlainObject(payload.page) ? payload.page : undefined;\n const value = page?.[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nexport function getClientSessionField(\n record: LogRecord,\n key: 'sessionId' | 'pageId'\n): string | undefined {\n const payload = getPrimaryPayload(record);\n const session = isPlainObject(payload.session) ? payload.session : undefined;\n const value = session?.[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nexport function getRecordType(record: LogRecord): string | undefined {\n return getField<string>(record, 'type');\n}\n","import * as Sentry from '@sentry/node';\nimport { Logtail } from '@logtail/node';\nimport type {\n BetterStackConnectorConfig,\n BlypConfig,\n ResolvedBetterStackConnectorConfig,\n} from '../../core/config';\nimport type { LogRecord } from '../../core/file-logger';\nimport { serializeLogRecord } from '../../core/file-logger';\nimport { createErrorOnceLogger } from '../../shared/once';\nimport { hasNonEmptyString, isAbsoluteHttpUrl, isPlainObject } from '../../shared/validation';\nimport type {\n BetterStackClientLike,\n BetterStackExceptionCaptureOptions,\n BetterStackLogSource,\n BetterStackSender,\n BetterStackTestHooks,\n} from '../../types/connectors/betterstack';\nimport type { SentryModuleLike } from '../../types/connectors/sentry';\nimport {\n getClientPageField,\n getClientSessionField,\n getField,\n getPrimaryPayload,\n getRecordType,\n isBlypConfig,\n} from '../shared';\n\nconst PREVIOUSLY_CAPTURED_ERROR_KEY = '__betterstack_previously_captured_error';\nconst warnedKeys = new Set<string>();\nlet testHooks: BetterStackTestHooks = {};\nconst warnOnce = createErrorOnceLogger(warnedKeys);\n\nfunction getSentryModule(): SentryModuleLike {\n return testHooks.module ?? (Sentry as unknown as SentryModuleLike);\n}\n\nfunction resolveConnectorConfig(\n config: BlypConfig | ResolvedBetterStackConnectorConfig | BetterStackConnectorConfig\n): ResolvedBetterStackConnectorConfig {\n const connector = isBlypConfig(config)\n ? config.connectors?.betterstack\n : config;\n const enabled = connector?.enabled ?? false;\n const sourceToken = connector?.sourceToken;\n const ingestingHost = connector?.ingestingHost;\n const errorTrackingEnabled = connector?.errorTracking?.enabled ?? enabled;\n const errorTrackingDsn = connector?.errorTracking?.dsn;\n const errorTrackingReady =\n enabled &&\n errorTrackingEnabled &&\n hasNonEmptyString(errorTrackingDsn);\n const ready =\n enabled &&\n hasNonEmptyString(sourceToken) &&\n isAbsoluteHttpUrl(ingestingHost);\n\n return {\n enabled,\n mode: connector?.mode ?? 'auto',\n sourceToken,\n ingestingHost,\n serviceName: connector?.serviceName ?? 'blyp-app',\n errorTracking: {\n enabled: errorTrackingEnabled,\n dsn: errorTrackingDsn,\n tracesSampleRate: connector?.errorTracking?.tracesSampleRate ?? 1.0,\n environment: connector?.errorTracking?.environment,\n release: connector?.errorTracking?.release,\n ready: errorTrackingReady,\n status: errorTrackingReady ? 'enabled' : 'missing',\n },\n ready,\n status: ready ? 'enabled' : 'missing',\n };\n}\n\nfunction resolveBetterStackLevel(level: string): string {\n switch (level) {\n case 'debug':\n return 'debug';\n case 'warning':\n case 'warn':\n return 'warn';\n case 'error':\n return 'error';\n case 'critical':\n return 'fatal';\n case 'success':\n case 'table':\n case 'info':\n default:\n return 'info';\n }\n}\n\nfunction parseCaller(caller: unknown): { file?: string; line?: number } {\n if (typeof caller !== 'string' || caller.trim().length === 0) {\n return {};\n }\n\n const match = caller.match(/^(.*):(\\d+)$/);\n if (!match) {\n return {};\n }\n\n const file = match[1]?.trim();\n const line = Number.parseInt(match[2] ?? '', 10);\n\n return {\n ...(file ? { file } : {}),\n ...(Number.isFinite(line) ? { line } : {}),\n };\n}\n\nfunction buildContext(\n record: LogRecord,\n connector: ResolvedBetterStackConnectorConfig,\n source: BetterStackLogSource\n): Record<string, unknown> {\n const recordType = getRecordType(record);\n const groupId = getField<string>(record, 'groupId');\n const method = getField<string>(record, 'method');\n const path = getField<string>(record, 'path');\n const status = getField<number>(record, 'status');\n const duration = getField<number>(record, 'duration');\n const pagePath = getClientPageField(record, 'pathname');\n const pageUrl = getClientPageField(record, 'url');\n const sessionId = getClientSessionField(record, 'sessionId');\n const pageId = getClientSessionField(record, 'pageId');\n const runtime = parseCaller(record.caller);\n\n return {\n service: connector.serviceName,\n context: {\n blyp: {\n level: record.level,\n source,\n ...(recordType ? { type: recordType } : {}),\n ...(groupId ? { group_id: groupId } : {}),\n ...(record.caller ? { caller: record.caller } : {}),\n ...(duration !== undefined ? { duration_ms: duration } : {}),\n ...(record.bindings ? { bindings: record.bindings } : {}),\n payload: serializeLogRecord(record),\n },\n ...(method || path || status !== undefined\n ? {\n http: {\n ...(method ? { method } : {}),\n ...(path ? { path } : {}),\n ...(status !== undefined ? { status_code: status } : {}),\n },\n }\n : {}),\n ...(pagePath || pageUrl || sessionId || pageId\n ? {\n client: {\n ...(pagePath ? { page_path: pagePath } : {}),\n ...(pageUrl ? { page_url: pageUrl } : {}),\n ...(sessionId ? { session_id: sessionId } : {}),\n ...(pageId ? { page_id: pageId } : {}),\n },\n }\n : {}),\n ...(Object.keys(runtime).length > 0 ? { runtime } : {}),\n ...(record.data !== undefined ? { data: record.data } : {}),\n ...(record.error !== undefined ? { error: record.error } : {}),\n },\n };\n}\n\nfunction toExceptionCandidate(value: unknown): unknown {\n if (!isPlainObject(value)) {\n return undefined;\n }\n\n const message = typeof value.message === 'string' ? value.message : undefined;\n const name = typeof value.name === 'string' ? value.name : undefined;\n const stack = typeof value.stack === 'string' ? value.stack : undefined;\n\n if (!message && !name && !stack) {\n return undefined;\n }\n\n const error = new Error(message ?? name ?? 'Unknown error');\n error.name = name ?? 'Error';\n if (stack) {\n error.stack = stack;\n }\n\n for (const [key, entry] of Object.entries(value)) {\n if (key === 'message' || key === 'name' || key === 'stack') {\n continue;\n }\n\n ((error as unknown) as Record<string, unknown>)[key] = entry;\n }\n\n return error;\n}\n\nfunction normalizeScopeLevel(level: string): Sentry.SeverityLevel {\n switch (level) {\n case 'debug':\n return 'debug';\n case 'warning':\n case 'warn':\n return 'warning';\n case 'critical':\n return 'fatal';\n case 'error':\n return 'error';\n case 'success':\n case 'table':\n case 'info':\n default:\n return 'info';\n }\n}\n\nfunction normalizeExceptionInput(input: unknown): unknown {\n if (input instanceof Error) {\n return input;\n }\n\n const direct = toExceptionCandidate(input);\n if (direct) {\n return direct;\n }\n\n if (typeof input === 'string') {\n return new Error(input);\n }\n\n return new Error('Unknown Better Stack exception');\n}\n\nfunction isPreviouslyCapturedError(value: unknown): boolean {\n return isPlainObject(value) && value[PREVIOUSLY_CAPTURED_ERROR_KEY] === true;\n}\n\nfunction markCapturedError(value: unknown): void {\n if (!isPlainObject(value) || isPreviouslyCapturedError(value)) {\n return;\n }\n\n try {\n Object.defineProperty(value, PREVIOUSLY_CAPTURED_ERROR_KEY, {\n value: true,\n enumerable: false,\n configurable: true,\n writable: true,\n });\n } catch {\n try {\n value[PREVIOUSLY_CAPTURED_ERROR_KEY] = true;\n } catch {}\n }\n}\n\nfunction createDefaultClient(\n connector: ResolvedBetterStackConnectorConfig\n): BetterStackClientLike {\n return new Logtail(connector.sourceToken ?? '', {\n endpoint: connector.ingestingHost,\n captureStackContext: false,\n }) as BetterStackClientLike;\n}\n\nfunction getClientOptions(client: ReturnType<SentryModuleLike['getClient']>): {\n dsn?: unknown;\n environment?: unknown;\n release?: unknown;\n} {\n return client?.getOptions?.() ?? {};\n}\n\nfunction registerShutdownHooks(key: string, flush: () => Promise<void>): void {\n const handlers: Array<NodeJS.Signals | 'beforeExit'> = ['beforeExit', 'SIGINT', 'SIGTERM'];\n\n for (const event of handlers) {\n process.once(event, () => {\n void flush().catch((error) => {\n warnOnce(\n `${key}:shutdown`,\n '[Blyp] Failed to flush Better Stack logs during shutdown.',\n error\n );\n });\n });\n }\n}\n\nexport function createBetterStackSender(\n config: BlypConfig | ResolvedBetterStackConnectorConfig | BetterStackConnectorConfig\n): BetterStackSender {\n const connector = resolveConnectorConfig(config);\n const key = `${connector.serviceName}:${connector.ingestingHost ?? 'missing'}:${connector.mode}`;\n const sentryModule = getSentryModule();\n const client = connector.ready\n ? (testHooks.createClient?.(connector) ?? createDefaultClient(connector))\n : undefined;\n let sentryClient = connector.errorTracking.enabled\n ? sentryModule?.getClient?.()\n : undefined;\n\n if (sentryClient) {\n const options = getClientOptions(sentryClient);\n if (\n (hasNonEmptyString(connector.errorTracking.dsn) && connector.errorTracking.dsn !== options.dsn) ||\n (hasNonEmptyString(connector.errorTracking.environment) && connector.errorTracking.environment !== options.environment) ||\n (hasNonEmptyString(connector.errorTracking.release) && connector.errorTracking.release !== options.release)\n ) {\n warnOnce(\n `betterstack-error-mismatch:${key}`,\n '[Blyp] Sentry is already initialized with different options. Reusing the existing Sentry client for Better Stack error tracking.'\n );\n }\n }\n\n if (\n !sentryClient &&\n connector.errorTracking.enabled &&\n hasNonEmptyString(connector.errorTracking.dsn) &&\n sentryModule\n ) {\n try {\n sentryModule.init({\n dsn: connector.errorTracking.dsn,\n tracesSampleRate: connector.errorTracking.tracesSampleRate,\n environment: connector.errorTracking.environment,\n release: connector.errorTracking.release,\n });\n sentryClient = sentryModule.getClient();\n } catch (error) {\n warnOnce(\n `betterstack-error-init:${key}`,\n '[Blyp] Failed to initialize Better Stack error tracking.',\n error\n );\n }\n }\n\n const errorTrackingReady = connector.errorTracking.enabled && sentryClient !== undefined;\n\n if (client || errorTrackingReady) {\n registerShutdownHooks(key, async () => {\n if (client) {\n await client.flush();\n }\n if (errorTrackingReady) {\n await sentryModule.flush(2000);\n }\n });\n }\n\n const emitUnavailableWarning = (): void => {\n warnOnce(\n `betterstack-unavailable:${key}`,\n '[Blyp] Better Stack connector is not configured or not ready. Skipping Better Stack delivery.'\n );\n };\n\n const emitExceptionUnavailableWarning = (): void => {\n warnOnce(\n `betterstack-exception-unavailable:${key}`,\n '[Blyp] Better Stack error tracking is not configured. Skipping Better Stack exception capture.'\n );\n };\n\n return {\n enabled: connector.enabled,\n ready: connector.ready,\n mode: connector.mode,\n serviceName: connector.serviceName,\n ingestingHost: connector.ingestingHost,\n status: connector.status,\n errorTracking: {\n enabled: connector.errorTracking.enabled,\n ready: errorTrackingReady,\n status: errorTrackingReady ? 'enabled' : 'missing',\n dsn: connector.errorTracking.dsn,\n tracesSampleRate: connector.errorTracking.tracesSampleRate,\n environment: connector.errorTracking.environment,\n release: connector.errorTracking.release,\n },\n shouldAutoForwardServerLogs() {\n return connector.ready && connector.mode === 'auto';\n },\n shouldAutoCaptureExceptions() {\n return errorTrackingReady;\n },\n send(record, options = {}) {\n if (!connector.ready || !client) {\n if (options.warnIfUnavailable) {\n emitUnavailableWarning();\n }\n return;\n }\n\n const source = options.source ?? 'server';\n void client.log(\n record.message,\n resolveBetterStackLevel(record.level),\n buildContext(record, connector, source)\n ).catch((error) => {\n warnOnce(\n `betterstack-send:${key}`,\n '[Blyp] Failed to deliver log to Better Stack.',\n error\n );\n });\n },\n captureException(error, options: BetterStackExceptionCaptureOptions = {}) {\n if (!errorTrackingReady || !sentryModule) {\n if (options.warnIfUnavailable) {\n emitExceptionUnavailableWarning();\n }\n return;\n }\n\n if (isPreviouslyCapturedError(error)) {\n return;\n }\n\n try {\n const exception = normalizeExceptionInput(error);\n sentryModule.withScope((scope) => {\n scope.setLevel(\n normalizeScopeLevel(\n options.source === 'client' ? 'error' : 'error'\n )\n );\n scope.setContext('blyp', {\n source: options.source ?? 'server',\n ...(options.context ? { context: options.context } : {}),\n });\n sentryModule.captureException(exception);\n });\n markCapturedError(error);\n markCapturedError(exception);\n } catch (captureError) {\n warnOnce(\n `betterstack-manual-capture:${key}`,\n '[Blyp] Failed to capture exception in Better Stack error tracking.',\n captureError\n );\n }\n },\n async flush() {\n if (!client) {\n if (!errorTrackingReady || !sentryModule) {\n return;\n }\n }\n\n try {\n if (client) {\n await client.flush();\n }\n if (errorTrackingReady && sentryModule) {\n await sentryModule.flush(2000);\n }\n } catch (error) {\n warnOnce(\n `betterstack-flush:${key}`,\n '[Blyp] Failed to flush Better Stack logs.',\n error\n );\n }\n },\n };\n}\n\nexport function setBetterStackTestHooks(hooks: BetterStackTestHooks): void {\n testHooks = hooks;\n}\n\nexport function resetBetterStackTestHooks(): void {\n testHooks = {};\n warnedKeys.clear();\n}\n","import { Databuddy } from '@databuddy/sdk/node';\nimport type {\n BlypConfig,\n DatabuddyConnectorConfig,\n ResolvedDatabuddyConnectorConfig,\n} from '../../core/config';\nimport type { LogRecord } from '../../core/file-logger';\nimport { serializeLogRecord } from '../../core/file-logger';\nimport { normalizeLogValue } from '../../shared/log-value';\nimport { createErrorOnceLogger } from '../../shared/once';\nimport { hasNonEmptyString, isPlainObject } from '../../shared/validation';\nimport type {\n DatabuddyCaptureExceptionOptions,\n DatabuddyClientLike,\n DatabuddySender,\n DatabuddySource,\n DatabuddyTestHooks,\n DatabuddyTrackEvent,\n} from '../../types/connectors/databuddy';\nimport {\n getClientPageField,\n getClientSessionField,\n getField,\n getPrimaryPayload,\n getRecordType,\n isBlypConfig,\n} from '../shared';\n\nconst warnedKeys = new Set<string>();\nconst senderCache = new Map<string, DatabuddySender>();\nlet testHooks: DatabuddyTestHooks = {};\nconst warnOnce = createErrorOnceLogger(warnedKeys);\n\nfunction registerShutdownHooks(key: string, shutdown: () => Promise<void>): void {\n const handlers: Array<NodeJS.Signals | 'beforeExit'> = ['beforeExit', 'SIGINT', 'SIGTERM'];\n\n for (const event of handlers) {\n process.once(event, () => {\n void shutdown().catch((error) => {\n warnOnce(\n `${key}:shutdown`,\n '[Blyp] Failed to flush Databuddy telemetry during shutdown.',\n error\n );\n });\n });\n }\n}\n\nfunction resolveConnectorConfig(\n config: BlypConfig | ResolvedDatabuddyConnectorConfig | DatabuddyConnectorConfig\n): ResolvedDatabuddyConnectorConfig {\n const connector = isBlypConfig(config)\n ? config.connectors?.databuddy\n : config;\n const enabled = connector?.enabled ?? false;\n const apiKey = connector?.apiKey;\n const websiteId = connector?.websiteId;\n const ready = enabled && hasNonEmptyString(apiKey) && hasNonEmptyString(websiteId);\n\n return {\n enabled,\n mode: connector?.mode ?? 'auto',\n apiKey,\n websiteId,\n namespace: connector?.namespace,\n source: connector?.source,\n apiUrl: connector?.apiUrl,\n debug: connector?.debug ?? false,\n enableBatching: connector?.enableBatching ?? true,\n batchSize: connector?.batchSize,\n batchTimeout: connector?.batchTimeout,\n maxQueueSize: connector?.maxQueueSize,\n ready,\n status: ready ? 'enabled' : 'missing',\n };\n}\n\nfunction createDefaultClient(\n connector: ResolvedDatabuddyConnectorConfig\n): DatabuddyClientLike {\n return new Databuddy({\n apiKey: connector.apiKey ?? '',\n ...(connector.websiteId ? { websiteId: connector.websiteId } : {}),\n ...(connector.namespace ? { namespace: connector.namespace } : {}),\n ...(connector.source ? { source: connector.source } : {}),\n ...(connector.apiUrl ? { apiUrl: connector.apiUrl } : {}),\n debug: connector.debug,\n enableBatching: connector.enableBatching,\n ...(connector.batchSize !== undefined ? { batchSize: connector.batchSize } : {}),\n ...(connector.batchTimeout !== undefined ? { batchTimeout: connector.batchTimeout } : {}),\n ...(connector.maxQueueSize !== undefined ? { maxQueueSize: connector.maxQueueSize } : {}),\n });\n}\n\nfunction getDatabuddySenderKey(\n connector: ResolvedDatabuddyConnectorConfig\n): string {\n return JSON.stringify({\n enabled: connector.enabled,\n mode: connector.mode,\n apiKey: connector.apiKey ?? null,\n websiteId: connector.websiteId ?? null,\n namespace: connector.namespace ?? null,\n source: connector.source ?? null,\n apiUrl: connector.apiUrl ?? null,\n debug: connector.debug,\n enableBatching: connector.enableBatching,\n batchSize: connector.batchSize ?? null,\n batchTimeout: connector.batchTimeout ?? null,\n maxQueueSize: connector.maxQueueSize ?? null,\n });\n}\n\nfunction getSessionId(record: LogRecord): string | undefined {\n const direct = getField<string>(record, 'sessionId');\n if (hasNonEmptyString(direct)) {\n return direct;\n }\n\n return getClientSessionField(record, 'sessionId');\n}\n\nfunction getAnonymousId(record: LogRecord): string | undefined {\n const direct = getField<string>(record, 'anonymousId');\n if (hasNonEmptyString(direct)) {\n return direct;\n }\n\n const payload = getPrimaryPayload(record);\n if (isPlainObject(payload.metadata) && hasNonEmptyString(payload.metadata.databuddyAnonymousId)) {\n return payload.metadata.databuddyAnonymousId;\n }\n\n return undefined;\n}\n\nfunction getDatabuddyEventName(record: LogRecord): string {\n const recordType = getRecordType(record);\n if (hasNonEmptyString(recordType)) {\n return recordType;\n }\n\n return 'log';\n}\n\nfunction buildRecordProperties(\n record: LogRecord,\n source: DatabuddySource\n): Record<string, unknown> {\n const properties: Record<string, unknown> = {\n blyp_level: record.level,\n blyp_source: source,\n blyp_payload: serializeLogRecord(record),\n message: typeof record.message === 'string' ? record.message : String(record.message),\n };\n\n const caller = typeof record.caller === 'string' ? record.caller : undefined;\n const groupId = getField<string>(record, 'groupId');\n const method = getField<string>(record, 'method');\n const path = getField<string>(record, 'path');\n const status = getField<number>(record, 'status');\n const duration = getField<number>(record, 'duration');\n const pagePath = getClientPageField(record, 'pathname');\n const pageUrl = getClientPageField(record, 'url');\n const sessionId = getClientSessionField(record, 'sessionId');\n const pageId = getClientSessionField(record, 'pageId');\n\n const ifTruthy: Array<[string, unknown]> = [\n ['blyp_type', getRecordType(record)],\n ['caller', caller],\n ['group_id', groupId],\n ['method', method],\n ['path', path],\n ['page_path', pagePath],\n ['page_url', pageUrl],\n ['session_id', sessionId],\n ['page_id', pageId],\n ];\n const ifDefined: Array<[string, unknown]> = [\n ['status_code', status],\n ['duration_ms', duration],\n ];\n\n for (const [key, value] of ifTruthy) {\n if (value) {\n properties[key] = value;\n }\n }\n\n for (const [key, value] of ifDefined) {\n if (value !== undefined) {\n properties[key] = value;\n }\n }\n\n return properties;\n}\n\nfunction createTrackEvent(\n record: LogRecord,\n source: DatabuddySource\n): DatabuddyTrackEvent {\n return {\n name: getDatabuddyEventName(record),\n anonymousId: getAnonymousId(record),\n sessionId: getSessionId(record),\n properties: buildRecordProperties(record, source),\n };\n}\n\nfunction normalizeExceptionProperties(value: unknown): Record<string, unknown> {\n if (!isPlainObject(value)) {\n return {};\n }\n\n return normalizeLogValue(value) as Record<string, unknown>;\n}\n\nfunction normalizeExceptionInput(\n value: unknown,\n fallbackMessage: string\n): { message: string; properties: Record<string, unknown> } {\n if (value instanceof Error) {\n return {\n message: value.message || fallbackMessage,\n properties: {\n error_type: value.name,\n ...(value.stack ? { stack: value.stack } : {}),\n ...normalizeExceptionProperties(value as unknown as Record<string, unknown>),\n },\n };\n }\n\n if (isPlainObject(value)) {\n const message = hasNonEmptyString(value.message)\n ? value.message\n : hasNonEmptyString(value.error)\n ? value.error\n : fallbackMessage;\n\n return {\n message,\n properties: normalizeExceptionProperties(value),\n };\n }\n\n if (typeof value === 'string') {\n return {\n message: value,\n properties: {\n message: value,\n },\n };\n }\n\n return {\n message: fallbackMessage,\n properties: {\n value: normalizeLogValue(value),\n },\n };\n}\n\nexport function createDatabuddySender(\n config: BlypConfig | ResolvedDatabuddyConnectorConfig | DatabuddyConnectorConfig\n): DatabuddySender {\n const connector = resolveConnectorConfig(config);\n const senderKey = getDatabuddySenderKey(connector);\n const cached = senderCache.get(senderKey);\n\n if (cached) {\n return cached;\n }\n\n const key = `${connector.apiUrl ?? 'default'}:${connector.mode}:${connector.apiKey ?? 'missing'}`;\n const client = connector.ready\n ? (testHooks.createClient?.(connector) ?? createDefaultClient(connector))\n : undefined;\n\n if (client) {\n registerShutdownHooks(key, async () => {\n await client.flush();\n });\n }\n\n const emitUnavailableWarning = (): void => {\n warnOnce(\n `databuddy-unavailable:${key}`,\n '[Blyp] Databuddy connector is not configured. Databuddy requires both apiKey and websiteId. Skipping Databuddy delivery.'\n );\n };\n\n const emitExceptionUnavailableWarning = (): void => {\n warnOnce(\n `databuddy-exception-unavailable:${key}`,\n '[Blyp] Databuddy error tracking is not configured. Databuddy requires both apiKey and websiteId. Skipping Databuddy exception capture.'\n );\n };\n\n const sender: DatabuddySender = {\n enabled: connector.enabled,\n ready: connector.ready,\n mode: connector.mode,\n status: connector.status,\n shouldAutoForwardServerLogs() {\n return connector.ready && connector.mode === 'auto';\n },\n shouldAutoCaptureExceptions() {\n return connector.ready && connector.mode === 'auto';\n },\n send(record, options = {}) {\n if (!connector.ready || !client) {\n if (options.warnIfUnavailable) {\n emitUnavailableWarning();\n }\n return;\n }\n\n try {\n const result = client.track(createTrackEvent(record, options.source ?? 'server'));\n if (result && typeof (result as Promise<void>).catch === 'function') {\n void (result as Promise<void>).catch((error) => {\n warnOnce(\n `databuddy-send:${key}`,\n '[Blyp] Failed to deliver log to Databuddy.',\n error\n );\n });\n }\n } catch (error) {\n warnOnce(\n `databuddy-send:${key}`,\n '[Blyp] Failed to deliver log to Databuddy.',\n error\n );\n }\n },\n captureException(error, options: DatabuddyCaptureExceptionOptions = {}) {\n if (!connector.ready || !client) {\n if (options.warnIfUnavailable) {\n emitExceptionUnavailableWarning();\n }\n return;\n }\n\n const normalized = normalizeExceptionInput(\n error,\n options.source === 'client' ? 'Client error' : 'Server error'\n );\n\n try {\n const result = client.track({\n name: 'error',\n anonymousId: options.anonymousId,\n sessionId: options.sessionId,\n properties: {\n message: normalized.message,\n blyp_source: options.source ?? 'server',\n blyp_level: 'error',\n ...normalized.properties,\n ...(options.properties ?? {}),\n },\n });\n\n if (result && typeof (result as Promise<void>).catch === 'function') {\n void (result as Promise<void>).catch((captureError) => {\n warnOnce(\n `databuddy-capture:${key}`,\n '[Blyp] Failed to capture exception in Databuddy.',\n captureError\n );\n });\n }\n } catch (captureError) {\n warnOnce(\n `databuddy-capture:${key}`,\n '[Blyp] Failed to capture exception in Databuddy.',\n captureError\n );\n }\n },\n async flush() {\n try {\n if (client) {\n await client.flush();\n }\n } catch (error) {\n warnOnce(\n `databuddy-flush:${key}`,\n '[Blyp] Failed to flush Databuddy telemetry.',\n error\n );\n }\n },\n };\n\n senderCache.set(senderKey, sender);\n\n return sender;\n}\n\nexport function setDatabuddyTestHooks(hooks: DatabuddyTestHooks): void {\n testHooks = hooks;\n senderCache.clear();\n}\n\nexport function resetDatabuddyTestHooks(): void {\n testHooks = {};\n senderCache.clear();\n warnedKeys.clear();\n}\n","import { SeverityNumber } from '@opentelemetry/api-logs';\nimport { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { resourceFromAttributes } from '@opentelemetry/resources';\nimport {\n BatchLogRecordProcessor,\n LoggerProvider,\n} from '@opentelemetry/sdk-logs';\nimport { PostHog } from 'posthog-node';\nimport type {\n BlypConfig,\n PostHogConnectorConfig,\n ResolvedPostHogConnectorConfig,\n} from '../../core/config';\nimport type { LogRecord } from '../../core/file-logger';\nimport { serializeLogRecord } from '../../core/file-logger';\nimport { normalizeLogValue } from '../../shared/log-value';\nimport { createErrorOnceLogger } from '../../shared/once';\nimport { hasNonEmptyString, isPlainObject } from '../../shared/validation';\nimport type {\n NormalizedPostHogException,\n PostHogExceptionClient,\n PostHogLogTransport,\n PostHogNormalizedRecord,\n PostHogSender,\n PostHogSource,\n PostHogTestHooks\n} from '../../types/connectors/posthog';\nimport {\n getClientPageField,\n getClientSessionField,\n getField,\n getRecordType,\n isBlypConfig,\n} from '../shared';\n\nconst PREVIOUSLY_CAPTURED_ERROR_KEY = '__posthog_previously_captured_error';\n\nconst warnedKeys = new Set<string>();\nlet testHooks: PostHogTestHooks = {};\nconst warnOnce = createErrorOnceLogger(warnedKeys);\n\nfunction normalizeHost(host: string | undefined): string {\n const trimmed = (host || 'https://us.i.posthog.com').trim();\n return trimmed.replace(/\\/+$/, '');\n}\n\nfunction buildRecordAttributes(\n record: LogRecord,\n source: PostHogSource\n): Record<string, unknown> {\n const recordType = getRecordType(record);\n const caller = typeof record.caller === 'string' ? record.caller : undefined;\n const groupId = getField<string>(record, 'groupId');\n const method = getField<string>(record, 'method');\n const path = getField<string>(record, 'path');\n const status = getField<number>(record, 'status');\n const duration = getField<number>(record, 'duration');\n const pagePath = getClientPageField(record, 'pathname');\n const pageUrl = getClientPageField(record, 'url');\n const sessionId = getClientSessionField(record, 'sessionId');\n const pageId = getClientSessionField(record, 'pageId');\n\n const attributes: Record<string, unknown> = {\n 'blyp.level': record.level,\n 'blyp.source': source,\n 'blyp.payload': serializeLogRecord(record),\n };\n\n const ifTruthy: Array<[string, unknown]> = [\n ['blyp.type', recordType],\n ['blyp.caller', caller],\n ['blyp.group_id', groupId],\n ['http.method', method],\n ['url.path', path],\n ['client.page_path', pagePath],\n ['client.page_url', pageUrl],\n ['client.session_id', sessionId],\n ['client.page_id', pageId],\n ];\n const ifDefined: Array<[string, unknown]> = [\n ['http.status_code', status],\n ['blyp.duration_ms', duration],\n ];\n for (const [k, v] of ifTruthy) if (v) attributes[k] = v;\n for (const [k, v] of ifDefined) if (v !== undefined) attributes[k] = v;\n\n return attributes;\n}\n\nfunction normalizeExceptionProperties(value: unknown): Record<string, unknown> {\n if (!isPlainObject(value)) {\n return {};\n }\n\n return normalizeLogValue(value) as Record<string, unknown>;\n}\n\nfunction assignExceptionField(\n target: Error,\n key: string,\n value: unknown\n): void {\n if (value === undefined) {\n return;\n }\n\n try {\n ((target as unknown) as Record<string, unknown>)[key] = value;\n } catch {}\n}\n\nfunction createSyntheticError(\n message: string,\n source: Record<string, unknown>\n): Error {\n const error = new Error(message);\n const name = hasNonEmptyString(source.name) ? source.name : 'Error';\n error.name = name;\n\n if (hasNonEmptyString(source.stack)) {\n error.stack = source.stack;\n }\n\n assignExceptionField(error, 'cause', source.cause);\n assignExceptionField(error, 'status', source.status);\n assignExceptionField(error, 'statusCode', source.statusCode);\n assignExceptionField(error, 'code', source.code);\n assignExceptionField(error, 'why', source.why);\n assignExceptionField(error, 'fix', source.fix);\n assignExceptionField(error, 'link', source.link);\n assignExceptionField(error, 'details', source.details);\n\n return error;\n}\n\nfunction normalizeExceptionInput(\n input: unknown,\n fallbackMessage: string = 'Unknown error'\n): NormalizedPostHogException {\n if (input instanceof Error) {\n return {\n error: input,\n properties: normalizeExceptionProperties(input as unknown as Record<string, unknown>),\n };\n }\n\n if (isPlainObject(input)) {\n const message = hasNonEmptyString(input.message)\n ? input.message\n : hasNonEmptyString(input.error)\n ? input.error\n : fallbackMessage;\n\n return {\n error: createSyntheticError(message, input),\n properties: normalizeExceptionProperties(input),\n };\n }\n\n if (typeof input === 'string') {\n return {\n error: new Error(input),\n properties: {\n message: input,\n },\n };\n }\n\n return {\n error: new Error(fallbackMessage),\n properties: {\n value: normalizeLogValue(input),\n },\n };\n}\n\nfunction createExceptionPropertiesFromRecord(\n record: LogRecord,\n source: PostHogSource\n): Record<string, unknown> {\n return buildRecordAttributes(record, source);\n}\n\nexport function isPreviouslyCapturedPostHogError(value: unknown): boolean {\n return isPlainObject(value) && value[PREVIOUSLY_CAPTURED_ERROR_KEY] === true;\n}\n\nexport function markPostHogCapturedError(value: unknown): void {\n if (!isPlainObject(value) || isPreviouslyCapturedPostHogError(value)) {\n return;\n }\n\n try {\n Object.defineProperty(value, PREVIOUSLY_CAPTURED_ERROR_KEY, {\n value: true,\n enumerable: false,\n configurable: true,\n writable: true,\n });\n } catch {\n try {\n value[PREVIOUSLY_CAPTURED_ERROR_KEY] = true;\n } catch {}\n }\n}\n\nexport function isClientLogRecord(record: LogRecord): boolean {\n return getRecordType(record) === 'client_log';\n}\n\nexport function normalizePostHogRecord(\n record: LogRecord,\n connector: ResolvedPostHogConnectorConfig,\n source: PostHogSource = 'server'\n): PostHogNormalizedRecord {\n const severity = resolveSeverity(record.level);\n const body = typeof record.message === 'string' ? record.message : String(record.message);\n return {\n body,\n severityText: severity.text,\n severityNumber: severity.number,\n attributes: buildRecordAttributes(record, source),\n resourceAttributes: {\n 'service.name': connector.serviceName,\n },\n };\n}\nfunction resolveSeverity(level: string): { text: string; number: SeverityNumber } {\n switch (level) {\n case 'debug':\n return { text: 'debug', number: SeverityNumber.DEBUG };\n case 'warning':\n case 'warn':\n return { text: 'warn', number: SeverityNumber.WARN };\n case 'error':\n return { text: 'error', number: SeverityNumber.ERROR };\n case 'critical':\n return { text: 'fatal', number: SeverityNumber.FATAL };\n case 'success':\n case 'table':\n case 'info':\n default:\n return { text: 'info', number: SeverityNumber.INFO };\n }\n}\n\nfunction registerShutdownHooks(key: string, shutdown: () => Promise<void>): void {\n const handlers: Array<NodeJS.Signals | 'beforeExit'> = ['beforeExit', 'SIGINT', 'SIGTERM'];\n\n for (const event of handlers) {\n process.once(event, () => {\n void shutdown().catch((error) => {\n warnOnce(\n `${key}:shutdown`,\n '[Blyp] Failed to flush PostHog telemetry during shutdown.',\n error\n );\n });\n });\n }\n}\n\nfunction createDefaultTransport(\n connector: ResolvedPostHogConnectorConfig\n): PostHogLogTransport {\n const exporter = new OTLPLogExporter({\n url: `${normalizeHost(connector.host)}/i/v1/logs`,\n headers: {\n Authorization: `Bearer ${connector.projectKey}`,\n },\n });\n const provider = new LoggerProvider({\n resource: resourceFromAttributes({\n 'service.name': connector.serviceName,\n }),\n processors: [new BatchLogRecordProcessor(exporter)],\n });\n const logger = provider.getLogger('blyp-posthog');\n\n return {\n emit(payload) {\n logger.emit({\n body: payload.body,\n severityText: payload.severityText,\n severityNumber: payload.severityNumber,\n attributes: payload.attributes as never,\n });\n },\n flush() {\n return provider.forceFlush();\n },\n shutdown() {\n return provider.shutdown();\n },\n };\n}\n\nfunction createDefaultExceptionClient(\n connector: ResolvedPostHogConnectorConfig\n): PostHogExceptionClient {\n const client = new PostHog(connector.projectKey ?? '', {\n host: connector.host,\n enableExceptionAutocapture: connector.errorTracking.enableExceptionAutocapture,\n });\n\n return {\n captureException(error, distinctId, additionalProperties) {\n return client.captureExceptionImmediate(error, distinctId, additionalProperties);\n },\n shutdown() {\n return client._shutdown();\n },\n };\n}\n\nfunction resolveConnectorConfig(\n config: BlypConfig | ResolvedPostHogConnectorConfig | PostHogConnectorConfig\n): ResolvedPostHogConnectorConfig {\n const connector = isBlypConfig(config)\n ? config.connectors?.posthog\n : config;\n const enabled = connector?.enabled ?? false;\n const projectKey = connector?.projectKey;\n const errorTrackingEnabled = connector?.errorTracking?.enabled ?? enabled;\n const errorTrackingMode = connector?.errorTracking?.mode ?? 'auto';\n const errorTrackingReady =\n enabled &&\n errorTrackingEnabled &&\n hasNonEmptyString(projectKey);\n\n return {\n enabled,\n mode: connector?.mode ?? 'auto',\n projectKey,\n host: normalizeHost(connector?.host),\n serviceName: connector?.serviceName ?? 'blyp-app',\n errorTracking: {\n enabled: errorTrackingEnabled,\n mode: errorTrackingMode,\n enableExceptionAutocapture:\n connector?.errorTracking?.enableExceptionAutocapture ??\n (errorTrackingMode === 'auto'),\n ready: errorTrackingReady,\n status: errorTrackingReady ? 'enabled' : 'missing',\n },\n };\n}\n\nexport function createPostHogSender(\n config: BlypConfig | ResolvedPostHogConnectorConfig | PostHogConnectorConfig\n): PostHogSender {\n const connector = resolveConnectorConfig(config);\n const key = `${connector.serviceName}:${connector.host}:${connector.mode}`;\n const ready =\n connector.enabled === true &&\n hasNonEmptyString(connector.projectKey);\n const transport = ready\n ? (testHooks.createTransport?.(connector) ?? createDefaultTransport(connector))\n : undefined;\n const exceptionClient = connector.errorTracking.ready\n ? (testHooks.createExceptionClient?.(connector) ?? createDefaultExceptionClient(connector))\n : undefined;\n\n const shutdown = async (): Promise<void> => {\n if (transport?.shutdown) {\n await transport.shutdown();\n } else if (transport?.flush) {\n await transport.flush();\n }\n\n if (exceptionClient?.shutdown) {\n await exceptionClient.shutdown();\n }\n };\n\n if (transport || exceptionClient) {\n registerShutdownHooks(key, shutdown);\n }\n\n const emitUnavailableWarning = (): void => {\n warnOnce(\n `posthog-unavailable:${key}`,\n '[Blyp] PostHog connector is not configured. Skipping PostHog delivery.'\n );\n };\n\n const emitExceptionUnavailableWarning = (): void => {\n warnOnce(\n `posthog-exception-unavailable:${key}`,\n '[Blyp] PostHog error tracking is not configured. Skipping PostHog exception capture.'\n );\n };\n\n return {\n enabled: connector.enabled,\n ready,\n mode: connector.mode,\n serviceName: connector.serviceName,\n host: connector.host,\n status: ready ? 'enabled' : 'missing',\n errorTracking: {\n enabled: connector.errorTracking.enabled,\n ready: connector.errorTracking.ready,\n mode: connector.errorTracking.mode,\n status: connector.errorTracking.status,\n enableExceptionAutocapture: connector.errorTracking.enableExceptionAutocapture,\n },\n shouldAutoForwardServerLogs() {\n return ready && connector.mode === 'auto';\n },\n shouldAutoCaptureExceptions() {\n return connector.errorTracking.ready && connector.errorTracking.mode === 'auto';\n },\n send(record, options = {}) {\n const source = options.source ?? 'server';\n\n if (!ready || !transport) {\n if (options.warnIfUnavailable) {\n emitUnavailableWarning();\n }\n return;\n }\n\n const normalized = normalizePostHogRecord(record, connector, source);\n try {\n const result = transport.emit(normalized);\n if (result && typeof (result as Promise<void>).catch === 'function') {\n void (result as Promise<void>).catch((error) => {\n warnOnce(\n `posthog-emit:${key}`,\n '[Blyp] Failed to deliver log to PostHog.',\n error\n );\n });\n }\n } catch (error) {\n warnOnce(\n `posthog-emit:${key}`,\n '[Blyp] Failed to deliver log to PostHog.',\n error\n );\n }\n },\n captureException(error, options = {}) {\n if (!connector.errorTracking.ready || !exceptionClient) {\n if (options.warnIfUnavailable) {\n emitExceptionUnavailableWarning();\n }\n return;\n }\n\n if (isPreviouslyCapturedPostHogError(error)) {\n return;\n }\n\n const normalized = normalizeExceptionInput(\n error,\n options.source === 'client' ? 'Client error' : 'Server error'\n );\n const properties = {\n ...normalized.properties,\n ...(options.properties ?? {}),\n 'blyp.source': options.source ?? 'server',\n };\n\n try {\n const result = exceptionClient.captureException(\n normalized.error,\n options.distinctId,\n properties\n );\n markPostHogCapturedError(error);\n markPostHogCapturedError(normalized.error);\n if (result && typeof (result as Promise<void>).catch === 'function') {\n void (result as Promise<void>).catch((captureError) => {\n warnOnce(\n `posthog-capture:${key}`,\n '[Blyp] Failed to capture exception in PostHog.',\n captureError\n );\n });\n }\n } catch (captureError) {\n warnOnce(\n `posthog-capture:${key}`,\n '[Blyp] Failed to capture exception in PostHog.',\n captureError\n );\n }\n },\n async flush() {\n try {\n if (transport?.flush) {\n await transport.flush();\n }\n } catch (error) {\n warnOnce(\n `posthog-flush:${key}`,\n '[Blyp] Failed to flush PostHog telemetry.',\n error\n );\n }\n },\n };\n}\n\nexport function buildPostHogExceptionProperties(\n record: LogRecord,\n source: PostHogSource,\n properties: Record<string, unknown> = {}\n): Record<string, unknown> {\n return {\n ...createExceptionPropertiesFromRecord(record, source),\n ...properties,\n };\n}\n\nexport function setPostHogTestHooks(hooks: PostHogTestHooks): void {\n testHooks = hooks;\n}\n\nexport function resetPostHogTestHooks(): void {\n testHooks = {};\n warnedKeys.clear();\n}\n","import * as Sentry from '@sentry/node';\nimport type {\n BlypConfig,\n ResolvedSentryConnectorConfig,\n SentryConnectorConfig,\n} from '../../core/config';\nimport type { LogRecord } from '../../core/file-logger';\nimport { serializeLogRecord } from '../../core/file-logger';\nimport { createErrorOnceLogger } from '../../shared/once';\nimport { hasNonEmptyString, isPlainObject } from '../../shared/validation';\nimport type {\n SentryClientLike,\n SentryLogSource,\n SentryModuleLike,\n SentrySender,\n SentryTestHooks,\n} from '../../types/connectors/sentry';\nimport {\n getClientPageField,\n getClientSessionField,\n getField,\n getPrimaryPayload,\n getRecordType,\n isBlypConfig,\n} from '../shared';\n\nconst warnedKeys = new Set<string>();\nlet testHooks: SentryTestHooks = {};\nconst warnOnce = createErrorOnceLogger(warnedKeys);\n\nfunction getSentryModule(): SentryModuleLike {\n return testHooks.module ?? (Sentry as unknown as SentryModuleLike);\n}\n\nfunction resolveConnectorConfig(\n config: BlypConfig | ResolvedSentryConnectorConfig | SentryConnectorConfig\n): ResolvedSentryConnectorConfig {\n const connector = isBlypConfig(config)\n ? config.connectors?.sentry\n : config;\n const enabled = connector?.enabled ?? false;\n const dsn = connector?.dsn;\n const ready = enabled && hasNonEmptyString(dsn);\n\n return {\n enabled,\n mode: connector?.mode ?? 'auto',\n dsn,\n environment: connector?.environment,\n release: connector?.release,\n ready,\n status: ready ? 'enabled' : 'missing',\n };\n}\n\nfunction normalizeAttributes(\n record: LogRecord,\n source: SentryLogSource\n): Record<string, unknown> {\n const attributes: Record<string, unknown> = {\n 'blyp.level': record.level,\n 'blyp.source': source,\n 'blyp.payload': serializeLogRecord(record),\n };\n const recordType = getRecordType(record);\n const caller = typeof record.caller === 'string' ? record.caller : undefined;\n const groupId = getField<string>(record, 'groupId');\n const method = getField<string>(record, 'method');\n const path = getField<string>(record, 'path');\n const status = getField<number>(record, 'status');\n const duration = getField<number>(record, 'duration');\n const pagePath = getClientPageField(record, 'pathname');\n const pageUrl = getClientPageField(record, 'url');\n const sessionId = getClientSessionField(record, 'sessionId');\n const pageId = getClientSessionField(record, 'pageId');\n\n const ifTruthy: Array<[string, unknown]> = [\n ['blyp.type', recordType],\n ['blyp.caller', caller],\n ['blyp.group_id', groupId],\n ['http.method', method],\n ['url.path', path],\n ['client.page_path', pagePath],\n ['client.page_url', pageUrl],\n ['client.session_id', sessionId],\n ['client.page_id', pageId],\n ];\n const ifDefined: Array<[string, unknown]> = [\n ['http.status_code', status],\n ['blyp.duration_ms', duration],\n ];\n for (const [k, v] of ifTruthy) if (v) attributes[k] = v;\n for (const [k, v] of ifDefined) if (v !== undefined) attributes[k] = v;\n\n return attributes;\n}\n\nfunction resolveLogMethod(\n module: SentryModuleLike,\n level: string\n): (message: string, attributes?: Record<string, unknown>) => void {\n switch (level) {\n case 'debug':\n return module.logger.debug;\n case 'warning':\n case 'warn':\n return module.logger.warn;\n case 'error':\n return module.logger.error;\n case 'critical':\n return module.logger.fatal;\n case 'success':\n case 'table':\n case 'info':\n default:\n return module.logger.info;\n }\n}\n\nfunction normalizeScopeLevel(level: string): Sentry.SeverityLevel {\n switch (level) {\n case 'debug':\n return 'debug';\n case 'warning':\n case 'warn':\n return 'warning';\n case 'critical':\n return 'fatal';\n case 'error':\n return 'error';\n case 'success':\n case 'table':\n case 'info':\n default:\n return 'info';\n }\n}\n\nfunction toExceptionCandidate(value: unknown): unknown {\n if (!isPlainObject(value)) {\n return undefined;\n }\n\n const message = typeof value.message === 'string' ? value.message : undefined;\n const name = typeof value.name === 'string' ? value.name : undefined;\n const stack = typeof value.stack === 'string' ? value.stack : undefined;\n\n if (!message && !name && !stack) {\n return undefined;\n }\n\n const error = new Error(message ?? name ?? 'Unknown error');\n error.name = name ?? 'Error';\n if (stack) {\n error.stack = stack;\n }\n\n for (const [key, entry] of Object.entries(value)) {\n if (key === 'message' || key === 'name' || key === 'stack') {\n continue;\n }\n\n ((error as unknown) as Record<string, unknown>)[key] = entry;\n }\n\n return error;\n}\n\nfunction extractExceptionCandidate(record: LogRecord): unknown {\n if (record.level !== 'error' && record.level !== 'critical') {\n return undefined;\n }\n\n const direct = toExceptionCandidate(record.error);\n if (direct) {\n return direct;\n }\n\n if (isPlainObject(record.data)) {\n const directData = toExceptionCandidate(record.data);\n if (directData) {\n return directData;\n }\n\n const nested = toExceptionCandidate(record.data.error);\n if (nested) {\n return nested;\n }\n }\n\n const payload = getPrimaryPayload(record);\n if (isPlainObject(payload)) {\n const nested = toExceptionCandidate(payload.error);\n if (nested) {\n return nested;\n }\n }\n\n return undefined;\n}\n\nfunction getClientOptions(client: SentryClientLike | undefined): {\n dsn?: unknown;\n environment?: unknown;\n release?: unknown;\n} {\n return client?.getOptions?.() ?? {};\n}\n\nfunction hasConfigMismatch(\n connector: ResolvedSentryConnectorConfig,\n client: SentryClientLike | undefined\n): boolean {\n const options = getClientOptions(client);\n\n return (\n (hasNonEmptyString(connector.dsn) && connector.dsn !== options.dsn) ||\n (hasNonEmptyString(connector.environment) && connector.environment !== options.environment) ||\n (hasNonEmptyString(connector.release) && connector.release !== options.release)\n );\n}\n\nexport function createSentrySender(\n config: BlypConfig | ResolvedSentryConnectorConfig | SentryConnectorConfig\n): SentrySender {\n const connector = resolveConnectorConfig(config);\n const key = `${connector.mode}:${connector.dsn ?? 'missing'}`;\n const module = getSentryModule();\n let client = connector.enabled ? module.getClient() : undefined;\n\n if (!client && connector.enabled && hasNonEmptyString(connector.dsn)) {\n try {\n module.init({\n dsn: connector.dsn,\n environment: connector.environment,\n release: connector.release,\n enableLogs: true,\n });\n client = module.getClient();\n } catch (error) {\n warnOnce(\n `sentry-init:${key}`,\n '[Blyp] Failed to initialize Sentry. Skipping Sentry delivery.',\n error\n );\n }\n }\n\n if (client && hasConfigMismatch(connector, client)) {\n warnOnce(\n `sentry-mismatch:${key}`,\n '[Blyp] Sentry is already initialized with different options. Reusing the existing Sentry client.'\n );\n }\n\n const ready = connector.enabled && client !== undefined;\n\n const emitUnavailableWarning = (): void => {\n warnOnce(\n `sentry-unavailable:${key}`,\n '[Blyp] Sentry connector is not configured. Skipping Sentry delivery.'\n );\n };\n\n return {\n enabled: connector.enabled,\n ready,\n mode: connector.mode,\n status: ready ? 'enabled' : 'missing',\n shouldAutoForwardServerLogs() {\n return ready && connector.mode === 'auto';\n },\n send(record, options = {}) {\n if (!ready) {\n if (options.warnIfUnavailable) {\n emitUnavailableWarning();\n }\n return;\n }\n\n const source = options.source ?? 'server';\n const attributes = normalizeAttributes(record, source);\n const logMethod = resolveLogMethod(module, record.level);\n\n try {\n logMethod(record.message, attributes);\n } catch (error) {\n warnOnce(\n `sentry-log:${key}`,\n '[Blyp] Failed to deliver log to Sentry.',\n error\n );\n }\n\n const exception = extractExceptionCandidate(record);\n if (!exception) {\n return;\n }\n\n try {\n module.withScope((scope) => {\n scope.setLevel(normalizeScopeLevel(record.level));\n scope.setContext('blyp', attributes);\n scope.setExtra('blyp.payload', serializeLogRecord(record));\n module.captureException(exception);\n });\n } catch (error) {\n warnOnce(\n `sentry-exception:${key}`,\n '[Blyp] Failed to capture exception in Sentry.',\n error\n );\n }\n },\n async flush() {\n try {\n await module.flush(2000);\n } catch (error) {\n warnOnce(\n `sentry-flush:${key}`,\n '[Blyp] Failed to flush Sentry logs.',\n error\n );\n }\n },\n };\n}\n\nexport function setSentryTestHooks(hooks: SentryTestHooks): void {\n testHooks = hooks;\n}\n\nexport function resetSentryTestHooks(): void {\n testHooks = {};\n warnedKeys.clear();\n}\n","import { SeverityNumber } from '@opentelemetry/api-logs';\nimport { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { resourceFromAttributes } from '@opentelemetry/resources';\nimport {\n BatchLogRecordProcessor,\n LoggerProvider,\n} from '@opentelemetry/sdk-logs';\nimport type {\n BlypConfig,\n OTLPConnectorConfig,\n ResolvedOTLPConnectorConfig,\n} from '../../core/config';\nimport type { LogRecord } from '../../core/file-logger';\nimport { serializeLogRecord } from '../../core/file-logger';\nimport { createErrorOnceLogger } from '../../shared/once';\nimport { isAbsoluteHttpUrl } from '../../shared/validation';\nimport type {\n OTLPLogSource,\n OTLPNormalizedRecord,\n OTLPRegistry,\n OTLPSender,\n OTLPTestHooks,\n OTLPTransport,\n} from '../../types/connectors/otlp';\nimport {\n getClientPageField,\n getClientSessionField,\n getField,\n getRecordType,\n isBlypConfig,\n} from '../shared';\n\nconst warnedKeys = new Set<string>();\nlet testHooks: OTLPTestHooks = {};\nconst warnOnce = createErrorOnceLogger(warnedKeys);\n\nexport function normalizeOTLPRecord(\n record: LogRecord,\n connector: ResolvedOTLPConnectorConfig,\n source: OTLPLogSource = 'server'\n): OTLPNormalizedRecord {\n const severity = resolveSeverity(record.level);\n const body = typeof record.message === 'string' ? record.message : String(record.message);\n const recordType = getRecordType(record);\n const caller = typeof record.caller === 'string' ? record.caller : undefined;\n const groupId = getField<string>(record, 'groupId');\n const method = getField<string>(record, 'method');\n const path = getField<string>(record, 'path');\n const status = getField<number>(record, 'status');\n const duration = getField<number>(record, 'duration');\n const pagePath = getClientPageField(record, 'pathname');\n const pageUrl = getClientPageField(record, 'url');\n const sessionId = getClientSessionField(record, 'sessionId');\n const pageId = getClientSessionField(record, 'pageId');\n\n const attributes: Record<string, unknown> = {\n 'blyp.level': record.level,\n 'blyp.source': source,\n 'blyp.payload': serializeLogRecord(record),\n };\n\n const ifTruthy: Array<[string, unknown]> = [\n ['blyp.type', recordType],\n ['blyp.caller', caller],\n ['blyp.group_id', groupId],\n ['http.method', method],\n ['url.path', path],\n ['client.page_path', pagePath],\n ['client.page_url', pageUrl],\n ['client.session_id', sessionId],\n ['client.page_id', pageId],\n ];\n const ifDefined: Array<[string, unknown]> = [\n ['http.status_code', status],\n ['blyp.duration_ms', duration],\n ];\n for (const [k, v] of ifTruthy) if (v) attributes[k] = v;\n for (const [k, v] of ifDefined) if (v !== undefined) attributes[k] = v;\n\n return {\n body,\n severityText: severity.text,\n severityNumber: severity.number,\n attributes,\n resourceAttributes: {\n 'service.name': connector.serviceName,\n },\n };\n}\n\nfunction resolveSeverity(level: string): { text: string; number: SeverityNumber } {\n switch (level) {\n case 'debug':\n return { text: 'debug', number: SeverityNumber.DEBUG };\n case 'warning':\n case 'warn':\n return { text: 'warn', number: SeverityNumber.WARN };\n case 'error':\n return { text: 'error', number: SeverityNumber.ERROR };\n case 'critical':\n return { text: 'fatal', number: SeverityNumber.FATAL };\n case 'success':\n case 'table':\n case 'info':\n default:\n return { text: 'info', number: SeverityNumber.INFO };\n }\n}\n\nfunction registerShutdownHooks(key: string, shutdown: () => Promise<void>): void {\n const handlers: Array<NodeJS.Signals | 'beforeExit'> = ['beforeExit', 'SIGINT', 'SIGTERM'];\n\n for (const event of handlers) {\n process.once(event, async () => {\n try {\n await shutdown();\n } catch (error) {\n warnOnce(\n `${key}:shutdown`,\n '[Blyp] Failed to flush OTLP logs during shutdown.',\n error\n );\n }\n if (event !== 'beforeExit') {\n process.exit(0);\n }\n });\n }\n}\n\nfunction resolveTransportHeaders(\n connector: ResolvedOTLPConnectorConfig\n): Record<string, string> {\n const headers = {\n ...(connector.headers ?? {}),\n };\n\n if (headers.Authorization === undefined && connector.auth) {\n headers.Authorization = connector.auth;\n }\n\n return headers;\n}\n\nfunction createDefaultTransport(\n connector: ResolvedOTLPConnectorConfig\n): OTLPTransport {\n const exporter = new OTLPLogExporter({\n url: connector.endpoint,\n headers: resolveTransportHeaders(connector),\n });\n const provider = new LoggerProvider({\n resource: resourceFromAttributes({\n 'service.name': connector.serviceName,\n }),\n processors: [new BatchLogRecordProcessor(exporter)],\n });\n const logger = provider.getLogger(`blyp-otlp:${connector.name}`);\n\n return {\n emit(payload) {\n logger.emit({\n body: payload.body,\n severityText: payload.severityText,\n severityNumber: payload.severityNumber,\n attributes: payload.attributes as never,\n });\n },\n flush() {\n return provider.forceFlush();\n },\n shutdown() {\n return provider.shutdown();\n },\n };\n}\n\nfunction resolveConnectors(\n config: BlypConfig | ResolvedOTLPConnectorConfig[] | OTLPConnectorConfig[]\n): ResolvedOTLPConnectorConfig[] {\n const connectors = isBlypConfig(config)\n ? (config.connectors?.otlp ?? [])\n : config;\n\n return connectors.map((connector) => {\n const headers = {\n ...(connector.headers ?? {}),\n };\n const enabled = connector.enabled ?? false;\n const endpoint = connector.endpoint;\n const explicitReady =\n 'ready' in connector && typeof connector.ready === 'boolean'\n ? connector.ready\n : undefined;\n const ready =\n (explicitReady ?? (enabled && isAbsoluteHttpUrl(endpoint))) &&\n isAbsoluteHttpUrl(endpoint);\n\n return {\n name: connector.name,\n enabled,\n mode: connector.mode ?? 'auto',\n endpoint,\n headers,\n auth: connector.auth,\n serviceName: connector.serviceName ?? 'blyp-app',\n ready,\n status: ready ? 'enabled' : 'missing',\n };\n });\n}\n\nfunction createUnavailableSender(\n name: string,\n connector?: Partial<ResolvedOTLPConnectorConfig>\n): OTLPSender {\n const senderName = name || connector?.name || 'otlp';\n const key = `${senderName}:${connector?.serviceName ?? 'blyp-app'}:${connector?.endpoint ?? 'missing'}`;\n\n const emitUnavailableWarning = (): void => {\n warnOnce(\n `otlp-unavailable:${key}`,\n `[Blyp] OTLP target \"${senderName}\" is not configured or not ready. Skipping OTLP delivery.`\n );\n };\n\n return {\n name: senderName,\n enabled: connector?.enabled ?? false,\n ready: false,\n mode: connector?.mode ?? 'auto',\n serviceName: connector?.serviceName ?? 'blyp-app',\n endpoint: connector?.endpoint,\n status: 'missing',\n send(_record, options = {}) {\n if (options.warnIfUnavailable) {\n emitUnavailableWarning();\n }\n },\n async flush() {},\n };\n}\n\nfunction createSender(connector: ResolvedOTLPConnectorConfig): OTLPSender {\n if (!connector.ready || !connector.endpoint) {\n return createUnavailableSender(connector.name, connector);\n }\n\n const key = `${connector.name}:${connector.serviceName}:${connector.endpoint}:${connector.mode}`;\n const transportConnector: ResolvedOTLPConnectorConfig = {\n ...connector,\n headers: resolveTransportHeaders(connector),\n };\n const transport =\n testHooks.createTransport?.(transportConnector) ??\n createDefaultTransport(transportConnector);\n\n return {\n name: connector.name,\n enabled: connector.enabled,\n ready: connector.ready,\n mode: connector.mode,\n serviceName: connector.serviceName,\n endpoint: connector.endpoint,\n status: connector.status,\n send(record, options = {}) {\n const source = options.source ?? 'server';\n const normalized = normalizeOTLPRecord(record, connector, source);\n\n try {\n const result = transport.emit(normalized);\n if (result && typeof (result as Promise<void>).catch === 'function') {\n void (result as Promise<void>).catch((error) => {\n warnOnce(\n `otlp-emit:${key}`,\n `[Blyp] Failed to deliver log to OTLP target \"${connector.name}\".`,\n error\n );\n });\n }\n } catch (error) {\n warnOnce(\n `otlp-emit:${key}`,\n `[Blyp] Failed to deliver log to OTLP target \"${connector.name}\".`,\n error\n );\n }\n },\n async flush() {\n try {\n if (transport.flush) {\n await transport.flush();\n }\n } catch (error) {\n warnOnce(\n `otlp-flush:${key}`,\n `[Blyp] Failed to flush OTLP logs for target \"${connector.name}\".`,\n error\n );\n }\n },\n };\n}\n\nexport function createOTLPRegistry(\n config: BlypConfig | ResolvedOTLPConnectorConfig[] | OTLPConnectorConfig[]\n): OTLPRegistry {\n const senders = new Map<string, OTLPSender>();\n\n for (const connector of resolveConnectors(config)) {\n senders.set(connector.name, createSender(connector));\n }\n\n const registry: OTLPRegistry = {\n get(name: string) {\n return senders.get(name) ?? createUnavailableSender(name);\n },\n getAutoForwardTargets() {\n return Array.from(senders.values()).filter((sender) => sender.ready && sender.mode === 'auto');\n },\n send(name, record, options = {}) {\n const sender = senders.get(name) ?? createUnavailableSender(name);\n sender.send(record, options);\n },\n async flush() {\n await Promise.all(Array.from(senders.values()).map((sender) => sender.flush()));\n },\n };\n\n registerShutdownHooks('otlp-registry', () => registry.flush());\n\n return registry;\n}\n\nexport function setOTLPTestHooks(hooks: OTLPTestHooks): void {\n testHooks = hooks;\n}\n\nexport function resetOTLPTestHooks(): void {\n testHooks = {};\n warnedKeys.clear();\n}\n","import type { RuntimeAdapter, RuntimeType } from '../types/frameworks/standalone';\nimport fs from 'fs';\nimport path from 'path';\n\nclass RuntimeDetector {\n private static instance: RuntimeDetector;\n private _type: RuntimeType | null = null;\n\n private constructor() {}\n\n static getInstance(): RuntimeDetector {\n if (!RuntimeDetector.instance) {\n RuntimeDetector.instance = new RuntimeDetector();\n }\n return RuntimeDetector.instance;\n }\n\n get type(): RuntimeType {\n if (this._type === null) {\n this._type = this.detectRuntime();\n }\n return this._type;\n }\n\n get isBun(): boolean {\n return this.type === 'bun';\n }\n\n get isNode(): boolean {\n return this.type === 'node';\n }\n\n private detectRuntime(): RuntimeType {\n if (typeof Bun !== 'undefined' && typeof Bun.file === 'function') {\n return 'bun';\n }\n return 'node';\n }\n}\n\nclass BunAdapter implements RuntimeAdapter {\n readonly type = 'bun' as const;\n readonly isBun = true;\n readonly isNode = false;\n\n file = {\n existsSync: (filePath: string): boolean => {\n try {\n const file = Bun.file(filePath);\n return file.size > 0 || file.name !== '';\n } catch {\n return false;\n }\n },\n mkdirSync: (filePath: string, options?: { recursive?: boolean }): void => {\n try {\n fs.mkdirSync(filePath, options);\n } catch {}\n },\n writeFileSync: (filePath: string, data: string): void => {\n Bun.write(filePath, data);\n }\n };\n\n path = {\n join: (...paths: string[]): string => {\n return path.join(...paths);\n }\n };\n\n env = {\n get: (key: string): string | undefined => Bun.env[key]\n };\n\n cwd = (): string => {\n return process.cwd();\n };\n}\n\nclass NodeAdapter implements RuntimeAdapter {\n readonly type = 'node' as const;\n readonly isBun = false;\n readonly isNode = true;\n\n file = {\n existsSync: (filePath: string): boolean => fs.existsSync(filePath),\n mkdirSync: (filePath: string, options?: { recursive?: boolean }): void => {\n fs.mkdirSync(filePath, options);\n },\n writeFileSync: (filePath: string, data: string): void => {\n fs.writeFileSync(filePath, data);\n }\n };\n\n path = {\n join: (...paths: string[]): string => path.join(...paths)\n };\n\n env = {\n get: (key: string): string | undefined => process.env[key]\n };\n\n cwd = (): string => process.cwd();\n}\n\nexport function createRuntimeAdapter(): RuntimeAdapter {\n const detector = RuntimeDetector.getInstance();\n \n if (detector.isBun) {\n return new BunAdapter();\n }\n \n return new NodeAdapter();\n}\n\nexport const runtime = createRuntimeAdapter();\n\nexport function createLogDir(customPath?: string): string {\n const logDir = customPath ?? runtime.path.join(runtime.cwd(), 'logs');\n \n if (!runtime.file.existsSync(logDir)) {\n runtime.file.mkdirSync(logDir, { recursive: true });\n }\n \n return logDir;\n}\n","import type {\n CreateStructuredLogOptions,\n StructuredLog,\n StructuredLogError,\n StructuredLogEvent,\n StructuredLogEmitOptions,\n StructuredLogLevel,\n StructuredLogPayload,\n} from '../types/core/structured-log';\n\nexport type {\n CreateStructuredLogOptions,\n StructuredLog,\n StructuredLogError,\n StructuredLogEvent,\n StructuredLogEmitOptions,\n StructuredLogLevel,\n StructuredLogPayload,\n} from '../types/core/structured-log';\n\nfunction serializeMessage(message: unknown): string {\n if (typeof message === 'string') {\n return message;\n }\n\n if (message !== null && typeof message === 'object') {\n try {\n return JSON.stringify(\n message,\n (_key, value) => {\n if (typeof value === 'function') {\n return `[Function: ${value.name || 'anonymous'}]`;\n }\n\n if (value === undefined) {\n return '[undefined]';\n }\n\n if (typeof value === 'symbol') {\n return value.toString();\n }\n\n return value;\n },\n 2\n );\n } catch {\n return '[Object]';\n }\n }\n\n return String(message);\n}\n\nfunction normalizeEventData(message: unknown, args: unknown[]): unknown {\n if (typeof message === 'string') {\n if (args.length === 0) {\n return undefined;\n }\n\n return args.length === 1 ? args[0] : args;\n }\n\n const values = [message, ...args];\n return values.length === 1 ? values[0] : values;\n}\n\nfunction normalizeDetails(value: unknown): Record<string, unknown> | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return undefined;\n }\n\n return value as Record<string, unknown>;\n}\n\nfunction normalizeError(error: unknown, fallbackStatus?: number): StructuredLogError | undefined {\n if (error === undefined || error === null) {\n return fallbackStatus === undefined || fallbackStatus < 400\n ? undefined\n : {\n message: `HTTP ${fallbackStatus}`,\n code: fallbackStatus,\n type: 'HttpError',\n };\n }\n\n if (error instanceof Error) {\n const errorLike = error as Error & {\n code?: string | number;\n why?: string;\n fix?: string;\n link?: string;\n details?: unknown;\n cause?: unknown;\n type?: string;\n };\n\n return {\n message: error.message,\n code: errorLike.code,\n type: errorLike.type ?? error.name ?? error.constructor?.name,\n stack: error.stack,\n why: errorLike.why,\n fix: errorLike.fix,\n link: errorLike.link,\n details: normalizeDetails(errorLike.details),\n cause: errorLike.cause,\n };\n }\n\n if (typeof error === 'object') {\n const record = error as Record<string, unknown>;\n const statusCode =\n typeof record.statusCode === 'number'\n ? record.statusCode\n : typeof record.status === 'number'\n ? record.status\n : fallbackStatus;\n\n return {\n message:\n typeof record.message === 'string'\n ? record.message\n : `HTTP ${statusCode ?? 500}`,\n code:\n typeof record.code === 'string' || typeof record.code === 'number'\n ? record.code\n : statusCode,\n type:\n typeof record.type === 'string'\n ? record.type\n : typeof record.name === 'string'\n ? record.name\n : 'Error',\n stack: typeof record.stack === 'string' ? record.stack : undefined,\n why: typeof record.why === 'string' ? record.why : undefined,\n fix: typeof record.fix === 'string' ? record.fix : undefined,\n link: typeof record.link === 'string' ? record.link : undefined,\n details: normalizeDetails(record.details),\n cause: record.cause,\n };\n }\n\n return {\n message: String(error),\n code: fallbackStatus,\n type: typeof error,\n };\n}\n\nfunction resolveEmitStatus(options: StructuredLogEmitOptions): number | undefined {\n if (options.response && typeof options.response.status === 'number') {\n return options.response.status;\n }\n\n if (typeof options.status === 'number') {\n return options.status;\n }\n\n if (\n options.error &&\n typeof options.error === 'object' &&\n options.error !== null &&\n typeof (options.error as { statusCode?: unknown }).statusCode === 'number'\n ) {\n return (options.error as { statusCode: number }).statusCode;\n }\n\n if (\n options.error &&\n typeof options.error === 'object' &&\n options.error !== null &&\n typeof (options.error as { status?: unknown }).status === 'number'\n ) {\n return (options.error as { status: number }).status;\n }\n\n return options.error ? 500 : undefined;\n}\n\nexport function createStructuredLog(\n groupId: string,\n options: CreateStructuredLogOptions\n): StructuredLog<Record<string, unknown>> {\n const startedAt = performance.now();\n const fields = { ...(options.initialFields ?? {}) };\n const events: StructuredLogEvent[] = [];\n let emittedPayload: StructuredLogPayload<Record<string, unknown>> | undefined;\n\n options.onCreate?.();\n\n const appendEvent = (\n level: StructuredLogLevel,\n message: unknown,\n args: unknown[]\n ): StructuredLog<Record<string, unknown>> => {\n events.push({\n level,\n message: serializeMessage(message),\n timestamp: new Date().toISOString(),\n ...(normalizeEventData(message, args) === undefined\n ? {}\n : { data: normalizeEventData(message, args) }),\n });\n\n return structuredLog;\n };\n\n const structuredLog: StructuredLog<Record<string, unknown>> = {\n set<TNextFields extends Record<string, unknown>>(extraFields: TNextFields) {\n Object.assign(fields, extraFields);\n return structuredLog as StructuredLog<Record<string, unknown> & TNextFields>;\n },\n\n debug(message, ...args) {\n return appendEvent('debug', message, args);\n },\n\n info(message, ...args) {\n return appendEvent('info', message, args);\n },\n\n warn(message, ...args) {\n return appendEvent('warn', message, args);\n },\n\n warning(message, ...args) {\n return appendEvent('warning', message, args);\n },\n\n error(message, ...args) {\n return appendEvent('error', message, args);\n },\n\n success(message, ...args) {\n return appendEvent('success', message, args);\n },\n\n critical(message, ...args) {\n return appendEvent('critical', message, args);\n },\n\n table(message, data) {\n return appendEvent('table', message, data === undefined ? [] : [data]);\n },\n\n emit(emitOptions = {}) {\n if (emittedPayload) {\n return emittedPayload;\n }\n\n const defaultFields = options.resolveDefaultFields?.() ?? {};\n const status = resolveEmitStatus(emitOptions);\n const error = normalizeError(emitOptions.error, status);\n const level = emitOptions.level ?? (error ? 'error' : 'info');\n const payload: StructuredLogPayload<Record<string, unknown>> = {\n ...defaultFields,\n ...fields,\n groupId,\n timestamp: new Date().toISOString(),\n level,\n duration: Math.round(performance.now() - startedAt),\n ...(typeof status === 'number' ? { status } : {}),\n ...(events.length > 0 ? { events: [...events] } : {}),\n ...(error ? { error } : {}),\n };\n\n options.write(payload, emitOptions.message ?? 'structured_log');\n emittedPayload = payload;\n options.onEmit?.(payload);\n return payload;\n },\n };\n\n return structuredLog;\n}\n","import pino from 'pino';\nimport { shouldDropRootLogWrite } from '../frameworks/shared/request-context';\nimport { type BlypConfig, resolveConfig } from './config';\nimport {\n buildRecord,\n buildStructuredRecord,\n resolveStructuredWriteLevel,\n serializeMessage,\n} from './log-record';\nimport type { LogMethodName } from '../types/core/log-record';\nimport { createPrimarySink } from './primary-sink';\nimport type { BlypPrimarySink } from './primary-sink';\nimport {\n createBetterStackSender,\n} from '../connectors/betterstack/sender';\nimport {\n createDatabuddySender,\n} from '../connectors/databuddy/sender';\nimport {\n createPostHogSender,\n isClientLogRecord,\n} from '../connectors/posthog/sender';\nimport {\n createSentrySender,\n} from '../connectors/sentry/sender';\nimport {\n createOTLPRegistry,\n} from '../connectors/otlp/sender';\nimport type { BetterStackSender } from '../types/connectors/betterstack';\nimport type { DatabuddySender } from '../types/connectors/databuddy';\nimport type { PostHogSender } from '../types/connectors/posthog';\nimport type { SentrySender } from '../types/connectors/sentry';\nimport type { OTLPRegistry } from '../types/connectors/otlp';\nimport { runtime } from './runtime';\nimport {\n createStructuredLog as createStructuredLogCollector,\n} from './structured-log';\nimport type { StructuredLog, StructuredLogPayload } from '../types/core/structured-log';\nimport type {\n BlypLogger,\n InternalBlypLogger,\n InternalLoggerSource,\n LoggerFactoryHandle,\n StructuredLogFactoryOptions,\n} from '../types/core/logger';\n\nexport type { BlypLogger } from '../types/core/logger';\n\nconst LOGGER_FACTORY = Symbol('blyp.logger.factory');\n\nexport const CUSTOM_LEVELS: Record<string, number> = {\n success: 25,\n info: 30,\n debug: 35,\n table: 37,\n warning: 40,\n error: 50,\n critical: 60,\n};\n\nconst CONSOLE_LEVELS: Record<LogMethodName, string> = {\n success: 'success',\n critical: 'critical',\n warning: 'warning',\n info: 'info',\n debug: 'debug',\n error: 'error',\n warn: 'warn',\n table: 'debug',\n};\n\nconst MAGENTA = '\\x1b[35m';\nconst RESET = '\\x1b[0m';\n\nfunction summarizeClientConsoleData(data: unknown): Record<string, unknown> | null {\n if (!data || typeof data !== 'object' || Array.isArray(data)) {\n return null;\n }\n\n const record = data as {\n data?: unknown;\n metadata?: unknown;\n page?: { pathname?: unknown; url?: unknown };\n };\n const summary: Record<string, unknown> = {};\n\n if (record.data !== undefined) {\n summary.data = record.data;\n }\n\n const pathname = typeof record.page?.pathname === 'string'\n ? record.page.pathname\n : undefined;\n const url = typeof record.page?.url === 'string'\n ? record.page.url\n : undefined;\n\n if (pathname || url) {\n summary.page = pathname ?? url;\n }\n\n if (record.metadata !== undefined) {\n summary.metadata = record.metadata;\n }\n\n return Object.keys(summary).length > 0 ? summary : null;\n}\n\nfunction getConsoleDataPayload(data: unknown): { hidden: boolean; value?: unknown } {\n if (!data || typeof data !== 'object' || Array.isArray(data)) {\n return { hidden: false, value: data };\n }\n\n const record = data as { type?: unknown };\n if (record.type === 'http_request' || record.type === 'http_error') {\n return { hidden: true };\n }\n\n if (record.type === 'client_log') {\n const summary = summarizeClientConsoleData(data);\n if (!summary) {\n return { hidden: true };\n }\n\n return {\n hidden: false,\n value: summary,\n };\n }\n\n return { hidden: false, value: data };\n}\n\nfunction createPinoLogger(config: BlypConfig) {\n if (config.pretty) {\n const pinoPretty = require('pino-pretty');\n const pretty = pinoPretty.default({\n colorize: true,\n translateTime: 'SYS:HH:MM:ss',\n ignore: 'pid,hostname,caller',\n customColors: {\n success: 'green',\n critical: 'red bold',\n info: 'blue',\n warning: 'yellow',\n error: 'red',\n debug: 'cyan',\n table: 'cyan',\n },\n messageFormat: (log: Record<string, unknown>, messageKey: string) => {\n const message = String(log[messageKey] ?? '');\n const caller = typeof log.caller === 'string' ? log.caller.trim() : '';\n\n if (!caller) {\n return message;\n }\n\n return `${message} ${MAGENTA}${caller}${RESET}`;\n },\n });\n return pino(\n {\n level: config.level,\n customLevels: CUSTOM_LEVELS,\n },\n pretty\n );\n }\n\n return pino({\n level: config.level,\n customLevels: CUSTOM_LEVELS,\n });\n}\n\nfunction getLoggerFactory(logger: BlypLogger): LoggerFactoryHandle {\n const factory = (logger as InternalBlypLogger)[LOGGER_FACTORY];\n if (!factory) {\n throw new Error('Unsupported Blyp logger instance');\n }\n\n return factory;\n}\n\nexport function getPostHogSender(logger: BlypLogger): PostHogSender {\n return getLoggerFactory(logger).posthog;\n}\n\nexport function getBetterStackSender(logger: BlypLogger): BetterStackSender {\n return getLoggerFactory(logger).betterstack;\n}\n\nexport function getDatabuddySender(logger: BlypLogger): DatabuddySender {\n return getLoggerFactory(logger).databuddy;\n}\n\nexport function tryGetPostHogSender(logger: unknown): PostHogSender | null {\n try {\n return getPostHogSender(logger as BlypLogger);\n } catch {\n return null;\n }\n}\n\nexport function tryGetBetterStackSender(logger: unknown): BetterStackSender | null {\n try {\n return getBetterStackSender(logger as BlypLogger);\n } catch {\n return null;\n }\n}\n\nexport function tryGetDatabuddySender(logger: unknown): DatabuddySender | null {\n try {\n return getDatabuddySender(logger as BlypLogger);\n } catch {\n return null;\n }\n}\n\nexport function getSentrySender(logger: BlypLogger): SentrySender {\n return getLoggerFactory(logger).sentry;\n}\n\nexport function getOtlpRegistry(logger: BlypLogger): OTLPRegistry {\n return getLoggerFactory(logger).otlp;\n}\n\nexport function attachLoggerInternals<T extends BlypLogger>(target: T, source: BlypLogger): T {\n const factory = getLoggerFactory(source);\n Object.defineProperty(target, LOGGER_FACTORY, {\n value: factory,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return target;\n}\n\nexport function createLoggerWithSource(\n logger: BlypLogger,\n source: InternalLoggerSource\n): BlypLogger {\n const factory = getLoggerFactory(logger);\n return factory.create(source, factory.bindings);\n}\n\nexport function createStructuredLogForLogger(\n logger: BlypLogger,\n groupId: string,\n options: StructuredLogFactoryOptions = {}\n): StructuredLog {\n const factory = getLoggerFactory(logger);\n\n return createStructuredLogCollector(groupId, {\n initialFields: options.initialFields,\n resolveDefaultFields: () => ({\n ...factory.bindings,\n ...(options.resolveDefaultFields?.() ?? {}),\n }),\n write: (payload, message) => {\n factory.writeStructured(payload, message, 'structured-flush');\n },\n onCreate: options.onCreate,\n onEmit: options.onEmit,\n });\n}\n\nfunction maybeSendToPostHog(\n posthog: PostHogSender,\n record: ReturnType<typeof buildRecord> | ReturnType<typeof buildStructuredRecord>\n): void {\n if (isClientLogRecord(record)) {\n return;\n }\n\n if (!posthog.shouldAutoForwardServerLogs()) {\n if (posthog.enabled && !posthog.ready) {\n posthog.send(record, { source: 'server', warnIfUnavailable: true });\n }\n return;\n }\n\n posthog.send(record, { source: 'server', warnIfUnavailable: true });\n}\n\nfunction maybeSendToBetterStack(\n betterstack: BetterStackSender,\n record: ReturnType<typeof buildRecord> | ReturnType<typeof buildStructuredRecord>\n): void {\n if (isClientLogRecord(record)) {\n return;\n }\n\n if (!betterstack.shouldAutoForwardServerLogs()) {\n if (betterstack.enabled && !betterstack.ready) {\n betterstack.send(record, { source: 'server', warnIfUnavailable: true });\n }\n return;\n }\n\n betterstack.send(record, { source: 'server', warnIfUnavailable: true });\n}\n\nfunction maybeSendToDatabuddy(\n databuddy: DatabuddySender,\n record: ReturnType<typeof buildRecord> | ReturnType<typeof buildStructuredRecord>\n): void {\n if (isClientLogRecord(record)) {\n return;\n }\n\n if (!databuddy.shouldAutoForwardServerLogs()) {\n if (databuddy.enabled && !databuddy.ready) {\n databuddy.send(record, { source: 'server', warnIfUnavailable: true });\n }\n return;\n }\n\n databuddy.send(record, { source: 'server', warnIfUnavailable: true });\n}\n\nfunction maybeSendToSentry(\n sentry: SentrySender,\n record: ReturnType<typeof buildRecord> | ReturnType<typeof buildStructuredRecord>\n): void {\n if (isClientLogRecord(record)) {\n return;\n }\n\n if (!sentry.shouldAutoForwardServerLogs()) {\n if (sentry.enabled && !sentry.ready) {\n sentry.send(record, { source: 'server', warnIfUnavailable: true });\n }\n return;\n }\n\n sentry.send(record, { source: 'server', warnIfUnavailable: true });\n}\n\nfunction maybeSendToOTLP(\n otlp: OTLPRegistry,\n record: ReturnType<typeof buildRecord> | ReturnType<typeof buildStructuredRecord>\n): void {\n if (isClientLogRecord(record)) {\n return;\n }\n\n for (const sender of otlp.getAutoForwardTargets()) {\n sender.send(record, { source: 'server', warnIfUnavailable: true });\n }\n}\n\nfunction createLoggerInstance(\n rootRawLogger: any,\n sink: BlypPrimarySink,\n betterstack: BetterStackSender,\n databuddy: DatabuddySender,\n posthog: PostHogSender,\n sentry: SentrySender,\n otlp: OTLPRegistry,\n bindings: Record<string, unknown> = {},\n source: InternalLoggerSource = 'root'\n): BlypLogger {\n const rawLogger = Object.keys(bindings).length > 0\n ? rootRawLogger.child(bindings)\n : rootRawLogger;\n\n const writeRecord = (\n level: LogMethodName,\n message: unknown,\n args: unknown[],\n writeSource: InternalLoggerSource = source\n ): void => {\n if (writeSource === 'root' && shouldDropRootLogWrite()) {\n return;\n }\n\n const record = buildRecord(level, message, args, bindings);\n const consoleMessage = serializeMessage(message);\n const payload: Record<string, unknown> = {\n caller: record.caller,\n };\n const consoleData = getConsoleDataPayload(record.data);\n\n if (!consoleData.hidden && consoleData.value !== undefined) {\n payload.data = consoleData.value;\n }\n\n const consoleMethod = CONSOLE_LEVELS[level];\n const boundLogger = rawLogger as Record<string, (payload: unknown, message: string) => void>;\n const logMethod =\n boundLogger[consoleMethod] ??\n boundLogger.info ??\n ((_payload: unknown, _message: string) => {});\n\n (logMethod as (this: unknown, payload: unknown, message: string) => void).call(\n rawLogger,\n payload,\n consoleMessage\n );\n sink.write(record);\n maybeSendToBetterStack(betterstack, record);\n maybeSendToDatabuddy(databuddy, record);\n maybeSendToPostHog(posthog, record);\n maybeSendToSentry(sentry, record);\n maybeSendToOTLP(otlp, record);\n };\n\n const writeStructuredRecord = (\n payload: StructuredLogPayload,\n message: string,\n writeSource: InternalLoggerSource = 'structured-flush'\n ): void => {\n const level = resolveStructuredWriteLevel(payload.level);\n const record = buildStructuredRecord(level, message, payload, bindings);\n const consoleMethod = CONSOLE_LEVELS[level];\n const boundLogger = rawLogger as Record<string, (payload: unknown, message: string) => void>;\n const logMethod =\n boundLogger[consoleMethod] ??\n boundLogger.info ??\n ((_payload: unknown, _message: string) => {});\n\n (logMethod as (this: unknown, payload: unknown, message: string) => void).call(\n rawLogger,\n {\n caller: record.caller,\n ...payload,\n },\n message\n );\n\n if (writeSource !== 'root' || !shouldDropRootLogWrite()) {\n sink.write(record);\n }\n\n maybeSendToBetterStack(betterstack, record);\n maybeSendToDatabuddy(databuddy, record);\n maybeSendToPostHog(posthog, record);\n maybeSendToSentry(sentry, record);\n maybeSendToOTLP(otlp, record);\n };\n\n const logger: InternalBlypLogger = {\n success: (message: unknown, ...args: unknown[]) => {\n writeRecord('success', message, args);\n },\n\n critical: (message: unknown, ...args: unknown[]) => {\n writeRecord('critical', message, args);\n },\n\n warning: (message: unknown, ...args: unknown[]) => {\n writeRecord('warning', message, args);\n },\n\n info: (message: unknown, ...args: unknown[]) => {\n writeRecord('info', message, args);\n },\n\n debug: (message: unknown, ...args: unknown[]) => {\n writeRecord('debug', message, args);\n },\n\n error: (message: unknown, ...args: unknown[]) => {\n writeRecord('error', message, args);\n },\n\n warn: (message: unknown, ...args: unknown[]) => {\n writeRecord('warn', message, args);\n },\n\n table: (message: string, data?: unknown) => {\n if (data && typeof data === 'object' && runtime.env.get('NODE_ENV') !== 'production') {\n console.log('TABLE:', message);\n console.table(data);\n }\n writeRecord('table', message, data === undefined ? [] : [data]);\n },\n\n flush: async () => {\n await sink.flush();\n await Promise.allSettled([\n betterstack.flush(),\n databuddy.flush(),\n posthog.flush(),\n sentry.flush(),\n otlp.flush(),\n ]);\n },\n\n shutdown: async () => {\n await sink.shutdown();\n await Promise.allSettled([\n betterstack.flush(),\n databuddy.flush(),\n posthog.flush(),\n sentry.flush(),\n otlp.flush(),\n ]);\n },\n\n createStructuredLog: (\n groupId: string,\n initial?: Record<string, unknown>\n ): StructuredLog => {\n return createStructuredLogForLogger(logger, groupId, {\n initialFields: initial,\n });\n },\n\n child: (childBindings: Record<string, unknown>) => {\n const mergedBindings = { ...bindings, ...childBindings };\n return createLoggerInstance(\n rootRawLogger,\n sink,\n betterstack,\n databuddy,\n posthog,\n sentry,\n otlp,\n mergedBindings,\n source\n );\n },\n\n [LOGGER_FACTORY]: {\n bindings,\n betterstack,\n databuddy,\n posthog,\n sentry,\n otlp,\n sink,\n create: (\n nextSource: InternalLoggerSource,\n nextBindings: Record<string, unknown> = bindings\n ) => {\n return createLoggerInstance(\n rootRawLogger,\n sink,\n betterstack,\n databuddy,\n posthog,\n sentry,\n otlp,\n nextBindings,\n nextSource\n );\n },\n writeStructured: (\n payload: StructuredLogPayload,\n message: string,\n nextSource: InternalLoggerSource = 'structured-flush'\n ) => {\n writeStructuredRecord(payload, message, nextSource);\n },\n },\n };\n\n return logger;\n}\n\nlet loggerInstance: BlypLogger | null = null;\n\nexport function createBaseLogger(config?: Partial<BlypConfig>): BlypLogger {\n if (config === undefined && loggerInstance) {\n return loggerInstance;\n }\n\n const resolvedConfig = resolveConfig(config);\n const rawLogger = createPinoLogger(resolvedConfig);\n const sink = createPrimarySink(resolvedConfig);\n const betterstack = createBetterStackSender(resolvedConfig);\n const databuddy = createDatabuddySender(resolvedConfig);\n const posthog = createPostHogSender(resolvedConfig);\n const sentry = createSentrySender(resolvedConfig);\n const otlp = createOTLPRegistry(resolvedConfig);\n const instance = createLoggerInstance(\n rawLogger,\n sink,\n betterstack,\n databuddy,\n posthog,\n sentry,\n otlp\n );\n\n if (config === undefined) {\n loggerInstance = instance;\n }\n\n return instance;\n}\n\nexport const logger = createBaseLogger();\n","import {\n attachLoggerInternals,\n createBaseLogger,\n type BlypLogger,\n} from '../../core/logger';\nimport { serializeLogMessage } from '../../shared/log-value';\nimport type { StandaloneLogger, StandaloneLoggerConfig } from '../../types/frameworks/standalone';\n\nexport type { StandaloneLogger } from '../../types/frameworks/standalone';\n\nfunction buildStructuredArgs(message: unknown, args: unknown[]): { text: string; data: unknown[] } {\n const text = serializeMessage(message);\n if (typeof message === 'string') {\n return { text, data: args };\n }\n return { text, data: [message, ...args] };\n}\n\nfunction serializeMessage(message: unknown): string {\n return serializeLogMessage(message);\n}\n\nfunction wrapBaseLogger(baseLogger: BlypLogger, config: StandaloneLoggerConfig): StandaloneLogger {\n return attachLoggerInternals({\n debug: (message: unknown, ...args: unknown[]) => {\n const { text, data } = buildStructuredArgs(message, args);\n baseLogger.debug(text, ...data);\n },\n\n info: (message: unknown, ...args: unknown[]) => {\n const { text, data } = buildStructuredArgs(message, args);\n baseLogger.info(text, ...data);\n },\n\n error: (message: unknown, ...args: unknown[]) => {\n const { text, data } = buildStructuredArgs(message, args);\n baseLogger.error(text, ...data);\n },\n\n warn: (message: unknown, ...args: unknown[]) => {\n const { text, data } = buildStructuredArgs(message, args);\n baseLogger.warn(text, ...data);\n },\n\n warning: (message: unknown, ...args: unknown[]) => {\n const { text, data } = buildStructuredArgs(message, args);\n baseLogger.warning(text, ...data);\n },\n\n success: (message: unknown, meta?: unknown) => {\n const { text, data } = buildStructuredArgs(message, meta === undefined ? [] : [meta]);\n if (meta) {\n baseLogger.success(text, ...data);\n } else {\n baseLogger.success(text);\n }\n },\n\n critical: (message: unknown, meta?: unknown) => {\n const { text, data } = buildStructuredArgs(message, meta === undefined ? [] : [meta]);\n if (meta) {\n baseLogger.critical(text, ...data);\n } else {\n baseLogger.critical(text);\n }\n },\n\n table: (message: string, data?: unknown) => {\n baseLogger.table(message, data);\n },\n\n flush: () => baseLogger.flush(),\n\n shutdown: () => baseLogger.shutdown(),\n\n createStructuredLog: (groupId: string, initial?: Record<string, unknown>) => {\n return baseLogger.createStructuredLog(groupId, initial);\n },\n\n child: (bindings: Record<string, unknown>) => {\n return wrapBaseLogger(baseLogger.child(bindings), config);\n },\n }, baseLogger);\n}\n\nexport function createStandaloneLogger(config: StandaloneLoggerConfig = {}): StandaloneLogger {\n const baseLogger = createBaseLogger(config);\n return wrapBaseLogger(baseLogger, config);\n}\n\nlet defaultLoggerInstance = createStandaloneLogger();\n\nfunction getDefaultLogger(): StandaloneLogger {\n return defaultLoggerInstance;\n}\n\nfunction createLoggerProxy(): StandaloneLogger {\n return attachLoggerInternals({\n debug: (message: unknown, ...args: unknown[]) => {\n getDefaultLogger().debug(message, ...args);\n },\n\n info: (message: unknown, ...args: unknown[]) => {\n getDefaultLogger().info(message, ...args);\n },\n\n error: (message: unknown, ...args: unknown[]) => {\n getDefaultLogger().error(message, ...args);\n },\n\n warn: (message: unknown, ...args: unknown[]) => {\n getDefaultLogger().warn(message, ...args);\n },\n\n warning: (message: unknown, ...args: unknown[]) => {\n getDefaultLogger().warning(message, ...args);\n },\n\n success: (message: unknown, meta?: unknown) => {\n if (meta === undefined) {\n getDefaultLogger().success(message);\n return;\n }\n\n getDefaultLogger().success(message, meta);\n },\n\n critical: (message: unknown, meta?: unknown) => {\n if (meta === undefined) {\n getDefaultLogger().critical(message);\n return;\n }\n\n getDefaultLogger().critical(message, meta);\n },\n\n table: (message: string, data?: unknown) => {\n getDefaultLogger().table(message, data);\n },\n\n flush: () => getDefaultLogger().flush(),\n\n shutdown: () => getDefaultLogger().shutdown(),\n\n createStructuredLog: (groupId: string, initial?: Record<string, unknown>) => {\n return getDefaultLogger().createStructuredLog(groupId, initial);\n },\n\n child: (bindings: Record<string, unknown>) => {\n return getDefaultLogger().child(bindings);\n },\n }, getDefaultLogger());\n}\n\nexport function configureDefaultStandaloneLogger(\n config: StandaloneLoggerConfig = {}\n): StandaloneLogger {\n defaultLoggerInstance = createStandaloneLogger(config);\n return defaultLoggerInstance;\n}\n\nexport const logger = createLoggerProxy();\n","import type {\n BlypErrorCode,\n BlypErrorCodeCreateOptions,\n BlypErrorCodeDefinition,\n BlypErrorLike,\n CreateCodeFunction,\n ErrorConstructionInput,\n ErrorLogLevel,\n ErrorLoggerLike,\n HttpCodeRegistry,\n ParseErrorOptions,\n ParseableErrorPayload as BaseParseableErrorPayload,\n ResolvedErrorConfig,\n} from '../types/shared/errors';\n\nexport type {\n BlypErrorCode,\n BlypErrorCodeDefinition,\n BlypErrorLike,\n ErrorConstructionInput,\n ErrorLogLevel,\n ErrorLoggerLike,\n ParseErrorOptions,\n ResolvedErrorConfig,\n} from '../types/shared/errors';\n\nexport type ParseableErrorPayload = BaseParseableErrorPayload | BlypError;\n\nexport const HTTP_STATUS_DEFINITIONS = {\n CONTINUE: { status: 100, message: 'Continue' },\n SWITCHING_PROTOCOLS: { status: 101, message: 'Switching Protocols' },\n PROCESSING: { status: 102, message: 'Processing' },\n EARLY_HINTS: { status: 103, message: 'Early Hints' },\n OK: { status: 200, message: 'OK' },\n CREATED: { status: 201, message: 'Created' },\n ACCEPTED: { status: 202, message: 'Accepted' },\n NON_AUTHORITATIVE_INFORMATION: { status: 203, message: 'Non-Authoritative Information' },\n NO_CONTENT: { status: 204, message: 'No Content' },\n RESET_CONTENT: { status: 205, message: 'Reset Content' },\n PARTIAL_CONTENT: { status: 206, message: 'Partial Content' },\n MULTI_STATUS: { status: 207, message: 'Multi-Status' },\n ALREADY_REPORTED: { status: 208, message: 'Already Reported' },\n IM_USED: { status: 226, message: 'IM Used' },\n MULTIPLE_CHOICES: { status: 300, message: 'Multiple Choices' },\n MOVED_PERMANENTLY: { status: 301, message: 'Moved Permanently' },\n FOUND: { status: 302, message: 'Found' },\n SEE_OTHER: { status: 303, message: 'See Other' },\n NOT_MODIFIED: { status: 304, message: 'Not Modified' },\n USE_PROXY: { status: 305, message: 'Use Proxy' },\n TEMPORARY_REDIRECT: { status: 307, message: 'Temporary Redirect' },\n PERMANENT_REDIRECT: { status: 308, message: 'Permanent Redirect' },\n BAD_REQUEST: { status: 400, message: 'Bad Request' },\n UNAUTHORIZED: { status: 401, message: 'Unauthorized' },\n PAYMENT_REQUIRED: { status: 402, message: 'Payment Required' },\n FORBIDDEN: { status: 403, message: 'Forbidden' },\n NOT_FOUND: { status: 404, message: 'Not Found' },\n METHOD_NOT_ALLOWED: { status: 405, message: 'Method Not Allowed' },\n NOT_ACCEPTABLE: { status: 406, message: 'Not Acceptable' },\n PROXY_AUTHENTICATION_REQUIRED: { status: 407, message: 'Proxy Authentication Required' },\n REQUEST_TIMEOUT: { status: 408, message: 'Request Timeout' },\n CONFLICT: { status: 409, message: 'Conflict' },\n GONE: { status: 410, message: 'Gone' },\n LENGTH_REQUIRED: { status: 411, message: 'Length Required' },\n PRECONDITION_FAILED: { status: 412, message: 'Precondition Failed' },\n PAYLOAD_TOO_LARGE: { status: 413, message: 'Payload Too Large' },\n URI_TOO_LONG: { status: 414, message: 'URI Too Long' },\n UNSUPPORTED_MEDIA_TYPE: { status: 415, message: 'Unsupported Media Type' },\n RANGE_NOT_SATISFIABLE: { status: 416, message: 'Range Not Satisfiable' },\n EXPECTATION_FAILED: { status: 417, message: 'Expectation Failed' },\n IM_A_TEAPOT: { status: 418, message: \"I'm a Teapot\" },\n MISDIRECTED_REQUEST: { status: 421, message: 'Misdirected Request' },\n UNPROCESSABLE_ENTITY: { status: 422, message: 'Unprocessable Entity' },\n LOCKED: { status: 423, message: 'Locked' },\n FAILED_DEPENDENCY: { status: 424, message: 'Failed Dependency' },\n TOO_EARLY: { status: 425, message: 'Too Early' },\n UPGRADE_REQUIRED: { status: 426, message: 'Upgrade Required' },\n PRECONDITION_REQUIRED: { status: 428, message: 'Precondition Required' },\n TOO_MANY_REQUESTS: { status: 429, message: 'Too Many Requests' },\n REQUEST_HEADER_FIELDS_TOO_LARGE: { status: 431, message: 'Request Header Fields Too Large' },\n UNAVAILABLE_FOR_LEGAL_REASONS: { status: 451, message: 'Unavailable For Legal Reasons' },\n INTERNAL_SERVER_ERROR: { status: 500, message: 'Internal Server Error' },\n NOT_IMPLEMENTED: { status: 501, message: 'Not Implemented' },\n BAD_GATEWAY: { status: 502, message: 'Bad Gateway' },\n SERVICE_UNAVAILABLE: { status: 503, message: 'Service Unavailable' },\n GATEWAY_TIMEOUT: { status: 504, message: 'Gateway Timeout' },\n HTTP_VERSION_NOT_SUPPORTED: { status: 505, message: 'HTTP Version Not Supported' },\n VARIANT_ALSO_NEGOTIATES: { status: 506, message: 'Variant Also Negotiates' },\n INSUFFICIENT_STORAGE: { status: 507, message: 'Insufficient Storage' },\n LOOP_DETECTED: { status: 508, message: 'Loop Detected' },\n BANDWIDTH_LIMIT_EXCEEDED: { status: 509, message: 'Bandwidth Limit Exceeded' },\n NOT_EXTENDED: { status: 510, message: 'Not Extended' },\n NETWORK_AUTHENTICATION_REQUIRED: { status: 511, message: 'Network Authentication Required' },\n} as const;\n\nimport { isPlainObject } from './validation';\n\nconst ERROR_KEYS = [\n 'status',\n 'statusCode',\n 'code',\n 'message',\n 'stack',\n 'why',\n 'fix',\n 'link',\n 'details',\n 'cause',\n 'title',\n 'detail',\n 'logLevel',\n 'error',\n 'data',\n] as const;\n\nfunction isErrorLogLevel(value: unknown): value is ErrorLogLevel {\n return (\n value === 'debug' ||\n value === 'info' ||\n value === 'warning' ||\n value === 'error' ||\n value === 'critical'\n );\n}\n\nfunction parseStatus(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === 'string' && /^\\d+$/.test(value.trim())) {\n return Number.parseInt(value, 10);\n }\n\n return undefined;\n}\n\nfunction normalizeDetails(value: unknown): Record<string, unknown> | undefined {\n return isPlainObject(value) ? value : undefined;\n}\n\nfunction hasMeaningfulErrorData(candidate: BlypErrorLike): boolean {\n return (\n candidate.status !== undefined ||\n candidate.statusCode !== undefined ||\n candidate.code !== undefined ||\n candidate.message !== undefined ||\n candidate.stack !== undefined ||\n candidate.why !== undefined ||\n candidate.fix !== undefined ||\n candidate.link !== undefined ||\n candidate.details !== undefined ||\n candidate.cause !== undefined ||\n candidate.logLevel !== undefined\n );\n}\n\nfunction normalizeRecordCandidate(record: Record<string, unknown>): BlypErrorLike {\n const title = typeof record.title === 'string' ? record.title : undefined;\n const detail = typeof record.detail === 'string' ? record.detail : undefined;\n\n return {\n status: parseStatus(record.status),\n statusCode: parseStatus(record.statusCode),\n code:\n typeof record.code === 'string' || typeof record.code === 'number'\n ? record.code\n : undefined,\n message:\n typeof record.message === 'string'\n ? record.message\n : title ?? detail,\n stack: typeof record.stack === 'string' ? record.stack : undefined,\n why: typeof record.why === 'string' ? record.why : undefined,\n fix: typeof record.fix === 'string' ? record.fix : undefined,\n link: typeof record.link === 'string' ? record.link : undefined,\n details: normalizeDetails(record.details),\n cause: record.cause,\n logLevel: isErrorLogLevel(record.logLevel) ? record.logLevel : undefined,\n };\n}\n\nfunction mergeCandidates(\n container: Record<string, unknown>,\n nested: BlypErrorLike | string | undefined\n): BlypErrorLike | string | undefined {\n const own = normalizeRecordCandidate(container);\n\n if (nested === undefined) {\n return hasMeaningfulErrorData(own) ? own : undefined;\n }\n\n if (typeof nested === 'string') {\n if (hasMeaningfulErrorData(own)) {\n return {\n ...own,\n message: own.message ?? nested,\n };\n }\n\n return nested;\n }\n\n return {\n status: own.status ?? nested.status,\n statusCode: own.statusCode ?? nested.statusCode,\n code: own.code ?? nested.code,\n message: own.message ?? nested.message,\n stack: own.stack ?? nested.stack,\n why: own.why ?? nested.why,\n fix: own.fix ?? nested.fix,\n link: own.link ?? nested.link,\n details: own.details ?? nested.details,\n cause: own.cause ?? nested.cause,\n logLevel: own.logLevel ?? nested.logLevel,\n };\n}\n\nfunction hasErrorShape(record: Record<string, unknown>): boolean {\n return ERROR_KEYS.some((key) => record[key] !== undefined);\n}\n\nfunction isResponseLike(input: unknown): input is Response {\n if (typeof Response !== 'undefined' && input instanceof Response) {\n return true;\n }\n\n return isPlainObject(input) &&\n typeof input.status === 'number' &&\n typeof input.statusText === 'string' &&\n typeof input.clone === 'function' &&\n typeof input.text === 'function';\n}\n\nexport class BlypError extends Error implements BlypErrorLike {\n override readonly name = 'BlypError';\n readonly status: number;\n readonly statusCode: number;\n readonly code?: string | number;\n readonly why?: string;\n readonly fix?: string;\n readonly link?: string;\n readonly details?: Record<string, unknown>;\n override readonly cause?: unknown;\n readonly logLevel: ErrorLogLevel;\n\n constructor(config: ResolvedErrorConfig) {\n super(config.message);\n Object.setPrototypeOf(this, new.target.prototype);\n\n this.status = config.status;\n this.statusCode = config.statusCode;\n this.code = config.code;\n this.why = config.why;\n this.fix = config.fix;\n this.link = config.link;\n this.details = config.details;\n this.cause = config.cause;\n this.logLevel = config.logLevel;\n\n if (config.stack) {\n this.stack = config.stack;\n } else if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, BlypError);\n }\n }\n\n toJSON(): {\n name: 'BlypError';\n message: string;\n status: number;\n statusCode: number;\n code?: string | number;\n why?: string;\n fix?: string;\n link?: string;\n details?: Record<string, unknown>;\n } {\n return {\n name: 'BlypError',\n message: this.message,\n status: this.status,\n statusCode: this.statusCode,\n ...(this.code !== undefined ? { code: this.code } : {}),\n ...(this.why !== undefined ? { why: this.why } : {}),\n ...(this.fix !== undefined ? { fix: this.fix } : {}),\n ...(this.link !== undefined ? { link: this.link } : {}),\n ...(this.details !== undefined ? { details: this.details } : {}),\n };\n }\n}\n\nexport function resolveErrorLogLevel(\n status: number,\n explicit?: ErrorLogLevel\n): ErrorLogLevel {\n if (explicit) {\n return explicit;\n }\n\n if (status >= 500) {\n return 'critical';\n }\n\n if (status >= 400) {\n return 'error';\n }\n\n return 'warning';\n}\n\nexport function normalizeCauseForLog(cause: unknown): unknown {\n if (cause instanceof Error) {\n return {\n name: cause.name,\n message: cause.message,\n ...(cause.stack ? { stack: cause.stack } : {}),\n };\n }\n\n return cause;\n}\n\nexport function emitErrorLog(\n logger: ErrorLoggerLike,\n error: BlypError,\n levelOverride?: ErrorLogLevel\n): void {\n const level = resolveErrorLogLevel(error.status, levelOverride ?? error.logLevel);\n const logMethod = (() => {\n switch (level) {\n case 'debug':\n return logger.debug;\n case 'info':\n return logger.info;\n case 'warning':\n return logger.warning;\n case 'critical':\n return logger.critical;\n case 'error':\n default:\n return logger.error;\n }\n })();\n\n logMethod(error.message, {\n type: 'application_error',\n status: error.status,\n statusCode: error.statusCode,\n code: error.code,\n why: error.why,\n fix: error.fix,\n link: error.link,\n details: error.details,\n cause: normalizeCauseForLog(error.cause),\n });\n}\n\nexport function resolveErrorConfig(\n input: BlypErrorLike & { status?: number; logLevel?: ErrorLogLevel },\n defaults: Partial<ResolvedErrorConfig> = {}\n): ResolvedErrorConfig {\n const candidateStatus = input.status ?? input.statusCode;\n const status = candidateStatus ?? defaults.status ?? defaults.statusCode ?? 500;\n const preset = getHttpCode(status);\n const message =\n input.message ??\n defaults.message ??\n preset?.message ??\n `HTTP ${status}`;\n\n return {\n status,\n statusCode: status,\n message,\n code: input.code ?? defaults.code ?? preset?.code,\n why: input.why ?? defaults.why ?? preset?.why,\n fix: input.fix ?? defaults.fix ?? preset?.fix,\n link: input.link ?? defaults.link ?? preset?.link,\n details: input.details ?? defaults.details ?? preset?.details,\n cause: input.cause ?? defaults.cause,\n stack: input.stack ?? defaults.stack,\n logLevel: resolveErrorLogLevel(\n status,\n input.logLevel ?? defaults.logLevel ?? preset?.logLevel\n ),\n };\n}\n\nexport function createBlypError(\n input: ErrorConstructionInput,\n defaults: Partial<ResolvedErrorConfig> = {}\n): BlypError {\n const error = new BlypError(resolveErrorConfig(input, defaults));\n\n if (input.skipLogging !== true && input.logger) {\n emitErrorLog(input.logger, error, input.logLevel);\n }\n\n return error;\n}\n\nfunction createErrorCode(\n definition: BlypErrorCodeDefinition,\n createErrorFromCode?: CreateCodeFunction\n): BlypErrorCode {\n const errorCode = {\n ...definition,\n statusCode: definition.status,\n create(overrides: BlypErrorCodeCreateOptions = {}): BlypError {\n if (createErrorFromCode) {\n return createErrorFromCode(definition, overrides) as BlypError;\n }\n\n return createBlypError({\n status: definition.status,\n message: definition.message,\n code: overrides.code ?? definition.code,\n why: overrides.why ?? definition.why,\n fix: overrides.fix ?? definition.fix,\n link: overrides.link ?? definition.link,\n details: overrides.details ?? definition.details,\n cause: overrides.cause,\n stack: overrides.stack,\n logLevel: overrides.logLevel ?? definition.logLevel,\n logger: overrides.logger,\n skipLogging: overrides.skipLogging,\n });\n },\n extend(extension: {\n code: string;\n message?: string;\n why?: string;\n fix?: string;\n link?: string;\n details?: Record<string, unknown>;\n logLevel?: ErrorLogLevel;\n }): BlypErrorCode {\n return createErrorCode(\n {\n key: extension.code,\n status: definition.status,\n message: extension.message ?? definition.message,\n code: extension.code,\n why: extension.why ?? definition.why,\n fix: extension.fix ?? definition.fix,\n link: extension.link ?? definition.link,\n details: extension.details ?? definition.details,\n logLevel: extension.logLevel ?? definition.logLevel,\n },\n createErrorFromCode\n );\n },\n } satisfies BlypErrorCode;\n\n return Object.freeze(errorCode);\n}\n\nexport function buildHttpCodeRegistry(\n createErrorFromCode?: CreateCodeFunction\n): HttpCodeRegistry<keyof typeof HTTP_STATUS_DEFINITIONS> {\n const entries = Object.entries(HTTP_STATUS_DEFINITIONS).map(([key, value]) => {\n return [key, createErrorCode({ key, ...value }, createErrorFromCode)] as const;\n });\n\n return Object.freeze(\n Object.fromEntries(entries) as HttpCodeRegistry<keyof typeof HTTP_STATUS_DEFINITIONS>\n );\n}\n\nexport const HTTP_CODES = buildHttpCodeRegistry();\n\nconst httpCodeByStatus = new Map<number, BlypErrorCode>(\n Object.values(HTTP_CODES).map((value) => [value.status, value])\n);\n\nexport function getHttpCode(status: number): BlypErrorCode | undefined {\n return httpCodeByStatus.get(status);\n}\n\nexport function extractErrorCandidate(payload: unknown): BlypErrorLike | string | undefined {\n if (typeof payload === 'string') {\n return payload;\n }\n\n if (!isPlainObject(payload)) {\n return undefined;\n }\n\n if (payload.error !== undefined) {\n const nested = payload.error;\n if (typeof nested === 'string') {\n return mergeCandidates(payload, nested);\n }\n\n if (isPlainObject(nested)) {\n return mergeCandidates(payload, extractErrorCandidate(nested));\n }\n }\n\n if (isPlainObject(payload.data)) {\n const nested = payload.data;\n if (nested.error !== undefined || hasErrorShape(nested)) {\n return mergeCandidates(payload, extractErrorCandidate(nested));\n }\n }\n\n if (hasErrorShape(payload)) {\n return normalizeRecordCandidate(payload);\n }\n\n return undefined;\n}\n\nfunction coercePayloadToError(\n payload: ParseableErrorPayload,\n options: ParseErrorOptions = {},\n responseContext: { status?: number; statusText?: string } = {}\n): BlypError {\n if (payload instanceof BlypError) {\n return payload;\n }\n\n const candidate = (() => {\n if (payload instanceof Error) {\n const errorWithMetadata = payload as Error & BlypErrorLike;\n return {\n status: errorWithMetadata.status,\n statusCode: errorWithMetadata.statusCode,\n code: errorWithMetadata.code,\n message: payload.message,\n stack: payload.stack,\n why: errorWithMetadata.why,\n fix: errorWithMetadata.fix,\n link: errorWithMetadata.link,\n details: errorWithMetadata.details,\n cause: errorWithMetadata.cause,\n logLevel: errorWithMetadata.logLevel,\n } satisfies BlypErrorLike;\n }\n\n return extractErrorCandidate(payload);\n })();\n\n const responseStatus = responseContext.status && responseContext.status > 0\n ? responseContext.status\n : undefined;\n const candidateStatus = typeof candidate === 'string'\n ? undefined\n : candidate?.status ?? candidate?.statusCode;\n const status = responseStatus ?? candidateStatus ?? options.fallbackStatus ?? 500;\n const textBody = typeof candidate === 'string'\n ? candidate.trim() || undefined\n : undefined;\n const statusText = responseContext.statusText?.trim() || undefined;\n\n return createBlypError(\n typeof candidate === 'string'\n ? { message: textBody, ...(responseStatus !== undefined ? { status: responseStatus } : {}) }\n : {\n ...(candidate ?? {}),\n ...(responseStatus !== undefined\n ? {\n status: responseStatus,\n statusCode: responseStatus,\n }\n : {}),\n },\n {\n status,\n message:\n (typeof candidate === 'string' ? textBody : candidate?.message) ??\n statusText ??\n getHttpCode(status)?.message ??\n `HTTP ${status}`,\n }\n );\n}\n\nexport async function readResponseErrorPayload(response: Response): Promise<unknown> {\n const contentType = response.headers.get('content-type')?.toLowerCase();\n const isJsonResponse = contentType?.includes('application/json') || contentType?.includes('+json');\n\n if (isJsonResponse) {\n try {\n return await response.clone().json();\n } catch {\n try {\n return await response.clone().text();\n } catch {\n return undefined;\n }\n }\n }\n\n try {\n return await response.clone().text();\n } catch {\n return undefined;\n }\n}\n\nexport function parseError(\n input: Response,\n options?: ParseErrorOptions\n): Promise<BlypError>;\nexport function parseError(\n input: ParseableErrorPayload,\n options?: ParseErrorOptions\n): BlypError;\nexport function parseError(\n input: ParseableErrorPayload | Response,\n options: ParseErrorOptions = {}\n): BlypError | Promise<BlypError> {\n if (isResponseLike(input)) {\n return (async () => {\n const payload = await readResponseErrorPayload(input).catch(() => undefined);\n const error = coercePayloadToError(payload as ParseableErrorPayload, options, {\n status: input.status,\n statusText: input.statusText,\n });\n\n if (options.logger) {\n emitErrorLog(options.logger, error, options.logLevel);\n }\n\n return error;\n })();\n }\n\n const error = coercePayloadToError(input, options);\n\n if (options.logger) {\n emitErrorLog(options.logger, error, options.logLevel);\n }\n\n return error;\n}\n","import {\n BlypError,\n buildHttpCodeRegistry,\n emitErrorLog,\n getHttpCode as getSharedHttpCode,\n resolveErrorConfig,\n type BlypErrorCode\n} from '../shared/errors';\nimport type { CreateErrorInput } from '../types/core/errors';\nimport {\n logger as defaultLogger,\n tryGetBetterStackSender,\n tryGetDatabuddySender,\n tryGetPostHogSender,\n} from './logger';\n\nexport type {\n BlypErrorCode,\n BlypErrorCodeDefinition,\n BlypErrorLike,\n ErrorLogLevel\n} from '../shared/errors';\nexport type { CreateErrorInput, CreateErrorOverrides } from '../types/core/errors';\n\nexport function createError(input: CreateErrorInput): BlypError {\n const error = new BlypError(resolveErrorConfig(input));\n\n if (input.skipLogging !== true) {\n emitErrorLog(input.logger ?? defaultLogger, error, input.logLevel);\n\n const posthog = tryGetPostHogSender(input.logger ?? defaultLogger);\n if (posthog?.shouldAutoCaptureExceptions()) {\n posthog.captureException(error, {\n source: 'server',\n warnIfUnavailable: true,\n properties: {\n 'blyp.type': 'application_error',\n status: error.status,\n statusCode: error.statusCode,\n ...(error.code !== undefined ? { code: error.code } : {}),\n ...(error.why !== undefined ? { why: error.why } : {}),\n ...(error.fix !== undefined ? { fix: error.fix } : {}),\n ...(error.link !== undefined ? { link: error.link } : {}),\n ...(error.details !== undefined ? { details: error.details } : {}),\n },\n });\n }\n\n const betterstack = tryGetBetterStackSender(input.logger ?? defaultLogger);\n if (betterstack?.shouldAutoCaptureExceptions()) {\n betterstack.captureException(error, {\n source: 'server',\n warnIfUnavailable: true,\n context: {\n 'blyp.type': 'application_error',\n status: error.status,\n statusCode: error.statusCode,\n ...(error.code !== undefined ? { code: error.code } : {}),\n ...(error.why !== undefined ? { why: error.why } : {}),\n ...(error.fix !== undefined ? { fix: error.fix } : {}),\n ...(error.link !== undefined ? { link: error.link } : {}),\n ...(error.details !== undefined ? { details: error.details } : {}),\n },\n });\n }\n\n const databuddy = tryGetDatabuddySender(input.logger ?? defaultLogger);\n if (databuddy?.shouldAutoCaptureExceptions()) {\n databuddy.captureException(error, {\n source: 'server',\n warnIfUnavailable: true,\n properties: {\n blyp_type: 'application_error',\n status: error.status,\n status_code: error.statusCode,\n ...(error.code !== undefined ? { code: error.code } : {}),\n ...(error.why !== undefined ? { why: error.why } : {}),\n ...(error.fix !== undefined ? { fix: error.fix } : {}),\n ...(error.link !== undefined ? { link: error.link } : {}),\n ...(error.details !== undefined ? { details: error.details } : {}),\n },\n });\n }\n }\n\n return error;\n}\n\nexport const HTTP_CODES = buildHttpCodeRegistry((definition, overrides = {}) => {\n return createError({\n status: definition.status,\n message: definition.message,\n code: definition.code,\n why: definition.why,\n fix: definition.fix,\n link: definition.link,\n details: definition.details,\n ...overrides,\n });\n});\n\nconst httpCodeByStatus = new Map<number, BlypErrorCode>(\n Object.values(HTTP_CODES).map((value) => [value.status, value])\n);\n\nexport function getHttpCode(status: number): BlypErrorCode | undefined {\n return httpCodeByStatus.get(status) ?? getSharedHttpCode(status);\n}\n\nexport { BlypError };\n","import fs from 'fs';\nimport { gunzipSync } from 'fflate';\nimport type { LogRecord } from './file-logger';\nimport type { ReadLogFileOptions } from '../types/core/log-reader';\n\nexport type { ReadLogFileOptions } from '../types/core/log-reader';\n\nfunction createFallbackRecord(line: string): LogRecord {\n return {\n timestamp: '',\n level: 'unknown',\n message: line,\n };\n}\n\nfunction parseLogLine(line: string): LogRecord {\n try {\n return JSON.parse(line) as LogRecord;\n } catch {\n return createFallbackRecord(line);\n }\n}\n\nfunction readRawFile(filePath: string): string {\n const content = fs.readFileSync(filePath);\n if (filePath.endsWith('.gz')) {\n return Buffer.from(gunzipSync(content)).toString('utf8');\n }\n return content.toString('utf8');\n}\n\nexport function formatLogRecord(record: LogRecord): string {\n const prefix = record.timestamp ? `[${record.timestamp}] ` : '';\n const level = record.level ? record.level.toUpperCase() : 'UNKNOWN';\n const caller = record.caller ? ` (${record.caller})` : '';\n return `${prefix}${level} ${record.message}${caller}`.trim();\n}\n\nexport async function readLogFile(\n filePath: string,\n options: ReadLogFileOptions = {}\n): Promise<string | LogRecord[]> {\n const { format = 'pretty', limit } = options;\n const rawContent = readRawFile(filePath);\n const allLines = rawContent\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n const lines = typeof limit === 'number' && limit >= 0 ? allLines.slice(-limit) : allLines;\n const records = lines.map(parseLogLine);\n\n if (format === 'json') {\n return records;\n }\n\n return records.map(formatLogRecord).join('\\n');\n}\n","import type { ResolveCtx } from '../types/core/helpers';\n\nexport type { ResolveCtx } from '../types/core/helpers';\n\nexport function resolveStatusCode(\n ctx: ResolveCtx,\n successCode: number = 200,\n errorCode: number = 500,\n isError: boolean = false\n): number {\n if (isError && ctx.error) {\n if (ctx.error.status) {\n return ctx.error.status;\n }\n if (ctx.error.statusCode) {\n return ctx.error.statusCode;\n }\n if (ctx.code) {\n return parseInt(ctx.code, 10) || errorCode;\n }\n return errorCode;\n }\n\n if (ctx.set?.status) {\n const status = ctx.set.status;\n return typeof status === 'number' ? status : parseInt(status as string, 10) || successCode;\n }\n\n return successCode;\n}\n\nexport function shouldLogTable(): boolean {\n return process.env.NODE_ENV !== 'production';\n}\n\nfunction normalizePath(path: string): string {\n const queryIndex = path.indexOf('?');\n let withoutQuery = queryIndex >= 0 ? path.substring(0, queryIndex) : path;\n if (withoutQuery.endsWith('/') && withoutQuery.length > 1) {\n withoutQuery = withoutQuery.slice(0, -1);\n }\n if (!withoutQuery.startsWith('/')) {\n withoutQuery = '/' + withoutQuery;\n }\n return withoutQuery;\n}\n\nfunction normalizePattern(pattern: string): string {\n const queryIndex = pattern.indexOf('?');\n let withoutQuery = queryIndex >= 0 ? pattern.substring(0, queryIndex) : pattern;\n if (withoutQuery.endsWith('/') && withoutQuery.length > 1) {\n withoutQuery = withoutQuery.slice(0, -1);\n }\n if (!withoutQuery.startsWith('/')) {\n withoutQuery = '/' + withoutQuery;\n }\n return withoutQuery;\n}\n\nexport function shouldIgnorePath(path: string, ignorePaths?: string[]): boolean {\n if (!ignorePaths || ignorePaths.length === 0) {\n return false;\n }\n\n const normalizedPath = normalizePath(path);\n\n return ignorePaths.some((ignoredPattern) => {\n const normalizedPattern = normalizePattern(ignoredPattern);\n\n if (normalizedPattern === normalizedPath) {\n return true;\n }\n\n if (normalizedPattern === '/**' || normalizedPattern === '**') {\n return true;\n }\n\n if (normalizedPattern === '/*') {\n const segments = normalizedPath.split('/').filter(s => s.length > 0);\n return segments.length === 1;\n }\n\n if (normalizedPattern.endsWith('/*') && !normalizedPattern.includes('**')) {\n const prefix = normalizedPattern.slice(0, -1);\n if (normalizedPath.startsWith(prefix)) {\n const rest = normalizedPath.slice(prefix.length);\n const restSegments = rest.split('/').filter(s => s.length > 0);\n return restSegments.length === 1;\n }\n return false;\n }\n\n if (normalizedPattern.includes('**')) {\n if (normalizedPattern === '/**') {\n return true;\n }\n \n if (normalizedPattern.startsWith('/') && normalizedPattern.endsWith('**')) {\n let prefix = normalizedPattern.slice(0, -2);\n if (prefix.endsWith('/') && prefix.length > 1) {\n prefix = prefix.slice(0, -1);\n }\n if (prefix === normalizedPath) {\n return true;\n }\n return normalizedPath.startsWith(prefix + '/');\n }\n \n const starIndex = normalizedPattern.indexOf('**');\n let prefix = normalizedPattern.substring(0, starIndex);\n const suffix = normalizedPattern.substring(starIndex + 2);\n \n if (prefix.endsWith('/') && prefix.length > 1) {\n prefix = prefix.slice(0, -1);\n }\n \n if (prefix === '' && suffix === '') {\n return true;\n }\n \n if (prefix !== '' && suffix === '') {\n return normalizedPath.startsWith(prefix + '/');\n }\n \n if (prefix === '' && suffix !== '') {\n return normalizedPath.endsWith(suffix) || normalizedPath.includes(suffix + '/');\n }\n \n if (prefix !== '' && suffix !== '') {\n return normalizedPath.startsWith(prefix) && \n (normalizedPath.endsWith(suffix) || normalizedPath.includes(suffix + '/'));\n }\n \n return false;\n }\n\n if (normalizedPattern.includes('*')) {\n const lastDotIndex = normalizedPattern.lastIndexOf('.');\n const lastStarIndex = normalizedPattern.lastIndexOf('*');\n \n if (lastDotIndex > lastStarIndex && lastStarIndex > 0) {\n const charBeforeStar = normalizedPattern[lastStarIndex - 1];\n if (charBeforeStar === '/') {\n const extPattern = normalizedPattern.slice(lastStarIndex);\n const filePart = normalizedPath.slice(normalizedPath.lastIndexOf('/') + 1);\n const extIndex = filePart.lastIndexOf('.');\n if (extIndex > 0) {\n const actualExt = filePart.slice(extIndex);\n return actualExt === extPattern;\n }\n }\n }\n \n const regexPattern = normalizedPattern\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*/g, '[^/]*');\n const regex = new RegExp('^' + regexPattern + '$');\n return regex.test(normalizedPath);\n }\n\n return false;\n });\n}\n","export function getMethodColor(method: string): string {\n const colors: Record<string, string> = {\n GET: '\\x1b[32m',\n POST: '\\x1b[36m',\n PUT: '\\x1b[33m',\n PATCH: '\\x1b[34m',\n DELETE: '\\x1b[31m',\n };\n const reset = '\\x1b[0m';\n return `${colors[method.toUpperCase()] || ''}${method}${reset}`;\n}\n\nexport function getStatusColor(statusCode: number): string {\n const reset = '\\x1b[0m';\n if (statusCode >= 500) return `\\x1b[31m${statusCode}${reset}`;\n if (statusCode >= 400) return `\\x1b[33m${statusCode}${reset}`;\n if (statusCode >= 300) return `\\x1b[36m${statusCode}${reset}`;\n if (statusCode >= 200) return `\\x1b[32m${statusCode}${reset}`;\n return `\\x1b[37m${statusCode}${reset}`;\n}\n\nexport function getArrowForMethod(method: string): string {\n const arrows: Record<string, string> = {\n GET: '→',\n POST: '↑',\n PUT: '⇑',\n PATCH: '↗',\n DELETE: '✕',\n };\n return arrows[method.toUpperCase()] || '•';\n}\n\nexport function getResponseTimeColor(ms: number): string {\n const reset = '\\x1b[0m';\n if (ms < 100) return `\\x1b[32m${ms}ms${reset}`;\n if (ms < 300) return `\\x1b[33m${ms}ms${reset}`;\n if (ms < 1000) return `\\x1b[31m${ms}ms${reset}`;\n return `\\x1b[41m\\x1b[37m${ms}ms${reset}`;\n}\n\nexport function getColoredLevel(level: string): string {\n const colors: Record<string, string> = {\n error: '\\x1b[31m',\n critical: '\\x1b[35m',\n warning: '\\x1b[33m',\n info: '\\x1b[34m',\n success: '\\x1b[32m',\n debug: '\\x1b[36m',\n };\n const reset = '\\x1b[0m';\n return `${colors[level.toLowerCase()] || ''}${level.toUpperCase()}${reset}`;\n}\n\nexport const colors = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n underscore: '\\x1b[4m',\n blink: '\\x1b[5m',\n reverse: '\\x1b[7m',\n hidden: '\\x1b[8m',\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n bgBlack: '\\x1b[40m',\n bgRed: '\\x1b[41m',\n bgGreen: '\\x1b[42m',\n bgYellow: '\\x1b[43m',\n bgBlue: '\\x1b[44m',\n bgMagenta: '\\x1b[45m',\n bgCyan: '\\x1b[46m',\n bgWhite: '\\x1b[47m',\n};\n","import { resolveConfig } from '../../core/config';\nimport {\n buildRecord,\n buildStructuredRecord,\n resolveStructuredWriteLevel,\n type LogMethodName,\n} from '../../core/log-record';\nimport {\n createStructuredLog,\n type StructuredLog,\n type StructuredLogPayload,\n} from '../../core/structured-log';\nimport {\n createBetterStackSender,\n} from './sender';\nimport type {\n BetterStackErrorTracker,\n BetterStackExceptionCaptureOptions,\n BetterStackLogger,\n BetterStackLoggerConfig,\n BetterStackSender,\n} from '../../types/connectors/betterstack';\n\nexport type {\n BetterStackErrorTracker,\n BetterStackExceptionCaptureOptions,\n BetterStackLogger,\n BetterStackLoggerConfig,\n} from '../../types/connectors/betterstack';\n\nfunction resolveSender(config: BetterStackLoggerConfig = {}): BetterStackSender {\n return createBetterStackSender(resolveConfig({\n ...(config.connectors ? { connectors: config.connectors } : {}),\n }));\n}\n\nfunction createBetterStackLoggerInstance(\n sender: BetterStackSender,\n bindings: Record<string, unknown> = {}\n): BetterStackLogger {\n const writeRecord = (\n level: LogMethodName,\n message: unknown,\n args: unknown[]\n ): void => {\n sender.send(buildRecord(level, message, args, bindings), {\n source: 'server',\n warnIfUnavailable: true,\n });\n };\n\n const writeStructured = (\n payload: StructuredLogPayload,\n message: string\n ): void => {\n sender.send(\n buildStructuredRecord(\n resolveStructuredWriteLevel(payload.level),\n message,\n payload,\n bindings\n ),\n {\n source: 'server',\n warnIfUnavailable: true,\n }\n );\n };\n\n return {\n debug: (message: unknown, ...args: unknown[]) => {\n writeRecord('debug', message, args);\n },\n info: (message: unknown, ...args: unknown[]) => {\n writeRecord('info', message, args);\n },\n error: (message: unknown, ...args: unknown[]) => {\n writeRecord('error', message, args);\n },\n warn: (message: unknown, ...args: unknown[]) => {\n writeRecord('warn', message, args);\n },\n warning: (message: unknown, ...args: unknown[]) => {\n writeRecord('warning', message, args);\n },\n success: (message: unknown, ...args: unknown[]) => {\n writeRecord('success', message, args);\n },\n critical: (message: unknown, ...args: unknown[]) => {\n writeRecord('critical', message, args);\n },\n table: (message: string, data?: unknown) => {\n writeRecord('table', message, data === undefined ? [] : [data]);\n },\n flush: async () => {},\n shutdown: async () => {},\n createStructuredLog: (\n groupId: string,\n initial?: Record<string, unknown>\n ): StructuredLog => {\n return createStructuredLog(groupId, {\n initialFields: initial,\n write: writeStructured,\n });\n },\n child: (childBindings: Record<string, unknown>) => {\n return createBetterStackLoggerInstance(sender, {\n ...bindings,\n ...childBindings,\n });\n },\n };\n}\n\nfunction createBetterStackErrorTrackerInstance(\n sender: BetterStackSender,\n bindings: Record<string, unknown> = {}\n): BetterStackErrorTracker {\n return {\n capture: (error: unknown, options: BetterStackExceptionCaptureOptions = {}) => {\n sender.captureException(error, {\n source: options.source ?? 'server',\n warnIfUnavailable: options.warnIfUnavailable ?? true,\n context: {\n ...bindings,\n ...(options.context ?? {}),\n 'blyp.manual': true,\n },\n });\n },\n child: (childBindings: Record<string, unknown>) => {\n return createBetterStackErrorTrackerInstance(sender, {\n ...bindings,\n ...childBindings,\n });\n },\n };\n}\n\nexport function createBetterStackLogger(\n config: BetterStackLoggerConfig = {}\n): BetterStackLogger {\n return createBetterStackLoggerInstance(resolveSender(config));\n}\n\nexport function createBetterStackErrorTracker(\n config: BetterStackLoggerConfig = {}\n): BetterStackErrorTracker {\n return createBetterStackErrorTrackerInstance(resolveSender(config));\n}\n\nexport function captureBetterStackException(\n error: unknown,\n options: BetterStackExceptionCaptureOptions = {},\n config: BetterStackLoggerConfig = {}\n): void {\n createBetterStackErrorTracker(config).capture(error, options);\n}\n\nexport function createStructuredBetterStackLogger<\n TFields extends Record<string, unknown> = Record<string, unknown>,\n>(\n groupId: string,\n initial?: TFields,\n config: BetterStackLoggerConfig = {}\n): StructuredLog<TFields> {\n const sender = resolveSender(config);\n\n return createStructuredLog(groupId, {\n initialFields: initial,\n write: (payload, message) => {\n sender.send(\n buildStructuredRecord(\n resolveStructuredWriteLevel(payload.level),\n message,\n payload,\n {}\n ),\n {\n source: 'server',\n warnIfUnavailable: true,\n }\n );\n },\n }) as StructuredLog<TFields>;\n}\n","import { resolveConfig } from '../../core/config';\nimport {\n buildRecord,\n buildStructuredRecord,\n resolveStructuredWriteLevel,\n type LogMethodName,\n} from '../../core/log-record';\nimport {\n createStructuredLog,\n type StructuredLog,\n type StructuredLogPayload,\n} from '../../core/structured-log';\nimport { createDatabuddySender } from './sender';\nimport type {\n DatabuddyErrorTracker,\n DatabuddyExceptionCaptureOptions,\n DatabuddyLogger,\n DatabuddyLoggerConfig,\n DatabuddySender,\n} from '../../types/connectors/databuddy';\n\nexport type {\n DatabuddyErrorTracker,\n DatabuddyExceptionCaptureOptions,\n DatabuddyLogger,\n DatabuddyLoggerConfig,\n} from '../../types/connectors/databuddy';\n\nfunction resolveSender(config: DatabuddyLoggerConfig = {}): DatabuddySender {\n return createDatabuddySender(resolveConfig({\n ...(config.connectors ? { connectors: config.connectors } : {}),\n }));\n}\n\nfunction createDatabuddyLoggerInstance(\n sender: DatabuddySender,\n bindings: Record<string, unknown> = {}\n): DatabuddyLogger {\n const writeRecord = (\n level: LogMethodName,\n message: unknown,\n args: unknown[]\n ): void => {\n sender.send(buildRecord(level, message, args, bindings), {\n source: 'server',\n warnIfUnavailable: true,\n });\n };\n\n const writeStructured = (\n payload: StructuredLogPayload,\n message: string\n ): void => {\n sender.send(\n buildStructuredRecord(\n resolveStructuredWriteLevel(payload.level),\n message,\n payload,\n bindings\n ),\n {\n source: 'server',\n warnIfUnavailable: true,\n }\n );\n };\n\n return {\n debug: (message: unknown, ...args: unknown[]) => {\n writeRecord('debug', message, args);\n },\n info: (message: unknown, ...args: unknown[]) => {\n writeRecord('info', message, args);\n },\n error: (message: unknown, ...args: unknown[]) => {\n writeRecord('error', message, args);\n },\n warn: (message: unknown, ...args: unknown[]) => {\n writeRecord('warn', message, args);\n },\n warning: (message: unknown, ...args: unknown[]) => {\n writeRecord('warning', message, args);\n },\n success: (message: unknown, ...args: unknown[]) => {\n writeRecord('success', message, args);\n },\n critical: (message: unknown, ...args: unknown[]) => {\n writeRecord('critical', message, args);\n },\n table: (message: string, data?: unknown) => {\n writeRecord('table', message, data === undefined ? [] : [data]);\n },\n flush: async () => {\n await sender.flush();\n },\n shutdown: async () => {\n await sender.flush();\n },\n createStructuredLog: (\n groupId: string,\n initial?: Record<string, unknown>\n ): StructuredLog => {\n return createStructuredLog(groupId, {\n initialFields: initial,\n write: writeStructured,\n });\n },\n child: (childBindings: Record<string, unknown>) => {\n return createDatabuddyLoggerInstance(sender, {\n ...bindings,\n ...childBindings,\n });\n },\n };\n}\n\nfunction createDatabuddyErrorTrackerInstance(\n sender: DatabuddySender,\n bindings: Record<string, unknown> = {}\n): DatabuddyErrorTracker {\n return {\n capture: (error: unknown, options: DatabuddyExceptionCaptureOptions = {}) => {\n sender.captureException(error, {\n source: 'server',\n warnIfUnavailable: true,\n properties: {\n ...bindings,\n ...(options.properties ?? {}),\n blyp_source: 'server',\n blyp_manual: true,\n },\n });\n },\n child: (childBindings: Record<string, unknown>) => {\n return createDatabuddyErrorTrackerInstance(sender, {\n ...bindings,\n ...childBindings,\n });\n },\n };\n}\n\nexport function createDatabuddyLogger(config: DatabuddyLoggerConfig = {}): DatabuddyLogger {\n return createDatabuddyLoggerInstance(resolveSender(config));\n}\n\nexport function createStructuredDatabuddyLogger<\n TFields extends Record<string, unknown> = Record<string, unknown>,\n>(\n groupId: string,\n initial?: TFields,\n config: DatabuddyLoggerConfig = {}\n): StructuredLog<TFields> {\n const sender = resolveSender(config);\n\n return createStructuredLog(groupId, {\n initialFields: initial,\n write: (payload, message) => {\n sender.send(\n buildStructuredRecord(\n resolveStructuredWriteLevel(payload.level),\n message,\n payload,\n {}\n ),\n {\n source: 'server',\n warnIfUnavailable: true,\n }\n );\n },\n }) as StructuredLog<TFields>;\n}\n\nexport function createDatabuddyErrorTracker(\n config: DatabuddyLoggerConfig = {}\n): DatabuddyErrorTracker {\n return createDatabuddyErrorTrackerInstance(resolveSender(config));\n}\n\nexport function captureDatabuddyException(\n error: unknown,\n options: DatabuddyExceptionCaptureOptions = {},\n config: DatabuddyLoggerConfig = {}\n): void {\n createDatabuddyErrorTracker(config).capture(error, options);\n}\n","import { resolveConfig } from '../../core/config';\nimport {\n buildRecord,\n buildStructuredRecord,\n resolveStructuredWriteLevel,\n type LogMethodName,\n} from '../../core/log-record';\nimport {\n createStructuredLog,\n type StructuredLog,\n type StructuredLogPayload,\n} from '../../core/structured-log';\nimport {\n createPostHogSender,\n} from './sender';\nimport type {\n PostHogErrorTracker,\n PostHogExceptionCaptureOptions,\n PostHogLogger,\n PostHogLoggerConfig,\n PostHogSender,\n} from '../../types/connectors/posthog';\n\nexport type {\n PostHogErrorTracker,\n PostHogExceptionCaptureOptions,\n PostHogLogger,\n PostHogLoggerConfig,\n} from '../../types/connectors/posthog';\n\nfunction resolveSender(config: PostHogLoggerConfig = {}): PostHogSender {\n return createPostHogSender(resolveConfig({\n ...(config.connectors ? { connectors: config.connectors } : {}),\n }));\n}\n\nfunction createPostHogLoggerInstance(\n sender: PostHogSender,\n bindings: Record<string, unknown> = {}\n): PostHogLogger {\n const writeRecord = (\n level: LogMethodName,\n message: unknown,\n args: unknown[]\n ): void => {\n sender.send(buildRecord(level, message, args, bindings), {\n source: 'server',\n warnIfUnavailable: true,\n });\n };\n\n const writeStructured = (\n payload: StructuredLogPayload,\n message: string\n ): void => {\n sender.send(\n buildStructuredRecord(\n resolveStructuredWriteLevel(payload.level),\n message,\n payload,\n bindings\n ),\n {\n source: 'server',\n warnIfUnavailable: true,\n }\n );\n };\n\n return {\n debug: (message: unknown, ...args: unknown[]) => {\n writeRecord('debug', message, args);\n },\n info: (message: unknown, ...args: unknown[]) => {\n writeRecord('info', message, args);\n },\n error: (message: unknown, ...args: unknown[]) => {\n writeRecord('error', message, args);\n },\n warn: (message: unknown, ...args: unknown[]) => {\n writeRecord('warn', message, args);\n },\n warning: (message: unknown, ...args: unknown[]) => {\n writeRecord('warning', message, args);\n },\n success: (message: unknown, ...args: unknown[]) => {\n writeRecord('success', message, args);\n },\n critical: (message: unknown, ...args: unknown[]) => {\n writeRecord('critical', message, args);\n },\n table: (message: string, data?: unknown) => {\n writeRecord('table', message, data === undefined ? [] : [data]);\n },\n flush: async () => {},\n shutdown: async () => {},\n createStructuredLog: (\n groupId: string,\n initial?: Record<string, unknown>\n ): StructuredLog => {\n return createStructuredLog(groupId, {\n initialFields: initial,\n write: writeStructured,\n });\n },\n child: (childBindings: Record<string, unknown>) => {\n return createPostHogLoggerInstance(sender, {\n ...bindings,\n ...childBindings,\n });\n },\n };\n}\n\nfunction createPostHogErrorTrackerInstance(\n sender: PostHogSender,\n bindings: Record<string, unknown> = {}\n): PostHogErrorTracker {\n return {\n capture: (error: unknown, options: PostHogExceptionCaptureOptions = {}) => {\n sender.captureException(error, {\n source: 'server',\n warnIfUnavailable: true,\n distinctId: options.distinctId,\n properties: {\n ...bindings,\n ...(options.properties ?? {}),\n 'blyp.source': 'server',\n 'blyp.manual': true,\n },\n });\n },\n child: (childBindings: Record<string, unknown>) => {\n return createPostHogErrorTrackerInstance(sender, {\n ...bindings,\n ...childBindings,\n });\n },\n };\n}\n\nexport function createPosthogLogger(config: PostHogLoggerConfig = {}): PostHogLogger {\n return createPostHogLoggerInstance(resolveSender(config));\n}\n\nexport function createStructuredPosthogLogger<\n TFields extends Record<string, unknown> = Record<string, unknown>,\n>(\n groupId: string,\n initial?: TFields,\n config: PostHogLoggerConfig = {}\n): StructuredLog<TFields> {\n const sender = resolveSender(config);\n\n return createStructuredLog(groupId, {\n initialFields: initial,\n write: (payload, message) => {\n sender.send(\n buildStructuredRecord(\n resolveStructuredWriteLevel(payload.level),\n message,\n payload,\n {}\n ),\n {\n source: 'server',\n warnIfUnavailable: true,\n }\n );\n },\n }) as StructuredLog<TFields>;\n}\n\nexport function createPosthogErrorTracker(\n config: PostHogLoggerConfig = {}\n): PostHogErrorTracker {\n return createPostHogErrorTrackerInstance(resolveSender(config));\n}\n\nexport function capturePosthogException(\n error: unknown,\n options: PostHogExceptionCaptureOptions = {},\n config: PostHogLoggerConfig = {}\n): void {\n createPosthogErrorTracker(config).capture(error, options);\n}\n","import { resolveConfig } from '../../core/config';\nimport {\n buildRecord,\n buildStructuredRecord,\n resolveStructuredWriteLevel,\n type LogMethodName,\n} from '../../core/log-record';\nimport {\n createStructuredLog,\n type StructuredLog,\n type StructuredLogPayload,\n} from '../../core/structured-log';\nimport {\n createSentrySender,\n} from './sender';\nimport type {\n SentryLogger,\n SentryLoggerConfig,\n SentrySender,\n} from '../../types/connectors/sentry';\n\nexport type {\n SentryLogger,\n SentryLoggerConfig,\n} from '../../types/connectors/sentry';\n\nfunction resolveSender(config: SentryLoggerConfig = {}): SentrySender {\n return createSentrySender(resolveConfig({\n ...(config.connectors ? { connectors: config.connectors } : {}),\n }));\n}\n\nfunction createSentryLoggerInstance(\n sender: SentrySender,\n bindings: Record<string, unknown> = {}\n): SentryLogger {\n const writeRecord = (\n level: LogMethodName,\n message: unknown,\n args: unknown[]\n ): void => {\n sender.send(buildRecord(level, message, args, bindings), {\n source: 'server',\n warnIfUnavailable: true,\n });\n };\n\n const writeStructured = (\n payload: StructuredLogPayload,\n message: string\n ): void => {\n sender.send(\n buildStructuredRecord(\n resolveStructuredWriteLevel(payload.level),\n message,\n payload,\n bindings\n ),\n {\n source: 'server',\n warnIfUnavailable: true,\n }\n );\n };\n\n return {\n debug: (message: unknown, ...args: unknown[]) => {\n writeRecord('debug', message, args);\n },\n info: (message: unknown, ...args: unknown[]) => {\n writeRecord('info', message, args);\n },\n error: (message: unknown, ...args: unknown[]) => {\n writeRecord('error', message, args);\n },\n warn: (message: unknown, ...args: unknown[]) => {\n writeRecord('warn', message, args);\n },\n warning: (message: unknown, ...args: unknown[]) => {\n writeRecord('warning', message, args);\n },\n success: (message: unknown, ...args: unknown[]) => {\n writeRecord('success', message, args);\n },\n critical: (message: unknown, ...args: unknown[]) => {\n writeRecord('critical', message, args);\n },\n table: (message: string, data?: unknown) => {\n writeRecord('table', message, data === undefined ? [] : [data]);\n },\n flush: async () => {},\n shutdown: async () => {},\n createStructuredLog: (\n groupId: string,\n initial?: Record<string, unknown>\n ): StructuredLog => {\n return createStructuredLog(groupId, {\n initialFields: initial,\n write: writeStructured,\n });\n },\n child: (childBindings: Record<string, unknown>) => {\n return createSentryLoggerInstance(sender, {\n ...bindings,\n ...childBindings,\n });\n },\n };\n}\n\nexport function createSentryLogger(config: SentryLoggerConfig = {}): SentryLogger {\n return createSentryLoggerInstance(resolveSender(config));\n}\n\nexport function createStructuredSentryLogger<\n TFields extends Record<string, unknown> = Record<string, unknown>,\n>(\n groupId: string,\n initial?: TFields,\n config: SentryLoggerConfig = {}\n): StructuredLog<TFields> {\n const sender = resolveSender(config);\n\n return createStructuredLog(groupId, {\n initialFields: initial,\n write: (payload, message) => {\n sender.send(\n buildStructuredRecord(\n resolveStructuredWriteLevel(payload.level),\n message,\n payload,\n {}\n ),\n {\n source: 'server',\n warnIfUnavailable: true,\n }\n );\n },\n }) as StructuredLog<TFields>;\n}\n","import { getArrowForMethod, getMethodColor, getResponseTimeColor, getStatusColor } from '../../core/colors';\nimport type {\n ErrorLike,\n HeaderRecord,\n HttpRequestLog,\n RequestLike,\n} from '../../types/frameworks/http';\n\nexport type { ErrorLike, HeaderRecord, HttpRequestLog, RequestLike, ResolveLike } from '../../types/frameworks/http';\n\nexport function getHeaderValue(\n headers: RequestLike['headers'],\n name: string\n): string | undefined {\n if (!headers) {\n return undefined;\n }\n\n if (headers instanceof Headers) {\n return headers.get(name) ?? headers.get(name.toLowerCase()) ?? undefined;\n }\n\n if (typeof (headers as { get?: unknown }).get === 'function') {\n const direct = (headers as { get(name: string): string | null }).get(name);\n return direct ?? (headers as { get(name: string): string | null }).get(name.toLowerCase()) ?? undefined;\n }\n\n const record = headers as HeaderRecord;\n const direct = record[name] ?? record[name.toLowerCase()];\n if (Array.isArray(direct)) {\n return direct[0];\n }\n\n return direct;\n}\n\nfunction parseForwardedHeader(value: string | undefined): string[] {\n if (!value) {\n return [];\n }\n\n return value\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean)\n .map((entry) => {\n const match = entry.match(/for=\"?(\\[[^\\]]+\\]|[^;,\\s\"]+)/i);\n return match?.[1]?.replace(/^\"|\"$/g, '') ?? '';\n })\n .map((entry) => entry.replace(/^\\[|\\]$/g, ''))\n .filter(Boolean);\n}\n\nfunction parseForwardedFor(value: string | undefined): string[] {\n if (!value) {\n return [];\n }\n\n return value\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n}\n\nfunction stripPort(host: string): string {\n if (host.startsWith('[')) {\n const endIndex = host.indexOf(']');\n return endIndex >= 0 ? host.slice(1, endIndex) : host;\n }\n\n return host.replace(/:\\d+$/, '');\n}\n\nfunction detectBrowser(userAgent: string): string {\n if (/edg\\//i.test(userAgent)) return 'Edge';\n if (/opr\\//i.test(userAgent) || /opera/i.test(userAgent)) return 'Opera';\n if (/chrome\\//i.test(userAgent) && !/edg\\//i.test(userAgent)) return 'Chrome';\n if (/firefox\\//i.test(userAgent)) return 'Firefox';\n if (/safari\\//i.test(userAgent) && !/chrome\\//i.test(userAgent)) return 'Safari';\n if (/curl\\//i.test(userAgent)) return 'curl';\n if (/postmanruntime/i.test(userAgent)) return 'Postman';\n return 'Unknown';\n}\n\nfunction detectOperatingSystem(userAgent: string): string {\n if (/windows/i.test(userAgent)) return 'Windows';\n if (/android/i.test(userAgent)) return 'Android';\n if (/iphone|ipad|ipod/i.test(userAgent)) return 'iOS';\n if (/mac os x|macintosh/i.test(userAgent)) return 'macOS';\n if (/linux/i.test(userAgent)) return 'Linux';\n return 'Unknown';\n}\n\nfunction detectDeviceType(userAgent: string): 'desktop' | 'mobile' | 'tablet' | 'bot' | 'unknown' {\n if (!userAgent) return 'unknown';\n if (/bot|crawler|spider|curl|wget|postmanruntime/i.test(userAgent)) return 'bot';\n if (/ipad|tablet/i.test(userAgent)) return 'tablet';\n if (/mobi|iphone|android/i.test(userAgent)) return 'mobile';\n return 'desktop';\n}\n\nexport function extractPathname(requestUrl: string, fallbackPath: string = '/'): string {\n if (!requestUrl) {\n return fallbackPath;\n }\n\n if (requestUrl.startsWith('http://') || requestUrl.startsWith('https://')) {\n try {\n return new URL(requestUrl).pathname || fallbackPath;\n } catch {\n return fallbackPath;\n }\n }\n\n if (requestUrl.startsWith('/')) {\n const queryIndex = requestUrl.indexOf('?');\n return queryIndex >= 0 ? requestUrl.slice(0, queryIndex) : requestUrl;\n }\n\n try {\n return new URL(requestUrl, 'http://localhost').pathname || fallbackPath;\n } catch {\n return fallbackPath;\n }\n}\n\nexport function createRequestLike(\n method: string,\n url: string,\n headers?: RequestLike['headers']\n): RequestLike {\n return { method, url, headers };\n}\n\nexport function buildClientDetails(\n request: RequestLike,\n fallbackPath?: string\n): Omit<HttpRequestLog, 'type' | 'method' | 'url' | 'statusCode' | 'responseTime' | 'error' | 'stack'> {\n const pathname = fallbackPath ?? extractPathname(request.url);\n const urlObject = (() => {\n try {\n return new URL(request.url);\n } catch {\n try {\n return new URL(pathname, 'http://localhost');\n } catch {\n return null;\n }\n }\n })();\n\n const hostHeader =\n getHeaderValue(request.headers, 'x-forwarded-host') ??\n getHeaderValue(request.headers, 'host') ??\n urlObject?.host ??\n undefined;\n const hostname = hostHeader ? stripPort(hostHeader) : urlObject?.hostname;\n const port = hostHeader?.match(/:(\\d+)$/)?.[1] ?? (urlObject?.port || undefined);\n const xForwardedFor = parseForwardedFor(getHeaderValue(request.headers, 'x-forwarded-for'));\n const forwardedFor = parseForwardedHeader(getHeaderValue(request.headers, 'forwarded'));\n const ipCandidates = [\n getHeaderValue(request.headers, 'cf-connecting-ip'),\n getHeaderValue(request.headers, 'true-client-ip'),\n getHeaderValue(request.headers, 'fly-client-ip'),\n getHeaderValue(request.headers, 'x-real-ip'),\n getHeaderValue(request.headers, 'x-client-ip'),\n xForwardedFor[0],\n forwardedFor[0],\n ].filter((value): value is string => Boolean(value));\n const userAgent = getHeaderValue(request.headers, 'user-agent');\n const platform =\n getHeaderValue(request.headers, 'sec-ch-ua-platform')?.replace(/^\"|\"$/g, '') ??\n undefined;\n const deviceType = detectDeviceType(userAgent ?? '');\n\n return {\n hostname,\n ip: ipCandidates[0],\n forwardedFor: [...xForwardedFor, ...forwardedFor].filter((value, index, values) => {\n return values.indexOf(value) === index;\n }),\n protocol:\n getHeaderValue(request.headers, 'x-forwarded-proto') ??\n (urlObject?.protocol ? urlObject.protocol.replace(/:$/, '') : undefined),\n port,\n userAgent,\n origin: getHeaderValue(request.headers, 'origin'),\n referer: getHeaderValue(request.headers, 'referer'),\n acceptLanguage: getHeaderValue(request.headers, 'accept-language'),\n client: {\n ip: ipCandidates[0],\n hostname,\n browser: userAgent ? detectBrowser(userAgent) : undefined,\n os: userAgent ? detectOperatingSystem(userAgent) : undefined,\n deviceType,\n platform,\n isMobile: deviceType === 'mobile',\n },\n };\n}\n\nexport function buildRequestLogData(\n request: RequestLike,\n type: 'http_request' | 'http_error',\n path: string,\n statusCode: number,\n responseTime: number,\n extra: Record<string, unknown> = {}\n): HttpRequestLog {\n return {\n type,\n method: request.method,\n url: path,\n statusCode,\n responseTime,\n ...buildClientDetails(request, path),\n ...extra,\n };\n}\n\nexport function buildInfoLogMessage(\n method: string,\n statusCode: number,\n url: string,\n responseTime: number\n): string {\n const methodColor = getMethodColor(method);\n const statusColor = getStatusColor(statusCode);\n const timeColor = getResponseTimeColor(responseTime);\n const arrow = getArrowForMethod(method);\n return `${methodColor} ${arrow} ${statusColor} ${url} ${timeColor}`;\n}\n\nexport function toErrorLike(error: unknown, fallbackStatusCode?: number): ErrorLike | undefined {\n if (error === undefined || error === null) {\n return fallbackStatusCode === undefined\n ? undefined\n : { statusCode: fallbackStatusCode, message: `HTTP ${fallbackStatusCode}` };\n }\n\n if (error instanceof Error) {\n const errorWithStatus = error as ErrorLike;\n return {\n status: errorWithStatus.status,\n statusCode: errorWithStatus.statusCode ?? fallbackStatusCode,\n code: errorWithStatus.code,\n message: error.message,\n stack: error.stack,\n why: errorWithStatus.why,\n fix: errorWithStatus.fix,\n link: errorWithStatus.link,\n details: errorWithStatus.details,\n cause: errorWithStatus.cause,\n };\n }\n\n if (typeof error === 'object') {\n const record = error as Record<string, unknown>;\n return {\n status: typeof record.status === 'number' ? record.status : undefined,\n statusCode:\n typeof record.statusCode === 'number'\n ? record.statusCode\n : fallbackStatusCode,\n code:\n typeof record.code === 'string' || typeof record.code === 'number'\n ? record.code\n : undefined,\n message: typeof record.message === 'string' ? record.message : `HTTP ${fallbackStatusCode ?? 500}`,\n stack: typeof record.stack === 'string' ? record.stack : undefined,\n why: typeof record.why === 'string' ? record.why : undefined,\n fix: typeof record.fix === 'string' ? record.fix : undefined,\n link: typeof record.link === 'string' ? record.link : undefined,\n details:\n record.details !== null && typeof record.details === 'object' && !Array.isArray(record.details)\n ? record.details as Record<string, unknown>\n : undefined,\n cause: record.cause,\n };\n }\n\n return {\n statusCode: fallbackStatusCode,\n message: typeof error === 'string' ? error : `HTTP ${fallbackStatusCode ?? 500}`,\n };\n}\n\nexport function isErrorStatus(statusCode: number): boolean {\n return statusCode >= 400;\n}\n","import { DEFAULT_CLIENT_LOG_ENDPOINT, isClientLogEvent, normalizeEndpointPath } from '../../shared/client-log';\nimport type { ClientLogEvent } from '../../shared/client-log';\nimport { resolveConfig } from '../../core/config';\nimport { getMethodColor, getResponseTimeColor, getStatusColor } from '../../core/colors';\nimport { resolveStatusCode, shouldIgnorePath } from '../../core/helpers';\nimport { buildPostHogExceptionProperties } from '../../connectors/posthog/sender';\nimport {\n createBaseLogger,\n getBetterStackSender,\n getDatabuddySender,\n getOtlpRegistry,\n getPostHogSender,\n getSentrySender,\n tryGetBetterStackSender,\n tryGetDatabuddySender,\n tryGetPostHogSender,\n} from '../../core/logger';\nimport {\n buildClientDetails,\n buildInfoLogMessage,\n buildRequestLogData,\n getHeaderValue,\n extractPathname,\n isErrorStatus,\n} from './http';\nimport type { ErrorLike, HttpRequestLog, RequestLike, ResolveLike } from '../../types/frameworks/http';\nimport type {\n ClientLogIngestionConfig,\n ResolvedServerLogger,\n ServerLoggerConfig,\n} from '../../types/frameworks/shared';\nimport type { HttpErrorCaptureContext } from '../../types/frameworks/request-logger';\n\nfunction buildVerboseLogMessage(\n method: string,\n statusCode: number,\n url: string,\n responseTime: number\n): string {\n const methodColor = getMethodColor(method);\n const statusColor = getStatusColor(statusCode);\n const timeColor = getResponseTimeColor(responseTime);\n return `${methodColor} ${url} ${statusColor} ${timeColor}`;\n}\n\nexport function resolveClientLoggingConfig<Ctx>(\n clientLogging: ServerLoggerConfig<Ctx>['clientLogging'],\n defaultClientLogging: { enabled?: boolean; path?: string } | undefined\n): ClientLogIngestionConfig<Ctx> | null {\n const defaultPath = normalizeEndpointPath(\n defaultClientLogging?.path ?? DEFAULT_CLIENT_LOG_ENDPOINT\n );\n const defaultConfig = defaultClientLogging?.enabled === false\n ? null\n : { path: defaultPath };\n\n if (clientLogging === false) {\n return null;\n }\n\n if (clientLogging === undefined) {\n return defaultConfig;\n }\n\n if (clientLogging === true) {\n return {\n path: defaultPath,\n };\n }\n\n return {\n ...defaultConfig,\n ...clientLogging,\n path: normalizeEndpointPath(clientLogging.path ?? defaultPath),\n };\n}\n\nexport function resolveServerLogger<Ctx>(\n config: ServerLoggerConfig<Ctx> = {},\n loggerOverride?: ReturnType<typeof createBaseLogger>\n): ResolvedServerLogger<Ctx> {\n const resolvedConfig = resolveConfig({\n ...(config.level !== undefined ? { level: config.level } : {}),\n ...(config.pretty !== undefined ? { pretty: config.pretty } : {}),\n ...(config.destination !== undefined ? { destination: config.destination } : {}),\n ...(config.logDir !== undefined ? { logDir: config.logDir } : {}),\n ...(config.file !== undefined ? { file: config.file } : {}),\n ...(config.database !== undefined ? { database: config.database } : {}),\n ...(config.connectors !== undefined ? { connectors: config.connectors } : {}),\n });\n const {\n level = resolvedConfig.level,\n pretty = resolvedConfig.pretty,\n destination = resolvedConfig.destination,\n logDir = resolvedConfig.logDir,\n file = resolvedConfig.file,\n database = resolvedConfig.database,\n autoLogging = true,\n customProps,\n logErrors = true,\n ignorePaths,\n clientLogging,\n connectors,\n } = config;\n const logger = loggerOverride ?? createBaseLogger({\n level,\n pretty,\n destination,\n logDir,\n file,\n database,\n connectors,\n });\n const resolvedClientLogging = resolveClientLoggingConfig(\n clientLogging,\n resolvedConfig.clientLogging\n );\n const ingestionPath = resolvedClientLogging?.path ?? DEFAULT_CLIENT_LOG_ENDPOINT;\n const resolvedIgnorePaths = resolvedClientLogging\n ? Array.from(new Set([...(ignorePaths ?? []), ingestionPath]))\n : ignorePaths;\n\n return {\n logger,\n betterstack: getBetterStackSender(logger),\n databuddy: getDatabuddySender(logger),\n posthog: getPostHogSender(logger),\n sentry: getSentrySender(logger),\n otlp: getOtlpRegistry(logger),\n resolvedConfig,\n level,\n pretty,\n logDir,\n file,\n autoLogging,\n customProps,\n logErrors,\n resolvedIgnorePaths,\n resolvedClientLogging,\n ingestionPath,\n };\n}\n\nexport function shouldSkipAutoLogging<Ctx>(\n config: ResolvedServerLogger<Ctx>,\n ctx: Ctx,\n path: string\n): boolean {\n if (config.autoLogging === false) {\n return true;\n }\n\n if (\n typeof config.autoLogging === 'object' &&\n config.autoLogging.ignore?.(ctx)\n ) {\n return true;\n }\n\n return shouldIgnorePath(path, config.resolvedIgnorePaths);\n}\n\nexport function shouldSkipErrorLogging<Ctx>(\n config: ResolvedServerLogger<Ctx>,\n path: string\n): boolean {\n if (!config.logErrors) {\n return true;\n }\n\n return shouldIgnorePath(path, config.resolvedIgnorePaths);\n}\n\nexport function resolveAdditionalProps<Ctx>(\n config: ResolvedServerLogger<Ctx>,\n ctx: Ctx\n): Record<string, unknown> {\n return config.customProps ? config.customProps(ctx) : {};\n}\n\nexport function emitHttpRequestLog(\n logger: ResolvedServerLogger<unknown>['logger'],\n level: string,\n request: RequestLike,\n path: string,\n statusCode: number,\n responseTime: number,\n additionalProps: Record<string, unknown> = {}\n): HttpRequestLog {\n const requestLogData = buildRequestLogData(\n request,\n 'http_request',\n path,\n statusCode,\n responseTime,\n additionalProps\n );\n\n if (level === 'info') {\n logger.info(\n buildInfoLogMessage(request.method, statusCode, path, responseTime),\n requestLogData\n );\n } else {\n logger.info(\n buildVerboseLogMessage(request.method, statusCode, path, responseTime),\n requestLogData\n );\n if (Object.keys(additionalProps).length > 0) {\n logger.debug('Request context', additionalProps);\n }\n }\n\n return requestLogData;\n}\n\nexport function emitHttpErrorLog(\n logger: ResolvedServerLogger<unknown>['logger'],\n level: string,\n request: RequestLike,\n path: string,\n statusCode: number,\n responseTime: number,\n error: ErrorLike | undefined,\n additionalProps: Record<string, unknown> = {},\n captureContext: HttpErrorCaptureContext = {}\n): HttpRequestLog {\n const errorLogData = buildRequestLogData(\n request,\n 'http_error',\n path,\n statusCode,\n responseTime,\n {\n error: error?.message ?? `HTTP ${statusCode}`,\n stack: error?.stack,\n code: error?.code,\n why: error?.why,\n fix: error?.fix,\n link: error?.link,\n details: error?.details,\n ...additionalProps,\n }\n );\n\n const message = level === 'info'\n ? buildInfoLogMessage(request.method, statusCode, path, responseTime)\n : buildVerboseLogMessage(request.method, statusCode, path, responseTime);\n logger.error(message, errorLogData);\n\n const posthog = tryGetPostHogSender(logger);\n if (posthog?.shouldAutoCaptureExceptions()) {\n posthog.captureException(captureContext.error ?? error ?? message, {\n source: 'server',\n warnIfUnavailable: true,\n distinctId:\n captureContext.distinctId ??\n getHeaderValue(request.headers, 'x-posthog-distinct-id'),\n properties: buildPostHogExceptionProperties(\n {\n timestamp: new Date().toISOString(),\n level: 'error',\n message,\n data: errorLogData,\n },\n 'server',\n {\n $request_method: request.method,\n $request_path: path,\n $current_url: request.url,\n $response_status_code: statusCode,\n ...(getHeaderValue(request.headers, 'user-agent')\n ? { $user_agent: getHeaderValue(request.headers, 'user-agent') }\n : {}),\n ...(errorLogData.ip ? { $ip: errorLogData.ip } : {}),\n }\n ),\n });\n }\n\n const betterstack = tryGetBetterStackSender(logger);\n if (betterstack?.shouldAutoCaptureExceptions()) {\n betterstack.captureException(captureContext.error ?? error ?? message, {\n source: 'server',\n warnIfUnavailable: true,\n context: {\n timestamp: new Date().toISOString(),\n level: 'error',\n message,\n status: statusCode,\n path,\n data: errorLogData,\n },\n });\n }\n\n const databuddy = tryGetDatabuddySender(logger);\n if (databuddy?.shouldAutoCaptureExceptions()) {\n databuddy.captureException(captureContext.error ?? error ?? message, {\n source: 'server',\n warnIfUnavailable: true,\n properties: {\n method: request.method,\n path,\n status_code: statusCode,\n ...(request.url ? { current_url: request.url } : {}),\n ...(getHeaderValue(request.headers, 'user-agent')\n ? { user_agent: getHeaderValue(request.headers, 'user-agent') }\n : {}),\n ...(errorLogData.ip ? { ip: errorLogData.ip } : {}),\n payload: errorLogData,\n },\n });\n }\n\n return errorLogData;\n}\n\nexport async function parseClientLogPayload(\n request: RequestLike & { json?: () => Promise<unknown> },\n body?: unknown\n): Promise<unknown> {\n if (body !== undefined) {\n if (typeof body === 'string') {\n return JSON.parse(body);\n }\n\n return body;\n }\n\n if (typeof request.json === 'function') {\n return await request.json();\n }\n\n throw new Error('Unable to parse client log payload');\n}\n\nfunction getClientLogMethod(\n logger: ResolvedServerLogger<unknown>['logger'],\n level: Exclude<ClientLogEvent['level'], 'table'>\n): (message: unknown, ...args: unknown[]) => void {\n switch (level) {\n case 'debug':\n return logger.debug;\n case 'info':\n return logger.info;\n case 'warning':\n return logger.warning;\n case 'error':\n return logger.error;\n case 'critical':\n return logger.critical;\n case 'success':\n return logger.success;\n }\n}\n\nexport async function handleClientLogIngestion<Ctx>(options: {\n config: ResolvedServerLogger<Ctx>;\n ctx: Ctx;\n request: RequestLike & { json?: () => Promise<unknown> };\n body?: unknown;\n deliveryPath?: string;\n}): Promise<{ status: number; headers?: Record<string, string> }> {\n const { config, ctx, request, body, deliveryPath } = options;\n\n if (!config.resolvedClientLogging) {\n return { status: 404 };\n }\n\n let payload: unknown;\n try {\n payload = await parseClientLogPayload(request, body);\n } catch {\n return { status: 400 };\n }\n\n if (!isClientLogEvent(payload)) {\n return { status: 400 };\n }\n\n const isAllowed = config.resolvedClientLogging.validate\n ? await config.resolvedClientLogging.validate(ctx, payload)\n : true;\n if (!isAllowed) {\n return { status: 403 };\n }\n\n const serverContext = config.resolvedClientLogging.enrich\n ? await config.resolvedClientLogging.enrich(ctx, payload)\n : undefined;\n const structuredPayload: Record<string, unknown> = {\n ...payload,\n receivedAt: new Date().toISOString(),\n delivery: buildClientDetails(request, deliveryPath ?? extractPathname(request.url)),\n };\n\n if (serverContext !== undefined) {\n structuredPayload.serverContext = serverContext;\n }\n\n if (payload.level === 'table') {\n config.logger.table(`[client] ${payload.message}`, structuredPayload);\n } else {\n const logMethod = getClientLogMethod(config.logger, payload.level);\n logMethod(`[client] ${payload.message}`, structuredPayload);\n }\n\n const headers: Record<string, string> = {};\n if (payload.connector === 'betterstack') {\n headers['x-blyp-betterstack-status'] = config.betterstack.ready ? 'enabled' : 'missing';\n\n if (config.betterstack.ready) {\n const forwardedRecord = {\n timestamp: structuredPayload.receivedAt as string,\n level: payload.level,\n message: `[client] ${payload.message}`,\n data: structuredPayload,\n };\n\n config.betterstack.send(forwardedRecord, {\n source: 'client',\n });\n\n if (\n (payload.level === 'error' || payload.level === 'critical') &&\n config.betterstack.shouldAutoCaptureExceptions()\n ) {\n const clientErrorCandidate =\n payload.data &&\n typeof payload.data === 'object' &&\n !Array.isArray(payload.data) &&\n typeof (payload.data as Record<string, unknown>).message === 'string'\n ? payload.data\n : payload.message;\n\n config.betterstack.captureException(clientErrorCandidate, {\n source: 'client',\n warnIfUnavailable: true,\n context: {\n sessionId: payload.session.sessionId,\n pageUrl: payload.page.url,\n pagePath: payload.page.pathname,\n metadata: payload.metadata,\n payload: structuredPayload,\n },\n });\n }\n }\n } else if (payload.connector === 'databuddy') {\n headers['x-blyp-databuddy-status'] = config.databuddy.ready ? 'enabled' : 'missing';\n\n if (config.databuddy.ready) {\n const forwardedRecord = {\n timestamp: structuredPayload.receivedAt as string,\n level: payload.level,\n message: `[client] ${payload.message}`,\n data: structuredPayload,\n };\n\n config.databuddy.send(forwardedRecord, {\n source: 'client',\n });\n\n if (\n (payload.level === 'error' || payload.level === 'critical') &&\n config.databuddy.shouldAutoCaptureExceptions()\n ) {\n const clientErrorCandidate =\n payload.data &&\n typeof payload.data === 'object' &&\n !Array.isArray(payload.data) &&\n typeof (payload.data as Record<string, unknown>).message === 'string'\n ? payload.data\n : payload.message;\n\n config.databuddy.captureException(clientErrorCandidate, {\n source: 'client',\n warnIfUnavailable: true,\n sessionId: payload.session.sessionId,\n properties: {\n page_url: payload.page.url,\n page_path: payload.page.pathname,\n client_runtime: payload.device?.runtime,\n metadata: payload.metadata,\n payload: structuredPayload,\n },\n });\n }\n }\n } else if (payload.connector === 'posthog') {\n headers['x-blyp-posthog-status'] = config.posthog.ready ? 'enabled' : 'missing';\n\n if (config.posthog.ready) {\n const forwardedRecord = {\n timestamp: structuredPayload.receivedAt as string,\n level: payload.level,\n message: `[client] ${payload.message}`,\n data: structuredPayload,\n };\n\n config.posthog.send(forwardedRecord, {\n source: 'client',\n });\n\n if (\n (payload.level === 'error' || payload.level === 'critical') &&\n config.posthog.shouldAutoCaptureExceptions()\n ) {\n const metadata = structuredPayload.metadata;\n const posthogDistinctId =\n metadata &&\n typeof metadata === 'object' &&\n !Array.isArray(metadata) &&\n typeof (metadata as Record<string, unknown>).posthogDistinctId === 'string' &&\n (metadata as Record<string, unknown>).posthogDistinctId\n ? String((metadata as Record<string, unknown>).posthogDistinctId)\n : undefined;\n\n const clientErrorCandidate =\n payload.data &&\n typeof payload.data === 'object' &&\n !Array.isArray(payload.data) &&\n typeof (payload.data as Record<string, unknown>).message === 'string'\n ? payload.data\n : payload.message;\n\n config.posthog.captureException(clientErrorCandidate, {\n source: 'client',\n warnIfUnavailable: true,\n distinctId: posthogDistinctId,\n properties: buildPostHogExceptionProperties(forwardedRecord, 'client', {\n $session_id: payload.session.sessionId,\n $current_url: payload.page.url,\n $request_path: payload.page.pathname,\n 'client.runtime': payload.device?.runtime,\n 'client.metadata': payload.metadata,\n }),\n });\n }\n }\n } else if (payload.connector === 'sentry') {\n headers['x-blyp-sentry-status'] = config.sentry.ready ? 'enabled' : 'missing';\n\n if (config.sentry.ready) {\n config.sentry.send({\n timestamp: structuredPayload.receivedAt as string,\n level: payload.level,\n message: `[client] ${payload.message}`,\n data: structuredPayload,\n }, {\n source: 'client',\n });\n }\n } else if (payload.connector?.type === 'otlp') {\n const sender = config.otlp.get(payload.connector.name);\n\n headers['x-blyp-otlp-status'] = sender.ready ? 'enabled' : 'missing';\n\n if (sender.ready) {\n sender.send({\n timestamp: structuredPayload.receivedAt as string,\n level: payload.level,\n message: `[client] ${payload.message}`,\n data: structuredPayload,\n }, {\n source: 'client',\n });\n }\n }\n\n return Object.keys(headers).length > 0\n ? { status: 204, headers }\n : { status: 204 };\n}\n\nexport async function readNodeRequestBody(\n stream: AsyncIterable<Uint8Array | string>\n): Promise<string> {\n const chunks: Buffer[] = [];\n\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n\n return Buffer.concat(chunks).toString('utf8');\n}\n\nexport function buildAbsoluteUrl(\n path: string,\n headers?: RequestLike['headers']\n): string {\n if (path.startsWith('http://') || path.startsWith('https://')) {\n return path;\n }\n\n const protocol = getHeaderValue(headers, 'x-forwarded-proto') ?? 'http';\n const host = getHeaderValue(headers, 'host') ?? 'localhost';\n return `${protocol}://${host}${path.startsWith('/') ? path : `/${path}`}`;\n}\n\nexport function resolveRequestStatus(\n ctx: ResolveLike,\n successCode: number = 200,\n errorCode: number = 500,\n isError: boolean = false\n): number {\n return resolveStatusCode(\n {\n set: ctx.set,\n error: ctx.error\n ? {\n status: ctx.error.status,\n statusCode: ctx.error.statusCode,\n code: ctx.error.code === undefined ? undefined : String(ctx.error.code),\n }\n : undefined,\n code: ctx.code === undefined ? undefined : String(ctx.code),\n },\n successCode,\n errorCode,\n isError\n );\n}\n\nexport function shouldAutoFlushServerLogger<Ctx>(\n config: ResolvedServerLogger<Ctx>\n): boolean {\n return config.resolvedConfig.destination === 'database';\n}\n\nexport async function flushServerLoggerSafely<Ctx>(\n config: ResolvedServerLogger<Ctx>\n): Promise<void> {\n if (!shouldAutoFlushServerLogger(config)) {\n return;\n }\n\n try {\n await config.logger.flush();\n } catch (error) {\n console.warn('[Blyp] Warning: Failed to flush database logs.', error);\n }\n}\n\nexport {\n buildInfoLogMessage,\n buildRequestLogData,\n createRequestLike,\n extractPathname,\n isErrorStatus,\n toErrorLike,\n} from './http';\n","import {\n attachLoggerInternals,\n createLoggerWithSource,\n createStructuredLogForLogger,\n type BlypLogger,\n} from '../../core/logger';\nimport type { StructuredLog } from '../../core/structured-log';\nimport {\n markStructuredCollectorActive,\n markStructuredLogEmitted,\n setActiveRequestLogger,\n} from './request-context';\nimport type { RequestScopedLoggerOptions } from '../../types/frameworks/request-logger';\n\nexport type { RequestScopedLoggerOptions } from '../../types/frameworks/request-logger';\n\nexport function createRequestScopedLogger(\n logger: BlypLogger,\n options: RequestScopedLoggerOptions = {}\n): BlypLogger {\n const scopedLogger = createLoggerWithSource(logger, 'request-scoped');\n const requestScopedLogger = attachLoggerInternals({\n ...scopedLogger,\n createStructuredLog: (\n groupId: string,\n initial?: Record<string, unknown>\n ): StructuredLog => {\n return createStructuredLogForLogger(requestScopedLogger, groupId, {\n initialFields: initial,\n resolveDefaultFields: options.resolveStructuredFields,\n onCreate: () => {\n markStructuredCollectorActive();\n },\n onEmit: () => {\n markStructuredLogEmitted();\n options.onStructuredEmit?.();\n },\n });\n },\n child(bindings) {\n return createRequestScopedLogger(scopedLogger.child(bindings), options);\n },\n }, scopedLogger);\n\n setActiveRequestLogger(requestScopedLogger);\n return requestScopedLogger;\n}\n","import { Elysia } from 'elysia';\nimport type {\n ClientLogIngestionConfig,\n ElysiaContext,\n ElysiaLoggerConfig,\n} from '../../types/frameworks/elysia';\nimport {\n createRequestScopedLogger,\n createRequestLike,\n enterRequestContext,\n emitHttpErrorLog,\n emitHttpRequestLog,\n extractPathname,\n flushServerLoggerSafely,\n handleClientLogIngestion,\n isErrorStatus,\n resolveAdditionalProps,\n resolveRequestStatus,\n resolveServerLogger,\n shouldSkipAutoLogging,\n shouldSkipErrorLogging,\n} from '../shared';\n\nexport function createElysiaLogger(config: ElysiaLoggerConfig = {}) {\n const shared = resolveServerLogger(config);\n\n let app = new Elysia({ name: 'logger' })\n .decorate('log', shared.logger)\n .derive({ as: 'scoped' }, (ctx) => {\n enterRequestContext();\n const requestContext = ctx as unknown as ElysiaContext & {\n blypStructuredLogEmitted?: boolean;\n };\n\n requestContext.blypStructuredLogEmitted = false;\n\n return {\n startTime: performance.now(),\n log: createRequestScopedLogger(shared.logger, {\n resolveStructuredFields: () => ({\n method: requestContext.request.method,\n path: requestContext.path || extractPathname(requestContext.request.url),\n ...resolveAdditionalProps(shared, requestContext),\n }),\n onStructuredEmit: () => {\n requestContext.blypStructuredLogEmitted = true;\n },\n }),\n };\n })\n .onAfterResponse({ as: 'scoped' }, async (ctx) => {\n const requestContext = ctx as unknown as ElysiaContext;\n const path = requestContext.path || extractPathname(requestContext.request.url);\n if ((requestContext as ElysiaContext & { blypStructuredLogEmitted?: boolean }).blypStructuredLogEmitted) {\n await flushServerLoggerSafely(shared);\n return;\n }\n if (shouldSkipAutoLogging(shared, requestContext, path)) {\n await flushServerLoggerSafely(shared);\n return;\n }\n\n const responseTime = Math.round(performance.now() - (requestContext.startTime ?? performance.now()));\n const statusCode = resolveRequestStatus(requestContext, 200, 500);\n if (isErrorStatus(statusCode)) {\n if (shouldSkipErrorLogging(shared, path)) {\n return;\n }\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n createRequestLike(requestContext.request.method, requestContext.request.url, requestContext.request.headers),\n path,\n statusCode,\n responseTime,\n requestContext.error,\n resolveAdditionalProps(shared, requestContext),\n {\n error: requestContext.error,\n }\n );\n await flushServerLoggerSafely(shared);\n return;\n }\n\n emitHttpRequestLog(\n shared.logger,\n shared.level,\n createRequestLike(requestContext.request.method, requestContext.request.url, requestContext.request.headers),\n path,\n statusCode,\n responseTime,\n resolveAdditionalProps(shared, requestContext)\n );\n await flushServerLoggerSafely(shared);\n })\n .onError({ as: 'scoped' }, async (ctx) => {\n const requestContext = ctx as unknown as ElysiaContext;\n const path = requestContext.path || extractPathname(requestContext.request.url);\n if ((requestContext as ElysiaContext & { blypStructuredLogEmitted?: boolean }).blypStructuredLogEmitted) {\n await flushServerLoggerSafely(shared);\n return;\n }\n if (shouldSkipErrorLogging(shared, path)) {\n await flushServerLoggerSafely(shared);\n return;\n }\n const responseTime = Math.round(performance.now() - (requestContext.startTime ?? performance.now()));\n const statusCode = resolveRequestStatus(requestContext, 200, 500, true);\n\n try {\n requestContext.set!.status = statusCode;\n } catch {}\n\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n createRequestLike(requestContext.request.method, requestContext.request.url, requestContext.request.headers),\n path,\n statusCode,\n responseTime,\n requestContext.error,\n resolveAdditionalProps(shared, requestContext),\n {\n error: requestContext.error,\n }\n );\n await flushServerLoggerSafely(shared);\n });\n\n if (shared.resolvedClientLogging) {\n app = app.post(shared.ingestionPath, async (ctx) => {\n const requestContext = ctx as unknown as ElysiaContext;\n const result = await handleClientLogIngestion({\n config: shared,\n ctx: requestContext,\n request: requestContext.request,\n body: requestContext.body,\n deliveryPath: shared.ingestionPath,\n });\n await flushServerLoggerSafely(shared);\n\n return new Response(null, {\n status: result.status,\n headers: result.headers,\n });\n });\n }\n\n return app;\n}\n","import type { MiddlewareHandler } from 'hono';\nimport type { HonoLoggerConfig } from '../../types/frameworks/hono';\nimport {\n createRequestScopedLogger,\n createRequestLike,\n emitHttpErrorLog,\n emitHttpRequestLog,\n extractPathname,\n flushServerLoggerSafely,\n handleClientLogIngestion,\n isErrorStatus,\n resolveAdditionalProps,\n resolveServerLogger,\n runWithRequestContext,\n shouldSkipAutoLogging,\n shouldSkipErrorLogging,\n toErrorLike,\n} from '../shared';\n\nexport function createHonoLogger(config: HonoLoggerConfig = {}): MiddlewareHandler {\n const shared = resolveServerLogger(config);\n\n return async (context, next) => {\n return runWithRequestContext(async () => {\n const startTime = performance.now();\n let structuredLogEmitted = false;\n context.set(\n 'blypLog',\n createRequestScopedLogger(shared.logger, {\n resolveStructuredFields: () => ({\n method: context.req.method,\n path: context.req.path || extractPathname(context.req.url),\n ...resolveAdditionalProps(shared, context),\n }),\n onStructuredEmit: () => {\n structuredLogEmitted = true;\n },\n })\n );\n context.set('blypStartTime', startTime);\n\n const path = context.req.path || extractPathname(context.req.url);\n if (\n shared.resolvedClientLogging &&\n context.req.method === 'POST' &&\n path === shared.ingestionPath\n ) {\n const result = await handleClientLogIngestion({\n config: shared,\n ctx: context,\n request: context.req.raw,\n deliveryPath: shared.ingestionPath,\n });\n await flushServerLoggerSafely(shared);\n\n return new Response(null, {\n status: result.status,\n headers: result.headers,\n });\n }\n\n let thrownError: unknown;\n try {\n await next();\n } catch (error) {\n thrownError = error;\n throw error;\n } finally {\n if (structuredLogEmitted) {\n await flushServerLoggerSafely(shared);\n return;\n }\n\n const responseTime = Math.round(performance.now() - startTime);\n const request = createRequestLike(\n context.req.method,\n context.req.url,\n context.req.raw.headers\n );\n const statusCode = context.res?.status ?? (thrownError ? 500 : 200);\n\n if (thrownError || isErrorStatus(statusCode)) {\n if (!shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n request,\n path,\n statusCode,\n responseTime,\n toErrorLike(thrownError, statusCode),\n resolveAdditionalProps(shared, context),\n {\n error: thrownError,\n }\n );\n }\n await flushServerLoggerSafely(shared);\n return;\n }\n\n if (!shouldSkipAutoLogging(shared, context, path)) {\n emitHttpRequestLog(\n shared.logger,\n shared.level,\n request,\n path,\n statusCode,\n responseTime,\n resolveAdditionalProps(shared, context)\n );\n }\n await flushServerLoggerSafely(shared);\n }\n });\n };\n}\n\nexport const createLogger = createHonoLogger;\n","import type { ErrorRequestHandler, RequestHandler } from 'express';\nimport type {\n ExpressLoggerConfig,\n ExpressLoggerContext,\n} from '../../types/frameworks/express';\nimport {\n buildAbsoluteUrl,\n createRequestScopedLogger,\n createRequestLike,\n enterRequestContext,\n emitHttpErrorLog,\n emitHttpRequestLog,\n extractPathname,\n handleClientLogIngestion,\n isErrorStatus,\n readNodeRequestBody,\n resolveAdditionalProps,\n resolveServerLogger,\n shouldSkipAutoLogging,\n shouldSkipErrorLogging,\n toErrorLike,\n} from '../shared';\n\nfunction buildExpressContext(\n req: ExpressLoggerContext['req'],\n res: ExpressLoggerContext['res'],\n error?: unknown\n): ExpressLoggerContext {\n return { req, res, error };\n}\n\nexport function createExpressLogger(config: ExpressLoggerConfig = {}): RequestHandler {\n const shared = resolveServerLogger(config);\n\n return (req, res, next) => {\n enterRequestContext();\n let structuredLogEmitted = false;\n\n req.blypLog = createRequestScopedLogger(shared.logger, {\n resolveStructuredFields: () => ({\n method: req.method,\n path: extractPathname(req.originalUrl || req.url || '/'),\n ...resolveAdditionalProps(shared, buildExpressContext(req, res, res.locals.blypError)),\n }),\n onStructuredEmit: () => {\n structuredLogEmitted = true;\n },\n });\n res.locals.blypStartTime = performance.now();\n\n res.on('finish', () => {\n const path = extractPathname(req.originalUrl || req.url || '/');\n const request = createRequestLike(\n req.method,\n buildAbsoluteUrl(req.originalUrl || req.url || '/', req.headers),\n req.headers\n );\n const responseTime = Math.round(\n performance.now() - (res.locals.blypStartTime ?? performance.now())\n );\n const context = buildExpressContext(req, res, res.locals.blypError);\n\n if (structuredLogEmitted) {\n return;\n }\n\n if (res.locals.blypError || isErrorStatus(res.statusCode)) {\n if (!shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n request,\n path,\n res.statusCode,\n responseTime,\n toErrorLike(res.locals.blypError, res.statusCode),\n resolveAdditionalProps(shared, context),\n {\n error: res.locals.blypError,\n }\n );\n }\n return;\n }\n\n if (!shouldSkipAutoLogging(shared, context, path)) {\n emitHttpRequestLog(\n shared.logger,\n shared.level,\n request,\n path,\n res.statusCode,\n responseTime,\n resolveAdditionalProps(shared, context)\n );\n }\n });\n\n const path = extractPathname(req.originalUrl || req.url || '/');\n if (\n shared.resolvedClientLogging &&\n req.method.toUpperCase() === 'POST' &&\n path === shared.ingestionPath\n ) {\n void (async () => {\n const body = req.body === undefined ? await readNodeRequestBody(req) : req.body;\n const result = await handleClientLogIngestion({\n config: shared,\n ctx: buildExpressContext(req, res),\n request: createRequestLike(\n req.method,\n buildAbsoluteUrl(req.originalUrl || req.url || '/', req.headers),\n req.headers\n ),\n body,\n deliveryPath: shared.ingestionPath,\n });\n if (result.headers) {\n for (const [key, value] of Object.entries(result.headers)) {\n res.setHeader(key, value);\n }\n }\n res.status(result.status).end();\n })().catch(next);\n return;\n }\n\n next();\n };\n}\n\nexport function createExpressErrorLogger(\n _config: ExpressLoggerConfig = {}\n): ErrorRequestHandler {\n return (error, _req, res, next) => {\n res.locals.blypError = error;\n next(error);\n };\n}\n\nexport const createLogger = createExpressLogger;\n","import type { FastifyPluginAsync } from 'fastify';\nimport fp from 'fastify-plugin';\nimport type { FastifyLoggerConfig } from '../../types/frameworks/fastify';\nimport {\n buildAbsoluteUrl,\n createRequestScopedLogger,\n createRequestLike,\n enterRequestContext,\n emitHttpErrorLog,\n emitHttpRequestLog,\n extractPathname,\n handleClientLogIngestion,\n isErrorStatus,\n resolveAdditionalProps,\n resolveServerLogger,\n shouldSkipAutoLogging,\n shouldSkipErrorLogging,\n toErrorLike,\n} from '../shared';\n\nexport function createFastifyLogger(\n config: FastifyLoggerConfig = {}\n): FastifyPluginAsync {\n const shared = resolveServerLogger(config);\n\n return fp(async (fastify) => {\n fastify.decorateRequest('blypLogHolder');\n fastify.decorateRequest('blypLog', {\n getter() {\n return (this as typeof this & { blypLogHolder?: typeof shared.logger }).blypLogHolder as typeof shared.logger;\n },\n setter(value) {\n (this as typeof this & { blypLogHolder?: typeof shared.logger }).blypLogHolder = value;\n },\n });\n fastify.decorateRequest('blypStartTime', undefined);\n fastify.decorateRequest('blypError', undefined);\n fastify.decorateRequest('blypStructuredLogEmitted', undefined);\n\n fastify.addHook('onRequest', async (request) => {\n enterRequestContext();\n request.blypStartTime = performance.now();\n request.blypError = undefined;\n request.blypStructuredLogEmitted = false;\n });\n\n fastify.addHook('preHandler', async (request) => {\n request.blypLog = createRequestScopedLogger(shared.logger, {\n resolveStructuredFields: () => ({\n method: request.method,\n path: extractPathname(request.url),\n ...resolveAdditionalProps(shared, {\n request,\n reply: {} as unknown,\n error: request.blypError,\n } as any),\n }),\n onStructuredEmit: () => {\n request.blypStructuredLogEmitted = true;\n },\n });\n });\n\n fastify.addHook('onError', async (request, _reply, error) => {\n request.blypError = error;\n });\n\n fastify.addHook('onResponse', async (request, reply) => {\n const path = extractPathname(request.url);\n const requestLike = createRequestLike(\n request.method,\n buildAbsoluteUrl(request.url, request.headers),\n request.headers\n );\n const responseTime = Math.round(\n performance.now() - (request.blypStartTime ?? performance.now())\n );\n const context = {\n request,\n reply,\n error: request.blypError,\n };\n\n if (request.blypStructuredLogEmitted) {\n return;\n }\n\n if (request.blypError || isErrorStatus(reply.statusCode)) {\n if (!shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n reply.statusCode,\n responseTime,\n toErrorLike(request.blypError, reply.statusCode),\n resolveAdditionalProps(shared, context),\n {\n error: request.blypError,\n }\n );\n }\n return;\n }\n\n if (!shouldSkipAutoLogging(shared, context, path)) {\n emitHttpRequestLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n reply.statusCode,\n responseTime,\n resolveAdditionalProps(shared, context)\n );\n }\n });\n\n if (shared.resolvedClientLogging) {\n fastify.route({\n method: 'POST',\n url: shared.ingestionPath,\n handler: async (request, reply) => {\n const result = await handleClientLogIngestion({\n config: shared,\n ctx: {\n request,\n reply,\n },\n request: createRequestLike(\n request.method,\n buildAbsoluteUrl(request.url, request.headers),\n request.headers\n ),\n body: request.body,\n deliveryPath: shared.ingestionPath,\n });\n reply.code(result.status);\n if (result.headers) {\n for (const [key, value] of Object.entries(result.headers)) {\n reply.header(key, value);\n }\n }\n return null;\n },\n });\n }\n });\n}\n\nexport const createLogger = createFastifyLogger;\n","import type {\n NextJsHandlerWithLogger,\n NextJsLoggerConfig,\n NextJsLoggerContext,\n NextJsLoggerFactory,\n NextJsRouteContext,\n} from '../../types/frameworks/nextjs';\nimport {\n createRequestScopedLogger,\n createRequestLike,\n emitHttpErrorLog,\n emitHttpRequestLog,\n extractPathname,\n flushServerLoggerSafely,\n handleClientLogIngestion,\n isErrorStatus,\n resolveAdditionalProps,\n resolveServerLogger,\n runWithRequestContext,\n shouldSkipAutoLogging,\n shouldSkipErrorLogging,\n toErrorLike,\n} from '../shared';\n\nfunction createContext(\n request: Request,\n context?: NextJsRouteContext,\n response?: Response,\n error?: unknown\n): NextJsLoggerContext {\n return { request, context, response, error };\n}\n\nexport function createNextJsLogger(\n config: NextJsLoggerConfig = {}\n): NextJsLoggerFactory {\n const shared = resolveServerLogger(config);\n\n return {\n logger: shared.logger,\n withLogger: <Ctx extends NextJsRouteContext = NextJsRouteContext>(\n handler: NextJsHandlerWithLogger<Ctx>\n ) => {\n return async (request: Request, context: Ctx) => {\n return runWithRequestContext(async () => {\n const startTime = performance.now();\n const path = extractPathname(request.url);\n let structuredLogEmitted = false;\n const scopedLogger = createRequestScopedLogger(shared.logger, {\n resolveStructuredFields: () => ({\n method: request.method,\n path,\n ...resolveAdditionalProps(shared, createContext(request, context)),\n }),\n onStructuredEmit: () => {\n structuredLogEmitted = true;\n },\n });\n\n try {\n const response = await handler(request, context, { log: scopedLogger });\n if (structuredLogEmitted) {\n await flushServerLoggerSafely(shared);\n return response;\n }\n\n const statusCode = response.status;\n const requestLike = createRequestLike(\n request.method,\n request.url,\n request.headers\n );\n const loggerContext = createContext(request, context, response);\n const responseTime = Math.round(performance.now() - startTime);\n\n if (isErrorStatus(statusCode)) {\n if (!shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n statusCode,\n responseTime,\n toErrorLike(undefined, statusCode),\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n } else if (!shouldSkipAutoLogging(shared, loggerContext, path)) {\n emitHttpRequestLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n statusCode,\n responseTime,\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n\n await flushServerLoggerSafely(shared);\n\n return response;\n } catch (error) {\n if (!structuredLogEmitted && !shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n createRequestLike(request.method, request.url, request.headers),\n path,\n 500,\n Math.round(performance.now() - startTime),\n toErrorLike(error, 500),\n resolveAdditionalProps(shared, createContext(request, context, undefined, error)),\n {\n error,\n }\n );\n }\n await flushServerLoggerSafely(shared);\n throw error;\n }\n });\n };\n },\n clientLogHandler: async (request: Request) => {\n const path = extractPathname(request.url);\n if (path !== shared.ingestionPath) {\n return new Response(\n JSON.stringify({\n error: `Mounted route path ${path} does not match configured client logging path ${shared.ingestionPath}`,\n }),\n {\n status: 500,\n headers: {\n 'content-type': 'application/json',\n },\n }\n );\n }\n\n const result = await handleClientLogIngestion({\n config: shared,\n ctx: createContext(request),\n request,\n deliveryPath: path,\n });\n await flushServerLoggerSafely(shared);\n return new Response(null, {\n status: result.status,\n headers: result.headers,\n });\n },\n };\n}\n\nexport const createLogger = createNextJsLogger;\n","import type { BlypLogger } from '../../core/logger';\nimport type {\n ReactRouterContextStore,\n ReactRouterLoggerConfig,\n ReactRouterLoggerContext,\n ReactRouterLoggerFactory,\n ReactRouterMiddlewareArgs,\n} from '../../types/frameworks/react-router';\nimport {\n createRequestScopedLogger,\n createRequestLike,\n emitHttpErrorLog,\n emitHttpRequestLog,\n extractPathname,\n flushServerLoggerSafely,\n handleClientLogIngestion,\n isErrorStatus,\n resolveAdditionalProps,\n resolveServerLogger,\n runWithRequestContext,\n shouldSkipAutoLogging,\n shouldSkipErrorLogging,\n toErrorLike,\n} from '../shared';\n\nconst REACT_ROUTER_LOGGER_KEY = Symbol.for('blyp.react-router.logger');\nconst REACT_ROUTER_LOGGER_FALLBACK_KEY = '__blypLog';\n\nfunction createContext(\n args: ReactRouterMiddlewareArgs,\n response?: Response,\n error?: unknown\n): ReactRouterLoggerContext {\n return {\n request: args.request,\n params: args.params,\n context: args.context,\n response,\n error,\n };\n}\n\nfunction readLoggerValue(context: ReactRouterContextStore): unknown {\n if (typeof context.get === 'function') {\n const symbolValue = context.get(REACT_ROUTER_LOGGER_KEY);\n if (symbolValue) {\n return symbolValue;\n }\n\n return context.get(REACT_ROUTER_LOGGER_FALLBACK_KEY);\n }\n\n return context[REACT_ROUTER_LOGGER_KEY] ?? context[REACT_ROUTER_LOGGER_FALLBACK_KEY];\n}\n\nfunction writeLoggerValue(context: ReactRouterContextStore, logger: BlypLogger): void {\n if (typeof context.set === 'function') {\n context.set(REACT_ROUTER_LOGGER_KEY, logger);\n context.set(REACT_ROUTER_LOGGER_FALLBACK_KEY, logger);\n return;\n }\n\n context[REACT_ROUTER_LOGGER_KEY] = logger;\n context[REACT_ROUTER_LOGGER_FALLBACK_KEY] = logger;\n}\n\nfunction resolveThrownStatusCode(error: unknown): number {\n const errorLike = toErrorLike(error);\n return errorLike?.status ?? errorLike?.statusCode ?? 500;\n}\n\nexport function createReactRouterLogger(\n config: ReactRouterLoggerConfig = {}\n): ReactRouterLoggerFactory {\n const shared = resolveServerLogger(config);\n\n const setLogger = (context: ReactRouterContextStore, logger: BlypLogger): void => {\n writeLoggerValue(context, logger);\n };\n\n const getLogger = (context: ReactRouterContextStore): BlypLogger => {\n const logger = readLoggerValue(context);\n return logger && typeof logger === 'object' ? logger as BlypLogger : shared.logger;\n };\n\n return {\n logger: shared.logger,\n setLogger,\n getLogger,\n middleware: async (args, next) => {\n return runWithRequestContext(async () => {\n const startTime = performance.now();\n const path = extractPathname(args.request.url);\n let structuredLogEmitted = false;\n const scopedLogger = createRequestScopedLogger(shared.logger, {\n resolveStructuredFields: () => ({\n method: args.request.method,\n path,\n ...resolveAdditionalProps(shared, createContext(args)),\n }),\n onStructuredEmit: () => {\n structuredLogEmitted = true;\n },\n });\n\n setLogger(args.context, scopedLogger);\n\n try {\n const response = await next();\n if (structuredLogEmitted) {\n await flushServerLoggerSafely(shared);\n return response;\n }\n\n const statusCode = response.status;\n const loggerContext = createContext(args, response);\n const responseTime = Math.round(performance.now() - startTime);\n const requestLike = createRequestLike(\n args.request.method,\n args.request.url,\n args.request.headers\n );\n\n if (isErrorStatus(statusCode)) {\n if (!shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n statusCode,\n responseTime,\n toErrorLike(undefined, statusCode),\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n } else if (!shouldSkipAutoLogging(shared, loggerContext, path)) {\n emitHttpRequestLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n statusCode,\n responseTime,\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n\n await flushServerLoggerSafely(shared);\n return response;\n } catch (error) {\n if (!structuredLogEmitted && !shouldSkipErrorLogging(shared, path)) {\n const statusCode = resolveThrownStatusCode(error);\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n createRequestLike(args.request.method, args.request.url, args.request.headers),\n path,\n statusCode,\n Math.round(performance.now() - startTime),\n toErrorLike(error, statusCode),\n resolveAdditionalProps(shared, createContext(args, undefined, error)),\n { error }\n );\n }\n\n await flushServerLoggerSafely(shared);\n throw error;\n }\n });\n },\n clientLogHandler: async (request: Request) => {\n const path = extractPathname(request.url);\n if (path !== shared.ingestionPath) {\n return new Response(\n JSON.stringify({\n error: `Mounted route path ${path} does not match configured client logging path ${shared.ingestionPath}`,\n }),\n {\n status: 500,\n headers: { 'content-type': 'application/json' },\n }\n );\n }\n\n const result = await handleClientLogIngestion({\n config: shared,\n ctx: createContext({ request, context: {} }),\n request,\n deliveryPath: path,\n });\n await flushServerLoggerSafely(shared);\n return new Response(null, {\n status: result.status,\n headers: result.headers,\n });\n },\n };\n}\n\nexport const createLogger = createReactRouterLogger;\n","import type {\n TanStackStartLoggerConfig,\n TanStackStartLoggerContext,\n TanStackStartLoggerFactory,\n TanStackStartMiddlewareContext,\n} from '../../types/frameworks/tanstack-start';\nimport {\n createRequestScopedLogger,\n createRequestLike,\n emitHttpErrorLog,\n emitHttpRequestLog,\n extractPathname,\n flushServerLoggerSafely,\n handleClientLogIngestion,\n isErrorStatus,\n resolveAdditionalProps,\n resolveServerLogger,\n runWithRequestContext,\n shouldSkipAutoLogging,\n shouldSkipErrorLogging,\n toErrorLike,\n} from '../shared';\n\nfunction createContext(\n request: Request,\n context: Record<string, unknown>,\n response?: Response,\n error?: unknown\n): TanStackStartLoggerContext {\n return { request, context, response, error };\n}\n\nexport function createTanStackStartLogger(\n config: TanStackStartLoggerConfig = {}\n): TanStackStartLoggerFactory {\n const shared = resolveServerLogger(config);\n\n return {\n logger: shared.logger,\n requestMiddleware: async ({ request, context, next }: TanStackStartMiddlewareContext) => {\n return runWithRequestContext(async () => {\n const startTime = performance.now();\n const path = extractPathname(request.url);\n let structuredLogEmitted = false;\n const nextContext: Record<string, unknown> = {\n ...context,\n };\n const scopedLogger = createRequestScopedLogger(shared.logger, {\n resolveStructuredFields: (): Record<string, unknown> => ({\n method: request.method,\n path,\n ...resolveAdditionalProps(shared, createContext(request, nextContext)),\n }),\n onStructuredEmit: () => {\n structuredLogEmitted = true;\n },\n });\n nextContext.blypLog = scopedLogger;\n\n try {\n const response = await next({ context: nextContext });\n if (structuredLogEmitted) {\n await flushServerLoggerSafely(shared);\n return response;\n }\n\n const statusCode = response.status;\n const loggerContext = createContext(request, nextContext, response);\n const responseTime = Math.round(performance.now() - startTime);\n\n if (isErrorStatus(statusCode)) {\n if (!shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n createRequestLike(request.method, request.url, request.headers),\n path,\n statusCode,\n responseTime,\n toErrorLike(undefined, statusCode),\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n } else if (!shouldSkipAutoLogging(shared, loggerContext, path)) {\n emitHttpRequestLog(\n shared.logger,\n shared.level,\n createRequestLike(request.method, request.url, request.headers),\n path,\n statusCode,\n responseTime,\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n\n await flushServerLoggerSafely(shared);\n\n return response;\n } catch (error) {\n if (!structuredLogEmitted && !shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n createRequestLike(request.method, request.url, request.headers),\n path,\n 500,\n Math.round(performance.now() - startTime),\n toErrorLike(error, 500),\n resolveAdditionalProps(shared, createContext(request, nextContext, undefined, error)),\n {\n error,\n }\n );\n }\n await flushServerLoggerSafely(shared);\n throw error;\n }\n });\n },\n clientLogHandlers: {\n POST: async (request: Request) => {\n const path = extractPathname(request.url);\n if (path !== shared.ingestionPath) {\n return new Response(\n JSON.stringify({\n error: `Mounted route path ${path} does not match configured client logging path ${shared.ingestionPath}`,\n }),\n {\n status: 500,\n headers: {\n 'content-type': 'application/json',\n },\n }\n );\n }\n\n const result = await handleClientLogIngestion({\n config: shared,\n ctx: createContext(request, {}),\n request,\n deliveryPath: path,\n });\n await flushServerLoggerSafely(shared);\n return new Response(null, {\n status: result.status,\n headers: result.headers,\n });\n },\n },\n };\n}\n\nexport const createLogger = createTanStackStartLogger;\n","import type {\n SvelteKitHandle,\n SvelteKitLoggerConfig,\n SvelteKitLoggerContext,\n SvelteKitLoggerFactory,\n SvelteKitRequestEvent,\n} from '../../types/frameworks/sveltekit';\nimport {\n createRequestScopedLogger,\n createRequestLike,\n emitHttpErrorLog,\n emitHttpRequestLog,\n flushServerLoggerSafely,\n handleClientLogIngestion,\n isErrorStatus,\n resolveAdditionalProps,\n resolveServerLogger,\n runWithRequestContext,\n shouldSkipAutoLogging,\n shouldSkipErrorLogging,\n toErrorLike,\n} from '../shared';\n\nfunction createContext(\n event: SvelteKitRequestEvent,\n response?: Response,\n error?: unknown\n): SvelteKitLoggerContext {\n return { event, response, error };\n}\n\nexport function createSvelteKitLogger(\n config: SvelteKitLoggerConfig = {}\n): SvelteKitLoggerFactory {\n const shared = resolveServerLogger(config);\n\n const handle: SvelteKitHandle = async ({ event, resolve }) => {\n return runWithRequestContext(async () => {\n let structuredLogEmitted = false;\n event.locals.blypLog = createRequestScopedLogger(shared.logger, {\n resolveStructuredFields: () => ({\n method: event.request.method,\n path: event.url.pathname,\n ...resolveAdditionalProps(shared, createContext(event)),\n }),\n onStructuredEmit: () => {\n structuredLogEmitted = true;\n },\n });\n const startTime = performance.now();\n const path = event.url.pathname;\n const requestLike = createRequestLike(\n event.request.method,\n event.request.url,\n event.request.headers\n );\n\n try {\n const response = await resolve(event);\n if (structuredLogEmitted) {\n await flushServerLoggerSafely(shared);\n return response;\n }\n\n const statusCode = response.status;\n const loggerContext = createContext(event, response);\n const responseTime = Math.round(performance.now() - startTime);\n\n if (isErrorStatus(statusCode)) {\n if (!shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n statusCode,\n responseTime,\n toErrorLike(undefined, statusCode),\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n } else if (!shouldSkipAutoLogging(shared, loggerContext, path)) {\n emitHttpRequestLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n statusCode,\n responseTime,\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n\n await flushServerLoggerSafely(shared);\n\n return response;\n } catch (error) {\n if (!structuredLogEmitted && !shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n 500,\n Math.round(performance.now() - startTime),\n toErrorLike(error, 500),\n resolveAdditionalProps(shared, createContext(event, undefined, error)),\n {\n error,\n }\n );\n }\n await flushServerLoggerSafely(shared);\n throw error;\n }\n });\n };\n\n return {\n logger: shared.logger,\n handle,\n clientLogHandler: async (event) => {\n const path = event.url.pathname;\n if (path !== shared.ingestionPath) {\n return new Response(\n JSON.stringify({\n error: `Mounted route path ${path} does not match configured client logging path ${shared.ingestionPath}`,\n }),\n {\n status: 500,\n headers: {\n 'content-type': 'application/json',\n },\n }\n );\n }\n\n const result = await handleClientLogIngestion({\n config: shared,\n ctx: createContext(event),\n request: event.request,\n deliveryPath: path,\n });\n await flushServerLoggerSafely(shared);\n return new Response(null, {\n status: result.status,\n headers: result.headers,\n });\n },\n };\n}\n\nexport const createLogger = createSvelteKitLogger;\n","import type {\n AstroEndpointContext,\n AstroLoggerConfig,\n AstroLoggerContext,\n AstroLoggerFactory,\n AstroMiddlewareContext,\n} from '../../types/frameworks/astro';\nimport {\n createRequestScopedLogger,\n createRequestLike,\n emitHttpErrorLog,\n emitHttpRequestLog,\n flushServerLoggerSafely,\n handleClientLogIngestion,\n isErrorStatus,\n resolveAdditionalProps,\n resolveServerLogger,\n runWithRequestContext,\n shouldSkipAutoLogging,\n shouldSkipErrorLogging,\n toErrorLike,\n} from '../shared';\n\nfunction createContext(\n context: AstroMiddlewareContext,\n response?: Response,\n error?: unknown\n): AstroLoggerContext {\n return { context, response, error };\n}\n\nexport function createAstroLogger(\n config: AstroLoggerConfig = {}\n): AstroLoggerFactory {\n const shared = resolveServerLogger(config);\n\n return {\n logger: shared.logger,\n onRequest: async (context, next) => {\n return runWithRequestContext(async () => {\n let structuredLogEmitted = false;\n context.locals.blypLog = createRequestScopedLogger(shared.logger, {\n resolveStructuredFields: () => ({\n method: context.request.method,\n path: context.url.pathname,\n ...resolveAdditionalProps(shared, createContext(context)),\n }),\n onStructuredEmit: () => {\n structuredLogEmitted = true;\n },\n });\n const startTime = performance.now();\n const path = context.url.pathname;\n const requestLike = createRequestLike(\n context.request.method,\n context.request.url,\n context.request.headers\n );\n\n try {\n const response = await next();\n if (structuredLogEmitted) {\n await flushServerLoggerSafely(shared);\n return response;\n }\n\n const statusCode = response.status;\n const loggerContext = createContext(context, response);\n const responseTime = Math.round(performance.now() - startTime);\n\n if (isErrorStatus(statusCode)) {\n if (!shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n statusCode,\n responseTime,\n toErrorLike(undefined, statusCode),\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n } else if (!shouldSkipAutoLogging(shared, loggerContext, path)) {\n emitHttpRequestLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n statusCode,\n responseTime,\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n\n await flushServerLoggerSafely(shared);\n return response;\n } catch (error) {\n if (!structuredLogEmitted && !shouldSkipErrorLogging(shared, path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n requestLike,\n path,\n 500,\n Math.round(performance.now() - startTime),\n toErrorLike(error, 500),\n resolveAdditionalProps(shared, createContext(context, undefined, error)),\n { error }\n );\n }\n\n await flushServerLoggerSafely(shared);\n throw error;\n }\n });\n },\n clientLogHandler: async (context: AstroEndpointContext) => {\n const path = context.url.pathname;\n if (path !== shared.ingestionPath) {\n return new Response(\n JSON.stringify({\n error: `Mounted route path ${path} does not match configured client logging path ${shared.ingestionPath}`,\n }),\n {\n status: 500,\n headers: { 'content-type': 'application/json' },\n }\n );\n }\n\n const result = await handleClientLogIngestion({\n config: shared,\n ctx: createContext(context),\n request: context.request,\n deliveryPath: path,\n });\n await flushServerLoggerSafely(shared);\n return new Response(null, {\n status: result.status,\n headers: result.headers,\n });\n },\n };\n}\n\nexport const createLogger = createAstroLogger;\n","import type { BlypLogger } from '../../core/logger';\nimport { buildAbsoluteUrl, createRequestLike, readNodeRequestBody } from './logger';\nimport type {\n NitroEventLike,\n NitroResponseLike,\n} from '../../types/frameworks/nitro';\nimport type { RequestLike } from '../../types/frameworks/http';\n\nexport interface NitroRequestState {\n startTime: number;\n path: string;\n structuredLogEmitted: boolean;\n scopedLogger?: BlypLogger;\n errorLogged?: boolean;\n}\n\nconst BLYP_NITRO_STATE_KEY = Symbol.for('blyp.nitro.state');\n\nexport function getNitroState(event: NitroEventLike): NitroRequestState | undefined {\n return event.context[BLYP_NITRO_STATE_KEY] as NitroRequestState | undefined;\n}\n\nexport function setNitroState(event: NitroEventLike, state: NitroRequestState): NitroRequestState {\n event.context[BLYP_NITRO_STATE_KEY] = state;\n return state;\n}\n\nexport function getNitroMethod(event: NitroEventLike): string {\n return event.method ?? event.node?.req?.method ?? event.request?.method ?? 'GET';\n}\n\nexport function getNitroHeaders(event: NitroEventLike): RequestLike['headers'] {\n return event.headers ?? event.node?.req?.headers ?? event.request?.headers;\n}\n\nexport function getNitroUrl(event: NitroEventLike): string {\n if (event.request?.url) {\n return event.request.url;\n }\n\n const path = event.url ?? event.path ?? event.node?.req?.url ?? '/';\n return buildAbsoluteUrl(path, getNitroHeaders(event));\n}\n\nexport function getNitroPath(event: NitroEventLike): string {\n if (typeof event.path === 'string' && event.path.length > 0) {\n return event.path;\n }\n\n if (event.request?.url) {\n return new URL(event.request.url).pathname;\n }\n\n const requestUrl = event.url ?? event.node?.req?.url ?? '/';\n if (requestUrl.startsWith('http://') || requestUrl.startsWith('https://')) {\n return new URL(requestUrl).pathname;\n }\n\n const queryIndex = requestUrl.indexOf('?');\n return queryIndex >= 0 ? requestUrl.slice(0, queryIndex) : requestUrl;\n}\n\nexport function createNitroRequestLike(event: NitroEventLike): RequestLike {\n return createRequestLike(getNitroMethod(event), getNitroUrl(event), getNitroHeaders(event));\n}\n\nexport function getNitroStatus(\n event: NitroEventLike,\n response?: NitroResponseLike | Response,\n fallbackStatus: number = 200\n): number {\n if (response instanceof Response) {\n return response.status;\n }\n\n if (typeof response?.status === 'number') {\n return response.status;\n }\n\n if (typeof response?.statusCode === 'number') {\n return response.statusCode;\n }\n\n if (typeof event.node?.res?.statusCode === 'number' && event.node.res.statusCode > 0) {\n return event.node.res.statusCode;\n }\n\n return fallbackStatus;\n}\n\nexport async function readNitroBody(event: NitroEventLike): Promise<unknown> {\n if (event.body !== undefined) {\n return event.body;\n }\n\n if (event.request) {\n const contentType = event.request.headers.get('content-type') ?? '';\n if (contentType.includes('application/json')) {\n const fallbackRequest = event.request.clone();\n try {\n return await event.request.json();\n } catch {\n return await fallbackRequest.text();\n }\n }\n\n return await event.request.text();\n }\n\n if (event.node?.req) {\n return await readNodeRequestBody(event.node.req);\n }\n\n throw new Error('Unable to parse Nitro request body');\n}\n","import type { BlypLogger } from '../../core/logger';\nimport type {\n NitroAppLike,\n NitroEventLike,\n NitroLoggerConfig,\n NitroLoggerContext,\n NitroLoggerFactory,\n NitroResponseLike,\n} from '../../types/frameworks/nitro';\nimport { enterRequestContext } from '../shared/request-context';\nimport {\n createRequestScopedLogger,\n emitHttpErrorLog,\n emitHttpRequestLog,\n flushServerLoggerSafely,\n handleClientLogIngestion,\n isErrorStatus,\n resolveAdditionalProps,\n resolveServerLogger,\n shouldSkipAutoLogging,\n shouldSkipErrorLogging,\n toErrorLike,\n} from '../shared';\nimport {\n createNitroRequestLike,\n getNitroMethod,\n getNitroPath,\n getNitroState,\n getNitroStatus,\n readNitroBody,\n setNitroState,\n} from '../shared/h3';\n\nfunction createContext(\n event: NitroEventLike,\n response?: NitroResponseLike | Response,\n error?: unknown\n): NitroLoggerContext {\n return { event, response, error };\n}\n\nfunction buildFactory(shared: ReturnType<typeof resolveServerLogger<NitroLoggerContext>>): NitroLoggerFactory {\n const getLogger = (event: NitroEventLike): BlypLogger => event.context.blypLog ?? shared.logger;\n\n const logSuccess = async (\n event: NitroEventLike,\n response?: NitroResponseLike | Response\n ): Promise<void> => {\n const state = getNitroState(event);\n if (!state || state.structuredLogEmitted || state.errorLogged) {\n return;\n }\n\n const requestLike = createNitroRequestLike(event);\n const statusCode = getNitroStatus(event, response);\n const responseTime = Math.round(performance.now() - state.startTime);\n const loggerContext = createContext(event, response);\n\n if (isErrorStatus(statusCode)) {\n if (!shouldSkipErrorLogging(shared, state.path)) {\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n requestLike,\n state.path,\n statusCode,\n responseTime,\n toErrorLike(undefined, statusCode),\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n } else if (!shouldSkipAutoLogging(shared, loggerContext, state.path)) {\n emitHttpRequestLog(\n shared.logger,\n shared.level,\n requestLike,\n state.path,\n statusCode,\n responseTime,\n resolveAdditionalProps(shared, loggerContext)\n );\n }\n };\n\n const logError = async (\n event: NitroEventLike,\n error: unknown,\n response?: NitroResponseLike | Response\n ): Promise<void> => {\n const state = getNitroState(event);\n if (!state || state.structuredLogEmitted || state.errorLogged || shouldSkipErrorLogging(shared, state.path)) {\n return;\n }\n\n state.errorLogged = true;\n emitHttpErrorLog(\n shared.logger,\n shared.level,\n createNitroRequestLike(event),\n state.path,\n getNitroStatus(event, response, 500),\n Math.round(performance.now() - state.startTime),\n toErrorLike(error, 500),\n resolveAdditionalProps(shared, createContext(event, response, error)),\n { error }\n );\n };\n\n return {\n logger: shared.logger,\n getLogger,\n plugin: async (nitroApp: NitroAppLike) => {\n await nitroApp.hooks.hook('request', async (eventArg: unknown) => {\n const event = eventArg as NitroEventLike;\n enterRequestContext();\n const path = getNitroPath(event);\n let state = setNitroState(event, {\n startTime: performance.now(),\n path,\n structuredLogEmitted: false,\n });\n const scopedLogger = createRequestScopedLogger(shared.logger, {\n resolveStructuredFields: () => ({\n method: getNitroMethod(event),\n path,\n ...resolveAdditionalProps(shared, createContext(event)),\n }),\n onStructuredEmit: () => {\n const currentState = getNitroState(event);\n if (currentState) {\n currentState.structuredLogEmitted = true;\n }\n },\n });\n event.context.blypLog = scopedLogger;\n state.scopedLogger = scopedLogger;\n });\n\n await nitroApp.hooks.hook('beforeResponse', async (eventArg: unknown, payload?: unknown) => {\n await logSuccess(eventArg as NitroEventLike, payload as NitroResponseLike | Response | undefined);\n });\n\n await nitroApp.hooks.hook('afterResponse', async (eventArg: unknown) => {\n await flushServerLoggerSafely(shared);\n const state = getNitroState(eventArg as NitroEventLike);\n if (state) {\n state.errorLogged = true;\n }\n });\n\n await nitroApp.hooks.hook('error', async (errorArg: unknown, eventArg?: unknown) => {\n if (eventArg && typeof eventArg === 'object') {\n await logError(eventArg as NitroEventLike, errorArg);\n await flushServerLoggerSafely(shared);\n }\n });\n },\n clientLogHandler: async (event: NitroEventLike) => {\n const path = getNitroPath(event);\n if (path !== shared.ingestionPath) {\n return new Response(\n JSON.stringify({\n error: `Mounted route path ${path} does not match configured client logging path ${shared.ingestionPath}`,\n }),\n {\n status: 500,\n headers: { 'content-type': 'application/json' },\n }\n );\n }\n\n const body = await readNitroBody(event);\n\n const result = await handleClientLogIngestion({\n config: shared,\n ctx: createContext(event),\n request: {\n ...createNitroRequestLike(event),\n json: async () => body,\n },\n body,\n deliveryPath: path,\n });\n await flushServerLoggerSafely(shared);\n return new Response(null, {\n status: result.status,\n headers: result.headers,\n });\n },\n };\n}\n\nexport function createNitroLogger(\n config: NitroLoggerConfig = {}\n): NitroLoggerFactory {\n const shared = resolveServerLogger(config);\n return buildFactory(shared);\n}\n\nexport const createLogger = createNitroLogger;\nexport { buildFactory as createNitroLoggerFactory };\n","import type {\n NitroEventLike,\n} from '../../types/frameworks/nitro';\nimport type {\n NuxtLoggerConfig,\n NuxtLoggerFactory,\n} from '../../types/frameworks/nuxt';\nimport { createNitroLoggerFactory } from '../nitro/logger';\nimport { resolveServerLogger } from '../shared';\n\nexport function createNuxtLogger(\n config: NuxtLoggerConfig = {}\n): NuxtLoggerFactory {\n const nitro = createNitroLoggerFactory(resolveServerLogger(config));\n\n return {\n logger: nitro.logger,\n serverPlugin: nitro.plugin,\n clientLogHandler: nitro.clientLogHandler,\n getLogger: (event: NitroEventLike) => nitro.getLogger(event),\n };\n}\n\nexport const createLogger = createNuxtLogger;\n","export const BLYP_NEST_LOGGER = Symbol('BLYP_NEST_LOGGER');\n\nexport const BLYP_NEST_LOGGER_INIT_ERROR =\n 'BlypModule.forRoot() requires createLogger(...) to run before NestFactory.create(AppModule).';\n","import type { ResolvedServerLogger } from '../shared';\nimport { resolveServerLogger } from '../shared';\nimport {\n configureDefaultStandaloneLogger,\n type StandaloneLogger,\n} from '../standalone/logger';\nimport type { StandaloneLoggerConfig } from '../../types/frameworks/standalone';\nimport { BLYP_NEST_LOGGER_INIT_ERROR } from './constants';\nimport type {\n NestLoggerConfig,\n NestLoggerContext,\n NestLoggerState,\n} from '../../types/frameworks/nestjs';\n\nlet nestLoggerState: NestLoggerState | null = null;\n\nfunction toStandaloneLoggerConfig(\n config: NestLoggerConfig\n): StandaloneLoggerConfig {\n const clientLogging = config.clientLogging === undefined\n ? undefined\n : config.clientLogging === false\n ? { enabled: false }\n : config.clientLogging === true\n ? { enabled: true }\n : {\n enabled: true,\n path: config.clientLogging.path,\n };\n\n return {\n ...(config.level !== undefined ? { level: config.level } : {}),\n ...(config.pretty !== undefined ? { pretty: config.pretty } : {}),\n ...(config.destination !== undefined ? { destination: config.destination } : {}),\n ...(config.logDir !== undefined ? { logDir: config.logDir } : {}),\n ...(config.file !== undefined ? { file: config.file } : {}),\n ...(config.database !== undefined ? { database: config.database } : {}),\n ...(clientLogging !== undefined ? { clientLogging } : {}),\n ...(config.connectors !== undefined ? { connectors: config.connectors } : {}),\n };\n}\n\nexport function createNestLogger(\n config: NestLoggerConfig = {}\n): StandaloneLogger {\n const logger = configureDefaultStandaloneLogger(toStandaloneLoggerConfig(config));\n const shared = resolveServerLogger(config, logger);\n\n nestLoggerState = {\n ...shared,\n logger,\n };\n\n return logger;\n}\n\nexport const createLogger = createNestLogger;\n\nexport function getNestLoggerStateOrThrow(): NestLoggerState {\n if (!nestLoggerState) {\n throw new Error(BLYP_NEST_LOGGER_INIT_ERROR);\n }\n\n return nestLoggerState;\n}\n\nexport function resetNestLoggerState(): void {\n nestLoggerState = null;\n configureDefaultStandaloneLogger();\n}\n","import type { ExecutionContext } from '@nestjs/common';\nimport {\n buildAbsoluteUrl,\n createRequestLike,\n extractPathname,\n readNodeRequestBody,\n} from '../shared';\nimport { isPlainObject } from '../../shared/validation';\nimport type {\n NestAdapterType,\n NestHeaderRecord,\n NestLoggerContext,\n} from '../../types/frameworks/nestjs';\n\nexport function resolveNestAdapterType(\n request: unknown,\n response: unknown\n): NestAdapterType {\n if (\n isPlainObject(response) &&\n 'raw' in response &&\n response.raw !== undefined\n ) {\n return 'fastify';\n }\n\n if (\n isPlainObject(request) &&\n 'raw' in request &&\n request.raw !== undefined\n ) {\n return 'fastify';\n }\n\n return 'express';\n}\n\nexport function getNestRequestMethod(request: unknown): string {\n if (!isPlainObject(request)) {\n return 'GET';\n }\n\n if (typeof request.method === 'string') {\n return request.method;\n }\n\n if (isPlainObject(request.raw) && typeof request.raw.method === 'string') {\n return request.raw.method;\n }\n\n return 'GET';\n}\n\nexport function getNestRequestHeaders(request: unknown): NestHeaderRecord | undefined {\n if (!isPlainObject(request)) {\n return undefined;\n }\n\n if (isPlainObject(request.headers)) {\n return request.headers as NestHeaderRecord;\n }\n\n if (isPlainObject(request.raw) && isPlainObject(request.raw.headers)) {\n return request.raw.headers as NestHeaderRecord;\n }\n\n return undefined;\n}\n\nexport function getNestRequestUrl(request: unknown): string {\n if (!isPlainObject(request)) {\n return '/';\n }\n\n if (typeof request.originalUrl === 'string' && request.originalUrl.length > 0) {\n return request.originalUrl;\n }\n\n if (typeof request.url === 'string' && request.url.length > 0) {\n return request.url;\n }\n\n if (isPlainObject(request.raw) && typeof request.raw.url === 'string' && request.raw.url.length > 0) {\n return request.raw.url;\n }\n\n return '/';\n}\n\nexport function getNestRequestPath(request: unknown): string {\n return extractPathname(getNestRequestUrl(request));\n}\n\nexport async function readNestRequestBody(request: unknown): Promise<unknown> {\n if (!isPlainObject(request)) {\n return undefined;\n }\n\n if ('body' in request && request.body !== undefined) {\n return request.body;\n }\n\n if (isPlainObject(request.raw) && 'body' in request.raw && request.raw.body !== undefined) {\n return request.raw.body;\n }\n\n if (Symbol.asyncIterator in request) {\n return await readNodeRequestBody(\n request as AsyncIterable<Uint8Array | string>\n );\n }\n\n if (\n isPlainObject(request.raw) &&\n Symbol.asyncIterator in request.raw\n ) {\n return await readNodeRequestBody(\n request.raw as AsyncIterable<Uint8Array | string>\n );\n }\n\n return undefined;\n}\n\nexport function setNestRequestStartTime(request: unknown, startTime: number): void {\n if (!isPlainObject(request)) {\n return;\n }\n\n request.blypStartTime = startTime;\n}\n\nexport function getNestRequestStartTime(request: unknown): number | undefined {\n if (!isPlainObject(request)) {\n return undefined;\n }\n\n return typeof request.blypStartTime === 'number'\n ? request.blypStartTime\n : undefined;\n}\n\nexport function setNestStructuredLogEmitted(request: unknown, emitted: boolean): void {\n if (!isPlainObject(request)) {\n return;\n }\n\n request.blypStructuredLogEmitted = emitted;\n}\n\nexport function getNestStructuredLogEmitted(request: unknown): boolean {\n if (!isPlainObject(request)) {\n return false;\n }\n\n return request.blypStructuredLogEmitted === true;\n}\n\nexport function attachNestRequestLogger(request: unknown, logger: unknown): void {\n if (!isPlainObject(request)) {\n return;\n }\n\n request.blypLog = logger;\n}\n\nexport function buildNestRequestLike(request: unknown) {\n const method = getNestRequestMethod(request);\n const headers = getNestRequestHeaders(request);\n const path = getNestRequestUrl(request);\n return createRequestLike(method, buildAbsoluteUrl(path, headers), headers);\n}\n\nexport function getNestResponseStatus(response: unknown): number {\n if (!isPlainObject(response)) {\n return 200;\n }\n\n if (typeof response.statusCode === 'number') {\n return response.statusCode;\n }\n\n if (isPlainObject(response.raw) && typeof response.raw.statusCode === 'number') {\n return response.raw.statusCode;\n }\n\n return 200;\n}\n\nfunction setRawStatus(target: Record<string, unknown>, statusCode: number): void {\n target.statusCode = statusCode;\n}\n\nexport function setNestResponseHeaders(\n response: unknown,\n headers: Record<string, string>\n): void {\n if (!isPlainObject(response)) {\n return;\n }\n\n if (typeof response.setHeader === 'function') {\n for (const [key, value] of Object.entries(headers)) {\n response.setHeader(key, value);\n }\n return;\n }\n\n if (typeof response.header === 'function') {\n for (const [key, value] of Object.entries(headers)) {\n response.header(key, value);\n }\n return;\n }\n\n if (isPlainObject(response.raw) && typeof response.raw.setHeader === 'function') {\n for (const [key, value] of Object.entries(headers)) {\n response.raw.setHeader(key, value);\n }\n }\n}\n\nexport function sendNestStatusResponse(response: unknown, statusCode: number): void {\n if (!isPlainObject(response)) {\n return;\n }\n\n if (typeof response.status === 'function') {\n const expressResponse = response.status(statusCode) as { end?: () => void };\n expressResponse.end?.();\n return;\n }\n\n if (typeof response.code === 'function') {\n const fastifyReply = response.code(statusCode) as { send?: (payload?: unknown) => void };\n fastifyReply.send?.();\n return;\n }\n\n if (isPlainObject(response.raw)) {\n setRawStatus(response.raw, statusCode);\n if (typeof response.raw.end === 'function') {\n response.raw.end();\n }\n return;\n }\n\n setRawStatus(response, statusCode);\n if (typeof response.end === 'function') {\n response.end();\n }\n}\n\nexport function getControllerName(context: ExecutionContext): string | undefined {\n const controller = context.getClass();\n return controller?.name || undefined;\n}\n\nexport function getHandlerName(context: ExecutionContext): string | undefined {\n const handler = context.getHandler();\n return handler?.name || undefined;\n}\n\nexport function createNestLoggerContext(options: {\n request: unknown;\n response: unknown;\n executionContext?: ExecutionContext;\n error?: unknown;\n}): NestLoggerContext {\n const { request, response, executionContext, error } = options;\n const adapterType = resolveNestAdapterType(request, response);\n\n return {\n request,\n response,\n adapterType,\n executionContext,\n error,\n controllerName: executionContext ? getControllerName(executionContext) : undefined,\n handlerName: executionContext ? getHandlerName(executionContext) : undefined,\n };\n}\n","import {\n Catch,\n HttpException,\n Inject,\n} from '@nestjs/common';\nimport type { ArgumentsHost } from '@nestjs/common';\nimport { BaseExceptionFilter, HttpAdapterHost } from '@nestjs/core';\nimport {\n emitHttpErrorLog,\n resolveAdditionalProps,\n shouldSkipErrorLogging,\n toErrorLike,\n} from '../shared';\nimport { BLYP_NEST_LOGGER } from './constants';\nimport {\n buildNestRequestLike,\n createNestLoggerContext,\n getNestRequestPath,\n getNestRequestStartTime,\n getNestStructuredLogEmitted,\n} from './helpers';\nimport type { NestLoggerState } from '../../types/frameworks/nestjs';\n\n@Catch()\nexport class BlypNestExceptionFilter extends BaseExceptionFilter {\n constructor(\n @Inject(BLYP_NEST_LOGGER)\n private readonly state: NestLoggerState,\n httpAdapterHost: HttpAdapterHost\n ) {\n super(httpAdapterHost.httpAdapter);\n }\n\n override catch(exception: unknown, host: ArgumentsHost): void {\n if (host.getType<'http'>() === 'http') {\n const http = host.switchToHttp();\n const request = http.getRequest();\n const response = http.getResponse();\n const loggerContext = createNestLoggerContext({\n request,\n response,\n error: exception,\n });\n const path = getNestRequestPath(request);\n\n if (getNestStructuredLogEmitted(request)) {\n super.catch(exception, host);\n return;\n }\n\n if (!shouldSkipErrorLogging(this.state, path)) {\n const statusCode = exception instanceof HttpException\n ? exception.getStatus()\n : 500;\n const responseTime = Math.round(\n performance.now() - (getNestRequestStartTime(request) ?? performance.now())\n );\n\n emitHttpErrorLog(\n this.state.logger,\n this.state.level,\n buildNestRequestLike(request),\n path,\n statusCode,\n responseTime,\n toErrorLike(exception, statusCode),\n resolveAdditionalProps(this.state, loggerContext),\n {\n error: exception,\n }\n );\n }\n }\n\n super.catch(exception, host);\n }\n}\n","import {\n Inject,\n Injectable,\n type CallHandler,\n type ExecutionContext,\n type NestInterceptor,\n} from '@nestjs/common';\nimport type { Observable } from 'rxjs';\nimport { tap } from 'rxjs';\nimport {\n emitHttpErrorLog,\n emitHttpRequestLog,\n isErrorStatus,\n resolveAdditionalProps,\n shouldSkipAutoLogging,\n shouldSkipErrorLogging,\n toErrorLike,\n} from '../shared';\nimport { BLYP_NEST_LOGGER } from './constants';\nimport {\n attachNestRequestLogger,\n buildNestRequestLike,\n createNestLoggerContext,\n getNestStructuredLogEmitted,\n getNestRequestPath,\n getNestRequestStartTime,\n getNestResponseStatus,\n setNestRequestStartTime,\n} from './helpers';\nimport type { NestLoggerState } from '../../types/frameworks/nestjs';\n\n@Injectable()\nexport class BlypNestInterceptor implements NestInterceptor {\n constructor(\n @Inject(BLYP_NEST_LOGGER)\n private readonly state: NestLoggerState\n ) {}\n\n intercept(context: ExecutionContext, next: CallHandler): Observable<unknown> {\n if (context.getType<'http'>() !== 'http') {\n return next.handle();\n }\n\n const http = context.switchToHttp();\n const request = http.getRequest();\n const response = http.getResponse();\n const loggerContext = createNestLoggerContext({\n request,\n response,\n executionContext: context,\n });\n\n if (!request.blypLog) {\n attachNestRequestLogger(request, this.state.logger);\n }\n\n if (getNestRequestStartTime(request) === undefined) {\n setNestRequestStartTime(request, performance.now());\n }\n\n return next.handle().pipe(\n tap({\n complete: () => {\n const path = getNestRequestPath(request);\n const statusCode = getNestResponseStatus(response);\n const responseTime = Math.round(\n performance.now() - (getNestRequestStartTime(request) ?? performance.now())\n );\n const requestLike = buildNestRequestLike(request);\n const additionalProps = resolveAdditionalProps(this.state, loggerContext);\n\n if (getNestStructuredLogEmitted(request)) {\n return;\n }\n\n if (isErrorStatus(statusCode)) {\n if (!shouldSkipErrorLogging(this.state, path)) {\n emitHttpErrorLog(\n this.state.logger,\n this.state.level,\n requestLike,\n path,\n statusCode,\n responseTime,\n toErrorLike(undefined, statusCode),\n additionalProps\n );\n }\n return;\n }\n\n if (!shouldSkipAutoLogging(this.state, loggerContext, path)) {\n emitHttpRequestLog(\n this.state.logger,\n this.state.level,\n requestLike,\n path,\n statusCode,\n responseTime,\n additionalProps\n );\n }\n },\n })\n );\n }\n}\n","import { Inject, Injectable, type NestMiddleware } from '@nestjs/common';\nimport {\n createRequestScopedLogger,\n handleClientLogIngestion,\n enterRequestContext,\n resolveAdditionalProps,\n} from '../shared';\nimport { BLYP_NEST_LOGGER } from './constants';\nimport {\n attachNestRequestLogger,\n buildNestRequestLike,\n createNestLoggerContext,\n getNestRequestMethod,\n getNestRequestPath,\n readNestRequestBody,\n setNestResponseHeaders,\n sendNestStatusResponse,\n setNestStructuredLogEmitted,\n setNestRequestStartTime,\n} from './helpers';\nimport type { NestLoggerState } from '../../types/frameworks/nestjs';\n\n@Injectable()\nexport class BlypNestMiddleware implements NestMiddleware {\n constructor(\n @Inject(BLYP_NEST_LOGGER)\n private readonly state: NestLoggerState\n ) {}\n\n use(\n request: unknown,\n response: unknown,\n next: (error?: unknown) => void\n ): void {\n enterRequestContext();\n setNestStructuredLogEmitted(request, false);\n attachNestRequestLogger(\n request,\n createRequestScopedLogger(this.state.logger, {\n resolveStructuredFields: () => {\n const loggerContext = createNestLoggerContext({\n request,\n response,\n });\n\n return {\n method: buildNestRequestLike(request).method,\n path: getNestRequestPath(request),\n ...resolveAdditionalProps(this.state, loggerContext),\n };\n },\n onStructuredEmit: () => {\n setNestStructuredLogEmitted(request, true);\n },\n })\n );\n setNestRequestStartTime(request, performance.now());\n\n const path = getNestRequestPath(request);\n const method = getNestRequestMethod(request).toUpperCase();\n\n if (\n this.state.resolvedClientLogging &&\n method === 'POST' &&\n path === this.state.ingestionPath\n ) {\n void this.handleClientLogRequest(request, response, next);\n return;\n }\n\n next();\n }\n\n private async handleClientLogRequest(\n request: unknown,\n response: unknown,\n next: (error?: unknown) => void\n ): Promise<void> {\n try {\n const body = await readNestRequestBody(request);\n const result = await handleClientLogIngestion({\n config: this.state,\n ctx: createNestLoggerContext({\n request,\n response,\n }),\n request: buildNestRequestLike(request),\n body,\n deliveryPath: this.state.ingestionPath,\n });\n\n if (result.headers) {\n setNestResponseHeaders(response, result.headers);\n }\n sendNestStatusResponse(response, result.status);\n } catch (error) {\n next(error);\n }\n }\n}\n","import {\n Global,\n Module,\n RequestMethod,\n} from '@nestjs/common';\nimport type { MiddlewareConsumer, DynamicModule, NestModule } from '@nestjs/common';\nimport { APP_FILTER, APP_INTERCEPTOR } from '@nestjs/core';\nimport { BLYP_NEST_LOGGER } from './constants';\nimport { BlypNestExceptionFilter } from './filter';\nimport { BlypNestInterceptor } from './interceptor';\nimport { getNestLoggerStateOrThrow } from './logger';\nimport { BlypNestMiddleware } from './middleware';\n\n@Global()\n@Module({})\nexport class BlypModule implements NestModule {\n static forRoot(): DynamicModule {\n return {\n global: true,\n module: BlypModule,\n providers: [\n BlypNestMiddleware,\n {\n provide: BLYP_NEST_LOGGER,\n useFactory: () => getNestLoggerStateOrThrow(),\n },\n {\n provide: APP_INTERCEPTOR,\n useClass: BlypNestInterceptor,\n },\n {\n provide: APP_FILTER,\n useClass: BlypNestExceptionFilter,\n },\n ],\n exports: [BLYP_NEST_LOGGER],\n };\n }\n\n configure(consumer: MiddlewareConsumer): void {\n consumer\n .apply(BlypNestMiddleware)\n .forRoutes({ path: '*', method: RequestMethod.ALL });\n }\n}\n","import { resolveConfig } from '../../core/config';\nimport {\n buildRecord,\n buildStructuredRecord,\n resolveStructuredWriteLevel,\n type LogMethodName,\n} from '../../core/log-record';\nimport {\n createStructuredLog,\n type StructuredLog,\n type StructuredLogPayload,\n} from '../../core/structured-log';\nimport {\n createOTLPRegistry,\n} from './sender';\nimport type {\n OTLPLogger,\n OTLPLoggerConfig,\n OTLPSender,\n} from '../../types/connectors/otlp';\n\nexport type {\n OTLPLogger,\n OTLPLoggerConfig,\n} from '../../types/connectors/otlp';\n\nfunction resolveSender(config: OTLPLoggerConfig = { name: '' }): OTLPSender {\n const registry = createOTLPRegistry(resolveConfig({\n ...(config.connectors ? { connectors: config.connectors } : {}),\n }));\n\n return registry.get(config.name);\n}\n\nfunction createOTLPLoggerInstance(\n sender: OTLPSender,\n bindings: Record<string, unknown> = {}\n): OTLPLogger {\n const writeRecord = (\n level: LogMethodName,\n message: unknown,\n args: unknown[]\n ): void => {\n sender.send(buildRecord(level, message, args, bindings), {\n source: 'server',\n warnIfUnavailable: true,\n });\n };\n\n const writeStructured = (\n payload: StructuredLogPayload,\n message: string\n ): void => {\n sender.send(\n buildStructuredRecord(\n resolveStructuredWriteLevel(payload.level),\n message,\n payload,\n bindings\n ),\n {\n source: 'server',\n warnIfUnavailable: true,\n }\n );\n };\n\n return {\n debug: (message: unknown, ...args: unknown[]) => {\n writeRecord('debug', message, args);\n },\n info: (message: unknown, ...args: unknown[]) => {\n writeRecord('info', message, args);\n },\n error: (message: unknown, ...args: unknown[]) => {\n writeRecord('error', message, args);\n },\n warn: (message: unknown, ...args: unknown[]) => {\n writeRecord('warn', message, args);\n },\n warning: (message: unknown, ...args: unknown[]) => {\n writeRecord('warning', message, args);\n },\n success: (message: unknown, ...args: unknown[]) => {\n writeRecord('success', message, args);\n },\n critical: (message: unknown, ...args: unknown[]) => {\n writeRecord('critical', message, args);\n },\n table: (message: string, data?: unknown) => {\n writeRecord('table', message, data === undefined ? [] : [data]);\n },\n flush: async () => {},\n shutdown: async () => {},\n createStructuredLog: (\n groupId: string,\n initial?: Record<string, unknown>\n ): StructuredLog => {\n return createStructuredLog(groupId, {\n initialFields: initial,\n write: writeStructured,\n });\n },\n child: (childBindings: Record<string, unknown>) => {\n return createOTLPLoggerInstance(sender, {\n ...bindings,\n ...childBindings,\n });\n },\n };\n}\n\nexport function createOtlpLogger(config: OTLPLoggerConfig = { name: '' }): OTLPLogger {\n return createOTLPLoggerInstance(resolveSender(config));\n}\n\nexport function createStructuredOtlpLogger<\n TFields extends Record<string, unknown> = Record<string, unknown>,\n>(\n groupId: string,\n initial?: TFields,\n config?: OTLPLoggerConfig\n): StructuredLog<TFields> {\n const sender = resolveSender(config ?? { name: '' });\n\n return createStructuredLog(groupId, {\n initialFields: initial,\n write: (payload, message) => {\n sender.send(\n buildStructuredRecord(\n resolveStructuredWriteLevel(payload.level),\n message,\n payload,\n {}\n ),\n {\n source: 'server',\n warnIfUnavailable: true,\n }\n );\n },\n }) as StructuredLog<TFields>;\n}\n","import { logger } from './frameworks/standalone';\nimport { getActiveRequestLogger } from './frameworks/shared/request-context';\nimport type { StructuredLog } from './core/structured-log';\n\nexport { createBaseLogger, CUSTOM_LEVELS } from './core/logger';\nexport type { BlypLogger } from './core/logger';\nexport type {\n StructuredLog,\n StructuredLogEmitOptions,\n StructuredLogError,\n StructuredLogEvent,\n StructuredLogLevel,\n StructuredLogPayload,\n} from './core/structured-log';\nexport {\n BlypError,\n parseError,\n} from './shared/errors';\nexport type {\n BlypErrorLike,\n BlypErrorCode,\n BlypErrorCodeDefinition,\n ErrorLogLevel,\n ErrorLoggerLike,\n ParseErrorOptions,\n ParseableErrorPayload,\n} from './shared/errors';\nexport {\n HTTP_CODES,\n createError,\n getHttpCode,\n} from './core/errors';\nexport type {\n CreateErrorInput,\n CreateErrorOverrides,\n} from './core/errors';\nexport { runtime, createRuntimeAdapter, createLogDir } from './core/runtime';\nexport {\n DEFAULT_CONFIG,\n DEFAULT_CLIENT_LOGGING_CONFIG,\n DEFAULT_DATABASE_DELIVERY_CONFIG,\n DEFAULT_DATABASE_RETRY_CONFIG,\n DEFAULT_FILE_CONFIG,\n DEFAULT_ROTATION_CONFIG,\n getConfig,\n loadConfig,\n mergeBlypConfig,\n resolveConfig,\n resetConfigCache,\n} from './core/config';\nexport type {\n BlypConnectorsConfig,\n ClientLoggingConfig,\n BlypConfig,\n BetterStackConnectorConfig,\n BetterStackErrorTrackingConfig,\n BlypDestination,\n ConnectorMode,\n DatabuddyConnectorConfig,\n DatabaseAdapterConfig,\n DatabaseAdapterKind,\n DatabaseDeliveryConfig,\n DatabaseDialect,\n DatabaseLoggerConfig,\n DatabaseRetryConfig,\n DrizzleDatabaseAdapterConfig,\n LogFileConfig,\n LogRotationConfig,\n OTLPConnectorConfig,\n PostHogErrorTrackingConfig,\n PostHogConnectorConfig,\n PrismaDatabaseAdapterConfig,\n ResolvedBlypConfig,\n ResolvedBetterStackConnectorConfig,\n ResolvedDatabuddyConnectorConfig,\n ResolvedDatabaseDeliveryConfig,\n ResolvedDatabaseLoggerConfig,\n ResolvedDatabaseRetryConfig,\n ResolvedPostHogErrorTrackingConfig,\n ResolvedPostHogConnectorConfig,\n ResolvedSentryConnectorConfig,\n ResolvedOTLPConnectorConfig,\n SentryConnectorConfig,\n} from './core/config';\nexport { readLogFile, formatLogRecord } from './core/log-reader';\nexport type { ReadLogFileOptions } from './core/log-reader';\nexport type { LogRecord } from './core/file-logger';\nexport {\n createDrizzleDatabaseAdapter,\n createPrismaDatabaseAdapter,\n} from './database';\nexport * from './core/helpers';\nexport * from './core/colors';\nexport { normalizeOTLPRecord } from './connectors/otlp/sender';\nexport {\n captureBetterStackException,\n createBetterStackErrorTracker,\n createBetterStackLogger,\n createStructuredBetterStackLogger,\n} from './connectors/betterstack';\nexport type {\n BetterStackErrorTracker,\n BetterStackExceptionCaptureOptions,\n BetterStackLogger,\n BetterStackLoggerConfig,\n} from './connectors/betterstack';\nexport {\n captureDatabuddyException,\n createDatabuddyErrorTracker,\n createDatabuddyLogger,\n createStructuredDatabuddyLogger,\n} from './connectors/databuddy';\nexport type {\n DatabuddyErrorTracker,\n DatabuddyExceptionCaptureOptions,\n DatabuddyLogger,\n DatabuddyLoggerConfig,\n} from './connectors/databuddy';\nexport {\n capturePosthogException,\n createPosthogErrorTracker,\n createPosthogLogger,\n createStructuredPosthogLogger,\n} from './connectors/posthog';\nexport type {\n PostHogErrorTracker,\n PostHogExceptionCaptureOptions,\n PostHogLogger,\n PostHogLoggerConfig,\n} from './connectors/posthog';\nexport { createSentryLogger, createStructuredSentryLogger } from './connectors/sentry';\nexport type { SentryLogger, SentryLoggerConfig } from './connectors/sentry';\nexport { logger, createStandaloneLogger } from './frameworks/standalone';\nexport type { StandaloneLogger, StandaloneLoggerConfig } from './frameworks/standalone';\nexport { createElysiaLogger, createLogger } from './frameworks/elysia';\nexport type {\n ElysiaContext,\n ElysiaClientLogIngestionConfig,\n ElysiaLoggerConfig,\n ResolveCtx,\n HttpRequestLog,\n} from './frameworks/elysia';\nexport { createHonoLogger } from './frameworks/hono';\nexport type {\n HonoClientLogIngestionConfig,\n HonoLoggerConfig,\n HonoLoggerMiddleware,\n HonoLoggerVariables,\n} from './frameworks/hono';\nexport {\n createExpressErrorLogger,\n createExpressLogger,\n} from './frameworks/express';\nexport type {\n ExpressClientLogIngestionConfig,\n ExpressErrorLoggerMiddleware,\n ExpressLoggerConfig,\n ExpressLoggerContext,\n ExpressLoggerMiddleware,\n} from './frameworks/express';\nexport { createFastifyLogger } from './frameworks/fastify';\nexport type {\n FastifyClientLogIngestionConfig,\n FastifyLoggerConfig,\n FastifyLoggerContext,\n FastifyLoggerPlugin,\n} from './frameworks/fastify';\nexport { createNextJsLogger } from './frameworks/nextjs';\nexport type {\n NextJsClientLogIngestionConfig,\n NextJsHandlerWithLogger,\n NextJsLoggerConfig,\n NextJsLoggerContext,\n NextJsLoggerFactory,\n NextJsLoggerHelpers,\n NextJsRouteContext,\n NextJsWrappedHandler,\n} from './frameworks/nextjs';\nexport { createReactRouterLogger } from './frameworks/react-router';\nexport type {\n ReactRouterClientLogIngestionConfig,\n ReactRouterContextStore,\n ReactRouterLoggerConfig,\n ReactRouterLoggerContext,\n ReactRouterLoggerFactory,\n ReactRouterLoggerMiddleware,\n ReactRouterMiddlewareArgs,\n ReactRouterMiddlewareNext,\n} from './frameworks/react-router';\nexport { createTanStackStartLogger } from './frameworks/tanstack-start';\nexport type {\n TanStackStartClientLogHandlers,\n TanStackStartClientLogIngestionConfig,\n TanStackStartLoggerConfig,\n TanStackStartLoggerContext,\n TanStackStartLoggerFactory,\n TanStackStartMiddlewareContext,\n} from './frameworks/tanstack-start';\nexport { createSvelteKitLogger } from './frameworks/sveltekit';\nexport type {\n SvelteKitClientLogIngestionConfig,\n SvelteKitHandle,\n SvelteKitLoggerConfig,\n SvelteKitLoggerContext,\n SvelteKitLoggerFactory,\n SvelteKitLocals,\n SvelteKitRequestEvent,\n SvelteKitRequestHandler,\n SvelteKitResolve,\n} from './frameworks/sveltekit';\nexport { createAstroLogger } from './frameworks/astro';\nexport type {\n AstroClientLogIngestionConfig,\n AstroEndpointContext,\n AstroEndpointHandler,\n AstroLocals,\n AstroLoggerConfig,\n AstroLoggerContext,\n AstroLoggerFactory,\n AstroMiddlewareContext,\n AstroMiddlewareHandler,\n AstroMiddlewareNext,\n} from './frameworks/astro';\nexport { createNitroLogger } from './frameworks/nitro';\nexport type {\n NitroAppLike,\n NitroClientLogIngestionConfig,\n NitroEventContext,\n NitroEventHandler,\n NitroEventLike,\n NitroHooksLike,\n NitroLoggerConfig,\n NitroLoggerContext,\n NitroLoggerFactory,\n NitroLoggerPlugin,\n NitroNodeLike,\n NitroNodeRequestLike,\n NitroNodeResponseLike,\n NitroResponseLike,\n} from './frameworks/nitro';\nexport { createNuxtLogger } from './frameworks/nuxt';\nexport type {\n NuxtClientLogIngestionConfig,\n NuxtEventHandler,\n NuxtEventLike,\n NuxtLoggerConfig,\n NuxtLoggerContext,\n NuxtLoggerFactory,\n NuxtLoggerPlugin,\n} from './frameworks/nuxt';\nexport { createNestLogger, BlypModule } from './frameworks/nestjs';\nexport type {\n NestAdapterType,\n NestClientLogIngestionConfig,\n NestLoggerConfig,\n NestLoggerContext,\n} from './frameworks/nestjs';\nexport type {\n ClientLoggerConfig,\n ClientConnectorRequest,\n ClientLogBrowserContext,\n ClientLogDeviceContext,\n ClientLogEvent,\n ClientLogLevel,\n ClientLogPageContext,\n RemoteDeliveryConfig,\n RemoteDeliveryDropContext,\n RemoteDeliveryFailureContext,\n RemoteDeliveryFailureReason,\n RemoteDeliveryRetryContext,\n RemoteDeliverySuccessContext,\n} from './frameworks/client';\nexport type {\n ExpoLogger,\n ExpoLoggerConfig,\n} from './types/frameworks/expo';\nexport {\n createOtlpLogger,\n createStructuredOtlpLogger,\n} from './connectors/otlp';\nexport type {\n OTLPLogger,\n OTLPLoggerConfig,\n} from './connectors/otlp';\n\nexport function createStructuredLog<\n TFields extends Record<string, unknown> = Record<string, unknown>,\n>(groupId: string, initial?: TFields): StructuredLog<TFields> {\n const activeLogger = getActiveRequestLogger() ?? logger;\n return activeLogger.createStructuredLog(groupId, initial) as StructuredLog<TFields>;\n}\n"]}
|