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