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

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