@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/browser/index.cjs
CHANGED
|
@@ -98,12 +98,12 @@ installProcessEnvShim();
|
|
|
98
98
|
// --- END ENV SHIM ---
|
|
99
99
|
|
|
100
100
|
// This file is auto-generated during build - do not edit manually
|
|
101
|
-
// Generated from package.json version: 0.3.5-test.
|
|
101
|
+
// Generated from package.json version: 0.3.5-test.931
|
|
102
102
|
/**
|
|
103
103
|
* The package version, injected at build time.
|
|
104
104
|
* @internal
|
|
105
105
|
*/
|
|
106
|
-
const VERSION = '0.3.5-test.
|
|
106
|
+
const VERSION = '0.3.5-test.931';
|
|
107
107
|
|
|
108
108
|
/**
|
|
109
109
|
* Fame protocol specific error classes with WebSocket close codes and proper inheritance.
|
|
@@ -30095,239 +30095,10 @@ var noopTraceEmitterFactory = /*#__PURE__*/Object.freeze({
|
|
|
30095
30095
|
default: NoopTraceEmitterFactory
|
|
30096
30096
|
});
|
|
30097
30097
|
|
|
30098
|
-
const logger$n = getLogger('naylence.fame.telemetry.otel_setup');
|
|
30099
|
-
const stringFrom = (...codes) => String.fromCharCode(...codes);
|
|
30100
|
-
const OTEL_PREFIX = `${stringFrom(64, 111, 112, 101, 110, 116, 101, 108, 101, 109, 101, 116, 114, 121)}${stringFrom(47)}`;
|
|
30101
|
-
const OTEL_API_SPEC = `${OTEL_PREFIX}${stringFrom(97, 112, 105)}`;
|
|
30102
|
-
const OTEL_RESOURCES_SPEC = `${OTEL_PREFIX}${stringFrom(114, 101, 115, 111, 117, 114, 99, 101, 115)}`;
|
|
30103
|
-
const OTEL_TRACE_NODE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 110, 111, 100, 101)}`;
|
|
30104
|
-
const OTEL_TRACE_BASE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 98, 97, 115, 101)}`;
|
|
30105
|
-
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)}`;
|
|
30106
|
-
let registeredOtel = null;
|
|
30107
|
-
async function setupOtel(options) {
|
|
30108
|
-
const normalized = normalizeSetupOtelOptions(options);
|
|
30109
|
-
try {
|
|
30110
|
-
if (registeredOtel) {
|
|
30111
|
-
logger$n.debug('open_telemetry_reusing_provider', {
|
|
30112
|
-
service_name: normalized.serviceName,
|
|
30113
|
-
});
|
|
30114
|
-
return registeredOtel.control;
|
|
30115
|
-
}
|
|
30116
|
-
const [apiModule, resourcesModule, nodeModule, traceBaseModule] = await Promise.all([
|
|
30117
|
-
import(OTEL_API_SPEC),
|
|
30118
|
-
import(OTEL_RESOURCES_SPEC),
|
|
30119
|
-
import(OTEL_TRACE_NODE_SPEC),
|
|
30120
|
-
import(OTEL_TRACE_BASE_SPEC),
|
|
30121
|
-
]);
|
|
30122
|
-
const { trace } = apiModule;
|
|
30123
|
-
const { defaultResource, resourceFromAttributes } = resourcesModule;
|
|
30124
|
-
const { NodeTracerProvider } = nodeModule;
|
|
30125
|
-
const { BatchSpanProcessor, ConsoleSpanExporter, ParentBasedSampler, AlwaysOnSampler, AlwaysOffSampler, TraceIdRatioBasedSampler, } = traceBaseModule;
|
|
30126
|
-
const currentProvider = trace.getTracerProvider();
|
|
30127
|
-
if (currentProvider && currentProvider instanceof NodeTracerProvider) {
|
|
30128
|
-
return null;
|
|
30129
|
-
}
|
|
30130
|
-
if (currentProvider &&
|
|
30131
|
-
currentProvider.constructor?.name === 'NodeTracerProvider') {
|
|
30132
|
-
logger$n.debug('open_telemetry_existing_node_provider', {
|
|
30133
|
-
service_name: normalized.serviceName,
|
|
30134
|
-
});
|
|
30135
|
-
return null;
|
|
30136
|
-
}
|
|
30137
|
-
logger$n.debug('open_telemetry_initializing', {
|
|
30138
|
-
service_name: normalized.serviceName,
|
|
30139
|
-
endpoint: normalized.endpoint ?? null,
|
|
30140
|
-
environment: normalized.environment ?? null,
|
|
30141
|
-
sampler: normalized.sampler ?? null,
|
|
30142
|
-
headers_present: Boolean(normalized.headers && Object.keys(normalized.headers).length),
|
|
30143
|
-
});
|
|
30144
|
-
const sampler = resolveSampler(normalized.sampler, {
|
|
30145
|
-
ParentBasedSampler,
|
|
30146
|
-
AlwaysOnSampler,
|
|
30147
|
-
AlwaysOffSampler,
|
|
30148
|
-
TraceIdRatioBasedSampler,
|
|
30149
|
-
});
|
|
30150
|
-
const baseResource = defaultResource();
|
|
30151
|
-
const mergedResource = resourceFromAttributes({
|
|
30152
|
-
'service.name': normalized.serviceName,
|
|
30153
|
-
'service.instance.id': generateInstanceId(),
|
|
30154
|
-
'deployment.environment': normalized.environment ?? 'dev',
|
|
30155
|
-
});
|
|
30156
|
-
const resource = baseResource.merge(mergedResource);
|
|
30157
|
-
const exporter = await resolveExporter(normalized.endpoint ?? undefined, normalized.headers, ConsoleSpanExporter);
|
|
30158
|
-
const spanProcessor = new BatchSpanProcessor(exporter);
|
|
30159
|
-
const provider = new NodeTracerProvider({
|
|
30160
|
-
resource,
|
|
30161
|
-
sampler,
|
|
30162
|
-
spanProcessors: [spanProcessor],
|
|
30163
|
-
});
|
|
30164
|
-
provider.register();
|
|
30165
|
-
logger$n.debug('open_telemetry_initialized', {
|
|
30166
|
-
service_name: normalized.serviceName,
|
|
30167
|
-
exporter: exporter.constructor?.name ?? 'unknown_exporter',
|
|
30168
|
-
});
|
|
30169
|
-
const control = {
|
|
30170
|
-
forceFlush: async () => {
|
|
30171
|
-
try {
|
|
30172
|
-
await provider.forceFlush();
|
|
30173
|
-
}
|
|
30174
|
-
catch (flushError) {
|
|
30175
|
-
logger$n.warning('open_telemetry_force_flush_failed', {
|
|
30176
|
-
error: flushError instanceof Error
|
|
30177
|
-
? flushError.message
|
|
30178
|
-
: String(flushError),
|
|
30179
|
-
});
|
|
30180
|
-
}
|
|
30181
|
-
},
|
|
30182
|
-
shutdown: async () => {
|
|
30183
|
-
try {
|
|
30184
|
-
await provider.shutdown();
|
|
30185
|
-
}
|
|
30186
|
-
catch (shutdownError) {
|
|
30187
|
-
logger$n.warning('open_telemetry_shutdown_failed', {
|
|
30188
|
-
error: shutdownError instanceof Error
|
|
30189
|
-
? shutdownError.message
|
|
30190
|
-
: String(shutdownError),
|
|
30191
|
-
});
|
|
30192
|
-
}
|
|
30193
|
-
finally {
|
|
30194
|
-
registeredOtel = null;
|
|
30195
|
-
}
|
|
30196
|
-
},
|
|
30197
|
-
};
|
|
30198
|
-
registeredOtel = {
|
|
30199
|
-
provider,
|
|
30200
|
-
control,
|
|
30201
|
-
};
|
|
30202
|
-
return control;
|
|
30203
|
-
}
|
|
30204
|
-
catch (error) {
|
|
30205
|
-
logger$n.error('open_telemetry_not_available', {
|
|
30206
|
-
error: error instanceof Error ? error.message : String(error),
|
|
30207
|
-
stack: error instanceof Error && error.stack ? error.stack : undefined,
|
|
30208
|
-
});
|
|
30209
|
-
return null;
|
|
30210
|
-
}
|
|
30211
|
-
}
|
|
30212
|
-
function normalizeSetupOtelOptions(options) {
|
|
30213
|
-
const source = (options ?? {});
|
|
30214
|
-
const serviceName = extractNonEmptyString$1(pickFirst$2(source, ['serviceName', 'service_name'])) ??
|
|
30215
|
-
'naylence-service';
|
|
30216
|
-
const endpoint = extractNonEmptyString$1(pickFirst$2(source, ['endpoint', 'otlpEndpoint', 'otlp_endpoint'])) ?? null;
|
|
30217
|
-
const environment = extractNonEmptyString$1(pickFirst$2(source, [
|
|
30218
|
-
'environment',
|
|
30219
|
-
'deploymentEnvironment',
|
|
30220
|
-
'deployment_environment',
|
|
30221
|
-
])) ?? null;
|
|
30222
|
-
const sampler = extractNonEmptyString$1(pickFirst$2(source, ['sampler', 'samplingStrategy', 'sampling_strategy'])) ?? null;
|
|
30223
|
-
const headers = extractHeaders$1(pickFirst$2(source, ['headers', 'otlpHeaders', 'otlp_headers']));
|
|
30224
|
-
return {
|
|
30225
|
-
serviceName,
|
|
30226
|
-
endpoint,
|
|
30227
|
-
environment,
|
|
30228
|
-
sampler,
|
|
30229
|
-
headers: headers ?? undefined,
|
|
30230
|
-
};
|
|
30231
|
-
}
|
|
30232
|
-
function pickFirst$2(source, keys) {
|
|
30233
|
-
for (const key of keys) {
|
|
30234
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
30235
|
-
const value = source[key];
|
|
30236
|
-
if (value !== undefined) {
|
|
30237
|
-
return value;
|
|
30238
|
-
}
|
|
30239
|
-
}
|
|
30240
|
-
}
|
|
30241
|
-
return undefined;
|
|
30242
|
-
}
|
|
30243
|
-
function extractNonEmptyString$1(value) {
|
|
30244
|
-
if (typeof value === 'string') {
|
|
30245
|
-
const trimmed = value.trim();
|
|
30246
|
-
if (trimmed.length > 0) {
|
|
30247
|
-
return trimmed;
|
|
30248
|
-
}
|
|
30249
|
-
}
|
|
30250
|
-
return undefined;
|
|
30251
|
-
}
|
|
30252
|
-
function extractHeaders$1(value) {
|
|
30253
|
-
if (!value || typeof value !== 'object') {
|
|
30254
|
-
return null;
|
|
30255
|
-
}
|
|
30256
|
-
const headers = {};
|
|
30257
|
-
for (const [key, raw] of Object.entries(value)) {
|
|
30258
|
-
if (typeof raw === 'string') {
|
|
30259
|
-
headers[key] = raw;
|
|
30260
|
-
}
|
|
30261
|
-
}
|
|
30262
|
-
return Object.keys(headers).length > 0 ? headers : null;
|
|
30263
|
-
}
|
|
30264
|
-
function generateInstanceId() {
|
|
30265
|
-
try {
|
|
30266
|
-
if (typeof crypto !== 'undefined' &&
|
|
30267
|
-
typeof crypto.randomUUID === 'function') {
|
|
30268
|
-
return crypto.randomUUID().replace(/-/g, '');
|
|
30269
|
-
}
|
|
30270
|
-
}
|
|
30271
|
-
catch {
|
|
30272
|
-
// Ignore crypto availability errors
|
|
30273
|
-
}
|
|
30274
|
-
const random = Math.random().toString(16).slice(2);
|
|
30275
|
-
return random.padEnd(32, '0').slice(0, 32);
|
|
30276
|
-
}
|
|
30277
|
-
function resolveSampler(samplerSetting, samplers) {
|
|
30278
|
-
const normalized = (samplerSetting ?? 'parentbased_always_on').toLowerCase();
|
|
30279
|
-
let base;
|
|
30280
|
-
if (normalized === 'always_off') {
|
|
30281
|
-
base = new samplers.AlwaysOffSampler();
|
|
30282
|
-
}
|
|
30283
|
-
else if (normalized === 'always_on' ||
|
|
30284
|
-
normalized === 'parentbased_always_on') {
|
|
30285
|
-
base = new samplers.AlwaysOnSampler();
|
|
30286
|
-
}
|
|
30287
|
-
else if (normalized.startsWith('ratio:')) {
|
|
30288
|
-
const ratioValue = Number.parseFloat(normalized.slice('ratio:'.length));
|
|
30289
|
-
const ratio = Number.isFinite(ratioValue)
|
|
30290
|
-
? Math.min(Math.max(ratioValue, 0), 1)
|
|
30291
|
-
: 1;
|
|
30292
|
-
base = new samplers.TraceIdRatioBasedSampler(ratio);
|
|
30293
|
-
}
|
|
30294
|
-
else {
|
|
30295
|
-
base = new samplers.AlwaysOnSampler();
|
|
30296
|
-
}
|
|
30297
|
-
return new samplers.ParentBasedSampler({ root: base });
|
|
30298
|
-
}
|
|
30299
|
-
async function resolveExporter(endpoint, headers, ConsoleSpanExporter) {
|
|
30300
|
-
if (endpoint) {
|
|
30301
|
-
try {
|
|
30302
|
-
const exporterModule = await import(OTEL_EXPORTER_HTTP_SPEC);
|
|
30303
|
-
if ('OTLPTraceExporter' in exporterModule) {
|
|
30304
|
-
const { OTLPTraceExporter } = exporterModule;
|
|
30305
|
-
const exporterOptions = {
|
|
30306
|
-
url: endpoint,
|
|
30307
|
-
};
|
|
30308
|
-
if (headers && Object.keys(headers).length > 0) {
|
|
30309
|
-
exporterOptions.headers = headers;
|
|
30310
|
-
}
|
|
30311
|
-
logger$n.debug('open_telemetry_using_otlp_http_exporter', {
|
|
30312
|
-
endpoint,
|
|
30313
|
-
headers_present: Boolean(headers && Object.keys(headers).length),
|
|
30314
|
-
});
|
|
30315
|
-
return new OTLPTraceExporter(exporterOptions);
|
|
30316
|
-
}
|
|
30317
|
-
}
|
|
30318
|
-
catch (error) {
|
|
30319
|
-
logger$n.error('open_telemetry_exporter_not_available', {
|
|
30320
|
-
error: error instanceof Error ? error.message : String(error),
|
|
30321
|
-
});
|
|
30322
|
-
}
|
|
30323
|
-
}
|
|
30324
|
-
logger$n.warning('open_telemetry_falling_back_to_console_exporter');
|
|
30325
|
-
return new ConsoleSpanExporter();
|
|
30326
|
-
}
|
|
30327
|
-
|
|
30328
30098
|
let openTelemetryTraceEmitterModulePromise = null;
|
|
30329
30099
|
let otelApiModulePromise = null;
|
|
30330
|
-
|
|
30100
|
+
let otelSetupModulePromise = null;
|
|
30101
|
+
const logger$n = getLogger('naylence.fame.telemetry.open_telemetry_trace_emitter_factory');
|
|
30331
30102
|
const MISSING_OTEL_HELP_MESSAGE = 'Missing optional OpenTelemetry dependency. Install @opentelemetry/api (and related packages) to enable trace emission.';
|
|
30332
30103
|
function getOpenTelemetryTraceEmitterModule() {
|
|
30333
30104
|
if (!openTelemetryTraceEmitterModulePromise) {
|
|
@@ -30345,6 +30116,14 @@ function getOtelApiModule() {
|
|
|
30345
30116
|
}
|
|
30346
30117
|
return otelApiModulePromise;
|
|
30347
30118
|
}
|
|
30119
|
+
function getOtelSetupModule() {
|
|
30120
|
+
if (!otelSetupModulePromise) {
|
|
30121
|
+
otelSetupModulePromise = safeImport(() => Promise.resolve().then(function () { return otelSetup; }), '@opentelemetry/api', {
|
|
30122
|
+
helpMessage: MISSING_OTEL_HELP_MESSAGE,
|
|
30123
|
+
});
|
|
30124
|
+
}
|
|
30125
|
+
return otelSetupModulePromise;
|
|
30126
|
+
}
|
|
30348
30127
|
const FACTORY_META$V = {
|
|
30349
30128
|
base: TRACE_EMITTER_FACTORY_BASE_TYPE,
|
|
30350
30129
|
key: 'OpenTelemetryTraceEmitter',
|
|
@@ -30368,7 +30147,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
|
|
|
30368
30147
|
await AuthInjectionStrategyFactory.createAuthInjectionStrategy(normalized.auth);
|
|
30369
30148
|
try {
|
|
30370
30149
|
await authStrategy.apply(mergedHeaders);
|
|
30371
|
-
logger$
|
|
30150
|
+
logger$n.info('trace_emitter_auth_applied', {
|
|
30372
30151
|
service_name: normalized.serviceName,
|
|
30373
30152
|
});
|
|
30374
30153
|
}
|
|
@@ -30384,6 +30163,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
|
|
|
30384
30163
|
}
|
|
30385
30164
|
let lifecycle = null;
|
|
30386
30165
|
try {
|
|
30166
|
+
const { setupOtel } = await getOtelSetupModule();
|
|
30387
30167
|
lifecycle = await setupOtel({
|
|
30388
30168
|
serviceName: normalized.serviceName,
|
|
30389
30169
|
endpoint: normalized.endpoint,
|
|
@@ -30391,7 +30171,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
|
|
|
30391
30171
|
sampler: normalized.sampler,
|
|
30392
30172
|
headers: Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined,
|
|
30393
30173
|
});
|
|
30394
|
-
logger$
|
|
30174
|
+
logger$n.debug('trace_emitter_lifecycle_acquired', {
|
|
30395
30175
|
service_name: normalized.serviceName,
|
|
30396
30176
|
lifecycle_available: Boolean(lifecycle),
|
|
30397
30177
|
});
|
|
@@ -30429,7 +30209,7 @@ class OpenTelemetryTraceEmitterFactory extends TraceEmitterFactory {
|
|
|
30429
30209
|
}
|
|
30430
30210
|
try {
|
|
30431
30211
|
const emitter = new OpenTelemetryTraceEmitter(emitterOptions);
|
|
30432
|
-
logger$
|
|
30212
|
+
logger$n.debug('trace_emitter_created', {
|
|
30433
30213
|
service_name: normalized.serviceName,
|
|
30434
30214
|
has_lifecycle: Boolean(lifecycle),
|
|
30435
30215
|
has_auth_strategy: Boolean(authStrategy),
|
|
@@ -30461,17 +30241,17 @@ function normalizeConfig$p(config) {
|
|
|
30461
30241
|
};
|
|
30462
30242
|
}
|
|
30463
30243
|
const candidate = config;
|
|
30464
|
-
const serviceName = extractString(pickFirst$
|
|
30244
|
+
const serviceName = extractString(pickFirst$2(candidate, ['serviceName', 'service_name'])) ??
|
|
30465
30245
|
'naylence-service';
|
|
30466
|
-
const endpoint = extractString(pickFirst$
|
|
30467
|
-
const environment = extractString(pickFirst$
|
|
30246
|
+
const endpoint = extractString(pickFirst$2(candidate, ['endpoint', 'otlpEndpoint', 'otlp_endpoint'])) ?? null;
|
|
30247
|
+
const environment = extractString(pickFirst$2(candidate, [
|
|
30468
30248
|
'environment',
|
|
30469
30249
|
'deploymentEnvironment',
|
|
30470
30250
|
'deployment_environment',
|
|
30471
30251
|
])) ?? null;
|
|
30472
|
-
const sampler = extractString(pickFirst$
|
|
30473
|
-
const headersFromConfig = extractHeaders(pickFirst$
|
|
30474
|
-
const authConfig = pickFirst$
|
|
30252
|
+
const sampler = extractString(pickFirst$2(candidate, ['sampler', 'samplingStrategy', 'sampling_strategy'])) ?? null;
|
|
30253
|
+
const headersFromConfig = extractHeaders$1(pickFirst$2(candidate, ['headers', 'otlpHeaders', 'otlp_headers']));
|
|
30254
|
+
const authConfig = pickFirst$2(candidate, [
|
|
30475
30255
|
'auth',
|
|
30476
30256
|
]);
|
|
30477
30257
|
return {
|
|
@@ -30489,7 +30269,7 @@ function extractString(value) {
|
|
|
30489
30269
|
}
|
|
30490
30270
|
return undefined;
|
|
30491
30271
|
}
|
|
30492
|
-
function pickFirst$
|
|
30272
|
+
function pickFirst$2(source, keys) {
|
|
30493
30273
|
for (const key of keys) {
|
|
30494
30274
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
30495
30275
|
const value = source[key];
|
|
@@ -30500,7 +30280,7 @@ function pickFirst$1(source, keys) {
|
|
|
30500
30280
|
}
|
|
30501
30281
|
return undefined;
|
|
30502
30282
|
}
|
|
30503
|
-
function extractHeaders(value) {
|
|
30283
|
+
function extractHeaders$1(value) {
|
|
30504
30284
|
if (!value || typeof value !== 'object') {
|
|
30505
30285
|
return null;
|
|
30506
30286
|
}
|
|
@@ -30520,7 +30300,7 @@ var openTelemetryTraceEmitterFactory = /*#__PURE__*/Object.freeze({
|
|
|
30520
30300
|
default: OpenTelemetryTraceEmitterFactory
|
|
30521
30301
|
});
|
|
30522
30302
|
|
|
30523
|
-
const logger$
|
|
30303
|
+
const logger$m = getLogger('naylence.fame.telemetry.trace_emitter_profile_factory');
|
|
30524
30304
|
const PROFILE_NAME_NOOP$1 = 'noop';
|
|
30525
30305
|
const PROFILE_NAME_OPEN_TELEMETRY = 'open-telemetry';
|
|
30526
30306
|
const ENV_VAR_TELEMETRY_SERVICE_NAME = 'FAME_TELEMETRY_SERVICE_NAME';
|
|
@@ -30548,7 +30328,7 @@ class TraceEmitterProfileFactory extends TraceEmitterFactory {
|
|
|
30548
30328
|
async create(config, ...factoryArgs) {
|
|
30549
30329
|
const normalized = normalizeTraceEmitterProfileConfig(config);
|
|
30550
30330
|
const profileConfig = resolveProfileConfig$2(normalized.profile);
|
|
30551
|
-
logger$
|
|
30331
|
+
logger$m.debug('enabling_trace_emitter_profile', {
|
|
30552
30332
|
profile: normalized.profile,
|
|
30553
30333
|
});
|
|
30554
30334
|
const traceEmitter = await TraceEmitterFactory.createTraceEmitter(profileConfig, {
|
|
@@ -30736,7 +30516,7 @@ var httpListenerFactory = /*#__PURE__*/Object.freeze({
|
|
|
30736
30516
|
default: HttpListenerFactory
|
|
30737
30517
|
});
|
|
30738
30518
|
|
|
30739
|
-
const logger$
|
|
30519
|
+
const logger$l = getLogger('naylence.fame.connector.http_stateless_connector');
|
|
30740
30520
|
class HttpStatelessConnector extends BaseAsyncConnector {
|
|
30741
30521
|
constructor(config, dependencies = {}) {
|
|
30742
30522
|
super(config);
|
|
@@ -30782,7 +30562,7 @@ class HttpStatelessConnector extends BaseAsyncConnector {
|
|
|
30782
30562
|
}
|
|
30783
30563
|
catch (error) {
|
|
30784
30564
|
if (error instanceof QueueFullError) {
|
|
30785
|
-
logger$
|
|
30565
|
+
logger$l.warning('receive_queue_full', {
|
|
30786
30566
|
url: this.url,
|
|
30787
30567
|
});
|
|
30788
30568
|
}
|
|
@@ -30804,7 +30584,7 @@ class HttpStatelessConnector extends BaseAsyncConnector {
|
|
|
30804
30584
|
});
|
|
30805
30585
|
if (!response.ok) {
|
|
30806
30586
|
const statusText = response.statusText || 'HTTP error';
|
|
30807
|
-
logger$
|
|
30587
|
+
logger$l.error('http_request_failed', {
|
|
30808
30588
|
url: this.url,
|
|
30809
30589
|
status: response.status,
|
|
30810
30590
|
statusText,
|
|
@@ -30816,7 +30596,7 @@ class HttpStatelessConnector extends BaseAsyncConnector {
|
|
|
30816
30596
|
if (error instanceof FameTransportClose) {
|
|
30817
30597
|
throw error;
|
|
30818
30598
|
}
|
|
30819
|
-
logger$
|
|
30599
|
+
logger$l.error('http_request_error', {
|
|
30820
30600
|
url: this.url,
|
|
30821
30601
|
error: error instanceof Error ? error.message : String(error),
|
|
30822
30602
|
});
|
|
@@ -31030,7 +30810,7 @@ var httpStatelessConnectorFactory = /*#__PURE__*/Object.freeze({
|
|
|
31030
30810
|
default: HttpStatelessConnectorFactory
|
|
31031
30811
|
});
|
|
31032
30812
|
|
|
31033
|
-
const logger$
|
|
30813
|
+
const logger$k = getLogger('naylence.fame.connector.websocket_connector_factory');
|
|
31034
30814
|
let sslLoader = null;
|
|
31035
30815
|
function setWebSocketConnectorSslLoader(loader) {
|
|
31036
30816
|
sslLoader = loader;
|
|
@@ -31314,7 +31094,7 @@ class WebSocketConnectorFactory extends ConnectorFactory {
|
|
|
31314
31094
|
}
|
|
31315
31095
|
async _defaultWebSocketClient(url, subprotocols, headers) {
|
|
31316
31096
|
try {
|
|
31317
|
-
logger$
|
|
31097
|
+
logger$k.debug('websocket_connector_connecting', { url, subprotocols });
|
|
31318
31098
|
if (typeof window !== 'undefined' &&
|
|
31319
31099
|
typeof window.WebSocket !== 'undefined') {
|
|
31320
31100
|
return await this._createBrowserWebSocket(url, subprotocols);
|
|
@@ -31397,7 +31177,7 @@ class WebSocketConnectorFactory extends ConnectorFactory {
|
|
|
31397
31177
|
await Promise.resolve().then(function () { return websocketConnectorNodeSsl; });
|
|
31398
31178
|
}
|
|
31399
31179
|
catch (error) {
|
|
31400
|
-
logger$
|
|
31180
|
+
logger$k.debug('ssl_certificate_loader_import_failed', {
|
|
31401
31181
|
error: error instanceof Error ? error.message : String(error),
|
|
31402
31182
|
});
|
|
31403
31183
|
}
|
|
@@ -31406,7 +31186,7 @@ class WebSocketConnectorFactory extends ConnectorFactory {
|
|
|
31406
31186
|
if (!loader) {
|
|
31407
31187
|
return undefined;
|
|
31408
31188
|
}
|
|
31409
|
-
return await loader(logger$
|
|
31189
|
+
return await loader(logger$k);
|
|
31410
31190
|
}
|
|
31411
31191
|
}
|
|
31412
31192
|
|
|
@@ -31741,7 +31521,7 @@ var atMostOnceDeliveryPolicyFactory = /*#__PURE__*/Object.freeze({
|
|
|
31741
31521
|
default: AtMostOnceDeliveryPolicyFactory
|
|
31742
31522
|
});
|
|
31743
31523
|
|
|
31744
|
-
const logger$
|
|
31524
|
+
const logger$j = getLogger('naylence.fame.delivery.delivery_profile_factory');
|
|
31745
31525
|
const PROFILE_NAME_AT_LEAST_ONCE = 'at-least-once';
|
|
31746
31526
|
const PROFILE_NAME_AT_MOST_ONCE = 'at-most-once';
|
|
31747
31527
|
const ENV_VAR_FAME_DELIVERY_MAX_RETRIES = 'FAME_DELIVERY_MAX_RETRIES';
|
|
@@ -31781,7 +31561,7 @@ class DeliveryProfileFactory extends DeliveryPolicyFactory {
|
|
|
31781
31561
|
async create(config) {
|
|
31782
31562
|
const normalized = normalizeDeliveryProfileConfig(config);
|
|
31783
31563
|
const profileConfig = resolveProfileConfig$1(normalized.profile);
|
|
31784
|
-
logger$
|
|
31564
|
+
logger$j.debug('enabling_delivery_profile', { profile: normalized.profile });
|
|
31785
31565
|
const policy = await DeliveryPolicyFactory.createDeliveryPolicy(profileConfig);
|
|
31786
31566
|
if (!policy) {
|
|
31787
31567
|
throw new Error(`Failed to create delivery policy for profile: ${normalized.profile}`);
|
|
@@ -31864,7 +31644,7 @@ function isSinkService(service) {
|
|
|
31864
31644
|
service.capabilities.includes(core.SINK_CAPABILITY));
|
|
31865
31645
|
}
|
|
31866
31646
|
|
|
31867
|
-
const logger$
|
|
31647
|
+
const logger$i = getLogger('naylence.fame.fabric.in_process');
|
|
31868
31648
|
function normalizeNodeConfig(config) {
|
|
31869
31649
|
if (config && typeof config === 'object' && !Array.isArray(config)) {
|
|
31870
31650
|
return config;
|
|
@@ -31888,13 +31668,13 @@ class InProcessFameFabric extends core.FameFabric {
|
|
|
31888
31668
|
this._versionLogged = true;
|
|
31889
31669
|
const version = await resolveRuntimeVersion();
|
|
31890
31670
|
if (version) {
|
|
31891
|
-
logger$
|
|
31671
|
+
logger$i.info('naylence_runtime_startup', {
|
|
31892
31672
|
version,
|
|
31893
31673
|
fabric_type: 'in_process',
|
|
31894
31674
|
});
|
|
31895
31675
|
}
|
|
31896
31676
|
else {
|
|
31897
|
-
logger$
|
|
31677
|
+
logger$i.warning('naylence_runtime_version_not_found', {
|
|
31898
31678
|
message: 'Could not determine package version',
|
|
31899
31679
|
fabric_type: 'in_process',
|
|
31900
31680
|
});
|
|
@@ -31919,7 +31699,7 @@ class InProcessFameFabric extends core.FameFabric {
|
|
|
31919
31699
|
return;
|
|
31920
31700
|
}
|
|
31921
31701
|
await this.logStartupVersion();
|
|
31922
|
-
logger$
|
|
31702
|
+
logger$i.debug('starting_fabric', { type: 'in_process' });
|
|
31923
31703
|
if (!this._currentNode) {
|
|
31924
31704
|
const nodeConfig = normalizeNodeConfig(this._config?.node ?? null);
|
|
31925
31705
|
this._currentNode = await NodeLikeFactory.createNode(nodeConfig);
|
|
@@ -32054,7 +31834,7 @@ var inProcessFameFabricFactory = /*#__PURE__*/Object.freeze({
|
|
|
32054
31834
|
default: InProcessFameFabricFactory
|
|
32055
31835
|
});
|
|
32056
31836
|
|
|
32057
|
-
const logger$
|
|
31837
|
+
const logger$h = getLogger('naylence.fame.node.admission.admission_profile_factory');
|
|
32058
31838
|
const ENV_VAR_IS_ROOT = 'FAME_ROOT';
|
|
32059
31839
|
const ENV_VAR_JWT_AUDIENCE = 'FAME_JWT_AUDIENCE';
|
|
32060
31840
|
const ENV_VAR_ADMISSION_TOKEN_URL = 'FAME_ADMISSION_TOKEN_URL';
|
|
@@ -32289,7 +32069,7 @@ class AdmissionProfileFactory extends AdmissionClientFactory {
|
|
|
32289
32069
|
async create(config) {
|
|
32290
32070
|
const normalized = normalizeConfig$m(config);
|
|
32291
32071
|
const profileConfig = resolveProfileConfig(normalized.profile);
|
|
32292
|
-
logger$
|
|
32072
|
+
logger$h.debug('enabling_admission_profile', { profile: normalized.profile });
|
|
32293
32073
|
return AdmissionClientFactory.createAdmissionClient(profileConfig);
|
|
32294
32074
|
}
|
|
32295
32075
|
}
|
|
@@ -32328,7 +32108,7 @@ var admissionProfileFactory = /*#__PURE__*/Object.freeze({
|
|
|
32328
32108
|
default: AdmissionProfileFactory
|
|
32329
32109
|
});
|
|
32330
32110
|
|
|
32331
|
-
const logger$
|
|
32111
|
+
const logger$g = getLogger('naylence.fame.node.admission.direct_admission_client');
|
|
32332
32112
|
class DirectAdmissionClient {
|
|
32333
32113
|
constructor(options) {
|
|
32334
32114
|
this.hasUpstream = true;
|
|
@@ -32353,7 +32133,7 @@ class DirectAdmissionClient {
|
|
|
32353
32133
|
}
|
|
32354
32134
|
}
|
|
32355
32135
|
async hello(systemId, instanceId, requestedLogicals) {
|
|
32356
|
-
logger$
|
|
32136
|
+
logger$g.debug('direct_admission_hello_start', {
|
|
32357
32137
|
providedSystemId: systemId,
|
|
32358
32138
|
instanceId,
|
|
32359
32139
|
requestedLogicals,
|
|
@@ -32361,7 +32141,7 @@ class DirectAdmissionClient {
|
|
|
32361
32141
|
const effectiveSystemId = systemId && systemId.trim().length > 0
|
|
32362
32142
|
? systemId
|
|
32363
32143
|
: await core.generateIdAsync({ mode: 'fingerprint' }).catch(async () => {
|
|
32364
|
-
logger$
|
|
32144
|
+
logger$g.debug('direct_admission_fingerprint_generation_failed', {
|
|
32365
32145
|
reason: 'falling back to random id',
|
|
32366
32146
|
});
|
|
32367
32147
|
return core.generateIdAsync({ mode: 'random' });
|
|
@@ -32383,7 +32163,7 @@ class DirectAdmissionClient {
|
|
|
32383
32163
|
const envelope = core.createFameEnvelope({
|
|
32384
32164
|
frame: welcomeFrame,
|
|
32385
32165
|
});
|
|
32386
|
-
logger$
|
|
32166
|
+
logger$g.debug('direct_admission_hello_success', {
|
|
32387
32167
|
systemId: welcomeFrame.systemId,
|
|
32388
32168
|
instanceId: welcomeFrame.instanceId,
|
|
32389
32169
|
acceptedLogicals: welcomeFrame.acceptedLogicals,
|
|
@@ -32560,7 +32340,7 @@ var noAuthInjectionStrategyFactory = /*#__PURE__*/Object.freeze({
|
|
|
32560
32340
|
default: NoAuthInjectionStrategyFactory
|
|
32561
32341
|
});
|
|
32562
32342
|
|
|
32563
|
-
const logger$
|
|
32343
|
+
const logger$f = getLogger('naylence.fame.node.admission.welcome_service_client');
|
|
32564
32344
|
class WelcomeServiceClient {
|
|
32565
32345
|
constructor(options) {
|
|
32566
32346
|
this.hasUpstream = options.hasUpstream ?? options.has_upstream ?? false;
|
|
@@ -32609,7 +32389,7 @@ class WelcomeServiceClient {
|
|
|
32609
32389
|
'Content-Type': 'application/json',
|
|
32610
32390
|
...authHeaders,
|
|
32611
32391
|
};
|
|
32612
|
-
logger$
|
|
32392
|
+
logger$f.debug('welcome_service_hello_request', {
|
|
32613
32393
|
url: this.url,
|
|
32614
32394
|
systemId,
|
|
32615
32395
|
instanceId,
|
|
@@ -32645,7 +32425,7 @@ class WelcomeServiceClient {
|
|
|
32645
32425
|
parsedEnvelope.frame.type !== 'NodeWelcome') {
|
|
32646
32426
|
throw new Error(`Unexpected frame type '${parsedEnvelope.frame?.type ?? 'unknown'}'`);
|
|
32647
32427
|
}
|
|
32648
|
-
logger$
|
|
32428
|
+
logger$f.debug('welcome_service_hello_success', {
|
|
32649
32429
|
systemId: parsedEnvelope.frame.systemId,
|
|
32650
32430
|
targetSystemId: parsedEnvelope.frame.targetSystemId,
|
|
32651
32431
|
assignedPath: parsedEnvelope.frame.assignedPath,
|
|
@@ -33781,7 +33561,7 @@ var noopTokenVerifierFactory = /*#__PURE__*/Object.freeze({
|
|
|
33781
33561
|
default: NoopTokenVerifierFactory
|
|
33782
33562
|
});
|
|
33783
33563
|
|
|
33784
|
-
const logger$
|
|
33564
|
+
const logger$e = getLogger('naylence.fame.security.auth.oauth2_authorizer_factory');
|
|
33785
33565
|
let oauth2AuthorizerModulePromise = null;
|
|
33786
33566
|
function getOAuth2AuthorizerModule() {
|
|
33787
33567
|
if (!oauth2AuthorizerModulePromise) {
|
|
@@ -33808,12 +33588,12 @@ class OAuth2AuthorizerFactory extends AuthorizerFactory {
|
|
|
33808
33588
|
if (normalized.tokenIssuerConfig) {
|
|
33809
33589
|
try {
|
|
33810
33590
|
tokenIssuer = await TokenIssuerFactory.createTokenIssuer(normalized.tokenIssuerConfig);
|
|
33811
|
-
logger$
|
|
33591
|
+
logger$e.debug('token_issuer_created_for_reverse_auth', {
|
|
33812
33592
|
issuer_type: normalized.tokenIssuerConfig.type,
|
|
33813
33593
|
});
|
|
33814
33594
|
}
|
|
33815
33595
|
catch (error) {
|
|
33816
|
-
logger$
|
|
33596
|
+
logger$e.warning('failed_to_create_token_issuer_for_reverse_auth', {
|
|
33817
33597
|
error: error instanceof Error ? error.message : String(error),
|
|
33818
33598
|
issuer_config: normalized.tokenIssuerConfig,
|
|
33819
33599
|
});
|
|
@@ -34766,7 +34546,7 @@ var sessionKeyCredentialProviderFactory = /*#__PURE__*/Object.freeze({
|
|
|
34766
34546
|
normalizeSessionKeyConfig: normalizeSessionKeyConfig
|
|
34767
34547
|
});
|
|
34768
34548
|
|
|
34769
|
-
const logger$
|
|
34549
|
+
const logger$d = getLogger('naylence.fame.security.default_security_manager_factory');
|
|
34770
34550
|
function normalizeDefaultSecurityManagerConfig(config) {
|
|
34771
34551
|
if (!config) {
|
|
34772
34552
|
return null;
|
|
@@ -34934,7 +34714,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
34934
34714
|
return await KeyStoreFactory.createKeyStore(value, createOptions ?? undefined);
|
|
34935
34715
|
}
|
|
34936
34716
|
catch (error) {
|
|
34937
|
-
logger$
|
|
34717
|
+
logger$d.error('failed_to_create_key_store_from_config', {
|
|
34938
34718
|
error: error instanceof Error ? error.message : String(error),
|
|
34939
34719
|
});
|
|
34940
34720
|
return null;
|
|
@@ -34970,7 +34750,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
34970
34750
|
return null;
|
|
34971
34751
|
}
|
|
34972
34752
|
const cryptoProvider = cryptoProviderOverride ?? null;
|
|
34973
|
-
logger$
|
|
34753
|
+
logger$d.debug('auto_create_envelope_signer', {
|
|
34974
34754
|
has_crypto_override: Boolean(cryptoProviderOverride),
|
|
34975
34755
|
override_constructor: cryptoProviderOverride
|
|
34976
34756
|
? (cryptoProviderOverride.constructor?.name ?? 'unknown')
|
|
@@ -34991,7 +34771,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
34991
34771
|
});
|
|
34992
34772
|
}
|
|
34993
34773
|
catch (error) {
|
|
34994
|
-
logger$
|
|
34774
|
+
logger$d.error('failed_to_auto_create_envelope_signer', {
|
|
34995
34775
|
error: error instanceof Error ? error.message : String(error),
|
|
34996
34776
|
exc_info: true,
|
|
34997
34777
|
});
|
|
@@ -35026,7 +34806,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
35026
34806
|
});
|
|
35027
34807
|
}
|
|
35028
34808
|
catch (error) {
|
|
35029
|
-
logger$
|
|
34809
|
+
logger$d.error('failed_to_auto_create_envelope_verifier', {
|
|
35030
34810
|
error: error instanceof Error ? error.message : String(error),
|
|
35031
34811
|
exc_info: true,
|
|
35032
34812
|
});
|
|
@@ -35038,7 +34818,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
35038
34818
|
if (encryptionConfig &&
|
|
35039
34819
|
DefaultSecurityManagerFactory.isConfigLike(encryptionConfig)) {
|
|
35040
34820
|
if (!keyManager) {
|
|
35041
|
-
logger$
|
|
34821
|
+
logger$d.warning('encryption_manager_config_requires_key_manager');
|
|
35042
34822
|
return { encryptionManager: null, secureChannelManager };
|
|
35043
34823
|
}
|
|
35044
34824
|
const manager = await EncryptionManagerFactory.createEncryptionManager(encryptionConfig, {
|
|
@@ -35075,7 +34855,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
35075
34855
|
return { encryptionManager: manager, secureChannelManager };
|
|
35076
34856
|
}
|
|
35077
34857
|
catch (error) {
|
|
35078
|
-
logger$
|
|
34858
|
+
logger$d.error('failed_to_auto_create_encryption_manager', {
|
|
35079
34859
|
error: error instanceof Error ? error.message : String(error),
|
|
35080
34860
|
exc_info: true,
|
|
35081
34861
|
});
|
|
@@ -35118,7 +34898,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
35118
34898
|
});
|
|
35119
34899
|
}
|
|
35120
34900
|
catch (error) {
|
|
35121
|
-
logger$
|
|
34901
|
+
logger$d.error('failed_to_auto_create_key_manager', {
|
|
35122
34902
|
error: error instanceof Error ? error.message : String(error),
|
|
35123
34903
|
exc_info: true,
|
|
35124
34904
|
});
|
|
@@ -35167,7 +34947,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
35167
34947
|
})) ?? null);
|
|
35168
34948
|
}
|
|
35169
34949
|
catch (error) {
|
|
35170
|
-
logger$
|
|
34950
|
+
logger$d.error('failed_to_auto_create_authorizer', {
|
|
35171
34951
|
error: error instanceof Error ? error.message : String(error),
|
|
35172
34952
|
exc_info: true,
|
|
35173
34953
|
});
|
|
@@ -35196,7 +34976,7 @@ class DefaultSecurityManagerFactory extends SecurityManagerFactory {
|
|
|
35196
34976
|
});
|
|
35197
34977
|
}
|
|
35198
34978
|
catch (error) {
|
|
35199
|
-
logger$
|
|
34979
|
+
logger$d.error('failed_to_auto_create_certificate_manager', {
|
|
35200
34980
|
error: error instanceof Error ? error.message : String(error),
|
|
35201
34981
|
exc_info: true,
|
|
35202
34982
|
});
|
|
@@ -35454,7 +35234,7 @@ var defaultKeyManagerFactory = /*#__PURE__*/Object.freeze({
|
|
|
35454
35234
|
default: DefaultKeyManagerFactory
|
|
35455
35235
|
});
|
|
35456
35236
|
|
|
35457
|
-
const logger$
|
|
35237
|
+
const logger$c = getLogger('naylence.fame.security.keys.in_memory_key_store');
|
|
35458
35238
|
class InMemoryKeyStore extends KeyStore {
|
|
35459
35239
|
constructor(initialKeys = null) {
|
|
35460
35240
|
super();
|
|
@@ -35476,7 +35256,7 @@ class InMemoryKeyStore extends KeyStore {
|
|
|
35476
35256
|
}
|
|
35477
35257
|
catch (error) {
|
|
35478
35258
|
if (error instanceof JWKValidationError) {
|
|
35479
|
-
logger$
|
|
35259
|
+
logger$c.warning('rejected_invalid_jwk_individual', {
|
|
35480
35260
|
kid,
|
|
35481
35261
|
error: error.message,
|
|
35482
35262
|
});
|
|
@@ -35520,7 +35300,7 @@ class InMemoryKeyStore extends KeyStore {
|
|
|
35520
35300
|
}
|
|
35521
35301
|
}
|
|
35522
35302
|
if (staleKeys.length > 0) {
|
|
35523
|
-
logger$
|
|
35303
|
+
logger$c.debug('removing_stale_keys_before_adding_new_key', {
|
|
35524
35304
|
new_kid: kid,
|
|
35525
35305
|
physical_path: physicalPath,
|
|
35526
35306
|
base_path: basePath,
|
|
@@ -35548,7 +35328,7 @@ class InMemoryKeyStore extends KeyStore {
|
|
|
35548
35328
|
}
|
|
35549
35329
|
keysByPath[path].push(existingKid);
|
|
35550
35330
|
}
|
|
35551
|
-
logger$
|
|
35331
|
+
logger$c.debug('key_lookup_failed', {
|
|
35552
35332
|
missing_kid: kid,
|
|
35553
35333
|
available_kids: Array.from(this.keys.keys()),
|
|
35554
35334
|
keys_by_path: keysByPath,
|
|
@@ -35597,7 +35377,7 @@ class InMemoryKeyStore extends KeyStore {
|
|
|
35597
35377
|
this.keys.delete(kid);
|
|
35598
35378
|
}
|
|
35599
35379
|
if (keysToRemove.length > 0) {
|
|
35600
|
-
logger$
|
|
35380
|
+
logger$c.debug('removed_keys_for_path', {
|
|
35601
35381
|
physical_path: physicalPath,
|
|
35602
35382
|
removed_key_ids: keysToRemove,
|
|
35603
35383
|
count: keysToRemove.length,
|
|
@@ -35608,7 +35388,7 @@ class InMemoryKeyStore extends KeyStore {
|
|
|
35608
35388
|
async removeKey(kid) {
|
|
35609
35389
|
const removed = this.keys.delete(kid);
|
|
35610
35390
|
if (removed) {
|
|
35611
|
-
logger$
|
|
35391
|
+
logger$c.debug('removed_individual_key', { kid });
|
|
35612
35392
|
}
|
|
35613
35393
|
return removed;
|
|
35614
35394
|
}
|
|
@@ -35974,7 +35754,7 @@ var capabilityAwareRoutingPolicyFactory = /*#__PURE__*/Object.freeze({
|
|
|
35974
35754
|
default: CapabilityAwareRoutingPolicyFactory
|
|
35975
35755
|
});
|
|
35976
35756
|
|
|
35977
|
-
const logger$
|
|
35757
|
+
const logger$b = getLogger('naylence.fame.sentinel.composite_routing_policy_factory');
|
|
35978
35758
|
const FACTORY_META$8 = {
|
|
35979
35759
|
base: ROUTING_POLICY_FACTORY_BASE,
|
|
35980
35760
|
key: 'CompositeRoutingPolicy',
|
|
@@ -36000,13 +35780,13 @@ class CompositeRoutingPolicyFactory extends RoutingPolicyFactory {
|
|
|
36000
35780
|
policies.push(policy);
|
|
36001
35781
|
}
|
|
36002
35782
|
else {
|
|
36003
|
-
logger$
|
|
35783
|
+
logger$b.warning('composite_policy_null_child', {
|
|
36004
35784
|
config: policyConfig,
|
|
36005
35785
|
});
|
|
36006
35786
|
}
|
|
36007
35787
|
}
|
|
36008
35788
|
catch (error) {
|
|
36009
|
-
logger$
|
|
35789
|
+
logger$b.warning('composite_policy_child_error', {
|
|
36010
35790
|
error: error instanceof Error ? error.message : String(error),
|
|
36011
35791
|
config: policyConfig,
|
|
36012
35792
|
});
|
|
@@ -36302,7 +36082,7 @@ var hrwLoadBalancingStrategyFactory = /*#__PURE__*/Object.freeze({
|
|
|
36302
36082
|
default: HRWLoadBalancingStrategyFactory
|
|
36303
36083
|
});
|
|
36304
36084
|
|
|
36305
|
-
const logger$
|
|
36085
|
+
const logger$a = getLogger('naylence.fame.sentinel.load_balancing.load_balancing_profile_factory');
|
|
36306
36086
|
const PROFILE_NAME_RANDOM = 'random';
|
|
36307
36087
|
const PROFILE_NAME_ROUND_ROBIN = 'round_robin';
|
|
36308
36088
|
const PROFILE_NAME_HRW = 'hrw';
|
|
@@ -36336,7 +36116,7 @@ class LoadBalancingProfileFactory extends LoadBalancingStrategyFactory {
|
|
|
36336
36116
|
async create(config, ...factoryArgs) {
|
|
36337
36117
|
const finalConfig = this.normalizeConfig(config);
|
|
36338
36118
|
const profileName = finalConfig.profile ?? PROFILE_NAME_DEVELOPMENT$1;
|
|
36339
|
-
logger$
|
|
36119
|
+
logger$a.debug('enabling_load_balancing_profile', { profile: profileName });
|
|
36340
36120
|
const strategyConfig = this.resolveProfile(profileName);
|
|
36341
36121
|
const strategy = await factory.createResource(LOAD_BALANCING_STRATEGY_FACTORY_BASE, strategyConfig, { factoryArgs });
|
|
36342
36122
|
if (!strategy) {
|
|
@@ -36527,7 +36307,7 @@ var stickyLoadBalancingStrategyFactory = /*#__PURE__*/Object.freeze({
|
|
|
36527
36307
|
default: StickyLoadBalancingStrategyFactory
|
|
36528
36308
|
});
|
|
36529
36309
|
|
|
36530
|
-
const logger$
|
|
36310
|
+
const logger$9 = getLogger('naylence.fame.sentinel.routing_profile_factory');
|
|
36531
36311
|
const PROFILE_NAME_DEVELOPMENT = 'development';
|
|
36532
36312
|
const PROFILE_NAME_PRODUCTION = 'production';
|
|
36533
36313
|
const PROFILE_NAME_BASIC = 'basic';
|
|
@@ -36578,7 +36358,7 @@ class RoutingProfileFactory extends RoutingPolicyFactory {
|
|
|
36578
36358
|
}
|
|
36579
36359
|
async create(config, ...kwargs) {
|
|
36580
36360
|
const normalized = this.normalizeConfig(config);
|
|
36581
|
-
logger$
|
|
36361
|
+
logger$9.debug('enabling_routing_profile', { profile: normalized.profile });
|
|
36582
36362
|
const routingConfig = this.getProfileConfig(normalized.profile);
|
|
36583
36363
|
const policy = await factory.createResource(ROUTING_POLICY_FACTORY_BASE, routingConfig, {
|
|
36584
36364
|
factoryArgs: kwargs,
|
|
@@ -36874,21 +36654,21 @@ class OpenTelemetryTraceEmitter extends BaseTraceEmitter {
|
|
|
36874
36654
|
}
|
|
36875
36655
|
function normalizeOpenTelemetryTraceEmitterOptions(input) {
|
|
36876
36656
|
const source = (input ?? {});
|
|
36877
|
-
const serviceName = extractNonEmptyString(pickFirst(source, ['serviceName', 'service_name'])) ?? 'naylence-service';
|
|
36878
|
-
const tracer = pickFirst(source, ['tracer']);
|
|
36879
|
-
const otelApi = pickFirst(source, [
|
|
36657
|
+
const serviceName = extractNonEmptyString$1(pickFirst$1(source, ['serviceName', 'service_name'])) ?? 'naylence-service';
|
|
36658
|
+
const tracer = pickFirst$1(source, ['tracer']);
|
|
36659
|
+
const otelApi = pickFirst$1(source, [
|
|
36880
36660
|
'otelApi',
|
|
36881
36661
|
'otel_api',
|
|
36882
36662
|
]);
|
|
36883
36663
|
if (!otelApi) {
|
|
36884
36664
|
throw new Error('OpenTelemetryTraceEmitter requires OpenTelemetry API bindings. Provide otelApi via options.');
|
|
36885
36665
|
}
|
|
36886
|
-
const lifecycle = pickFirst(source, [
|
|
36666
|
+
const lifecycle = pickFirst$1(source, [
|
|
36887
36667
|
'lifecycle',
|
|
36888
36668
|
'lifeCycle',
|
|
36889
36669
|
'life_cycle',
|
|
36890
36670
|
]) ?? null;
|
|
36891
|
-
const authStrategy = pickFirst(source, [
|
|
36671
|
+
const authStrategy = pickFirst$1(source, [
|
|
36892
36672
|
'authStrategy',
|
|
36893
36673
|
'auth_strategy',
|
|
36894
36674
|
]) ?? null;
|
|
@@ -36900,7 +36680,7 @@ function normalizeOpenTelemetryTraceEmitterOptions(input) {
|
|
|
36900
36680
|
authStrategy,
|
|
36901
36681
|
};
|
|
36902
36682
|
}
|
|
36903
|
-
function pickFirst(source, keys) {
|
|
36683
|
+
function pickFirst$1(source, keys) {
|
|
36904
36684
|
for (const key of keys) {
|
|
36905
36685
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
36906
36686
|
const value = source[key];
|
|
@@ -36911,7 +36691,7 @@ function pickFirst(source, keys) {
|
|
|
36911
36691
|
}
|
|
36912
36692
|
return undefined;
|
|
36913
36693
|
}
|
|
36914
|
-
function extractNonEmptyString(value) {
|
|
36694
|
+
function extractNonEmptyString$1(value) {
|
|
36915
36695
|
if (typeof value === 'string') {
|
|
36916
36696
|
const trimmed = value.trim();
|
|
36917
36697
|
if (trimmed.length > 0) {
|
|
@@ -36964,6 +36744,241 @@ var openTelemetryTraceEmitter = /*#__PURE__*/Object.freeze({
|
|
|
36964
36744
|
OpenTelemetryTraceEmitter: OpenTelemetryTraceEmitter
|
|
36965
36745
|
});
|
|
36966
36746
|
|
|
36747
|
+
const logger$8 = getLogger('naylence.fame.telemetry.otel_setup');
|
|
36748
|
+
const stringFrom = (...codes) => String.fromCharCode(...codes);
|
|
36749
|
+
const OTEL_PREFIX = `${stringFrom(64, 111, 112, 101, 110, 116, 101, 108, 101, 109, 101, 116, 114, 121)}${stringFrom(47)}`;
|
|
36750
|
+
const OTEL_API_SPEC = `${OTEL_PREFIX}${stringFrom(97, 112, 105)}`;
|
|
36751
|
+
const OTEL_RESOURCES_SPEC = `${OTEL_PREFIX}${stringFrom(114, 101, 115, 111, 117, 114, 99, 101, 115)}`;
|
|
36752
|
+
const OTEL_TRACE_NODE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 110, 111, 100, 101)}`;
|
|
36753
|
+
const OTEL_TRACE_BASE_SPEC = `${OTEL_PREFIX}${stringFrom(115, 100, 107, 45, 116, 114, 97, 99, 101, 45, 98, 97, 115, 101)}`;
|
|
36754
|
+
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)}`;
|
|
36755
|
+
let registeredOtel = null;
|
|
36756
|
+
async function setupOtel(options) {
|
|
36757
|
+
const normalized = normalizeSetupOtelOptions(options);
|
|
36758
|
+
try {
|
|
36759
|
+
if (registeredOtel) {
|
|
36760
|
+
logger$8.debug('open_telemetry_reusing_provider', {
|
|
36761
|
+
service_name: normalized.serviceName,
|
|
36762
|
+
});
|
|
36763
|
+
return registeredOtel.control;
|
|
36764
|
+
}
|
|
36765
|
+
const [apiModule, resourcesModule, nodeModule, traceBaseModule] = await Promise.all([
|
|
36766
|
+
import(OTEL_API_SPEC),
|
|
36767
|
+
import(OTEL_RESOURCES_SPEC),
|
|
36768
|
+
import(OTEL_TRACE_NODE_SPEC),
|
|
36769
|
+
import(OTEL_TRACE_BASE_SPEC),
|
|
36770
|
+
]);
|
|
36771
|
+
const { trace } = apiModule;
|
|
36772
|
+
const { defaultResource, resourceFromAttributes } = resourcesModule;
|
|
36773
|
+
const { NodeTracerProvider } = nodeModule;
|
|
36774
|
+
const { BatchSpanProcessor, ConsoleSpanExporter, ParentBasedSampler, AlwaysOnSampler, AlwaysOffSampler, TraceIdRatioBasedSampler, } = traceBaseModule;
|
|
36775
|
+
const currentProvider = trace.getTracerProvider();
|
|
36776
|
+
if (currentProvider && currentProvider instanceof NodeTracerProvider) {
|
|
36777
|
+
return null;
|
|
36778
|
+
}
|
|
36779
|
+
if (currentProvider &&
|
|
36780
|
+
currentProvider.constructor?.name === 'NodeTracerProvider') {
|
|
36781
|
+
logger$8.debug('open_telemetry_existing_node_provider', {
|
|
36782
|
+
service_name: normalized.serviceName,
|
|
36783
|
+
});
|
|
36784
|
+
return null;
|
|
36785
|
+
}
|
|
36786
|
+
logger$8.debug('open_telemetry_initializing', {
|
|
36787
|
+
service_name: normalized.serviceName,
|
|
36788
|
+
endpoint: normalized.endpoint ?? null,
|
|
36789
|
+
environment: normalized.environment ?? null,
|
|
36790
|
+
sampler: normalized.sampler ?? null,
|
|
36791
|
+
headers_present: Boolean(normalized.headers && Object.keys(normalized.headers).length),
|
|
36792
|
+
});
|
|
36793
|
+
const sampler = resolveSampler(normalized.sampler, {
|
|
36794
|
+
ParentBasedSampler,
|
|
36795
|
+
AlwaysOnSampler,
|
|
36796
|
+
AlwaysOffSampler,
|
|
36797
|
+
TraceIdRatioBasedSampler,
|
|
36798
|
+
});
|
|
36799
|
+
const baseResource = defaultResource();
|
|
36800
|
+
const mergedResource = resourceFromAttributes({
|
|
36801
|
+
'service.name': normalized.serviceName,
|
|
36802
|
+
'service.instance.id': generateInstanceId(),
|
|
36803
|
+
'deployment.environment': normalized.environment ?? 'dev',
|
|
36804
|
+
});
|
|
36805
|
+
const resource = baseResource.merge(mergedResource);
|
|
36806
|
+
const exporter = await resolveExporter(normalized.endpoint ?? undefined, normalized.headers, ConsoleSpanExporter);
|
|
36807
|
+
const spanProcessor = new BatchSpanProcessor(exporter);
|
|
36808
|
+
const provider = new NodeTracerProvider({
|
|
36809
|
+
resource,
|
|
36810
|
+
sampler,
|
|
36811
|
+
spanProcessors: [spanProcessor],
|
|
36812
|
+
});
|
|
36813
|
+
provider.register();
|
|
36814
|
+
logger$8.debug('open_telemetry_initialized', {
|
|
36815
|
+
service_name: normalized.serviceName,
|
|
36816
|
+
exporter: exporter.constructor?.name ?? 'unknown_exporter',
|
|
36817
|
+
});
|
|
36818
|
+
const control = {
|
|
36819
|
+
forceFlush: async () => {
|
|
36820
|
+
try {
|
|
36821
|
+
await provider.forceFlush();
|
|
36822
|
+
}
|
|
36823
|
+
catch (flushError) {
|
|
36824
|
+
logger$8.warning('open_telemetry_force_flush_failed', {
|
|
36825
|
+
error: flushError instanceof Error
|
|
36826
|
+
? flushError.message
|
|
36827
|
+
: String(flushError),
|
|
36828
|
+
});
|
|
36829
|
+
}
|
|
36830
|
+
},
|
|
36831
|
+
shutdown: async () => {
|
|
36832
|
+
try {
|
|
36833
|
+
await provider.shutdown();
|
|
36834
|
+
}
|
|
36835
|
+
catch (shutdownError) {
|
|
36836
|
+
logger$8.warning('open_telemetry_shutdown_failed', {
|
|
36837
|
+
error: shutdownError instanceof Error
|
|
36838
|
+
? shutdownError.message
|
|
36839
|
+
: String(shutdownError),
|
|
36840
|
+
});
|
|
36841
|
+
}
|
|
36842
|
+
finally {
|
|
36843
|
+
registeredOtel = null;
|
|
36844
|
+
}
|
|
36845
|
+
},
|
|
36846
|
+
};
|
|
36847
|
+
registeredOtel = {
|
|
36848
|
+
provider,
|
|
36849
|
+
control,
|
|
36850
|
+
};
|
|
36851
|
+
return control;
|
|
36852
|
+
}
|
|
36853
|
+
catch (error) {
|
|
36854
|
+
logger$8.error('open_telemetry_not_available', {
|
|
36855
|
+
error: error instanceof Error ? error.message : String(error),
|
|
36856
|
+
stack: error instanceof Error && error.stack ? error.stack : undefined,
|
|
36857
|
+
});
|
|
36858
|
+
return null;
|
|
36859
|
+
}
|
|
36860
|
+
}
|
|
36861
|
+
function normalizeSetupOtelOptions(options) {
|
|
36862
|
+
const source = (options ?? {});
|
|
36863
|
+
const serviceName = extractNonEmptyString(pickFirst(source, ['serviceName', 'service_name'])) ??
|
|
36864
|
+
'naylence-service';
|
|
36865
|
+
const endpoint = extractNonEmptyString(pickFirst(source, ['endpoint', 'otlpEndpoint', 'otlp_endpoint'])) ?? null;
|
|
36866
|
+
const environment = extractNonEmptyString(pickFirst(source, [
|
|
36867
|
+
'environment',
|
|
36868
|
+
'deploymentEnvironment',
|
|
36869
|
+
'deployment_environment',
|
|
36870
|
+
])) ?? null;
|
|
36871
|
+
const sampler = extractNonEmptyString(pickFirst(source, ['sampler', 'samplingStrategy', 'sampling_strategy'])) ?? null;
|
|
36872
|
+
const headers = extractHeaders(pickFirst(source, ['headers', 'otlpHeaders', 'otlp_headers']));
|
|
36873
|
+
return {
|
|
36874
|
+
serviceName,
|
|
36875
|
+
endpoint,
|
|
36876
|
+
environment,
|
|
36877
|
+
sampler,
|
|
36878
|
+
headers: headers ?? undefined,
|
|
36879
|
+
};
|
|
36880
|
+
}
|
|
36881
|
+
function pickFirst(source, keys) {
|
|
36882
|
+
for (const key of keys) {
|
|
36883
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
36884
|
+
const value = source[key];
|
|
36885
|
+
if (value !== undefined) {
|
|
36886
|
+
return value;
|
|
36887
|
+
}
|
|
36888
|
+
}
|
|
36889
|
+
}
|
|
36890
|
+
return undefined;
|
|
36891
|
+
}
|
|
36892
|
+
function extractNonEmptyString(value) {
|
|
36893
|
+
if (typeof value === 'string') {
|
|
36894
|
+
const trimmed = value.trim();
|
|
36895
|
+
if (trimmed.length > 0) {
|
|
36896
|
+
return trimmed;
|
|
36897
|
+
}
|
|
36898
|
+
}
|
|
36899
|
+
return undefined;
|
|
36900
|
+
}
|
|
36901
|
+
function extractHeaders(value) {
|
|
36902
|
+
if (!value || typeof value !== 'object') {
|
|
36903
|
+
return null;
|
|
36904
|
+
}
|
|
36905
|
+
const headers = {};
|
|
36906
|
+
for (const [key, raw] of Object.entries(value)) {
|
|
36907
|
+
if (typeof raw === 'string') {
|
|
36908
|
+
headers[key] = raw;
|
|
36909
|
+
}
|
|
36910
|
+
}
|
|
36911
|
+
return Object.keys(headers).length > 0 ? headers : null;
|
|
36912
|
+
}
|
|
36913
|
+
function generateInstanceId() {
|
|
36914
|
+
try {
|
|
36915
|
+
if (typeof crypto !== 'undefined' &&
|
|
36916
|
+
typeof crypto.randomUUID === 'function') {
|
|
36917
|
+
return crypto.randomUUID().replace(/-/g, '');
|
|
36918
|
+
}
|
|
36919
|
+
}
|
|
36920
|
+
catch {
|
|
36921
|
+
// Ignore crypto availability errors
|
|
36922
|
+
}
|
|
36923
|
+
const random = Math.random().toString(16).slice(2);
|
|
36924
|
+
return random.padEnd(32, '0').slice(0, 32);
|
|
36925
|
+
}
|
|
36926
|
+
function resolveSampler(samplerSetting, samplers) {
|
|
36927
|
+
const normalized = (samplerSetting ?? 'parentbased_always_on').toLowerCase();
|
|
36928
|
+
let base;
|
|
36929
|
+
if (normalized === 'always_off') {
|
|
36930
|
+
base = new samplers.AlwaysOffSampler();
|
|
36931
|
+
}
|
|
36932
|
+
else if (normalized === 'always_on' ||
|
|
36933
|
+
normalized === 'parentbased_always_on') {
|
|
36934
|
+
base = new samplers.AlwaysOnSampler();
|
|
36935
|
+
}
|
|
36936
|
+
else if (normalized.startsWith('ratio:')) {
|
|
36937
|
+
const ratioValue = Number.parseFloat(normalized.slice('ratio:'.length));
|
|
36938
|
+
const ratio = Number.isFinite(ratioValue)
|
|
36939
|
+
? Math.min(Math.max(ratioValue, 0), 1)
|
|
36940
|
+
: 1;
|
|
36941
|
+
base = new samplers.TraceIdRatioBasedSampler(ratio);
|
|
36942
|
+
}
|
|
36943
|
+
else {
|
|
36944
|
+
base = new samplers.AlwaysOnSampler();
|
|
36945
|
+
}
|
|
36946
|
+
return new samplers.ParentBasedSampler({ root: base });
|
|
36947
|
+
}
|
|
36948
|
+
async function resolveExporter(endpoint, headers, ConsoleSpanExporter) {
|
|
36949
|
+
if (endpoint) {
|
|
36950
|
+
try {
|
|
36951
|
+
const exporterModule = await import(OTEL_EXPORTER_HTTP_SPEC);
|
|
36952
|
+
if ('OTLPTraceExporter' in exporterModule) {
|
|
36953
|
+
const { OTLPTraceExporter } = exporterModule;
|
|
36954
|
+
const exporterOptions = {
|
|
36955
|
+
url: endpoint,
|
|
36956
|
+
};
|
|
36957
|
+
if (headers && Object.keys(headers).length > 0) {
|
|
36958
|
+
exporterOptions.headers = headers;
|
|
36959
|
+
}
|
|
36960
|
+
logger$8.debug('open_telemetry_using_otlp_http_exporter', {
|
|
36961
|
+
endpoint,
|
|
36962
|
+
headers_present: Boolean(headers && Object.keys(headers).length),
|
|
36963
|
+
});
|
|
36964
|
+
return new OTLPTraceExporter(exporterOptions);
|
|
36965
|
+
}
|
|
36966
|
+
}
|
|
36967
|
+
catch (error) {
|
|
36968
|
+
logger$8.error('open_telemetry_exporter_not_available', {
|
|
36969
|
+
error: error instanceof Error ? error.message : String(error),
|
|
36970
|
+
});
|
|
36971
|
+
}
|
|
36972
|
+
}
|
|
36973
|
+
logger$8.warning('open_telemetry_falling_back_to_console_exporter');
|
|
36974
|
+
return new ConsoleSpanExporter();
|
|
36975
|
+
}
|
|
36976
|
+
|
|
36977
|
+
var otelSetup = /*#__PURE__*/Object.freeze({
|
|
36978
|
+
__proto__: null,
|
|
36979
|
+
setupOtel: setupOtel
|
|
36980
|
+
});
|
|
36981
|
+
|
|
36967
36982
|
const logger$7 = getLogger('naylence.fame.connector.default_http_server');
|
|
36968
36983
|
function makeKey(host, port) {
|
|
36969
36984
|
return `${host}:${port}`;
|