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