@naylence/runtime 0.3.5-test.929 → 0.3.5-test.930

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.
@@ -5385,12 +5385,12 @@ for (const [name, config] of Object.entries(SQLITE_PROFILES)) {
5385
5385
  }
5386
5386
 
5387
5387
  // This file is auto-generated during build - do not edit manually
5388
- // Generated from package.json version: 0.3.5-test.929
5388
+ // Generated from package.json version: 0.3.5-test.930
5389
5389
  /**
5390
5390
  * The package version, injected at build time.
5391
5391
  * @internal
5392
5392
  */
5393
- const VERSION = '0.3.5-test.929';
5393
+ const VERSION = '0.3.5-test.930';
5394
5394
 
5395
5395
  /**
5396
5396
  * Fame errors module - Fame protocol specific error classes
@@ -34494,239 +34494,10 @@ var noopTraceEmitterFactory = /*#__PURE__*/Object.freeze({
34494
34494
  default: NoopTraceEmitterFactory
34495
34495
  });
34496
34496
 
34497
- const logger$h = getLogger('naylence.fame.telemetry.otel_setup');
34498
- const stringFrom = (...codes) => String.fromCharCode(...codes);
34499
- const OTEL_PREFIX = `${stringFrom(64, 111, 112, 101, 110, 116, 101, 108, 101, 109, 101, 116, 114, 121)}${stringFrom(47)}`;
34500
- const OTEL_API_SPEC = `${OTEL_PREFIX}${stringFrom(97, 112, 105)}`;
34501
- const OTEL_RESOURCES_SPEC = `${OTEL_PREFIX}${stringFrom(114, 101, 115, 111, 117, 114, 99, 101, 115)}`;
34502
- const OTEL_TRACE_NODE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 110, 111, 100, 101)}`;
34503
- const OTEL_TRACE_BASE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 98, 97, 115, 101)}`;
34504
- const OTEL_EXPORTER_HTTP_SPEC = `${OTEL_PREFIX}${stringFrom(101, 120, 112, 111, 114, 116, 101, 114, 45, 116, 114, 97, 99, 101, 45, 111, 116, 108, 112, 45, 104, 116, 116, 112)}`;
34505
- let registeredOtel = null;
34506
- async function setupOtel(options) {
34507
- const normalized = normalizeSetupOtelOptions(options);
34508
- try {
34509
- if (registeredOtel) {
34510
- logger$h.debug('open_telemetry_reusing_provider', {
34511
- service_name: normalized.serviceName,
34512
- });
34513
- return registeredOtel.control;
34514
- }
34515
- const [apiModule, resourcesModule, nodeModule, traceBaseModule] = await Promise.all([
34516
- import(OTEL_API_SPEC),
34517
- import(OTEL_RESOURCES_SPEC),
34518
- import(OTEL_TRACE_NODE_SPEC),
34519
- import(OTEL_TRACE_BASE_SPEC),
34520
- ]);
34521
- const { trace } = apiModule;
34522
- const { defaultResource, resourceFromAttributes } = resourcesModule;
34523
- const { NodeTracerProvider } = nodeModule;
34524
- const { BatchSpanProcessor, ConsoleSpanExporter, ParentBasedSampler, AlwaysOnSampler, AlwaysOffSampler, TraceIdRatioBasedSampler, } = traceBaseModule;
34525
- const currentProvider = trace.getTracerProvider();
34526
- if (currentProvider && currentProvider instanceof NodeTracerProvider) {
34527
- return null;
34528
- }
34529
- if (currentProvider &&
34530
- currentProvider.constructor?.name === 'NodeTracerProvider') {
34531
- logger$h.debug('open_telemetry_existing_node_provider', {
34532
- service_name: normalized.serviceName,
34533
- });
34534
- return null;
34535
- }
34536
- logger$h.debug('open_telemetry_initializing', {
34537
- service_name: normalized.serviceName,
34538
- endpoint: normalized.endpoint ?? null,
34539
- environment: normalized.environment ?? null,
34540
- sampler: normalized.sampler ?? null,
34541
- headers_present: Boolean(normalized.headers && Object.keys(normalized.headers).length),
34542
- });
34543
- const sampler = resolveSampler(normalized.sampler, {
34544
- ParentBasedSampler,
34545
- AlwaysOnSampler,
34546
- AlwaysOffSampler,
34547
- TraceIdRatioBasedSampler,
34548
- });
34549
- const baseResource = defaultResource();
34550
- const mergedResource = resourceFromAttributes({
34551
- 'service.name': normalized.serviceName,
34552
- 'service.instance.id': generateInstanceId(),
34553
- 'deployment.environment': normalized.environment ?? 'dev',
34554
- });
34555
- const resource = baseResource.merge(mergedResource);
34556
- const exporter = await resolveExporter(normalized.endpoint ?? undefined, normalized.headers, ConsoleSpanExporter);
34557
- const spanProcessor = new BatchSpanProcessor(exporter);
34558
- const provider = new NodeTracerProvider({
34559
- resource,
34560
- sampler,
34561
- spanProcessors: [spanProcessor],
34562
- });
34563
- provider.register();
34564
- logger$h.debug('open_telemetry_initialized', {
34565
- service_name: normalized.serviceName,
34566
- exporter: exporter.constructor?.name ?? 'unknown_exporter',
34567
- });
34568
- const control = {
34569
- forceFlush: async () => {
34570
- try {
34571
- await provider.forceFlush();
34572
- }
34573
- catch (flushError) {
34574
- logger$h.warning('open_telemetry_force_flush_failed', {
34575
- error: flushError instanceof Error
34576
- ? flushError.message
34577
- : String(flushError),
34578
- });
34579
- }
34580
- },
34581
- shutdown: async () => {
34582
- try {
34583
- await provider.shutdown();
34584
- }
34585
- catch (shutdownError) {
34586
- logger$h.warning('open_telemetry_shutdown_failed', {
34587
- error: shutdownError instanceof Error
34588
- ? shutdownError.message
34589
- : String(shutdownError),
34590
- });
34591
- }
34592
- finally {
34593
- registeredOtel = null;
34594
- }
34595
- },
34596
- };
34597
- registeredOtel = {
34598
- provider,
34599
- control,
34600
- };
34601
- return control;
34602
- }
34603
- catch (error) {
34604
- logger$h.error('open_telemetry_not_available', {
34605
- error: error instanceof Error ? error.message : String(error),
34606
- stack: error instanceof Error && error.stack ? error.stack : undefined,
34607
- });
34608
- return null;
34609
- }
34610
- }
34611
- function normalizeSetupOtelOptions(options) {
34612
- const source = (options ?? {});
34613
- const serviceName = extractNonEmptyString$1(pickFirst$2(source, ['serviceName', 'service_name'])) ??
34614
- 'naylence-service';
34615
- const endpoint = extractNonEmptyString$1(pickFirst$2(source, ['endpoint', 'otlpEndpoint', 'otlp_endpoint'])) ?? null;
34616
- const environment = extractNonEmptyString$1(pickFirst$2(source, [
34617
- 'environment',
34618
- 'deploymentEnvironment',
34619
- 'deployment_environment',
34620
- ])) ?? null;
34621
- const sampler = extractNonEmptyString$1(pickFirst$2(source, ['sampler', 'samplingStrategy', 'sampling_strategy'])) ?? null;
34622
- const headers = extractHeaders$1(pickFirst$2(source, ['headers', 'otlpHeaders', 'otlp_headers']));
34623
- return {
34624
- serviceName,
34625
- endpoint,
34626
- environment,
34627
- sampler,
34628
- headers: headers ?? undefined,
34629
- };
34630
- }
34631
- function pickFirst$2(source, keys) {
34632
- for (const key of keys) {
34633
- if (Object.prototype.hasOwnProperty.call(source, key)) {
34634
- const value = source[key];
34635
- if (value !== undefined) {
34636
- return value;
34637
- }
34638
- }
34639
- }
34640
- return undefined;
34641
- }
34642
- function extractNonEmptyString$1(value) {
34643
- if (typeof value === 'string') {
34644
- const trimmed = value.trim();
34645
- if (trimmed.length > 0) {
34646
- return trimmed;
34647
- }
34648
- }
34649
- return undefined;
34650
- }
34651
- function extractHeaders$1(value) {
34652
- if (!value || typeof value !== 'object') {
34653
- return null;
34654
- }
34655
- const headers = {};
34656
- for (const [key, raw] of Object.entries(value)) {
34657
- if (typeof raw === 'string') {
34658
- headers[key] = raw;
34659
- }
34660
- }
34661
- return Object.keys(headers).length > 0 ? headers : null;
34662
- }
34663
- function generateInstanceId() {
34664
- try {
34665
- if (typeof crypto !== 'undefined' &&
34666
- typeof crypto.randomUUID === 'function') {
34667
- return crypto.randomUUID().replace(/-/g, '');
34668
- }
34669
- }
34670
- catch {
34671
- // Ignore crypto availability errors
34672
- }
34673
- const random = Math.random().toString(16).slice(2);
34674
- return random.padEnd(32, '0').slice(0, 32);
34675
- }
34676
- function resolveSampler(samplerSetting, samplers) {
34677
- const normalized = (samplerSetting ?? 'parentbased_always_on').toLowerCase();
34678
- let base;
34679
- if (normalized === 'always_off') {
34680
- base = new samplers.AlwaysOffSampler();
34681
- }
34682
- else if (normalized === 'always_on' ||
34683
- normalized === 'parentbased_always_on') {
34684
- base = new samplers.AlwaysOnSampler();
34685
- }
34686
- else if (normalized.startsWith('ratio:')) {
34687
- const ratioValue = Number.parseFloat(normalized.slice('ratio:'.length));
34688
- const ratio = Number.isFinite(ratioValue)
34689
- ? Math.min(Math.max(ratioValue, 0), 1)
34690
- : 1;
34691
- base = new samplers.TraceIdRatioBasedSampler(ratio);
34692
- }
34693
- else {
34694
- base = new samplers.AlwaysOnSampler();
34695
- }
34696
- return new samplers.ParentBasedSampler({ root: base });
34697
- }
34698
- async function resolveExporter(endpoint, headers, ConsoleSpanExporter) {
34699
- if (endpoint) {
34700
- try {
34701
- const exporterModule = await import(OTEL_EXPORTER_HTTP_SPEC);
34702
- if ('OTLPTraceExporter' in exporterModule) {
34703
- const { OTLPTraceExporter } = exporterModule;
34704
- const exporterOptions = {
34705
- url: endpoint,
34706
- };
34707
- if (headers && Object.keys(headers).length > 0) {
34708
- exporterOptions.headers = headers;
34709
- }
34710
- logger$h.debug('open_telemetry_using_otlp_http_exporter', {
34711
- endpoint,
34712
- headers_present: Boolean(headers && Object.keys(headers).length),
34713
- });
34714
- return new OTLPTraceExporter(exporterOptions);
34715
- }
34716
- }
34717
- catch (error) {
34718
- logger$h.error('open_telemetry_exporter_not_available', {
34719
- error: error instanceof Error ? error.message : String(error),
34720
- });
34721
- }
34722
- }
34723
- logger$h.warning('open_telemetry_falling_back_to_console_exporter');
34724
- return new ConsoleSpanExporter();
34725
- }
34726
-
34727
34497
  let openTelemetryTraceEmitterModulePromise = null;
34728
34498
  let otelApiModulePromise = null;
34729
- const logger$g = getLogger('naylence.fame.telemetry.open_telemetry_trace_emitter_factory');
34499
+ let otelSetupModulePromise = null;
34500
+ const logger$h = getLogger('naylence.fame.telemetry.open_telemetry_trace_emitter_factory');
34730
34501
  const MISSING_OTEL_HELP_MESSAGE = 'Missing optional OpenTelemetry dependency. Install @opentelemetry/api (and related packages) to enable trace emission.';
34731
34502
  function getOpenTelemetryTraceEmitterModule() {
34732
34503
  if (!openTelemetryTraceEmitterModulePromise) {
@@ -34744,6 +34515,14 @@ function getOtelApiModule() {
34744
34515
  }
34745
34516
  return otelApiModulePromise;
34746
34517
  }
34518
+ function getOtelSetupModule() {
34519
+ if (!otelSetupModulePromise) {
34520
+ otelSetupModulePromise = safeImport(() => Promise.resolve().then(function () { return otelSetup; }), '@opentelemetry/api', {
34521
+ helpMessage: MISSING_OTEL_HELP_MESSAGE,
34522
+ });
34523
+ }
34524
+ return otelSetupModulePromise;
34525
+ }
34747
34526
  const FACTORY_META$Q = {
34748
34527
  base: TRACE_EMITTER_FACTORY_BASE_TYPE,
34749
34528
  key: 'OpenTelemetryTraceEmitter',
@@ -34767,7 +34546,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
34767
34546
  await AuthInjectionStrategyFactory.createAuthInjectionStrategy(normalized.auth);
34768
34547
  try {
34769
34548
  await authStrategy.apply(mergedHeaders);
34770
- logger$g.info('trace_emitter_auth_applied', {
34549
+ logger$h.info('trace_emitter_auth_applied', {
34771
34550
  service_name: normalized.serviceName,
34772
34551
  });
34773
34552
  }
@@ -34783,6 +34562,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
34783
34562
  }
34784
34563
  let lifecycle = null;
34785
34564
  try {
34565
+ const { setupOtel } = await getOtelSetupModule();
34786
34566
  lifecycle = await setupOtel({
34787
34567
  serviceName: normalized.serviceName,
34788
34568
  endpoint: normalized.endpoint,
@@ -34790,7 +34570,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
34790
34570
  sampler: normalized.sampler,
34791
34571
  headers: Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined,
34792
34572
  });
34793
- logger$g.debug('trace_emitter_lifecycle_acquired', {
34573
+ logger$h.debug('trace_emitter_lifecycle_acquired', {
34794
34574
  service_name: normalized.serviceName,
34795
34575
  lifecycle_available: Boolean(lifecycle),
34796
34576
  });
@@ -34828,7 +34608,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
34828
34608
  }
34829
34609
  try {
34830
34610
  const emitter = new OpenTelemetryTraceEmitter(emitterOptions);
34831
- logger$g.debug('trace_emitter_created', {
34611
+ logger$h.debug('trace_emitter_created', {
34832
34612
  service_name: normalized.serviceName,
34833
34613
  has_lifecycle: Boolean(lifecycle),
34834
34614
  has_auth_strategy: Boolean(authStrategy),
@@ -34860,17 +34640,17 @@ function normalizeConfig$n(config) {
34860
34640
  };
34861
34641
  }
34862
34642
  const candidate = config;
34863
- const serviceName = extractString(pickFirst$1(candidate, ['serviceName', 'service_name'])) ??
34643
+ const serviceName = extractString(pickFirst$2(candidate, ['serviceName', 'service_name'])) ??
34864
34644
  'naylence-service';
34865
- const endpoint = extractString(pickFirst$1(candidate, ['endpoint', 'otlpEndpoint', 'otlp_endpoint'])) ?? null;
34866
- const environment = extractString(pickFirst$1(candidate, [
34645
+ const endpoint = extractString(pickFirst$2(candidate, ['endpoint', 'otlpEndpoint', 'otlp_endpoint'])) ?? null;
34646
+ const environment = extractString(pickFirst$2(candidate, [
34867
34647
  'environment',
34868
34648
  'deploymentEnvironment',
34869
34649
  'deployment_environment',
34870
34650
  ])) ?? null;
34871
- const sampler = extractString(pickFirst$1(candidate, ['sampler', 'samplingStrategy', 'sampling_strategy'])) ?? null;
34872
- const headersFromConfig = extractHeaders(pickFirst$1(candidate, ['headers', 'otlpHeaders', 'otlp_headers']));
34873
- const authConfig = pickFirst$1(candidate, [
34651
+ const sampler = extractString(pickFirst$2(candidate, ['sampler', 'samplingStrategy', 'sampling_strategy'])) ?? null;
34652
+ const headersFromConfig = extractHeaders$1(pickFirst$2(candidate, ['headers', 'otlpHeaders', 'otlp_headers']));
34653
+ const authConfig = pickFirst$2(candidate, [
34874
34654
  'auth',
34875
34655
  ]);
34876
34656
  return {
@@ -34888,7 +34668,7 @@ function extractString(value) {
34888
34668
  }
34889
34669
  return undefined;
34890
34670
  }
34891
- function pickFirst$1(source, keys) {
34671
+ function pickFirst$2(source, keys) {
34892
34672
  for (const key of keys) {
34893
34673
  if (Object.prototype.hasOwnProperty.call(source, key)) {
34894
34674
  const value = source[key];
@@ -34899,7 +34679,7 @@ function pickFirst$1(source, keys) {
34899
34679
  }
34900
34680
  return undefined;
34901
34681
  }
34902
- function extractHeaders(value) {
34682
+ function extractHeaders$1(value) {
34903
34683
  if (!value || typeof value !== 'object') {
34904
34684
  return null;
34905
34685
  }
@@ -34919,7 +34699,7 @@ var openTelemetryTraceEmitterFactory = /*#__PURE__*/Object.freeze({
34919
34699
  default: OpenTelemetryTraceEmitterFactory
34920
34700
  });
34921
34701
 
34922
- const logger$f = getLogger('naylence.fame.telemetry.trace_emitter_profile_factory');
34702
+ const logger$g = getLogger('naylence.fame.telemetry.trace_emitter_profile_factory');
34923
34703
  const PROFILE_NAME_NOOP$1 = 'noop';
34924
34704
  const PROFILE_NAME_OPEN_TELEMETRY = 'open-telemetry';
34925
34705
  const ENV_VAR_TELEMETRY_SERVICE_NAME = 'FAME_TELEMETRY_SERVICE_NAME';
@@ -34947,7 +34727,7 @@ class TraceEmitterProfileFactory extends TraceEmitterFactory {
34947
34727
  async create(config, ...factoryArgs) {
34948
34728
  const normalized = normalizeTraceEmitterProfileConfig(config);
34949
34729
  const profileConfig = resolveProfileConfig$2(normalized.profile);
34950
- logger$f.debug('enabling_trace_emitter_profile', {
34730
+ logger$g.debug('enabling_trace_emitter_profile', {
34951
34731
  profile: normalized.profile,
34952
34732
  });
34953
34733
  const traceEmitter = await TraceEmitterFactory.createTraceEmitter(profileConfig, {
@@ -35232,7 +35012,7 @@ var atMostOnceDeliveryPolicyFactory = /*#__PURE__*/Object.freeze({
35232
35012
  default: AtMostOnceDeliveryPolicyFactory
35233
35013
  });
35234
35014
 
35235
- const logger$e = getLogger('naylence.fame.delivery.delivery_profile_factory');
35015
+ const logger$f = getLogger('naylence.fame.delivery.delivery_profile_factory');
35236
35016
  const PROFILE_NAME_AT_LEAST_ONCE = 'at-least-once';
35237
35017
  const PROFILE_NAME_AT_MOST_ONCE = 'at-most-once';
35238
35018
  const ENV_VAR_FAME_DELIVERY_MAX_RETRIES = 'FAME_DELIVERY_MAX_RETRIES';
@@ -35272,7 +35052,7 @@ class DeliveryProfileFactory extends DeliveryPolicyFactory {
35272
35052
  async create(config) {
35273
35053
  const normalized = normalizeDeliveryProfileConfig(config);
35274
35054
  const profileConfig = resolveProfileConfig$1(normalized.profile);
35275
- logger$e.debug('enabling_delivery_profile', { profile: normalized.profile });
35055
+ logger$f.debug('enabling_delivery_profile', { profile: normalized.profile });
35276
35056
  const policy = await DeliveryPolicyFactory.createDeliveryPolicy(profileConfig);
35277
35057
  if (!policy) {
35278
35058
  throw new Error(`Failed to create delivery policy for profile: ${normalized.profile}`);
@@ -35335,7 +35115,7 @@ var deliveryProfileFactory = /*#__PURE__*/Object.freeze({
35335
35115
  default: DeliveryProfileFactory
35336
35116
  });
35337
35117
 
35338
- const logger$d = getLogger('naylence.fame.node.admission.admission_profile_factory');
35118
+ const logger$e = getLogger('naylence.fame.node.admission.admission_profile_factory');
35339
35119
  const ENV_VAR_IS_ROOT = 'FAME_ROOT';
35340
35120
  const ENV_VAR_JWT_AUDIENCE = 'FAME_JWT_AUDIENCE';
35341
35121
  const ENV_VAR_ADMISSION_TOKEN_URL = 'FAME_ADMISSION_TOKEN_URL';
@@ -35570,7 +35350,7 @@ class AdmissionProfileFactory extends AdmissionClientFactory {
35570
35350
  async create(config) {
35571
35351
  const normalized = normalizeConfig$m(config);
35572
35352
  const profileConfig = resolveProfileConfig(normalized.profile);
35573
- logger$d.debug('enabling_admission_profile', { profile: normalized.profile });
35353
+ logger$e.debug('enabling_admission_profile', { profile: normalized.profile });
35574
35354
  return AdmissionClientFactory.createAdmissionClient(profileConfig);
35575
35355
  }
35576
35356
  }
@@ -35609,7 +35389,7 @@ var admissionProfileFactory = /*#__PURE__*/Object.freeze({
35609
35389
  default: AdmissionProfileFactory
35610
35390
  });
35611
35391
 
35612
- const logger$c = getLogger('naylence.fame.node.admission.direct_admission_client');
35392
+ const logger$d = getLogger('naylence.fame.node.admission.direct_admission_client');
35613
35393
  class DirectAdmissionClient {
35614
35394
  constructor(options) {
35615
35395
  this.hasUpstream = true;
@@ -35634,7 +35414,7 @@ class DirectAdmissionClient {
35634
35414
  }
35635
35415
  }
35636
35416
  async hello(systemId, instanceId, requestedLogicals) {
35637
- logger$c.debug('direct_admission_hello_start', {
35417
+ logger$d.debug('direct_admission_hello_start', {
35638
35418
  providedSystemId: systemId,
35639
35419
  instanceId,
35640
35420
  requestedLogicals,
@@ -35642,7 +35422,7 @@ class DirectAdmissionClient {
35642
35422
  const effectiveSystemId = systemId && systemId.trim().length > 0
35643
35423
  ? systemId
35644
35424
  : await generateIdAsync({ mode: 'fingerprint' }).catch(async () => {
35645
- logger$c.debug('direct_admission_fingerprint_generation_failed', {
35425
+ logger$d.debug('direct_admission_fingerprint_generation_failed', {
35646
35426
  reason: 'falling back to random id',
35647
35427
  });
35648
35428
  return generateIdAsync({ mode: 'random' });
@@ -35664,7 +35444,7 @@ class DirectAdmissionClient {
35664
35444
  const envelope = createFameEnvelope({
35665
35445
  frame: welcomeFrame,
35666
35446
  });
35667
- logger$c.debug('direct_admission_hello_success', {
35447
+ logger$d.debug('direct_admission_hello_success', {
35668
35448
  systemId: welcomeFrame.systemId,
35669
35449
  instanceId: welcomeFrame.instanceId,
35670
35450
  acceptedLogicals: welcomeFrame.acceptedLogicals,
@@ -35841,7 +35621,7 @@ var noAuthInjectionStrategyFactory = /*#__PURE__*/Object.freeze({
35841
35621
  default: NoAuthInjectionStrategyFactory
35842
35622
  });
35843
35623
 
35844
- const logger$b = getLogger('naylence.fame.node.admission.welcome_service_client');
35624
+ const logger$c = getLogger('naylence.fame.node.admission.welcome_service_client');
35845
35625
  class WelcomeServiceClient {
35846
35626
  constructor(options) {
35847
35627
  this.hasUpstream = options.hasUpstream ?? options.has_upstream ?? false;
@@ -35890,7 +35670,7 @@ class WelcomeServiceClient {
35890
35670
  'Content-Type': 'application/json',
35891
35671
  ...authHeaders,
35892
35672
  };
35893
- logger$b.debug('welcome_service_hello_request', {
35673
+ logger$c.debug('welcome_service_hello_request', {
35894
35674
  url: this.url,
35895
35675
  systemId,
35896
35676
  instanceId,
@@ -35926,7 +35706,7 @@ class WelcomeServiceClient {
35926
35706
  parsedEnvelope.frame.type !== 'NodeWelcome') {
35927
35707
  throw new Error(`Unexpected frame type '${parsedEnvelope.frame?.type ?? 'unknown'}'`);
35928
35708
  }
35929
- logger$b.debug('welcome_service_hello_success', {
35709
+ logger$c.debug('welcome_service_hello_success', {
35930
35710
  systemId: parsedEnvelope.frame.systemId,
35931
35711
  targetSystemId: parsedEnvelope.frame.targetSystemId,
35932
35712
  assignedPath: parsedEnvelope.frame.assignedPath,
@@ -37062,7 +36842,7 @@ var noopTokenVerifierFactory = /*#__PURE__*/Object.freeze({
37062
36842
  default: NoopTokenVerifierFactory
37063
36843
  });
37064
36844
 
37065
- const logger$a = getLogger('naylence.fame.security.auth.oauth2_authorizer_factory');
36845
+ const logger$b = getLogger('naylence.fame.security.auth.oauth2_authorizer_factory');
37066
36846
  let oauth2AuthorizerModulePromise = null;
37067
36847
  function getOAuth2AuthorizerModule() {
37068
36848
  if (!oauth2AuthorizerModulePromise) {
@@ -37089,12 +36869,12 @@ class OAuth2AuthorizerFactory extends AuthorizerFactory {
37089
36869
  if (normalized.tokenIssuerConfig) {
37090
36870
  try {
37091
36871
  tokenIssuer = await TokenIssuerFactory.createTokenIssuer(normalized.tokenIssuerConfig);
37092
- logger$a.debug('token_issuer_created_for_reverse_auth', {
36872
+ logger$b.debug('token_issuer_created_for_reverse_auth', {
37093
36873
  issuer_type: normalized.tokenIssuerConfig.type,
37094
36874
  });
37095
36875
  }
37096
36876
  catch (error) {
37097
- logger$a.warning('failed_to_create_token_issuer_for_reverse_auth', {
36877
+ logger$b.warning('failed_to_create_token_issuer_for_reverse_auth', {
37098
36878
  error: error instanceof Error ? error.message : String(error),
37099
36879
  issuer_config: normalized.tokenIssuerConfig,
37100
36880
  });
@@ -38047,7 +37827,7 @@ var sessionKeyCredentialProviderFactory = /*#__PURE__*/Object.freeze({
38047
37827
  normalizeSessionKeyConfig: normalizeSessionKeyConfig
38048
37828
  });
38049
37829
 
38050
- const logger$9 = getLogger('naylence.fame.security.default_security_manager_factory');
37830
+ const logger$a = getLogger('naylence.fame.security.default_security_manager_factory');
38051
37831
  function normalizeDefaultSecurityManagerConfig(config) {
38052
37832
  if (!config) {
38053
37833
  return null;
@@ -38215,7 +37995,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
38215
37995
  return await KeyStoreFactory.createKeyStore(value, createOptions ?? undefined);
38216
37996
  }
38217
37997
  catch (error) {
38218
- logger$9.error('failed_to_create_key_store_from_config', {
37998
+ logger$a.error('failed_to_create_key_store_from_config', {
38219
37999
  error: error instanceof Error ? error.message : String(error),
38220
38000
  });
38221
38001
  return null;
@@ -38251,7 +38031,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
38251
38031
  return null;
38252
38032
  }
38253
38033
  const cryptoProvider = cryptoProviderOverride ?? null;
38254
- logger$9.debug('auto_create_envelope_signer', {
38034
+ logger$a.debug('auto_create_envelope_signer', {
38255
38035
  has_crypto_override: Boolean(cryptoProviderOverride),
38256
38036
  override_constructor: cryptoProviderOverride
38257
38037
  ? (cryptoProviderOverride.constructor?.name ?? 'unknown')
@@ -38272,7 +38052,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
38272
38052
  });
38273
38053
  }
38274
38054
  catch (error) {
38275
- logger$9.error('failed_to_auto_create_envelope_signer', {
38055
+ logger$a.error('failed_to_auto_create_envelope_signer', {
38276
38056
  error: error instanceof Error ? error.message : String(error),
38277
38057
  exc_info: true,
38278
38058
  });
@@ -38307,7 +38087,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
38307
38087
  });
38308
38088
  }
38309
38089
  catch (error) {
38310
- logger$9.error('failed_to_auto_create_envelope_verifier', {
38090
+ logger$a.error('failed_to_auto_create_envelope_verifier', {
38311
38091
  error: error instanceof Error ? error.message : String(error),
38312
38092
  exc_info: true,
38313
38093
  });
@@ -38319,7 +38099,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
38319
38099
  if (encryptionConfig &&
38320
38100
  DefaultSecurityManagerFactory.isConfigLike(encryptionConfig)) {
38321
38101
  if (!keyManager) {
38322
- logger$9.warning('encryption_manager_config_requires_key_manager');
38102
+ logger$a.warning('encryption_manager_config_requires_key_manager');
38323
38103
  return { encryptionManager: null, secureChannelManager };
38324
38104
  }
38325
38105
  const manager = await EncryptionManagerFactory.createEncryptionManager(encryptionConfig, {
@@ -38356,7 +38136,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
38356
38136
  return { encryptionManager: manager, secureChannelManager };
38357
38137
  }
38358
38138
  catch (error) {
38359
- logger$9.error('failed_to_auto_create_encryption_manager', {
38139
+ logger$a.error('failed_to_auto_create_encryption_manager', {
38360
38140
  error: error instanceof Error ? error.message : String(error),
38361
38141
  exc_info: true,
38362
38142
  });
@@ -38399,7 +38179,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
38399
38179
  });
38400
38180
  }
38401
38181
  catch (error) {
38402
- logger$9.error('failed_to_auto_create_key_manager', {
38182
+ logger$a.error('failed_to_auto_create_key_manager', {
38403
38183
  error: error instanceof Error ? error.message : String(error),
38404
38184
  exc_info: true,
38405
38185
  });
@@ -38448,7 +38228,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
38448
38228
  })) ?? null);
38449
38229
  }
38450
38230
  catch (error) {
38451
- logger$9.error('failed_to_auto_create_authorizer', {
38231
+ logger$a.error('failed_to_auto_create_authorizer', {
38452
38232
  error: error instanceof Error ? error.message : String(error),
38453
38233
  exc_info: true,
38454
38234
  });
@@ -38477,7 +38257,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
38477
38257
  });
38478
38258
  }
38479
38259
  catch (error) {
38480
- logger$9.error('failed_to_auto_create_certificate_manager', {
38260
+ logger$a.error('failed_to_auto_create_certificate_manager', {
38481
38261
  error: error instanceof Error ? error.message : String(error),
38482
38262
  exc_info: true,
38483
38263
  });
@@ -38736,7 +38516,7 @@ var defaultKeyManagerFactory = /*#__PURE__*/Object.freeze({
38736
38516
  default: DefaultKeyManagerFactory
38737
38517
  });
38738
38518
 
38739
- const logger$8 = getLogger('naylence.fame.security.keys.in_memory_key_store');
38519
+ const logger$9 = getLogger('naylence.fame.security.keys.in_memory_key_store');
38740
38520
  class InMemoryKeyStore extends KeyStore {
38741
38521
  constructor(initialKeys = null) {
38742
38522
  super();
@@ -38758,7 +38538,7 @@ class InMemoryKeyStore extends KeyStore {
38758
38538
  }
38759
38539
  catch (error) {
38760
38540
  if (error instanceof JWKValidationError) {
38761
- logger$8.warning('rejected_invalid_jwk_individual', {
38541
+ logger$9.warning('rejected_invalid_jwk_individual', {
38762
38542
  kid,
38763
38543
  error: error.message,
38764
38544
  });
@@ -38802,7 +38582,7 @@ class InMemoryKeyStore extends KeyStore {
38802
38582
  }
38803
38583
  }
38804
38584
  if (staleKeys.length > 0) {
38805
- logger$8.debug('removing_stale_keys_before_adding_new_key', {
38585
+ logger$9.debug('removing_stale_keys_before_adding_new_key', {
38806
38586
  new_kid: kid,
38807
38587
  physical_path: physicalPath,
38808
38588
  base_path: basePath,
@@ -38830,7 +38610,7 @@ class InMemoryKeyStore extends KeyStore {
38830
38610
  }
38831
38611
  keysByPath[path].push(existingKid);
38832
38612
  }
38833
- logger$8.debug('key_lookup_failed', {
38613
+ logger$9.debug('key_lookup_failed', {
38834
38614
  missing_kid: kid,
38835
38615
  available_kids: Array.from(this.keys.keys()),
38836
38616
  keys_by_path: keysByPath,
@@ -38879,7 +38659,7 @@ class InMemoryKeyStore extends KeyStore {
38879
38659
  this.keys.delete(kid);
38880
38660
  }
38881
38661
  if (keysToRemove.length > 0) {
38882
- logger$8.debug('removed_keys_for_path', {
38662
+ logger$9.debug('removed_keys_for_path', {
38883
38663
  physical_path: physicalPath,
38884
38664
  removed_key_ids: keysToRemove,
38885
38665
  count: keysToRemove.length,
@@ -38890,7 +38670,7 @@ class InMemoryKeyStore extends KeyStore {
38890
38670
  async removeKey(kid) {
38891
38671
  const removed = this.keys.delete(kid);
38892
38672
  if (removed) {
38893
- logger$8.debug('removed_individual_key', { kid });
38673
+ logger$9.debug('removed_individual_key', { kid });
38894
38674
  }
38895
38675
  return removed;
38896
38676
  }
@@ -39256,7 +39036,7 @@ var capabilityAwareRoutingPolicyFactory = /*#__PURE__*/Object.freeze({
39256
39036
  default: CapabilityAwareRoutingPolicyFactory
39257
39037
  });
39258
39038
 
39259
- const logger$7 = getLogger('naylence.fame.sentinel.composite_routing_policy_factory');
39039
+ const logger$8 = getLogger('naylence.fame.sentinel.composite_routing_policy_factory');
39260
39040
  const FACTORY_META$8 = {
39261
39041
  base: ROUTING_POLICY_FACTORY_BASE,
39262
39042
  key: 'CompositeRoutingPolicy',
@@ -39282,13 +39062,13 @@ class CompositeRoutingPolicyFactory extends RoutingPolicyFactory {
39282
39062
  policies.push(policy);
39283
39063
  }
39284
39064
  else {
39285
- logger$7.warning('composite_policy_null_child', {
39065
+ logger$8.warning('composite_policy_null_child', {
39286
39066
  config: policyConfig,
39287
39067
  });
39288
39068
  }
39289
39069
  }
39290
39070
  catch (error) {
39291
- logger$7.warning('composite_policy_child_error', {
39071
+ logger$8.warning('composite_policy_child_error', {
39292
39072
  error: error instanceof Error ? error.message : String(error),
39293
39073
  config: policyConfig,
39294
39074
  });
@@ -39584,7 +39364,7 @@ var hrwLoadBalancingStrategyFactory = /*#__PURE__*/Object.freeze({
39584
39364
  default: HRWLoadBalancingStrategyFactory
39585
39365
  });
39586
39366
 
39587
- const logger$6 = getLogger('naylence.fame.sentinel.load_balancing.load_balancing_profile_factory');
39367
+ const logger$7 = getLogger('naylence.fame.sentinel.load_balancing.load_balancing_profile_factory');
39588
39368
  const PROFILE_NAME_RANDOM = 'random';
39589
39369
  const PROFILE_NAME_ROUND_ROBIN = 'round_robin';
39590
39370
  const PROFILE_NAME_HRW = 'hrw';
@@ -39618,7 +39398,7 @@ class LoadBalancingProfileFactory extends LoadBalancingStrategyFactory {
39618
39398
  async create(config, ...factoryArgs) {
39619
39399
  const finalConfig = this.normalizeConfig(config);
39620
39400
  const profileName = finalConfig.profile ?? PROFILE_NAME_DEVELOPMENT$1;
39621
- logger$6.debug('enabling_load_balancing_profile', { profile: profileName });
39401
+ logger$7.debug('enabling_load_balancing_profile', { profile: profileName });
39622
39402
  const strategyConfig = this.resolveProfile(profileName);
39623
39403
  const strategy = await createResource$1(LOAD_BALANCING_STRATEGY_FACTORY_BASE, strategyConfig, { factoryArgs });
39624
39404
  if (!strategy) {
@@ -39809,7 +39589,7 @@ var stickyLoadBalancingStrategyFactory = /*#__PURE__*/Object.freeze({
39809
39589
  default: StickyLoadBalancingStrategyFactory
39810
39590
  });
39811
39591
 
39812
- const logger$5 = getLogger('naylence.fame.sentinel.routing_profile_factory');
39592
+ const logger$6 = getLogger('naylence.fame.sentinel.routing_profile_factory');
39813
39593
  const PROFILE_NAME_DEVELOPMENT = 'development';
39814
39594
  const PROFILE_NAME_PRODUCTION = 'production';
39815
39595
  const PROFILE_NAME_BASIC = 'basic';
@@ -39860,7 +39640,7 @@ class RoutingProfileFactory extends RoutingPolicyFactory {
39860
39640
  }
39861
39641
  async create(config, ...kwargs) {
39862
39642
  const normalized = this.normalizeConfig(config);
39863
- logger$5.debug('enabling_routing_profile', { profile: normalized.profile });
39643
+ logger$6.debug('enabling_routing_profile', { profile: normalized.profile });
39864
39644
  const routingConfig = this.getProfileConfig(normalized.profile);
39865
39645
  const policy = await createResource$1(ROUTING_POLICY_FACTORY_BASE, routingConfig, {
39866
39646
  factoryArgs: kwargs,
@@ -40162,21 +39942,21 @@ class OpenTelemetryTraceEmitter extends BaseTraceEmitter {
40162
39942
  }
40163
39943
  function normalizeOpenTelemetryTraceEmitterOptions(input) {
40164
39944
  const source = (input ?? {});
40165
- const serviceName = extractNonEmptyString(pickFirst(source, ['serviceName', 'service_name'])) ?? 'naylence-service';
40166
- const tracer = pickFirst(source, ['tracer']);
40167
- const otelApi = pickFirst(source, [
39945
+ const serviceName = extractNonEmptyString$1(pickFirst$1(source, ['serviceName', 'service_name'])) ?? 'naylence-service';
39946
+ const tracer = pickFirst$1(source, ['tracer']);
39947
+ const otelApi = pickFirst$1(source, [
40168
39948
  'otelApi',
40169
39949
  'otel_api',
40170
39950
  ]);
40171
39951
  if (!otelApi) {
40172
39952
  throw new Error('OpenTelemetryTraceEmitter requires OpenTelemetry API bindings. Provide otelApi via options.');
40173
39953
  }
40174
- const lifecycle = pickFirst(source, [
39954
+ const lifecycle = pickFirst$1(source, [
40175
39955
  'lifecycle',
40176
39956
  'lifeCycle',
40177
39957
  'life_cycle',
40178
39958
  ]) ?? null;
40179
- const authStrategy = pickFirst(source, [
39959
+ const authStrategy = pickFirst$1(source, [
40180
39960
  'authStrategy',
40181
39961
  'auth_strategy',
40182
39962
  ]) ?? null;
@@ -40188,7 +39968,7 @@ function normalizeOpenTelemetryTraceEmitterOptions(input) {
40188
39968
  authStrategy,
40189
39969
  };
40190
39970
  }
40191
- function pickFirst(source, keys) {
39971
+ function pickFirst$1(source, keys) {
40192
39972
  for (const key of keys) {
40193
39973
  if (Object.prototype.hasOwnProperty.call(source, key)) {
40194
39974
  const value = source[key];
@@ -40199,7 +39979,7 @@ function pickFirst(source, keys) {
40199
39979
  }
40200
39980
  return undefined;
40201
39981
  }
40202
- function extractNonEmptyString(value) {
39982
+ function extractNonEmptyString$1(value) {
40203
39983
  if (typeof value === 'string') {
40204
39984
  const trimmed = value.trim();
40205
39985
  if (trimmed.length > 0) {
@@ -40252,6 +40032,241 @@ var openTelemetryTraceEmitter = /*#__PURE__*/Object.freeze({
40252
40032
  OpenTelemetryTraceEmitter: OpenTelemetryTraceEmitter
40253
40033
  });
40254
40034
 
40035
+ const logger$5 = getLogger('naylence.fame.telemetry.otel_setup');
40036
+ const stringFrom = (...codes) => String.fromCharCode(...codes);
40037
+ const OTEL_PREFIX = `${stringFrom(64, 111, 112, 101, 110, 116, 101, 108, 101, 109, 101, 116, 114, 121)}${stringFrom(47)}`;
40038
+ const OTEL_API_SPEC = `${OTEL_PREFIX}${stringFrom(97, 112, 105)}`;
40039
+ const OTEL_RESOURCES_SPEC = `${OTEL_PREFIX}${stringFrom(114, 101, 115, 111, 117, 114, 99, 101, 115)}`;
40040
+ const OTEL_TRACE_NODE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 110, 111, 100, 101)}`;
40041
+ const OTEL_TRACE_BASE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 98, 97, 115, 101)}`;
40042
+ const OTEL_EXPORTER_HTTP_SPEC = `${OTEL_PREFIX}${stringFrom(101, 120, 112, 111, 114, 116, 101, 114, 45, 116, 114, 97, 99, 101, 45, 111, 116, 108, 112, 45, 104, 116, 116, 112)}`;
40043
+ let registeredOtel = null;
40044
+ async function setupOtel(options) {
40045
+ const normalized = normalizeSetupOtelOptions(options);
40046
+ try {
40047
+ if (registeredOtel) {
40048
+ logger$5.debug('open_telemetry_reusing_provider', {
40049
+ service_name: normalized.serviceName,
40050
+ });
40051
+ return registeredOtel.control;
40052
+ }
40053
+ const [apiModule, resourcesModule, nodeModule, traceBaseModule] = await Promise.all([
40054
+ import(OTEL_API_SPEC),
40055
+ import(OTEL_RESOURCES_SPEC),
40056
+ import(OTEL_TRACE_NODE_SPEC),
40057
+ import(OTEL_TRACE_BASE_SPEC),
40058
+ ]);
40059
+ const { trace } = apiModule;
40060
+ const { defaultResource, resourceFromAttributes } = resourcesModule;
40061
+ const { NodeTracerProvider } = nodeModule;
40062
+ const { BatchSpanProcessor, ConsoleSpanExporter, ParentBasedSampler, AlwaysOnSampler, AlwaysOffSampler, TraceIdRatioBasedSampler, } = traceBaseModule;
40063
+ const currentProvider = trace.getTracerProvider();
40064
+ if (currentProvider && currentProvider instanceof NodeTracerProvider) {
40065
+ return null;
40066
+ }
40067
+ if (currentProvider &&
40068
+ currentProvider.constructor?.name === 'NodeTracerProvider') {
40069
+ logger$5.debug('open_telemetry_existing_node_provider', {
40070
+ service_name: normalized.serviceName,
40071
+ });
40072
+ return null;
40073
+ }
40074
+ logger$5.debug('open_telemetry_initializing', {
40075
+ service_name: normalized.serviceName,
40076
+ endpoint: normalized.endpoint ?? null,
40077
+ environment: normalized.environment ?? null,
40078
+ sampler: normalized.sampler ?? null,
40079
+ headers_present: Boolean(normalized.headers && Object.keys(normalized.headers).length),
40080
+ });
40081
+ const sampler = resolveSampler(normalized.sampler, {
40082
+ ParentBasedSampler,
40083
+ AlwaysOnSampler,
40084
+ AlwaysOffSampler,
40085
+ TraceIdRatioBasedSampler,
40086
+ });
40087
+ const baseResource = defaultResource();
40088
+ const mergedResource = resourceFromAttributes({
40089
+ 'service.name': normalized.serviceName,
40090
+ 'service.instance.id': generateInstanceId(),
40091
+ 'deployment.environment': normalized.environment ?? 'dev',
40092
+ });
40093
+ const resource = baseResource.merge(mergedResource);
40094
+ const exporter = await resolveExporter(normalized.endpoint ?? undefined, normalized.headers, ConsoleSpanExporter);
40095
+ const spanProcessor = new BatchSpanProcessor(exporter);
40096
+ const provider = new NodeTracerProvider({
40097
+ resource,
40098
+ sampler,
40099
+ spanProcessors: [spanProcessor],
40100
+ });
40101
+ provider.register();
40102
+ logger$5.debug('open_telemetry_initialized', {
40103
+ service_name: normalized.serviceName,
40104
+ exporter: exporter.constructor?.name ?? 'unknown_exporter',
40105
+ });
40106
+ const control = {
40107
+ forceFlush: async () => {
40108
+ try {
40109
+ await provider.forceFlush();
40110
+ }
40111
+ catch (flushError) {
40112
+ logger$5.warning('open_telemetry_force_flush_failed', {
40113
+ error: flushError instanceof Error
40114
+ ? flushError.message
40115
+ : String(flushError),
40116
+ });
40117
+ }
40118
+ },
40119
+ shutdown: async () => {
40120
+ try {
40121
+ await provider.shutdown();
40122
+ }
40123
+ catch (shutdownError) {
40124
+ logger$5.warning('open_telemetry_shutdown_failed', {
40125
+ error: shutdownError instanceof Error
40126
+ ? shutdownError.message
40127
+ : String(shutdownError),
40128
+ });
40129
+ }
40130
+ finally {
40131
+ registeredOtel = null;
40132
+ }
40133
+ },
40134
+ };
40135
+ registeredOtel = {
40136
+ provider,
40137
+ control,
40138
+ };
40139
+ return control;
40140
+ }
40141
+ catch (error) {
40142
+ logger$5.error('open_telemetry_not_available', {
40143
+ error: error instanceof Error ? error.message : String(error),
40144
+ stack: error instanceof Error && error.stack ? error.stack : undefined,
40145
+ });
40146
+ return null;
40147
+ }
40148
+ }
40149
+ function normalizeSetupOtelOptions(options) {
40150
+ const source = (options ?? {});
40151
+ const serviceName = extractNonEmptyString(pickFirst(source, ['serviceName', 'service_name'])) ??
40152
+ 'naylence-service';
40153
+ const endpoint = extractNonEmptyString(pickFirst(source, ['endpoint', 'otlpEndpoint', 'otlp_endpoint'])) ?? null;
40154
+ const environment = extractNonEmptyString(pickFirst(source, [
40155
+ 'environment',
40156
+ 'deploymentEnvironment',
40157
+ 'deployment_environment',
40158
+ ])) ?? null;
40159
+ const sampler = extractNonEmptyString(pickFirst(source, ['sampler', 'samplingStrategy', 'sampling_strategy'])) ?? null;
40160
+ const headers = extractHeaders(pickFirst(source, ['headers', 'otlpHeaders', 'otlp_headers']));
40161
+ return {
40162
+ serviceName,
40163
+ endpoint,
40164
+ environment,
40165
+ sampler,
40166
+ headers: headers ?? undefined,
40167
+ };
40168
+ }
40169
+ function pickFirst(source, keys) {
40170
+ for (const key of keys) {
40171
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
40172
+ const value = source[key];
40173
+ if (value !== undefined) {
40174
+ return value;
40175
+ }
40176
+ }
40177
+ }
40178
+ return undefined;
40179
+ }
40180
+ function extractNonEmptyString(value) {
40181
+ if (typeof value === 'string') {
40182
+ const trimmed = value.trim();
40183
+ if (trimmed.length > 0) {
40184
+ return trimmed;
40185
+ }
40186
+ }
40187
+ return undefined;
40188
+ }
40189
+ function extractHeaders(value) {
40190
+ if (!value || typeof value !== 'object') {
40191
+ return null;
40192
+ }
40193
+ const headers = {};
40194
+ for (const [key, raw] of Object.entries(value)) {
40195
+ if (typeof raw === 'string') {
40196
+ headers[key] = raw;
40197
+ }
40198
+ }
40199
+ return Object.keys(headers).length > 0 ? headers : null;
40200
+ }
40201
+ function generateInstanceId() {
40202
+ try {
40203
+ if (typeof crypto !== 'undefined' &&
40204
+ typeof crypto.randomUUID === 'function') {
40205
+ return crypto.randomUUID().replace(/-/g, '');
40206
+ }
40207
+ }
40208
+ catch {
40209
+ // Ignore crypto availability errors
40210
+ }
40211
+ const random = Math.random().toString(16).slice(2);
40212
+ return random.padEnd(32, '0').slice(0, 32);
40213
+ }
40214
+ function resolveSampler(samplerSetting, samplers) {
40215
+ const normalized = (samplerSetting ?? 'parentbased_always_on').toLowerCase();
40216
+ let base;
40217
+ if (normalized === 'always_off') {
40218
+ base = new samplers.AlwaysOffSampler();
40219
+ }
40220
+ else if (normalized === 'always_on' ||
40221
+ normalized === 'parentbased_always_on') {
40222
+ base = new samplers.AlwaysOnSampler();
40223
+ }
40224
+ else if (normalized.startsWith('ratio:')) {
40225
+ const ratioValue = Number.parseFloat(normalized.slice('ratio:'.length));
40226
+ const ratio = Number.isFinite(ratioValue)
40227
+ ? Math.min(Math.max(ratioValue, 0), 1)
40228
+ : 1;
40229
+ base = new samplers.TraceIdRatioBasedSampler(ratio);
40230
+ }
40231
+ else {
40232
+ base = new samplers.AlwaysOnSampler();
40233
+ }
40234
+ return new samplers.ParentBasedSampler({ root: base });
40235
+ }
40236
+ async function resolveExporter(endpoint, headers, ConsoleSpanExporter) {
40237
+ if (endpoint) {
40238
+ try {
40239
+ const exporterModule = await import(OTEL_EXPORTER_HTTP_SPEC);
40240
+ if ('OTLPTraceExporter' in exporterModule) {
40241
+ const { OTLPTraceExporter } = exporterModule;
40242
+ const exporterOptions = {
40243
+ url: endpoint,
40244
+ };
40245
+ if (headers && Object.keys(headers).length > 0) {
40246
+ exporterOptions.headers = headers;
40247
+ }
40248
+ logger$5.debug('open_telemetry_using_otlp_http_exporter', {
40249
+ endpoint,
40250
+ headers_present: Boolean(headers && Object.keys(headers).length),
40251
+ });
40252
+ return new OTLPTraceExporter(exporterOptions);
40253
+ }
40254
+ }
40255
+ catch (error) {
40256
+ logger$5.error('open_telemetry_exporter_not_available', {
40257
+ error: error instanceof Error ? error.message : String(error),
40258
+ });
40259
+ }
40260
+ }
40261
+ logger$5.warning('open_telemetry_falling_back_to_console_exporter');
40262
+ return new ConsoleSpanExporter();
40263
+ }
40264
+
40265
+ var otelSetup = /*#__PURE__*/Object.freeze({
40266
+ __proto__: null,
40267
+ setupOtel: setupOtel
40268
+ });
40269
+
40255
40270
  const logger$4 = getLogger('naylence.fame.security.auth.default_authorizer');
40256
40271
  function decodeCredentials$1(credentials) {
40257
40272
  if (typeof TextDecoder !== 'undefined') {