@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.
- package/dist/browser/index.cjs +317 -302
- package/dist/browser/index.mjs +317 -302
- package/dist/cjs/naylence/fame/factory-manifest.js +4 -4
- package/dist/cjs/naylence/fame/telemetry/open-telemetry-trace-emitter-factory.js +11 -2
- package/dist/cjs/version.js +2 -2
- package/dist/esm/naylence/fame/factory-manifest.js +4 -4
- package/dist/esm/naylence/fame/telemetry/open-telemetry-trace-emitter-factory.js +10 -1
- package/dist/esm/version.js +2 -2
- package/dist/node/index.cjs +317 -302
- package/dist/node/index.mjs +317 -302
- package/dist/node/node.cjs +305 -290
- package/dist/node/node.mjs +305 -290
- package/dist/types/version.d.ts +1 -1
- package/package.json +1 -1
package/dist/node/index.mjs
CHANGED
|
@@ -13,12 +13,12 @@ import fastify from 'fastify';
|
|
|
13
13
|
import websocketPlugin from '@fastify/websocket';
|
|
14
14
|
|
|
15
15
|
// This file is auto-generated during build - do not edit manually
|
|
16
|
-
// Generated from package.json version: 0.3.5-test.
|
|
16
|
+
// Generated from package.json version: 0.3.5-test.930
|
|
17
17
|
/**
|
|
18
18
|
* The package version, injected at build time.
|
|
19
19
|
* @internal
|
|
20
20
|
*/
|
|
21
|
-
const VERSION = '0.3.5-test.
|
|
21
|
+
const VERSION = '0.3.5-test.930';
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Fame protocol specific error classes with WebSocket close codes and proper inheritance.
|
|
@@ -28370,239 +28370,10 @@ var noopTraceEmitterFactory = /*#__PURE__*/Object.freeze({
|
|
|
28370
28370
|
default: NoopTraceEmitterFactory
|
|
28371
28371
|
});
|
|
28372
28372
|
|
|
28373
|
-
const logger$q = getLogger('naylence.fame.telemetry.otel_setup');
|
|
28374
|
-
const stringFrom = (...codes) => String.fromCharCode(...codes);
|
|
28375
|
-
const OTEL_PREFIX = `${stringFrom(64, 111, 112, 101, 110, 116, 101, 108, 101, 109, 101, 116, 114, 121)}${stringFrom(47)}`;
|
|
28376
|
-
const OTEL_API_SPEC = `${OTEL_PREFIX}${stringFrom(97, 112, 105)}`;
|
|
28377
|
-
const OTEL_RESOURCES_SPEC = `${OTEL_PREFIX}${stringFrom(114, 101, 115, 111, 117, 114, 99, 101, 115)}`;
|
|
28378
|
-
const OTEL_TRACE_NODE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 110, 111, 100, 101)}`;
|
|
28379
|
-
const OTEL_TRACE_BASE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 98, 97, 115, 101)}`;
|
|
28380
|
-
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)}`;
|
|
28381
|
-
let registeredOtel = null;
|
|
28382
|
-
async function setupOtel(options) {
|
|
28383
|
-
const normalized = normalizeSetupOtelOptions(options);
|
|
28384
|
-
try {
|
|
28385
|
-
if (registeredOtel) {
|
|
28386
|
-
logger$q.debug('open_telemetry_reusing_provider', {
|
|
28387
|
-
service_name: normalized.serviceName,
|
|
28388
|
-
});
|
|
28389
|
-
return registeredOtel.control;
|
|
28390
|
-
}
|
|
28391
|
-
const [apiModule, resourcesModule, nodeModule, traceBaseModule] = await Promise.all([
|
|
28392
|
-
import(OTEL_API_SPEC),
|
|
28393
|
-
import(OTEL_RESOURCES_SPEC),
|
|
28394
|
-
import(OTEL_TRACE_NODE_SPEC),
|
|
28395
|
-
import(OTEL_TRACE_BASE_SPEC),
|
|
28396
|
-
]);
|
|
28397
|
-
const { trace } = apiModule;
|
|
28398
|
-
const { defaultResource, resourceFromAttributes } = resourcesModule;
|
|
28399
|
-
const { NodeTracerProvider } = nodeModule;
|
|
28400
|
-
const { BatchSpanProcessor, ConsoleSpanExporter, ParentBasedSampler, AlwaysOnSampler, AlwaysOffSampler, TraceIdRatioBasedSampler, } = traceBaseModule;
|
|
28401
|
-
const currentProvider = trace.getTracerProvider();
|
|
28402
|
-
if (currentProvider && currentProvider instanceof NodeTracerProvider) {
|
|
28403
|
-
return null;
|
|
28404
|
-
}
|
|
28405
|
-
if (currentProvider &&
|
|
28406
|
-
currentProvider.constructor?.name === 'NodeTracerProvider') {
|
|
28407
|
-
logger$q.debug('open_telemetry_existing_node_provider', {
|
|
28408
|
-
service_name: normalized.serviceName,
|
|
28409
|
-
});
|
|
28410
|
-
return null;
|
|
28411
|
-
}
|
|
28412
|
-
logger$q.debug('open_telemetry_initializing', {
|
|
28413
|
-
service_name: normalized.serviceName,
|
|
28414
|
-
endpoint: normalized.endpoint ?? null,
|
|
28415
|
-
environment: normalized.environment ?? null,
|
|
28416
|
-
sampler: normalized.sampler ?? null,
|
|
28417
|
-
headers_present: Boolean(normalized.headers && Object.keys(normalized.headers).length),
|
|
28418
|
-
});
|
|
28419
|
-
const sampler = resolveSampler(normalized.sampler, {
|
|
28420
|
-
ParentBasedSampler,
|
|
28421
|
-
AlwaysOnSampler,
|
|
28422
|
-
AlwaysOffSampler,
|
|
28423
|
-
TraceIdRatioBasedSampler,
|
|
28424
|
-
});
|
|
28425
|
-
const baseResource = defaultResource();
|
|
28426
|
-
const mergedResource = resourceFromAttributes({
|
|
28427
|
-
'service.name': normalized.serviceName,
|
|
28428
|
-
'service.instance.id': generateInstanceId(),
|
|
28429
|
-
'deployment.environment': normalized.environment ?? 'dev',
|
|
28430
|
-
});
|
|
28431
|
-
const resource = baseResource.merge(mergedResource);
|
|
28432
|
-
const exporter = await resolveExporter(normalized.endpoint ?? undefined, normalized.headers, ConsoleSpanExporter);
|
|
28433
|
-
const spanProcessor = new BatchSpanProcessor(exporter);
|
|
28434
|
-
const provider = new NodeTracerProvider({
|
|
28435
|
-
resource,
|
|
28436
|
-
sampler,
|
|
28437
|
-
spanProcessors: [spanProcessor],
|
|
28438
|
-
});
|
|
28439
|
-
provider.register();
|
|
28440
|
-
logger$q.debug('open_telemetry_initialized', {
|
|
28441
|
-
service_name: normalized.serviceName,
|
|
28442
|
-
exporter: exporter.constructor?.name ?? 'unknown_exporter',
|
|
28443
|
-
});
|
|
28444
|
-
const control = {
|
|
28445
|
-
forceFlush: async () => {
|
|
28446
|
-
try {
|
|
28447
|
-
await provider.forceFlush();
|
|
28448
|
-
}
|
|
28449
|
-
catch (flushError) {
|
|
28450
|
-
logger$q.warning('open_telemetry_force_flush_failed', {
|
|
28451
|
-
error: flushError instanceof Error
|
|
28452
|
-
? flushError.message
|
|
28453
|
-
: String(flushError),
|
|
28454
|
-
});
|
|
28455
|
-
}
|
|
28456
|
-
},
|
|
28457
|
-
shutdown: async () => {
|
|
28458
|
-
try {
|
|
28459
|
-
await provider.shutdown();
|
|
28460
|
-
}
|
|
28461
|
-
catch (shutdownError) {
|
|
28462
|
-
logger$q.warning('open_telemetry_shutdown_failed', {
|
|
28463
|
-
error: shutdownError instanceof Error
|
|
28464
|
-
? shutdownError.message
|
|
28465
|
-
: String(shutdownError),
|
|
28466
|
-
});
|
|
28467
|
-
}
|
|
28468
|
-
finally {
|
|
28469
|
-
registeredOtel = null;
|
|
28470
|
-
}
|
|
28471
|
-
},
|
|
28472
|
-
};
|
|
28473
|
-
registeredOtel = {
|
|
28474
|
-
provider,
|
|
28475
|
-
control,
|
|
28476
|
-
};
|
|
28477
|
-
return control;
|
|
28478
|
-
}
|
|
28479
|
-
catch (error) {
|
|
28480
|
-
logger$q.error('open_telemetry_not_available', {
|
|
28481
|
-
error: error instanceof Error ? error.message : String(error),
|
|
28482
|
-
stack: error instanceof Error && error.stack ? error.stack : undefined,
|
|
28483
|
-
});
|
|
28484
|
-
return null;
|
|
28485
|
-
}
|
|
28486
|
-
}
|
|
28487
|
-
function normalizeSetupOtelOptions(options) {
|
|
28488
|
-
const source = (options ?? {});
|
|
28489
|
-
const serviceName = extractNonEmptyString$1(pickFirst$2(source, ['serviceName', 'service_name'])) ??
|
|
28490
|
-
'naylence-service';
|
|
28491
|
-
const endpoint = extractNonEmptyString$1(pickFirst$2(source, ['endpoint', 'otlpEndpoint', 'otlp_endpoint'])) ?? null;
|
|
28492
|
-
const environment = extractNonEmptyString$1(pickFirst$2(source, [
|
|
28493
|
-
'environment',
|
|
28494
|
-
'deploymentEnvironment',
|
|
28495
|
-
'deployment_environment',
|
|
28496
|
-
])) ?? null;
|
|
28497
|
-
const sampler = extractNonEmptyString$1(pickFirst$2(source, ['sampler', 'samplingStrategy', 'sampling_strategy'])) ?? null;
|
|
28498
|
-
const headers = extractHeaders$1(pickFirst$2(source, ['headers', 'otlpHeaders', 'otlp_headers']));
|
|
28499
|
-
return {
|
|
28500
|
-
serviceName,
|
|
28501
|
-
endpoint,
|
|
28502
|
-
environment,
|
|
28503
|
-
sampler,
|
|
28504
|
-
headers: headers ?? undefined,
|
|
28505
|
-
};
|
|
28506
|
-
}
|
|
28507
|
-
function pickFirst$2(source, keys) {
|
|
28508
|
-
for (const key of keys) {
|
|
28509
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
28510
|
-
const value = source[key];
|
|
28511
|
-
if (value !== undefined) {
|
|
28512
|
-
return value;
|
|
28513
|
-
}
|
|
28514
|
-
}
|
|
28515
|
-
}
|
|
28516
|
-
return undefined;
|
|
28517
|
-
}
|
|
28518
|
-
function extractNonEmptyString$1(value) {
|
|
28519
|
-
if (typeof value === 'string') {
|
|
28520
|
-
const trimmed = value.trim();
|
|
28521
|
-
if (trimmed.length > 0) {
|
|
28522
|
-
return trimmed;
|
|
28523
|
-
}
|
|
28524
|
-
}
|
|
28525
|
-
return undefined;
|
|
28526
|
-
}
|
|
28527
|
-
function extractHeaders$1(value) {
|
|
28528
|
-
if (!value || typeof value !== 'object') {
|
|
28529
|
-
return null;
|
|
28530
|
-
}
|
|
28531
|
-
const headers = {};
|
|
28532
|
-
for (const [key, raw] of Object.entries(value)) {
|
|
28533
|
-
if (typeof raw === 'string') {
|
|
28534
|
-
headers[key] = raw;
|
|
28535
|
-
}
|
|
28536
|
-
}
|
|
28537
|
-
return Object.keys(headers).length > 0 ? headers : null;
|
|
28538
|
-
}
|
|
28539
|
-
function generateInstanceId() {
|
|
28540
|
-
try {
|
|
28541
|
-
if (typeof crypto !== 'undefined' &&
|
|
28542
|
-
typeof crypto.randomUUID === 'function') {
|
|
28543
|
-
return crypto.randomUUID().replace(/-/g, '');
|
|
28544
|
-
}
|
|
28545
|
-
}
|
|
28546
|
-
catch {
|
|
28547
|
-
// Ignore crypto availability errors
|
|
28548
|
-
}
|
|
28549
|
-
const random = Math.random().toString(16).slice(2);
|
|
28550
|
-
return random.padEnd(32, '0').slice(0, 32);
|
|
28551
|
-
}
|
|
28552
|
-
function resolveSampler(samplerSetting, samplers) {
|
|
28553
|
-
const normalized = (samplerSetting ?? 'parentbased_always_on').toLowerCase();
|
|
28554
|
-
let base;
|
|
28555
|
-
if (normalized === 'always_off') {
|
|
28556
|
-
base = new samplers.AlwaysOffSampler();
|
|
28557
|
-
}
|
|
28558
|
-
else if (normalized === 'always_on' ||
|
|
28559
|
-
normalized === 'parentbased_always_on') {
|
|
28560
|
-
base = new samplers.AlwaysOnSampler();
|
|
28561
|
-
}
|
|
28562
|
-
else if (normalized.startsWith('ratio:')) {
|
|
28563
|
-
const ratioValue = Number.parseFloat(normalized.slice('ratio:'.length));
|
|
28564
|
-
const ratio = Number.isFinite(ratioValue)
|
|
28565
|
-
? Math.min(Math.max(ratioValue, 0), 1)
|
|
28566
|
-
: 1;
|
|
28567
|
-
base = new samplers.TraceIdRatioBasedSampler(ratio);
|
|
28568
|
-
}
|
|
28569
|
-
else {
|
|
28570
|
-
base = new samplers.AlwaysOnSampler();
|
|
28571
|
-
}
|
|
28572
|
-
return new samplers.ParentBasedSampler({ root: base });
|
|
28573
|
-
}
|
|
28574
|
-
async function resolveExporter(endpoint, headers, ConsoleSpanExporter) {
|
|
28575
|
-
if (endpoint) {
|
|
28576
|
-
try {
|
|
28577
|
-
const exporterModule = await import(OTEL_EXPORTER_HTTP_SPEC);
|
|
28578
|
-
if ('OTLPTraceExporter' in exporterModule) {
|
|
28579
|
-
const { OTLPTraceExporter } = exporterModule;
|
|
28580
|
-
const exporterOptions = {
|
|
28581
|
-
url: endpoint,
|
|
28582
|
-
};
|
|
28583
|
-
if (headers && Object.keys(headers).length > 0) {
|
|
28584
|
-
exporterOptions.headers = headers;
|
|
28585
|
-
}
|
|
28586
|
-
logger$q.debug('open_telemetry_using_otlp_http_exporter', {
|
|
28587
|
-
endpoint,
|
|
28588
|
-
headers_present: Boolean(headers && Object.keys(headers).length),
|
|
28589
|
-
});
|
|
28590
|
-
return new OTLPTraceExporter(exporterOptions);
|
|
28591
|
-
}
|
|
28592
|
-
}
|
|
28593
|
-
catch (error) {
|
|
28594
|
-
logger$q.error('open_telemetry_exporter_not_available', {
|
|
28595
|
-
error: error instanceof Error ? error.message : String(error),
|
|
28596
|
-
});
|
|
28597
|
-
}
|
|
28598
|
-
}
|
|
28599
|
-
logger$q.warning('open_telemetry_falling_back_to_console_exporter');
|
|
28600
|
-
return new ConsoleSpanExporter();
|
|
28601
|
-
}
|
|
28602
|
-
|
|
28603
28373
|
let openTelemetryTraceEmitterModulePromise = null;
|
|
28604
28374
|
let otelApiModulePromise = null;
|
|
28605
|
-
|
|
28375
|
+
let otelSetupModulePromise = null;
|
|
28376
|
+
const logger$q = getLogger('naylence.fame.telemetry.open_telemetry_trace_emitter_factory');
|
|
28606
28377
|
const MISSING_OTEL_HELP_MESSAGE = 'Missing optional OpenTelemetry dependency. Install @opentelemetry/api (and related packages) to enable trace emission.';
|
|
28607
28378
|
function getOpenTelemetryTraceEmitterModule() {
|
|
28608
28379
|
if (!openTelemetryTraceEmitterModulePromise) {
|
|
@@ -28620,6 +28391,14 @@ function getOtelApiModule() {
|
|
|
28620
28391
|
}
|
|
28621
28392
|
return otelApiModulePromise;
|
|
28622
28393
|
}
|
|
28394
|
+
function getOtelSetupModule() {
|
|
28395
|
+
if (!otelSetupModulePromise) {
|
|
28396
|
+
otelSetupModulePromise = safeImport(() => Promise.resolve().then(function () { return otelSetup; }), '@opentelemetry/api', {
|
|
28397
|
+
helpMessage: MISSING_OTEL_HELP_MESSAGE,
|
|
28398
|
+
});
|
|
28399
|
+
}
|
|
28400
|
+
return otelSetupModulePromise;
|
|
28401
|
+
}
|
|
28623
28402
|
const FACTORY_META$Z = {
|
|
28624
28403
|
base: TRACE_EMITTER_FACTORY_BASE_TYPE,
|
|
28625
28404
|
key: 'OpenTelemetryTraceEmitter',
|
|
@@ -28643,7 +28422,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
|
|
|
28643
28422
|
await AuthInjectionStrategyFactory.createAuthInjectionStrategy(normalized.auth);
|
|
28644
28423
|
try {
|
|
28645
28424
|
await authStrategy.apply(mergedHeaders);
|
|
28646
|
-
logger$
|
|
28425
|
+
logger$q.info('trace_emitter_auth_applied', {
|
|
28647
28426
|
service_name: normalized.serviceName,
|
|
28648
28427
|
});
|
|
28649
28428
|
}
|
|
@@ -28659,6 +28438,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
|
|
|
28659
28438
|
}
|
|
28660
28439
|
let lifecycle = null;
|
|
28661
28440
|
try {
|
|
28441
|
+
const { setupOtel } = await getOtelSetupModule();
|
|
28662
28442
|
lifecycle = await setupOtel({
|
|
28663
28443
|
serviceName: normalized.serviceName,
|
|
28664
28444
|
endpoint: normalized.endpoint,
|
|
@@ -28666,7 +28446,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
|
|
|
28666
28446
|
sampler: normalized.sampler,
|
|
28667
28447
|
headers: Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined,
|
|
28668
28448
|
});
|
|
28669
|
-
logger$
|
|
28449
|
+
logger$q.debug('trace_emitter_lifecycle_acquired', {
|
|
28670
28450
|
service_name: normalized.serviceName,
|
|
28671
28451
|
lifecycle_available: Boolean(lifecycle),
|
|
28672
28452
|
});
|
|
@@ -28704,7 +28484,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
|
|
|
28704
28484
|
}
|
|
28705
28485
|
try {
|
|
28706
28486
|
const emitter = new OpenTelemetryTraceEmitter(emitterOptions);
|
|
28707
|
-
logger$
|
|
28487
|
+
logger$q.debug('trace_emitter_created', {
|
|
28708
28488
|
service_name: normalized.serviceName,
|
|
28709
28489
|
has_lifecycle: Boolean(lifecycle),
|
|
28710
28490
|
has_auth_strategy: Boolean(authStrategy),
|
|
@@ -28736,17 +28516,17 @@ function normalizeConfig$r(config) {
|
|
|
28736
28516
|
};
|
|
28737
28517
|
}
|
|
28738
28518
|
const candidate = config;
|
|
28739
|
-
const serviceName = extractString(pickFirst$
|
|
28519
|
+
const serviceName = extractString(pickFirst$2(candidate, ['serviceName', 'service_name'])) ??
|
|
28740
28520
|
'naylence-service';
|
|
28741
|
-
const endpoint = extractString(pickFirst$
|
|
28742
|
-
const environment = extractString(pickFirst$
|
|
28521
|
+
const endpoint = extractString(pickFirst$2(candidate, ['endpoint', 'otlpEndpoint', 'otlp_endpoint'])) ?? null;
|
|
28522
|
+
const environment = extractString(pickFirst$2(candidate, [
|
|
28743
28523
|
'environment',
|
|
28744
28524
|
'deploymentEnvironment',
|
|
28745
28525
|
'deployment_environment',
|
|
28746
28526
|
])) ?? null;
|
|
28747
|
-
const sampler = extractString(pickFirst$
|
|
28748
|
-
const headersFromConfig = extractHeaders(pickFirst$
|
|
28749
|
-
const authConfig = pickFirst$
|
|
28527
|
+
const sampler = extractString(pickFirst$2(candidate, ['sampler', 'samplingStrategy', 'sampling_strategy'])) ?? null;
|
|
28528
|
+
const headersFromConfig = extractHeaders$1(pickFirst$2(candidate, ['headers', 'otlpHeaders', 'otlp_headers']));
|
|
28529
|
+
const authConfig = pickFirst$2(candidate, [
|
|
28750
28530
|
'auth',
|
|
28751
28531
|
]);
|
|
28752
28532
|
return {
|
|
@@ -28764,7 +28544,7 @@ function extractString(value) {
|
|
|
28764
28544
|
}
|
|
28765
28545
|
return undefined;
|
|
28766
28546
|
}
|
|
28767
|
-
function pickFirst$
|
|
28547
|
+
function pickFirst$2(source, keys) {
|
|
28768
28548
|
for (const key of keys) {
|
|
28769
28549
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
28770
28550
|
const value = source[key];
|
|
@@ -28775,7 +28555,7 @@ function pickFirst$1(source, keys) {
|
|
|
28775
28555
|
}
|
|
28776
28556
|
return undefined;
|
|
28777
28557
|
}
|
|
28778
|
-
function extractHeaders(value) {
|
|
28558
|
+
function extractHeaders$1(value) {
|
|
28779
28559
|
if (!value || typeof value !== 'object') {
|
|
28780
28560
|
return null;
|
|
28781
28561
|
}
|
|
@@ -28795,7 +28575,7 @@ var openTelemetryTraceEmitterFactory = /*#__PURE__*/Object.freeze({
|
|
|
28795
28575
|
default: OpenTelemetryTraceEmitterFactory
|
|
28796
28576
|
});
|
|
28797
28577
|
|
|
28798
|
-
const logger$
|
|
28578
|
+
const logger$p = getLogger('naylence.fame.telemetry.trace_emitter_profile_factory');
|
|
28799
28579
|
const PROFILE_NAME_NOOP$1 = 'noop';
|
|
28800
28580
|
const PROFILE_NAME_OPEN_TELEMETRY = 'open-telemetry';
|
|
28801
28581
|
const ENV_VAR_TELEMETRY_SERVICE_NAME = 'FAME_TELEMETRY_SERVICE_NAME';
|
|
@@ -28823,7 +28603,7 @@ class TraceEmitterProfileFactory extends TraceEmitterFactory {
|
|
|
28823
28603
|
async create(config, ...factoryArgs) {
|
|
28824
28604
|
const normalized = normalizeTraceEmitterProfileConfig(config);
|
|
28825
28605
|
const profileConfig = resolveProfileConfig$2(normalized.profile);
|
|
28826
|
-
logger$
|
|
28606
|
+
logger$p.debug('enabling_trace_emitter_profile', {
|
|
28827
28607
|
profile: normalized.profile,
|
|
28828
28608
|
});
|
|
28829
28609
|
const traceEmitter = await TraceEmitterFactory.createTraceEmitter(profileConfig, {
|
|
@@ -29233,7 +29013,7 @@ var httpListenerFactory = /*#__PURE__*/Object.freeze({
|
|
|
29233
29013
|
default: HttpListenerFactory
|
|
29234
29014
|
});
|
|
29235
29015
|
|
|
29236
|
-
const logger$
|
|
29016
|
+
const logger$o = getLogger('naylence.fame.connector.http_stateless_connector');
|
|
29237
29017
|
class HttpStatelessConnector extends BaseAsyncConnector {
|
|
29238
29018
|
constructor(config, dependencies = {}) {
|
|
29239
29019
|
super(config);
|
|
@@ -29279,7 +29059,7 @@ class HttpStatelessConnector extends BaseAsyncConnector {
|
|
|
29279
29059
|
}
|
|
29280
29060
|
catch (error) {
|
|
29281
29061
|
if (error instanceof QueueFullError) {
|
|
29282
|
-
logger$
|
|
29062
|
+
logger$o.warning('receive_queue_full', {
|
|
29283
29063
|
url: this.url,
|
|
29284
29064
|
});
|
|
29285
29065
|
}
|
|
@@ -29301,7 +29081,7 @@ class HttpStatelessConnector extends BaseAsyncConnector {
|
|
|
29301
29081
|
});
|
|
29302
29082
|
if (!response.ok) {
|
|
29303
29083
|
const statusText = response.statusText || 'HTTP error';
|
|
29304
|
-
logger$
|
|
29084
|
+
logger$o.error('http_request_failed', {
|
|
29305
29085
|
url: this.url,
|
|
29306
29086
|
status: response.status,
|
|
29307
29087
|
statusText,
|
|
@@ -29313,7 +29093,7 @@ class HttpStatelessConnector extends BaseAsyncConnector {
|
|
|
29313
29093
|
if (error instanceof FameTransportClose) {
|
|
29314
29094
|
throw error;
|
|
29315
29095
|
}
|
|
29316
|
-
logger$
|
|
29096
|
+
logger$o.error('http_request_error', {
|
|
29317
29097
|
url: this.url,
|
|
29318
29098
|
error: error instanceof Error ? error.message : String(error),
|
|
29319
29099
|
});
|
|
@@ -29751,7 +29531,7 @@ var inpageListenerFactory = /*#__PURE__*/Object.freeze({
|
|
|
29751
29531
|
default: InPageListenerFactory
|
|
29752
29532
|
});
|
|
29753
29533
|
|
|
29754
|
-
const logger$
|
|
29534
|
+
const logger$n = getLogger('naylence.fame.connector.websocket_connector_factory');
|
|
29755
29535
|
let sslLoader = null;
|
|
29756
29536
|
function setWebSocketConnectorSslLoader(loader) {
|
|
29757
29537
|
sslLoader = loader;
|
|
@@ -30035,7 +29815,7 @@ class WebSocketConnectorFactory extends ConnectorFactory {
|
|
|
30035
29815
|
}
|
|
30036
29816
|
async _defaultWebSocketClient(url, subprotocols, headers) {
|
|
30037
29817
|
try {
|
|
30038
|
-
logger$
|
|
29818
|
+
logger$n.debug('websocket_connector_connecting', { url, subprotocols });
|
|
30039
29819
|
if (typeof window !== 'undefined' &&
|
|
30040
29820
|
typeof window.WebSocket !== 'undefined') {
|
|
30041
29821
|
return await this._createBrowserWebSocket(url, subprotocols);
|
|
@@ -30118,7 +29898,7 @@ class WebSocketConnectorFactory extends ConnectorFactory {
|
|
|
30118
29898
|
await Promise.resolve().then(function () { return websocketConnectorNodeSsl; });
|
|
30119
29899
|
}
|
|
30120
29900
|
catch (error) {
|
|
30121
|
-
logger$
|
|
29901
|
+
logger$n.debug('ssl_certificate_loader_import_failed', {
|
|
30122
29902
|
error: error instanceof Error ? error.message : String(error),
|
|
30123
29903
|
});
|
|
30124
29904
|
}
|
|
@@ -30127,7 +29907,7 @@ class WebSocketConnectorFactory extends ConnectorFactory {
|
|
|
30127
29907
|
if (!loader) {
|
|
30128
29908
|
return undefined;
|
|
30129
29909
|
}
|
|
30130
|
-
return await loader(logger$
|
|
29910
|
+
return await loader(logger$n);
|
|
30131
29911
|
}
|
|
30132
29912
|
}
|
|
30133
29913
|
|
|
@@ -30462,7 +30242,7 @@ var atMostOnceDeliveryPolicyFactory = /*#__PURE__*/Object.freeze({
|
|
|
30462
30242
|
default: AtMostOnceDeliveryPolicyFactory
|
|
30463
30243
|
});
|
|
30464
30244
|
|
|
30465
|
-
const logger$
|
|
30245
|
+
const logger$m = getLogger('naylence.fame.delivery.delivery_profile_factory');
|
|
30466
30246
|
const PROFILE_NAME_AT_LEAST_ONCE = 'at-least-once';
|
|
30467
30247
|
const PROFILE_NAME_AT_MOST_ONCE = 'at-most-once';
|
|
30468
30248
|
const ENV_VAR_FAME_DELIVERY_MAX_RETRIES = 'FAME_DELIVERY_MAX_RETRIES';
|
|
@@ -30502,7 +30282,7 @@ class DeliveryProfileFactory extends DeliveryPolicyFactory {
|
|
|
30502
30282
|
async create(config) {
|
|
30503
30283
|
const normalized = normalizeDeliveryProfileConfig(config);
|
|
30504
30284
|
const profileConfig = resolveProfileConfig$1(normalized.profile);
|
|
30505
|
-
logger$
|
|
30285
|
+
logger$m.debug('enabling_delivery_profile', { profile: normalized.profile });
|
|
30506
30286
|
const policy = await DeliveryPolicyFactory.createDeliveryPolicy(profileConfig);
|
|
30507
30287
|
if (!policy) {
|
|
30508
30288
|
throw new Error(`Failed to create delivery policy for profile: ${normalized.profile}`);
|
|
@@ -30585,7 +30365,7 @@ function isSinkService(service) {
|
|
|
30585
30365
|
service.capabilities.includes(SINK_CAPABILITY));
|
|
30586
30366
|
}
|
|
30587
30367
|
|
|
30588
|
-
const logger$
|
|
30368
|
+
const logger$l = getLogger('naylence.fame.fabric.in_process');
|
|
30589
30369
|
function normalizeNodeConfig(config) {
|
|
30590
30370
|
if (config && typeof config === 'object' && !Array.isArray(config)) {
|
|
30591
30371
|
return config;
|
|
@@ -30609,13 +30389,13 @@ class InProcessFameFabric extends FameFabric {
|
|
|
30609
30389
|
this._versionLogged = true;
|
|
30610
30390
|
const version = await resolveRuntimeVersion();
|
|
30611
30391
|
if (version) {
|
|
30612
|
-
logger$
|
|
30392
|
+
logger$l.info('naylence_runtime_startup', {
|
|
30613
30393
|
version,
|
|
30614
30394
|
fabric_type: 'in_process',
|
|
30615
30395
|
});
|
|
30616
30396
|
}
|
|
30617
30397
|
else {
|
|
30618
|
-
logger$
|
|
30398
|
+
logger$l.warning('naylence_runtime_version_not_found', {
|
|
30619
30399
|
message: 'Could not determine package version',
|
|
30620
30400
|
fabric_type: 'in_process',
|
|
30621
30401
|
});
|
|
@@ -30640,7 +30420,7 @@ class InProcessFameFabric extends FameFabric {
|
|
|
30640
30420
|
return;
|
|
30641
30421
|
}
|
|
30642
30422
|
await this.logStartupVersion();
|
|
30643
|
-
logger$
|
|
30423
|
+
logger$l.debug('starting_fabric', { type: 'in_process' });
|
|
30644
30424
|
if (!this._currentNode) {
|
|
30645
30425
|
const nodeConfig = normalizeNodeConfig(this._config?.node ?? null);
|
|
30646
30426
|
this._currentNode = await NodeLikeFactory.createNode(nodeConfig);
|
|
@@ -30775,7 +30555,7 @@ var inProcessFameFabricFactory = /*#__PURE__*/Object.freeze({
|
|
|
30775
30555
|
default: InProcessFameFabricFactory
|
|
30776
30556
|
});
|
|
30777
30557
|
|
|
30778
|
-
const logger$
|
|
30558
|
+
const logger$k = getLogger('naylence.fame.node.admission.admission_profile_factory');
|
|
30779
30559
|
const ENV_VAR_IS_ROOT = 'FAME_ROOT';
|
|
30780
30560
|
const ENV_VAR_JWT_AUDIENCE = 'FAME_JWT_AUDIENCE';
|
|
30781
30561
|
const ENV_VAR_ADMISSION_TOKEN_URL = 'FAME_ADMISSION_TOKEN_URL';
|
|
@@ -31010,7 +30790,7 @@ class AdmissionProfileFactory extends AdmissionClientFactory {
|
|
|
31010
30790
|
async create(config) {
|
|
31011
30791
|
const normalized = normalizeConfig$m(config);
|
|
31012
30792
|
const profileConfig = resolveProfileConfig(normalized.profile);
|
|
31013
|
-
logger$
|
|
30793
|
+
logger$k.debug('enabling_admission_profile', { profile: normalized.profile });
|
|
31014
30794
|
return AdmissionClientFactory.createAdmissionClient(profileConfig);
|
|
31015
30795
|
}
|
|
31016
30796
|
}
|
|
@@ -31049,7 +30829,7 @@ var admissionProfileFactory = /*#__PURE__*/Object.freeze({
|
|
|
31049
30829
|
default: AdmissionProfileFactory
|
|
31050
30830
|
});
|
|
31051
30831
|
|
|
31052
|
-
const logger$
|
|
30832
|
+
const logger$j = getLogger('naylence.fame.node.admission.direct_admission_client');
|
|
31053
30833
|
class DirectAdmissionClient {
|
|
31054
30834
|
constructor(options) {
|
|
31055
30835
|
this.hasUpstream = true;
|
|
@@ -31074,7 +30854,7 @@ class DirectAdmissionClient {
|
|
|
31074
30854
|
}
|
|
31075
30855
|
}
|
|
31076
30856
|
async hello(systemId, instanceId, requestedLogicals) {
|
|
31077
|
-
logger$
|
|
30857
|
+
logger$j.debug('direct_admission_hello_start', {
|
|
31078
30858
|
providedSystemId: systemId,
|
|
31079
30859
|
instanceId,
|
|
31080
30860
|
requestedLogicals,
|
|
@@ -31082,7 +30862,7 @@ class DirectAdmissionClient {
|
|
|
31082
30862
|
const effectiveSystemId = systemId && systemId.trim().length > 0
|
|
31083
30863
|
? systemId
|
|
31084
30864
|
: await generateIdAsync({ mode: 'fingerprint' }).catch(async () => {
|
|
31085
|
-
logger$
|
|
30865
|
+
logger$j.debug('direct_admission_fingerprint_generation_failed', {
|
|
31086
30866
|
reason: 'falling back to random id',
|
|
31087
30867
|
});
|
|
31088
30868
|
return generateIdAsync({ mode: 'random' });
|
|
@@ -31104,7 +30884,7 @@ class DirectAdmissionClient {
|
|
|
31104
30884
|
const envelope = createFameEnvelope({
|
|
31105
30885
|
frame: welcomeFrame,
|
|
31106
30886
|
});
|
|
31107
|
-
logger$
|
|
30887
|
+
logger$j.debug('direct_admission_hello_success', {
|
|
31108
30888
|
systemId: welcomeFrame.systemId,
|
|
31109
30889
|
instanceId: welcomeFrame.instanceId,
|
|
31110
30890
|
acceptedLogicals: welcomeFrame.acceptedLogicals,
|
|
@@ -31281,7 +31061,7 @@ var noAuthInjectionStrategyFactory = /*#__PURE__*/Object.freeze({
|
|
|
31281
31061
|
default: NoAuthInjectionStrategyFactory
|
|
31282
31062
|
});
|
|
31283
31063
|
|
|
31284
|
-
const logger$
|
|
31064
|
+
const logger$i = getLogger('naylence.fame.node.admission.welcome_service_client');
|
|
31285
31065
|
class WelcomeServiceClient {
|
|
31286
31066
|
constructor(options) {
|
|
31287
31067
|
this.hasUpstream = options.hasUpstream ?? options.has_upstream ?? false;
|
|
@@ -31330,7 +31110,7 @@ class WelcomeServiceClient {
|
|
|
31330
31110
|
'Content-Type': 'application/json',
|
|
31331
31111
|
...authHeaders,
|
|
31332
31112
|
};
|
|
31333
|
-
logger$
|
|
31113
|
+
logger$i.debug('welcome_service_hello_request', {
|
|
31334
31114
|
url: this.url,
|
|
31335
31115
|
systemId,
|
|
31336
31116
|
instanceId,
|
|
@@ -31366,7 +31146,7 @@ class WelcomeServiceClient {
|
|
|
31366
31146
|
parsedEnvelope.frame.type !== 'NodeWelcome') {
|
|
31367
31147
|
throw new Error(`Unexpected frame type '${parsedEnvelope.frame?.type ?? 'unknown'}'`);
|
|
31368
31148
|
}
|
|
31369
|
-
logger$
|
|
31149
|
+
logger$i.debug('welcome_service_hello_success', {
|
|
31370
31150
|
systemId: parsedEnvelope.frame.systemId,
|
|
31371
31151
|
targetSystemId: parsedEnvelope.frame.targetSystemId,
|
|
31372
31152
|
assignedPath: parsedEnvelope.frame.assignedPath,
|
|
@@ -32502,7 +32282,7 @@ var noopTokenVerifierFactory = /*#__PURE__*/Object.freeze({
|
|
|
32502
32282
|
default: NoopTokenVerifierFactory
|
|
32503
32283
|
});
|
|
32504
32284
|
|
|
32505
|
-
const logger$
|
|
32285
|
+
const logger$h = getLogger('naylence.fame.security.auth.oauth2_authorizer_factory');
|
|
32506
32286
|
let oauth2AuthorizerModulePromise = null;
|
|
32507
32287
|
function getOAuth2AuthorizerModule() {
|
|
32508
32288
|
if (!oauth2AuthorizerModulePromise) {
|
|
@@ -32529,12 +32309,12 @@ class OAuth2AuthorizerFactory extends AuthorizerFactory {
|
|
|
32529
32309
|
if (normalized.tokenIssuerConfig) {
|
|
32530
32310
|
try {
|
|
32531
32311
|
tokenIssuer = await TokenIssuerFactory.createTokenIssuer(normalized.tokenIssuerConfig);
|
|
32532
|
-
logger$
|
|
32312
|
+
logger$h.debug('token_issuer_created_for_reverse_auth', {
|
|
32533
32313
|
issuer_type: normalized.tokenIssuerConfig.type,
|
|
32534
32314
|
});
|
|
32535
32315
|
}
|
|
32536
32316
|
catch (error) {
|
|
32537
|
-
logger$
|
|
32317
|
+
logger$h.warning('failed_to_create_token_issuer_for_reverse_auth', {
|
|
32538
32318
|
error: error instanceof Error ? error.message : String(error),
|
|
32539
32319
|
issuer_config: normalized.tokenIssuerConfig,
|
|
32540
32320
|
});
|
|
@@ -33487,7 +33267,7 @@ var sessionKeyCredentialProviderFactory = /*#__PURE__*/Object.freeze({
|
|
|
33487
33267
|
normalizeSessionKeyConfig: normalizeSessionKeyConfig
|
|
33488
33268
|
});
|
|
33489
33269
|
|
|
33490
|
-
const logger$
|
|
33270
|
+
const logger$g = getLogger('naylence.fame.security.default_security_manager_factory');
|
|
33491
33271
|
function normalizeDefaultSecurityManagerConfig(config) {
|
|
33492
33272
|
if (!config) {
|
|
33493
33273
|
return null;
|
|
@@ -33655,7 +33435,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
33655
33435
|
return await KeyStoreFactory.createKeyStore(value, createOptions ?? undefined);
|
|
33656
33436
|
}
|
|
33657
33437
|
catch (error) {
|
|
33658
|
-
logger$
|
|
33438
|
+
logger$g.error('failed_to_create_key_store_from_config', {
|
|
33659
33439
|
error: error instanceof Error ? error.message : String(error),
|
|
33660
33440
|
});
|
|
33661
33441
|
return null;
|
|
@@ -33691,7 +33471,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
33691
33471
|
return null;
|
|
33692
33472
|
}
|
|
33693
33473
|
const cryptoProvider = cryptoProviderOverride ?? null;
|
|
33694
|
-
logger$
|
|
33474
|
+
logger$g.debug('auto_create_envelope_signer', {
|
|
33695
33475
|
has_crypto_override: Boolean(cryptoProviderOverride),
|
|
33696
33476
|
override_constructor: cryptoProviderOverride
|
|
33697
33477
|
? (cryptoProviderOverride.constructor?.name ?? 'unknown')
|
|
@@ -33712,7 +33492,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
33712
33492
|
});
|
|
33713
33493
|
}
|
|
33714
33494
|
catch (error) {
|
|
33715
|
-
logger$
|
|
33495
|
+
logger$g.error('failed_to_auto_create_envelope_signer', {
|
|
33716
33496
|
error: error instanceof Error ? error.message : String(error),
|
|
33717
33497
|
exc_info: true,
|
|
33718
33498
|
});
|
|
@@ -33747,7 +33527,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
33747
33527
|
});
|
|
33748
33528
|
}
|
|
33749
33529
|
catch (error) {
|
|
33750
|
-
logger$
|
|
33530
|
+
logger$g.error('failed_to_auto_create_envelope_verifier', {
|
|
33751
33531
|
error: error instanceof Error ? error.message : String(error),
|
|
33752
33532
|
exc_info: true,
|
|
33753
33533
|
});
|
|
@@ -33759,7 +33539,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
33759
33539
|
if (encryptionConfig &&
|
|
33760
33540
|
DefaultSecurityManagerFactory.isConfigLike(encryptionConfig)) {
|
|
33761
33541
|
if (!keyManager) {
|
|
33762
|
-
logger$
|
|
33542
|
+
logger$g.warning('encryption_manager_config_requires_key_manager');
|
|
33763
33543
|
return { encryptionManager: null, secureChannelManager };
|
|
33764
33544
|
}
|
|
33765
33545
|
const manager = await EncryptionManagerFactory.createEncryptionManager(encryptionConfig, {
|
|
@@ -33796,7 +33576,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
33796
33576
|
return { encryptionManager: manager, secureChannelManager };
|
|
33797
33577
|
}
|
|
33798
33578
|
catch (error) {
|
|
33799
|
-
logger$
|
|
33579
|
+
logger$g.error('failed_to_auto_create_encryption_manager', {
|
|
33800
33580
|
error: error instanceof Error ? error.message : String(error),
|
|
33801
33581
|
exc_info: true,
|
|
33802
33582
|
});
|
|
@@ -33839,7 +33619,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
33839
33619
|
});
|
|
33840
33620
|
}
|
|
33841
33621
|
catch (error) {
|
|
33842
|
-
logger$
|
|
33622
|
+
logger$g.error('failed_to_auto_create_key_manager', {
|
|
33843
33623
|
error: error instanceof Error ? error.message : String(error),
|
|
33844
33624
|
exc_info: true,
|
|
33845
33625
|
});
|
|
@@ -33888,7 +33668,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
33888
33668
|
})) ?? null);
|
|
33889
33669
|
}
|
|
33890
33670
|
catch (error) {
|
|
33891
|
-
logger$
|
|
33671
|
+
logger$g.error('failed_to_auto_create_authorizer', {
|
|
33892
33672
|
error: error instanceof Error ? error.message : String(error),
|
|
33893
33673
|
exc_info: true,
|
|
33894
33674
|
});
|
|
@@ -33917,7 +33697,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
33917
33697
|
});
|
|
33918
33698
|
}
|
|
33919
33699
|
catch (error) {
|
|
33920
|
-
logger$
|
|
33700
|
+
logger$g.error('failed_to_auto_create_certificate_manager', {
|
|
33921
33701
|
error: error instanceof Error ? error.message : String(error),
|
|
33922
33702
|
exc_info: true,
|
|
33923
33703
|
});
|
|
@@ -34175,7 +33955,7 @@ var defaultKeyManagerFactory = /*#__PURE__*/Object.freeze({
|
|
|
34175
33955
|
default: DefaultKeyManagerFactory
|
|
34176
33956
|
});
|
|
34177
33957
|
|
|
34178
|
-
const logger$
|
|
33958
|
+
const logger$f = getLogger('naylence.fame.security.keys.in_memory_key_store');
|
|
34179
33959
|
class InMemoryKeyStore extends KeyStore {
|
|
34180
33960
|
constructor(initialKeys = null) {
|
|
34181
33961
|
super();
|
|
@@ -34197,7 +33977,7 @@ class InMemoryKeyStore extends KeyStore {
|
|
|
34197
33977
|
}
|
|
34198
33978
|
catch (error) {
|
|
34199
33979
|
if (error instanceof JWKValidationError) {
|
|
34200
|
-
logger$
|
|
33980
|
+
logger$f.warning('rejected_invalid_jwk_individual', {
|
|
34201
33981
|
kid,
|
|
34202
33982
|
error: error.message,
|
|
34203
33983
|
});
|
|
@@ -34241,7 +34021,7 @@ class InMemoryKeyStore extends KeyStore {
|
|
|
34241
34021
|
}
|
|
34242
34022
|
}
|
|
34243
34023
|
if (staleKeys.length > 0) {
|
|
34244
|
-
logger$
|
|
34024
|
+
logger$f.debug('removing_stale_keys_before_adding_new_key', {
|
|
34245
34025
|
new_kid: kid,
|
|
34246
34026
|
physical_path: physicalPath,
|
|
34247
34027
|
base_path: basePath,
|
|
@@ -34269,7 +34049,7 @@ class InMemoryKeyStore extends KeyStore {
|
|
|
34269
34049
|
}
|
|
34270
34050
|
keysByPath[path].push(existingKid);
|
|
34271
34051
|
}
|
|
34272
|
-
logger$
|
|
34052
|
+
logger$f.debug('key_lookup_failed', {
|
|
34273
34053
|
missing_kid: kid,
|
|
34274
34054
|
available_kids: Array.from(this.keys.keys()),
|
|
34275
34055
|
keys_by_path: keysByPath,
|
|
@@ -34318,7 +34098,7 @@ class InMemoryKeyStore extends KeyStore {
|
|
|
34318
34098
|
this.keys.delete(kid);
|
|
34319
34099
|
}
|
|
34320
34100
|
if (keysToRemove.length > 0) {
|
|
34321
|
-
logger$
|
|
34101
|
+
logger$f.debug('removed_keys_for_path', {
|
|
34322
34102
|
physical_path: physicalPath,
|
|
34323
34103
|
removed_key_ids: keysToRemove,
|
|
34324
34104
|
count: keysToRemove.length,
|
|
@@ -34329,7 +34109,7 @@ class InMemoryKeyStore extends KeyStore {
|
|
|
34329
34109
|
async removeKey(kid) {
|
|
34330
34110
|
const removed = this.keys.delete(kid);
|
|
34331
34111
|
if (removed) {
|
|
34332
|
-
logger$
|
|
34112
|
+
logger$f.debug('removed_individual_key', { kid });
|
|
34333
34113
|
}
|
|
34334
34114
|
return removed;
|
|
34335
34115
|
}
|
|
@@ -34695,7 +34475,7 @@ var capabilityAwareRoutingPolicyFactory = /*#__PURE__*/Object.freeze({
|
|
|
34695
34475
|
default: CapabilityAwareRoutingPolicyFactory
|
|
34696
34476
|
});
|
|
34697
34477
|
|
|
34698
|
-
const logger$
|
|
34478
|
+
const logger$e = getLogger('naylence.fame.sentinel.composite_routing_policy_factory');
|
|
34699
34479
|
const FACTORY_META$8 = {
|
|
34700
34480
|
base: ROUTING_POLICY_FACTORY_BASE,
|
|
34701
34481
|
key: 'CompositeRoutingPolicy',
|
|
@@ -34721,13 +34501,13 @@ class CompositeRoutingPolicyFactory extends RoutingPolicyFactory {
|
|
|
34721
34501
|
policies.push(policy);
|
|
34722
34502
|
}
|
|
34723
34503
|
else {
|
|
34724
|
-
logger$
|
|
34504
|
+
logger$e.warning('composite_policy_null_child', {
|
|
34725
34505
|
config: policyConfig,
|
|
34726
34506
|
});
|
|
34727
34507
|
}
|
|
34728
34508
|
}
|
|
34729
34509
|
catch (error) {
|
|
34730
|
-
logger$
|
|
34510
|
+
logger$e.warning('composite_policy_child_error', {
|
|
34731
34511
|
error: error instanceof Error ? error.message : String(error),
|
|
34732
34512
|
config: policyConfig,
|
|
34733
34513
|
});
|
|
@@ -35023,7 +34803,7 @@ var hrwLoadBalancingStrategyFactory = /*#__PURE__*/Object.freeze({
|
|
|
35023
34803
|
default: HRWLoadBalancingStrategyFactory
|
|
35024
34804
|
});
|
|
35025
34805
|
|
|
35026
|
-
const logger$
|
|
34806
|
+
const logger$d = getLogger('naylence.fame.sentinel.load_balancing.load_balancing_profile_factory');
|
|
35027
34807
|
const PROFILE_NAME_RANDOM = 'random';
|
|
35028
34808
|
const PROFILE_NAME_ROUND_ROBIN = 'round_robin';
|
|
35029
34809
|
const PROFILE_NAME_HRW = 'hrw';
|
|
@@ -35057,7 +34837,7 @@ class LoadBalancingProfileFactory extends LoadBalancingStrategyFactory {
|
|
|
35057
34837
|
async create(config, ...factoryArgs) {
|
|
35058
34838
|
const finalConfig = this.normalizeConfig(config);
|
|
35059
34839
|
const profileName = finalConfig.profile ?? PROFILE_NAME_DEVELOPMENT$1;
|
|
35060
|
-
logger$
|
|
34840
|
+
logger$d.debug('enabling_load_balancing_profile', { profile: profileName });
|
|
35061
34841
|
const strategyConfig = this.resolveProfile(profileName);
|
|
35062
34842
|
const strategy = await createResource$1(LOAD_BALANCING_STRATEGY_FACTORY_BASE, strategyConfig, { factoryArgs });
|
|
35063
34843
|
if (!strategy) {
|
|
@@ -35248,7 +35028,7 @@ var stickyLoadBalancingStrategyFactory = /*#__PURE__*/Object.freeze({
|
|
|
35248
35028
|
default: StickyLoadBalancingStrategyFactory
|
|
35249
35029
|
});
|
|
35250
35030
|
|
|
35251
|
-
const logger$
|
|
35031
|
+
const logger$c = getLogger('naylence.fame.sentinel.routing_profile_factory');
|
|
35252
35032
|
const PROFILE_NAME_DEVELOPMENT = 'development';
|
|
35253
35033
|
const PROFILE_NAME_PRODUCTION = 'production';
|
|
35254
35034
|
const PROFILE_NAME_BASIC = 'basic';
|
|
@@ -35299,7 +35079,7 @@ class RoutingProfileFactory extends RoutingPolicyFactory {
|
|
|
35299
35079
|
}
|
|
35300
35080
|
async create(config, ...kwargs) {
|
|
35301
35081
|
const normalized = this.normalizeConfig(config);
|
|
35302
|
-
logger$
|
|
35082
|
+
logger$c.debug('enabling_routing_profile', { profile: normalized.profile });
|
|
35303
35083
|
const routingConfig = this.getProfileConfig(normalized.profile);
|
|
35304
35084
|
const policy = await createResource$1(ROUTING_POLICY_FACTORY_BASE, routingConfig, {
|
|
35305
35085
|
factoryArgs: kwargs,
|
|
@@ -35595,21 +35375,21 @@ class OpenTelemetryTraceEmitter extends BaseTraceEmitter {
|
|
|
35595
35375
|
}
|
|
35596
35376
|
function normalizeOpenTelemetryTraceEmitterOptions(input) {
|
|
35597
35377
|
const source = (input ?? {});
|
|
35598
|
-
const serviceName = extractNonEmptyString(pickFirst(source, ['serviceName', 'service_name'])) ?? 'naylence-service';
|
|
35599
|
-
const tracer = pickFirst(source, ['tracer']);
|
|
35600
|
-
const otelApi = pickFirst(source, [
|
|
35378
|
+
const serviceName = extractNonEmptyString$1(pickFirst$1(source, ['serviceName', 'service_name'])) ?? 'naylence-service';
|
|
35379
|
+
const tracer = pickFirst$1(source, ['tracer']);
|
|
35380
|
+
const otelApi = pickFirst$1(source, [
|
|
35601
35381
|
'otelApi',
|
|
35602
35382
|
'otel_api',
|
|
35603
35383
|
]);
|
|
35604
35384
|
if (!otelApi) {
|
|
35605
35385
|
throw new Error('OpenTelemetryTraceEmitter requires OpenTelemetry API bindings. Provide otelApi via options.');
|
|
35606
35386
|
}
|
|
35607
|
-
const lifecycle = pickFirst(source, [
|
|
35387
|
+
const lifecycle = pickFirst$1(source, [
|
|
35608
35388
|
'lifecycle',
|
|
35609
35389
|
'lifeCycle',
|
|
35610
35390
|
'life_cycle',
|
|
35611
35391
|
]) ?? null;
|
|
35612
|
-
const authStrategy = pickFirst(source, [
|
|
35392
|
+
const authStrategy = pickFirst$1(source, [
|
|
35613
35393
|
'authStrategy',
|
|
35614
35394
|
'auth_strategy',
|
|
35615
35395
|
]) ?? null;
|
|
@@ -35621,7 +35401,7 @@ function normalizeOpenTelemetryTraceEmitterOptions(input) {
|
|
|
35621
35401
|
authStrategy,
|
|
35622
35402
|
};
|
|
35623
35403
|
}
|
|
35624
|
-
function pickFirst(source, keys) {
|
|
35404
|
+
function pickFirst$1(source, keys) {
|
|
35625
35405
|
for (const key of keys) {
|
|
35626
35406
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
35627
35407
|
const value = source[key];
|
|
@@ -35632,7 +35412,7 @@ function pickFirst(source, keys) {
|
|
|
35632
35412
|
}
|
|
35633
35413
|
return undefined;
|
|
35634
35414
|
}
|
|
35635
|
-
function extractNonEmptyString(value) {
|
|
35415
|
+
function extractNonEmptyString$1(value) {
|
|
35636
35416
|
if (typeof value === 'string') {
|
|
35637
35417
|
const trimmed = value.trim();
|
|
35638
35418
|
if (trimmed.length > 0) {
|
|
@@ -35685,6 +35465,241 @@ var openTelemetryTraceEmitter = /*#__PURE__*/Object.freeze({
|
|
|
35685
35465
|
OpenTelemetryTraceEmitter: OpenTelemetryTraceEmitter
|
|
35686
35466
|
});
|
|
35687
35467
|
|
|
35468
|
+
const logger$b = getLogger('naylence.fame.telemetry.otel_setup');
|
|
35469
|
+
const stringFrom = (...codes) => String.fromCharCode(...codes);
|
|
35470
|
+
const OTEL_PREFIX = `${stringFrom(64, 111, 112, 101, 110, 116, 101, 108, 101, 109, 101, 116, 114, 121)}${stringFrom(47)}`;
|
|
35471
|
+
const OTEL_API_SPEC = `${OTEL_PREFIX}${stringFrom(97, 112, 105)}`;
|
|
35472
|
+
const OTEL_RESOURCES_SPEC = `${OTEL_PREFIX}${stringFrom(114, 101, 115, 111, 117, 114, 99, 101, 115)}`;
|
|
35473
|
+
const OTEL_TRACE_NODE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 110, 111, 100, 101)}`;
|
|
35474
|
+
const OTEL_TRACE_BASE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 98, 97, 115, 101)}`;
|
|
35475
|
+
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)}`;
|
|
35476
|
+
let registeredOtel = null;
|
|
35477
|
+
async function setupOtel(options) {
|
|
35478
|
+
const normalized = normalizeSetupOtelOptions(options);
|
|
35479
|
+
try {
|
|
35480
|
+
if (registeredOtel) {
|
|
35481
|
+
logger$b.debug('open_telemetry_reusing_provider', {
|
|
35482
|
+
service_name: normalized.serviceName,
|
|
35483
|
+
});
|
|
35484
|
+
return registeredOtel.control;
|
|
35485
|
+
}
|
|
35486
|
+
const [apiModule, resourcesModule, nodeModule, traceBaseModule] = await Promise.all([
|
|
35487
|
+
import(OTEL_API_SPEC),
|
|
35488
|
+
import(OTEL_RESOURCES_SPEC),
|
|
35489
|
+
import(OTEL_TRACE_NODE_SPEC),
|
|
35490
|
+
import(OTEL_TRACE_BASE_SPEC),
|
|
35491
|
+
]);
|
|
35492
|
+
const { trace } = apiModule;
|
|
35493
|
+
const { defaultResource, resourceFromAttributes } = resourcesModule;
|
|
35494
|
+
const { NodeTracerProvider } = nodeModule;
|
|
35495
|
+
const { BatchSpanProcessor, ConsoleSpanExporter, ParentBasedSampler, AlwaysOnSampler, AlwaysOffSampler, TraceIdRatioBasedSampler, } = traceBaseModule;
|
|
35496
|
+
const currentProvider = trace.getTracerProvider();
|
|
35497
|
+
if (currentProvider && currentProvider instanceof NodeTracerProvider) {
|
|
35498
|
+
return null;
|
|
35499
|
+
}
|
|
35500
|
+
if (currentProvider &&
|
|
35501
|
+
currentProvider.constructor?.name === 'NodeTracerProvider') {
|
|
35502
|
+
logger$b.debug('open_telemetry_existing_node_provider', {
|
|
35503
|
+
service_name: normalized.serviceName,
|
|
35504
|
+
});
|
|
35505
|
+
return null;
|
|
35506
|
+
}
|
|
35507
|
+
logger$b.debug('open_telemetry_initializing', {
|
|
35508
|
+
service_name: normalized.serviceName,
|
|
35509
|
+
endpoint: normalized.endpoint ?? null,
|
|
35510
|
+
environment: normalized.environment ?? null,
|
|
35511
|
+
sampler: normalized.sampler ?? null,
|
|
35512
|
+
headers_present: Boolean(normalized.headers && Object.keys(normalized.headers).length),
|
|
35513
|
+
});
|
|
35514
|
+
const sampler = resolveSampler(normalized.sampler, {
|
|
35515
|
+
ParentBasedSampler,
|
|
35516
|
+
AlwaysOnSampler,
|
|
35517
|
+
AlwaysOffSampler,
|
|
35518
|
+
TraceIdRatioBasedSampler,
|
|
35519
|
+
});
|
|
35520
|
+
const baseResource = defaultResource();
|
|
35521
|
+
const mergedResource = resourceFromAttributes({
|
|
35522
|
+
'service.name': normalized.serviceName,
|
|
35523
|
+
'service.instance.id': generateInstanceId(),
|
|
35524
|
+
'deployment.environment': normalized.environment ?? 'dev',
|
|
35525
|
+
});
|
|
35526
|
+
const resource = baseResource.merge(mergedResource);
|
|
35527
|
+
const exporter = await resolveExporter(normalized.endpoint ?? undefined, normalized.headers, ConsoleSpanExporter);
|
|
35528
|
+
const spanProcessor = new BatchSpanProcessor(exporter);
|
|
35529
|
+
const provider = new NodeTracerProvider({
|
|
35530
|
+
resource,
|
|
35531
|
+
sampler,
|
|
35532
|
+
spanProcessors: [spanProcessor],
|
|
35533
|
+
});
|
|
35534
|
+
provider.register();
|
|
35535
|
+
logger$b.debug('open_telemetry_initialized', {
|
|
35536
|
+
service_name: normalized.serviceName,
|
|
35537
|
+
exporter: exporter.constructor?.name ?? 'unknown_exporter',
|
|
35538
|
+
});
|
|
35539
|
+
const control = {
|
|
35540
|
+
forceFlush: async () => {
|
|
35541
|
+
try {
|
|
35542
|
+
await provider.forceFlush();
|
|
35543
|
+
}
|
|
35544
|
+
catch (flushError) {
|
|
35545
|
+
logger$b.warning('open_telemetry_force_flush_failed', {
|
|
35546
|
+
error: flushError instanceof Error
|
|
35547
|
+
? flushError.message
|
|
35548
|
+
: String(flushError),
|
|
35549
|
+
});
|
|
35550
|
+
}
|
|
35551
|
+
},
|
|
35552
|
+
shutdown: async () => {
|
|
35553
|
+
try {
|
|
35554
|
+
await provider.shutdown();
|
|
35555
|
+
}
|
|
35556
|
+
catch (shutdownError) {
|
|
35557
|
+
logger$b.warning('open_telemetry_shutdown_failed', {
|
|
35558
|
+
error: shutdownError instanceof Error
|
|
35559
|
+
? shutdownError.message
|
|
35560
|
+
: String(shutdownError),
|
|
35561
|
+
});
|
|
35562
|
+
}
|
|
35563
|
+
finally {
|
|
35564
|
+
registeredOtel = null;
|
|
35565
|
+
}
|
|
35566
|
+
},
|
|
35567
|
+
};
|
|
35568
|
+
registeredOtel = {
|
|
35569
|
+
provider,
|
|
35570
|
+
control,
|
|
35571
|
+
};
|
|
35572
|
+
return control;
|
|
35573
|
+
}
|
|
35574
|
+
catch (error) {
|
|
35575
|
+
logger$b.error('open_telemetry_not_available', {
|
|
35576
|
+
error: error instanceof Error ? error.message : String(error),
|
|
35577
|
+
stack: error instanceof Error && error.stack ? error.stack : undefined,
|
|
35578
|
+
});
|
|
35579
|
+
return null;
|
|
35580
|
+
}
|
|
35581
|
+
}
|
|
35582
|
+
function normalizeSetupOtelOptions(options) {
|
|
35583
|
+
const source = (options ?? {});
|
|
35584
|
+
const serviceName = extractNonEmptyString(pickFirst(source, ['serviceName', 'service_name'])) ??
|
|
35585
|
+
'naylence-service';
|
|
35586
|
+
const endpoint = extractNonEmptyString(pickFirst(source, ['endpoint', 'otlpEndpoint', 'otlp_endpoint'])) ?? null;
|
|
35587
|
+
const environment = extractNonEmptyString(pickFirst(source, [
|
|
35588
|
+
'environment',
|
|
35589
|
+
'deploymentEnvironment',
|
|
35590
|
+
'deployment_environment',
|
|
35591
|
+
])) ?? null;
|
|
35592
|
+
const sampler = extractNonEmptyString(pickFirst(source, ['sampler', 'samplingStrategy', 'sampling_strategy'])) ?? null;
|
|
35593
|
+
const headers = extractHeaders(pickFirst(source, ['headers', 'otlpHeaders', 'otlp_headers']));
|
|
35594
|
+
return {
|
|
35595
|
+
serviceName,
|
|
35596
|
+
endpoint,
|
|
35597
|
+
environment,
|
|
35598
|
+
sampler,
|
|
35599
|
+
headers: headers ?? undefined,
|
|
35600
|
+
};
|
|
35601
|
+
}
|
|
35602
|
+
function pickFirst(source, keys) {
|
|
35603
|
+
for (const key of keys) {
|
|
35604
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
35605
|
+
const value = source[key];
|
|
35606
|
+
if (value !== undefined) {
|
|
35607
|
+
return value;
|
|
35608
|
+
}
|
|
35609
|
+
}
|
|
35610
|
+
}
|
|
35611
|
+
return undefined;
|
|
35612
|
+
}
|
|
35613
|
+
function extractNonEmptyString(value) {
|
|
35614
|
+
if (typeof value === 'string') {
|
|
35615
|
+
const trimmed = value.trim();
|
|
35616
|
+
if (trimmed.length > 0) {
|
|
35617
|
+
return trimmed;
|
|
35618
|
+
}
|
|
35619
|
+
}
|
|
35620
|
+
return undefined;
|
|
35621
|
+
}
|
|
35622
|
+
function extractHeaders(value) {
|
|
35623
|
+
if (!value || typeof value !== 'object') {
|
|
35624
|
+
return null;
|
|
35625
|
+
}
|
|
35626
|
+
const headers = {};
|
|
35627
|
+
for (const [key, raw] of Object.entries(value)) {
|
|
35628
|
+
if (typeof raw === 'string') {
|
|
35629
|
+
headers[key] = raw;
|
|
35630
|
+
}
|
|
35631
|
+
}
|
|
35632
|
+
return Object.keys(headers).length > 0 ? headers : null;
|
|
35633
|
+
}
|
|
35634
|
+
function generateInstanceId() {
|
|
35635
|
+
try {
|
|
35636
|
+
if (typeof crypto !== 'undefined' &&
|
|
35637
|
+
typeof crypto.randomUUID === 'function') {
|
|
35638
|
+
return crypto.randomUUID().replace(/-/g, '');
|
|
35639
|
+
}
|
|
35640
|
+
}
|
|
35641
|
+
catch {
|
|
35642
|
+
// Ignore crypto availability errors
|
|
35643
|
+
}
|
|
35644
|
+
const random = Math.random().toString(16).slice(2);
|
|
35645
|
+
return random.padEnd(32, '0').slice(0, 32);
|
|
35646
|
+
}
|
|
35647
|
+
function resolveSampler(samplerSetting, samplers) {
|
|
35648
|
+
const normalized = (samplerSetting ?? 'parentbased_always_on').toLowerCase();
|
|
35649
|
+
let base;
|
|
35650
|
+
if (normalized === 'always_off') {
|
|
35651
|
+
base = new samplers.AlwaysOffSampler();
|
|
35652
|
+
}
|
|
35653
|
+
else if (normalized === 'always_on' ||
|
|
35654
|
+
normalized === 'parentbased_always_on') {
|
|
35655
|
+
base = new samplers.AlwaysOnSampler();
|
|
35656
|
+
}
|
|
35657
|
+
else if (normalized.startsWith('ratio:')) {
|
|
35658
|
+
const ratioValue = Number.parseFloat(normalized.slice('ratio:'.length));
|
|
35659
|
+
const ratio = Number.isFinite(ratioValue)
|
|
35660
|
+
? Math.min(Math.max(ratioValue, 0), 1)
|
|
35661
|
+
: 1;
|
|
35662
|
+
base = new samplers.TraceIdRatioBasedSampler(ratio);
|
|
35663
|
+
}
|
|
35664
|
+
else {
|
|
35665
|
+
base = new samplers.AlwaysOnSampler();
|
|
35666
|
+
}
|
|
35667
|
+
return new samplers.ParentBasedSampler({ root: base });
|
|
35668
|
+
}
|
|
35669
|
+
async function resolveExporter(endpoint, headers, ConsoleSpanExporter) {
|
|
35670
|
+
if (endpoint) {
|
|
35671
|
+
try {
|
|
35672
|
+
const exporterModule = await import(OTEL_EXPORTER_HTTP_SPEC);
|
|
35673
|
+
if ('OTLPTraceExporter' in exporterModule) {
|
|
35674
|
+
const { OTLPTraceExporter } = exporterModule;
|
|
35675
|
+
const exporterOptions = {
|
|
35676
|
+
url: endpoint,
|
|
35677
|
+
};
|
|
35678
|
+
if (headers && Object.keys(headers).length > 0) {
|
|
35679
|
+
exporterOptions.headers = headers;
|
|
35680
|
+
}
|
|
35681
|
+
logger$b.debug('open_telemetry_using_otlp_http_exporter', {
|
|
35682
|
+
endpoint,
|
|
35683
|
+
headers_present: Boolean(headers && Object.keys(headers).length),
|
|
35684
|
+
});
|
|
35685
|
+
return new OTLPTraceExporter(exporterOptions);
|
|
35686
|
+
}
|
|
35687
|
+
}
|
|
35688
|
+
catch (error) {
|
|
35689
|
+
logger$b.error('open_telemetry_exporter_not_available', {
|
|
35690
|
+
error: error instanceof Error ? error.message : String(error),
|
|
35691
|
+
});
|
|
35692
|
+
}
|
|
35693
|
+
}
|
|
35694
|
+
logger$b.warning('open_telemetry_falling_back_to_console_exporter');
|
|
35695
|
+
return new ConsoleSpanExporter();
|
|
35696
|
+
}
|
|
35697
|
+
|
|
35698
|
+
var otelSetup = /*#__PURE__*/Object.freeze({
|
|
35699
|
+
__proto__: null,
|
|
35700
|
+
setupOtel: setupOtel
|
|
35701
|
+
});
|
|
35702
|
+
|
|
35688
35703
|
/**
|
|
35689
35704
|
* Abstract base class for transport listeners.
|
|
35690
35705
|
*
|