@burdenoff/be-sdk 2026.518.3 → 2026.521.2
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/dist/EventQueueFactory-PVXBZCT5.js +6 -0
- package/dist/{EventQueueFactory-6UJ3UIP4.js.map → EventQueueFactory-PVXBZCT5.js.map} +1 -1
- package/dist/auth/index.js +2 -2
- package/dist/cache/index.js +1 -1
- package/dist/{chunk-EZOXXSD4.js → chunk-2BG75H2K.js} +4 -4
- package/dist/{chunk-EZOXXSD4.js.map → chunk-2BG75H2K.js.map} +1 -1
- package/dist/{chunk-UNPJMENC.js → chunk-7NUQXGA7.js} +3 -3
- package/dist/{chunk-UNPJMENC.js.map → chunk-7NUQXGA7.js.map} +1 -1
- package/dist/{chunk-KTPFSXZF.js → chunk-ACYGOENW.js} +2 -2
- package/dist/{chunk-KTPFSXZF.js.map → chunk-ACYGOENW.js.map} +1 -1
- package/dist/{chunk-MOCUBSTW.js → chunk-B7I4TABG.js} +2 -2
- package/dist/{chunk-MOCUBSTW.js.map → chunk-B7I4TABG.js.map} +1 -1
- package/dist/{chunk-O2MEBPDT.js → chunk-BNJFEOGH.js} +2 -2
- package/dist/chunk-BNJFEOGH.js.map +1 -0
- package/dist/{chunk-S5S6OBS6.js → chunk-BRYRHBAC.js} +3 -3
- package/dist/{chunk-S5S6OBS6.js.map → chunk-BRYRHBAC.js.map} +1 -1
- package/dist/{chunk-UBXFIIAW.js → chunk-BTQREMD4.js} +2 -2
- package/dist/{chunk-UBXFIIAW.js.map → chunk-BTQREMD4.js.map} +1 -1
- package/dist/{chunk-3F4SLVRL.js → chunk-DMPS4Y53.js} +3 -3
- package/dist/{chunk-3F4SLVRL.js.map → chunk-DMPS4Y53.js.map} +1 -1
- package/dist/{chunk-SNEOLWXT.js → chunk-E5USZ2MR.js} +2 -2
- package/dist/{chunk-SNEOLWXT.js.map → chunk-E5USZ2MR.js.map} +1 -1
- package/dist/{chunk-TM5RQ6P2.js → chunk-KGCISIBX.js} +22 -4
- package/dist/chunk-KGCISIBX.js.map +1 -0
- package/dist/{chunk-OJDXWHRJ.js → chunk-LD7ETTWG.js} +8 -7
- package/dist/chunk-LD7ETTWG.js.map +1 -0
- package/dist/{chunk-MVHOP4IG.js → chunk-MHNA7IS7.js} +2 -2
- package/dist/{chunk-MVHOP4IG.js.map → chunk-MHNA7IS7.js.map} +1 -1
- package/dist/{chunk-V2VEENJ2.js → chunk-PDSV3TFO.js} +3 -3
- package/dist/chunk-PDSV3TFO.js.map +1 -0
- package/dist/{chunk-5FJZI7VX.js → chunk-PPIDJP2W.js} +3 -3
- package/dist/chunk-PPIDJP2W.js.map +1 -0
- package/dist/{chunk-SO57HNXV.js → chunk-QRWTLPW5.js} +13 -7
- package/dist/chunk-QRWTLPW5.js.map +1 -0
- package/dist/{chunk-VLEOOG2L.js → chunk-SVONGBQR.js} +3 -3
- package/dist/{chunk-VLEOOG2L.js.map → chunk-SVONGBQR.js.map} +1 -1
- package/dist/{chunk-BESBOSX2.js → chunk-TGTJ653K.js} +4 -4
- package/dist/chunk-TGTJ653K.js.map +1 -0
- package/dist/{chunk-WCBKW3CL.js → chunk-X4GSV6NV.js} +5 -5
- package/dist/{chunk-WCBKW3CL.js.map → chunk-X4GSV6NV.js.map} +1 -1
- package/dist/{chunk-RRFNSBDZ.js → chunk-X4NELQLV.js} +3 -3
- package/dist/chunk-X4NELQLV.js.map +1 -0
- package/dist/event-queue/index.js +4 -4
- package/dist/export/index.js +3 -3
- package/dist/gateway/index.js +2 -2
- package/dist/gateway/security/index.js +1 -1
- package/dist/graph/index.d.ts +1 -1
- package/dist/graph/index.js +5 -5
- package/dist/graphql/index.js +2 -2
- package/dist/{index-CygU_fXS.d.ts → index-Cz9_vPi7.d.ts} +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +22 -22
- package/dist/index.js.map +1 -1
- package/dist/init/index.js +3 -3
- package/dist/instrumentation/index.js +1 -1
- package/dist/metrics/index.js.map +1 -1
- package/dist/pino-logger-NVZXQPWO.js +5 -0
- package/dist/{pino-logger-RYLGXPHZ.js.map → pino-logger-NVZXQPWO.js.map} +1 -1
- package/dist/prisma/index.js +4 -4
- package/dist/rbac/index.js +1 -1
- package/dist/{sdk-THO3IWEE.js → sdk-UWFH5PY7.js} +2 -2
- package/dist/{sdk-THO3IWEE.js.map → sdk-UWFH5PY7.js.map} +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/index.js.map +1 -1
- package/dist/telemetry/index.js +5 -5
- package/dist/telemetry/index.js.map +1 -1
- package/dist/tracker/index.js +2 -2
- package/dist/utils/index.js +1 -1
- package/dist/workspace-guard-524GBJQ6.js +5 -0
- package/dist/{workspace-guard-LHBNK4TG.js.map → workspace-guard-524GBJQ6.js.map} +1 -1
- package/package.json +2 -2
- package/dist/EventQueueFactory-6UJ3UIP4.js +0 -6
- package/dist/chunk-5FJZI7VX.js.map +0 -1
- package/dist/chunk-BESBOSX2.js.map +0 -1
- package/dist/chunk-O2MEBPDT.js.map +0 -1
- package/dist/chunk-OJDXWHRJ.js.map +0 -1
- package/dist/chunk-RRFNSBDZ.js.map +0 -1
- package/dist/chunk-SO57HNXV.js.map +0 -1
- package/dist/chunk-TM5RQ6P2.js.map +0 -1
- package/dist/chunk-V2VEENJ2.js.map +0 -1
- package/dist/pino-logger-RYLGXPHZ.js +0 -5
- package/dist/workspace-guard-LHBNK4TG.js +0 -5
package/dist/init/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { getSDKState, initializeBurdenoffSDK, isSDKInitialized, resetSDK } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { getSDKState, initializeBurdenoffSDK, isSDKInitialized, resetSDK } from '../chunk-2BG75H2K.js';
|
|
2
|
+
import '../chunk-DMPS4Y53.js';
|
|
3
|
+
import '../chunk-LD7ETTWG.js';
|
|
4
4
|
import '../chunk-GSEPF2B6.js';
|
|
5
5
|
import '../chunk-HP6JTFNR.js';
|
|
6
6
|
import '../chunk-CBZNP6RF.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Instrument, Log, Metric, STANDARD_METRICS, SpanKind, SpanStatus, Trace, Tracer, createApolloInlineTracePlugin, createGraphQLInstrumentationPlugin, createPrometheusPlugin, extractOperationInfo, extractTraceContext, getGraphQLOperationFromContext, getGraphQLSpanFromContext, getLogger, getTraceContext, getTracer, initializeInstrumentation, initializeTracer, injectTraceContext, instrumentResolver, instrumentResolverMap, instrumented, isApolloInlineTraceAvailable, isInstrumentationInitialized, isPrometheusAvailable, isTracerInitialized, resetInstrumentation, setupInstrumentation, startSpan, traced, withSpan } from '../chunk-
|
|
1
|
+
export { Instrument, Log, Metric, STANDARD_METRICS, SpanKind, SpanStatus, Trace, Tracer, createApolloInlineTracePlugin, createGraphQLInstrumentationPlugin, createPrometheusPlugin, extractOperationInfo, extractTraceContext, getGraphQLOperationFromContext, getGraphQLSpanFromContext, getLogger, getTraceContext, getTracer, initializeInstrumentation, initializeTracer, injectTraceContext, instrumentResolver, instrumentResolverMap, instrumented, isApolloInlineTraceAvailable, isInstrumentationInitialized, isPrometheusAvailable, isTracerInitialized, resetInstrumentation, setupInstrumentation, startSpan, traced, withSpan } from '../chunk-ACYGOENW.js';
|
|
2
2
|
export { DEFAULT_CACHE_CONFIG, DEFAULT_DATABASE_CONFIG, DEFAULT_EVENT_QUEUE_CONFIG, DEFAULT_FEATURE_FLAGS, DEFAULT_GRAPHQL_CONFIG, DEFAULT_HTTP_CONFIG, DEFAULT_LOGGING_CONFIG, DEFAULT_METRICS_CONFIG, DEFAULT_TRACING_CONFIG, ENV_VARS, MetricsRegistry, buildDatabaseConfig, buildFeatureFlags, buildGraphQLConfig, buildInstrumentationConfig, buildMetricsConfig, buildTracingConfig, createCounter, createGauge, createHistogram, createUpDownCounter, getInstrumentationConfig, getMetricsRegistry, initializeInstrumentationConfig, initializeMetricsRegistry, isFeatureEnabled, isInstrumentationConfigInitialized, isMetricsRegistryInitialized, resetInstrumentationConfig, resetMetricsRegistry, updateInstrumentationConfig } from '../chunk-REF7PANB.js';
|
|
3
3
|
export { logger } from '../chunk-CBZNP6RF.js';
|
|
4
4
|
import '../chunk-XE4OXN2W.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/metrics/workspace-quota-metrics.ts"],"names":["WorkspaceQuotaRegistry","collectors","gauges","Map","register","collector","push","collectAll","Promise","allSettled","map","has","metricName","set","getMetricsRegistry","createGauge","help","gauge","get","values","collect","workspaceId","value","workspace_id","quota_name","quotaName","getCollectors","_registry","getWorkspaceQuotaRegistry","resetWorkspaceQuotaRegistry"],"mappings":";;;;AAkCA,IAAMA,sBAAAA,GAAN,MAAMA,uBAAAA,CAAAA;EAlCN;;;AAmCmBC,EAAAA,UAAAA,GAAwC,EAAA;AACxCC,EAAAA,MAAAA,uBAAaC,GAAAA,EAAAA;AAE9BC,EAAAA,QAAAA,CAASC,SAAAA,EAA0C;AACjD,IAAA,IAAA,CAAKJ,UAAAA,CAAWK,KAAKD,SAAAA,CAAAA;AACvB,EAAA;;;;;;AAOA,EAAA,MAAME,UAAAA,GAA4B;AAChC,IAAA,MAAMC,QAAQC,UAAAA,CACZ,IAAA,CAAKR,UAAAA,CAAWS,GAAAA,CAAI,OAAOL,SAAAA,KAAAA;AACzB,MAAA,IAAI,CAAC,IAAA,CAAKH,MAAAA,CAAOS,GAAAA,CAAIN,SAAAA,CAAUO,UAAU,CAAA,EAAG;AAC1C,QAAA,IAAA,CAAKV,MAAAA,CAAOW,GAAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/metrics/workspace-quota-metrics.ts"],"names":["WorkspaceQuotaRegistry","collectors","gauges","Map","register","collector","push","collectAll","Promise","allSettled","map","has","metricName","set","getMetricsRegistry","createGauge","help","gauge","get","values","collect","workspaceId","value","workspace_id","quota_name","quotaName","getCollectors","_registry","getWorkspaceQuotaRegistry","resetWorkspaceQuotaRegistry"],"mappings":";;;;AAkCA,IAAMA,sBAAAA,GAAN,MAAMA,uBAAAA,CAAAA;EAlCN;;;AAmCmBC,EAAAA,UAAAA,GAAwC,EAAA;AACxCC,EAAAA,MAAAA,uBAAaC,GAAAA,EAAAA;AAE9BC,EAAAA,QAAAA,CAASC,SAAAA,EAA0C;AACjD,IAAA,IAAA,CAAKJ,UAAAA,CAAWK,KAAKD,SAAAA,CAAAA;AACvB,EAAA;;;;;;AAOA,EAAA,MAAME,UAAAA,GAA4B;AAChC,IAAA,MAAMC,QAAQC,UAAAA,CACZ,IAAA,CAAKR,UAAAA,CAAWS,GAAAA,CAAI,OAAOL,SAAAA,KAAAA;AACzB,MAAA,IAAI,CAAC,IAAA,CAAKH,MAAAA,CAAOS,GAAAA,CAAIN,SAAAA,CAAUO,UAAU,CAAA,EAAG;AAC1C,QAAA,IAAA,CAAKV,MAAAA,CAAOW,GAAAA,CAAIR,SAAAA,CAAUO,UAAAA,EAAYE,kBAAAA,EAAAA,CAAqBC,WAAAA,CAAYV,SAAAA,CAAUO,UAAAA,EAAYP,SAAAA,CAAUW,IAAI,CAAA,CAAA;AAC7G,MAAA;AACA,MAAA,MAAMC,KAAAA,GAAQ,IAAA,CAAKf,MAAAA,CAAOgB,GAAAA,CAAIb,UAAUO,UAAU,CAAA;AAClD,MAAA,IAAI,CAACK,KAAAA,EAAO;AACZ,MAAA,MAAME,MAAAA,GAAS,MAAMd,SAAAA,CAAUe,OAAAA,EAAO;AACtC,MAAA,KAAA,MAAW,CAACC,WAAAA,EAAaC,KAAAA,CAAAA,IAAUH,MAAAA,EAAQ;AACzCF,QAAAA,KAAAA,CAAMJ,IAAIS,KAAAA,EAAO;UAAEC,YAAAA,EAAcF,WAAAA;AAAaG,UAAAA,UAAAA,EAAYnB,SAAAA,CAAUoB;SAAU,CAAA;AAChF,MAAA;AACF,IAAA,CAAA,CAAA,CAAA;AAEJ,EAAA;;EAGAC,aAAAA,GAAoD;AAClD,IAAA,OAAO,IAAA,CAAKzB,UAAAA;AACd,EAAA;AACF,CAAA;AAEA,IAAI0B,SAAAA,GAA2C,IAAA;AAExC,SAASC,yBAAAA,GAAAA;AACd,EAAA,IAAI,CAACD,SAAAA,EAAWA,SAAAA,GAAY,IAAI3B,sBAAAA,EAAAA;AAChC,EAAA,OAAO2B,SAAAA;AACT;AAHgBC,MAAAA,CAAAA,yBAAAA,EAAAA,2BAAAA,CAAAA;AAMT,SAASC,2BAAAA,GAAAA;AACdF,EAAAA,SAAAA,GAAY,IAAA;AACd;AAFgBE,MAAAA,CAAAA,2BAAAA,EAAAA,6BAAAA,CAAAA","file":"index.js","sourcesContent":["import { getMetricsRegistry } from '../instrumentation/metrics-collector.js';\nimport type { Gauge } from '../instrumentation/metrics-collector.js';\n\n/**\n * A single workspace-scoped quota metric.\n *\n * Services implement this and register it with WorkspaceQuotaRegistry at startup.\n * The metrics endpoint calls collectAll() on every scrape so values are always fresh.\n *\n * Pattern:\n * 1. Service registers collectors at startup (after instrumentation is initialized)\n * 2. /api/metrics handler calls collectAll() before serializing Prometheus output\n * 3. activity-svc scrapes /api/metrics and correlates values via quotaName to billing limits\n */\nexport interface WorkspaceQuotaCollector {\n /** Prometheus metric name, e.g. \"vibecontrols_tunnels_active\" */\n readonly metricName: string;\n /** Human-readable description shown in Prometheus HELP output */\n readonly help: string;\n /**\n * Billing quota name this metric maps to.\n * activity-svc uses this to correlate scraped values with quota limits.\n * e.g. \"vibecontrols.tunnels.active\"\n */\n readonly quotaName: string;\n /**\n * Called on every Prometheus scrape.\n * Must return current value per workspace ID.\n * Should be a fast, bounded DB query (GROUP BY workspace_id).\n * Failures are caught with Promise.allSettled — one failing collector does not block others.\n */\n collect(): Promise<Map<string, number>>;\n}\n\nclass WorkspaceQuotaRegistry {\n private readonly collectors: WorkspaceQuotaCollector[] = [];\n private readonly gauges = new Map<string, Gauge>();\n\n register(collector: WorkspaceQuotaCollector): void {\n this.collectors.push(collector);\n }\n\n /**\n * Runs all registered collectors and updates their gauges with fresh values.\n * Gauges are created lazily on first collectAll() to ensure MetricsRegistry\n * is initialized before gauge creation (instrumentation must be set up first).\n */\n async collectAll(): Promise<void> {\n await Promise.allSettled(\n this.collectors.map(async (collector) => {\n if (!this.gauges.has(collector.metricName)) {\n this.gauges.set(collector.metricName, getMetricsRegistry().createGauge(collector.metricName, collector.help));\n }\n const gauge = this.gauges.get(collector.metricName);\n if (!gauge) return;\n const values = await collector.collect();\n for (const [workspaceId, value] of values) {\n gauge.set(value, { workspace_id: workspaceId, quota_name: collector.quotaName });\n }\n })\n );\n }\n\n /** Returns registered collectors — useful for activity-svc to discover tracked quota names. */\n getCollectors(): readonly WorkspaceQuotaCollector[] {\n return this.collectors;\n }\n}\n\nlet _registry: WorkspaceQuotaRegistry | null = null;\n\nexport function getWorkspaceQuotaRegistry(): WorkspaceQuotaRegistry {\n if (!_registry) _registry = new WorkspaceQuotaRegistry();\n return _registry;\n}\n\n/** For testing only. */\nexport function resetWorkspaceQuotaRegistry(): void {\n _registry = null;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"pino-logger-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"pino-logger-NVZXQPWO.js"}
|
package/dist/prisma/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { PrismaClientWrapper, buildContextWhereClause, buildContextWhereConditions, checkDatabaseHealth, configurePrismaLogging, contextMatches, createConnectionPool, createContextFromSDK, createDatabaseClient, createDatabaseClientFromEnv, createPrismaAdapter, createPrismaClient, extractFieldsFromModel, getAllModelNames, getDatabaseManager, getDatabaseProductName, getDatabaseStats, getDatabaseVersion, getDb, getModelFields, hasModel, initializeDatabase, initializeDatabaseWithConfig, isDatabaseInitialized, loadGeneratedFields, mergeContext, parseContext, resetDatabaseManager, testConnection, toContextJson } from '../chunk-
|
|
1
|
+
export { PrismaClientWrapper, buildContextWhereClause, buildContextWhereConditions, checkDatabaseHealth, configurePrismaLogging, contextMatches, createConnectionPool, createContextFromSDK, createDatabaseClient, createDatabaseClientFromEnv, createPrismaAdapter, createPrismaClient, extractFieldsFromModel, getAllModelNames, getDatabaseManager, getDatabaseProductName, getDatabaseStats, getDatabaseVersion, getDb, getModelFields, hasModel, initializeDatabase, initializeDatabaseWithConfig, isDatabaseInitialized, loadGeneratedFields, mergeContext, parseContext, resetDatabaseManager, testConnection, toContextJson } from '../chunk-BRYRHBAC.js';
|
|
2
2
|
export { addWorkspaceExtension, getWorkspaceContext, injectWhereWorkspaceId, setWorkspaceContext, withWorkspaceContext, withWorkspaceContextSync } from '../chunk-GTEMQXCA.js';
|
|
3
3
|
import '../chunk-5CESUKWC.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-QRWTLPW5.js';
|
|
5
|
+
import '../chunk-KGCISIBX.js';
|
|
6
|
+
import '../chunk-MHNA7IS7.js';
|
|
7
7
|
import '../chunk-CBZNP6RF.js';
|
|
8
8
|
import '../chunk-XE4OXN2W.js';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
package/dist/rbac/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { RBACClient, RBACModule, createRBACClientFromEnv, createRBACDirective, createRBACDirectiveForLayer, createRBACDirectiveFromEnv } from '../chunk-
|
|
1
|
+
export { RBACClient, RBACModule, createRBACClientFromEnv, createRBACDirective, createRBACDirectiveForLayer, createRBACDirectiveFromEnv } from '../chunk-BNJFEOGH.js';
|
|
2
2
|
import '../chunk-O6RHB2YP.js';
|
|
3
3
|
import '../chunk-HP6JTFNR.js';
|
|
4
4
|
import '../chunk-CBZNP6RF.js';
|
|
@@ -132,5 +132,5 @@ async function createOtelSdk(cfg) {
|
|
|
132
132
|
__name(createOtelSdk, "createOtelSdk");
|
|
133
133
|
|
|
134
134
|
export { createOtelSdk };
|
|
135
|
-
//# sourceMappingURL=sdk-
|
|
136
|
-
//# sourceMappingURL=sdk-
|
|
135
|
+
//# sourceMappingURL=sdk-UWFH5PY7.js.map
|
|
136
|
+
//# sourceMappingURL=sdk-UWFH5PY7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/telemetry/sdk.ts"],"names":["isThenable","value","then","asyncDisposeMetricReader","metricReaderCandidate","shutdown","result","call","createOtelSdk","cfg","sdkNodeMod","sdkMod","resourcesMod","resources","semMod","sem","traceExpMod","traceExp","metricsExp","metricsExpMod","undefined","metricReader","metricsEnabled","metricsDropReason","OTLPMetricExporter","metricsSdkMod","metricsSdk","candidate","PeriodicExportingMetricReader","exporter","url","otlpEndpoint","replace","setProducer","setMetricProducer","sampler","traceBaseMod","traceBase","ParentBasedSampler","root","TraceIdRatioBasedSampler","Math","min","max","sampleRatio","autoInstrumentations","autoMod","auto","getNodeAutoInstrumentations","enabled","serviceNamespaceByBoundary","wspace","global","gateway","resourceAttributes","serviceName","serviceVersion","boundary","env","module","serviceInstanceId","process","clusterName","resource","resourceFromAttributes","traceExporter","OTLPTraceExporter","nodeSdk","NodeSDK","instrumentations","startResult","start","otelApiMod","globalThis","__otelApi"],"mappings":";;;AA8BA,IAAMA,UAAAA,2BAAcC,KAAAA,KAAAA;AAClB,EAAA,OAAO,OAAOA,KAAAA,KAAU,QAAA,IAAYA,UAAU,IAAA,IAAQ,OAAQA,MAA6BC,IAAAA,KAAS,UAAA;AACtG,CAAA,EAFmB,YAAA,CAAA;AAInB,IAAMC,wBAAAA,iCAAkCC,qBAAAA,KAAAA;AACtC,EAAA,MAAMC,WAAYD,qBAAAA,CAAoEC,QAAAA;AACtF,EAAA,IAAI,OAAOA,aAAa,UAAA,EAAY;AAClC,IAAA,MAAMC,MAAAA,GAASD,QAAAA,CAASE,IAAAA,CAAKH,qBAAAA,CAAAA;AAC7B,IAAA,IAAIJ,UAAAA,CAAWM,MAAAA,CAAAA,EAAS,MAAMA,MAAAA;AAChC,EAAA;AACF,CAAA,EANiC,0BAAA,CAAA;AAQjC,eAAsBE,cAAcC,GAAAA,EAAkB;AAGpD,EAAA,MAAMC,UAAAA,GAAa,yBAAA;AACnB,EAAA,MAAMC,MAAAA,GAAU,MAAM,OAAOD,UAAAA,CAAAA;AAO7B,EAAA,MAAME,YAAAA,GAAe,0BAAA;AACrB,EAAA,MAAMC,SAAAA,GAAa,MAAM,OAAOD,YAAAA,CAAAA;AAIhC,EAAA,MAAME,MAAAA,GAAS,qCAAA;AACf,EAAA,MAAMC,GAAAA,GAAO,MAAM,OAAOD,MAAAA,CAAAA;AAE1B,EAAA,MAAME,WAAAA,GAAc,yCAAA;AACpB,EAAA,MAAMC,QAAAA,GAAY,MAAM,OAAOD,WAAAA,CAAAA;AAI/B,EAAA,IAAIE,UAAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAMC,aAAAA,GAAgB,2CAAA;AACtBD,IAAAA,UAAAA,GAAc,MAAM,OAAOC,aAAAA,CAAAA;EAC7B,CAAA,CAAA,MAAQ;AACND,IAAAA,UAAAA,GAAaE,MAAAA;AACf,EAAA;AAEA,EAAA,IAAIC,YAAAA;AACJ,EAAA,IAAIC,cAAAA,GAAiB,KAAA;AACrB,EAAA,IAAIC,iBAAAA;AACJ,EAAA,IAAIL,YAAYM,kBAAAA,EAAoB;AAClC,IAAA,IAAI;AACF,MAAA,MAAMC,aAAAA,GAAgB,4BAAA;AACtB,MAAA,MAAMC,UAAAA,GAAc,MAAM,OAAOD,aAAAA,CAAAA;AAGjC,MAAA,MAAME,SAAAA,GAAY,IAAID,UAAAA,CAAWE,6BAAAA,CAA8B;QAC7DC,QAAAA,EAAU,IAAIX,WAAWM,kBAAAA,CAAmB;AAC1CM,UAAAA,GAAAA,EAAK,GAAGrB,GAAAA,CAAIsB,YAAAA,CAAaC,OAAAA,CAAQ,KAAA,EAAO,EAAA,CAAA,CAAA,WAAA;SAC1C;OACF,CAAA;AAWA,MAAA,MAAMC,cAAeN,SAAAA,CAA8CO,iBAAAA;AACnE,MAAA,IAAI,OAAOD,gBAAgB,UAAA,EAAY;AACrCZ,QAAAA,YAAAA,GAAeM,SAAAA;AACfL,QAAAA,cAAAA,GAAiB,IAAA;MACnB,CAAA,MAAO;AACLC,QAAAA,iBAAAA,GACE,6FAAA;AACF,QAAA,MAAMpB,yBAAyBwB,SAAAA,CAAAA;AAC/BN,QAAAA,YAAAA,GAAeD,KAAAA,CAAAA;AACjB,MAAA;IACF,CAAA,CAAA,MAAQ;AACN,MAAA,IAAIG,sBAAsBH,MAAAA,EAAW;AACnCG,QAAAA,iBAAAA,GAAoB,0DAAA;AACtB,MAAA;AACAF,MAAAA,YAAAA,GAAeD,MAAAA;AACjB,IAAA;AACF,EAAA;AAEA,EAAA,IAAIe,OAAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAMC,YAAAA,GAAe,+BAAA;AACrB,IAAA,MAAMC,SAAAA,GAAa,MAAM,OAAOD,YAAAA,CAAAA;AAIhCD,IAAAA,OAAAA,GAAU,IAAIE,UAAUC,kBAAAA,CAAmB;AACzCC,MAAAA,IAAAA,EAAM,IAAIF,SAAAA,CAAUG,wBAAAA,CAAyBC,IAAAA,CAAKC,GAAAA,CAAI,CAAA,EAAGD,IAAAA,CAAKE,GAAAA,CAAI,CAAA,EAAGlC,GAAAA,CAAImC,WAAW,CAAA,CAAA;KACtF,CAAA;EACF,CAAA,CAAA,MAAQ;AACNT,IAAAA,OAAAA,GAAUf,MAAAA;AACZ,EAAA;AAGA,EAAA,IAAIyB,oBAAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAMC,OAAAA,GAAU,2CAAA;AAChB,IAAA,MAAMC,IAAAA,GAAQ,MAAM,OAAOD,OAAAA,CAAAA;AAG3BD,IAAAA,oBAAAA,GAAuBE,KAAKC,2BAAAA,CAA4B;MACtD,mCAAA,EAAqC;QAAEC,OAAAA,EAAS;AAAM;KACxD,CAAA;EACF,CAAA,CAAA,MAAQ;AACNJ,IAAAA,oBAAAA,GAAuBzB,MAAAA;AACzB,EAAA;AAEA,EAAA,MAAM8B,0BAAAA,GAAuD;IAC3DC,MAAAA,EAAQ,YAAA;IACRC,MAAAA,EAAQ,QAAA;IACRC,OAAAA,EAAS;AACX,GAAA;AACA,EAAA,MAAMC,kBAAAA,GAA6C;AACjD,IAAA,CAACvC,GAAAA,CAAI,0BAAA,CAAA,IAA+B,cAAA,GAAiBN,GAAAA,CAAI8C,WAAAA;AACzD,IAAA,CAACxC,GAAAA,CAAI,6BAAA,CAAA,IAAkC,iBAAA,GAAoBN,GAAAA,CAAI+C,cAAAA;AAC/D,IAAA,CAACzC,IAAI,+BAAA,CAAA,IAAoC,mBAAA,GAAsBmC,0BAAAA,CAA2BzC,IAAIgD,QAAQ,CAAA;AACtG,IAAA,CAAC1C,GAAAA,CAAI,oCAAA,CAAA,IAAyC,wBAAA,GAA2BN,GAAAA,CAAIiD,GAAAA;AAC7E,IAAA,oBAAA,EAAsBjD,GAAAA,CAAIgD;AAC5B,GAAA;AACA,EAAA,IAAIhD,GAAAA,CAAIkD,MAAAA,EAAQL,kBAAAA,CAAmB,kBAAA,IAAsB7C,GAAAA,CAAIkD,MAAAA;AAC7D,EAAA,MAAMC,oBAAoBC,OAAAA,CAAQH,GAAAA,CAAI,UAAA,CAAA,IAAeG,OAAAA,CAAQH,IAAI,UAAA,CAAA;AACjE,EAAA,IAAIE,iBAAAA,EAAmBN,kBAAAA,CAAmB,qBAAA,CAAA,GAAyBM,iBAAAA;AACnE,EAAA,MAAME,WAAAA,GAAcD,OAAAA,CAAQH,GAAAA,CAAI,cAAA,CAAA;AAChC,EAAA,IAAII,WAAAA,EAAa;AACfR,IAAAA,kBAAAA,CAAmB,SAAA,CAAA,GAAaQ,WAAAA;AAChCR,IAAAA,kBAAAA,CAAmB,kBAAA,CAAA,GAAsBQ,WAAAA;AAC3C,EAAA;AAEA,EAAA,MAAMC,QAAAA,GAAWlD,SAAAA,CAAUmD,sBAAAA,CAAuBV,kBAAAA,CAAAA;AAElD,EAAA,MAAMW,aAAAA,GAAgB,IAAIhD,QAAAA,CAASiD,iBAAAA,CAAkB;AACnDpC,IAAAA,GAAAA,EAAK,GAAGrB,GAAAA,CAAIsB,YAAAA,CAAaC,OAAAA,CAAQ,KAAA,EAAO,EAAA,CAAA,CAAA,UAAA;GAC1C,CAAA;AAUA,EAAA,MAAMmC,OAAAA,GAAU,IAAIxD,MAAAA,CAAOyD,OAAAA,CAAQ;AACjCL,IAAAA,QAAAA;AACAE,IAAAA,aAAAA;AACA,IAAA,GAAI5C,YAAAA,GAAe;AAAEA,MAAAA;AAAa,KAAA,GAAI,EAAC;AACvC,IAAA,GAAIc,OAAAA,GAAU;AAAEA,MAAAA;AAAQ,KAAA,GAAI,EAAC;AAC7B,IAAA,GAAIU,oBAAAA,GAAuB;MAAEwB,gBAAAA,EAAkBxB;AAAqB,KAAA,GAAI;GAC1E,CAAA;AAIA,EAAA,MAAMyB,WAAAA,GAAcH,QAAQI,KAAAA,EAAK;AACjC,EAAA,IAAIvE,UAAAA,CAAWsE,WAAAA,CAAAA,EAAc;AAC3B,IAAA,MAAMA,WAAAA;AACR,EAAA;AAGA,EAAA,IAAI;AACF,IAAA,MAAME,UAAAA,GAAa,oBAAA;AAClBC,IAAAA,UAAAA,CAAkDC,SAAAA,GAAY,MAAM,OAAOF,UAAAA,CAAAA;EAC9E,CAAA,CAAA,MAAQ;AAER,EAAA;AAEA,EAAA,OAAO;IACLnE,QAAAA,kBAAU,MAAA,CAAA,YAA2B8D,OAAAA,CAAQ9D,QAAAA,EAAQ,EAA3C,UAAA,CAAA;AACViB,IAAAA,cAAAA;AACAC,IAAAA;AACF,GAAA;AACF;AArKsBf,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA","file":"sdk-THO3IWEE.js","sourcesContent":["/**\n * Thin wrapper that initializes `@opentelemetry/sdk-node` with the\n * OTLPTrace + OTLPMetric exporters and standard auto-instrumentations.\n *\n * All imports are dynamic so services that haven't installed sdk-node\n * still compile and run. The function resolves `undefined` when the SDK\n * isn't available, letting `bootstrapTelemetry` fall back gracefully.\n */\nimport type { Boundary, Env } from './index.js';\n\nexport interface OtelSdkConfig {\n serviceName: string;\n serviceVersion: string;\n boundary: Boundary;\n module?: string;\n env: Env;\n otlpEndpoint: string;\n sampleRatio: number;\n}\n\nexport interface OtelSdkHandle {\n shutdown: () => Promise<void>;\n metricsEnabled: boolean;\n metricsDropReason?: string;\n}\n\ntype Thenable = {\n then: (onfulfilled?: (value: void) => void, onrejected?: (reason: unknown) => void) => unknown;\n};\n\nconst isThenable = (value: unknown): value is Thenable => {\n return typeof value === 'object' && value !== null && typeof (value as { then?: unknown }).then === 'function';\n};\n\nconst asyncDisposeMetricReader = async (metricReaderCandidate: unknown): Promise<void> => {\n const shutdown = (metricReaderCandidate as { shutdown?: () => void | Promise<void> }).shutdown;\n if (typeof shutdown === 'function') {\n const result = shutdown.call(metricReaderCandidate) as unknown;\n if (isThenable(result)) await result;\n }\n};\n\nexport async function createOtelSdk(cfg: OtelSdkConfig): Promise<OtelSdkHandle> {\n // Use local string variables so TypeScript skips static module resolution for\n // optional peer dependencies that may not be installed.\n const sdkNodeMod = '@opentelemetry/sdk-node';\n const sdkMod = (await import(sdkNodeMod)) as unknown as {\n NodeSDK: new (init: Record<string, unknown>) => {\n start: () => void;\n shutdown: () => Promise<void>;\n };\n };\n\n const resourcesMod = '@opentelemetry/resources';\n const resources = (await import(resourcesMod)) as unknown as {\n resourceFromAttributes: (attrs: Record<string, string | number>) => unknown;\n };\n\n const semMod = '@opentelemetry/semantic-conventions';\n const sem = (await import(semMod)) as unknown as Record<string, string>;\n\n const traceExpMod = '@opentelemetry/exporter-trace-otlp-http';\n const traceExp = (await import(traceExpMod)) as unknown as {\n OTLPTraceExporter: new (init: Record<string, string>) => unknown;\n };\n\n let metricsExp: { OTLPMetricExporter?: new (init: Record<string, string>) => unknown } | undefined;\n try {\n const metricsExpMod = '@opentelemetry/exporter-metrics-otlp-http';\n metricsExp = (await import(metricsExpMod)) as unknown as typeof metricsExp;\n } catch {\n metricsExp = undefined;\n }\n\n let metricReader: unknown;\n let metricsEnabled = false;\n let metricsDropReason: string | undefined;\n if (metricsExp?.OTLPMetricExporter) {\n try {\n const metricsSdkMod = '@opentelemetry/sdk-metrics';\n const metricsSdk = (await import(metricsSdkMod)) as unknown as {\n PeriodicExportingMetricReader: new (init: Record<string, unknown>) => unknown;\n };\n const candidate = new metricsSdk.PeriodicExportingMetricReader({\n exporter: new metricsExp.OTLPMetricExporter({\n url: `${cfg.otlpEndpoint.replace(/\\/$/, '')}/v1/metrics`,\n }),\n });\n // Pre-flight API compatibility check. Some OTel package version\n // combinations construct `PeriodicExportingMetricReader` successfully\n // but lack `setMetricProducer` on the prototype chain (mixed\n // sdk-metrics versions, or runtime-specific class-inheritance\n // quirks — Bun has surfaced this in the past). Without the check,\n // `NodeSDK.start()` may register the global tracer provider BEFORE\n // it tries to call `setMetricProducer` and throws — leaving the\n // global tracer pointing at a half-initialized provider whose\n // span pipeline never drains. Skipping the metric reader when the\n // API isn't there avoids that whole failure mode in one pass.\n const setProducer = (candidate as { setMetricProducer?: unknown }).setMetricProducer;\n if (typeof setProducer === 'function') {\n metricReader = candidate;\n metricsEnabled = true;\n } else {\n metricsDropReason =\n 'setMetricProducer is not a function on PeriodicExportingMetricReader; skipping metrics path';\n await asyncDisposeMetricReader(candidate);\n metricReader = undefined;\n }\n } catch {\n if (metricsDropReason === undefined) {\n metricsDropReason = 'metric reader construction or compatibility check failed';\n }\n metricReader = undefined;\n }\n }\n\n let sampler: unknown;\n try {\n const traceBaseMod = '@opentelemetry/sdk-trace-base';\n const traceBase = (await import(traceBaseMod)) as unknown as {\n ParentBasedSampler: new (init: Record<string, unknown>) => unknown;\n TraceIdRatioBasedSampler: new (ratio: number) => unknown;\n };\n sampler = new traceBase.ParentBasedSampler({\n root: new traceBase.TraceIdRatioBasedSampler(Math.min(1, Math.max(0, cfg.sampleRatio))),\n });\n } catch {\n sampler = undefined;\n }\n\n // Some services have auto-instrumentations installed; optional.\n let autoInstrumentations: unknown[] | undefined;\n try {\n const autoMod = '@opentelemetry/auto-instrumentations-node';\n const auto = (await import(autoMod)) as unknown as {\n getNodeAutoInstrumentations: (cfg?: Record<string, unknown>) => unknown[];\n };\n autoInstrumentations = auto.getNodeAutoInstrumentations({\n '@opentelemetry/instrumentation-fs': { enabled: false },\n });\n } catch {\n autoInstrumentations = undefined;\n }\n\n const serviceNamespaceByBoundary: Record<Boundary, string> = {\n wspace: 'workspaces',\n global: 'tenant',\n gateway: 'gateways',\n };\n const resourceAttributes: Record<string, string> = {\n [sem['SEMRESATTRS_SERVICE_NAME'] ?? 'service.name']: cfg.serviceName,\n [sem['SEMRESATTRS_SERVICE_VERSION'] ?? 'service.version']: cfg.serviceVersion,\n [sem['SEMRESATTRS_SERVICE_NAMESPACE'] ?? 'service.namespace']: serviceNamespaceByBoundary[cfg.boundary],\n [sem['SEMRESATTRS_DEPLOYMENT_ENVIRONMENT'] ?? 'deployment.environment']: cfg.env,\n 'burdenoff.boundary': cfg.boundary,\n };\n if (cfg.module) resourceAttributes['burdenoff.module'] = cfg.module;\n const serviceInstanceId = process.env['POD_NAME'] ?? process.env['HOSTNAME'];\n if (serviceInstanceId) resourceAttributes['service.instance.id'] = serviceInstanceId;\n const clusterName = process.env['CLUSTER_NAME'];\n if (clusterName) {\n resourceAttributes['cluster'] = clusterName;\n resourceAttributes['k8s.cluster.name'] = clusterName;\n }\n\n const resource = resources.resourceFromAttributes(resourceAttributes);\n\n const traceExporter = new traceExp.OTLPTraceExporter({\n url: `${cfg.otlpEndpoint.replace(/\\/$/, '')}/v1/traces`,\n });\n\n // Single NodeSDK, single start. The pre-flight `setMetricProducer`\n // check above means we never pass an incompatible metric reader into\n // NodeSDK construction — so we no longer need the prior catch+rebuild\n // fallback dance, which had its own side-effect: the failed first\n // NodeSDK could leave the global tracer provider partially registered,\n // and the second NodeSDK's `setGlobalTracerProvider` becomes a no-op\n // — meaning spans flow into the FIRST (broken) provider and never\n // reach the exporter. Eliminating the fallback eliminates that hazard.\n const nodeSdk = new sdkMod.NodeSDK({\n resource,\n traceExporter,\n ...(metricReader ? { metricReader } : {}),\n ...(sampler ? { sampler } : {}),\n ...(autoInstrumentations ? { instrumentations: autoInstrumentations } : {}),\n });\n // NodeSDK.start() returns void in modern versions and Promise<void> in older\n // ones. Cast to a permissive thenable shape so awaiting works either way\n // without tripping `@typescript-eslint/await-thenable`.\n const startResult = nodeSdk.start() as unknown;\n if (isThenable(startResult)) {\n await startResult;\n }\n\n // Stash the @opentelemetry/api reference for pino-logger's mixin.\n try {\n const otelApiMod = '@opentelemetry/api';\n (globalThis as unknown as { __otelApi?: unknown }).__otelApi = await import(otelApiMod);\n } catch {\n // Non-fatal.\n }\n\n return {\n shutdown: async (): Promise<void> => nodeSdk.shutdown(),\n metricsEnabled,\n metricsDropReason,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/telemetry/sdk.ts"],"names":["isThenable","value","then","asyncDisposeMetricReader","metricReaderCandidate","shutdown","result","call","createOtelSdk","cfg","sdkNodeMod","sdkMod","resourcesMod","resources","semMod","sem","traceExpMod","traceExp","metricsExp","metricsExpMod","undefined","metricReader","metricsEnabled","metricsDropReason","OTLPMetricExporter","metricsSdkMod","metricsSdk","candidate","PeriodicExportingMetricReader","exporter","url","otlpEndpoint","replace","setProducer","setMetricProducer","sampler","traceBaseMod","traceBase","ParentBasedSampler","root","TraceIdRatioBasedSampler","Math","min","max","sampleRatio","autoInstrumentations","autoMod","auto","getNodeAutoInstrumentations","enabled","serviceNamespaceByBoundary","wspace","global","gateway","resourceAttributes","serviceName","serviceVersion","boundary","env","module","serviceInstanceId","process","clusterName","resource","resourceFromAttributes","traceExporter","OTLPTraceExporter","nodeSdk","NodeSDK","instrumentations","startResult","start","otelApiMod","globalThis","__otelApi"],"mappings":"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","file":"sdk-UWFH5PY7.js","sourcesContent":["/**\n * Thin wrapper that initializes `@opentelemetry/sdk-node` with the\n * OTLPTrace + OTLPMetric exporters and standard auto-instrumentations.\n *\n * All imports are dynamic so services that haven't installed sdk-node\n * still compile and run. The function resolves `undefined` when the SDK\n * isn't available, letting `bootstrapTelemetry` fall back gracefully.\n */\nimport type { Boundary, Env } from './index.js';\n\nexport interface OtelSdkConfig {\n serviceName: string;\n serviceVersion: string;\n boundary: Boundary;\n module?: string;\n env: Env;\n otlpEndpoint: string;\n sampleRatio: number;\n}\n\nexport interface OtelSdkHandle {\n shutdown: () => Promise<void>;\n metricsEnabled: boolean;\n metricsDropReason?: string;\n}\n\ntype Thenable = {\n then: (onfulfilled?: (value: void) => void, onrejected?: (reason: unknown) => void) => unknown;\n};\n\nconst isThenable = (value: unknown): value is Thenable => {\n return typeof value === 'object' && value !== null && typeof (value as { then?: unknown }).then === 'function';\n};\n\nconst asyncDisposeMetricReader = async (metricReaderCandidate: unknown): Promise<void> => {\n const shutdown = (metricReaderCandidate as { shutdown?: () => void | Promise<void> }).shutdown;\n if (typeof shutdown === 'function') {\n const result = shutdown.call(metricReaderCandidate) as unknown;\n if (isThenable(result)) await result;\n }\n};\n\nexport async function createOtelSdk(cfg: OtelSdkConfig): Promise<OtelSdkHandle> {\n // Use local string variables so TypeScript skips static module resolution for\n // optional peer dependencies that may not be installed.\n const sdkNodeMod = '@opentelemetry/sdk-node';\n const sdkMod = (await import(sdkNodeMod)) as unknown as {\n NodeSDK: new (init: Record<string, unknown>) => {\n start: () => void;\n shutdown: () => Promise<void>;\n };\n };\n\n const resourcesMod = '@opentelemetry/resources';\n const resources = (await import(resourcesMod)) as unknown as {\n resourceFromAttributes: (attrs: Record<string, string | number>) => unknown;\n };\n\n const semMod = '@opentelemetry/semantic-conventions';\n const sem = (await import(semMod)) as unknown as Record<string, string>;\n\n const traceExpMod = '@opentelemetry/exporter-trace-otlp-http';\n const traceExp = (await import(traceExpMod)) as unknown as {\n OTLPTraceExporter: new (init: Record<string, string>) => unknown;\n };\n\n let metricsExp: { OTLPMetricExporter?: new (init: Record<string, string>) => unknown } | undefined;\n try {\n const metricsExpMod = '@opentelemetry/exporter-metrics-otlp-http';\n metricsExp = await import(metricsExpMod);\n } catch {\n metricsExp = undefined;\n }\n\n let metricReader: unknown;\n let metricsEnabled = false;\n let metricsDropReason: string | undefined;\n if (metricsExp?.OTLPMetricExporter) {\n try {\n const metricsSdkMod = '@opentelemetry/sdk-metrics';\n const metricsSdk = (await import(metricsSdkMod)) as unknown as {\n PeriodicExportingMetricReader: new (init: Record<string, unknown>) => unknown;\n };\n const candidate = new metricsSdk.PeriodicExportingMetricReader({\n exporter: new metricsExp.OTLPMetricExporter({\n url: `${cfg.otlpEndpoint.replace(/\\/$/, '')}/v1/metrics`,\n }),\n });\n // Pre-flight API compatibility check. Some OTel package version\n // combinations construct `PeriodicExportingMetricReader` successfully\n // but lack `setMetricProducer` on the prototype chain (mixed\n // sdk-metrics versions, or runtime-specific class-inheritance\n // quirks — Bun has surfaced this in the past). Without the check,\n // `NodeSDK.start()` may register the global tracer provider BEFORE\n // it tries to call `setMetricProducer` and throws — leaving the\n // global tracer pointing at a half-initialized provider whose\n // span pipeline never drains. Skipping the metric reader when the\n // API isn't there avoids that whole failure mode in one pass.\n const setProducer = (candidate as { setMetricProducer?: unknown }).setMetricProducer;\n if (typeof setProducer === 'function') {\n metricReader = candidate;\n metricsEnabled = true;\n } else {\n metricsDropReason =\n 'setMetricProducer is not a function on PeriodicExportingMetricReader; skipping metrics path';\n await asyncDisposeMetricReader(candidate);\n metricReader = undefined;\n }\n } catch {\n if (metricsDropReason === undefined) {\n metricsDropReason = 'metric reader construction or compatibility check failed';\n }\n metricReader = undefined;\n }\n }\n\n let sampler: unknown;\n try {\n const traceBaseMod = '@opentelemetry/sdk-trace-base';\n const traceBase = (await import(traceBaseMod)) as unknown as {\n ParentBasedSampler: new (init: Record<string, unknown>) => unknown;\n TraceIdRatioBasedSampler: new (ratio: number) => unknown;\n };\n sampler = new traceBase.ParentBasedSampler({\n root: new traceBase.TraceIdRatioBasedSampler(Math.min(1, Math.max(0, cfg.sampleRatio))),\n });\n } catch {\n sampler = undefined;\n }\n\n // Some services have auto-instrumentations installed; optional.\n let autoInstrumentations: unknown[] | undefined;\n try {\n const autoMod = '@opentelemetry/auto-instrumentations-node';\n const auto = (await import(autoMod)) as unknown as {\n getNodeAutoInstrumentations: (cfg?: Record<string, unknown>) => unknown[];\n };\n autoInstrumentations = auto.getNodeAutoInstrumentations({\n '@opentelemetry/instrumentation-fs': { enabled: false },\n });\n } catch {\n autoInstrumentations = undefined;\n }\n\n const serviceNamespaceByBoundary: Record<Boundary, string> = {\n wspace: 'workspaces',\n global: 'tenant',\n gateway: 'gateways',\n };\n const resourceAttributes: Record<string, string> = {\n [sem['SEMRESATTRS_SERVICE_NAME'] ?? 'service.name']: cfg.serviceName,\n [sem['SEMRESATTRS_SERVICE_VERSION'] ?? 'service.version']: cfg.serviceVersion,\n [sem['SEMRESATTRS_SERVICE_NAMESPACE'] ?? 'service.namespace']: serviceNamespaceByBoundary[cfg.boundary],\n [sem['SEMRESATTRS_DEPLOYMENT_ENVIRONMENT'] ?? 'deployment.environment']: cfg.env,\n 'burdenoff.boundary': cfg.boundary,\n };\n if (cfg.module) resourceAttributes['burdenoff.module'] = cfg.module;\n const serviceInstanceId = process.env['POD_NAME'] ?? process.env['HOSTNAME'];\n if (serviceInstanceId) resourceAttributes['service.instance.id'] = serviceInstanceId;\n const clusterName = process.env['CLUSTER_NAME'];\n if (clusterName) {\n resourceAttributes['cluster'] = clusterName;\n resourceAttributes['k8s.cluster.name'] = clusterName;\n }\n\n const resource = resources.resourceFromAttributes(resourceAttributes);\n\n const traceExporter = new traceExp.OTLPTraceExporter({\n url: `${cfg.otlpEndpoint.replace(/\\/$/, '')}/v1/traces`,\n });\n\n // Single NodeSDK, single start. The pre-flight `setMetricProducer`\n // check above means we never pass an incompatible metric reader into\n // NodeSDK construction — so we no longer need the prior catch+rebuild\n // fallback dance, which had its own side-effect: the failed first\n // NodeSDK could leave the global tracer provider partially registered,\n // and the second NodeSDK's `setGlobalTracerProvider` becomes a no-op\n // — meaning spans flow into the FIRST (broken) provider and never\n // reach the exporter. Eliminating the fallback eliminates that hazard.\n const nodeSdk = new sdkMod.NodeSDK({\n resource,\n traceExporter,\n ...(metricReader ? { metricReader } : {}),\n ...(sampler ? { sampler } : {}),\n ...(autoInstrumentations ? { instrumentations: autoInstrumentations } : {}),\n });\n // NodeSDK.start() returns void in modern versions and Promise<void> in older\n // ones. Cast to a permissive thenable shape so awaiting works either way\n // without tripping `@typescript-eslint/await-thenable`.\n const startResult = nodeSdk.start() as unknown;\n if (isThenable(startResult)) {\n await startResult;\n }\n\n // Stash the @opentelemetry/api reference for pino-logger's mixin.\n try {\n const otelApiMod = '@opentelemetry/api';\n (globalThis as unknown as { __otelApi?: unknown }).__otelApi = await import(otelApiMod);\n } catch {\n // Non-fatal.\n }\n\n return {\n shutdown: async (): Promise<void> => nodeSdk.shutdown(),\n metricsEnabled,\n metricsDropReason,\n };\n}\n"]}
|
package/dist/server/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createWorkspaceGuardPlugin } from '../chunk-
|
|
1
|
+
export { createWorkspaceGuardPlugin } from '../chunk-BTQREMD4.js';
|
|
2
2
|
import { setWorkspaceContext } from '../chunk-GTEMQXCA.js';
|
|
3
3
|
import { I18n } from '../chunk-IYE2NTRX.js';
|
|
4
4
|
import { logger } from '../chunk-CBZNP6RF.js';
|
|
@@ -119,7 +119,7 @@ __name(verifyJWT, "verifyJWT");
|
|
|
119
119
|
async function decodeJWT(token) {
|
|
120
120
|
try {
|
|
121
121
|
const joseLib = await getJose();
|
|
122
|
-
return joseLib.decodeJwt(token);
|
|
122
|
+
return await joseLib.decodeJwt(token);
|
|
123
123
|
} catch {
|
|
124
124
|
return null;
|
|
125
125
|
}
|
|
@@ -472,7 +472,7 @@ async function createServer(definition) {
|
|
|
472
472
|
const { initializeDatabase, getDb: getDb2, getDatabaseManager } = await import('../prisma/index.js');
|
|
473
473
|
const { createSecurityPlugin } = await import('../middleware/index.js');
|
|
474
474
|
const { createMetricsPlugin } = await import('../observability/index.js');
|
|
475
|
-
const { createWorkspaceGuardPlugin: createWorkspaceGuardPlugin2 } = await import('../workspace-guard-
|
|
475
|
+
const { createWorkspaceGuardPlugin: createWorkspaceGuardPlugin2 } = await import('../workspace-guard-524GBJQ6.js');
|
|
476
476
|
logger.info(`[Server] Initializing ${config.serviceName}...`);
|
|
477
477
|
const boundary = config.boundary ?? (config.serviceName.startsWith("wspace-") ? "wspace" : config.serviceName.startsWith("global-") ? "global" : "wspace");
|
|
478
478
|
const shouldEnableWorkspaceExtension = disableWorkspaceExtension === true ? false : disableWorkspaceExtension === false ? true : boundary === "wspace";
|