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