@blyp/core 0.1.21 → 0.1.22

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.
Files changed (242) hide show
  1. package/README.md +217 -11
  2. package/STABILITY.md +56 -0
  3. package/dist/ai/anthropic/index.d.ts +3 -0
  4. package/dist/ai/anthropic/normalize.d.ts +9 -0
  5. package/dist/ai/anthropic/stream.d.ts +3 -0
  6. package/dist/ai/anthropic/wrap.d.ts +13 -0
  7. package/dist/ai/anthropic.js +701 -0
  8. package/dist/ai/anthropic.mjs +701 -0
  9. package/dist/ai/fetch.js +701 -0
  10. package/dist/ai/fetch.mjs +701 -0
  11. package/dist/ai/openai/index.d.ts +3 -0
  12. package/dist/ai/openai/normalize.d.ts +10 -0
  13. package/dist/ai/openai/stream.d.ts +3 -0
  14. package/dist/ai/openai/wrap.d.ts +24 -0
  15. package/dist/ai/openai.js +701 -0
  16. package/dist/ai/openai.mjs +701 -0
  17. package/dist/ai/shared/fetch.d.ts +5 -0
  18. package/dist/ai/shared/index.d.ts +2 -0
  19. package/dist/ai/shared/normalize.d.ts +17 -0
  20. package/dist/ai/shared/redaction.d.ts +6 -0
  21. package/dist/ai/shared/stream.d.ts +7 -0
  22. package/dist/ai/shared/trace.d.ts +116 -0
  23. package/dist/ai/shared/types.d.ts +161 -0
  24. package/dist/ai/shared.js +701 -0
  25. package/dist/ai/shared.mjs +701 -0
  26. package/dist/ai/vercel/index.d.ts +3 -0
  27. package/dist/ai/vercel/middleware.d.ts +3 -0
  28. package/dist/ai/vercel/model.d.ts +3 -0
  29. package/dist/ai/vercel.js +701 -0
  30. package/dist/ai/vercel.mjs +701 -0
  31. package/dist/astro.js +618 -4519
  32. package/dist/astro.mjs +618 -4491
  33. package/dist/client.js +1 -1139
  34. package/dist/client.mjs +1 -1132
  35. package/dist/connectors/betterstack.js +9 -1532
  36. package/dist/connectors/betterstack.mjs +9 -1507
  37. package/dist/connectors/databuddy.js +9 -1456
  38. package/dist/connectors/databuddy.mjs +9 -1451
  39. package/dist/connectors/delivery/backoff.d.ts +2 -0
  40. package/dist/connectors/delivery/manager.d.ts +44 -0
  41. package/dist/connectors/delivery/queue-path.d.ts +1 -0
  42. package/dist/connectors/delivery/sqlite-adapter-bun.d.ts +1 -0
  43. package/dist/connectors/delivery/sqlite-adapter-node.d.ts +1 -0
  44. package/dist/connectors/delivery/sqlite-client.d.ts +37 -0
  45. package/dist/connectors/delivery/sqlite-worker.d.ts +1 -0
  46. package/dist/connectors/delivery/studio-queue.d.ts +12 -0
  47. package/dist/connectors/delivery/types.d.ts +98 -0
  48. package/dist/connectors/otlp/index.d.ts +1 -0
  49. package/dist/connectors/otlp.js +9 -1371
  50. package/dist/connectors/otlp.mjs +9 -1368
  51. package/dist/connectors/posthog/properties.d.ts +4 -0
  52. package/dist/connectors/posthog/sender.d.ts +0 -1
  53. package/dist/connectors/posthog.js +10 -1527
  54. package/dist/connectors/posthog.mjs +10 -1522
  55. package/dist/connectors/sentry.js +9 -1380
  56. package/dist/connectors/sentry.mjs +9 -1357
  57. package/dist/core/config.d.ts +7 -2
  58. package/dist/core/log-record.d.ts +5 -4
  59. package/dist/core/logger.d.ts +2 -0
  60. package/dist/core/optional-module.d.ts +1 -0
  61. package/dist/core/pino-pretty-loader.d.ts +4 -0
  62. package/dist/database.js +1 -24
  63. package/dist/database.mjs +1 -21
  64. package/dist/elysia.js +613 -4517
  65. package/dist/elysia.mjs +615 -4491
  66. package/dist/expo.js +1 -726
  67. package/dist/expo.mjs +1 -724
  68. package/dist/express.js +613 -4507
  69. package/dist/express.mjs +615 -4480
  70. package/dist/fastify.js +615 -4526
  71. package/dist/fastify.mjs +617 -4499
  72. package/dist/frameworks/elysia/index.d.ts +1 -1
  73. package/dist/frameworks/elysia/logger.d.ts +2 -35
  74. package/dist/frameworks/nestjs/helpers.d.ts +2 -0
  75. package/dist/frameworks/shared/http.d.ts +3 -2
  76. package/dist/frameworks/shared/index.d.ts +2 -1
  77. package/dist/frameworks/shared/logger.d.ts +2 -0
  78. package/dist/frameworks/shared/request-context.d.ts +2 -0
  79. package/dist/frameworks/shared/trace.d.ts +6 -0
  80. package/dist/hono.js +616 -4496
  81. package/dist/hono.mjs +618 -4470
  82. package/dist/index.d.ts +49 -19
  83. package/dist/index.js +615 -7557
  84. package/dist/index.mjs +618 -7465
  85. package/dist/nestjs.js +626 -4999
  86. package/dist/nestjs.mjs +621 -4966
  87. package/dist/nextjs.js +618 -4525
  88. package/dist/nextjs.mjs +620 -4499
  89. package/dist/nitro.js +617 -4642
  90. package/dist/nitro.mjs +619 -4616
  91. package/dist/nuxt.js +617 -4649
  92. package/dist/nuxt.mjs +619 -4623
  93. package/dist/react-router.js +616 -4559
  94. package/dist/react-router.mjs +618 -4533
  95. package/dist/shared/redaction.d.ts +17 -0
  96. package/dist/standalone.js +606 -3628
  97. package/dist/standalone.mjs +610 -3603
  98. package/dist/sveltekit.js +617 -4523
  99. package/dist/sveltekit.mjs +619 -4497
  100. package/dist/tanstack-start.js +616 -4522
  101. package/dist/tanstack-start.mjs +618 -4496
  102. package/dist/types/core/config.d.ts +57 -0
  103. package/dist/types/core/logger.d.ts +3 -0
  104. package/dist/types/core/structured-log.d.ts +2 -0
  105. package/dist/types/database.d.ts +1 -0
  106. package/dist/types/frameworks/astro.d.ts +1 -0
  107. package/dist/types/frameworks/client.d.ts +2 -0
  108. package/dist/types/frameworks/elysia.d.ts +2 -0
  109. package/dist/types/frameworks/express.d.ts +1 -0
  110. package/dist/types/frameworks/fastify.d.ts +1 -0
  111. package/dist/types/frameworks/hono.d.ts +1 -0
  112. package/dist/types/frameworks/http.d.ts +1 -0
  113. package/dist/types/frameworks/nestjs.d.ts +2 -0
  114. package/dist/types/frameworks/nextjs.d.ts +1 -0
  115. package/dist/types/frameworks/nitro.d.ts +1 -0
  116. package/dist/types/frameworks/react-router.d.ts +2 -0
  117. package/dist/types/frameworks/request-context.d.ts +1 -0
  118. package/dist/types/frameworks/shared.d.ts +4 -1
  119. package/dist/types/frameworks/standalone.d.ts +3 -2
  120. package/dist/types/frameworks/sveltekit.d.ts +1 -0
  121. package/dist/types/frameworks/tanstack-start.d.ts +9 -3
  122. package/dist/types/frameworks/workers.d.ts +3 -0
  123. package/dist/types/shared/client-log.d.ts +1 -0
  124. package/dist/workers.js +2 -626
  125. package/dist/workers.mjs +2 -623
  126. package/package.json +246 -173
  127. package/dist/astro.js.map +0 -1
  128. package/dist/astro.mjs.map +0 -1
  129. package/dist/client.js.map +0 -1
  130. package/dist/client.mjs.map +0 -1
  131. package/dist/connectors/betterstack.js.map +0 -1
  132. package/dist/connectors/betterstack.mjs.map +0 -1
  133. package/dist/connectors/databuddy.js.map +0 -1
  134. package/dist/connectors/databuddy.mjs.map +0 -1
  135. package/dist/connectors/otlp.js.map +0 -1
  136. package/dist/connectors/otlp.mjs.map +0 -1
  137. package/dist/connectors/posthog.js.map +0 -1
  138. package/dist/connectors/posthog.mjs.map +0 -1
  139. package/dist/connectors/sentry.js.map +0 -1
  140. package/dist/connectors/sentry.mjs.map +0 -1
  141. package/dist/database.js.map +0 -1
  142. package/dist/database.mjs.map +0 -1
  143. package/dist/elysia.js.map +0 -1
  144. package/dist/elysia.mjs.map +0 -1
  145. package/dist/expo.js.map +0 -1
  146. package/dist/expo.mjs.map +0 -1
  147. package/dist/express.js.map +0 -1
  148. package/dist/express.mjs.map +0 -1
  149. package/dist/fastify.js.map +0 -1
  150. package/dist/fastify.mjs.map +0 -1
  151. package/dist/hono.js.map +0 -1
  152. package/dist/hono.mjs.map +0 -1
  153. package/dist/index.js.map +0 -1
  154. package/dist/index.mjs.map +0 -1
  155. package/dist/nestjs.js.map +0 -1
  156. package/dist/nestjs.mjs.map +0 -1
  157. package/dist/nextjs.js.map +0 -1
  158. package/dist/nextjs.mjs.map +0 -1
  159. package/dist/nitro.js.map +0 -1
  160. package/dist/nitro.mjs.map +0 -1
  161. package/dist/nuxt.js.map +0 -1
  162. package/dist/nuxt.mjs.map +0 -1
  163. package/dist/react-router.js.map +0 -1
  164. package/dist/react-router.mjs.map +0 -1
  165. package/dist/standalone.js.map +0 -1
  166. package/dist/standalone.mjs.map +0 -1
  167. package/dist/sveltekit.js.map +0 -1
  168. package/dist/sveltekit.mjs.map +0 -1
  169. package/dist/tanstack-start.js.map +0 -1
  170. package/dist/tanstack-start.mjs.map +0 -1
  171. package/dist/workers.js.map +0 -1
  172. package/dist/workers.mjs.map +0 -1
  173. package/exports/client.js +0 -3
  174. package/exports/client.mjs +0 -3
  175. package/exports/connectors/betterstack.js +0 -1
  176. package/exports/connectors/betterstack.mjs +0 -1
  177. package/exports/connectors/databuddy.js +0 -1
  178. package/exports/connectors/databuddy.mjs +0 -1
  179. package/exports/connectors/otlp.js +0 -1
  180. package/exports/connectors/otlp.mjs +0 -1
  181. package/exports/connectors/posthog.js +0 -1
  182. package/exports/connectors/posthog.mjs +0 -1
  183. package/exports/connectors/sentry.js +0 -1
  184. package/exports/connectors/sentry.mjs +0 -1
  185. package/exports/database.js +0 -1
  186. package/exports/database.mjs +0 -1
  187. package/exports/expo.js +0 -1
  188. package/exports/expo.mjs +0 -1
  189. package/exports/frameworks/astro.js +0 -1
  190. package/exports/frameworks/astro.mjs +0 -1
  191. package/exports/frameworks/elysia.js +0 -1
  192. package/exports/frameworks/elysia.mjs +0 -1
  193. package/exports/frameworks/express.js +0 -1
  194. package/exports/frameworks/express.mjs +0 -1
  195. package/exports/frameworks/fastify.js +0 -1
  196. package/exports/frameworks/fastify.mjs +0 -1
  197. package/exports/frameworks/hono.js +0 -1
  198. package/exports/frameworks/hono.mjs +0 -1
  199. package/exports/frameworks/nestjs.js +0 -1
  200. package/exports/frameworks/nestjs.mjs +0 -1
  201. package/exports/frameworks/nextjs.js +0 -1
  202. package/exports/frameworks/nextjs.mjs +0 -1
  203. package/exports/frameworks/nitro.js +0 -1
  204. package/exports/frameworks/nitro.mjs +0 -1
  205. package/exports/frameworks/nuxt.js +0 -1
  206. package/exports/frameworks/nuxt.mjs +0 -1
  207. package/exports/frameworks/react-router.js +0 -1
  208. package/exports/frameworks/react-router.mjs +0 -1
  209. package/exports/frameworks/standalone.js +0 -1
  210. package/exports/frameworks/standalone.mjs +0 -1
  211. package/exports/frameworks/sveltekit.js +0 -1
  212. package/exports/frameworks/sveltekit.mjs +0 -1
  213. package/exports/frameworks/tanstack-start.js +0 -1
  214. package/exports/frameworks/tanstack-start.mjs +0 -1
  215. package/exports/workers.js +0 -1
  216. package/exports/workers.mjs +0 -1
  217. package/types/client.d.ts +0 -34
  218. package/types/connectors/betterstack.d.ts +0 -1
  219. package/types/connectors/databuddy.d.ts +0 -1
  220. package/types/connectors/otlp.d.ts +0 -1
  221. package/types/connectors/posthog.d.ts +0 -1
  222. package/types/connectors/sentry.d.ts +0 -1
  223. package/types/database.d.ts +0 -1
  224. package/types/expo.d.ts +0 -17
  225. package/types/frameworks/astro.d.ts +0 -1
  226. package/types/frameworks/client.d.ts +0 -160
  227. package/types/frameworks/elysia.d.ts +0 -1
  228. package/types/frameworks/expo.d.ts +0 -50
  229. package/types/frameworks/express.d.ts +0 -1
  230. package/types/frameworks/fastify.d.ts +0 -1
  231. package/types/frameworks/hono.d.ts +0 -1
  232. package/types/frameworks/nestjs.d.ts +0 -1
  233. package/types/frameworks/nextjs.d.ts +0 -1
  234. package/types/frameworks/nitro.d.ts +0 -1
  235. package/types/frameworks/nuxt.d.ts +0 -1
  236. package/types/frameworks/react-router.d.ts +0 -1
  237. package/types/frameworks/standalone.d.ts +0 -1
  238. package/types/frameworks/sveltekit.d.ts +0 -1
  239. package/types/frameworks/tanstack-start.d.ts +0 -1
  240. package/types/frameworks/workers.d.ts +0 -115
  241. package/types/index.d.ts +0 -1
  242. package/types/workers.d.ts +0 -13
package/dist/expo.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shared/log-value.ts","../src/shared/validation.ts","../src/shared/client-log.ts","../src/shared/remote-delivery.ts","../src/shared/once.ts","../src/frameworks/expo/network.ts","../src/frameworks/expo/logger.ts"],"names":["z","flush"],"mappings":"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","file":"expo.js","sourcesContent":["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 {\n ClientLogEvent,\n RemoteDeliveryConfig,\n RemoteDeliveryDropContext,\n RemoteDeliveryFailureContext,\n RemoteDeliveryRetryContext,\n RemoteDeliverySuccessContext\n} from '../types/shared/client-log';\nimport type {\n QueueItem,\n RemoteDeliveryManagerOptions\n} from '../types/shared/remote-delivery';\n\nexport type {\n DeliveryAttemptFailure,\n DeliveryAttemptResult,\n DeliveryAttemptRetry,\n DeliveryAttemptSuccess\n} from '../types/shared/remote-delivery';\n\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_RETRY_DELAY_MS = 5_000;\nconst DEFAULT_MAX_QUEUE_SIZE = 100;\n\nfunction clampInteger(value: number | undefined, fallback: number, minimum: number): number {\n if (!Number.isFinite(value)) {\n return fallback;\n }\n\n return Math.max(minimum, Math.floor(value!));\n}\n\nfunction safeCall<T>(callback: ((value: T) => void) | undefined, value: T): void {\n if (!callback) {\n return;\n }\n\n try {\n callback(value);\n } catch {}\n}\n\nfunction warn(message: string): void {\n if (typeof console === 'undefined' || typeof console.warn !== 'function') {\n return;\n }\n\n console.warn(message);\n}\n\nfunction formatWarningValue(value: string | number | undefined): string {\n return value === undefined ? 'unknown' : String(value);\n}\n\nexport function createRemoteDeliveryManager(\n options: RemoteDeliveryManagerOptions\n): { enqueue: (event: ClientLogEvent) => void } {\n const deliveryConfig = {\n maxRetries: clampInteger(options.delivery?.maxRetries, DEFAULT_MAX_RETRIES, 0),\n retryDelayMs: clampInteger(options.delivery?.retryDelayMs, DEFAULT_RETRY_DELAY_MS, 0),\n maxQueueSize: clampInteger(options.delivery?.maxQueueSize, DEFAULT_MAX_QUEUE_SIZE, 1),\n warnOnFailure: options.delivery?.warnOnFailure ?? true,\n onSuccess: options.delivery?.onSuccess,\n onRetry: options.delivery?.onRetry,\n onFailure: options.delivery?.onFailure,\n onDrop: options.delivery?.onDrop,\n } satisfies Required<\n Pick<RemoteDeliveryConfig, 'maxRetries' | 'retryDelayMs' | 'maxQueueSize' | 'warnOnFailure'>\n > & Pick<RemoteDeliveryConfig, 'onSuccess' | 'onRetry' | 'onFailure' | 'onDrop'>;\n\n const queue: QueueItem[] = [];\n let inFlight: QueueItem | undefined;\n let flushTimer: ReturnType<typeof setTimeout> | undefined;\n let isProcessing = false;\n let unsubscribeFromResume: (() => void) | undefined;\n\n const runtimeLabel = options.runtime === 'browser' ? 'client' : options.runtime;\n\n const clearFlushTimer = (): void => {\n if (!flushTimer) {\n return;\n }\n\n clearTimeout(flushTimer);\n flushTimer = undefined;\n };\n\n const hasUnsentEvents = (): boolean => queue.length > 0 || inFlight !== undefined;\n\n const refreshResumeSubscription = (flush: () => void): void => {\n if (!options.subscribeToResume) {\n return;\n }\n\n if (hasUnsentEvents()) {\n if (!unsubscribeFromResume) {\n unsubscribeFromResume = options.subscribeToResume(() => {\n const now = Date.now();\n for (const item of queue) {\n item.nextAttemptAt = now;\n }\n\n clearFlushTimer();\n flush();\n }) ?? undefined;\n }\n\n return;\n }\n\n if (unsubscribeFromResume) {\n unsubscribeFromResume();\n unsubscribeFromResume = undefined;\n }\n };\n\n const warnDrop = (ctx: RemoteDeliveryDropContext): void => {\n if (!deliveryConfig.warnOnFailure) {\n return;\n }\n\n warn(\n `[blyp/${runtimeLabel}] Dropped queued log \"${ctx.droppedEvent.message}\" ` +\n `(id: ${ctx.droppedEvent.id}) because the delivery queue reached ${ctx.maxQueueSize}. ` +\n `Keeping \"${ctx.replacementEvent.message}\" (id: ${ctx.replacementEvent.id}) instead.`\n );\n };\n\n const warnFailure = (\n ctx: RemoteDeliveryFailureContext,\n suppressWarning: boolean | undefined\n ): void => {\n if (!deliveryConfig.warnOnFailure || suppressWarning) {\n return;\n }\n\n const details = [\n `reason=${ctx.reason}`,\n `attempt=${formatWarningValue(ctx.attempt)}`,\n `status=${formatWarningValue(ctx.status)}`,\n ];\n\n if (ctx.error) {\n details.push(`error=${ctx.error}`);\n }\n\n warn(\n `[blyp/${runtimeLabel}] Failed to deliver log \"${ctx.event.message}\" ` +\n `(id: ${ctx.event.id}, ${details.join(', ')})`\n );\n };\n\n const totalUnsentEvents = (): number => queue.length + (inFlight ? 1 : 0);\n\n const scheduleFlush = (flush: () => void): void => {\n clearFlushTimer();\n\n if (queue.length === 0) {\n refreshResumeSubscription(flush);\n return;\n }\n\n const nextAttemptAt = queue.reduce((lowest, item) => {\n return Math.min(lowest, item.nextAttemptAt);\n }, Number.POSITIVE_INFINITY);\n const delay = Math.max(nextAttemptAt - Date.now(), 0);\n flushTimer = setTimeout(() => {\n flushTimer = undefined;\n flush();\n }, delay);\n refreshResumeSubscription(flush);\n };\n\n const emitDrop = (\n droppedEvent: ClientLogEvent,\n replacementEvent: ClientLogEvent\n ): void => {\n const context: RemoteDeliveryDropContext = {\n runtime: options.runtime,\n droppedEvent,\n replacementEvent,\n maxQueueSize: deliveryConfig.maxQueueSize,\n reason: 'queue_overflow',\n };\n\n safeCall(deliveryConfig.onDrop, context);\n warnDrop(context);\n };\n\n const enforceQueueCapacity = (): void => {\n while (totalUnsentEvents() > deliveryConfig.maxQueueSize && queue.length > 0) {\n const droppedItem = queue.shift();\n const replacementEvent = queue[queue.length - 1]?.event ?? inFlight?.event;\n\n if (!droppedItem || !replacementEvent) {\n break;\n }\n\n emitDrop(droppedItem.event, replacementEvent);\n }\n };\n\n const getNextReadyIndex = (): number => {\n const now = Date.now();\n\n for (let index = 0; index < queue.length; index += 1) {\n if (queue[index]!.nextAttemptAt <= now) {\n return index;\n }\n }\n\n return -1;\n };\n\n const flush = async (): Promise<void> => {\n if (isProcessing) {\n return;\n }\n\n isProcessing = true;\n\n try {\n while (true) {\n const nextIndex = getNextReadyIndex();\n if (nextIndex === -1) {\n break;\n }\n\n const item = queue.splice(nextIndex, 1)[0];\n if (!item) {\n continue;\n }\n\n inFlight = item;\n refreshResumeSubscription(() => {\n void flush();\n });\n\n item.attempt += 1;\n\n const result = await options.send(item.event);\n inFlight = undefined;\n\n if (result.outcome === 'success') {\n const context: RemoteDeliverySuccessContext = {\n runtime: options.runtime,\n event: item.event,\n attempt: item.attempt,\n status: result.status,\n transport: result.transport,\n };\n\n safeCall(deliveryConfig.onSuccess, context);\n continue;\n }\n\n if (\n result.outcome === 'retry' &&\n item.attempt <= deliveryConfig.maxRetries\n ) {\n item.nextAttemptAt = Date.now() + deliveryConfig.retryDelayMs;\n queue.push(item);\n\n const context: RemoteDeliveryRetryContext = {\n runtime: options.runtime,\n event: item.event,\n attempt: item.attempt,\n retriesRemaining: deliveryConfig.maxRetries - (item.attempt - 1),\n nextRetryAt: new Date(item.nextAttemptAt).toISOString(),\n reason: result.reason,\n status: result.status,\n error: result.error,\n };\n\n safeCall(deliveryConfig.onRetry, context);\n continue;\n }\n\n const failureContext: RemoteDeliveryFailureContext = {\n runtime: options.runtime,\n event: item.event,\n attempt: item.attempt,\n reason: result.reason,\n status: result.status,\n error: result.error,\n };\n\n safeCall(deliveryConfig.onFailure, failureContext);\n warnFailure(\n failureContext,\n result.outcome === 'failure' ? result.suppressWarning : undefined\n );\n }\n } finally {\n isProcessing = false;\n scheduleFlush(() => {\n void flush();\n });\n }\n };\n\n return {\n enqueue(event: ClientLogEvent): void {\n queue.push({\n event,\n attempt: 0,\n nextAttemptAt: Date.now(),\n });\n enforceQueueCapacity();\n scheduleFlush(() => {\n void flush();\n });\n void flush();\n },\n };\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 type { ClientLogDeviceContext } from '../../shared/client-log';\nimport type {\n ExpoNetworkLoader,\n ExpoNetworkModule,\n ExpoNetworkState,\n ExpoNetworkSubscription,\n} from '../../types/frameworks/expo';\n\nlet expoNetworkLoader: ExpoNetworkLoader = async () => {\n try {\n const module = await import('expo-network');\n if (typeof module.getNetworkStateAsync !== 'function') {\n return null;\n }\n\n return module as ExpoNetworkModule;\n } catch {\n return null;\n }\n};\n\nlet expoNetworkModulePromise: Promise<ExpoNetworkModule | null> | undefined;\nlet lastKnownExpoNetworkState: ClientLogDeviceContext['network'] | undefined;\n\nfunction normalizeNetworkState(\n state: ExpoNetworkState | undefined\n): ClientLogDeviceContext['network'] | undefined {\n if (!state) {\n return undefined;\n }\n\n return {\n type: typeof state.type === 'string' ? state.type : undefined,\n isConnected: typeof state.isConnected === 'boolean' ? state.isConnected : undefined,\n isInternetReachable: typeof state.isInternetReachable === 'boolean'\n ? state.isInternetReachable\n : undefined,\n };\n}\n\nexport function loadExpoNetworkModule(): Promise<ExpoNetworkModule | null> {\n if (!expoNetworkModulePromise) {\n expoNetworkModulePromise = expoNetworkLoader();\n }\n\n return expoNetworkModulePromise;\n}\n\nexport async function getExpoNetworkSnapshot(): Promise<ClientLogDeviceContext['network'] | undefined> {\n const module = await loadExpoNetworkModule();\n if (!module) {\n return undefined;\n }\n\n try {\n const state = normalizeNetworkState(await module.getNetworkStateAsync());\n lastKnownExpoNetworkState = state;\n return state;\n } catch {\n return lastKnownExpoNetworkState;\n }\n}\n\nexport function subscribeToExpoNetworkState(\n listener: (state: ClientLogDeviceContext['network'] | undefined) => void\n): () => void {\n let isActive = true;\n let subscription: ExpoNetworkSubscription | undefined;\n\n void loadExpoNetworkModule().then((module) => {\n if (!isActive || !module || typeof module.addNetworkStateListener !== 'function') {\n return;\n }\n\n subscription = module.addNetworkStateListener((event) => {\n const state = normalizeNetworkState(event);\n lastKnownExpoNetworkState = state;\n listener(state);\n });\n });\n\n return () => {\n isActive = false;\n subscription?.remove();\n };\n}\n\nexport function setExpoNetworkLoaderForTests(loader: ExpoNetworkLoader): void {\n expoNetworkLoader = loader;\n resetExpoNetworkStateForTests();\n}\n\nexport function resetExpoNetworkStateForTests(): void {\n expoNetworkModulePromise = undefined;\n lastKnownExpoNetworkState = undefined;\n}\n","import {\n type ClientLogEvent,\n createRandomId,\n normalizeClientLogLevel,\n normalizeClientPayloadData,\n normalizeLogValue,\n normalizeMetadata,\n serializeLogMessage,\n} from '../../shared/client-log';\nimport {\n createRemoteDeliveryManager,\n type DeliveryAttemptResult,\n} from '../../shared/remote-delivery';\nimport {\n createErrorOnceLogger,\n createWarnOnceLogger,\n} from '../../shared/once';\nimport { isAbsoluteHttpUrl } from '../../shared/validation';\nimport type {\n ExpoLogLevel,\n ExpoLogger,\n ExpoLoggerConfig,\n ExpoLoggerState,\n} from '../../types/frameworks/expo';\nimport {\n getExpoNetworkSnapshot,\n loadExpoNetworkModule,\n subscribeToExpoNetworkState,\n} from './network';\n\nconst expoSessionId = createRandomId();\nconst warnedMessages = new Set<string>();\nconst warnOnce = createWarnOnceLogger(warnedMessages);\nconst errorOnce = createErrorOnceLogger(warnedMessages);\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 429 || status >= 500;\n}\n\nfunction resolveHeaders(headers: Record<string, string> | undefined): Record<string, string> {\n return {\n 'content-type': 'application/json',\n ...(headers ?? {}),\n };\n}\n\nfunction emitLocalConsole(level: ExpoLogLevel, message: unknown, args: unknown[]): void {\n if (typeof console === 'undefined') {\n return;\n }\n\n const normalizedArgs = args.map((entry) => normalizeLogValue(entry));\n const text = serializeLogMessage(message);\n\n switch (level) {\n case 'table':\n console.log(text);\n if (normalizedArgs.length > 0 && typeof console.table === 'function') {\n console.table(normalizedArgs[0]);\n }\n return;\n case 'warning':\n case 'warn':\n console.warn(text, ...normalizedArgs);\n return;\n case 'error':\n case 'critical':\n console.error(text, ...normalizedArgs);\n return;\n case 'debug':\n console.debug(text, ...normalizedArgs);\n return;\n case 'success':\n console.log(text, ...normalizedArgs);\n return;\n case 'info':\n default:\n console.info(text, ...normalizedArgs);\n }\n}\n\nasync function sendRemoteLog(\n config: {\n endpoint?: string;\n headers?: Record<string, string>;\n connector?: ExpoLoggerConfig['connector'];\n metadata?: ExpoLoggerConfig['metadata'];\n },\n event: ClientLogEvent\n): Promise<DeliveryAttemptResult> {\n if (!isAbsoluteHttpUrl(config.endpoint)) {\n warnOnce(\n 'invalid-endpoint',\n '[blyp/expo] `endpoint` must be an absolute http(s) URL. Remote sync skipped.'\n );\n return {\n outcome: 'failure',\n reason: 'invalid_endpoint',\n suppressWarning: true,\n };\n }\n\n const expoNetworkModule = await loadExpoNetworkModule();\n if (!expoNetworkModule) {\n warnOnce(\n 'missing-expo-network',\n '[blyp/expo] Install `expo-network` to enable remote sync in Expo.'\n );\n return {\n outcome: 'failure',\n reason: 'missing_transport',\n suppressWarning: true,\n };\n }\n\n if (typeof fetch !== 'function') {\n return {\n outcome: 'failure',\n reason: 'missing_transport',\n };\n }\n\n const network = await getExpoNetworkSnapshot();\n if (network?.isConnected === false || network?.isInternetReachable === false) {\n return {\n outcome: 'retry',\n reason: 'offline',\n };\n }\n\n const payload: ClientLogEvent = {\n ...event,\n device: {\n runtime: 'expo',\n network,\n },\n };\n\n try {\n const response = await fetch(config.endpoint, {\n method: 'POST',\n headers: resolveHeaders(config.headers),\n body: JSON.stringify(payload),\n });\n\n if (response.ok) {\n if (config.connector === 'betterstack' && response.headers.get('x-blyp-betterstack-status') === 'missing') {\n errorOnce(\n 'missing-betterstack-server-config',\n '[blyp/expo] Better Stack connector requested but not configured on the server. Continuing without Better Stack forwarding.'\n );\n }\n\n if (config.connector === 'databuddy' && response.headers.get('x-blyp-databuddy-status') === 'missing') {\n errorOnce(\n 'missing-databuddy-server-config',\n '[blyp/expo] Databuddy connector requested but not configured on the server. Continuing without Databuddy forwarding.'\n );\n }\n\n if (config.connector === 'posthog' && response.headers.get('x-blyp-posthog-status') === 'missing') {\n errorOnce(\n 'missing-posthog-server-config',\n '[blyp/expo] PostHog connector requested but not configured on the server. Continuing without PostHog forwarding.'\n );\n }\n\n if (config.connector === 'sentry' && response.headers.get('x-blyp-sentry-status') === 'missing') {\n errorOnce(\n 'missing-sentry-server-config',\n '[blyp/expo] Sentry not setup. Continuing without Sentry forwarding.'\n );\n }\n\n if (\n config.connector &&\n typeof config.connector === 'object' &&\n config.connector.type === 'otlp' &&\n response.headers.get('x-blyp-otlp-status') === 'missing'\n ) {\n errorOnce(\n `missing-otlp-server-config:${config.connector.name}`,\n `[blyp/expo] OTLP target \"${config.connector.name}\" was requested but not configured on the server. Continuing without OTLP forwarding.`\n );\n }\n\n return {\n outcome: 'success',\n transport: 'fetch',\n status: response.status,\n };\n }\n\n if (isRetryableStatus(response.status)) {\n return {\n outcome: 'retry',\n reason: 'response_status',\n status: response.status,\n };\n }\n\n return {\n outcome: 'failure',\n reason: 'response_status',\n status: response.status,\n };\n } catch (error) {\n return {\n outcome: 'retry',\n reason: 'network_error',\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\nfunction buildExpoLogger(\n config: ExpoLoggerConfig | undefined,\n state: ExpoLoggerState\n): ExpoLogger {\n const resolvedConfig = {\n endpoint: config?.endpoint,\n headers: config?.headers,\n localConsole: config?.localConsole ?? true,\n remoteSync: config?.remoteSync ?? true,\n connector: config?.connector,\n metadata: config?.metadata,\n };\n\n const delivery = state.delivery ??\n (\n resolvedConfig.remoteSync\n ? createRemoteDeliveryManager({\n runtime: 'expo',\n delivery: config?.delivery,\n send: (event) => sendRemoteLog(resolvedConfig, event),\n subscribeToResume: (resume) => {\n return subscribeToExpoNetworkState((network) => {\n if (network?.isConnected === false || network?.isInternetReachable === false) {\n return;\n }\n\n resume();\n });\n },\n })\n : undefined\n );\n\n const writeLog = (level: ExpoLogLevel, message: unknown, args: unknown[]): void => {\n if (resolvedConfig.localConsole) {\n emitLocalConsole(level, message, args);\n }\n\n if (!resolvedConfig.remoteSync) {\n return;\n }\n\n const payload: ClientLogEvent = {\n type: 'client_log',\n source: 'client',\n id: createRandomId(),\n level: normalizeClientLogLevel(level),\n message: serializeLogMessage(message),\n connector: resolvedConfig.connector,\n data: normalizeClientPayloadData(message, args),\n bindings: Object.keys(state.bindings).length > 0 ? normalizeLogValue(state.bindings) as Record<string, unknown> : undefined,\n clientTimestamp: new Date().toISOString(),\n page: {},\n browser: {},\n device: {\n runtime: 'expo',\n },\n session: {\n pageId: state.pageId,\n sessionId: state.sessionId,\n },\n metadata: normalizeMetadata(resolvedConfig.metadata),\n };\n\n delivery?.enqueue(payload);\n };\n\n return {\n debug: (message: unknown, ...args: unknown[]) => {\n writeLog('debug', message, args);\n },\n info: (message: unknown, ...args: unknown[]) => {\n writeLog('info', message, args);\n },\n error: (message: unknown, ...args: unknown[]) => {\n writeLog('error', message, args);\n },\n warn: (message: unknown, ...args: unknown[]) => {\n writeLog('warn', message, args);\n },\n warning: (message: unknown, ...args: unknown[]) => {\n writeLog('warning', message, args);\n },\n success: (message: unknown, ...args: unknown[]) => {\n writeLog('success', message, args);\n },\n critical: (message: unknown, ...args: unknown[]) => {\n writeLog('critical', message, args);\n },\n table: (message: string, data?: unknown) => {\n writeLog('table', message, data === undefined ? [] : [data]);\n },\n child: (bindings: Record<string, unknown>) => {\n return buildExpoLogger(config, {\n ...state,\n bindings: {\n ...state.bindings,\n ...bindings,\n },\n delivery,\n });\n },\n };\n}\n\nexport function createExpoLogger(config: ExpoLoggerConfig): ExpoLogger {\n return buildExpoLogger(config, {\n pageId: createRandomId(),\n sessionId: expoSessionId,\n bindings: {},\n });\n}\n\nexport function resetExpoWarningsForTests(): void {\n warnedMessages.clear();\n}\n"]}
package/dist/expo.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shared/log-value.ts","../src/shared/validation.ts","../src/shared/client-log.ts","../src/shared/remote-delivery.ts","../src/shared/once.ts","../src/frameworks/expo/network.ts","../src/frameworks/expo/logger.ts"],"names":["z","flush"],"mappings":"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","file":"expo.mjs","sourcesContent":["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 {\n ClientLogEvent,\n RemoteDeliveryConfig,\n RemoteDeliveryDropContext,\n RemoteDeliveryFailureContext,\n RemoteDeliveryRetryContext,\n RemoteDeliverySuccessContext\n} from '../types/shared/client-log';\nimport type {\n QueueItem,\n RemoteDeliveryManagerOptions\n} from '../types/shared/remote-delivery';\n\nexport type {\n DeliveryAttemptFailure,\n DeliveryAttemptResult,\n DeliveryAttemptRetry,\n DeliveryAttemptSuccess\n} from '../types/shared/remote-delivery';\n\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_RETRY_DELAY_MS = 5_000;\nconst DEFAULT_MAX_QUEUE_SIZE = 100;\n\nfunction clampInteger(value: number | undefined, fallback: number, minimum: number): number {\n if (!Number.isFinite(value)) {\n return fallback;\n }\n\n return Math.max(minimum, Math.floor(value!));\n}\n\nfunction safeCall<T>(callback: ((value: T) => void) | undefined, value: T): void {\n if (!callback) {\n return;\n }\n\n try {\n callback(value);\n } catch {}\n}\n\nfunction warn(message: string): void {\n if (typeof console === 'undefined' || typeof console.warn !== 'function') {\n return;\n }\n\n console.warn(message);\n}\n\nfunction formatWarningValue(value: string | number | undefined): string {\n return value === undefined ? 'unknown' : String(value);\n}\n\nexport function createRemoteDeliveryManager(\n options: RemoteDeliveryManagerOptions\n): { enqueue: (event: ClientLogEvent) => void } {\n const deliveryConfig = {\n maxRetries: clampInteger(options.delivery?.maxRetries, DEFAULT_MAX_RETRIES, 0),\n retryDelayMs: clampInteger(options.delivery?.retryDelayMs, DEFAULT_RETRY_DELAY_MS, 0),\n maxQueueSize: clampInteger(options.delivery?.maxQueueSize, DEFAULT_MAX_QUEUE_SIZE, 1),\n warnOnFailure: options.delivery?.warnOnFailure ?? true,\n onSuccess: options.delivery?.onSuccess,\n onRetry: options.delivery?.onRetry,\n onFailure: options.delivery?.onFailure,\n onDrop: options.delivery?.onDrop,\n } satisfies Required<\n Pick<RemoteDeliveryConfig, 'maxRetries' | 'retryDelayMs' | 'maxQueueSize' | 'warnOnFailure'>\n > & Pick<RemoteDeliveryConfig, 'onSuccess' | 'onRetry' | 'onFailure' | 'onDrop'>;\n\n const queue: QueueItem[] = [];\n let inFlight: QueueItem | undefined;\n let flushTimer: ReturnType<typeof setTimeout> | undefined;\n let isProcessing = false;\n let unsubscribeFromResume: (() => void) | undefined;\n\n const runtimeLabel = options.runtime === 'browser' ? 'client' : options.runtime;\n\n const clearFlushTimer = (): void => {\n if (!flushTimer) {\n return;\n }\n\n clearTimeout(flushTimer);\n flushTimer = undefined;\n };\n\n const hasUnsentEvents = (): boolean => queue.length > 0 || inFlight !== undefined;\n\n const refreshResumeSubscription = (flush: () => void): void => {\n if (!options.subscribeToResume) {\n return;\n }\n\n if (hasUnsentEvents()) {\n if (!unsubscribeFromResume) {\n unsubscribeFromResume = options.subscribeToResume(() => {\n const now = Date.now();\n for (const item of queue) {\n item.nextAttemptAt = now;\n }\n\n clearFlushTimer();\n flush();\n }) ?? undefined;\n }\n\n return;\n }\n\n if (unsubscribeFromResume) {\n unsubscribeFromResume();\n unsubscribeFromResume = undefined;\n }\n };\n\n const warnDrop = (ctx: RemoteDeliveryDropContext): void => {\n if (!deliveryConfig.warnOnFailure) {\n return;\n }\n\n warn(\n `[blyp/${runtimeLabel}] Dropped queued log \"${ctx.droppedEvent.message}\" ` +\n `(id: ${ctx.droppedEvent.id}) because the delivery queue reached ${ctx.maxQueueSize}. ` +\n `Keeping \"${ctx.replacementEvent.message}\" (id: ${ctx.replacementEvent.id}) instead.`\n );\n };\n\n const warnFailure = (\n ctx: RemoteDeliveryFailureContext,\n suppressWarning: boolean | undefined\n ): void => {\n if (!deliveryConfig.warnOnFailure || suppressWarning) {\n return;\n }\n\n const details = [\n `reason=${ctx.reason}`,\n `attempt=${formatWarningValue(ctx.attempt)}`,\n `status=${formatWarningValue(ctx.status)}`,\n ];\n\n if (ctx.error) {\n details.push(`error=${ctx.error}`);\n }\n\n warn(\n `[blyp/${runtimeLabel}] Failed to deliver log \"${ctx.event.message}\" ` +\n `(id: ${ctx.event.id}, ${details.join(', ')})`\n );\n };\n\n const totalUnsentEvents = (): number => queue.length + (inFlight ? 1 : 0);\n\n const scheduleFlush = (flush: () => void): void => {\n clearFlushTimer();\n\n if (queue.length === 0) {\n refreshResumeSubscription(flush);\n return;\n }\n\n const nextAttemptAt = queue.reduce((lowest, item) => {\n return Math.min(lowest, item.nextAttemptAt);\n }, Number.POSITIVE_INFINITY);\n const delay = Math.max(nextAttemptAt - Date.now(), 0);\n flushTimer = setTimeout(() => {\n flushTimer = undefined;\n flush();\n }, delay);\n refreshResumeSubscription(flush);\n };\n\n const emitDrop = (\n droppedEvent: ClientLogEvent,\n replacementEvent: ClientLogEvent\n ): void => {\n const context: RemoteDeliveryDropContext = {\n runtime: options.runtime,\n droppedEvent,\n replacementEvent,\n maxQueueSize: deliveryConfig.maxQueueSize,\n reason: 'queue_overflow',\n };\n\n safeCall(deliveryConfig.onDrop, context);\n warnDrop(context);\n };\n\n const enforceQueueCapacity = (): void => {\n while (totalUnsentEvents() > deliveryConfig.maxQueueSize && queue.length > 0) {\n const droppedItem = queue.shift();\n const replacementEvent = queue[queue.length - 1]?.event ?? inFlight?.event;\n\n if (!droppedItem || !replacementEvent) {\n break;\n }\n\n emitDrop(droppedItem.event, replacementEvent);\n }\n };\n\n const getNextReadyIndex = (): number => {\n const now = Date.now();\n\n for (let index = 0; index < queue.length; index += 1) {\n if (queue[index]!.nextAttemptAt <= now) {\n return index;\n }\n }\n\n return -1;\n };\n\n const flush = async (): Promise<void> => {\n if (isProcessing) {\n return;\n }\n\n isProcessing = true;\n\n try {\n while (true) {\n const nextIndex = getNextReadyIndex();\n if (nextIndex === -1) {\n break;\n }\n\n const item = queue.splice(nextIndex, 1)[0];\n if (!item) {\n continue;\n }\n\n inFlight = item;\n refreshResumeSubscription(() => {\n void flush();\n });\n\n item.attempt += 1;\n\n const result = await options.send(item.event);\n inFlight = undefined;\n\n if (result.outcome === 'success') {\n const context: RemoteDeliverySuccessContext = {\n runtime: options.runtime,\n event: item.event,\n attempt: item.attempt,\n status: result.status,\n transport: result.transport,\n };\n\n safeCall(deliveryConfig.onSuccess, context);\n continue;\n }\n\n if (\n result.outcome === 'retry' &&\n item.attempt <= deliveryConfig.maxRetries\n ) {\n item.nextAttemptAt = Date.now() + deliveryConfig.retryDelayMs;\n queue.push(item);\n\n const context: RemoteDeliveryRetryContext = {\n runtime: options.runtime,\n event: item.event,\n attempt: item.attempt,\n retriesRemaining: deliveryConfig.maxRetries - (item.attempt - 1),\n nextRetryAt: new Date(item.nextAttemptAt).toISOString(),\n reason: result.reason,\n status: result.status,\n error: result.error,\n };\n\n safeCall(deliveryConfig.onRetry, context);\n continue;\n }\n\n const failureContext: RemoteDeliveryFailureContext = {\n runtime: options.runtime,\n event: item.event,\n attempt: item.attempt,\n reason: result.reason,\n status: result.status,\n error: result.error,\n };\n\n safeCall(deliveryConfig.onFailure, failureContext);\n warnFailure(\n failureContext,\n result.outcome === 'failure' ? result.suppressWarning : undefined\n );\n }\n } finally {\n isProcessing = false;\n scheduleFlush(() => {\n void flush();\n });\n }\n };\n\n return {\n enqueue(event: ClientLogEvent): void {\n queue.push({\n event,\n attempt: 0,\n nextAttemptAt: Date.now(),\n });\n enforceQueueCapacity();\n scheduleFlush(() => {\n void flush();\n });\n void flush();\n },\n };\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 type { ClientLogDeviceContext } from '../../shared/client-log';\nimport type {\n ExpoNetworkLoader,\n ExpoNetworkModule,\n ExpoNetworkState,\n ExpoNetworkSubscription,\n} from '../../types/frameworks/expo';\n\nlet expoNetworkLoader: ExpoNetworkLoader = async () => {\n try {\n const module = await import('expo-network');\n if (typeof module.getNetworkStateAsync !== 'function') {\n return null;\n }\n\n return module as ExpoNetworkModule;\n } catch {\n return null;\n }\n};\n\nlet expoNetworkModulePromise: Promise<ExpoNetworkModule | null> | undefined;\nlet lastKnownExpoNetworkState: ClientLogDeviceContext['network'] | undefined;\n\nfunction normalizeNetworkState(\n state: ExpoNetworkState | undefined\n): ClientLogDeviceContext['network'] | undefined {\n if (!state) {\n return undefined;\n }\n\n return {\n type: typeof state.type === 'string' ? state.type : undefined,\n isConnected: typeof state.isConnected === 'boolean' ? state.isConnected : undefined,\n isInternetReachable: typeof state.isInternetReachable === 'boolean'\n ? state.isInternetReachable\n : undefined,\n };\n}\n\nexport function loadExpoNetworkModule(): Promise<ExpoNetworkModule | null> {\n if (!expoNetworkModulePromise) {\n expoNetworkModulePromise = expoNetworkLoader();\n }\n\n return expoNetworkModulePromise;\n}\n\nexport async function getExpoNetworkSnapshot(): Promise<ClientLogDeviceContext['network'] | undefined> {\n const module = await loadExpoNetworkModule();\n if (!module) {\n return undefined;\n }\n\n try {\n const state = normalizeNetworkState(await module.getNetworkStateAsync());\n lastKnownExpoNetworkState = state;\n return state;\n } catch {\n return lastKnownExpoNetworkState;\n }\n}\n\nexport function subscribeToExpoNetworkState(\n listener: (state: ClientLogDeviceContext['network'] | undefined) => void\n): () => void {\n let isActive = true;\n let subscription: ExpoNetworkSubscription | undefined;\n\n void loadExpoNetworkModule().then((module) => {\n if (!isActive || !module || typeof module.addNetworkStateListener !== 'function') {\n return;\n }\n\n subscription = module.addNetworkStateListener((event) => {\n const state = normalizeNetworkState(event);\n lastKnownExpoNetworkState = state;\n listener(state);\n });\n });\n\n return () => {\n isActive = false;\n subscription?.remove();\n };\n}\n\nexport function setExpoNetworkLoaderForTests(loader: ExpoNetworkLoader): void {\n expoNetworkLoader = loader;\n resetExpoNetworkStateForTests();\n}\n\nexport function resetExpoNetworkStateForTests(): void {\n expoNetworkModulePromise = undefined;\n lastKnownExpoNetworkState = undefined;\n}\n","import {\n type ClientLogEvent,\n createRandomId,\n normalizeClientLogLevel,\n normalizeClientPayloadData,\n normalizeLogValue,\n normalizeMetadata,\n serializeLogMessage,\n} from '../../shared/client-log';\nimport {\n createRemoteDeliveryManager,\n type DeliveryAttemptResult,\n} from '../../shared/remote-delivery';\nimport {\n createErrorOnceLogger,\n createWarnOnceLogger,\n} from '../../shared/once';\nimport { isAbsoluteHttpUrl } from '../../shared/validation';\nimport type {\n ExpoLogLevel,\n ExpoLogger,\n ExpoLoggerConfig,\n ExpoLoggerState,\n} from '../../types/frameworks/expo';\nimport {\n getExpoNetworkSnapshot,\n loadExpoNetworkModule,\n subscribeToExpoNetworkState,\n} from './network';\n\nconst expoSessionId = createRandomId();\nconst warnedMessages = new Set<string>();\nconst warnOnce = createWarnOnceLogger(warnedMessages);\nconst errorOnce = createErrorOnceLogger(warnedMessages);\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 429 || status >= 500;\n}\n\nfunction resolveHeaders(headers: Record<string, string> | undefined): Record<string, string> {\n return {\n 'content-type': 'application/json',\n ...(headers ?? {}),\n };\n}\n\nfunction emitLocalConsole(level: ExpoLogLevel, message: unknown, args: unknown[]): void {\n if (typeof console === 'undefined') {\n return;\n }\n\n const normalizedArgs = args.map((entry) => normalizeLogValue(entry));\n const text = serializeLogMessage(message);\n\n switch (level) {\n case 'table':\n console.log(text);\n if (normalizedArgs.length > 0 && typeof console.table === 'function') {\n console.table(normalizedArgs[0]);\n }\n return;\n case 'warning':\n case 'warn':\n console.warn(text, ...normalizedArgs);\n return;\n case 'error':\n case 'critical':\n console.error(text, ...normalizedArgs);\n return;\n case 'debug':\n console.debug(text, ...normalizedArgs);\n return;\n case 'success':\n console.log(text, ...normalizedArgs);\n return;\n case 'info':\n default:\n console.info(text, ...normalizedArgs);\n }\n}\n\nasync function sendRemoteLog(\n config: {\n endpoint?: string;\n headers?: Record<string, string>;\n connector?: ExpoLoggerConfig['connector'];\n metadata?: ExpoLoggerConfig['metadata'];\n },\n event: ClientLogEvent\n): Promise<DeliveryAttemptResult> {\n if (!isAbsoluteHttpUrl(config.endpoint)) {\n warnOnce(\n 'invalid-endpoint',\n '[blyp/expo] `endpoint` must be an absolute http(s) URL. Remote sync skipped.'\n );\n return {\n outcome: 'failure',\n reason: 'invalid_endpoint',\n suppressWarning: true,\n };\n }\n\n const expoNetworkModule = await loadExpoNetworkModule();\n if (!expoNetworkModule) {\n warnOnce(\n 'missing-expo-network',\n '[blyp/expo] Install `expo-network` to enable remote sync in Expo.'\n );\n return {\n outcome: 'failure',\n reason: 'missing_transport',\n suppressWarning: true,\n };\n }\n\n if (typeof fetch !== 'function') {\n return {\n outcome: 'failure',\n reason: 'missing_transport',\n };\n }\n\n const network = await getExpoNetworkSnapshot();\n if (network?.isConnected === false || network?.isInternetReachable === false) {\n return {\n outcome: 'retry',\n reason: 'offline',\n };\n }\n\n const payload: ClientLogEvent = {\n ...event,\n device: {\n runtime: 'expo',\n network,\n },\n };\n\n try {\n const response = await fetch(config.endpoint, {\n method: 'POST',\n headers: resolveHeaders(config.headers),\n body: JSON.stringify(payload),\n });\n\n if (response.ok) {\n if (config.connector === 'betterstack' && response.headers.get('x-blyp-betterstack-status') === 'missing') {\n errorOnce(\n 'missing-betterstack-server-config',\n '[blyp/expo] Better Stack connector requested but not configured on the server. Continuing without Better Stack forwarding.'\n );\n }\n\n if (config.connector === 'databuddy' && response.headers.get('x-blyp-databuddy-status') === 'missing') {\n errorOnce(\n 'missing-databuddy-server-config',\n '[blyp/expo] Databuddy connector requested but not configured on the server. Continuing without Databuddy forwarding.'\n );\n }\n\n if (config.connector === 'posthog' && response.headers.get('x-blyp-posthog-status') === 'missing') {\n errorOnce(\n 'missing-posthog-server-config',\n '[blyp/expo] PostHog connector requested but not configured on the server. Continuing without PostHog forwarding.'\n );\n }\n\n if (config.connector === 'sentry' && response.headers.get('x-blyp-sentry-status') === 'missing') {\n errorOnce(\n 'missing-sentry-server-config',\n '[blyp/expo] Sentry not setup. Continuing without Sentry forwarding.'\n );\n }\n\n if (\n config.connector &&\n typeof config.connector === 'object' &&\n config.connector.type === 'otlp' &&\n response.headers.get('x-blyp-otlp-status') === 'missing'\n ) {\n errorOnce(\n `missing-otlp-server-config:${config.connector.name}`,\n `[blyp/expo] OTLP target \"${config.connector.name}\" was requested but not configured on the server. Continuing without OTLP forwarding.`\n );\n }\n\n return {\n outcome: 'success',\n transport: 'fetch',\n status: response.status,\n };\n }\n\n if (isRetryableStatus(response.status)) {\n return {\n outcome: 'retry',\n reason: 'response_status',\n status: response.status,\n };\n }\n\n return {\n outcome: 'failure',\n reason: 'response_status',\n status: response.status,\n };\n } catch (error) {\n return {\n outcome: 'retry',\n reason: 'network_error',\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\nfunction buildExpoLogger(\n config: ExpoLoggerConfig | undefined,\n state: ExpoLoggerState\n): ExpoLogger {\n const resolvedConfig = {\n endpoint: config?.endpoint,\n headers: config?.headers,\n localConsole: config?.localConsole ?? true,\n remoteSync: config?.remoteSync ?? true,\n connector: config?.connector,\n metadata: config?.metadata,\n };\n\n const delivery = state.delivery ??\n (\n resolvedConfig.remoteSync\n ? createRemoteDeliveryManager({\n runtime: 'expo',\n delivery: config?.delivery,\n send: (event) => sendRemoteLog(resolvedConfig, event),\n subscribeToResume: (resume) => {\n return subscribeToExpoNetworkState((network) => {\n if (network?.isConnected === false || network?.isInternetReachable === false) {\n return;\n }\n\n resume();\n });\n },\n })\n : undefined\n );\n\n const writeLog = (level: ExpoLogLevel, message: unknown, args: unknown[]): void => {\n if (resolvedConfig.localConsole) {\n emitLocalConsole(level, message, args);\n }\n\n if (!resolvedConfig.remoteSync) {\n return;\n }\n\n const payload: ClientLogEvent = {\n type: 'client_log',\n source: 'client',\n id: createRandomId(),\n level: normalizeClientLogLevel(level),\n message: serializeLogMessage(message),\n connector: resolvedConfig.connector,\n data: normalizeClientPayloadData(message, args),\n bindings: Object.keys(state.bindings).length > 0 ? normalizeLogValue(state.bindings) as Record<string, unknown> : undefined,\n clientTimestamp: new Date().toISOString(),\n page: {},\n browser: {},\n device: {\n runtime: 'expo',\n },\n session: {\n pageId: state.pageId,\n sessionId: state.sessionId,\n },\n metadata: normalizeMetadata(resolvedConfig.metadata),\n };\n\n delivery?.enqueue(payload);\n };\n\n return {\n debug: (message: unknown, ...args: unknown[]) => {\n writeLog('debug', message, args);\n },\n info: (message: unknown, ...args: unknown[]) => {\n writeLog('info', message, args);\n },\n error: (message: unknown, ...args: unknown[]) => {\n writeLog('error', message, args);\n },\n warn: (message: unknown, ...args: unknown[]) => {\n writeLog('warn', message, args);\n },\n warning: (message: unknown, ...args: unknown[]) => {\n writeLog('warning', message, args);\n },\n success: (message: unknown, ...args: unknown[]) => {\n writeLog('success', message, args);\n },\n critical: (message: unknown, ...args: unknown[]) => {\n writeLog('critical', message, args);\n },\n table: (message: string, data?: unknown) => {\n writeLog('table', message, data === undefined ? [] : [data]);\n },\n child: (bindings: Record<string, unknown>) => {\n return buildExpoLogger(config, {\n ...state,\n bindings: {\n ...state.bindings,\n ...bindings,\n },\n delivery,\n });\n },\n };\n}\n\nexport function createExpoLogger(config: ExpoLoggerConfig): ExpoLogger {\n return buildExpoLogger(config, {\n pageId: createRandomId(),\n sessionId: expoSessionId,\n bindings: {},\n });\n}\n\nexport function resetExpoWarningsForTests(): void {\n warnedMessages.clear();\n}\n"]}