@blyp/core 0.1.2 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -3
- package/dist/astro.js +4602 -0
- package/dist/astro.js.map +1 -0
- package/dist/astro.mjs +4574 -0
- package/dist/astro.mjs.map +1 -0
- package/dist/client.js +7 -0
- package/dist/client.js.map +1 -1
- package/dist/client.mjs +7 -0
- package/dist/client.mjs.map +1 -1
- package/dist/connectors/betterstack.js +24 -0
- package/dist/connectors/betterstack.js.map +1 -1
- package/dist/connectors/betterstack.mjs +24 -0
- package/dist/connectors/betterstack.mjs.map +1 -1
- package/dist/connectors/databuddy/index.d.ts +7 -0
- package/dist/connectors/databuddy/sender.d.ts +5 -0
- package/dist/connectors/databuddy.js +1456 -0
- package/dist/connectors/databuddy.js.map +1 -0
- package/dist/connectors/databuddy.mjs +1451 -0
- package/dist/connectors/databuddy.mjs.map +1 -0
- package/dist/connectors/otlp.js +24 -0
- package/dist/connectors/otlp.js.map +1 -1
- package/dist/connectors/otlp.mjs +24 -0
- package/dist/connectors/otlp.mjs.map +1 -1
- package/dist/connectors/posthog.js +24 -0
- package/dist/connectors/posthog.js.map +1 -1
- package/dist/connectors/posthog.mjs +24 -0
- package/dist/connectors/posthog.mjs.map +1 -1
- package/dist/connectors/sentry.js +24 -0
- package/dist/connectors/sentry.js.map +1 -1
- package/dist/connectors/sentry.mjs +24 -0
- package/dist/connectors/sentry.mjs.map +1 -1
- package/dist/core/config.d.ts +1 -1
- package/dist/core/logger.d.ts +3 -0
- package/dist/elysia.js +455 -30
- package/dist/elysia.js.map +1 -1
- package/dist/elysia.mjs +455 -30
- package/dist/elysia.mjs.map +1 -1
- package/dist/expo.js +7 -0
- package/dist/expo.js.map +1 -1
- package/dist/expo.mjs +7 -0
- package/dist/expo.mjs.map +1 -1
- package/dist/express.js +455 -30
- package/dist/express.js.map +1 -1
- package/dist/express.mjs +455 -30
- package/dist/express.mjs.map +1 -1
- package/dist/fastify.js +455 -30
- package/dist/fastify.js.map +1 -1
- package/dist/fastify.mjs +455 -30
- package/dist/fastify.mjs.map +1 -1
- package/dist/frameworks/astro/index.d.ts +2 -0
- package/dist/frameworks/astro/logger.d.ts +3 -0
- package/dist/frameworks/nitro/index.d.ts +2 -0
- package/dist/frameworks/nitro/logger.d.ts +6 -0
- package/dist/frameworks/nuxt/index.d.ts +2 -0
- package/dist/frameworks/nuxt/logger.d.ts +3 -0
- package/dist/frameworks/react-router/index.d.ts +2 -0
- package/dist/frameworks/react-router/logger.d.ts +3 -0
- package/dist/frameworks/shared/h3.d.ts +19 -0
- package/dist/hono.js +455 -30
- package/dist/hono.js.map +1 -1
- package/dist/hono.mjs +455 -30
- package/dist/hono.mjs.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +1142 -78
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1135 -79
- package/dist/index.mjs.map +1 -1
- package/dist/nestjs.js +455 -30
- package/dist/nestjs.js.map +1 -1
- package/dist/nestjs.mjs +455 -30
- package/dist/nestjs.mjs.map +1 -1
- package/dist/nextjs.js +455 -30
- package/dist/nextjs.js.map +1 -1
- package/dist/nextjs.mjs +455 -30
- package/dist/nextjs.mjs.map +1 -1
- package/dist/nitro.js +4726 -0
- package/dist/nitro.js.map +1 -0
- package/dist/nitro.mjs +4698 -0
- package/dist/nitro.mjs.map +1 -0
- package/dist/nuxt.js +4733 -0
- package/dist/nuxt.js.map +1 -0
- package/dist/nuxt.mjs +4705 -0
- package/dist/nuxt.mjs.map +1 -0
- package/dist/react-router.js +4644 -0
- package/dist/react-router.js.map +1 -0
- package/dist/react-router.mjs +4616 -0
- package/dist/react-router.mjs.map +1 -0
- package/dist/standalone.js +423 -53
- package/dist/standalone.js.map +1 -1
- package/dist/standalone.mjs +423 -53
- package/dist/standalone.mjs.map +1 -1
- package/dist/sveltekit.js +455 -30
- package/dist/sveltekit.js.map +1 -1
- package/dist/sveltekit.mjs +455 -30
- package/dist/sveltekit.mjs.map +1 -1
- package/dist/tanstack-start.js +455 -30
- package/dist/tanstack-start.js.map +1 -1
- package/dist/tanstack-start.mjs +455 -30
- package/dist/tanstack-start.mjs.map +1 -1
- package/dist/types/connectors/databuddy.d.ts +52 -0
- package/dist/types/core/config.d.ts +32 -0
- package/dist/types/core/logger.d.ts +2 -0
- package/dist/types/frameworks/astro.d.ts +32 -0
- package/dist/types/frameworks/nitro.d.ts +62 -0
- package/dist/types/frameworks/nuxt.d.ts +12 -0
- package/dist/types/frameworks/react-router.d.ts +33 -0
- package/dist/types/frameworks/shared.d.ts +24 -0
- package/dist/types/shared/client-log.d.ts +1 -1
- package/exports/connectors/databuddy.js +1 -0
- package/exports/connectors/databuddy.mjs +1 -0
- package/exports/frameworks/astro.js +1 -0
- package/exports/frameworks/astro.mjs +1 -0
- package/exports/frameworks/nitro.js +1 -0
- package/exports/frameworks/nitro.mjs +1 -0
- package/exports/frameworks/nuxt.js +1 -0
- package/exports/frameworks/nuxt.mjs +1 -0
- package/exports/frameworks/react-router.js +1 -0
- package/exports/frameworks/react-router.mjs +1 -0
- package/package.json +59 -2
- package/types/connectors/databuddy.d.ts +1 -0
- package/types/frameworks/astro.d.ts +1 -0
- package/types/frameworks/nitro.d.ts +1 -0
- package/types/frameworks/nuxt.d.ts +1 -0
- package/types/frameworks/react-router.d.ts +1 -0
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ var fflate = require('fflate');
|
|
|
10
10
|
var crypto = require('crypto');
|
|
11
11
|
var Sentry = require('@sentry/node');
|
|
12
12
|
var node = require('@logtail/node');
|
|
13
|
+
var node$1 = require('@databuddy/sdk/node');
|
|
13
14
|
var apiLogs = require('@opentelemetry/api-logs');
|
|
14
15
|
var exporterLogsOtlpHttp = require('@opentelemetry/exporter-logs-otlp-http');
|
|
15
16
|
var resources = require('@opentelemetry/resources');
|
|
@@ -225,6 +226,7 @@ var CLIENT_LOG_LEVELS = [
|
|
|
225
226
|
];
|
|
226
227
|
var clientConnectorRequestSchema = zod.z.union([
|
|
227
228
|
zod.z.literal("betterstack"),
|
|
229
|
+
zod.z.literal("databuddy"),
|
|
228
230
|
zod.z.literal("posthog"),
|
|
229
231
|
zod.z.literal("sentry"),
|
|
230
232
|
zod.z.undefined(),
|
|
@@ -265,16 +267,16 @@ function normalizeEndpointPath(path3) {
|
|
|
265
267
|
}
|
|
266
268
|
|
|
267
269
|
// src/shared/once.ts
|
|
268
|
-
function createConsoleOnceLogger(method,
|
|
270
|
+
function createConsoleOnceLogger(method, warnedKeys7 = /* @__PURE__ */ new Set()) {
|
|
269
271
|
return (key, message, error) => {
|
|
270
|
-
if (
|
|
272
|
+
if (warnedKeys7.has(key) || typeof console === "undefined") {
|
|
271
273
|
return;
|
|
272
274
|
}
|
|
273
275
|
const writer = console[method];
|
|
274
276
|
if (typeof writer !== "function") {
|
|
275
277
|
return;
|
|
276
278
|
}
|
|
277
|
-
|
|
279
|
+
warnedKeys7.add(key);
|
|
278
280
|
if (error === void 0) {
|
|
279
281
|
writer.call(console, message);
|
|
280
282
|
return;
|
|
@@ -282,11 +284,11 @@ function createConsoleOnceLogger(method, warnedKeys6 = /* @__PURE__ */ new Set()
|
|
|
282
284
|
writer.call(console, message, error);
|
|
283
285
|
};
|
|
284
286
|
}
|
|
285
|
-
function createWarnOnceLogger(
|
|
286
|
-
return createConsoleOnceLogger("warn",
|
|
287
|
+
function createWarnOnceLogger(warnedKeys7) {
|
|
288
|
+
return createConsoleOnceLogger("warn", warnedKeys7);
|
|
287
289
|
}
|
|
288
|
-
function createErrorOnceLogger(
|
|
289
|
-
return createConsoleOnceLogger("error",
|
|
290
|
+
function createErrorOnceLogger(warnedKeys7) {
|
|
291
|
+
return createConsoleOnceLogger("error", warnedKeys7);
|
|
290
292
|
}
|
|
291
293
|
|
|
292
294
|
// src/core/config.ts
|
|
@@ -652,6 +654,28 @@ function mergePostHogConnectorConfig(base, override) {
|
|
|
652
654
|
}
|
|
653
655
|
};
|
|
654
656
|
}
|
|
657
|
+
function mergeDatabuddyConnectorConfig(base, override) {
|
|
658
|
+
const enabled = override?.enabled ?? base?.enabled ?? false;
|
|
659
|
+
const apiKey = override?.apiKey ?? base?.apiKey;
|
|
660
|
+
const websiteId = override?.websiteId ?? base?.websiteId;
|
|
661
|
+
const ready = enabled && hasNonEmptyString(apiKey) && hasNonEmptyString(websiteId);
|
|
662
|
+
return {
|
|
663
|
+
enabled,
|
|
664
|
+
mode: override?.mode ?? base?.mode ?? "auto",
|
|
665
|
+
apiKey,
|
|
666
|
+
websiteId,
|
|
667
|
+
namespace: override?.namespace ?? base?.namespace,
|
|
668
|
+
source: override?.source ?? base?.source,
|
|
669
|
+
apiUrl: override?.apiUrl ?? base?.apiUrl,
|
|
670
|
+
debug: override?.debug ?? base?.debug ?? false,
|
|
671
|
+
enableBatching: override?.enableBatching ?? base?.enableBatching ?? true,
|
|
672
|
+
batchSize: override?.batchSize ?? base?.batchSize,
|
|
673
|
+
batchTimeout: override?.batchTimeout ?? base?.batchTimeout,
|
|
674
|
+
maxQueueSize: override?.maxQueueSize ?? base?.maxQueueSize,
|
|
675
|
+
ready,
|
|
676
|
+
status: ready ? "enabled" : "missing"
|
|
677
|
+
};
|
|
678
|
+
}
|
|
655
679
|
function mergeBetterStackConnectorConfig(base, override) {
|
|
656
680
|
const sourceToken = override?.sourceToken ?? base?.sourceToken;
|
|
657
681
|
const ingestingHost = override?.ingestingHost ?? base?.ingestingHost;
|
|
@@ -742,6 +766,7 @@ function mergeOTLPConnectorsConfig(base, override) {
|
|
|
742
766
|
function mergeConnectorsConfig(base, override) {
|
|
743
767
|
return {
|
|
744
768
|
betterstack: mergeBetterStackConnectorConfig(base?.betterstack, override?.betterstack),
|
|
769
|
+
databuddy: mergeDatabuddyConnectorConfig(base?.databuddy, override?.databuddy),
|
|
745
770
|
posthog: mergePostHogConnectorConfig(base?.posthog, override?.posthog),
|
|
746
771
|
sentry: mergeSentryConnectorConfig(base?.sentry, override?.sentry),
|
|
747
772
|
otlp: mergeOTLPConnectorsConfig(base?.otlp, override?.otlp)
|
|
@@ -1858,10 +1883,318 @@ function createBetterStackSender(config) {
|
|
|
1858
1883
|
}
|
|
1859
1884
|
};
|
|
1860
1885
|
}
|
|
1861
|
-
var PREVIOUSLY_CAPTURED_ERROR_KEY2 = "__posthog_previously_captured_error";
|
|
1862
1886
|
var warnedKeys3 = /* @__PURE__ */ new Set();
|
|
1887
|
+
var senderCache = /* @__PURE__ */ new Map();
|
|
1863
1888
|
var testHooks2 = {};
|
|
1864
1889
|
var warnOnce4 = createErrorOnceLogger(warnedKeys3);
|
|
1890
|
+
function registerShutdownHooks2(key, shutdown) {
|
|
1891
|
+
const handlers = ["beforeExit", "SIGINT", "SIGTERM"];
|
|
1892
|
+
for (const event of handlers) {
|
|
1893
|
+
process.once(event, () => {
|
|
1894
|
+
void shutdown().catch((error) => {
|
|
1895
|
+
warnOnce4(
|
|
1896
|
+
`${key}:shutdown`,
|
|
1897
|
+
"[Blyp] Failed to flush Databuddy telemetry during shutdown.",
|
|
1898
|
+
error
|
|
1899
|
+
);
|
|
1900
|
+
});
|
|
1901
|
+
});
|
|
1902
|
+
}
|
|
1903
|
+
}
|
|
1904
|
+
function resolveConnectorConfig2(config) {
|
|
1905
|
+
const connector = isBlypConfig(config) ? config.connectors?.databuddy : config;
|
|
1906
|
+
const enabled = connector?.enabled ?? false;
|
|
1907
|
+
const apiKey = connector?.apiKey;
|
|
1908
|
+
const websiteId = connector?.websiteId;
|
|
1909
|
+
const ready = enabled && hasNonEmptyString(apiKey) && hasNonEmptyString(websiteId);
|
|
1910
|
+
return {
|
|
1911
|
+
enabled,
|
|
1912
|
+
mode: connector?.mode ?? "auto",
|
|
1913
|
+
apiKey,
|
|
1914
|
+
websiteId,
|
|
1915
|
+
namespace: connector?.namespace,
|
|
1916
|
+
source: connector?.source,
|
|
1917
|
+
apiUrl: connector?.apiUrl,
|
|
1918
|
+
debug: connector?.debug ?? false,
|
|
1919
|
+
enableBatching: connector?.enableBatching ?? true,
|
|
1920
|
+
batchSize: connector?.batchSize,
|
|
1921
|
+
batchTimeout: connector?.batchTimeout,
|
|
1922
|
+
maxQueueSize: connector?.maxQueueSize,
|
|
1923
|
+
ready,
|
|
1924
|
+
status: ready ? "enabled" : "missing"
|
|
1925
|
+
};
|
|
1926
|
+
}
|
|
1927
|
+
function createDefaultClient2(connector) {
|
|
1928
|
+
return new node$1.Databuddy({
|
|
1929
|
+
apiKey: connector.apiKey ?? "",
|
|
1930
|
+
...connector.websiteId ? { websiteId: connector.websiteId } : {},
|
|
1931
|
+
...connector.namespace ? { namespace: connector.namespace } : {},
|
|
1932
|
+
...connector.source ? { source: connector.source } : {},
|
|
1933
|
+
...connector.apiUrl ? { apiUrl: connector.apiUrl } : {},
|
|
1934
|
+
debug: connector.debug,
|
|
1935
|
+
enableBatching: connector.enableBatching,
|
|
1936
|
+
...connector.batchSize !== void 0 ? { batchSize: connector.batchSize } : {},
|
|
1937
|
+
...connector.batchTimeout !== void 0 ? { batchTimeout: connector.batchTimeout } : {},
|
|
1938
|
+
...connector.maxQueueSize !== void 0 ? { maxQueueSize: connector.maxQueueSize } : {}
|
|
1939
|
+
});
|
|
1940
|
+
}
|
|
1941
|
+
function getDatabuddySenderKey(connector) {
|
|
1942
|
+
return JSON.stringify({
|
|
1943
|
+
enabled: connector.enabled,
|
|
1944
|
+
mode: connector.mode,
|
|
1945
|
+
apiKey: connector.apiKey ?? null,
|
|
1946
|
+
websiteId: connector.websiteId ?? null,
|
|
1947
|
+
namespace: connector.namespace ?? null,
|
|
1948
|
+
source: connector.source ?? null,
|
|
1949
|
+
apiUrl: connector.apiUrl ?? null,
|
|
1950
|
+
debug: connector.debug,
|
|
1951
|
+
enableBatching: connector.enableBatching,
|
|
1952
|
+
batchSize: connector.batchSize ?? null,
|
|
1953
|
+
batchTimeout: connector.batchTimeout ?? null,
|
|
1954
|
+
maxQueueSize: connector.maxQueueSize ?? null
|
|
1955
|
+
});
|
|
1956
|
+
}
|
|
1957
|
+
function getSessionId(record) {
|
|
1958
|
+
const direct = getField(record, "sessionId");
|
|
1959
|
+
if (hasNonEmptyString(direct)) {
|
|
1960
|
+
return direct;
|
|
1961
|
+
}
|
|
1962
|
+
return getClientSessionField(record, "sessionId");
|
|
1963
|
+
}
|
|
1964
|
+
function getAnonymousId(record) {
|
|
1965
|
+
const direct = getField(record, "anonymousId");
|
|
1966
|
+
if (hasNonEmptyString(direct)) {
|
|
1967
|
+
return direct;
|
|
1968
|
+
}
|
|
1969
|
+
const payload = getPrimaryPayload(record);
|
|
1970
|
+
if (isPlainObject(payload.metadata) && hasNonEmptyString(payload.metadata.databuddyAnonymousId)) {
|
|
1971
|
+
return payload.metadata.databuddyAnonymousId;
|
|
1972
|
+
}
|
|
1973
|
+
return void 0;
|
|
1974
|
+
}
|
|
1975
|
+
function getDatabuddyEventName(record) {
|
|
1976
|
+
const recordType = getRecordType(record);
|
|
1977
|
+
if (hasNonEmptyString(recordType)) {
|
|
1978
|
+
return recordType;
|
|
1979
|
+
}
|
|
1980
|
+
return "log";
|
|
1981
|
+
}
|
|
1982
|
+
function buildRecordProperties(record, source) {
|
|
1983
|
+
const properties = {
|
|
1984
|
+
blyp_level: record.level,
|
|
1985
|
+
blyp_source: source,
|
|
1986
|
+
blyp_payload: serializeLogRecord(record),
|
|
1987
|
+
message: typeof record.message === "string" ? record.message : String(record.message)
|
|
1988
|
+
};
|
|
1989
|
+
const caller = typeof record.caller === "string" ? record.caller : void 0;
|
|
1990
|
+
const groupId = getField(record, "groupId");
|
|
1991
|
+
const method = getField(record, "method");
|
|
1992
|
+
const path3 = getField(record, "path");
|
|
1993
|
+
const status = getField(record, "status");
|
|
1994
|
+
const duration = getField(record, "duration");
|
|
1995
|
+
const pagePath = getClientPageField(record, "pathname");
|
|
1996
|
+
const pageUrl = getClientPageField(record, "url");
|
|
1997
|
+
const sessionId = getClientSessionField(record, "sessionId");
|
|
1998
|
+
const pageId = getClientSessionField(record, "pageId");
|
|
1999
|
+
const ifTruthy = [
|
|
2000
|
+
["blyp_type", getRecordType(record)],
|
|
2001
|
+
["caller", caller],
|
|
2002
|
+
["group_id", groupId],
|
|
2003
|
+
["method", method],
|
|
2004
|
+
["path", path3],
|
|
2005
|
+
["page_path", pagePath],
|
|
2006
|
+
["page_url", pageUrl],
|
|
2007
|
+
["session_id", sessionId],
|
|
2008
|
+
["page_id", pageId]
|
|
2009
|
+
];
|
|
2010
|
+
const ifDefined = [
|
|
2011
|
+
["status_code", status],
|
|
2012
|
+
["duration_ms", duration]
|
|
2013
|
+
];
|
|
2014
|
+
for (const [key, value] of ifTruthy) {
|
|
2015
|
+
if (value) {
|
|
2016
|
+
properties[key] = value;
|
|
2017
|
+
}
|
|
2018
|
+
}
|
|
2019
|
+
for (const [key, value] of ifDefined) {
|
|
2020
|
+
if (value !== void 0) {
|
|
2021
|
+
properties[key] = value;
|
|
2022
|
+
}
|
|
2023
|
+
}
|
|
2024
|
+
return properties;
|
|
2025
|
+
}
|
|
2026
|
+
function createTrackEvent(record, source) {
|
|
2027
|
+
return {
|
|
2028
|
+
name: getDatabuddyEventName(record),
|
|
2029
|
+
anonymousId: getAnonymousId(record),
|
|
2030
|
+
sessionId: getSessionId(record),
|
|
2031
|
+
properties: buildRecordProperties(record, source)
|
|
2032
|
+
};
|
|
2033
|
+
}
|
|
2034
|
+
function normalizeExceptionProperties(value) {
|
|
2035
|
+
if (!isPlainObject(value)) {
|
|
2036
|
+
return {};
|
|
2037
|
+
}
|
|
2038
|
+
return normalizeLogValue(value);
|
|
2039
|
+
}
|
|
2040
|
+
function normalizeExceptionInput2(value, fallbackMessage) {
|
|
2041
|
+
if (value instanceof Error) {
|
|
2042
|
+
return {
|
|
2043
|
+
message: value.message || fallbackMessage,
|
|
2044
|
+
properties: {
|
|
2045
|
+
error_type: value.name,
|
|
2046
|
+
...value.stack ? { stack: value.stack } : {},
|
|
2047
|
+
...normalizeExceptionProperties(value)
|
|
2048
|
+
}
|
|
2049
|
+
};
|
|
2050
|
+
}
|
|
2051
|
+
if (isPlainObject(value)) {
|
|
2052
|
+
const message = hasNonEmptyString(value.message) ? value.message : hasNonEmptyString(value.error) ? value.error : fallbackMessage;
|
|
2053
|
+
return {
|
|
2054
|
+
message,
|
|
2055
|
+
properties: normalizeExceptionProperties(value)
|
|
2056
|
+
};
|
|
2057
|
+
}
|
|
2058
|
+
if (typeof value === "string") {
|
|
2059
|
+
return {
|
|
2060
|
+
message: value,
|
|
2061
|
+
properties: {
|
|
2062
|
+
message: value
|
|
2063
|
+
}
|
|
2064
|
+
};
|
|
2065
|
+
}
|
|
2066
|
+
return {
|
|
2067
|
+
message: fallbackMessage,
|
|
2068
|
+
properties: {
|
|
2069
|
+
value: normalizeLogValue(value)
|
|
2070
|
+
}
|
|
2071
|
+
};
|
|
2072
|
+
}
|
|
2073
|
+
function createDatabuddySender(config) {
|
|
2074
|
+
const connector = resolveConnectorConfig2(config);
|
|
2075
|
+
const senderKey = getDatabuddySenderKey(connector);
|
|
2076
|
+
const cached = senderCache.get(senderKey);
|
|
2077
|
+
if (cached) {
|
|
2078
|
+
return cached;
|
|
2079
|
+
}
|
|
2080
|
+
const key = `${connector.apiUrl ?? "default"}:${connector.mode}:${connector.apiKey ?? "missing"}`;
|
|
2081
|
+
const client = connector.ready ? testHooks2.createClient?.(connector) ?? createDefaultClient2(connector) : void 0;
|
|
2082
|
+
if (client) {
|
|
2083
|
+
registerShutdownHooks2(key, async () => {
|
|
2084
|
+
await client.flush();
|
|
2085
|
+
});
|
|
2086
|
+
}
|
|
2087
|
+
const emitUnavailableWarning = () => {
|
|
2088
|
+
warnOnce4(
|
|
2089
|
+
`databuddy-unavailable:${key}`,
|
|
2090
|
+
"[Blyp] Databuddy connector is not configured. Databuddy requires both apiKey and websiteId. Skipping Databuddy delivery."
|
|
2091
|
+
);
|
|
2092
|
+
};
|
|
2093
|
+
const emitExceptionUnavailableWarning = () => {
|
|
2094
|
+
warnOnce4(
|
|
2095
|
+
`databuddy-exception-unavailable:${key}`,
|
|
2096
|
+
"[Blyp] Databuddy error tracking is not configured. Databuddy requires both apiKey and websiteId. Skipping Databuddy exception capture."
|
|
2097
|
+
);
|
|
2098
|
+
};
|
|
2099
|
+
const sender = {
|
|
2100
|
+
enabled: connector.enabled,
|
|
2101
|
+
ready: connector.ready,
|
|
2102
|
+
mode: connector.mode,
|
|
2103
|
+
status: connector.status,
|
|
2104
|
+
shouldAutoForwardServerLogs() {
|
|
2105
|
+
return connector.ready && connector.mode === "auto";
|
|
2106
|
+
},
|
|
2107
|
+
shouldAutoCaptureExceptions() {
|
|
2108
|
+
return connector.ready && connector.mode === "auto";
|
|
2109
|
+
},
|
|
2110
|
+
send(record, options = {}) {
|
|
2111
|
+
if (!connector.ready || !client) {
|
|
2112
|
+
if (options.warnIfUnavailable) {
|
|
2113
|
+
emitUnavailableWarning();
|
|
2114
|
+
}
|
|
2115
|
+
return;
|
|
2116
|
+
}
|
|
2117
|
+
try {
|
|
2118
|
+
const result = client.track(createTrackEvent(record, options.source ?? "server"));
|
|
2119
|
+
if (result && typeof result.catch === "function") {
|
|
2120
|
+
void result.catch((error) => {
|
|
2121
|
+
warnOnce4(
|
|
2122
|
+
`databuddy-send:${key}`,
|
|
2123
|
+
"[Blyp] Failed to deliver log to Databuddy.",
|
|
2124
|
+
error
|
|
2125
|
+
);
|
|
2126
|
+
});
|
|
2127
|
+
}
|
|
2128
|
+
} catch (error) {
|
|
2129
|
+
warnOnce4(
|
|
2130
|
+
`databuddy-send:${key}`,
|
|
2131
|
+
"[Blyp] Failed to deliver log to Databuddy.",
|
|
2132
|
+
error
|
|
2133
|
+
);
|
|
2134
|
+
}
|
|
2135
|
+
},
|
|
2136
|
+
captureException(error, options = {}) {
|
|
2137
|
+
if (!connector.ready || !client) {
|
|
2138
|
+
if (options.warnIfUnavailable) {
|
|
2139
|
+
emitExceptionUnavailableWarning();
|
|
2140
|
+
}
|
|
2141
|
+
return;
|
|
2142
|
+
}
|
|
2143
|
+
const normalized = normalizeExceptionInput2(
|
|
2144
|
+
error,
|
|
2145
|
+
options.source === "client" ? "Client error" : "Server error"
|
|
2146
|
+
);
|
|
2147
|
+
try {
|
|
2148
|
+
const result = client.track({
|
|
2149
|
+
name: "error",
|
|
2150
|
+
anonymousId: options.anonymousId,
|
|
2151
|
+
sessionId: options.sessionId,
|
|
2152
|
+
properties: {
|
|
2153
|
+
message: normalized.message,
|
|
2154
|
+
blyp_source: options.source ?? "server",
|
|
2155
|
+
blyp_level: "error",
|
|
2156
|
+
...normalized.properties,
|
|
2157
|
+
...options.properties ?? {}
|
|
2158
|
+
}
|
|
2159
|
+
});
|
|
2160
|
+
if (result && typeof result.catch === "function") {
|
|
2161
|
+
void result.catch((captureError) => {
|
|
2162
|
+
warnOnce4(
|
|
2163
|
+
`databuddy-capture:${key}`,
|
|
2164
|
+
"[Blyp] Failed to capture exception in Databuddy.",
|
|
2165
|
+
captureError
|
|
2166
|
+
);
|
|
2167
|
+
});
|
|
2168
|
+
}
|
|
2169
|
+
} catch (captureError) {
|
|
2170
|
+
warnOnce4(
|
|
2171
|
+
`databuddy-capture:${key}`,
|
|
2172
|
+
"[Blyp] Failed to capture exception in Databuddy.",
|
|
2173
|
+
captureError
|
|
2174
|
+
);
|
|
2175
|
+
}
|
|
2176
|
+
},
|
|
2177
|
+
async flush() {
|
|
2178
|
+
try {
|
|
2179
|
+
if (client) {
|
|
2180
|
+
await client.flush();
|
|
2181
|
+
}
|
|
2182
|
+
} catch (error) {
|
|
2183
|
+
warnOnce4(
|
|
2184
|
+
`databuddy-flush:${key}`,
|
|
2185
|
+
"[Blyp] Failed to flush Databuddy telemetry.",
|
|
2186
|
+
error
|
|
2187
|
+
);
|
|
2188
|
+
}
|
|
2189
|
+
}
|
|
2190
|
+
};
|
|
2191
|
+
senderCache.set(senderKey, sender);
|
|
2192
|
+
return sender;
|
|
2193
|
+
}
|
|
2194
|
+
var PREVIOUSLY_CAPTURED_ERROR_KEY2 = "__posthog_previously_captured_error";
|
|
2195
|
+
var warnedKeys4 = /* @__PURE__ */ new Set();
|
|
2196
|
+
var testHooks3 = {};
|
|
2197
|
+
var warnOnce5 = createErrorOnceLogger(warnedKeys4);
|
|
1865
2198
|
function normalizeHost(host) {
|
|
1866
2199
|
const trimmed = (host || "https://us.i.posthog.com").trim();
|
|
1867
2200
|
return trimmed.replace(/\/+$/, "");
|
|
@@ -1902,7 +2235,7 @@ function buildRecordAttributes(record, source) {
|
|
|
1902
2235
|
for (const [k, v] of ifDefined) if (v !== void 0) attributes[k] = v;
|
|
1903
2236
|
return attributes;
|
|
1904
2237
|
}
|
|
1905
|
-
function
|
|
2238
|
+
function normalizeExceptionProperties2(value) {
|
|
1906
2239
|
if (!isPlainObject(value)) {
|
|
1907
2240
|
return {};
|
|
1908
2241
|
}
|
|
@@ -1934,18 +2267,18 @@ function createSyntheticError(message, source) {
|
|
|
1934
2267
|
assignExceptionField(error, "details", source.details);
|
|
1935
2268
|
return error;
|
|
1936
2269
|
}
|
|
1937
|
-
function
|
|
2270
|
+
function normalizeExceptionInput3(input, fallbackMessage = "Unknown error") {
|
|
1938
2271
|
if (input instanceof Error) {
|
|
1939
2272
|
return {
|
|
1940
2273
|
error: input,
|
|
1941
|
-
properties:
|
|
2274
|
+
properties: normalizeExceptionProperties2(input)
|
|
1942
2275
|
};
|
|
1943
2276
|
}
|
|
1944
2277
|
if (isPlainObject(input)) {
|
|
1945
2278
|
const message = hasNonEmptyString(input.message) ? input.message : hasNonEmptyString(input.error) ? input.error : fallbackMessage;
|
|
1946
2279
|
return {
|
|
1947
2280
|
error: createSyntheticError(message, input),
|
|
1948
|
-
properties:
|
|
2281
|
+
properties: normalizeExceptionProperties2(input)
|
|
1949
2282
|
};
|
|
1950
2283
|
}
|
|
1951
2284
|
if (typeof input === "string") {
|
|
@@ -2021,12 +2354,12 @@ function resolveSeverity(level) {
|
|
|
2021
2354
|
return { text: "info", number: apiLogs.SeverityNumber.INFO };
|
|
2022
2355
|
}
|
|
2023
2356
|
}
|
|
2024
|
-
function
|
|
2357
|
+
function registerShutdownHooks3(key, shutdown) {
|
|
2025
2358
|
const handlers = ["beforeExit", "SIGINT", "SIGTERM"];
|
|
2026
2359
|
for (const event of handlers) {
|
|
2027
2360
|
process.once(event, () => {
|
|
2028
2361
|
void shutdown().catch((error) => {
|
|
2029
|
-
|
|
2362
|
+
warnOnce5(
|
|
2030
2363
|
`${key}:shutdown`,
|
|
2031
2364
|
"[Blyp] Failed to flush PostHog telemetry during shutdown.",
|
|
2032
2365
|
error
|
|
@@ -2080,7 +2413,7 @@ function createDefaultExceptionClient(connector) {
|
|
|
2080
2413
|
}
|
|
2081
2414
|
};
|
|
2082
2415
|
}
|
|
2083
|
-
function
|
|
2416
|
+
function resolveConnectorConfig3(config) {
|
|
2084
2417
|
const connector = isBlypConfig(config) ? config.connectors?.posthog : config;
|
|
2085
2418
|
const enabled = connector?.enabled ?? false;
|
|
2086
2419
|
const projectKey = connector?.projectKey;
|
|
@@ -2103,11 +2436,11 @@ function resolveConnectorConfig2(config) {
|
|
|
2103
2436
|
};
|
|
2104
2437
|
}
|
|
2105
2438
|
function createPostHogSender(config) {
|
|
2106
|
-
const connector =
|
|
2439
|
+
const connector = resolveConnectorConfig3(config);
|
|
2107
2440
|
const key = `${connector.serviceName}:${connector.host}:${connector.mode}`;
|
|
2108
2441
|
const ready = connector.enabled === true && hasNonEmptyString(connector.projectKey);
|
|
2109
|
-
const transport = ready ?
|
|
2110
|
-
const exceptionClient = connector.errorTracking.ready ?
|
|
2442
|
+
const transport = ready ? testHooks3.createTransport?.(connector) ?? createDefaultTransport(connector) : void 0;
|
|
2443
|
+
const exceptionClient = connector.errorTracking.ready ? testHooks3.createExceptionClient?.(connector) ?? createDefaultExceptionClient(connector) : void 0;
|
|
2111
2444
|
const shutdown = async () => {
|
|
2112
2445
|
if (transport?.shutdown) {
|
|
2113
2446
|
await transport.shutdown();
|
|
@@ -2119,16 +2452,16 @@ function createPostHogSender(config) {
|
|
|
2119
2452
|
}
|
|
2120
2453
|
};
|
|
2121
2454
|
if (transport || exceptionClient) {
|
|
2122
|
-
|
|
2455
|
+
registerShutdownHooks3(key, shutdown);
|
|
2123
2456
|
}
|
|
2124
2457
|
const emitUnavailableWarning = () => {
|
|
2125
|
-
|
|
2458
|
+
warnOnce5(
|
|
2126
2459
|
`posthog-unavailable:${key}`,
|
|
2127
2460
|
"[Blyp] PostHog connector is not configured. Skipping PostHog delivery."
|
|
2128
2461
|
);
|
|
2129
2462
|
};
|
|
2130
2463
|
const emitExceptionUnavailableWarning = () => {
|
|
2131
|
-
|
|
2464
|
+
warnOnce5(
|
|
2132
2465
|
`posthog-exception-unavailable:${key}`,
|
|
2133
2466
|
"[Blyp] PostHog error tracking is not configured. Skipping PostHog exception capture."
|
|
2134
2467
|
);
|
|
@@ -2166,7 +2499,7 @@ function createPostHogSender(config) {
|
|
|
2166
2499
|
const result = transport.emit(normalized);
|
|
2167
2500
|
if (result && typeof result.catch === "function") {
|
|
2168
2501
|
void result.catch((error) => {
|
|
2169
|
-
|
|
2502
|
+
warnOnce5(
|
|
2170
2503
|
`posthog-emit:${key}`,
|
|
2171
2504
|
"[Blyp] Failed to deliver log to PostHog.",
|
|
2172
2505
|
error
|
|
@@ -2174,7 +2507,7 @@ function createPostHogSender(config) {
|
|
|
2174
2507
|
});
|
|
2175
2508
|
}
|
|
2176
2509
|
} catch (error) {
|
|
2177
|
-
|
|
2510
|
+
warnOnce5(
|
|
2178
2511
|
`posthog-emit:${key}`,
|
|
2179
2512
|
"[Blyp] Failed to deliver log to PostHog.",
|
|
2180
2513
|
error
|
|
@@ -2191,7 +2524,7 @@ function createPostHogSender(config) {
|
|
|
2191
2524
|
if (isPreviouslyCapturedPostHogError(error)) {
|
|
2192
2525
|
return;
|
|
2193
2526
|
}
|
|
2194
|
-
const normalized =
|
|
2527
|
+
const normalized = normalizeExceptionInput3(
|
|
2195
2528
|
error,
|
|
2196
2529
|
options.source === "client" ? "Client error" : "Server error"
|
|
2197
2530
|
);
|
|
@@ -2210,7 +2543,7 @@ function createPostHogSender(config) {
|
|
|
2210
2543
|
markPostHogCapturedError(normalized.error);
|
|
2211
2544
|
if (result && typeof result.catch === "function") {
|
|
2212
2545
|
void result.catch((captureError) => {
|
|
2213
|
-
|
|
2546
|
+
warnOnce5(
|
|
2214
2547
|
`posthog-capture:${key}`,
|
|
2215
2548
|
"[Blyp] Failed to capture exception in PostHog.",
|
|
2216
2549
|
captureError
|
|
@@ -2218,7 +2551,7 @@ function createPostHogSender(config) {
|
|
|
2218
2551
|
});
|
|
2219
2552
|
}
|
|
2220
2553
|
} catch (captureError) {
|
|
2221
|
-
|
|
2554
|
+
warnOnce5(
|
|
2222
2555
|
`posthog-capture:${key}`,
|
|
2223
2556
|
"[Blyp] Failed to capture exception in PostHog.",
|
|
2224
2557
|
captureError
|
|
@@ -2231,7 +2564,7 @@ function createPostHogSender(config) {
|
|
|
2231
2564
|
await transport.flush();
|
|
2232
2565
|
}
|
|
2233
2566
|
} catch (error) {
|
|
2234
|
-
|
|
2567
|
+
warnOnce5(
|
|
2235
2568
|
`posthog-flush:${key}`,
|
|
2236
2569
|
"[Blyp] Failed to flush PostHog telemetry.",
|
|
2237
2570
|
error
|
|
@@ -2246,13 +2579,13 @@ function buildPostHogExceptionProperties(record, source, properties = {}) {
|
|
|
2246
2579
|
...properties
|
|
2247
2580
|
};
|
|
2248
2581
|
}
|
|
2249
|
-
var
|
|
2250
|
-
var
|
|
2251
|
-
var
|
|
2582
|
+
var warnedKeys5 = /* @__PURE__ */ new Set();
|
|
2583
|
+
var testHooks4 = {};
|
|
2584
|
+
var warnOnce6 = createErrorOnceLogger(warnedKeys5);
|
|
2252
2585
|
function getSentryModule2() {
|
|
2253
|
-
return
|
|
2586
|
+
return testHooks4.module ?? Sentry__namespace;
|
|
2254
2587
|
}
|
|
2255
|
-
function
|
|
2588
|
+
function resolveConnectorConfig4(config) {
|
|
2256
2589
|
const connector = isBlypConfig(config) ? config.connectors?.sentry : config;
|
|
2257
2590
|
const enabled = connector?.enabled ?? false;
|
|
2258
2591
|
const dsn = connector?.dsn;
|
|
@@ -2397,7 +2730,7 @@ function hasConfigMismatch(connector, client) {
|
|
|
2397
2730
|
return hasNonEmptyString(connector.dsn) && connector.dsn !== options.dsn || hasNonEmptyString(connector.environment) && connector.environment !== options.environment || hasNonEmptyString(connector.release) && connector.release !== options.release;
|
|
2398
2731
|
}
|
|
2399
2732
|
function createSentrySender(config) {
|
|
2400
|
-
const connector =
|
|
2733
|
+
const connector = resolveConnectorConfig4(config);
|
|
2401
2734
|
const key = `${connector.mode}:${connector.dsn ?? "missing"}`;
|
|
2402
2735
|
const module = getSentryModule2();
|
|
2403
2736
|
let client = connector.enabled ? module.getClient() : void 0;
|
|
@@ -2411,7 +2744,7 @@ function createSentrySender(config) {
|
|
|
2411
2744
|
});
|
|
2412
2745
|
client = module.getClient();
|
|
2413
2746
|
} catch (error) {
|
|
2414
|
-
|
|
2747
|
+
warnOnce6(
|
|
2415
2748
|
`sentry-init:${key}`,
|
|
2416
2749
|
"[Blyp] Failed to initialize Sentry. Skipping Sentry delivery.",
|
|
2417
2750
|
error
|
|
@@ -2419,14 +2752,14 @@ function createSentrySender(config) {
|
|
|
2419
2752
|
}
|
|
2420
2753
|
}
|
|
2421
2754
|
if (client && hasConfigMismatch(connector, client)) {
|
|
2422
|
-
|
|
2755
|
+
warnOnce6(
|
|
2423
2756
|
`sentry-mismatch:${key}`,
|
|
2424
2757
|
"[Blyp] Sentry is already initialized with different options. Reusing the existing Sentry client."
|
|
2425
2758
|
);
|
|
2426
2759
|
}
|
|
2427
2760
|
const ready = connector.enabled && client !== void 0;
|
|
2428
2761
|
const emitUnavailableWarning = () => {
|
|
2429
|
-
|
|
2762
|
+
warnOnce6(
|
|
2430
2763
|
`sentry-unavailable:${key}`,
|
|
2431
2764
|
"[Blyp] Sentry connector is not configured. Skipping Sentry delivery."
|
|
2432
2765
|
);
|
|
@@ -2452,7 +2785,7 @@ function createSentrySender(config) {
|
|
|
2452
2785
|
try {
|
|
2453
2786
|
logMethod(record.message, attributes);
|
|
2454
2787
|
} catch (error) {
|
|
2455
|
-
|
|
2788
|
+
warnOnce6(
|
|
2456
2789
|
`sentry-log:${key}`,
|
|
2457
2790
|
"[Blyp] Failed to deliver log to Sentry.",
|
|
2458
2791
|
error
|
|
@@ -2470,7 +2803,7 @@ function createSentrySender(config) {
|
|
|
2470
2803
|
module.captureException(exception);
|
|
2471
2804
|
});
|
|
2472
2805
|
} catch (error) {
|
|
2473
|
-
|
|
2806
|
+
warnOnce6(
|
|
2474
2807
|
`sentry-exception:${key}`,
|
|
2475
2808
|
"[Blyp] Failed to capture exception in Sentry.",
|
|
2476
2809
|
error
|
|
@@ -2481,7 +2814,7 @@ function createSentrySender(config) {
|
|
|
2481
2814
|
try {
|
|
2482
2815
|
await module.flush(2e3);
|
|
2483
2816
|
} catch (error) {
|
|
2484
|
-
|
|
2817
|
+
warnOnce6(
|
|
2485
2818
|
`sentry-flush:${key}`,
|
|
2486
2819
|
"[Blyp] Failed to flush Sentry logs.",
|
|
2487
2820
|
error
|
|
@@ -2490,9 +2823,9 @@ function createSentrySender(config) {
|
|
|
2490
2823
|
}
|
|
2491
2824
|
};
|
|
2492
2825
|
}
|
|
2493
|
-
var
|
|
2494
|
-
var
|
|
2495
|
-
var
|
|
2826
|
+
var warnedKeys6 = /* @__PURE__ */ new Set();
|
|
2827
|
+
var testHooks5 = {};
|
|
2828
|
+
var warnOnce7 = createErrorOnceLogger(warnedKeys6);
|
|
2496
2829
|
function normalizeOTLPRecord(record, connector, source = "server") {
|
|
2497
2830
|
const severity = resolveSeverity2(record.level);
|
|
2498
2831
|
const body = typeof record.message === "string" ? record.message : String(record.message);
|
|
@@ -2557,14 +2890,14 @@ function resolveSeverity2(level) {
|
|
|
2557
2890
|
return { text: "info", number: apiLogs.SeverityNumber.INFO };
|
|
2558
2891
|
}
|
|
2559
2892
|
}
|
|
2560
|
-
function
|
|
2893
|
+
function registerShutdownHooks4(key, shutdown) {
|
|
2561
2894
|
const handlers = ["beforeExit", "SIGINT", "SIGTERM"];
|
|
2562
2895
|
for (const event of handlers) {
|
|
2563
2896
|
process.once(event, async () => {
|
|
2564
2897
|
try {
|
|
2565
2898
|
await shutdown();
|
|
2566
2899
|
} catch (error) {
|
|
2567
|
-
|
|
2900
|
+
warnOnce7(
|
|
2568
2901
|
`${key}:shutdown`,
|
|
2569
2902
|
"[Blyp] Failed to flush OTLP logs during shutdown.",
|
|
2570
2903
|
error
|
|
@@ -2641,7 +2974,7 @@ function createUnavailableSender(name, connector) {
|
|
|
2641
2974
|
const senderName = name || connector?.name || "otlp";
|
|
2642
2975
|
const key = `${senderName}:${connector?.serviceName ?? "blyp-app"}:${connector?.endpoint ?? "missing"}`;
|
|
2643
2976
|
const emitUnavailableWarning = () => {
|
|
2644
|
-
|
|
2977
|
+
warnOnce7(
|
|
2645
2978
|
`otlp-unavailable:${key}`,
|
|
2646
2979
|
`[Blyp] OTLP target "${senderName}" is not configured or not ready. Skipping OTLP delivery.`
|
|
2647
2980
|
);
|
|
@@ -2672,7 +3005,7 @@ function createSender(connector) {
|
|
|
2672
3005
|
...connector,
|
|
2673
3006
|
headers: resolveTransportHeaders(connector)
|
|
2674
3007
|
};
|
|
2675
|
-
const transport =
|
|
3008
|
+
const transport = testHooks5.createTransport?.(transportConnector) ?? createDefaultTransport2(transportConnector);
|
|
2676
3009
|
return {
|
|
2677
3010
|
name: connector.name,
|
|
2678
3011
|
enabled: connector.enabled,
|
|
@@ -2688,7 +3021,7 @@ function createSender(connector) {
|
|
|
2688
3021
|
const result = transport.emit(normalized);
|
|
2689
3022
|
if (result && typeof result.catch === "function") {
|
|
2690
3023
|
void result.catch((error) => {
|
|
2691
|
-
|
|
3024
|
+
warnOnce7(
|
|
2692
3025
|
`otlp-emit:${key}`,
|
|
2693
3026
|
`[Blyp] Failed to deliver log to OTLP target "${connector.name}".`,
|
|
2694
3027
|
error
|
|
@@ -2696,7 +3029,7 @@ function createSender(connector) {
|
|
|
2696
3029
|
});
|
|
2697
3030
|
}
|
|
2698
3031
|
} catch (error) {
|
|
2699
|
-
|
|
3032
|
+
warnOnce7(
|
|
2700
3033
|
`otlp-emit:${key}`,
|
|
2701
3034
|
`[Blyp] Failed to deliver log to OTLP target "${connector.name}".`,
|
|
2702
3035
|
error
|
|
@@ -2709,7 +3042,7 @@ function createSender(connector) {
|
|
|
2709
3042
|
await transport.flush();
|
|
2710
3043
|
}
|
|
2711
3044
|
} catch (error) {
|
|
2712
|
-
|
|
3045
|
+
warnOnce7(
|
|
2713
3046
|
`otlp-flush:${key}`,
|
|
2714
3047
|
`[Blyp] Failed to flush OTLP logs for target "${connector.name}".`,
|
|
2715
3048
|
error
|
|
@@ -2738,7 +3071,7 @@ function createOTLPRegistry(config) {
|
|
|
2738
3071
|
await Promise.all(Array.from(senders.values()).map((sender) => sender.flush()));
|
|
2739
3072
|
}
|
|
2740
3073
|
};
|
|
2741
|
-
|
|
3074
|
+
registerShutdownHooks4("otlp-registry", () => registry.flush());
|
|
2742
3075
|
return registry;
|
|
2743
3076
|
}
|
|
2744
3077
|
var _RuntimeDetector = class _RuntimeDetector {
|
|
@@ -3136,6 +3469,9 @@ function getPostHogSender(logger3) {
|
|
|
3136
3469
|
function getBetterStackSender(logger3) {
|
|
3137
3470
|
return getLoggerFactory(logger3).betterstack;
|
|
3138
3471
|
}
|
|
3472
|
+
function getDatabuddySender(logger3) {
|
|
3473
|
+
return getLoggerFactory(logger3).databuddy;
|
|
3474
|
+
}
|
|
3139
3475
|
function tryGetPostHogSender(logger3) {
|
|
3140
3476
|
try {
|
|
3141
3477
|
return getPostHogSender(logger3);
|
|
@@ -3150,6 +3486,13 @@ function tryGetBetterStackSender(logger3) {
|
|
|
3150
3486
|
return null;
|
|
3151
3487
|
}
|
|
3152
3488
|
}
|
|
3489
|
+
function tryGetDatabuddySender(logger3) {
|
|
3490
|
+
try {
|
|
3491
|
+
return getDatabuddySender(logger3);
|
|
3492
|
+
} catch {
|
|
3493
|
+
return null;
|
|
3494
|
+
}
|
|
3495
|
+
}
|
|
3153
3496
|
function getSentrySender(logger3) {
|
|
3154
3497
|
return getLoggerFactory(logger3).sentry;
|
|
3155
3498
|
}
|
|
@@ -3209,6 +3552,18 @@ function maybeSendToBetterStack(betterstack, record) {
|
|
|
3209
3552
|
}
|
|
3210
3553
|
betterstack.send(record, { source: "server", warnIfUnavailable: true });
|
|
3211
3554
|
}
|
|
3555
|
+
function maybeSendToDatabuddy(databuddy, record) {
|
|
3556
|
+
if (isClientLogRecord(record)) {
|
|
3557
|
+
return;
|
|
3558
|
+
}
|
|
3559
|
+
if (!databuddy.shouldAutoForwardServerLogs()) {
|
|
3560
|
+
if (databuddy.enabled && !databuddy.ready) {
|
|
3561
|
+
databuddy.send(record, { source: "server", warnIfUnavailable: true });
|
|
3562
|
+
}
|
|
3563
|
+
return;
|
|
3564
|
+
}
|
|
3565
|
+
databuddy.send(record, { source: "server", warnIfUnavailable: true });
|
|
3566
|
+
}
|
|
3212
3567
|
function maybeSendToSentry(sentry, record) {
|
|
3213
3568
|
if (isClientLogRecord(record)) {
|
|
3214
3569
|
return;
|
|
@@ -3229,7 +3584,7 @@ function maybeSendToOTLP(otlp, record) {
|
|
|
3229
3584
|
sender.send(record, { source: "server", warnIfUnavailable: true });
|
|
3230
3585
|
}
|
|
3231
3586
|
}
|
|
3232
|
-
function createLoggerInstance(rootRawLogger, sink, betterstack, posthog, sentry, otlp, bindings = {}, source = "root") {
|
|
3587
|
+
function createLoggerInstance(rootRawLogger, sink, betterstack, databuddy, posthog, sentry, otlp, bindings = {}, source = "root") {
|
|
3233
3588
|
const rawLogger = Object.keys(bindings).length > 0 ? rootRawLogger.child(bindings) : rootRawLogger;
|
|
3234
3589
|
const writeRecord = (level, message, args, writeSource = source) => {
|
|
3235
3590
|
if (writeSource === "root" && shouldDropRootLogWrite()) {
|
|
@@ -3255,6 +3610,7 @@ function createLoggerInstance(rootRawLogger, sink, betterstack, posthog, sentry,
|
|
|
3255
3610
|
);
|
|
3256
3611
|
sink.write(record);
|
|
3257
3612
|
maybeSendToBetterStack(betterstack, record);
|
|
3613
|
+
maybeSendToDatabuddy(databuddy, record);
|
|
3258
3614
|
maybeSendToPostHog(posthog, record);
|
|
3259
3615
|
maybeSendToSentry(sentry, record);
|
|
3260
3616
|
maybeSendToOTLP(otlp, record);
|
|
@@ -3278,6 +3634,7 @@ function createLoggerInstance(rootRawLogger, sink, betterstack, posthog, sentry,
|
|
|
3278
3634
|
sink.write(record);
|
|
3279
3635
|
}
|
|
3280
3636
|
maybeSendToBetterStack(betterstack, record);
|
|
3637
|
+
maybeSendToDatabuddy(databuddy, record);
|
|
3281
3638
|
maybeSendToPostHog(posthog, record);
|
|
3282
3639
|
maybeSendToSentry(sentry, record);
|
|
3283
3640
|
maybeSendToOTLP(otlp, record);
|
|
@@ -3311,8 +3668,26 @@ function createLoggerInstance(rootRawLogger, sink, betterstack, posthog, sentry,
|
|
|
3311
3668
|
}
|
|
3312
3669
|
writeRecord("table", message, data === void 0 ? [] : [data]);
|
|
3313
3670
|
},
|
|
3314
|
-
flush: () =>
|
|
3315
|
-
|
|
3671
|
+
flush: async () => {
|
|
3672
|
+
await sink.flush();
|
|
3673
|
+
await Promise.allSettled([
|
|
3674
|
+
betterstack.flush(),
|
|
3675
|
+
databuddy.flush(),
|
|
3676
|
+
posthog.flush(),
|
|
3677
|
+
sentry.flush(),
|
|
3678
|
+
otlp.flush()
|
|
3679
|
+
]);
|
|
3680
|
+
},
|
|
3681
|
+
shutdown: async () => {
|
|
3682
|
+
await sink.shutdown();
|
|
3683
|
+
await Promise.allSettled([
|
|
3684
|
+
betterstack.flush(),
|
|
3685
|
+
databuddy.flush(),
|
|
3686
|
+
posthog.flush(),
|
|
3687
|
+
sentry.flush(),
|
|
3688
|
+
otlp.flush()
|
|
3689
|
+
]);
|
|
3690
|
+
},
|
|
3316
3691
|
createStructuredLog: (groupId, initial) => {
|
|
3317
3692
|
return createStructuredLogForLogger(logger3, groupId, {
|
|
3318
3693
|
initialFields: initial
|
|
@@ -3324,6 +3699,7 @@ function createLoggerInstance(rootRawLogger, sink, betterstack, posthog, sentry,
|
|
|
3324
3699
|
rootRawLogger,
|
|
3325
3700
|
sink,
|
|
3326
3701
|
betterstack,
|
|
3702
|
+
databuddy,
|
|
3327
3703
|
posthog,
|
|
3328
3704
|
sentry,
|
|
3329
3705
|
otlp,
|
|
@@ -3334,6 +3710,7 @@ function createLoggerInstance(rootRawLogger, sink, betterstack, posthog, sentry,
|
|
|
3334
3710
|
[LOGGER_FACTORY]: {
|
|
3335
3711
|
bindings,
|
|
3336
3712
|
betterstack,
|
|
3713
|
+
databuddy,
|
|
3337
3714
|
posthog,
|
|
3338
3715
|
sentry,
|
|
3339
3716
|
otlp,
|
|
@@ -3343,6 +3720,7 @@ function createLoggerInstance(rootRawLogger, sink, betterstack, posthog, sentry,
|
|
|
3343
3720
|
rootRawLogger,
|
|
3344
3721
|
sink,
|
|
3345
3722
|
betterstack,
|
|
3723
|
+
databuddy,
|
|
3346
3724
|
posthog,
|
|
3347
3725
|
sentry,
|
|
3348
3726
|
otlp,
|
|
@@ -3366,6 +3744,7 @@ function createBaseLogger(config) {
|
|
|
3366
3744
|
const rawLogger = createPinoLogger(resolvedConfig);
|
|
3367
3745
|
const sink = createPrimarySink(resolvedConfig);
|
|
3368
3746
|
const betterstack = createBetterStackSender(resolvedConfig);
|
|
3747
|
+
const databuddy = createDatabuddySender(resolvedConfig);
|
|
3369
3748
|
const posthog = createPostHogSender(resolvedConfig);
|
|
3370
3749
|
const sentry = createSentrySender(resolvedConfig);
|
|
3371
3750
|
const otlp = createOTLPRegistry(resolvedConfig);
|
|
@@ -3373,6 +3752,7 @@ function createBaseLogger(config) {
|
|
|
3373
3752
|
rawLogger,
|
|
3374
3753
|
sink,
|
|
3375
3754
|
betterstack,
|
|
3755
|
+
databuddy,
|
|
3376
3756
|
posthog,
|
|
3377
3757
|
sentry,
|
|
3378
3758
|
otlp
|
|
@@ -3988,11 +4368,28 @@ function createError(input) {
|
|
|
3988
4368
|
}
|
|
3989
4369
|
});
|
|
3990
4370
|
}
|
|
3991
|
-
|
|
3992
|
-
|
|
3993
|
-
|
|
3994
|
-
|
|
3995
|
-
|
|
4371
|
+
const databuddy = tryGetDatabuddySender(input.logger ?? logger);
|
|
4372
|
+
if (databuddy?.shouldAutoCaptureExceptions()) {
|
|
4373
|
+
databuddy.captureException(error, {
|
|
4374
|
+
source: "server",
|
|
4375
|
+
warnIfUnavailable: true,
|
|
4376
|
+
properties: {
|
|
4377
|
+
blyp_type: "application_error",
|
|
4378
|
+
status: error.status,
|
|
4379
|
+
status_code: error.statusCode,
|
|
4380
|
+
...error.code !== void 0 ? { code: error.code } : {},
|
|
4381
|
+
...error.why !== void 0 ? { why: error.why } : {},
|
|
4382
|
+
...error.fix !== void 0 ? { fix: error.fix } : {},
|
|
4383
|
+
...error.link !== void 0 ? { link: error.link } : {},
|
|
4384
|
+
...error.details !== void 0 ? { details: error.details } : {}
|
|
4385
|
+
}
|
|
4386
|
+
});
|
|
4387
|
+
}
|
|
4388
|
+
}
|
|
4389
|
+
return error;
|
|
4390
|
+
}
|
|
4391
|
+
var HTTP_CODES2 = buildHttpCodeRegistry((definition, overrides = {}) => {
|
|
4392
|
+
return createError({
|
|
3996
4393
|
status: definition.status,
|
|
3997
4394
|
message: definition.message,
|
|
3998
4395
|
code: definition.code,
|
|
@@ -4372,8 +4769,132 @@ function createStructuredBetterStackLogger(groupId, initial, config = {}) {
|
|
|
4372
4769
|
});
|
|
4373
4770
|
}
|
|
4374
4771
|
|
|
4375
|
-
// src/connectors/
|
|
4772
|
+
// src/connectors/databuddy/index.ts
|
|
4376
4773
|
function resolveSender2(config = {}) {
|
|
4774
|
+
return createDatabuddySender(resolveConfig({
|
|
4775
|
+
...config.connectors ? { connectors: config.connectors } : {}
|
|
4776
|
+
}));
|
|
4777
|
+
}
|
|
4778
|
+
function createDatabuddyLoggerInstance(sender, bindings = {}) {
|
|
4779
|
+
const writeRecord = (level, message, args) => {
|
|
4780
|
+
sender.send(buildRecord(level, message, args, bindings), {
|
|
4781
|
+
source: "server",
|
|
4782
|
+
warnIfUnavailable: true
|
|
4783
|
+
});
|
|
4784
|
+
};
|
|
4785
|
+
const writeStructured = (payload, message) => {
|
|
4786
|
+
sender.send(
|
|
4787
|
+
buildStructuredRecord(
|
|
4788
|
+
resolveStructuredWriteLevel(payload.level),
|
|
4789
|
+
message,
|
|
4790
|
+
payload,
|
|
4791
|
+
bindings
|
|
4792
|
+
),
|
|
4793
|
+
{
|
|
4794
|
+
source: "server",
|
|
4795
|
+
warnIfUnavailable: true
|
|
4796
|
+
}
|
|
4797
|
+
);
|
|
4798
|
+
};
|
|
4799
|
+
return {
|
|
4800
|
+
debug: (message, ...args) => {
|
|
4801
|
+
writeRecord("debug", message, args);
|
|
4802
|
+
},
|
|
4803
|
+
info: (message, ...args) => {
|
|
4804
|
+
writeRecord("info", message, args);
|
|
4805
|
+
},
|
|
4806
|
+
error: (message, ...args) => {
|
|
4807
|
+
writeRecord("error", message, args);
|
|
4808
|
+
},
|
|
4809
|
+
warn: (message, ...args) => {
|
|
4810
|
+
writeRecord("warn", message, args);
|
|
4811
|
+
},
|
|
4812
|
+
warning: (message, ...args) => {
|
|
4813
|
+
writeRecord("warning", message, args);
|
|
4814
|
+
},
|
|
4815
|
+
success: (message, ...args) => {
|
|
4816
|
+
writeRecord("success", message, args);
|
|
4817
|
+
},
|
|
4818
|
+
critical: (message, ...args) => {
|
|
4819
|
+
writeRecord("critical", message, args);
|
|
4820
|
+
},
|
|
4821
|
+
table: (message, data) => {
|
|
4822
|
+
writeRecord("table", message, data === void 0 ? [] : [data]);
|
|
4823
|
+
},
|
|
4824
|
+
flush: async () => {
|
|
4825
|
+
await sender.flush();
|
|
4826
|
+
},
|
|
4827
|
+
shutdown: async () => {
|
|
4828
|
+
await sender.flush();
|
|
4829
|
+
},
|
|
4830
|
+
createStructuredLog: (groupId, initial) => {
|
|
4831
|
+
return createStructuredLog(groupId, {
|
|
4832
|
+
initialFields: initial,
|
|
4833
|
+
write: writeStructured
|
|
4834
|
+
});
|
|
4835
|
+
},
|
|
4836
|
+
child: (childBindings) => {
|
|
4837
|
+
return createDatabuddyLoggerInstance(sender, {
|
|
4838
|
+
...bindings,
|
|
4839
|
+
...childBindings
|
|
4840
|
+
});
|
|
4841
|
+
}
|
|
4842
|
+
};
|
|
4843
|
+
}
|
|
4844
|
+
function createDatabuddyErrorTrackerInstance(sender, bindings = {}) {
|
|
4845
|
+
return {
|
|
4846
|
+
capture: (error, options = {}) => {
|
|
4847
|
+
sender.captureException(error, {
|
|
4848
|
+
source: "server",
|
|
4849
|
+
warnIfUnavailable: true,
|
|
4850
|
+
properties: {
|
|
4851
|
+
...bindings,
|
|
4852
|
+
...options.properties ?? {},
|
|
4853
|
+
blyp_source: "server",
|
|
4854
|
+
blyp_manual: true
|
|
4855
|
+
}
|
|
4856
|
+
});
|
|
4857
|
+
},
|
|
4858
|
+
child: (childBindings) => {
|
|
4859
|
+
return createDatabuddyErrorTrackerInstance(sender, {
|
|
4860
|
+
...bindings,
|
|
4861
|
+
...childBindings
|
|
4862
|
+
});
|
|
4863
|
+
}
|
|
4864
|
+
};
|
|
4865
|
+
}
|
|
4866
|
+
function createDatabuddyLogger(config = {}) {
|
|
4867
|
+
return createDatabuddyLoggerInstance(resolveSender2(config));
|
|
4868
|
+
}
|
|
4869
|
+
function createStructuredDatabuddyLogger(groupId, initial, config = {}) {
|
|
4870
|
+
const sender = resolveSender2(config);
|
|
4871
|
+
return createStructuredLog(groupId, {
|
|
4872
|
+
initialFields: initial,
|
|
4873
|
+
write: (payload, message) => {
|
|
4874
|
+
sender.send(
|
|
4875
|
+
buildStructuredRecord(
|
|
4876
|
+
resolveStructuredWriteLevel(payload.level),
|
|
4877
|
+
message,
|
|
4878
|
+
payload,
|
|
4879
|
+
{}
|
|
4880
|
+
),
|
|
4881
|
+
{
|
|
4882
|
+
source: "server",
|
|
4883
|
+
warnIfUnavailable: true
|
|
4884
|
+
}
|
|
4885
|
+
);
|
|
4886
|
+
}
|
|
4887
|
+
});
|
|
4888
|
+
}
|
|
4889
|
+
function createDatabuddyErrorTracker(config = {}) {
|
|
4890
|
+
return createDatabuddyErrorTrackerInstance(resolveSender2(config));
|
|
4891
|
+
}
|
|
4892
|
+
function captureDatabuddyException(error, options = {}, config = {}) {
|
|
4893
|
+
createDatabuddyErrorTracker(config).capture(error, options);
|
|
4894
|
+
}
|
|
4895
|
+
|
|
4896
|
+
// src/connectors/posthog/index.ts
|
|
4897
|
+
function resolveSender3(config = {}) {
|
|
4377
4898
|
return createPostHogSender(resolveConfig({
|
|
4378
4899
|
...config.connectors ? { connectors: config.connectors } : {}
|
|
4379
4900
|
}));
|
|
@@ -4466,10 +4987,10 @@ function createPostHogErrorTrackerInstance(sender, bindings = {}) {
|
|
|
4466
4987
|
};
|
|
4467
4988
|
}
|
|
4468
4989
|
function createPosthogLogger(config = {}) {
|
|
4469
|
-
return createPostHogLoggerInstance(
|
|
4990
|
+
return createPostHogLoggerInstance(resolveSender3(config));
|
|
4470
4991
|
}
|
|
4471
4992
|
function createStructuredPosthogLogger(groupId, initial, config = {}) {
|
|
4472
|
-
const sender =
|
|
4993
|
+
const sender = resolveSender3(config);
|
|
4473
4994
|
return createStructuredLog(groupId, {
|
|
4474
4995
|
initialFields: initial,
|
|
4475
4996
|
write: (payload, message) => {
|
|
@@ -4489,14 +5010,14 @@ function createStructuredPosthogLogger(groupId, initial, config = {}) {
|
|
|
4489
5010
|
});
|
|
4490
5011
|
}
|
|
4491
5012
|
function createPosthogErrorTracker(config = {}) {
|
|
4492
|
-
return createPostHogErrorTrackerInstance(
|
|
5013
|
+
return createPostHogErrorTrackerInstance(resolveSender3(config));
|
|
4493
5014
|
}
|
|
4494
5015
|
function capturePosthogException(error, options = {}, config = {}) {
|
|
4495
5016
|
createPosthogErrorTracker(config).capture(error, options);
|
|
4496
5017
|
}
|
|
4497
5018
|
|
|
4498
5019
|
// src/connectors/sentry/index.ts
|
|
4499
|
-
function
|
|
5020
|
+
function resolveSender4(config = {}) {
|
|
4500
5021
|
return createSentrySender(resolveConfig({
|
|
4501
5022
|
...config.connectors ? { connectors: config.connectors } : {}
|
|
4502
5023
|
}));
|
|
@@ -4566,10 +5087,10 @@ function createSentryLoggerInstance(sender, bindings = {}) {
|
|
|
4566
5087
|
};
|
|
4567
5088
|
}
|
|
4568
5089
|
function createSentryLogger(config = {}) {
|
|
4569
|
-
return createSentryLoggerInstance(
|
|
5090
|
+
return createSentryLoggerInstance(resolveSender4(config));
|
|
4570
5091
|
}
|
|
4571
5092
|
function createStructuredSentryLogger(groupId, initial, config = {}) {
|
|
4572
|
-
const sender =
|
|
5093
|
+
const sender = resolveSender4(config);
|
|
4573
5094
|
return createStructuredLog(groupId, {
|
|
4574
5095
|
initialFields: initial,
|
|
4575
5096
|
write: (payload, message) => {
|
|
@@ -4864,6 +5385,7 @@ function resolveServerLogger(config = {}, loggerOverride) {
|
|
|
4864
5385
|
return {
|
|
4865
5386
|
logger: logger3,
|
|
4866
5387
|
betterstack: getBetterStackSender(logger3),
|
|
5388
|
+
databuddy: getDatabuddySender(logger3),
|
|
4867
5389
|
posthog: getPostHogSender(logger3),
|
|
4868
5390
|
sentry: getSentrySender(logger3),
|
|
4869
5391
|
otlp: getOtlpRegistry(logger3),
|
|
@@ -4983,6 +5505,22 @@ function emitHttpErrorLog(logger3, level, request, path3, statusCode, responseTi
|
|
|
4983
5505
|
}
|
|
4984
5506
|
});
|
|
4985
5507
|
}
|
|
5508
|
+
const databuddy = tryGetDatabuddySender(logger3);
|
|
5509
|
+
if (databuddy?.shouldAutoCaptureExceptions()) {
|
|
5510
|
+
databuddy.captureException(captureContext.error ?? error ?? message, {
|
|
5511
|
+
source: "server",
|
|
5512
|
+
warnIfUnavailable: true,
|
|
5513
|
+
properties: {
|
|
5514
|
+
method: request.method,
|
|
5515
|
+
path: path3,
|
|
5516
|
+
status_code: statusCode,
|
|
5517
|
+
...request.url ? { current_url: request.url } : {},
|
|
5518
|
+
...getHeaderValue(request.headers, "user-agent") ? { user_agent: getHeaderValue(request.headers, "user-agent") } : {},
|
|
5519
|
+
...errorLogData.ip ? { ip: errorLogData.ip } : {},
|
|
5520
|
+
payload: errorLogData
|
|
5521
|
+
}
|
|
5522
|
+
});
|
|
5523
|
+
}
|
|
4986
5524
|
return errorLogData;
|
|
4987
5525
|
}
|
|
4988
5526
|
async function parseClientLogPayload(request, body) {
|
|
@@ -5074,6 +5612,34 @@ async function handleClientLogIngestion(options) {
|
|
|
5074
5612
|
});
|
|
5075
5613
|
}
|
|
5076
5614
|
}
|
|
5615
|
+
} else if (payload.connector === "databuddy") {
|
|
5616
|
+
headers["x-blyp-databuddy-status"] = config.databuddy.ready ? "enabled" : "missing";
|
|
5617
|
+
if (config.databuddy.ready) {
|
|
5618
|
+
const forwardedRecord = {
|
|
5619
|
+
timestamp: structuredPayload.receivedAt,
|
|
5620
|
+
level: payload.level,
|
|
5621
|
+
message: `[client] ${payload.message}`,
|
|
5622
|
+
data: structuredPayload
|
|
5623
|
+
};
|
|
5624
|
+
config.databuddy.send(forwardedRecord, {
|
|
5625
|
+
source: "client"
|
|
5626
|
+
});
|
|
5627
|
+
if ((payload.level === "error" || payload.level === "critical") && config.databuddy.shouldAutoCaptureExceptions()) {
|
|
5628
|
+
const clientErrorCandidate = payload.data && typeof payload.data === "object" && !Array.isArray(payload.data) && typeof payload.data.message === "string" ? payload.data : payload.message;
|
|
5629
|
+
config.databuddy.captureException(clientErrorCandidate, {
|
|
5630
|
+
source: "client",
|
|
5631
|
+
warnIfUnavailable: true,
|
|
5632
|
+
sessionId: payload.session.sessionId,
|
|
5633
|
+
properties: {
|
|
5634
|
+
page_url: payload.page.url,
|
|
5635
|
+
page_path: payload.page.pathname,
|
|
5636
|
+
client_runtime: payload.device?.runtime,
|
|
5637
|
+
metadata: payload.metadata,
|
|
5638
|
+
payload: structuredPayload
|
|
5639
|
+
}
|
|
5640
|
+
});
|
|
5641
|
+
}
|
|
5642
|
+
}
|
|
5077
5643
|
} else if (payload.connector === "posthog") {
|
|
5078
5644
|
headers["x-blyp-posthog-status"] = config.posthog.ready ? "enabled" : "missing";
|
|
5079
5645
|
if (config.posthog.ready) {
|
|
@@ -5740,8 +6306,160 @@ function createNextJsLogger(config = {}) {
|
|
|
5740
6306
|
};
|
|
5741
6307
|
}
|
|
5742
6308
|
|
|
6309
|
+
// src/frameworks/react-router/logger.ts
|
|
6310
|
+
var REACT_ROUTER_LOGGER_KEY = /* @__PURE__ */ Symbol.for("blyp.react-router.logger");
|
|
6311
|
+
var REACT_ROUTER_LOGGER_FALLBACK_KEY = "__blypLog";
|
|
6312
|
+
function createContext2(args, response, error) {
|
|
6313
|
+
return {
|
|
6314
|
+
request: args.request,
|
|
6315
|
+
params: args.params,
|
|
6316
|
+
context: args.context,
|
|
6317
|
+
response,
|
|
6318
|
+
error
|
|
6319
|
+
};
|
|
6320
|
+
}
|
|
6321
|
+
function readLoggerValue(context) {
|
|
6322
|
+
if (typeof context.get === "function") {
|
|
6323
|
+
const symbolValue = context.get(REACT_ROUTER_LOGGER_KEY);
|
|
6324
|
+
if (symbolValue) {
|
|
6325
|
+
return symbolValue;
|
|
6326
|
+
}
|
|
6327
|
+
return context.get(REACT_ROUTER_LOGGER_FALLBACK_KEY);
|
|
6328
|
+
}
|
|
6329
|
+
return context[REACT_ROUTER_LOGGER_KEY] ?? context[REACT_ROUTER_LOGGER_FALLBACK_KEY];
|
|
6330
|
+
}
|
|
6331
|
+
function writeLoggerValue(context, logger3) {
|
|
6332
|
+
if (typeof context.set === "function") {
|
|
6333
|
+
context.set(REACT_ROUTER_LOGGER_KEY, logger3);
|
|
6334
|
+
context.set(REACT_ROUTER_LOGGER_FALLBACK_KEY, logger3);
|
|
6335
|
+
return;
|
|
6336
|
+
}
|
|
6337
|
+
context[REACT_ROUTER_LOGGER_KEY] = logger3;
|
|
6338
|
+
context[REACT_ROUTER_LOGGER_FALLBACK_KEY] = logger3;
|
|
6339
|
+
}
|
|
6340
|
+
function resolveThrownStatusCode(error) {
|
|
6341
|
+
const errorLike = toErrorLike(error);
|
|
6342
|
+
return errorLike?.status ?? errorLike?.statusCode ?? 500;
|
|
6343
|
+
}
|
|
6344
|
+
function createReactRouterLogger(config = {}) {
|
|
6345
|
+
const shared = resolveServerLogger(config);
|
|
6346
|
+
const setLogger = (context, logger3) => {
|
|
6347
|
+
writeLoggerValue(context, logger3);
|
|
6348
|
+
};
|
|
6349
|
+
const getLogger = (context) => {
|
|
6350
|
+
const logger3 = readLoggerValue(context);
|
|
6351
|
+
return logger3 && typeof logger3 === "object" ? logger3 : shared.logger;
|
|
6352
|
+
};
|
|
6353
|
+
return {
|
|
6354
|
+
logger: shared.logger,
|
|
6355
|
+
setLogger,
|
|
6356
|
+
getLogger,
|
|
6357
|
+
middleware: async (args, next) => {
|
|
6358
|
+
return runWithRequestContext(async () => {
|
|
6359
|
+
const startTime = performance.now();
|
|
6360
|
+
const path3 = extractPathname(args.request.url);
|
|
6361
|
+
let structuredLogEmitted = false;
|
|
6362
|
+
const scopedLogger = createRequestScopedLogger(shared.logger, {
|
|
6363
|
+
resolveStructuredFields: () => ({
|
|
6364
|
+
method: args.request.method,
|
|
6365
|
+
path: path3,
|
|
6366
|
+
...resolveAdditionalProps(shared, createContext2(args))
|
|
6367
|
+
}),
|
|
6368
|
+
onStructuredEmit: () => {
|
|
6369
|
+
structuredLogEmitted = true;
|
|
6370
|
+
}
|
|
6371
|
+
});
|
|
6372
|
+
setLogger(args.context, scopedLogger);
|
|
6373
|
+
try {
|
|
6374
|
+
const response = await next();
|
|
6375
|
+
if (structuredLogEmitted) {
|
|
6376
|
+
await flushServerLoggerSafely(shared);
|
|
6377
|
+
return response;
|
|
6378
|
+
}
|
|
6379
|
+
const statusCode = response.status;
|
|
6380
|
+
const loggerContext = createContext2(args, response);
|
|
6381
|
+
const responseTime = Math.round(performance.now() - startTime);
|
|
6382
|
+
const requestLike = createRequestLike(
|
|
6383
|
+
args.request.method,
|
|
6384
|
+
args.request.url,
|
|
6385
|
+
args.request.headers
|
|
6386
|
+
);
|
|
6387
|
+
if (isErrorStatus(statusCode)) {
|
|
6388
|
+
if (!shouldSkipErrorLogging(shared, path3)) {
|
|
6389
|
+
emitHttpErrorLog(
|
|
6390
|
+
shared.logger,
|
|
6391
|
+
shared.level,
|
|
6392
|
+
requestLike,
|
|
6393
|
+
path3,
|
|
6394
|
+
statusCode,
|
|
6395
|
+
responseTime,
|
|
6396
|
+
toErrorLike(void 0, statusCode),
|
|
6397
|
+
resolveAdditionalProps(shared, loggerContext)
|
|
6398
|
+
);
|
|
6399
|
+
}
|
|
6400
|
+
} else if (!shouldSkipAutoLogging(shared, loggerContext, path3)) {
|
|
6401
|
+
emitHttpRequestLog(
|
|
6402
|
+
shared.logger,
|
|
6403
|
+
shared.level,
|
|
6404
|
+
requestLike,
|
|
6405
|
+
path3,
|
|
6406
|
+
statusCode,
|
|
6407
|
+
responseTime,
|
|
6408
|
+
resolveAdditionalProps(shared, loggerContext)
|
|
6409
|
+
);
|
|
6410
|
+
}
|
|
6411
|
+
await flushServerLoggerSafely(shared);
|
|
6412
|
+
return response;
|
|
6413
|
+
} catch (error) {
|
|
6414
|
+
if (!structuredLogEmitted && !shouldSkipErrorLogging(shared, path3)) {
|
|
6415
|
+
const statusCode = resolveThrownStatusCode(error);
|
|
6416
|
+
emitHttpErrorLog(
|
|
6417
|
+
shared.logger,
|
|
6418
|
+
shared.level,
|
|
6419
|
+
createRequestLike(args.request.method, args.request.url, args.request.headers),
|
|
6420
|
+
path3,
|
|
6421
|
+
statusCode,
|
|
6422
|
+
Math.round(performance.now() - startTime),
|
|
6423
|
+
toErrorLike(error, statusCode),
|
|
6424
|
+
resolveAdditionalProps(shared, createContext2(args, void 0, error)),
|
|
6425
|
+
{ error }
|
|
6426
|
+
);
|
|
6427
|
+
}
|
|
6428
|
+
await flushServerLoggerSafely(shared);
|
|
6429
|
+
throw error;
|
|
6430
|
+
}
|
|
6431
|
+
});
|
|
6432
|
+
},
|
|
6433
|
+
clientLogHandler: async (request) => {
|
|
6434
|
+
const path3 = extractPathname(request.url);
|
|
6435
|
+
if (path3 !== shared.ingestionPath) {
|
|
6436
|
+
return new Response(
|
|
6437
|
+
JSON.stringify({
|
|
6438
|
+
error: `Mounted route path ${path3} does not match configured client logging path ${shared.ingestionPath}`
|
|
6439
|
+
}),
|
|
6440
|
+
{
|
|
6441
|
+
status: 500,
|
|
6442
|
+
headers: { "content-type": "application/json" }
|
|
6443
|
+
}
|
|
6444
|
+
);
|
|
6445
|
+
}
|
|
6446
|
+
const result = await handleClientLogIngestion({
|
|
6447
|
+
config: shared,
|
|
6448
|
+
ctx: createContext2({ request, context: {} }),
|
|
6449
|
+
request,
|
|
6450
|
+
deliveryPath: path3
|
|
6451
|
+
});
|
|
6452
|
+
await flushServerLoggerSafely(shared);
|
|
6453
|
+
return new Response(null, {
|
|
6454
|
+
status: result.status,
|
|
6455
|
+
headers: result.headers
|
|
6456
|
+
});
|
|
6457
|
+
}
|
|
6458
|
+
};
|
|
6459
|
+
}
|
|
6460
|
+
|
|
5743
6461
|
// src/frameworks/tanstack-start/logger.ts
|
|
5744
|
-
function
|
|
6462
|
+
function createContext3(request, context, response, error) {
|
|
5745
6463
|
return { request, context, response, error };
|
|
5746
6464
|
}
|
|
5747
6465
|
function createTanStackStartLogger(config = {}) {
|
|
@@ -5760,7 +6478,7 @@ function createTanStackStartLogger(config = {}) {
|
|
|
5760
6478
|
resolveStructuredFields: () => ({
|
|
5761
6479
|
method: request.method,
|
|
5762
6480
|
path: path3,
|
|
5763
|
-
...resolveAdditionalProps(shared,
|
|
6481
|
+
...resolveAdditionalProps(shared, createContext3(request, nextContext))
|
|
5764
6482
|
}),
|
|
5765
6483
|
onStructuredEmit: () => {
|
|
5766
6484
|
structuredLogEmitted = true;
|
|
@@ -5774,7 +6492,7 @@ function createTanStackStartLogger(config = {}) {
|
|
|
5774
6492
|
return response;
|
|
5775
6493
|
}
|
|
5776
6494
|
const statusCode = response.status;
|
|
5777
|
-
const loggerContext =
|
|
6495
|
+
const loggerContext = createContext3(request, nextContext, response);
|
|
5778
6496
|
const responseTime = Math.round(performance.now() - startTime);
|
|
5779
6497
|
if (isErrorStatus(statusCode)) {
|
|
5780
6498
|
if (!shouldSkipErrorLogging(shared, path3)) {
|
|
@@ -5812,7 +6530,7 @@ function createTanStackStartLogger(config = {}) {
|
|
|
5812
6530
|
500,
|
|
5813
6531
|
Math.round(performance.now() - startTime),
|
|
5814
6532
|
toErrorLike(error, 500),
|
|
5815
|
-
resolveAdditionalProps(shared,
|
|
6533
|
+
resolveAdditionalProps(shared, createContext3(request, nextContext, void 0, error)),
|
|
5816
6534
|
{
|
|
5817
6535
|
error
|
|
5818
6536
|
}
|
|
@@ -5841,7 +6559,7 @@ function createTanStackStartLogger(config = {}) {
|
|
|
5841
6559
|
}
|
|
5842
6560
|
const result = await handleClientLogIngestion({
|
|
5843
6561
|
config: shared,
|
|
5844
|
-
ctx:
|
|
6562
|
+
ctx: createContext3(request, {}),
|
|
5845
6563
|
request,
|
|
5846
6564
|
deliveryPath: path3
|
|
5847
6565
|
});
|
|
@@ -5856,7 +6574,7 @@ function createTanStackStartLogger(config = {}) {
|
|
|
5856
6574
|
}
|
|
5857
6575
|
|
|
5858
6576
|
// src/frameworks/sveltekit/logger.ts
|
|
5859
|
-
function
|
|
6577
|
+
function createContext4(event, response, error) {
|
|
5860
6578
|
return { event, response, error };
|
|
5861
6579
|
}
|
|
5862
6580
|
function createSvelteKitLogger(config = {}) {
|
|
@@ -5868,7 +6586,7 @@ function createSvelteKitLogger(config = {}) {
|
|
|
5868
6586
|
resolveStructuredFields: () => ({
|
|
5869
6587
|
method: event.request.method,
|
|
5870
6588
|
path: event.url.pathname,
|
|
5871
|
-
...resolveAdditionalProps(shared,
|
|
6589
|
+
...resolveAdditionalProps(shared, createContext4(event))
|
|
5872
6590
|
}),
|
|
5873
6591
|
onStructuredEmit: () => {
|
|
5874
6592
|
structuredLogEmitted = true;
|
|
@@ -5888,7 +6606,7 @@ function createSvelteKitLogger(config = {}) {
|
|
|
5888
6606
|
return response;
|
|
5889
6607
|
}
|
|
5890
6608
|
const statusCode = response.status;
|
|
5891
|
-
const loggerContext =
|
|
6609
|
+
const loggerContext = createContext4(event, response);
|
|
5892
6610
|
const responseTime = Math.round(performance.now() - startTime);
|
|
5893
6611
|
if (isErrorStatus(statusCode)) {
|
|
5894
6612
|
if (!shouldSkipErrorLogging(shared, path3)) {
|
|
@@ -5926,7 +6644,7 @@ function createSvelteKitLogger(config = {}) {
|
|
|
5926
6644
|
500,
|
|
5927
6645
|
Math.round(performance.now() - startTime),
|
|
5928
6646
|
toErrorLike(error, 500),
|
|
5929
|
-
resolveAdditionalProps(shared,
|
|
6647
|
+
resolveAdditionalProps(shared, createContext4(event, void 0, error)),
|
|
5930
6648
|
{
|
|
5931
6649
|
error
|
|
5932
6650
|
}
|
|
@@ -5957,7 +6675,7 @@ function createSvelteKitLogger(config = {}) {
|
|
|
5957
6675
|
}
|
|
5958
6676
|
const result = await handleClientLogIngestion({
|
|
5959
6677
|
config: shared,
|
|
5960
|
-
ctx:
|
|
6678
|
+
ctx: createContext4(event),
|
|
5961
6679
|
request: event.request,
|
|
5962
6680
|
deliveryPath: path3
|
|
5963
6681
|
});
|
|
@@ -5970,6 +6688,344 @@ function createSvelteKitLogger(config = {}) {
|
|
|
5970
6688
|
};
|
|
5971
6689
|
}
|
|
5972
6690
|
|
|
6691
|
+
// src/frameworks/astro/logger.ts
|
|
6692
|
+
function createContext5(context, response, error) {
|
|
6693
|
+
return { context, response, error };
|
|
6694
|
+
}
|
|
6695
|
+
function createAstroLogger(config = {}) {
|
|
6696
|
+
const shared = resolveServerLogger(config);
|
|
6697
|
+
return {
|
|
6698
|
+
logger: shared.logger,
|
|
6699
|
+
onRequest: async (context, next) => {
|
|
6700
|
+
return runWithRequestContext(async () => {
|
|
6701
|
+
let structuredLogEmitted = false;
|
|
6702
|
+
context.locals.blypLog = createRequestScopedLogger(shared.logger, {
|
|
6703
|
+
resolveStructuredFields: () => ({
|
|
6704
|
+
method: context.request.method,
|
|
6705
|
+
path: context.url.pathname,
|
|
6706
|
+
...resolveAdditionalProps(shared, createContext5(context))
|
|
6707
|
+
}),
|
|
6708
|
+
onStructuredEmit: () => {
|
|
6709
|
+
structuredLogEmitted = true;
|
|
6710
|
+
}
|
|
6711
|
+
});
|
|
6712
|
+
const startTime = performance.now();
|
|
6713
|
+
const path3 = context.url.pathname;
|
|
6714
|
+
const requestLike = createRequestLike(
|
|
6715
|
+
context.request.method,
|
|
6716
|
+
context.request.url,
|
|
6717
|
+
context.request.headers
|
|
6718
|
+
);
|
|
6719
|
+
try {
|
|
6720
|
+
const response = await next();
|
|
6721
|
+
if (structuredLogEmitted) {
|
|
6722
|
+
await flushServerLoggerSafely(shared);
|
|
6723
|
+
return response;
|
|
6724
|
+
}
|
|
6725
|
+
const statusCode = response.status;
|
|
6726
|
+
const loggerContext = createContext5(context, response);
|
|
6727
|
+
const responseTime = Math.round(performance.now() - startTime);
|
|
6728
|
+
if (isErrorStatus(statusCode)) {
|
|
6729
|
+
if (!shouldSkipErrorLogging(shared, path3)) {
|
|
6730
|
+
emitHttpErrorLog(
|
|
6731
|
+
shared.logger,
|
|
6732
|
+
shared.level,
|
|
6733
|
+
requestLike,
|
|
6734
|
+
path3,
|
|
6735
|
+
statusCode,
|
|
6736
|
+
responseTime,
|
|
6737
|
+
toErrorLike(void 0, statusCode),
|
|
6738
|
+
resolveAdditionalProps(shared, loggerContext)
|
|
6739
|
+
);
|
|
6740
|
+
}
|
|
6741
|
+
} else if (!shouldSkipAutoLogging(shared, loggerContext, path3)) {
|
|
6742
|
+
emitHttpRequestLog(
|
|
6743
|
+
shared.logger,
|
|
6744
|
+
shared.level,
|
|
6745
|
+
requestLike,
|
|
6746
|
+
path3,
|
|
6747
|
+
statusCode,
|
|
6748
|
+
responseTime,
|
|
6749
|
+
resolveAdditionalProps(shared, loggerContext)
|
|
6750
|
+
);
|
|
6751
|
+
}
|
|
6752
|
+
await flushServerLoggerSafely(shared);
|
|
6753
|
+
return response;
|
|
6754
|
+
} catch (error) {
|
|
6755
|
+
if (!structuredLogEmitted && !shouldSkipErrorLogging(shared, path3)) {
|
|
6756
|
+
emitHttpErrorLog(
|
|
6757
|
+
shared.logger,
|
|
6758
|
+
shared.level,
|
|
6759
|
+
requestLike,
|
|
6760
|
+
path3,
|
|
6761
|
+
500,
|
|
6762
|
+
Math.round(performance.now() - startTime),
|
|
6763
|
+
toErrorLike(error, 500),
|
|
6764
|
+
resolveAdditionalProps(shared, createContext5(context, void 0, error)),
|
|
6765
|
+
{ error }
|
|
6766
|
+
);
|
|
6767
|
+
}
|
|
6768
|
+
await flushServerLoggerSafely(shared);
|
|
6769
|
+
throw error;
|
|
6770
|
+
}
|
|
6771
|
+
});
|
|
6772
|
+
},
|
|
6773
|
+
clientLogHandler: async (context) => {
|
|
6774
|
+
const path3 = context.url.pathname;
|
|
6775
|
+
if (path3 !== shared.ingestionPath) {
|
|
6776
|
+
return new Response(
|
|
6777
|
+
JSON.stringify({
|
|
6778
|
+
error: `Mounted route path ${path3} does not match configured client logging path ${shared.ingestionPath}`
|
|
6779
|
+
}),
|
|
6780
|
+
{
|
|
6781
|
+
status: 500,
|
|
6782
|
+
headers: { "content-type": "application/json" }
|
|
6783
|
+
}
|
|
6784
|
+
);
|
|
6785
|
+
}
|
|
6786
|
+
const result = await handleClientLogIngestion({
|
|
6787
|
+
config: shared,
|
|
6788
|
+
ctx: createContext5(context),
|
|
6789
|
+
request: context.request,
|
|
6790
|
+
deliveryPath: path3
|
|
6791
|
+
});
|
|
6792
|
+
await flushServerLoggerSafely(shared);
|
|
6793
|
+
return new Response(null, {
|
|
6794
|
+
status: result.status,
|
|
6795
|
+
headers: result.headers
|
|
6796
|
+
});
|
|
6797
|
+
}
|
|
6798
|
+
};
|
|
6799
|
+
}
|
|
6800
|
+
|
|
6801
|
+
// src/frameworks/shared/h3.ts
|
|
6802
|
+
var BLYP_NITRO_STATE_KEY = /* @__PURE__ */ Symbol.for("blyp.nitro.state");
|
|
6803
|
+
function getNitroState(event) {
|
|
6804
|
+
return event.context[BLYP_NITRO_STATE_KEY];
|
|
6805
|
+
}
|
|
6806
|
+
function setNitroState(event, state) {
|
|
6807
|
+
event.context[BLYP_NITRO_STATE_KEY] = state;
|
|
6808
|
+
return state;
|
|
6809
|
+
}
|
|
6810
|
+
function getNitroMethod(event) {
|
|
6811
|
+
return event.method ?? event.node?.req?.method ?? event.request?.method ?? "GET";
|
|
6812
|
+
}
|
|
6813
|
+
function getNitroHeaders(event) {
|
|
6814
|
+
return event.headers ?? event.node?.req?.headers ?? event.request?.headers;
|
|
6815
|
+
}
|
|
6816
|
+
function getNitroUrl(event) {
|
|
6817
|
+
if (event.request?.url) {
|
|
6818
|
+
return event.request.url;
|
|
6819
|
+
}
|
|
6820
|
+
const path3 = event.url ?? event.path ?? event.node?.req?.url ?? "/";
|
|
6821
|
+
return buildAbsoluteUrl(path3, getNitroHeaders(event));
|
|
6822
|
+
}
|
|
6823
|
+
function getNitroPath(event) {
|
|
6824
|
+
if (typeof event.path === "string" && event.path.length > 0) {
|
|
6825
|
+
return event.path;
|
|
6826
|
+
}
|
|
6827
|
+
if (event.request?.url) {
|
|
6828
|
+
return new URL(event.request.url).pathname;
|
|
6829
|
+
}
|
|
6830
|
+
const requestUrl = event.url ?? event.node?.req?.url ?? "/";
|
|
6831
|
+
if (requestUrl.startsWith("http://") || requestUrl.startsWith("https://")) {
|
|
6832
|
+
return new URL(requestUrl).pathname;
|
|
6833
|
+
}
|
|
6834
|
+
const queryIndex = requestUrl.indexOf("?");
|
|
6835
|
+
return queryIndex >= 0 ? requestUrl.slice(0, queryIndex) : requestUrl;
|
|
6836
|
+
}
|
|
6837
|
+
function createNitroRequestLike(event) {
|
|
6838
|
+
return createRequestLike(getNitroMethod(event), getNitroUrl(event), getNitroHeaders(event));
|
|
6839
|
+
}
|
|
6840
|
+
function getNitroStatus(event, response, fallbackStatus = 200) {
|
|
6841
|
+
if (response instanceof Response) {
|
|
6842
|
+
return response.status;
|
|
6843
|
+
}
|
|
6844
|
+
if (typeof response?.status === "number") {
|
|
6845
|
+
return response.status;
|
|
6846
|
+
}
|
|
6847
|
+
if (typeof response?.statusCode === "number") {
|
|
6848
|
+
return response.statusCode;
|
|
6849
|
+
}
|
|
6850
|
+
if (typeof event.node?.res?.statusCode === "number" && event.node.res.statusCode > 0) {
|
|
6851
|
+
return event.node.res.statusCode;
|
|
6852
|
+
}
|
|
6853
|
+
return fallbackStatus;
|
|
6854
|
+
}
|
|
6855
|
+
async function readNitroBody(event) {
|
|
6856
|
+
if (event.body !== void 0) {
|
|
6857
|
+
return event.body;
|
|
6858
|
+
}
|
|
6859
|
+
if (event.request) {
|
|
6860
|
+
const contentType = event.request.headers.get("content-type") ?? "";
|
|
6861
|
+
if (contentType.includes("application/json")) {
|
|
6862
|
+
const fallbackRequest = event.request.clone();
|
|
6863
|
+
try {
|
|
6864
|
+
return await event.request.json();
|
|
6865
|
+
} catch {
|
|
6866
|
+
return await fallbackRequest.text();
|
|
6867
|
+
}
|
|
6868
|
+
}
|
|
6869
|
+
return await event.request.text();
|
|
6870
|
+
}
|
|
6871
|
+
if (event.node?.req) {
|
|
6872
|
+
return await readNodeRequestBody(event.node.req);
|
|
6873
|
+
}
|
|
6874
|
+
throw new Error("Unable to parse Nitro request body");
|
|
6875
|
+
}
|
|
6876
|
+
|
|
6877
|
+
// src/frameworks/nitro/logger.ts
|
|
6878
|
+
function createContext6(event, response, error) {
|
|
6879
|
+
return { event, response, error };
|
|
6880
|
+
}
|
|
6881
|
+
function buildFactory(shared) {
|
|
6882
|
+
const getLogger = (event) => event.context.blypLog ?? shared.logger;
|
|
6883
|
+
const logSuccess = async (event, response) => {
|
|
6884
|
+
const state = getNitroState(event);
|
|
6885
|
+
if (!state || state.structuredLogEmitted || state.errorLogged) {
|
|
6886
|
+
return;
|
|
6887
|
+
}
|
|
6888
|
+
const requestLike = createNitroRequestLike(event);
|
|
6889
|
+
const statusCode = getNitroStatus(event, response);
|
|
6890
|
+
const responseTime = Math.round(performance.now() - state.startTime);
|
|
6891
|
+
const loggerContext = createContext6(event, response);
|
|
6892
|
+
if (isErrorStatus(statusCode)) {
|
|
6893
|
+
if (!shouldSkipErrorLogging(shared, state.path)) {
|
|
6894
|
+
emitHttpErrorLog(
|
|
6895
|
+
shared.logger,
|
|
6896
|
+
shared.level,
|
|
6897
|
+
requestLike,
|
|
6898
|
+
state.path,
|
|
6899
|
+
statusCode,
|
|
6900
|
+
responseTime,
|
|
6901
|
+
toErrorLike(void 0, statusCode),
|
|
6902
|
+
resolveAdditionalProps(shared, loggerContext)
|
|
6903
|
+
);
|
|
6904
|
+
}
|
|
6905
|
+
} else if (!shouldSkipAutoLogging(shared, loggerContext, state.path)) {
|
|
6906
|
+
emitHttpRequestLog(
|
|
6907
|
+
shared.logger,
|
|
6908
|
+
shared.level,
|
|
6909
|
+
requestLike,
|
|
6910
|
+
state.path,
|
|
6911
|
+
statusCode,
|
|
6912
|
+
responseTime,
|
|
6913
|
+
resolveAdditionalProps(shared, loggerContext)
|
|
6914
|
+
);
|
|
6915
|
+
}
|
|
6916
|
+
};
|
|
6917
|
+
const logError = async (event, error, response) => {
|
|
6918
|
+
const state = getNitroState(event);
|
|
6919
|
+
if (!state || state.structuredLogEmitted || state.errorLogged || shouldSkipErrorLogging(shared, state.path)) {
|
|
6920
|
+
return;
|
|
6921
|
+
}
|
|
6922
|
+
state.errorLogged = true;
|
|
6923
|
+
emitHttpErrorLog(
|
|
6924
|
+
shared.logger,
|
|
6925
|
+
shared.level,
|
|
6926
|
+
createNitroRequestLike(event),
|
|
6927
|
+
state.path,
|
|
6928
|
+
getNitroStatus(event, response, 500),
|
|
6929
|
+
Math.round(performance.now() - state.startTime),
|
|
6930
|
+
toErrorLike(error, 500),
|
|
6931
|
+
resolveAdditionalProps(shared, createContext6(event, response, error)),
|
|
6932
|
+
{ error }
|
|
6933
|
+
);
|
|
6934
|
+
};
|
|
6935
|
+
return {
|
|
6936
|
+
logger: shared.logger,
|
|
6937
|
+
getLogger,
|
|
6938
|
+
plugin: async (nitroApp) => {
|
|
6939
|
+
await nitroApp.hooks.hook("request", async (eventArg) => {
|
|
6940
|
+
const event = eventArg;
|
|
6941
|
+
enterRequestContext();
|
|
6942
|
+
const path3 = getNitroPath(event);
|
|
6943
|
+
let state = setNitroState(event, {
|
|
6944
|
+
startTime: performance.now(),
|
|
6945
|
+
path: path3,
|
|
6946
|
+
structuredLogEmitted: false
|
|
6947
|
+
});
|
|
6948
|
+
const scopedLogger = createRequestScopedLogger(shared.logger, {
|
|
6949
|
+
resolveStructuredFields: () => ({
|
|
6950
|
+
method: getNitroMethod(event),
|
|
6951
|
+
path: path3,
|
|
6952
|
+
...resolveAdditionalProps(shared, createContext6(event))
|
|
6953
|
+
}),
|
|
6954
|
+
onStructuredEmit: () => {
|
|
6955
|
+
const currentState = getNitroState(event);
|
|
6956
|
+
if (currentState) {
|
|
6957
|
+
currentState.structuredLogEmitted = true;
|
|
6958
|
+
}
|
|
6959
|
+
}
|
|
6960
|
+
});
|
|
6961
|
+
event.context.blypLog = scopedLogger;
|
|
6962
|
+
state.scopedLogger = scopedLogger;
|
|
6963
|
+
});
|
|
6964
|
+
await nitroApp.hooks.hook("beforeResponse", async (eventArg, payload) => {
|
|
6965
|
+
await logSuccess(eventArg, payload);
|
|
6966
|
+
});
|
|
6967
|
+
await nitroApp.hooks.hook("afterResponse", async (eventArg) => {
|
|
6968
|
+
await flushServerLoggerSafely(shared);
|
|
6969
|
+
const state = getNitroState(eventArg);
|
|
6970
|
+
if (state) {
|
|
6971
|
+
state.errorLogged = true;
|
|
6972
|
+
}
|
|
6973
|
+
});
|
|
6974
|
+
await nitroApp.hooks.hook("error", async (errorArg, eventArg) => {
|
|
6975
|
+
if (eventArg && typeof eventArg === "object") {
|
|
6976
|
+
await logError(eventArg, errorArg);
|
|
6977
|
+
await flushServerLoggerSafely(shared);
|
|
6978
|
+
}
|
|
6979
|
+
});
|
|
6980
|
+
},
|
|
6981
|
+
clientLogHandler: async (event) => {
|
|
6982
|
+
const path3 = getNitroPath(event);
|
|
6983
|
+
if (path3 !== shared.ingestionPath) {
|
|
6984
|
+
return new Response(
|
|
6985
|
+
JSON.stringify({
|
|
6986
|
+
error: `Mounted route path ${path3} does not match configured client logging path ${shared.ingestionPath}`
|
|
6987
|
+
}),
|
|
6988
|
+
{
|
|
6989
|
+
status: 500,
|
|
6990
|
+
headers: { "content-type": "application/json" }
|
|
6991
|
+
}
|
|
6992
|
+
);
|
|
6993
|
+
}
|
|
6994
|
+
const body = await readNitroBody(event);
|
|
6995
|
+
const result = await handleClientLogIngestion({
|
|
6996
|
+
config: shared,
|
|
6997
|
+
ctx: createContext6(event),
|
|
6998
|
+
request: {
|
|
6999
|
+
...createNitroRequestLike(event),
|
|
7000
|
+
json: async () => body
|
|
7001
|
+
},
|
|
7002
|
+
body,
|
|
7003
|
+
deliveryPath: path3
|
|
7004
|
+
});
|
|
7005
|
+
await flushServerLoggerSafely(shared);
|
|
7006
|
+
return new Response(null, {
|
|
7007
|
+
status: result.status,
|
|
7008
|
+
headers: result.headers
|
|
7009
|
+
});
|
|
7010
|
+
}
|
|
7011
|
+
};
|
|
7012
|
+
}
|
|
7013
|
+
function createNitroLogger(config = {}) {
|
|
7014
|
+
const shared = resolveServerLogger(config);
|
|
7015
|
+
return buildFactory(shared);
|
|
7016
|
+
}
|
|
7017
|
+
|
|
7018
|
+
// src/frameworks/nuxt/logger.ts
|
|
7019
|
+
function createNuxtLogger(config = {}) {
|
|
7020
|
+
const nitro = buildFactory(resolveServerLogger(config));
|
|
7021
|
+
return {
|
|
7022
|
+
logger: nitro.logger,
|
|
7023
|
+
serverPlugin: nitro.plugin,
|
|
7024
|
+
clientLogHandler: nitro.clientLogHandler,
|
|
7025
|
+
getLogger: (event) => nitro.getLogger(event)
|
|
7026
|
+
};
|
|
7027
|
+
}
|
|
7028
|
+
|
|
5973
7029
|
// src/frameworks/nestjs/constants.ts
|
|
5974
7030
|
var BLYP_NEST_LOGGER = /* @__PURE__ */ Symbol("BLYP_NEST_LOGGER");
|
|
5975
7031
|
var BLYP_NEST_LOGGER_INIT_ERROR = "BlypModule.forRoot() requires createLogger(...) to run before NestFactory.create(AppModule).";
|
|
@@ -6417,7 +7473,7 @@ exports.BlypModule = __decorateClass([
|
|
|
6417
7473
|
], exports.BlypModule);
|
|
6418
7474
|
|
|
6419
7475
|
// src/connectors/otlp/index.ts
|
|
6420
|
-
function
|
|
7476
|
+
function resolveSender5(config = { name: "" }) {
|
|
6421
7477
|
const registry = createOTLPRegistry(resolveConfig({
|
|
6422
7478
|
...config.connectors ? { connectors: config.connectors } : {}
|
|
6423
7479
|
}));
|
|
@@ -6488,10 +7544,10 @@ function createOTLPLoggerInstance(sender, bindings = {}) {
|
|
|
6488
7544
|
};
|
|
6489
7545
|
}
|
|
6490
7546
|
function createOtlpLogger(config = { name: "" }) {
|
|
6491
|
-
return createOTLPLoggerInstance(
|
|
7547
|
+
return createOTLPLoggerInstance(resolveSender5(config));
|
|
6492
7548
|
}
|
|
6493
7549
|
function createStructuredOtlpLogger(groupId, initial, config) {
|
|
6494
|
-
const sender =
|
|
7550
|
+
const sender = resolveSender5(config ?? { name: "" });
|
|
6495
7551
|
return createStructuredLog(groupId, {
|
|
6496
7552
|
initialFields: initial,
|
|
6497
7553
|
write: (payload, message) => {
|
|
@@ -6527,11 +7583,15 @@ exports.DEFAULT_FILE_CONFIG = DEFAULT_FILE_CONFIG;
|
|
|
6527
7583
|
exports.DEFAULT_ROTATION_CONFIG = DEFAULT_ROTATION_CONFIG;
|
|
6528
7584
|
exports.HTTP_CODES = HTTP_CODES2;
|
|
6529
7585
|
exports.captureBetterStackException = captureBetterStackException;
|
|
7586
|
+
exports.captureDatabuddyException = captureDatabuddyException;
|
|
6530
7587
|
exports.capturePosthogException = capturePosthogException;
|
|
6531
7588
|
exports.colors = colors;
|
|
7589
|
+
exports.createAstroLogger = createAstroLogger;
|
|
6532
7590
|
exports.createBaseLogger = createBaseLogger;
|
|
6533
7591
|
exports.createBetterStackErrorTracker = createBetterStackErrorTracker;
|
|
6534
7592
|
exports.createBetterStackLogger = createBetterStackLogger;
|
|
7593
|
+
exports.createDatabuddyErrorTracker = createDatabuddyErrorTracker;
|
|
7594
|
+
exports.createDatabuddyLogger = createDatabuddyLogger;
|
|
6535
7595
|
exports.createDrizzleDatabaseAdapter = createDrizzleDatabaseAdapter;
|
|
6536
7596
|
exports.createElysiaLogger = createElysiaLogger;
|
|
6537
7597
|
exports.createError = createError;
|
|
@@ -6543,14 +7603,18 @@ exports.createLogDir = createLogDir;
|
|
|
6543
7603
|
exports.createLogger = createElysiaLogger;
|
|
6544
7604
|
exports.createNestLogger = createNestLogger;
|
|
6545
7605
|
exports.createNextJsLogger = createNextJsLogger;
|
|
7606
|
+
exports.createNitroLogger = createNitroLogger;
|
|
7607
|
+
exports.createNuxtLogger = createNuxtLogger;
|
|
6546
7608
|
exports.createOtlpLogger = createOtlpLogger;
|
|
6547
7609
|
exports.createPosthogErrorTracker = createPosthogErrorTracker;
|
|
6548
7610
|
exports.createPosthogLogger = createPosthogLogger;
|
|
6549
7611
|
exports.createPrismaDatabaseAdapter = createPrismaDatabaseAdapter;
|
|
7612
|
+
exports.createReactRouterLogger = createReactRouterLogger;
|
|
6550
7613
|
exports.createRuntimeAdapter = createRuntimeAdapter;
|
|
6551
7614
|
exports.createSentryLogger = createSentryLogger;
|
|
6552
7615
|
exports.createStandaloneLogger = createStandaloneLogger;
|
|
6553
7616
|
exports.createStructuredBetterStackLogger = createStructuredBetterStackLogger;
|
|
7617
|
+
exports.createStructuredDatabuddyLogger = createStructuredDatabuddyLogger;
|
|
6554
7618
|
exports.createStructuredLog = createStructuredLog2;
|
|
6555
7619
|
exports.createStructuredOtlpLogger = createStructuredOtlpLogger;
|
|
6556
7620
|
exports.createStructuredPosthogLogger = createStructuredPosthogLogger;
|