@burdenoff/be-sdk 2026.805.1 → 2026.815.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.
@@ -300,6 +300,11 @@ function escapePrometheusLabelValue(value) {
300
300
  return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n");
301
301
  }
302
302
  __name(escapePrometheusLabelValue, "escapePrometheusLabelValue");
303
+ function sanitizePrometheusMetricName(name) {
304
+ const sanitized = name.replace(/[^a-zA-Z0-9_:]/g, "_");
305
+ return /^[a-zA-Z_:]/.test(sanitized) ? sanitized : `_${sanitized}`;
306
+ }
307
+ __name(sanitizePrometheusMetricName, "sanitizePrometheusMetricName");
303
308
  function formatPrometheusLabelPairs(labelKey) {
304
309
  if (!labelKey) return "";
305
310
  const pairs = [];
@@ -733,12 +738,13 @@ var MetricsRegistry = class {
733
738
  */
734
739
  exportCountersToPrometheus(lines) {
735
740
  for (const counter of this.counters.values()) {
736
- lines.push(`# HELP ${counter.getName()} ${counter.getDescription()}`);
737
- lines.push(`# TYPE ${counter.getName()} counter`);
741
+ const name = sanitizePrometheusMetricName(counter.getName());
742
+ lines.push(`# HELP ${name} ${counter.getDescription()}`);
743
+ lines.push(`# TYPE ${name} counter`);
738
744
  for (const [labels, value] of counter.getAllValues()) {
739
745
  const pairs = formatPrometheusLabelPairs(labels);
740
746
  const labelStr = pairs ? `{${pairs}}` : "";
741
- lines.push(`${counter.getName()}${labelStr} ${value}`);
747
+ lines.push(`${name}${labelStr} ${value}`);
742
748
  }
743
749
  }
744
750
  }
@@ -747,17 +753,18 @@ var MetricsRegistry = class {
747
753
  */
748
754
  exportHistogramsToPrometheus(lines) {
749
755
  for (const histogram of this.histograms.values()) {
750
- lines.push(`# HELP ${histogram.getName()} ${histogram.getDescription()}`);
751
- lines.push(`# TYPE ${histogram.getName()} histogram`);
756
+ const name = sanitizePrometheusMetricName(histogram.getName());
757
+ lines.push(`# HELP ${name} ${histogram.getDescription()}`);
758
+ lines.push(`# TYPE ${name} histogram`);
752
759
  for (const [labels, data] of histogram.getAllData()) {
753
760
  const pairs = formatPrometheusLabelPairs(labels);
754
761
  const labelStr = pairs ? `,${pairs}` : "";
755
762
  for (const [le, count] of data.buckets) {
756
763
  const leStr = le === Infinity ? "+Inf" : le.toString();
757
- lines.push(`${histogram.getName()}_bucket{le="${leStr}"${labelStr}} ${count}`);
764
+ lines.push(`${name}_bucket{le="${leStr}"${labelStr}} ${count}`);
758
765
  }
759
- lines.push(`${histogram.getName()}_sum{${pairs}} ${data.sum}`);
760
- lines.push(`${histogram.getName()}_count{${pairs}} ${data.count}`);
766
+ lines.push(`${name}_sum{${pairs}} ${data.sum}`);
767
+ lines.push(`${name}_count{${pairs}} ${data.count}`);
761
768
  }
762
769
  }
763
770
  }
@@ -766,12 +773,13 @@ var MetricsRegistry = class {
766
773
  */
767
774
  exportGaugesToPrometheus(lines) {
768
775
  for (const gauge of this.gauges.values()) {
769
- lines.push(`# HELP ${gauge.getName()} ${gauge.getDescription()}`);
770
- lines.push(`# TYPE ${gauge.getName()} gauge`);
776
+ const name = sanitizePrometheusMetricName(gauge.getName());
777
+ lines.push(`# HELP ${name} ${gauge.getDescription()}`);
778
+ lines.push(`# TYPE ${name} gauge`);
771
779
  for (const [labels, value] of gauge.getAllValues()) {
772
780
  const pairs = formatPrometheusLabelPairs(labels);
773
781
  const labelStr = pairs ? `{${pairs}}` : "";
774
- lines.push(`${gauge.getName()}${labelStr} ${value}`);
782
+ lines.push(`${name}${labelStr} ${value}`);
775
783
  }
776
784
  }
777
785
  }
@@ -780,12 +788,13 @@ var MetricsRegistry = class {
780
788
  */
781
789
  exportUpDownCountersToPrometheus(lines) {
782
790
  for (const counter of this.upDownCounters.values()) {
783
- lines.push(`# HELP ${counter.getName()} ${counter.getDescription()}`);
784
- lines.push(`# TYPE ${counter.getName()} gauge`);
791
+ const name = sanitizePrometheusMetricName(counter.getName());
792
+ lines.push(`# HELP ${name} ${counter.getDescription()}`);
793
+ lines.push(`# TYPE ${name} gauge`);
785
794
  for (const [labels, value] of counter.getAllValues()) {
786
795
  const pairs = formatPrometheusLabelPairs(labels);
787
796
  const labelStr = pairs ? `{${pairs}}` : "";
788
- lines.push(`${counter.getName()}${labelStr} ${value}`);
797
+ lines.push(`${name}${labelStr} ${value}`);
789
798
  }
790
799
  }
791
800
  }
@@ -869,5 +878,5 @@ function createUpDownCounter(name, description) {
869
878
  __name(createUpDownCounter, "createUpDownCounter");
870
879
 
871
880
  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 };
872
- //# sourceMappingURL=chunk-Q6UAOZFZ.js.map
873
- //# sourceMappingURL=chunk-Q6UAOZFZ.js.map
881
+ //# sourceMappingURL=chunk-AWPNRV3L.js.map
882
+ //# sourceMappingURL=chunk-AWPNRV3L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/instrumentation/config.ts","../src/instrumentation/metrics-collector.ts"],"names":["ENV_VARS","INSTRUMENTATION_ENABLED","INSTRUMENTATION_TRACING","INSTRUMENTATION_METRICS","INSTRUMENTATION_LOGGING","INSTRUMENTATION_GRAPHQL","INSTRUMENTATION_DATABASE","INSTRUMENTATION_HTTP","INSTRUMENTATION_CACHE","INSTRUMENTATION_EVENT_QUEUE","OTEL_SERVICE_NAME","OTEL_SERVICE_VERSION","OTEL_ENVIRONMENT","OTEL_EXPORTER_OTLP_ENDPOINT","OTEL_EXPORTER_TYPE","OTEL_SAMPLING_RATE","OTEL_PROPAGATION_FORMAT","METRICS_EXPORTER_TYPE","METRICS_PROMETHEUS_ENDPOINT","METRICS_PROMETHEUS_PORT","METRICS_COLLECT_INTERVAL","METRICS_DEFAULT_ENABLED","METRICS_PREFIX","DB_INSTRUMENTATION_INCLUDE_STATEMENT","DB_INSTRUMENTATION_SLOW_QUERY_THRESHOLD","GRAPHQL_INSTRUMENTATION_INCLUDE_DOCUMENT","GRAPHQL_INSTRUMENTATION_INCLUDE_VARIABLES","GRAPHQL_INSTRUMENTATION_INCLUDE_RESOLVERS","getEnvBoolean","key","defaultValue","value","process","env","undefined","toLowerCase","getEnvNumber","parsed","parseFloat","isNaN","getEnvString","DEFAULT_FEATURE_FLAGS","tracing","metrics","logging","graphql","database","http","cache","eventQueue","DEFAULT_TRACING_CONFIG","enabled","serviceName","serviceVersion","environment","exporterType","samplingRate","propagationFormat","resourceAttributes","ignoredRoutes","ignoredOperations","DEFAULT_METRICS_CONFIG","prometheusEndpoint","prometheusPort","collectInterval","defaultMetrics","metricPrefix","DEFAULT_LOGGING_CONFIG","includeTraceId","includeSpanId","includeTraceFlags","level","DEFAULT_GRAPHQL_CONFIG","includeDocument","includeVariables","includeResult","documentDepth","includeResolvers","resolverSpanDepth","DEFAULT_DATABASE_CONFIG","includeStatement","includeParameters","includeRowCount","slowQueryThreshold","DEFAULT_HTTP_CONFIG","includeRequestHeaders","includeResponseHeaders","includeRequestBody","includeResponseBody","redactedHeaders","maxBodySize","DEFAULT_CACHE_CONFIG","includeKey","includeValueSize","includeTTL","DEFAULT_EVENT_QUEUE_CONFIG","includePayload","includeHeaders","maxPayloadSize","globalConfig","buildFeatureFlags","overrides","buildTracingConfig","exporterEndpoint","buildMetricsConfig","buildDatabaseConfig","buildGraphQLConfig","buildInstrumentationConfig","features","initializeInstrumentationConfig","getInstrumentationConfig","Error","isInstrumentationConfigInitialized","isFeatureEnabled","feature","updateInstrumentationConfig","updates","resetInstrumentationConfig","getLabelKey","labels","Object","keys","length","entries","sort","a","b","localeCompare","map","k","v","join","escapePrometheusLabelValue","replace","sanitizePrometheusMetricName","name","sanitized","test","formatPrometheusLabelPairs","labelKey","pairs","part","split","eq","indexOf","slice","push","InMemoryCounter","values","Map","description","add","current","get","set","inc","getValue","getName","getDescription","getAllValues","reset","clear","InMemoryHistogram","boundaries","record","existing","shift","getData","count","sum","min","max","avg","buckets","percentiles","p50","p75","p90","p95","p99","sorted","reduce","boundary","filter","Infinity","percentile","p","index","Math","ceil","getAllData","result","parseLabels","InMemoryGauge","sub","InMemoryUpDownCounter","NoOpCounter","NoOpHistogram","NoOpGauge","NoOpUpDownCounter","MetricsRegistry","counters","histograms","gauges","upDownCounters","getServiceName","isEnabled","getPrefixedName","createCounter","prefixedName","counter","createHistogram","histogram","createGauge","gauge","createUpDownCounter","createFromDefinition","definition","type","getAllMetrics","Array","from","c","h","data","g","exportCountersToPrometheus","lines","labelStr","exportHistogramsToPrometheus","le","leStr","toString","exportGaugesToPrometheus","exportUpDownCountersToPrometheus","toPrometheusFormat","globalRegistry","initializeMetricsRegistry","getMetricsRegistry","isMetricsRegistryInitialized","resetMetricsRegistry"],"mappings":"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","file":"chunk-AWPNRV3L.js","sourcesContent":["/**\n * Instrumentation Configuration\n *\n * Provides configuration management for OpenTelemetry instrumentation\n * with environment variable support and sensible defaults.\n *\n * @module instrumentation/config\n * @category Observability\n */\n\nimport type {\n CacheInstrumentationConfig,\n DatabaseInstrumentationConfig,\n EventQueueInstrumentationConfig,\n GraphQLInstrumentationConfig,\n HTTPInstrumentationConfig,\n InstrumentationConfig,\n InstrumentationFeatureFlags,\n LoggingConfig,\n MetricsConfig,\n TracingConfig,\n} from './types.js';\n\n/**\n * Environment variable names for instrumentation configuration\n */\nexport const ENV_VARS = {\n // Master switch\n INSTRUMENTATION_ENABLED: 'INSTRUMENTATION_ENABLED',\n\n // Feature flags\n INSTRUMENTATION_TRACING: 'INSTRUMENTATION_TRACING',\n INSTRUMENTATION_METRICS: 'INSTRUMENTATION_METRICS',\n INSTRUMENTATION_LOGGING: 'INSTRUMENTATION_LOGGING',\n INSTRUMENTATION_GRAPHQL: 'INSTRUMENTATION_GRAPHQL',\n INSTRUMENTATION_DATABASE: 'INSTRUMENTATION_DATABASE',\n INSTRUMENTATION_HTTP: 'INSTRUMENTATION_HTTP',\n INSTRUMENTATION_CACHE: 'INSTRUMENTATION_CACHE',\n INSTRUMENTATION_EVENT_QUEUE: 'INSTRUMENTATION_EVENT_QUEUE',\n\n // Tracing\n OTEL_SERVICE_NAME: 'OTEL_SERVICE_NAME',\n OTEL_SERVICE_VERSION: 'OTEL_SERVICE_VERSION',\n OTEL_ENVIRONMENT: 'OTEL_ENVIRONMENT',\n OTEL_EXPORTER_OTLP_ENDPOINT: 'OTEL_EXPORTER_OTLP_ENDPOINT',\n OTEL_EXPORTER_TYPE: 'OTEL_EXPORTER_TYPE',\n OTEL_SAMPLING_RATE: 'OTEL_SAMPLING_RATE',\n OTEL_PROPAGATION_FORMAT: 'OTEL_PROPAGATION_FORMAT',\n\n // Metrics\n METRICS_EXPORTER_TYPE: 'METRICS_EXPORTER_TYPE',\n METRICS_PROMETHEUS_ENDPOINT: 'METRICS_PROMETHEUS_ENDPOINT',\n METRICS_PROMETHEUS_PORT: 'METRICS_PROMETHEUS_PORT',\n METRICS_COLLECT_INTERVAL: 'METRICS_COLLECT_INTERVAL',\n METRICS_DEFAULT_ENABLED: 'METRICS_DEFAULT_ENABLED',\n METRICS_PREFIX: 'METRICS_PREFIX',\n\n // Database\n DB_INSTRUMENTATION_INCLUDE_STATEMENT: 'DB_INSTRUMENTATION_INCLUDE_STATEMENT',\n DB_INSTRUMENTATION_SLOW_QUERY_THRESHOLD: 'DB_INSTRUMENTATION_SLOW_QUERY_THRESHOLD',\n\n // GraphQL\n GRAPHQL_INSTRUMENTATION_INCLUDE_DOCUMENT: 'GRAPHQL_INSTRUMENTATION_INCLUDE_DOCUMENT',\n GRAPHQL_INSTRUMENTATION_INCLUDE_VARIABLES: 'GRAPHQL_INSTRUMENTATION_INCLUDE_VARIABLES',\n GRAPHQL_INSTRUMENTATION_INCLUDE_RESOLVERS: 'GRAPHQL_INSTRUMENTATION_INCLUDE_RESOLVERS',\n} as const;\n\n/**\n * Get environment variable as boolean\n */\nfunction getEnvBoolean(key: string, defaultValue: boolean): boolean {\n const value = process.env[key];\n if (value === undefined || value === '') return defaultValue;\n return value.toLowerCase() === 'true' || value === '1';\n}\n\n/**\n * Get environment variable as number\n */\nfunction getEnvNumber(key: string, defaultValue: number): number {\n const value = process.env[key];\n if (value === undefined || value === '') return defaultValue;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? defaultValue : parsed;\n}\n\n/**\n * Get environment variable as string\n */\nfunction getEnvString(key: string, defaultValue: string): string {\n const value = process.env[key];\n return value !== undefined && value !== '' ? value : defaultValue;\n}\n\n/**\n * Default feature flags\n */\nexport const DEFAULT_FEATURE_FLAGS: InstrumentationFeatureFlags = {\n tracing: true,\n metrics: true,\n logging: true,\n graphql: true,\n database: true,\n http: true,\n cache: true,\n eventQueue: true,\n};\n\n/**\n * Default tracing configuration\n */\nexport const DEFAULT_TRACING_CONFIG: TracingConfig = {\n enabled: true,\n serviceName: 'unknown-service',\n serviceVersion: '1.0.0',\n environment: 'development',\n exporterType: 'none',\n samplingRate: 1.0,\n propagationFormat: 'w3c',\n resourceAttributes: {},\n ignoredRoutes: ['/health', '/ready', '/live', '/metrics'],\n ignoredOperations: ['IntrospectionQuery'],\n};\n\n/**\n * Default metrics configuration\n */\nexport const DEFAULT_METRICS_CONFIG: MetricsConfig = {\n enabled: true,\n serviceName: 'unknown-service',\n exporterType: 'none',\n prometheusEndpoint: '/metrics',\n prometheusPort: 9090,\n collectInterval: 60000,\n defaultMetrics: true,\n metricPrefix: '',\n};\n\n/**\n * Default logging configuration\n */\nexport const DEFAULT_LOGGING_CONFIG: LoggingConfig = {\n enabled: true,\n includeTraceId: true,\n includeSpanId: true,\n includeTraceFlags: false,\n level: 'info',\n};\n\n/**\n * Default GraphQL instrumentation configuration\n */\nexport const DEFAULT_GRAPHQL_CONFIG: GraphQLInstrumentationConfig = {\n enabled: true,\n includeDocument: false,\n includeVariables: false,\n includeResult: false,\n documentDepth: 3,\n ignoredOperations: ['IntrospectionQuery'],\n includeResolvers: true,\n resolverSpanDepth: 3,\n};\n\n/**\n * Default database instrumentation configuration\n */\nexport const DEFAULT_DATABASE_CONFIG: DatabaseInstrumentationConfig = {\n enabled: true,\n includeStatement: false,\n includeParameters: false,\n includeRowCount: true,\n slowQueryThreshold: 1000,\n ignoredOperations: [],\n};\n\n/**\n * Default HTTP instrumentation configuration\n */\nexport const DEFAULT_HTTP_CONFIG: HTTPInstrumentationConfig = {\n enabled: true,\n includeRequestHeaders: false,\n includeResponseHeaders: false,\n includeRequestBody: false,\n includeResponseBody: false,\n redactedHeaders: ['authorization', 'cookie', 'set-cookie', 'x-api-key'],\n ignoredRoutes: ['/health', '/ready', '/live', '/metrics'],\n maxBodySize: 10240,\n};\n\n/**\n * Default cache instrumentation configuration\n */\nexport const DEFAULT_CACHE_CONFIG: CacheInstrumentationConfig = {\n enabled: true,\n includeKey: true,\n includeValueSize: true,\n includeTTL: true,\n};\n\n/**\n * Default event queue instrumentation configuration\n */\nexport const DEFAULT_EVENT_QUEUE_CONFIG: EventQueueInstrumentationConfig = {\n enabled: true,\n includePayload: false,\n includeHeaders: true,\n maxPayloadSize: 1024,\n};\n\n/**\n * Global instrumentation configuration state\n */\nlet globalConfig: InstrumentationConfig | null = null;\n\n/**\n * Build feature flags from environment variables\n */\nexport function buildFeatureFlags(overrides?: Partial<InstrumentationFeatureFlags>): InstrumentationFeatureFlags {\n return {\n tracing: getEnvBoolean(ENV_VARS.INSTRUMENTATION_TRACING, DEFAULT_FEATURE_FLAGS.tracing),\n metrics: getEnvBoolean(ENV_VARS.INSTRUMENTATION_METRICS, DEFAULT_FEATURE_FLAGS.metrics),\n logging: getEnvBoolean(ENV_VARS.INSTRUMENTATION_LOGGING, DEFAULT_FEATURE_FLAGS.logging),\n graphql: getEnvBoolean(ENV_VARS.INSTRUMENTATION_GRAPHQL, DEFAULT_FEATURE_FLAGS.graphql),\n database: getEnvBoolean(ENV_VARS.INSTRUMENTATION_DATABASE, DEFAULT_FEATURE_FLAGS.database),\n http: getEnvBoolean(ENV_VARS.INSTRUMENTATION_HTTP, DEFAULT_FEATURE_FLAGS.http),\n cache: getEnvBoolean(ENV_VARS.INSTRUMENTATION_CACHE, DEFAULT_FEATURE_FLAGS.cache),\n eventQueue: getEnvBoolean(ENV_VARS.INSTRUMENTATION_EVENT_QUEUE, DEFAULT_FEATURE_FLAGS.eventQueue),\n ...overrides,\n };\n}\n\n/**\n * Build tracing configuration from environment variables\n */\nexport function buildTracingConfig(serviceName: string, overrides?: Partial<TracingConfig>): TracingConfig {\n return {\n enabled: getEnvBoolean(ENV_VARS.INSTRUMENTATION_TRACING, DEFAULT_TRACING_CONFIG.enabled),\n serviceName: getEnvString(ENV_VARS.OTEL_SERVICE_NAME, serviceName),\n serviceVersion: getEnvString(ENV_VARS.OTEL_SERVICE_VERSION, DEFAULT_TRACING_CONFIG.serviceVersion!),\n environment: getEnvString(ENV_VARS.OTEL_ENVIRONMENT, process.env['NODE_ENV'] || 'development'),\n exporterEndpoint: process.env[ENV_VARS.OTEL_EXPORTER_OTLP_ENDPOINT],\n exporterType: getEnvString(ENV_VARS.OTEL_EXPORTER_TYPE, DEFAULT_TRACING_CONFIG.exporterType!) as\n | 'otlp'\n | 'console'\n | 'none',\n samplingRate: getEnvNumber(ENV_VARS.OTEL_SAMPLING_RATE, DEFAULT_TRACING_CONFIG.samplingRate!),\n propagationFormat: getEnvString(ENV_VARS.OTEL_PROPAGATION_FORMAT, DEFAULT_TRACING_CONFIG.propagationFormat!) as\n | 'w3c'\n | 'b3'\n | 'jaeger',\n resourceAttributes: DEFAULT_TRACING_CONFIG.resourceAttributes,\n ignoredRoutes: DEFAULT_TRACING_CONFIG.ignoredRoutes,\n ignoredOperations: DEFAULT_TRACING_CONFIG.ignoredOperations,\n ...overrides,\n };\n}\n\n/**\n * Build metrics configuration from environment variables\n */\nexport function buildMetricsConfig(serviceName: string, overrides?: Partial<MetricsConfig>): MetricsConfig {\n return {\n enabled: getEnvBoolean(ENV_VARS.INSTRUMENTATION_METRICS, DEFAULT_METRICS_CONFIG.enabled),\n serviceName: getEnvString(ENV_VARS.OTEL_SERVICE_NAME, serviceName),\n exporterEndpoint: process.env[ENV_VARS.OTEL_EXPORTER_OTLP_ENDPOINT],\n exporterType: getEnvString(ENV_VARS.METRICS_EXPORTER_TYPE, DEFAULT_METRICS_CONFIG.exporterType!) as\n | 'otlp'\n | 'prometheus'\n | 'console'\n | 'none',\n prometheusEndpoint: getEnvString(ENV_VARS.METRICS_PROMETHEUS_ENDPOINT, DEFAULT_METRICS_CONFIG.prometheusEndpoint!),\n prometheusPort: getEnvNumber(ENV_VARS.METRICS_PROMETHEUS_PORT, DEFAULT_METRICS_CONFIG.prometheusPort!),\n collectInterval: getEnvNumber(ENV_VARS.METRICS_COLLECT_INTERVAL, DEFAULT_METRICS_CONFIG.collectInterval!),\n defaultMetrics: getEnvBoolean(ENV_VARS.METRICS_DEFAULT_ENABLED, DEFAULT_METRICS_CONFIG.defaultMetrics!),\n metricPrefix: getEnvString(ENV_VARS.METRICS_PREFIX, DEFAULT_METRICS_CONFIG.metricPrefix!),\n ...overrides,\n };\n}\n\n/**\n * Build database instrumentation configuration\n */\nexport function buildDatabaseConfig(overrides?: Partial<DatabaseInstrumentationConfig>): DatabaseInstrumentationConfig {\n return {\n enabled: getEnvBoolean(ENV_VARS.INSTRUMENTATION_DATABASE, DEFAULT_DATABASE_CONFIG.enabled),\n includeStatement: getEnvBoolean(\n ENV_VARS.DB_INSTRUMENTATION_INCLUDE_STATEMENT,\n DEFAULT_DATABASE_CONFIG.includeStatement!\n ),\n includeParameters: DEFAULT_DATABASE_CONFIG.includeParameters,\n includeRowCount: DEFAULT_DATABASE_CONFIG.includeRowCount,\n slowQueryThreshold: getEnvNumber(\n ENV_VARS.DB_INSTRUMENTATION_SLOW_QUERY_THRESHOLD,\n DEFAULT_DATABASE_CONFIG.slowQueryThreshold!\n ),\n ignoredOperations: DEFAULT_DATABASE_CONFIG.ignoredOperations,\n ...overrides,\n };\n}\n\n/**\n * Build GraphQL instrumentation configuration\n */\nexport function buildGraphQLConfig(overrides?: Partial<GraphQLInstrumentationConfig>): GraphQLInstrumentationConfig {\n return {\n enabled: getEnvBoolean(ENV_VARS.INSTRUMENTATION_GRAPHQL, DEFAULT_GRAPHQL_CONFIG.enabled),\n includeDocument: getEnvBoolean(\n ENV_VARS.GRAPHQL_INSTRUMENTATION_INCLUDE_DOCUMENT,\n DEFAULT_GRAPHQL_CONFIG.includeDocument!\n ),\n includeVariables: getEnvBoolean(\n ENV_VARS.GRAPHQL_INSTRUMENTATION_INCLUDE_VARIABLES,\n DEFAULT_GRAPHQL_CONFIG.includeVariables!\n ),\n includeResult: DEFAULT_GRAPHQL_CONFIG.includeResult,\n documentDepth: DEFAULT_GRAPHQL_CONFIG.documentDepth,\n ignoredOperations: DEFAULT_GRAPHQL_CONFIG.ignoredOperations,\n includeResolvers: getEnvBoolean(\n ENV_VARS.GRAPHQL_INSTRUMENTATION_INCLUDE_RESOLVERS,\n DEFAULT_GRAPHQL_CONFIG.includeResolvers!\n ),\n resolverSpanDepth: DEFAULT_GRAPHQL_CONFIG.resolverSpanDepth,\n ...overrides,\n };\n}\n\n/**\n * Build complete instrumentation configuration\n */\nexport function buildInstrumentationConfig(\n serviceName: string,\n overrides?: Partial<InstrumentationConfig>\n): InstrumentationConfig {\n const enabled = getEnvBoolean(ENV_VARS.INSTRUMENTATION_ENABLED, true);\n\n return {\n enabled,\n features: buildFeatureFlags(overrides?.features),\n tracing: buildTracingConfig(serviceName, overrides?.tracing),\n metrics: buildMetricsConfig(serviceName, overrides?.metrics),\n logging: { ...DEFAULT_LOGGING_CONFIG, ...overrides?.logging },\n graphql: buildGraphQLConfig(overrides?.graphql),\n database: buildDatabaseConfig(overrides?.database),\n http: { ...DEFAULT_HTTP_CONFIG, ...overrides?.http },\n cache: { ...DEFAULT_CACHE_CONFIG, ...overrides?.cache },\n eventQueue: { ...DEFAULT_EVENT_QUEUE_CONFIG, ...overrides?.eventQueue },\n };\n}\n\n/**\n * Initialize global instrumentation configuration\n */\nexport function initializeInstrumentationConfig(\n serviceName: string,\n overrides?: Partial<InstrumentationConfig>\n): InstrumentationConfig {\n globalConfig = buildInstrumentationConfig(serviceName, overrides);\n return globalConfig;\n}\n\n/**\n * Get current instrumentation configuration\n * @throws Error if configuration not initialized\n */\nexport function getInstrumentationConfig(): InstrumentationConfig {\n if (!globalConfig) {\n throw new Error('Instrumentation config not initialized. Call initializeInstrumentationConfig() first.');\n }\n return globalConfig;\n}\n\n/**\n * Check if instrumentation configuration is initialized\n */\nexport function isInstrumentationConfigInitialized(): boolean {\n return globalConfig !== null;\n}\n\n/**\n * Check if a specific feature is enabled\n */\nexport function isFeatureEnabled(feature: keyof InstrumentationFeatureFlags): boolean {\n if (!globalConfig) return false;\n return globalConfig.enabled && globalConfig.features[feature];\n}\n\n/**\n * Update instrumentation configuration at runtime\n */\nexport function updateInstrumentationConfig(updates: Partial<InstrumentationConfig>): InstrumentationConfig {\n if (!globalConfig) {\n throw new Error('Instrumentation config not initialized. Call initializeInstrumentationConfig() first.');\n }\n globalConfig = { ...globalConfig, ...updates };\n return globalConfig;\n}\n\n/**\n * Reset instrumentation configuration (useful for testing)\n */\nexport function resetInstrumentationConfig(): void {\n globalConfig = null;\n}\n","/**\n * Metrics Collector Module\n *\n * OpenTelemetry-style metrics collection with counters, histograms,\n * and gauges for comprehensive service monitoring.\n *\n * @module instrumentation/metrics-collector\n * @category Observability\n */\n\nimport { isFeatureEnabled, isInstrumentationConfigInitialized } from './config.js';\nimport type { MetricDefinition } from './types.js';\n\n/**\n * Metric labels\n */\nexport type MetricLabels = Record<string, string>;\n\n/**\n * Counter metric interface\n */\nexport interface Counter {\n /** Add value to counter */\n add(value: number, labels?: MetricLabels): void;\n /** Increment counter by 1 */\n inc(labels?: MetricLabels): void;\n /** Get current value */\n getValue(labels?: MetricLabels): number;\n}\n\n/**\n * Histogram metric interface\n */\nexport interface Histogram {\n /** Record a value */\n record(value: number, labels?: MetricLabels): void;\n /** Get histogram data */\n getData(labels?: MetricLabels): HistogramData;\n}\n\n/**\n * Histogram data\n */\nexport interface HistogramData {\n count: number;\n sum: number;\n min: number;\n max: number;\n avg: number;\n buckets: Map<number, number>;\n percentiles: {\n p50: number;\n p75: number;\n p90: number;\n p95: number;\n p99: number;\n };\n}\n\n/**\n * Gauge metric interface\n */\nexport interface Gauge {\n /** Set gauge value */\n set(value: number, labels?: MetricLabels): void;\n /** Add to gauge value */\n add(value: number, labels?: MetricLabels): void;\n /** Subtract from gauge value */\n sub(value: number, labels?: MetricLabels): void;\n /** Get current value */\n getValue(labels?: MetricLabels): number;\n}\n\n/**\n * UpDownCounter metric interface (can go up or down)\n */\nexport interface UpDownCounter {\n /** Add value (can be negative) */\n add(value: number, labels?: MetricLabels): void;\n /** Get current value */\n getValue(labels?: MetricLabels): number;\n}\n\n/**\n * Generate label key for storage\n */\nfunction getLabelKey(labels?: MetricLabels): string {\n if (!labels || Object.keys(labels).length === 0) return '';\n return Object.entries(labels)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${v}`)\n .join(',');\n}\n\n/**\n * Escape a label value for the Prometheus text exposition format.\n *\n * The spec requires backslash, double quote, and line feed to be escaped.\n */\nfunction escapePrometheusLabelValue(value: string): string {\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n');\n}\n\n/**\n * Render the internal label key (`k=v,k2=v2`) as Prometheus label pairs\n * (`k=\"v\",k2=\"v2\"`), without the surrounding braces.\n *\n * The internal key is a Map key, not an exposition fragment: it leaves values\n * unquoted. Interpolating it straight into `{...}` produced output such as\n * `svc_requests{service=tags} 1`, which Prometheus rejects as a parse error —\n * and a parse error fails the *entire* scrape, not just the offending line, so\n * every service exposing SDK metrics scraped as down.\n *\n * Values containing a comma remain ambiguous because the flat key cannot encode\n * them; such labels are dropped rather than emitted as malformed pairs.\n */\n/**\n * Sanitize a metric name for the Prometheus text exposition format\n * (`[a-zA-Z_:][a-zA-Z0-9_:]*`). Registry names follow OTel conventions and\n * may contain dots (e.g. `resource_caps.plan_resolution_total`), but a dot in\n * an exposed metric name is a parse error — and a parse error fails the\n * ENTIRE scrape, so one dotted counter made every service that registered it\n * report as down (BOFF-6343: auth/tenant/devportal/tags/... all up==0 in AMP\n * while rbac, which never registers resource-caps counters, scraped fine).\n * Same failure class as the unquoted-label bug fixed above: sanitize at the\n * exposition boundary, exactly like the official OTel Prometheus exporters.\n */\nfunction sanitizePrometheusMetricName(name: string): string {\n const sanitized = name.replace(/[^a-zA-Z0-9_:]/g, '_');\n return /^[a-zA-Z_:]/.test(sanitized) ? sanitized : `_${sanitized}`;\n}\n\nfunction formatPrometheusLabelPairs(labelKey: string): string {\n if (!labelKey) return '';\n const pairs: string[] = [];\n for (const part of labelKey.split(',')) {\n const eq = part.indexOf('=');\n if (eq <= 0) continue;\n const name = part.slice(0, eq);\n const value = part.slice(eq + 1);\n pairs.push(`${name}=\"${escapePrometheusLabelValue(value)}\"`);\n }\n return pairs.join(',');\n}\n\n/**\n * In-memory counter implementation\n */\nclass InMemoryCounter implements Counter {\n private values: Map<string, number> = new Map();\n private readonly name: string;\n private readonly description: string;\n\n constructor(name: string, description: string) {\n this.name = name;\n this.description = description;\n }\n\n add(value: number, labels?: MetricLabels): void {\n const key = getLabelKey(labels);\n const current = this.values.get(key) || 0;\n this.values.set(key, current + value);\n }\n\n inc(labels?: MetricLabels): void {\n this.add(1, labels);\n }\n\n getValue(labels?: MetricLabels): number {\n const key = getLabelKey(labels);\n return this.values.get(key) || 0;\n }\n\n getName(): string {\n return this.name;\n }\n\n getDescription(): string {\n return this.description;\n }\n\n getAllValues(): Map<string, number> {\n return new Map(this.values);\n }\n\n reset(): void {\n this.values.clear();\n }\n}\n\n/**\n * In-memory histogram implementation\n */\nclass InMemoryHistogram implements Histogram {\n private values: Map<string, number[]> = new Map();\n private readonly name: string;\n private readonly description: string;\n private readonly boundaries: number[];\n\n constructor(name: string, description: string, boundaries?: number[]) {\n this.name = name;\n this.description = description;\n this.boundaries = boundaries || [5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000];\n }\n\n record(value: number, labels?: MetricLabels): void {\n const key = getLabelKey(labels);\n const existing = this.values.get(key) || [];\n existing.push(value);\n\n // Keep only last 10000 values per label combination\n if (existing.length > 10000) {\n existing.shift();\n }\n\n this.values.set(key, existing);\n }\n\n getData(labels?: MetricLabels): HistogramData {\n const key = getLabelKey(labels);\n const values = this.values.get(key) || [];\n\n if (values.length === 0) {\n return {\n count: 0,\n sum: 0,\n min: 0,\n max: 0,\n avg: 0,\n buckets: new Map(),\n percentiles: { p50: 0, p75: 0, p90: 0, p95: 0, p99: 0 },\n };\n }\n\n const sorted = [...values].sort((a, b) => a - b);\n const sum = values.reduce((a, b) => a + b, 0);\n\n // Calculate bucket counts\n const buckets = new Map<number, number>();\n for (const boundary of this.boundaries) {\n buckets.set(boundary, values.filter((v) => v <= boundary).length);\n }\n buckets.set(Infinity, values.length);\n\n // Calculate percentiles\n const percentile = (p: number): number => {\n const index = Math.ceil((p / 100) * sorted.length) - 1;\n return sorted[Math.max(0, index)] || 0;\n };\n\n return {\n count: values.length,\n sum,\n min: sorted[0] || 0,\n max: sorted[sorted.length - 1] || 0,\n avg: sum / values.length,\n buckets,\n percentiles: {\n p50: percentile(50),\n p75: percentile(75),\n p90: percentile(90),\n p95: percentile(95),\n p99: percentile(99),\n },\n };\n }\n\n getName(): string {\n return this.name;\n }\n\n getDescription(): string {\n return this.description;\n }\n\n getAllData(): Map<string, HistogramData> {\n const result = new Map<string, HistogramData>();\n for (const [key] of this.values) {\n result.set(key, this.getData(key ? this.parseLabels(key) : undefined));\n }\n return result;\n }\n\n private parseLabels(key: string): MetricLabels {\n const labels: MetricLabels = {};\n for (const part of key.split(',')) {\n const [k, v] = part.split('=');\n if (k && v) labels[k] = v;\n }\n return labels;\n }\n\n reset(): void {\n this.values.clear();\n }\n}\n\n/**\n * In-memory gauge implementation\n */\nclass InMemoryGauge implements Gauge {\n private values: Map<string, number> = new Map();\n private readonly name: string;\n private readonly description: string;\n\n constructor(name: string, description: string) {\n this.name = name;\n this.description = description;\n }\n\n set(value: number, labels?: MetricLabels): void {\n const key = getLabelKey(labels);\n this.values.set(key, value);\n }\n\n // eslint-disable-next-line sonarjs/no-identical-functions -- Shared implementation across metric types by design\n add(value: number, labels?: MetricLabels): void {\n const key = getLabelKey(labels);\n const current = this.values.get(key) || 0;\n this.values.set(key, current + value);\n }\n\n sub(value: number, labels?: MetricLabels): void {\n this.add(-value, labels);\n }\n\n getValue(labels?: MetricLabels): number {\n const key = getLabelKey(labels);\n return this.values.get(key) || 0;\n }\n\n getName(): string {\n return this.name;\n }\n\n getDescription(): string {\n return this.description;\n }\n\n getAllValues(): Map<string, number> {\n return new Map(this.values);\n }\n\n reset(): void {\n this.values.clear();\n }\n}\n\n/**\n * In-memory UpDownCounter implementation\n */\nclass InMemoryUpDownCounter implements UpDownCounter {\n private values: Map<string, number> = new Map();\n private readonly name: string;\n private readonly description: string;\n\n constructor(name: string, description: string) {\n this.name = name;\n this.description = description;\n }\n\n // eslint-disable-next-line sonarjs/no-identical-functions -- Shared implementation across metric types by design\n add(value: number, labels?: MetricLabels): void {\n const key = getLabelKey(labels);\n const current = this.values.get(key) || 0;\n this.values.set(key, current + value);\n }\n\n getValue(labels?: MetricLabels): number {\n const key = getLabelKey(labels);\n return this.values.get(key) || 0;\n }\n\n getName(): string {\n return this.name;\n }\n\n getDescription(): string {\n return this.description;\n }\n\n getAllValues(): Map<string, number> {\n return new Map(this.values);\n }\n\n reset(): void {\n this.values.clear();\n }\n}\n\n/**\n * No-op implementations for when metrics are disabled\n */\nclass NoOpCounter implements Counter {\n add(): void {}\n inc(): void {}\n getValue(): number {\n return 0;\n }\n}\n\nclass NoOpHistogram implements Histogram {\n record(): void {}\n getData(): HistogramData {\n return {\n count: 0,\n sum: 0,\n min: 0,\n max: 0,\n avg: 0,\n buckets: new Map(),\n percentiles: { p50: 0, p75: 0, p90: 0, p95: 0, p99: 0 },\n };\n }\n}\n\nclass NoOpGauge implements Gauge {\n set(): void {}\n add(): void {}\n sub(): void {}\n getValue(): number {\n return 0;\n }\n}\n\nclass NoOpUpDownCounter implements UpDownCounter {\n add(): void {}\n getValue(): number {\n return 0;\n }\n}\n\n/**\n * Metrics registry for managing all metrics\n */\nexport class MetricsRegistry {\n private counters: Map<string, InMemoryCounter> = new Map();\n private histograms: Map<string, InMemoryHistogram> = new Map();\n private gauges: Map<string, InMemoryGauge> = new Map();\n private upDownCounters: Map<string, InMemoryUpDownCounter> = new Map();\n private serviceName: string;\n private metricPrefix: string;\n\n constructor(serviceName: string, metricPrefix = '') {\n this.serviceName = serviceName;\n this.metricPrefix = metricPrefix;\n }\n\n /**\n * Get service name\n */\n getServiceName(): string {\n return this.serviceName;\n }\n\n /**\n * Check if metrics are enabled\n */\n private isEnabled(): boolean {\n return isInstrumentationConfigInitialized() && isFeatureEnabled('metrics');\n }\n\n /**\n * Get prefixed metric name\n */\n private getPrefixedName(name: string): string {\n return this.metricPrefix ? `${this.metricPrefix}_${name}` : name;\n }\n\n /**\n * Create or get a counter\n */\n createCounter(name: string, description: string): Counter {\n if (!this.isEnabled()) {\n return new NoOpCounter();\n }\n\n const prefixedName = this.getPrefixedName(name);\n let counter = this.counters.get(prefixedName);\n if (!counter) {\n counter = new InMemoryCounter(prefixedName, description);\n this.counters.set(prefixedName, counter);\n }\n return counter;\n }\n\n /**\n * Create or get a histogram\n */\n createHistogram(name: string, description: string, boundaries?: number[]): Histogram {\n if (!this.isEnabled()) {\n return new NoOpHistogram();\n }\n\n const prefixedName = this.getPrefixedName(name);\n let histogram = this.histograms.get(prefixedName);\n if (!histogram) {\n histogram = new InMemoryHistogram(prefixedName, description, boundaries);\n this.histograms.set(prefixedName, histogram);\n }\n return histogram;\n }\n\n /**\n * Create or get a gauge\n */\n createGauge(name: string, description: string): Gauge {\n if (!this.isEnabled()) {\n return new NoOpGauge();\n }\n\n const prefixedName = this.getPrefixedName(name);\n let gauge = this.gauges.get(prefixedName);\n if (!gauge) {\n gauge = new InMemoryGauge(prefixedName, description);\n this.gauges.set(prefixedName, gauge);\n }\n return gauge;\n }\n\n /**\n * Create or get an up-down counter\n */\n createUpDownCounter(name: string, description: string): UpDownCounter {\n if (!this.isEnabled()) {\n return new NoOpUpDownCounter();\n }\n\n const prefixedName = this.getPrefixedName(name);\n let counter = this.upDownCounters.get(prefixedName);\n if (!counter) {\n counter = new InMemoryUpDownCounter(prefixedName, description);\n this.upDownCounters.set(prefixedName, counter);\n }\n return counter;\n }\n\n /**\n * Create metric from definition\n */\n createFromDefinition(definition: MetricDefinition): Counter | Histogram | Gauge | UpDownCounter {\n switch (definition.type) {\n case 'counter':\n return this.createCounter(definition.name, definition.description);\n case 'histogram':\n return this.createHistogram(definition.name, definition.description, definition.boundaries);\n case 'gauge':\n return this.createGauge(definition.name, definition.description);\n case 'upDownCounter':\n return this.createUpDownCounter(definition.name, definition.description);\n default:\n throw new Error(`Unknown metric type: ${definition.type}`);\n }\n }\n\n /**\n * Get all metrics data\n */\n getAllMetrics(): {\n counters: Array<{ name: string; description: string; values: Map<string, number> }>;\n histograms: Array<{ name: string; description: string; data: Map<string, HistogramData> }>;\n gauges: Array<{ name: string; description: string; values: Map<string, number> }>;\n upDownCounters: Array<{ name: string; description: string; values: Map<string, number> }>;\n } {\n return {\n counters: Array.from(this.counters.values()).map((c) => ({\n name: c.getName(),\n description: c.getDescription(),\n values: c.getAllValues(),\n })),\n histograms: Array.from(this.histograms.values()).map((h) => ({\n name: h.getName(),\n description: h.getDescription(),\n data: h.getAllData(),\n })),\n gauges: Array.from(this.gauges.values()).map((g) => ({\n name: g.getName(),\n description: g.getDescription(),\n values: g.getAllValues(),\n })),\n upDownCounters: Array.from(this.upDownCounters.values()).map((c) => ({\n name: c.getName(),\n description: c.getDescription(),\n values: c.getAllValues(),\n })),\n };\n }\n\n /**\n * Export counter metrics to Prometheus format\n */\n private exportCountersToPrometheus(lines: string[]): void {\n for (const counter of this.counters.values()) {\n const name = sanitizePrometheusMetricName(counter.getName());\n lines.push(`# HELP ${name} ${counter.getDescription()}`);\n lines.push(`# TYPE ${name} counter`);\n for (const [labels, value] of counter.getAllValues()) {\n const pairs = formatPrometheusLabelPairs(labels);\n const labelStr = pairs ? `{${pairs}}` : '';\n lines.push(`${name}${labelStr} ${value}`);\n }\n }\n }\n\n /**\n * Export histogram metrics to Prometheus format\n */\n private exportHistogramsToPrometheus(lines: string[]): void {\n for (const histogram of this.histograms.values()) {\n const name = sanitizePrometheusMetricName(histogram.getName());\n lines.push(`# HELP ${name} ${histogram.getDescription()}`);\n lines.push(`# TYPE ${name} histogram`);\n for (const [labels, data] of histogram.getAllData()) {\n const pairs = formatPrometheusLabelPairs(labels);\n const labelStr = pairs ? `,${pairs}` : '';\n for (const [le, count] of data.buckets) {\n const leStr = le === Infinity ? '+Inf' : le.toString();\n lines.push(`${name}_bucket{le=\"${leStr}\"${labelStr}} ${count}`);\n }\n lines.push(`${name}_sum{${pairs}} ${data.sum}`);\n lines.push(`${name}_count{${pairs}} ${data.count}`);\n }\n }\n }\n\n /**\n * Export gauge metrics to Prometheus format\n */\n private exportGaugesToPrometheus(lines: string[]): void {\n for (const gauge of this.gauges.values()) {\n const name = sanitizePrometheusMetricName(gauge.getName());\n lines.push(`# HELP ${name} ${gauge.getDescription()}`);\n lines.push(`# TYPE ${name} gauge`);\n for (const [labels, value] of gauge.getAllValues()) {\n const pairs = formatPrometheusLabelPairs(labels);\n const labelStr = pairs ? `{${pairs}}` : '';\n lines.push(`${name}${labelStr} ${value}`);\n }\n }\n }\n\n /**\n * Export up-down counter metrics to Prometheus format (as gauges)\n */\n private exportUpDownCountersToPrometheus(lines: string[]): void {\n for (const counter of this.upDownCounters.values()) {\n const name = sanitizePrometheusMetricName(counter.getName());\n lines.push(`# HELP ${name} ${counter.getDescription()}`);\n lines.push(`# TYPE ${name} gauge`);\n for (const [labels, value] of counter.getAllValues()) {\n const pairs = formatPrometheusLabelPairs(labels);\n const labelStr = pairs ? `{${pairs}}` : '';\n lines.push(`${name}${labelStr} ${value}`);\n }\n }\n }\n\n /**\n * Export metrics in Prometheus format\n */\n toPrometheusFormat(): string {\n const lines: string[] = [];\n\n this.exportCountersToPrometheus(lines);\n this.exportHistogramsToPrometheus(lines);\n this.exportGaugesToPrometheus(lines);\n this.exportUpDownCountersToPrometheus(lines);\n\n return lines.join('\\n');\n }\n\n /**\n * Reset all metrics\n */\n reset(): void {\n for (const counter of this.counters.values()) {\n counter.reset();\n }\n for (const histogram of this.histograms.values()) {\n histogram.reset();\n }\n for (const gauge of this.gauges.values()) {\n gauge.reset();\n }\n for (const counter of this.upDownCounters.values()) {\n counter.reset();\n }\n }\n\n /**\n * Clear all metrics (remove registrations)\n */\n clear(): void {\n this.counters.clear();\n this.histograms.clear();\n this.gauges.clear();\n this.upDownCounters.clear();\n }\n}\n\n/**\n * Global metrics registry\n */\nlet globalRegistry: MetricsRegistry | null = null;\n\n/**\n * Initialize global metrics registry\n */\nexport function initializeMetricsRegistry(serviceName: string, metricPrefix = ''): MetricsRegistry {\n globalRegistry = new MetricsRegistry(serviceName, metricPrefix);\n return globalRegistry;\n}\n\n/**\n * Get global metrics registry\n */\nexport function getMetricsRegistry(): MetricsRegistry {\n if (!globalRegistry) {\n globalRegistry = new MetricsRegistry('unknown-service');\n }\n return globalRegistry;\n}\n\n/**\n * Check if metrics registry is initialized\n */\nexport function isMetricsRegistryInitialized(): boolean {\n return globalRegistry !== null;\n}\n\n/**\n * Reset global metrics registry (useful for testing)\n */\nexport function resetMetricsRegistry(): void {\n if (globalRegistry) {\n globalRegistry.clear();\n }\n globalRegistry = null;\n}\n\n/**\n * Convenience functions for creating metrics\n */\nexport function createCounter(name: string, description: string): Counter {\n return getMetricsRegistry().createCounter(name, description);\n}\n\nexport function createHistogram(name: string, description: string, boundaries?: number[]): Histogram {\n return getMetricsRegistry().createHistogram(name, description, boundaries);\n}\n\nexport function createGauge(name: string, description: string): Gauge {\n return getMetricsRegistry().createGauge(name, description);\n}\n\nexport function createUpDownCounter(name: string, description: string): UpDownCounter {\n return getMetricsRegistry().createUpDownCounter(name, description);\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { configureResourceCaps } from './chunk-RJK4MPDW.js';
2
- import { createCounter } from './chunk-Q6UAOZFZ.js';
1
+ import { configureResourceCaps } from './chunk-XWVP4MC6.js';
2
+ import { createCounter } from './chunk-AWPNRV3L.js';
3
3
  import { GatewayClient } from './chunk-MVXXLAO5.js';
4
4
  import { LayerManager } from './chunk-7UJXIX4I.js';
5
5
  import { logger } from './chunk-CBZNP6RF.js';
@@ -267,5 +267,5 @@ async function initializeLayerStreams(config) {
267
267
  __name(initializeLayerStreams, "initializeLayerStreams");
268
268
 
269
269
  export { getSDKState, init_exports, initializeBurdenoffSDK, isSDKInitialized, resetSDK };
270
- //# sourceMappingURL=chunk-I4PU5B7Q.js.map
271
- //# sourceMappingURL=chunk-I4PU5B7Q.js.map
270
+ //# sourceMappingURL=chunk-J4GHZLIY.js.map
271
+ //# sourceMappingURL=chunk-J4GHZLIY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/init/index.ts"],"names":["sdkState","isInitialized","initializeBurdenoffSDK","config","logger","warn","info","startTime","Date","now","initializeLogging","layerManager","gatewayClient","initializeLayer","layer","layerType","type","fallbackCounter","createCounter","configureResourceCaps","transport","query","variables","options","timeout","skipRetry","skipCircuitBreaker","response","internalQuery","crossLayerQuery","data","onFallback","inc","prisma","initializeDatabase","valkey","initializeCache","eventPublisher","initializeEventQueue","autoCreateStreams","initializeLayerStreams","graphSync","initializeGraphSync","clickhouse","initializeAnalytics","initializeObservability","graphSyncEnabled","graph","enabled","analyticsEnabled","analytics","observabilityEnabled","observability","metrics","layerAwareEnabled","duration","initializedState","serviceName","error","getSDKState","Error","isSDKInitialized","resetSDK","loggingConfig","logging","isDevelopment","app","nodeEnv","level","setLevel","console","setConsoleEnabled","format","database","url","maxConnections","enableQueryLogging","undefined","cacheConfig","cache","defaultTTL","_config","process","env","EventQueueFactory","publisher","createPublisherFromEnv","connect","message","String","note","eventsEnabled","productSource","streamName","syncInterval","batchSize","requestTimeout","openTelemetry","port","endpoint","samplingRate","LayerManager","serviceIdentity","GatewayClient","internalGatewayUrl","getInternalGatewayUrl","crossLayerGatewayUrl","getCrossLayerGatewayUrl","debug"],"mappings":"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","file":"chunk-I4PU5B7Q.js","sourcesContent":["/**\n * Burdenoff SDK Initialization Module\n *\n * Provides a unified initialization function for all state services\n * including database, cache, analytics, event queue, and graph sync.\n *\n * @module init\n * @category Initialization\n */\n\nimport { logger } from '../logger/index.js';\nimport { LayerManager } from '../layer/index.js';\nimport { GatewayClient } from '../gateway/index.js';\nimport { configureResourceCaps } from '../resource-caps/index.js';\nimport { createCounter } from '../instrumentation/metrics-collector.js';\nimport type { BurdenoffSDKInitConfig, InitializedSDKState } from './types.js';\n\n/**\n * Global SDK state\n */\nlet sdkState: InitializedSDKState | null = null;\nlet isInitialized = false;\n\n/**\n * Initialize Burdenoff SDK with unified configuration\n *\n * This function initializes all configured state services in the correct order:\n * 1. Logging configuration\n * 2. Database (Prisma with PostgreSQL)\n * 3. Cache (Valkey)\n * 4. Event Queue (Redis Streams)\n * 5. Graph Sync (Redis Streams-based — Apache AGE writes happen inside wspace-graph-svc)\n * 6. Analytics (ClickHouse)\n * 7. Observability (Metrics, OpenTelemetry)\n *\n * @param config - SDK initialization configuration\n * @returns Initialized SDK state\n *\n * @example\n * ```typescript\n * import { initializeBurdenoffSDK } from '@burdenoff/be-sdk/init';\n *\n * const state = await initializeBurdenoffSDK({\n * database: {\n * url: process.env.DATABASE_URL!,\n * maxConnections: 20,\n * },\n * graph: {\n * enabled: true,\n * eventsEnabled: true,\n * },\n * cache: {\n * valkey: {\n * url: process.env.VALKEY_URL!,\n * },\n * },\n * });\n * ```\n */\nexport async function initializeBurdenoffSDK(config: BurdenoffSDKInitConfig): Promise<InitializedSDKState> {\n if (isInitialized && sdkState) {\n logger.warn('[SDK Init] SDK already initialized, returning existing state');\n return sdkState;\n }\n\n logger.info('[SDK Init] Starting SDK initialization...');\n const startTime = Date.now();\n\n try {\n // 1. Configure logging\n await initializeLogging(config);\n\n // 2. Initialize layer manager (if configured)\n const { layerManager, gatewayClient } = await initializeLayer(config);\n\n // 2b. Wire resource caps to billing so plan-based limits actually apply.\n // `userBillingPlan` lives in the GLOBAL layer: global services reach it\n // on their own internal gateway; wspace services go cross-layer via the\n // public global gateway (service JWT). Without this, every resource cap\n // silently collapses to the free-tier fallback regardless of the\n // customer's plan (BOFF-4805). Primes the process-wide singleton so all\n // existing `getResourceCaps()` call sites resolve real plans unchanged.\n if (gatewayClient && config.layer) {\n const layerType = config.layer.type;\n const fallbackCounter = createCounter(\n 'resource_caps.clientless_fallback_total',\n 'Total number of times resource caps fell back because no billing source was configured at bootstrap'\n );\n configureResourceCaps({\n transport: async (query, variables) => {\n // Cap checks run on entity-create paths and ALWAYS fall back to the\n // configured billing-failure tier on failure, so a billing outage\n // must degrade fast rather than stall writes. Bound the lookup with a\n // short timeout and no retries instead of the gateway defaults\n // (~30s × 3 ≈ 90s). Results are cached 60s, so healthy lookups rarely\n // hit the gateway anyway. `skipCircuitBreaker` keeps this best-effort\n // probe OUT of the shared gateway circuit: its failures already\n // degrade to the fallback here, so they must not count toward opening\n // the internal/cross-layer circuit and fail-fast unrelated M2M calls\n // during a billing outage.\n const options = { query, variables, timeout: 8000, skipRetry: true, skipCircuitBreaker: true };\n const response =\n layerType === 'global'\n ? await gatewayClient.internalQuery(options)\n : await gatewayClient.crossLayerQuery(options);\n return response?.data ?? null;\n },\n // Emitting a dedicated clientless-fallback counter at bootstrap means\n // a service that somehow starts without a billing transport is\n // immediately visible in metrics (BOFF-4809). The resource-caps module\n // itself also emits `resource_caps.plan_resolution_total`, but that\n // only fires on the first cap check; this counter fires at bootstrap.\n onFallback: () => fallbackCounter.inc(),\n });\n logger.info('[SDK Init] Resource caps wired to billing', { layer: layerType });\n } else {\n logger.warn('[SDK Init] No layer/gateway configured — resource caps will use free-tier fallbacks (BOFF-4805)');\n }\n\n // 3. Initialize database (required)\n const prisma = await initializeDatabase(config);\n\n // 4. Initialize cache (optional)\n const valkey = await initializeCache(config);\n\n // 5. Initialize event queue (optional) — Redis Streams via REDIS_URL\n const eventPublisher = await initializeEventQueue(config);\n\n // 6. Initialize layer streams (if layer configured)\n if (config.layer?.autoCreateStreams !== false && config.layer) {\n await initializeLayerStreams(config);\n }\n\n // 7. Initialize graph sync (optional) — publisher emits to Redis Streams,\n // never opens a graph-DB connection\n const graphSync = await initializeGraphSync(config);\n\n // 8. Initialize analytics (optional)\n const clickhouse = await initializeAnalytics(config);\n\n // 9. Initialize observability (optional)\n await initializeObservability(config);\n\n // Create SDK state\n // graphSync is a publisher-side placeholder; services emit Redis Streams\n // events and wspace-graph-svc owns the sole Apache AGE connection.\n void graphSync;\n sdkState = {\n prisma,\n valkey,\n clickhouse,\n eventPublisher,\n layerManager,\n gatewayClient,\n graphSyncEnabled: config.graph?.enabled ?? false,\n analyticsEnabled: !!config.analytics?.clickhouse,\n observabilityEnabled: config.observability?.metrics?.enabled ?? false,\n layerAwareEnabled: !!config.layer,\n };\n\n isInitialized = true;\n\n const duration = Date.now() - startTime;\n // sdkState is guaranteed non-null here since we just assigned it above\n const initializedState = sdkState;\n logger.info(`[SDK Init] SDK initialized successfully in ${duration}ms`, {\n graphSyncEnabled: initializedState.graphSyncEnabled,\n analyticsEnabled: initializedState.analyticsEnabled,\n observabilityEnabled: initializedState.observabilityEnabled,\n layerAwareEnabled: initializedState.layerAwareEnabled,\n layer: config.layer?.type,\n serviceName: config.layer?.serviceName,\n });\n\n return initializedState;\n } catch (error) {\n logger.error('[SDK Init] Failed to initialize SDK:', error);\n throw error;\n }\n}\n\n/**\n * Get current SDK state\n * @throws Error if SDK is not initialized\n */\nexport function getSDKState(): InitializedSDKState {\n if (!isInitialized || !sdkState) {\n throw new Error('SDK not initialized. Call initializeBurdenoffSDK() first.');\n }\n return sdkState;\n}\n\n/**\n * Check if SDK is initialized\n */\nexport function isSDKInitialized(): boolean {\n return isInitialized;\n}\n\n/**\n * Reset SDK state (useful for testing)\n */\nexport async function resetSDK(): Promise<void> {\n logger.info('[SDK Init] Resetting SDK state...');\n\n if (sdkState) {\n // Cleanup resources\n // Note: Individual cleanup will be handled by service-specific shutdown handlers\n sdkState = null;\n }\n\n isInitialized = false;\n logger.info('[SDK Init] SDK state reset');\n}\n\n/**\n * Initialize logging configuration\n */\nasync function initializeLogging(config: BurdenoffSDKInitConfig): Promise<void> {\n logger.info('[SDK Init] Configuring logging...');\n\n const loggingConfig = config.logging ?? {};\n const isDevelopment = config.app?.nodeEnv === 'development';\n\n // Set log level\n const level = loggingConfig.level ?? 'info';\n logger.setLevel(level);\n\n // Set console logging\n const console = loggingConfig.console ?? true;\n logger.setConsoleEnabled(console);\n\n logger.info('[SDK Init] Logging configured', {\n level,\n console,\n format: loggingConfig.format ?? (isDevelopment ? 'pretty' : 'json'),\n });\n}\n\n/**\n * Initialize database (Prisma with PostgreSQL)\n */\nasync function initializeDatabase(config: BurdenoffSDKInitConfig): Promise<unknown> {\n logger.info('[SDK Init] Initializing database...');\n\n // Note: Database initialization is handled by createPrismaClient in prisma/client.ts\n // This is called by the application (e.g., workspaces-backend)\n // We just validate the config here\n if (!config.database?.url) {\n throw new Error('Database URL is required');\n }\n\n logger.info('[SDK Init] Database configuration validated', {\n maxConnections: config.database.maxConnections ?? 20,\n enableQueryLogging: config.database.enableQueryLogging ?? false,\n });\n\n // Return undefined as database client is created separately\n return undefined;\n}\n\n/**\n * Initialize cache (Valkey)\n */\nasync function initializeCache(config: BurdenoffSDKInitConfig): Promise<unknown> {\n const cacheConfig = config.cache?.valkey;\n\n if (!cacheConfig) {\n logger.info('[SDK Init] Cache not configured, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Initializing Valkey cache...');\n\n // Note: Valkey initialization is handled by cache module\n // This is a placeholder for future implementation\n logger.info('[SDK Init] Valkey cache configuration validated', {\n url: cacheConfig.url ? '***' : undefined,\n defaultTTL: cacheConfig.defaultTTL ?? 3600,\n });\n\n return undefined;\n}\n\n/**\n * Initialize event queue (Redis Streams).\n *\n * NATS was retired on 2026-05-16. The publisher is created from\n * `REDIS_URL` (set platform-wide in KV). Legacy `config.eventQueue.nats`\n * values are ignored — kept on the type only as a back-compat shim.\n */\nasync function initializeEventQueue(_config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!process.env['REDIS_URL']) {\n logger.info('[SDK Init] REDIS_URL not set, skipping event queue init');\n return undefined;\n }\n\n try {\n const { EventQueueFactory } = await import('../event-queue/factory/EventQueueFactory.js');\n const publisher = EventQueueFactory.createPublisherFromEnv();\n await publisher.connect();\n\n logger.info('[SDK Init] Redis Streams event publisher connected');\n\n return publisher;\n } catch (error) {\n logger.warn('[SDK Init] Failed to connect Redis Streams event publisher (non-fatal)', {\n error: error instanceof Error ? error.message : String(error),\n note: 'Service will continue without event publishing. Use direct API calls as fallback.',\n });\n return undefined;\n }\n}\n\n/**\n * Initialize graph sync (Redis Streams publisher side).\n *\n * Services publish entity events to Redis Streams; the `wspace-graph-svc`\n * consumer (and only it) persists them into Apache AGE via Azure PG\n * sidecar. This SDK function does no DB work — it just validates that the\n * publisher-side config is sensible and logs it.\n */\nasync function initializeGraphSync(config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!config.graph?.enabled) {\n logger.info('[SDK Init] Graph sync not enabled, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Graph sync enabled (publisher-only mode)', {\n eventsEnabled: config.graph.eventsEnabled ?? true,\n productSource: config.graph.productSource,\n streamName: config.graph.streamName ?? 'graph_events',\n syncInterval: config.graph.syncInterval ?? 1000,\n batchSize: config.graph.batchSize ?? 10,\n });\n\n return undefined;\n}\n\n/**\n * Initialize analytics (ClickHouse)\n */\nasync function initializeAnalytics(config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!config.analytics?.clickhouse) {\n logger.info('[SDK Init] Analytics not configured, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Initializing ClickHouse for analytics...');\n\n // Note: ClickHouse initialization is handled by analytics module\n // This is a placeholder for future implementation\n logger.info('[SDK Init] ClickHouse configuration validated', {\n url: config.analytics.clickhouse.url,\n database: config.analytics.clickhouse.database,\n requestTimeout: config.analytics.clickhouse.requestTimeout ?? 60000,\n });\n\n return undefined;\n}\n\n/**\n * Initialize observability (metrics, tracing)\n */\nasync function initializeObservability(config: BurdenoffSDKInitConfig): Promise<void> {\n if (!config.observability?.metrics?.enabled && !config.observability?.openTelemetry?.enabled) {\n logger.info('[SDK Init] Observability not configured, skipping');\n return;\n }\n\n logger.info('[SDK Init] Initializing observability...');\n\n // Note: Observability initialization is handled by observability module\n // This is a placeholder for future implementation\n if (config.observability.metrics?.enabled) {\n logger.info('[SDK Init] Metrics configuration validated', {\n port: config.observability.metrics.port ?? 9090,\n endpoint: config.observability.metrics.endpoint ?? '/metrics',\n });\n }\n\n if (config.observability.openTelemetry?.enabled) {\n logger.info('[SDK Init] OpenTelemetry configuration validated', {\n serviceName: config.observability.openTelemetry.serviceName,\n samplingRate: config.observability.openTelemetry.samplingRate ?? 1.0,\n });\n }\n}\n\n/**\n * Initialize layer manager and gateway client\n */\nasync function initializeLayer(\n config: BurdenoffSDKInitConfig\n): Promise<{ layerManager?: LayerManager; gatewayClient?: GatewayClient }> {\n if (!config.layer) {\n logger.info('[SDK Init] Layer configuration not provided, skipping layer initialization');\n return {};\n }\n\n logger.info('[SDK Init] Initializing layer manager...', {\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n });\n\n // Create layer manager\n const layerManager = new LayerManager({\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n serviceIdentity: config.layer.serviceIdentity,\n });\n\n // Create gateway client\n const gatewayClient = new GatewayClient({\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n serviceIdentity: config.layer.serviceIdentity,\n internalGatewayUrl: layerManager.getInternalGatewayUrl(),\n crossLayerGatewayUrl: layerManager.getCrossLayerGatewayUrl(),\n });\n\n logger.info('[SDK Init] Layer manager initialized', {\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n internalGatewayUrl: layerManager.getInternalGatewayUrl(),\n crossLayerGatewayUrl: layerManager.getCrossLayerGatewayUrl(),\n });\n\n return { layerManager, gatewayClient };\n}\n\n/**\n * Initialize layer-specific Redis streams.\n *\n * No-op since the 2026-05-16 NATS retirement: Redis Streams are created\n * on demand by `XGROUP CREATE ... MKSTREAM` inside the consumer, so no\n * upfront connect-and-provision step is needed.\n */\nasync function initializeLayerStreams(config: BurdenoffSDKInitConfig): Promise<void> {\n if (!config.layer) {\n return;\n }\n logger.debug('[SDK Init] Layer streams init is a no-op for Redis Streams (auto-created on first XADD/XGROUP)', {\n layer: config.layer.type,\n });\n}\n\n// Export types\nexport type * from './types.js';\n"]}
1
+ {"version":3,"sources":["../src/init/index.ts"],"names":["sdkState","isInitialized","initializeBurdenoffSDK","config","logger","warn","info","startTime","Date","now","initializeLogging","layerManager","gatewayClient","initializeLayer","layer","layerType","type","fallbackCounter","createCounter","configureResourceCaps","transport","query","variables","options","timeout","skipRetry","skipCircuitBreaker","response","internalQuery","crossLayerQuery","data","onFallback","inc","prisma","initializeDatabase","valkey","initializeCache","eventPublisher","initializeEventQueue","autoCreateStreams","initializeLayerStreams","graphSync","initializeGraphSync","clickhouse","initializeAnalytics","initializeObservability","graphSyncEnabled","graph","enabled","analyticsEnabled","analytics","observabilityEnabled","observability","metrics","layerAwareEnabled","duration","initializedState","serviceName","error","getSDKState","Error","isSDKInitialized","resetSDK","loggingConfig","logging","isDevelopment","app","nodeEnv","level","setLevel","console","setConsoleEnabled","format","database","url","maxConnections","enableQueryLogging","undefined","cacheConfig","cache","defaultTTL","_config","process","env","EventQueueFactory","publisher","createPublisherFromEnv","connect","message","String","note","eventsEnabled","productSource","streamName","syncInterval","batchSize","requestTimeout","openTelemetry","port","endpoint","samplingRate","LayerManager","serviceIdentity","GatewayClient","internalGatewayUrl","getInternalGatewayUrl","crossLayerGatewayUrl","getCrossLayerGatewayUrl","debug"],"mappings":"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","file":"chunk-J4GHZLIY.js","sourcesContent":["/**\n * Burdenoff SDK Initialization Module\n *\n * Provides a unified initialization function for all state services\n * including database, cache, analytics, event queue, and graph sync.\n *\n * @module init\n * @category Initialization\n */\n\nimport { logger } from '../logger/index.js';\nimport { LayerManager } from '../layer/index.js';\nimport { GatewayClient } from '../gateway/index.js';\nimport { configureResourceCaps } from '../resource-caps/index.js';\nimport { createCounter } from '../instrumentation/metrics-collector.js';\nimport type { BurdenoffSDKInitConfig, InitializedSDKState } from './types.js';\n\n/**\n * Global SDK state\n */\nlet sdkState: InitializedSDKState | null = null;\nlet isInitialized = false;\n\n/**\n * Initialize Burdenoff SDK with unified configuration\n *\n * This function initializes all configured state services in the correct order:\n * 1. Logging configuration\n * 2. Database (Prisma with PostgreSQL)\n * 3. Cache (Valkey)\n * 4. Event Queue (Redis Streams)\n * 5. Graph Sync (Redis Streams-based — Apache AGE writes happen inside wspace-graph-svc)\n * 6. Analytics (ClickHouse)\n * 7. Observability (Metrics, OpenTelemetry)\n *\n * @param config - SDK initialization configuration\n * @returns Initialized SDK state\n *\n * @example\n * ```typescript\n * import { initializeBurdenoffSDK } from '@burdenoff/be-sdk/init';\n *\n * const state = await initializeBurdenoffSDK({\n * database: {\n * url: process.env.DATABASE_URL!,\n * maxConnections: 20,\n * },\n * graph: {\n * enabled: true,\n * eventsEnabled: true,\n * },\n * cache: {\n * valkey: {\n * url: process.env.VALKEY_URL!,\n * },\n * },\n * });\n * ```\n */\nexport async function initializeBurdenoffSDK(config: BurdenoffSDKInitConfig): Promise<InitializedSDKState> {\n if (isInitialized && sdkState) {\n logger.warn('[SDK Init] SDK already initialized, returning existing state');\n return sdkState;\n }\n\n logger.info('[SDK Init] Starting SDK initialization...');\n const startTime = Date.now();\n\n try {\n // 1. Configure logging\n await initializeLogging(config);\n\n // 2. Initialize layer manager (if configured)\n const { layerManager, gatewayClient } = await initializeLayer(config);\n\n // 2b. Wire resource caps to billing so plan-based limits actually apply.\n // `userBillingPlan` lives in the GLOBAL layer: global services reach it\n // on their own internal gateway; wspace services go cross-layer via the\n // public global gateway (service JWT). Without this, every resource cap\n // silently collapses to the free-tier fallback regardless of the\n // customer's plan (BOFF-4805). Primes the process-wide singleton so all\n // existing `getResourceCaps()` call sites resolve real plans unchanged.\n if (gatewayClient && config.layer) {\n const layerType = config.layer.type;\n const fallbackCounter = createCounter(\n 'resource_caps.clientless_fallback_total',\n 'Total number of times resource caps fell back because no billing source was configured at bootstrap'\n );\n configureResourceCaps({\n transport: async (query, variables) => {\n // Cap checks run on entity-create paths and ALWAYS fall back to the\n // configured billing-failure tier on failure, so a billing outage\n // must degrade fast rather than stall writes. Bound the lookup with a\n // short timeout and no retries instead of the gateway defaults\n // (~30s × 3 ≈ 90s). Results are cached 60s, so healthy lookups rarely\n // hit the gateway anyway. `skipCircuitBreaker` keeps this best-effort\n // probe OUT of the shared gateway circuit: its failures already\n // degrade to the fallback here, so they must not count toward opening\n // the internal/cross-layer circuit and fail-fast unrelated M2M calls\n // during a billing outage.\n const options = { query, variables, timeout: 8000, skipRetry: true, skipCircuitBreaker: true };\n const response =\n layerType === 'global'\n ? await gatewayClient.internalQuery(options)\n : await gatewayClient.crossLayerQuery(options);\n return response?.data ?? null;\n },\n // Emitting a dedicated clientless-fallback counter at bootstrap means\n // a service that somehow starts without a billing transport is\n // immediately visible in metrics (BOFF-4809). The resource-caps module\n // itself also emits `resource_caps.plan_resolution_total`, but that\n // only fires on the first cap check; this counter fires at bootstrap.\n onFallback: () => fallbackCounter.inc(),\n });\n logger.info('[SDK Init] Resource caps wired to billing', { layer: layerType });\n } else {\n logger.warn('[SDK Init] No layer/gateway configured — resource caps will use free-tier fallbacks (BOFF-4805)');\n }\n\n // 3. Initialize database (required)\n const prisma = await initializeDatabase(config);\n\n // 4. Initialize cache (optional)\n const valkey = await initializeCache(config);\n\n // 5. Initialize event queue (optional) — Redis Streams via REDIS_URL\n const eventPublisher = await initializeEventQueue(config);\n\n // 6. Initialize layer streams (if layer configured)\n if (config.layer?.autoCreateStreams !== false && config.layer) {\n await initializeLayerStreams(config);\n }\n\n // 7. Initialize graph sync (optional) — publisher emits to Redis Streams,\n // never opens a graph-DB connection\n const graphSync = await initializeGraphSync(config);\n\n // 8. Initialize analytics (optional)\n const clickhouse = await initializeAnalytics(config);\n\n // 9. Initialize observability (optional)\n await initializeObservability(config);\n\n // Create SDK state\n // graphSync is a publisher-side placeholder; services emit Redis Streams\n // events and wspace-graph-svc owns the sole Apache AGE connection.\n void graphSync;\n sdkState = {\n prisma,\n valkey,\n clickhouse,\n eventPublisher,\n layerManager,\n gatewayClient,\n graphSyncEnabled: config.graph?.enabled ?? false,\n analyticsEnabled: !!config.analytics?.clickhouse,\n observabilityEnabled: config.observability?.metrics?.enabled ?? false,\n layerAwareEnabled: !!config.layer,\n };\n\n isInitialized = true;\n\n const duration = Date.now() - startTime;\n // sdkState is guaranteed non-null here since we just assigned it above\n const initializedState = sdkState;\n logger.info(`[SDK Init] SDK initialized successfully in ${duration}ms`, {\n graphSyncEnabled: initializedState.graphSyncEnabled,\n analyticsEnabled: initializedState.analyticsEnabled,\n observabilityEnabled: initializedState.observabilityEnabled,\n layerAwareEnabled: initializedState.layerAwareEnabled,\n layer: config.layer?.type,\n serviceName: config.layer?.serviceName,\n });\n\n return initializedState;\n } catch (error) {\n logger.error('[SDK Init] Failed to initialize SDK:', error);\n throw error;\n }\n}\n\n/**\n * Get current SDK state\n * @throws Error if SDK is not initialized\n */\nexport function getSDKState(): InitializedSDKState {\n if (!isInitialized || !sdkState) {\n throw new Error('SDK not initialized. Call initializeBurdenoffSDK() first.');\n }\n return sdkState;\n}\n\n/**\n * Check if SDK is initialized\n */\nexport function isSDKInitialized(): boolean {\n return isInitialized;\n}\n\n/**\n * Reset SDK state (useful for testing)\n */\nexport async function resetSDK(): Promise<void> {\n logger.info('[SDK Init] Resetting SDK state...');\n\n if (sdkState) {\n // Cleanup resources\n // Note: Individual cleanup will be handled by service-specific shutdown handlers\n sdkState = null;\n }\n\n isInitialized = false;\n logger.info('[SDK Init] SDK state reset');\n}\n\n/**\n * Initialize logging configuration\n */\nasync function initializeLogging(config: BurdenoffSDKInitConfig): Promise<void> {\n logger.info('[SDK Init] Configuring logging...');\n\n const loggingConfig = config.logging ?? {};\n const isDevelopment = config.app?.nodeEnv === 'development';\n\n // Set log level\n const level = loggingConfig.level ?? 'info';\n logger.setLevel(level);\n\n // Set console logging\n const console = loggingConfig.console ?? true;\n logger.setConsoleEnabled(console);\n\n logger.info('[SDK Init] Logging configured', {\n level,\n console,\n format: loggingConfig.format ?? (isDevelopment ? 'pretty' : 'json'),\n });\n}\n\n/**\n * Initialize database (Prisma with PostgreSQL)\n */\nasync function initializeDatabase(config: BurdenoffSDKInitConfig): Promise<unknown> {\n logger.info('[SDK Init] Initializing database...');\n\n // Note: Database initialization is handled by createPrismaClient in prisma/client.ts\n // This is called by the application (e.g., workspaces-backend)\n // We just validate the config here\n if (!config.database?.url) {\n throw new Error('Database URL is required');\n }\n\n logger.info('[SDK Init] Database configuration validated', {\n maxConnections: config.database.maxConnections ?? 20,\n enableQueryLogging: config.database.enableQueryLogging ?? false,\n });\n\n // Return undefined as database client is created separately\n return undefined;\n}\n\n/**\n * Initialize cache (Valkey)\n */\nasync function initializeCache(config: BurdenoffSDKInitConfig): Promise<unknown> {\n const cacheConfig = config.cache?.valkey;\n\n if (!cacheConfig) {\n logger.info('[SDK Init] Cache not configured, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Initializing Valkey cache...');\n\n // Note: Valkey initialization is handled by cache module\n // This is a placeholder for future implementation\n logger.info('[SDK Init] Valkey cache configuration validated', {\n url: cacheConfig.url ? '***' : undefined,\n defaultTTL: cacheConfig.defaultTTL ?? 3600,\n });\n\n return undefined;\n}\n\n/**\n * Initialize event queue (Redis Streams).\n *\n * NATS was retired on 2026-05-16. The publisher is created from\n * `REDIS_URL` (set platform-wide in KV). Legacy `config.eventQueue.nats`\n * values are ignored — kept on the type only as a back-compat shim.\n */\nasync function initializeEventQueue(_config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!process.env['REDIS_URL']) {\n logger.info('[SDK Init] REDIS_URL not set, skipping event queue init');\n return undefined;\n }\n\n try {\n const { EventQueueFactory } = await import('../event-queue/factory/EventQueueFactory.js');\n const publisher = EventQueueFactory.createPublisherFromEnv();\n await publisher.connect();\n\n logger.info('[SDK Init] Redis Streams event publisher connected');\n\n return publisher;\n } catch (error) {\n logger.warn('[SDK Init] Failed to connect Redis Streams event publisher (non-fatal)', {\n error: error instanceof Error ? error.message : String(error),\n note: 'Service will continue without event publishing. Use direct API calls as fallback.',\n });\n return undefined;\n }\n}\n\n/**\n * Initialize graph sync (Redis Streams publisher side).\n *\n * Services publish entity events to Redis Streams; the `wspace-graph-svc`\n * consumer (and only it) persists them into Apache AGE via Azure PG\n * sidecar. This SDK function does no DB work — it just validates that the\n * publisher-side config is sensible and logs it.\n */\nasync function initializeGraphSync(config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!config.graph?.enabled) {\n logger.info('[SDK Init] Graph sync not enabled, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Graph sync enabled (publisher-only mode)', {\n eventsEnabled: config.graph.eventsEnabled ?? true,\n productSource: config.graph.productSource,\n streamName: config.graph.streamName ?? 'graph_events',\n syncInterval: config.graph.syncInterval ?? 1000,\n batchSize: config.graph.batchSize ?? 10,\n });\n\n return undefined;\n}\n\n/**\n * Initialize analytics (ClickHouse)\n */\nasync function initializeAnalytics(config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!config.analytics?.clickhouse) {\n logger.info('[SDK Init] Analytics not configured, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Initializing ClickHouse for analytics...');\n\n // Note: ClickHouse initialization is handled by analytics module\n // This is a placeholder for future implementation\n logger.info('[SDK Init] ClickHouse configuration validated', {\n url: config.analytics.clickhouse.url,\n database: config.analytics.clickhouse.database,\n requestTimeout: config.analytics.clickhouse.requestTimeout ?? 60000,\n });\n\n return undefined;\n}\n\n/**\n * Initialize observability (metrics, tracing)\n */\nasync function initializeObservability(config: BurdenoffSDKInitConfig): Promise<void> {\n if (!config.observability?.metrics?.enabled && !config.observability?.openTelemetry?.enabled) {\n logger.info('[SDK Init] Observability not configured, skipping');\n return;\n }\n\n logger.info('[SDK Init] Initializing observability...');\n\n // Note: Observability initialization is handled by observability module\n // This is a placeholder for future implementation\n if (config.observability.metrics?.enabled) {\n logger.info('[SDK Init] Metrics configuration validated', {\n port: config.observability.metrics.port ?? 9090,\n endpoint: config.observability.metrics.endpoint ?? '/metrics',\n });\n }\n\n if (config.observability.openTelemetry?.enabled) {\n logger.info('[SDK Init] OpenTelemetry configuration validated', {\n serviceName: config.observability.openTelemetry.serviceName,\n samplingRate: config.observability.openTelemetry.samplingRate ?? 1.0,\n });\n }\n}\n\n/**\n * Initialize layer manager and gateway client\n */\nasync function initializeLayer(\n config: BurdenoffSDKInitConfig\n): Promise<{ layerManager?: LayerManager; gatewayClient?: GatewayClient }> {\n if (!config.layer) {\n logger.info('[SDK Init] Layer configuration not provided, skipping layer initialization');\n return {};\n }\n\n logger.info('[SDK Init] Initializing layer manager...', {\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n });\n\n // Create layer manager\n const layerManager = new LayerManager({\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n serviceIdentity: config.layer.serviceIdentity,\n });\n\n // Create gateway client\n const gatewayClient = new GatewayClient({\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n serviceIdentity: config.layer.serviceIdentity,\n internalGatewayUrl: layerManager.getInternalGatewayUrl(),\n crossLayerGatewayUrl: layerManager.getCrossLayerGatewayUrl(),\n });\n\n logger.info('[SDK Init] Layer manager initialized', {\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n internalGatewayUrl: layerManager.getInternalGatewayUrl(),\n crossLayerGatewayUrl: layerManager.getCrossLayerGatewayUrl(),\n });\n\n return { layerManager, gatewayClient };\n}\n\n/**\n * Initialize layer-specific Redis streams.\n *\n * No-op since the 2026-05-16 NATS retirement: Redis Streams are created\n * on demand by `XGROUP CREATE ... MKSTREAM` inside the consumer, so no\n * upfront connect-and-provision step is needed.\n */\nasync function initializeLayerStreams(config: BurdenoffSDKInitConfig): Promise<void> {\n if (!config.layer) {\n return;\n }\n logger.debug('[SDK Init] Layer streams init is a no-op for Redis Streams (auto-created on first XADD/XGROUP)', {\n layer: config.layer.type,\n });\n}\n\n// Export types\nexport type * from './types.js';\n"]}
@@ -1,4 +1,4 @@
1
- import { getMetricsRegistry } from './chunk-Q6UAOZFZ.js';
1
+ import { getMetricsRegistry } from './chunk-AWPNRV3L.js';
2
2
  import { __name } from './chunk-XE4OXN2W.js';
3
3
 
4
4
  // src/metrics/workspace-quota-metrics.ts
@@ -49,5 +49,5 @@ function resetWorkspaceQuotaRegistry() {
49
49
  __name(resetWorkspaceQuotaRegistry, "resetWorkspaceQuotaRegistry");
50
50
 
51
51
  export { getWorkspaceQuotaRegistry, resetWorkspaceQuotaRegistry };
52
- //# sourceMappingURL=chunk-4OPOVK54.js.map
53
- //# sourceMappingURL=chunk-4OPOVK54.js.map
52
+ //# sourceMappingURL=chunk-U4HHNEFE.js.map
53
+ //# sourceMappingURL=chunk-U4HHNEFE.js.map
@@ -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,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":"chunk-4OPOVK54.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
+ {"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":"chunk-U4HHNEFE.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"]}
@@ -547,7 +547,7 @@ var I18n = class {
547
547
  if (this.config.logMissing) {
548
548
  logger.warn(`[I18n] Missing translation for key: ${key} in locale: ${locale}`);
549
549
  }
550
- return defaultValue ?? (this.config.returnKeyOnMissing ? key : "");
550
+ return interpolate(defaultValue ?? (this.config.returnKeyOnMissing ? key : ""), variables);
551
551
  }
552
552
  return interpolate(text, variables);
553
553
  }
@@ -760,5 +760,5 @@ var DEFAULT_I18N_CONFIG = {
760
760
  };
761
761
 
762
762
  export { DEFAULT_I18N_CONFIG, I18n, Locales, RTL_LANGUAGES, clearTranslationCache, createI18n, createTranslator, discoverLocales, extractLocaleFromRequest, findBestMatch, flattenDictionary, getCachedTranslations, getI18n, getLanguage, getLanguageFromLocale, getLocale, getRegionFromLocale, getTextDirection, hasI18n, i18n_exports, initializeI18n, loadTranslationFile, loadTranslationsForLocale, normalizeLocale, parseAcceptLanguage, parseLocaleString, preloadAllTranslations, setCachedTranslations, t };
763
- //# sourceMappingURL=chunk-ULFFX3YE.js.map
764
- //# sourceMappingURL=chunk-ULFFX3YE.js.map
763
+ //# sourceMappingURL=chunk-UJG32VIP.js.map
764
+ //# sourceMappingURL=chunk-UJG32VIP.js.map