@smthrs/observability 0.35.0 → 1.0.0-rc.12

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 (363) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/LICENSE +1 -1
  3. package/README.md +87 -0
  4. package/dist/cjs/BrowserOtel.d.ts +37 -0
  5. package/dist/cjs/BrowserOtel.d.ts.map +1 -0
  6. package/dist/cjs/BrowserOtel.js +47 -0
  7. package/dist/cjs/BrowserOtel.js.map +7 -0
  8. package/dist/cjs/Endpoint.d.ts +70 -0
  9. package/dist/cjs/Endpoint.d.ts.map +1 -0
  10. package/dist/cjs/Endpoint.js +85 -0
  11. package/dist/cjs/Endpoint.js.map +7 -0
  12. package/dist/cjs/JournalLogger.d.ts +232 -0
  13. package/dist/cjs/JournalLogger.d.ts.map +1 -0
  14. package/dist/cjs/JournalLogger.js +415 -0
  15. package/dist/cjs/JournalLogger.js.map +7 -0
  16. package/dist/cjs/Logger.d.ts +56 -0
  17. package/dist/cjs/Logger.d.ts.map +1 -0
  18. package/dist/cjs/Logger.js +72 -0
  19. package/dist/cjs/Logger.js.map +7 -0
  20. package/dist/cjs/Metric.d.ts +67 -0
  21. package/dist/cjs/Metric.d.ts.map +1 -0
  22. package/dist/cjs/Metric.js +68 -0
  23. package/dist/cjs/Metric.js.map +7 -0
  24. package/dist/cjs/NodeOtel.d.ts +42 -0
  25. package/dist/cjs/NodeOtel.d.ts.map +1 -0
  26. package/dist/cjs/NodeOtel.js +78 -0
  27. package/dist/cjs/NodeOtel.js.map +7 -0
  28. package/dist/cjs/Otel.d.ts +63 -0
  29. package/dist/cjs/Otel.d.ts.map +1 -0
  30. package/dist/cjs/Otel.js +75 -0
  31. package/dist/cjs/Otel.js.map +7 -0
  32. package/dist/cjs/Otlp.d.ts +203 -0
  33. package/dist/cjs/Otlp.d.ts.map +1 -0
  34. package/dist/cjs/Otlp.js +251 -0
  35. package/dist/cjs/Otlp.js.map +7 -0
  36. package/dist/cjs/Resource.d.ts +163 -0
  37. package/dist/cjs/Resource.d.ts.map +1 -0
  38. package/dist/cjs/Resource.js +186 -0
  39. package/dist/cjs/Resource.js.map +7 -0
  40. package/dist/cjs/index.d.ts +61 -0
  41. package/dist/cjs/index.d.ts.map +1 -0
  42. package/dist/cjs/index.js +47 -0
  43. package/dist/cjs/index.js.map +7 -0
  44. package/dist/cjs/internal/schemaIssuePath.d.ts +31 -0
  45. package/dist/cjs/internal/schemaIssuePath.d.ts.map +1 -0
  46. package/dist/cjs/internal/schemaIssuePath.js +49 -0
  47. package/dist/cjs/internal/schemaIssuePath.js.map +7 -0
  48. package/dist/cjs/package.json +1 -0
  49. package/dist/esm/BrowserOtel.d.ts +37 -0
  50. package/dist/esm/BrowserOtel.d.ts.map +1 -0
  51. package/dist/esm/BrowserOtel.js +24 -0
  52. package/dist/esm/BrowserOtel.js.map +1 -0
  53. package/dist/esm/Endpoint.d.ts +70 -0
  54. package/dist/esm/Endpoint.d.ts.map +1 -0
  55. package/dist/esm/Endpoint.js +110 -0
  56. package/dist/esm/Endpoint.js.map +1 -0
  57. package/dist/esm/JournalLogger.d.ts +232 -0
  58. package/dist/esm/JournalLogger.d.ts.map +1 -0
  59. package/dist/esm/JournalLogger.js +520 -0
  60. package/dist/esm/JournalLogger.js.map +1 -0
  61. package/dist/esm/Logger.d.ts +56 -0
  62. package/dist/esm/Logger.d.ts.map +1 -0
  63. package/dist/esm/Logger.js +61 -0
  64. package/dist/esm/Logger.js.map +1 -0
  65. package/dist/esm/Metric.d.ts +67 -0
  66. package/dist/esm/Metric.d.ts.map +1 -0
  67. package/dist/esm/Metric.js +80 -0
  68. package/dist/esm/Metric.js.map +1 -0
  69. package/dist/esm/NodeOtel.d.ts +42 -0
  70. package/dist/esm/NodeOtel.d.ts.map +1 -0
  71. package/dist/esm/NodeOtel.js +56 -0
  72. package/dist/esm/NodeOtel.js.map +1 -0
  73. package/dist/esm/Otel.d.ts +63 -0
  74. package/dist/esm/Otel.d.ts.map +1 -0
  75. package/dist/esm/Otel.js +52 -0
  76. package/dist/esm/Otel.js.map +1 -0
  77. package/dist/esm/Otlp.d.ts +203 -0
  78. package/dist/esm/Otlp.d.ts.map +1 -0
  79. package/dist/esm/Otlp.js +384 -0
  80. package/dist/esm/Otlp.js.map +1 -0
  81. package/dist/esm/Resource.d.ts +163 -0
  82. package/dist/esm/Resource.d.ts.map +1 -0
  83. package/dist/esm/Resource.js +238 -0
  84. package/dist/esm/Resource.js.map +1 -0
  85. package/dist/esm/index.d.ts +61 -0
  86. package/dist/esm/index.d.ts.map +1 -0
  87. package/dist/esm/index.js +61 -0
  88. package/dist/esm/index.js.map +1 -0
  89. package/dist/esm/internal/schemaIssuePath.d.ts +31 -0
  90. package/dist/esm/internal/schemaIssuePath.d.ts.map +1 -0
  91. package/dist/esm/internal/schemaIssuePath.js +59 -0
  92. package/dist/esm/internal/schemaIssuePath.js.map +1 -0
  93. package/docs/README.md +164 -0
  94. package/docs/api.md +780 -0
  95. package/docs/concepts/instrumentation-and-export.md +98 -0
  96. package/docs/concepts/layer-map.md +73 -0
  97. package/docs/concepts/validated-acquisition.md +106 -0
  98. package/docs/guides/export-to-a-collector.md +190 -0
  99. package/docs/guides/forward-logs-to-the-journal.md +226 -0
  100. package/docs/guides/install-a-logger.md +111 -0
  101. package/docs/guides/read-runtime-metrics.md +83 -0
  102. package/docs/guides/testing.md +134 -0
  103. package/docs/guides/wire-an-opentelemetry-sdk.md +226 -0
  104. package/docs/installation.md +102 -0
  105. package/docs/quickstart.md +145 -0
  106. package/docs/troubleshooting.md +168 -0
  107. package/package.json +221 -32
  108. package/src/BrowserOtel.ts +51 -0
  109. package/src/Endpoint.ts +131 -0
  110. package/src/JournalLogger.ts +635 -0
  111. package/src/Logger.ts +107 -0
  112. package/src/Metric.ts +88 -0
  113. package/src/NodeOtel.ts +90 -0
  114. package/src/Otel.ts +118 -0
  115. package/src/Otlp.ts +514 -0
  116. package/src/Resource.ts +325 -0
  117. package/src/index.ts +67 -0
  118. package/src/internal/schemaIssuePath.ts +65 -0
  119. package/docker-compose.otel.yml +0 -104
  120. package/grafana/dashboards/smithers-dashboard.json +0 -453
  121. package/grafana/provisioning/dashboards/dashboards.yml +0 -12
  122. package/grafana/provisioning/datasources/datasources.yml +0 -49
  123. package/loki/loki-config.yaml +0 -35
  124. package/otel-collector-config.yml +0 -38
  125. package/prometheus/prometheus.yml +0 -8
  126. package/src/MetricName.ts +0 -1
  127. package/src/MetricsServiceLive.js +0 -9
  128. package/src/README.md +0 -28
  129. package/src/ResolvedSmithersObservabilityOptions.ts +0 -12
  130. package/src/SmithersEvent.ts +0 -843
  131. package/src/SmithersLogFormat.ts +0 -1
  132. package/src/SmithersMetricDefinition.ts +0 -15
  133. package/src/SmithersMetricType.ts +0 -1
  134. package/src/SmithersMetricUnit.ts +0 -1
  135. package/src/SmithersObservability.js +0 -15
  136. package/src/SmithersObservabilityOptions.ts +0 -12
  137. package/src/SmithersObservabilityService.ts +0 -13
  138. package/src/_coreCorrelation/CorrelationContext.ts +0 -10
  139. package/src/_coreCorrelation/CorrelationContextLive.js +0 -11
  140. package/src/_coreCorrelation/CorrelationContextService.js +0 -15
  141. package/src/_coreCorrelation/CorrelationContextServiceShape.ts +0 -12
  142. package/src/_coreCorrelation/CorrelationPatch.ts +0 -3
  143. package/src/_coreCorrelation/README.md +0 -20
  144. package/src/_coreCorrelation/_correlationStorage.js +0 -4
  145. package/src/_coreCorrelation/correlationContextFiberRef.js +0 -5
  146. package/src/_coreCorrelation/correlationContextToLogAnnotations.js +0 -18
  147. package/src/_coreCorrelation/getCurrentCorrelationContext.js +0 -9
  148. package/src/_coreCorrelation/getCurrentCorrelationContextEffect.js +0 -11
  149. package/src/_coreCorrelation/index.js +0 -14
  150. package/src/_coreCorrelation/mergeCorrelationContext.js +0 -51
  151. package/src/_coreCorrelation/runWithCorrelationContext.js +0 -14
  152. package/src/_coreCorrelation/updateCurrentCorrelationContext.js +0 -17
  153. package/src/_coreCorrelation/withCorrelationContext.js +0 -38
  154. package/src/_coreCorrelation/withCurrentCorrelationContext.js +0 -11
  155. package/src/_coreMetrics.js +0 -14
  156. package/src/_coreMetricsShape.ts +0 -44
  157. package/src/_corePrometheus.js +0 -91
  158. package/src/_corePrometheusShape.ts +0 -11
  159. package/src/_coreTracing.js +0 -132
  160. package/src/_coreTracingShape.ts +0 -17
  161. package/src/_otelLogBuilders.js +0 -102
  162. package/src/_sessionFileResolvers.js +0 -164
  163. package/src/_smithersSpanAttributeAliases.js +0 -19
  164. package/src/_smithersTraceSpanStorage.js +0 -3
  165. package/src/_traceEventNormalizers.js +0 -499
  166. package/src/_traceRedaction.js +0 -162
  167. package/src/agentSessionEventToOtelLogRecord.js +0 -55
  168. package/src/agentTrace.ts +0 -144
  169. package/src/agentTraceCapabilities.js +0 -151
  170. package/src/annotateSmithersTrace.js +0 -11
  171. package/src/canonicalTraceEventToOtelLogRecord.js +0 -55
  172. package/src/correlation.js +0 -56
  173. package/src/createSmithersObservabilityLayer.js +0 -59
  174. package/src/createSmithersOtelLayer.js +0 -23
  175. package/src/createSmithersRuntimeLayer.js +0 -2
  176. package/src/detectAgentFamily.js +0 -26
  177. package/src/detectCaptureMode.js +0 -29
  178. package/src/emitOtelLogRecord.js +0 -19
  179. package/src/getCurrentSmithersTraceAnnotations.js +0 -14
  180. package/src/getCurrentSmithersTraceSpan.js +0 -7
  181. package/src/index.d.ts +0 -1392
  182. package/src/index.js +0 -137
  183. package/src/kindPhase.js +0 -17
  184. package/src/logging.js +0 -264
  185. package/src/makeSmithersSpanAttributes.js +0 -20
  186. package/src/metrics/README.md +0 -22
  187. package/src/metrics/SmithersMetricDefinition.ts +0 -17
  188. package/src/metrics/SmithersMetricType.ts +0 -1
  189. package/src/metrics/SmithersMetricUnit.ts +0 -1
  190. package/src/metrics/_asyncExternalWaitCounts.js +0 -4
  191. package/src/metrics/_buckets.js +0 -37
  192. package/src/metrics/_incrementGauge.js +0 -11
  193. package/src/metrics/_processStartMs.js +0 -1
  194. package/src/metrics/activeNodes.js +0 -2
  195. package/src/metrics/activeRuns.js +0 -2
  196. package/src/metrics/agentActionsTotal.js +0 -2
  197. package/src/metrics/agentDurationMs.js +0 -3
  198. package/src/metrics/agentErrorsTotal.js +0 -2
  199. package/src/metrics/agentEventsTotal.js +0 -2
  200. package/src/metrics/agentInvocationsTotal.js +0 -2
  201. package/src/metrics/agentRetriesTotal.js +0 -2
  202. package/src/metrics/agentSessionsTotal.js +0 -2
  203. package/src/metrics/agentTokensTotal.js +0 -2
  204. package/src/metrics/alertDeliveriesAttempted.js +0 -2
  205. package/src/metrics/alertDeliveriesSuppressed.js +0 -2
  206. package/src/metrics/alertsAcknowledgedTotal.js +0 -2
  207. package/src/metrics/alertsActive.js +0 -2
  208. package/src/metrics/alertsEscalatedTotal.js +0 -2
  209. package/src/metrics/alertsFiredTotal.js +0 -2
  210. package/src/metrics/alertsReopenedTotal.js +0 -2
  211. package/src/metrics/alertsResolvedTotal.js +0 -2
  212. package/src/metrics/alertsSilencedTotal.js +0 -2
  213. package/src/metrics/approvalPending.js +0 -2
  214. package/src/metrics/approvalWaitDuration.js +0 -5
  215. package/src/metrics/approvalsDenied.js +0 -2
  216. package/src/metrics/approvalsGranted.js +0 -2
  217. package/src/metrics/approvalsRequested.js +0 -2
  218. package/src/metrics/attemptDuration.js +0 -3
  219. package/src/metrics/attentionBacklog.js +0 -2
  220. package/src/metrics/cacheHits.js +0 -2
  221. package/src/metrics/cacheMisses.js +0 -2
  222. package/src/metrics/dbQueryDuration.js +0 -3
  223. package/src/metrics/dbRetries.js +0 -2
  224. package/src/metrics/dbTransactionDuration.js +0 -3
  225. package/src/metrics/dbTransactionRetries.js +0 -2
  226. package/src/metrics/dbTransactionRollbacks.js +0 -2
  227. package/src/metrics/devtoolsActiveSubscribers.js +0 -2
  228. package/src/metrics/devtoolsBackpressureDisconnectTotal.js +0 -2
  229. package/src/metrics/devtoolsDeltaBuildMs.js +0 -3
  230. package/src/metrics/devtoolsEventBytes.js +0 -3
  231. package/src/metrics/devtoolsEventTotal.js +0 -2
  232. package/src/metrics/devtoolsSnapshotBuildMs.js +0 -5
  233. package/src/metrics/devtoolsSubscribeTotal.js +0 -2
  234. package/src/metrics/errorsTotal.js +0 -2
  235. package/src/metrics/eventsEmittedTotal.js +0 -2
  236. package/src/metrics/externalWaitAsyncPending.js +0 -2
  237. package/src/metrics/gatewayApprovalDecisionsTotal.js +0 -2
  238. package/src/metrics/gatewayAuthEventsTotal.js +0 -2
  239. package/src/metrics/gatewayConnectionsActive.js +0 -2
  240. package/src/metrics/gatewayConnectionsClosedTotal.js +0 -2
  241. package/src/metrics/gatewayConnectionsTotal.js +0 -2
  242. package/src/metrics/gatewayCronTriggersTotal.js +0 -2
  243. package/src/metrics/gatewayErrorsTotal.js +0 -2
  244. package/src/metrics/gatewayHeartbeatTicksTotal.js +0 -2
  245. package/src/metrics/gatewayMessagesReceivedTotal.js +0 -2
  246. package/src/metrics/gatewayMessagesSentTotal.js +0 -2
  247. package/src/metrics/gatewayRpcCallsTotal.js +0 -2
  248. package/src/metrics/gatewayRpcDuration.js +0 -3
  249. package/src/metrics/gatewayRunEventBackpressureDisconnectTotal.js +0 -4
  250. package/src/metrics/gatewayRunsCompletedTotal.js +0 -2
  251. package/src/metrics/gatewayRunsStartedTotal.js +0 -2
  252. package/src/metrics/gatewaySignalsTotal.js +0 -2
  253. package/src/metrics/gatewayWebhooksReceivedTotal.js +0 -2
  254. package/src/metrics/gatewayWebhooksRejectedTotal.js +0 -2
  255. package/src/metrics/gatewayWebhooksVerifiedTotal.js +0 -2
  256. package/src/metrics/heartbeatDataSizeBytes.js +0 -5
  257. package/src/metrics/heartbeatIntervalMs.js +0 -3
  258. package/src/metrics/hotReloadDuration.js +0 -3
  259. package/src/metrics/hotReloadFailures.js +0 -2
  260. package/src/metrics/hotReloads.js +0 -2
  261. package/src/metrics/httpRequestDuration.js +0 -3
  262. package/src/metrics/httpRequests.js +0 -2
  263. package/src/metrics/index.d.ts +0 -1222
  264. package/src/metrics/index.js +0 -168
  265. package/src/metrics/memoryFactReads.js +0 -3
  266. package/src/metrics/memoryFactWrites.js +0 -3
  267. package/src/metrics/memoryMessageSaves.js +0 -3
  268. package/src/metrics/memoryRecallDuration.js +0 -11
  269. package/src/metrics/memoryRecallQueries.js +0 -3
  270. package/src/metrics/metricsServiceAdapter.js +0 -181
  271. package/src/metrics/nodeDuration.js +0 -3
  272. package/src/metrics/nodeRetriesTotal.js +0 -2
  273. package/src/metrics/nodesFailed.js +0 -2
  274. package/src/metrics/nodesFinished.js +0 -2
  275. package/src/metrics/nodesStarted.js +0 -2
  276. package/src/metrics/openApiToolCallErrorsTotal.js +0 -3
  277. package/src/metrics/openApiToolCallsTotal.js +0 -3
  278. package/src/metrics/openApiToolDuration.js +0 -9
  279. package/src/metrics/processHeapUsedBytes.js +0 -2
  280. package/src/metrics/processMemoryRssBytes.js +0 -2
  281. package/src/metrics/processUptimeSeconds.js +0 -2
  282. package/src/metrics/promptSizeBytes.js +0 -3
  283. package/src/metrics/replaysStarted.js +0 -3
  284. package/src/metrics/responseSizeBytes.js +0 -3
  285. package/src/metrics/rewindDurationMs.js +0 -3
  286. package/src/metrics/rewindFramesDeleted.js +0 -3
  287. package/src/metrics/rewindRollbackTotal.js +0 -2
  288. package/src/metrics/rewindSandboxesReverted.js +0 -3
  289. package/src/metrics/rewindTotal.js +0 -2
  290. package/src/metrics/runDuration.js +0 -3
  291. package/src/metrics/runForksCreated.js +0 -3
  292. package/src/metrics/runsAncestryDepth.js +0 -3
  293. package/src/metrics/runsCancelledTotal.js +0 -2
  294. package/src/metrics/runsCarriedStateBytes.js +0 -5
  295. package/src/metrics/runsContinuedTotal.js +0 -2
  296. package/src/metrics/runsFailedTotal.js +0 -2
  297. package/src/metrics/runsFinishedTotal.js +0 -2
  298. package/src/metrics/runsResumedTotal.js +0 -2
  299. package/src/metrics/runsTotal.js +0 -2
  300. package/src/metrics/sandboxActive.js +0 -2
  301. package/src/metrics/sandboxBundleSizeBytes.js +0 -5
  302. package/src/metrics/sandboxCompletedTotal.js +0 -2
  303. package/src/metrics/sandboxCreatedTotal.js +0 -2
  304. package/src/metrics/sandboxDurationMs.js +0 -3
  305. package/src/metrics/sandboxPatchCount.js +0 -3
  306. package/src/metrics/sandboxTransportDurationMs.js +0 -5
  307. package/src/metrics/schedulerConcurrencyUtilization.js +0 -2
  308. package/src/metrics/schedulerQueueDepth.js +0 -2
  309. package/src/metrics/schedulerWaitDuration.js +0 -5
  310. package/src/metrics/scorerDuration.js +0 -9
  311. package/src/metrics/scorerEventsFailed.js +0 -2
  312. package/src/metrics/scorerEventsFinished.js +0 -2
  313. package/src/metrics/scorerEventsStarted.js +0 -2
  314. package/src/metrics/scorersFailed.js +0 -3
  315. package/src/metrics/scorersFinished.js +0 -3
  316. package/src/metrics/scorersStarted.js +0 -3
  317. package/src/metrics/smithersMetricCatalog.js +0 -893
  318. package/src/metrics/smithersMetricCatalogByKey.js +0 -2
  319. package/src/metrics/smithersMetricCatalogByName.js +0 -2
  320. package/src/metrics/smithersMetricCatalogByPrometheusName.js +0 -4
  321. package/src/metrics/snapshotDuration.js +0 -9
  322. package/src/metrics/snapshotsCaptured.js +0 -3
  323. package/src/metrics/supervisorPollDuration.js +0 -5
  324. package/src/metrics/supervisorPollsTotal.js +0 -2
  325. package/src/metrics/supervisorResumeLag.js +0 -5
  326. package/src/metrics/supervisorResumedTotal.js +0 -2
  327. package/src/metrics/supervisorSkippedTotal.js +0 -2
  328. package/src/metrics/supervisorStaleDetected.js +0 -2
  329. package/src/metrics/taskHeartbeatTimeoutTotal.js +0 -2
  330. package/src/metrics/taskHeartbeatsTotal.js +0 -2
  331. package/src/metrics/timerDelayDuration.js +0 -3
  332. package/src/metrics/timersCancelled.js +0 -2
  333. package/src/metrics/timersCreated.js +0 -2
  334. package/src/metrics/timersFired.js +0 -2
  335. package/src/metrics/timersPending.js +0 -2
  336. package/src/metrics/toPrometheusMetricName.js +0 -8
  337. package/src/metrics/tokensCacheReadTotal.js +0 -2
  338. package/src/metrics/tokensCacheWriteTotal.js +0 -2
  339. package/src/metrics/tokensContextWindowBucketTotal.js +0 -2
  340. package/src/metrics/tokensContextWindowPerCall.js +0 -5
  341. package/src/metrics/tokensInputPerCall.js +0 -3
  342. package/src/metrics/tokensInputTotal.js +0 -2
  343. package/src/metrics/tokensOutputPerCall.js +0 -3
  344. package/src/metrics/tokensOutputTotal.js +0 -2
  345. package/src/metrics/tokensReasoningTotal.js +0 -2
  346. package/src/metrics/toolCallErrorsTotal.js +0 -2
  347. package/src/metrics/toolCallsTotal.js +0 -2
  348. package/src/metrics/toolDuration.js +0 -3
  349. package/src/metrics/toolOutputTruncatedTotal.js +0 -2
  350. package/src/metrics/trackEvent.js +0 -608
  351. package/src/metrics/updateAsyncExternalWaitPending.js +0 -18
  352. package/src/metrics/updateProcessMetrics.js +0 -20
  353. package/src/metrics/vcsDuration.js +0 -3
  354. package/src/normalizeStructuredEvent.js +0 -15
  355. package/src/prometheusContentType.js +0 -1
  356. package/src/renderPrometheusMetrics.js +0 -212
  357. package/src/resolveAgentTraceCapabilities.js +0 -59
  358. package/src/resolveSmithersObservabilityOptions.js +0 -109
  359. package/src/smithersMetrics.js +0 -2
  360. package/src/smithersSpanNames.js +0 -6
  361. package/src/unsupportedKindsForCapabilities.js +0 -32
  362. package/src/withSmithersSpan.js +0 -17
  363. package/tempo/tempo.yml +0 -17
package/package.json CHANGED
@@ -1,48 +1,237 @@
1
1
  {
2
2
  "name": "@smthrs/observability",
3
- "version": "0.35.0",
4
- "description": "Concrete Smithers metrics, logging, tracing, and observability integrations",
5
3
  "type": "module",
6
- "sideEffects": false,
4
+ "version": "1.0.0-rc.12",
5
+ "license": "MIT",
6
+ "smthrs": {
7
+ "group": "engine"
8
+ },
9
+ "description": "Observability for flows: default OTLP export wiring plus Effect-native logger, metric, and OpenTelemetry SDK layers",
10
+ "homepage": "https://github.com/smithersai/smithers",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/smithersai/smithers.git",
14
+ "directory": "packages/smithers/flows/observability"
15
+ },
16
+ "bugs": {
17
+ "url": "https://github.com/smithersai/smithers/issues"
18
+ },
19
+ "tags": [
20
+ "typescript",
21
+ "effect",
22
+ "observability",
23
+ "opentelemetry"
24
+ ],
25
+ "keywords": [
26
+ "typescript",
27
+ "effect",
28
+ "observability",
29
+ "opentelemetry"
30
+ ],
31
+ "engines": {
32
+ "node": ">=26.4.0"
33
+ },
34
+ "sideEffects": [],
7
35
  "exports": {
36
+ "./package.json": "./package.json",
8
37
  ".": {
9
- "types": "./src/index.d.ts",
10
- "import": "./src/index.js",
11
- "default": "./src/index.js"
12
- },
13
- "./metrics": {
14
- "types": "./src/metrics/index.d.ts",
15
- "import": "./src/metrics/index.js",
16
- "default": "./src/metrics/index.js"
17
- },
18
- "./*": {
19
- "types": "./src/index.d.ts",
20
- "import": "./src/*.js",
21
- "default": "./src/*.js"
38
+ "import": {
39
+ "types": "./dist/esm/index.d.ts",
40
+ "default": "./dist/esm/index.js"
41
+ },
42
+ "require": {
43
+ "types": "./dist/cjs/index.d.ts",
44
+ "default": "./dist/cjs/index.js"
45
+ }
46
+ },
47
+ "./BrowserOtel": {
48
+ "import": {
49
+ "types": "./dist/esm/BrowserOtel.d.ts",
50
+ "default": "./dist/esm/BrowserOtel.js"
51
+ },
52
+ "require": {
53
+ "types": "./dist/cjs/BrowserOtel.d.ts",
54
+ "default": "./dist/cjs/BrowserOtel.js"
55
+ }
56
+ },
57
+ "./Endpoint": {
58
+ "import": {
59
+ "types": "./dist/esm/Endpoint.d.ts",
60
+ "default": "./dist/esm/Endpoint.js"
61
+ },
62
+ "require": {
63
+ "types": "./dist/cjs/Endpoint.d.ts",
64
+ "default": "./dist/cjs/Endpoint.js"
65
+ }
66
+ },
67
+ "./JournalLogger": {
68
+ "import": {
69
+ "types": "./dist/esm/JournalLogger.d.ts",
70
+ "default": "./dist/esm/JournalLogger.js"
71
+ },
72
+ "require": {
73
+ "types": "./dist/cjs/JournalLogger.d.ts",
74
+ "default": "./dist/cjs/JournalLogger.js"
75
+ }
76
+ },
77
+ "./Logger": {
78
+ "import": {
79
+ "types": "./dist/esm/Logger.d.ts",
80
+ "default": "./dist/esm/Logger.js"
81
+ },
82
+ "require": {
83
+ "types": "./dist/cjs/Logger.d.ts",
84
+ "default": "./dist/cjs/Logger.js"
85
+ }
86
+ },
87
+ "./Metric": {
88
+ "import": {
89
+ "types": "./dist/esm/Metric.d.ts",
90
+ "default": "./dist/esm/Metric.js"
91
+ },
92
+ "require": {
93
+ "types": "./dist/cjs/Metric.d.ts",
94
+ "default": "./dist/cjs/Metric.js"
95
+ }
96
+ },
97
+ "./NodeOtel": {
98
+ "import": {
99
+ "types": "./dist/esm/NodeOtel.d.ts",
100
+ "default": "./dist/esm/NodeOtel.js"
101
+ },
102
+ "require": {
103
+ "types": "./dist/cjs/NodeOtel.d.ts",
104
+ "default": "./dist/cjs/NodeOtel.js"
105
+ }
106
+ },
107
+ "./Otel": {
108
+ "import": {
109
+ "types": "./dist/esm/Otel.d.ts",
110
+ "default": "./dist/esm/Otel.js"
111
+ },
112
+ "require": {
113
+ "types": "./dist/cjs/Otel.d.ts",
114
+ "default": "./dist/cjs/Otel.js"
115
+ }
116
+ },
117
+ "./Otlp": {
118
+ "import": {
119
+ "types": "./dist/esm/Otlp.d.ts",
120
+ "default": "./dist/esm/Otlp.js"
121
+ },
122
+ "require": {
123
+ "types": "./dist/cjs/Otlp.d.ts",
124
+ "default": "./dist/cjs/Otlp.js"
125
+ }
126
+ },
127
+ "./Resource": {
128
+ "import": {
129
+ "types": "./dist/esm/Resource.d.ts",
130
+ "default": "./dist/esm/Resource.js"
131
+ },
132
+ "require": {
133
+ "types": "./dist/cjs/Resource.d.ts",
134
+ "default": "./dist/cjs/Resource.js"
135
+ }
136
+ },
137
+ "./index": {
138
+ "import": {
139
+ "types": "./dist/esm/index.d.ts",
140
+ "default": "./dist/esm/index.js"
141
+ },
142
+ "require": {
143
+ "types": "./dist/cjs/index.d.ts",
144
+ "default": "./dist/cjs/index.js"
145
+ }
22
146
  }
23
147
  },
24
148
  "files": [
25
- "src/",
26
- "docker-compose.otel.yml",
27
- "otel-collector-config.yml",
28
- "prometheus/",
29
- "tempo/",
30
- "loki/",
31
- "grafana/"
149
+ "src/**/*.ts",
150
+ "dist/**/*.js",
151
+ "dist/**/*.js.map",
152
+ "dist/**/*.d.ts",
153
+ "dist/**/*.d.ts.map",
154
+ "dist/**/package.json",
155
+ "LICENSE",
156
+ "README.md",
157
+ "CHANGELOG.md",
158
+ "docs/"
32
159
  ],
160
+ "publishConfig": {
161
+ "access": "public",
162
+ "provenance": true,
163
+ "tag": "next"
164
+ },
33
165
  "dependencies": {
34
- "@effect/opentelemetry": "4.0.0-beta.105",
35
- "@effect/platform-bun": "4.0.0-beta.105",
36
- "@effect/platform-node-shared": "4.0.0-beta.105",
37
- "effect": "4.0.0-beta.105"
166
+ "@opentelemetry/sdk-logs": "0.222.0",
167
+ "@opentelemetry/sdk-metrics": "2.11.0",
168
+ "@smthrs/journal": "1.0.0-rc.12",
169
+ "@effect/opentelemetry": "4.0.4"
38
170
  },
39
171
  "devDependencies": {
40
- "@types/bun": "latest",
41
- "typescript": "~6.0.3"
172
+ "@effect/language-service": "0.87.2",
173
+ "@effect/opentelemetry": "4.0.4",
174
+ "@effect/vitest": "4.0.4",
175
+ "@eslint/js": "9.39.5",
176
+ "@opentelemetry/api": "1.9.1",
177
+ "@opentelemetry/exporter-logs-otlp-http": "0.222.0",
178
+ "@opentelemetry/exporter-metrics-otlp-http": "0.222.0",
179
+ "@opentelemetry/exporter-trace-otlp-http": "0.222.0",
180
+ "@opentelemetry/sdk-trace-base": "2.11.0",
181
+ "@opentelemetry/sdk-trace-node": "2.11.0",
182
+ "@opentelemetry/sdk-trace-web": "2.11.0",
183
+ "@types/node": "26.4.1",
184
+ "@vitest/coverage-v8": "5.0.0",
185
+ "dprint": "0.57.1",
186
+ "effect": "4.0.4",
187
+ "esbuild": "0.28.2",
188
+ "eslint": "9.39.5",
189
+ "eslint-import-resolver-typescript": "4.4.5",
190
+ "eslint-plugin-import": "2.32.0",
191
+ "eslint-plugin-jsdoc": "64.3.4",
192
+ "eslint-plugin-unicorn": "65.0.0",
193
+ "madge": "8.0.0",
194
+ "typescript": "5.9.3",
195
+ "typescript-eslint": "8.69.0",
196
+ "vitest": "5.0.0"
197
+ },
198
+ "peerDependencies": {
199
+ "@opentelemetry/api": ">=1.9.1 <2.0.0",
200
+ "@opentelemetry/exporter-logs-otlp-http": ">=0.222.0 <0.300.0",
201
+ "@opentelemetry/exporter-metrics-otlp-http": ">=0.222.0 <0.300.0",
202
+ "@opentelemetry/exporter-trace-otlp-http": ">=0.222.0 <0.300.0",
203
+ "@opentelemetry/sdk-trace-base": ">=2.11.0 <3.0.0",
204
+ "@opentelemetry/sdk-trace-node": ">=2.11.0 <3.0.0",
205
+ "@opentelemetry/sdk-trace-web": ">=2.11.0 <3.0.0",
206
+ "effect": "^4.0.4"
207
+ },
208
+ "peerDependenciesMeta": {
209
+ "@opentelemetry/exporter-logs-otlp-http": {
210
+ "optional": true
211
+ },
212
+ "@opentelemetry/exporter-metrics-otlp-http": {
213
+ "optional": true
214
+ },
215
+ "@opentelemetry/exporter-trace-otlp-http": {
216
+ "optional": true
217
+ },
218
+ "@opentelemetry/sdk-trace-base": {
219
+ "optional": true
220
+ },
221
+ "@opentelemetry/sdk-trace-node": {
222
+ "optional": true
223
+ },
224
+ "@opentelemetry/sdk-trace-web": {
225
+ "optional": true
226
+ }
42
227
  },
43
228
  "scripts": {
44
- "build": "rm -f src/index.d.ts src/metrics/index.d.ts src/*-*.d.ts && tsup --dts-only",
45
- "test": "bun test tests",
46
- "typecheck": "tsc -p tsconfig.json --noEmit"
229
+ "lint": "eslint src --max-warnings=0 && dprint check",
230
+ "format": "dprint fmt",
231
+ "build": "node scripts/build.mjs",
232
+ "check": "tsc -b tsconfig.json && tsc -p tsconfig.test.json --noEmit",
233
+ "circular": "node scripts/circular.mjs",
234
+ "test": "vitest",
235
+ "coverage": "vitest --coverage"
47
236
  }
48
237
  }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Browser OpenTelemetry setup with explicitly injected providers/readers.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+
7
+ import * as WebSdk from "@effect/opentelemetry/WebSdk"
8
+ import type { LogRecordProcessor } from "@opentelemetry/sdk-logs"
9
+ import type { MetricReader } from "@opentelemetry/sdk-metrics"
10
+ import type { SpanProcessor } from "@opentelemetry/sdk-trace-base"
11
+ import * as Effect from "effect/Effect"
12
+ import * as Layer from "effect/Layer"
13
+ import * as Resource from "./Resource.ts"
14
+ import type { Configuration as ResourceConfiguration } from "./Resource.ts"
15
+
16
+ /**
17
+ * Browser OTEL layer options. Processors and readers are created by the
18
+ * caller's factories, which keeps this module free of Node imports and browser
19
+ * exporter policy. Every factory is owned: it runs once during layer
20
+ * acquisition, after resource validation, and the layer scope shuts down
21
+ * everything it returned. An empty array installs nothing for that signal.
22
+ *
23
+ * @category models
24
+ * @since 0.1.0
25
+ */
26
+ export interface Options {
27
+ readonly resource: ResourceConfiguration
28
+ readonly spanProcessor?: (() => SpanProcessor | ReadonlyArray<SpanProcessor>) | undefined
29
+ readonly logRecordProcessor?: (() => LogRecordProcessor | ReadonlyArray<LogRecordProcessor>) | undefined
30
+ readonly metricReader?: (() => MetricReader | ReadonlyArray<MetricReader>) | undefined
31
+ readonly loggerMergeWithExisting?: boolean | undefined
32
+ }
33
+
34
+ /**
35
+ * Builds a scoped browser OpenTelemetry layer. The web SDK owns every
36
+ * processor and reader the factories return and shuts them down on release.
37
+ *
38
+ * @category layers
39
+ * @since 0.1.0
40
+ */
41
+ export const layerOtel = (options: Options): Layer.Layer<never, Resource.InvalidResourceConfiguration> =>
42
+ Layer.unwrap(
43
+ Effect.map(Resource.decode(options.resource), (decoded) =>
44
+ WebSdk.layer(() => ({
45
+ resource: Resource.toOpenTelemetryConfiguration(decoded),
46
+ spanProcessor: options.spanProcessor?.(),
47
+ logRecordProcessor: options.logRecordProcessor?.(),
48
+ metricReader: options.metricReader?.(),
49
+ loggerMergeWithExisting: options.loggerMergeWithExisting
50
+ })))
51
+ )
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Validated collector endpoints for the OTLP exporters.
3
+ *
4
+ * The endpoint is the field an operator most often gets wrong, and a wrong one
5
+ * is invisible: Effect's exporter absorbs export failure by design, so a layer
6
+ * built against `""` or `"localhost:4318"` looks identical to a working one and
7
+ * simply never delivers. Every builder therefore decodes its endpoint during
8
+ * layer acquisition, the same posture `Resource` already takes.
9
+ *
10
+ * @since 1.0.0-rc.0
11
+ */
12
+
13
+ import * as Effect from "effect/Effect"
14
+ import * as Schema from "effect/Schema"
15
+
16
+ /**
17
+ * Largest collector endpoint accepted by a builder.
18
+ *
19
+ * @category constants
20
+ * @since 1.0.0-rc.0
21
+ */
22
+ export const maximumEndpointLength = 2_048
23
+
24
+ /** The largest code unit the WHATWG URL parser repairs away: the space. */
25
+ const largestRepairedCodeUnit = 0x20
26
+
27
+ /**
28
+ * Reports whether the URL parser would repair the value rather than parse it
29
+ * as written. It strips leading and trailing C0 controls and spaces and
30
+ * removes tab, newline, and carriage return from anywhere in its input, and
31
+ * every one of those sits at or below {@link largestRepairedCodeUnit}.
32
+ */
33
+ const repairedByUrlParser = (value: string): boolean => {
34
+ for (let index = 0; index < value.length; index++) {
35
+ if (value.charCodeAt(index) <= largestRepairedCodeUnit) return true
36
+ }
37
+ return false
38
+ }
39
+
40
+ const isAbsoluteHttpUrl = (value: string): boolean => {
41
+ // `new URL` alone is not a validator here. It strips padding and inline
42
+ // control characters before parsing, so it reports a copy-pasted
43
+ // `"http://collector:4318\n"` as well formed while the untrimmed original is
44
+ // what a builder would hand its exporter: either an unusable URL or a
45
+ // request to a host nobody typed. No legal collector endpoint carries one of
46
+ // these, so refusing them costs nothing and closes the silent case.
47
+ if (repairedByUrlParser(value)) return false
48
+ // Exporters append /v1/<signal> to this base. A query or fragment would
49
+ // swallow that suffix instead of changing the request path. Also refuse
50
+ // missing authority separators and backslashes that WHATWG silently repairs.
51
+ if (!/^https?:\/\/[^/]/i.test(value) || /[?#\\]/.test(value)) return false
52
+ let url: URL
53
+ try {
54
+ url = new URL(value)
55
+ } catch {
56
+ return false
57
+ }
58
+ return url.username === "" && url.password === ""
59
+ }
60
+
61
+ /**
62
+ * Runtime schema for an absolute `http:` or `https:` collector endpoint that
63
+ * carries no credentials, query, fragment, backslashes, spaces, or controls.
64
+ * A base path is allowed; authentication belongs in exporter headers.
65
+ *
66
+ * @category schemas
67
+ * @since 1.0.0-rc.0
68
+ */
69
+ export const Endpoint = Schema.String.check(
70
+ Schema.isMaxLength(maximumEndpointLength),
71
+ Schema.makeFilter((value: string) => isAbsoluteHttpUrl(value), { title: "absoluteCollectorEndpoint" })
72
+ )
73
+
74
+ /**
75
+ * Stable exporter-endpoint refusal shared by every OTLP builder.
76
+ *
77
+ * @category errors
78
+ * @since 1.0.0-rc.0
79
+ */
80
+ export class InvalidExporterEndpoint extends Schema.TaggedError<InvalidExporterEndpoint>()(
81
+ "@smthrs/observability/InvalidExporterEndpoint",
82
+ {
83
+ code: Schema.Literal("invalid_exporter_endpoint"),
84
+ path: Schema.String,
85
+ message: Schema.String
86
+ }
87
+ ) {}
88
+
89
+ /**
90
+ * Removes the repeated trailing separators that would otherwise produce a
91
+ * double slash in a signal URL.
92
+ *
93
+ * @category conversions
94
+ * @since 1.0.0-rc.0
95
+ */
96
+ export const normalize = (endpoint: string): string => endpoint.replace(/\/+$/, "")
97
+
98
+ /**
99
+ * Decodes one collector endpoint into its normalized form without retaining
100
+ * the rejected value.
101
+ *
102
+ * `path` names the option the endpoint arrived on, so the refusal points at the
103
+ * caller's own field rather than at a shared internal name.
104
+ *
105
+ * @category decoding
106
+ * @since 1.0.0-rc.0
107
+ */
108
+ export const decode = (
109
+ endpoint: unknown,
110
+ path: string
111
+ ): Effect.Effect<string, InvalidExporterEndpoint> =>
112
+ Schema.decodeUnknownEffect(Endpoint)(endpoint).pipe(
113
+ Effect.map(normalize),
114
+ Effect.mapError(() =>
115
+ new InvalidExporterEndpoint({
116
+ code: "invalid_exporter_endpoint",
117
+ path,
118
+ message:
119
+ `OTLP collector ${path} must be an absolute http:// or https:// base URL without credentials, query, fragment, backslashes, spaces, or control characters`
120
+ })
121
+ )
122
+ )
123
+
124
+ /**
125
+ * Builds the OTLP/HTTP URL one signal is posted to below a decoded endpoint.
126
+ *
127
+ * @category conversions
128
+ * @since 1.0.0-rc.0
129
+ */
130
+ export const signalUrl = (endpoint: string, signal: "traces" | "metrics" | "logs"): string =>
131
+ `${normalize(endpoint)}/v1/${signal}`